diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml new file mode 100644 index 00000000..0331c9cc --- /dev/null +++ b/.buildkite/pipeline.yml @@ -0,0 +1,75 @@ +agents: + queue: normal +steps: + - label: ":foundry: Test Sequence V3 with Go RPC Server" + key: "test-v3-rpc" + commands: + - | + # Check if GITHUB_SSH_KEY is set + if [ -z "$GITHUB_SSH_KEY" ]; then + echo "Error: GITHUB_SSH_KEY is not set" + exit 1 + fi + + # Install required packages + apt-get update + apt-get install -y curl git ssh build-essential + + # Setup SSH key + mkdir -p ~/.ssh + echo "$GITHUB_SSH_KEY" > ~/.ssh/id_rsa + chmod 600 ~/.ssh/id_rsa + ssh-keyscan github.com >> ~/.ssh/known_hosts + + GO_VERSION="1.20" + curl -L "https://golang.org/dl/go${GO_VERSION}.linux-amd64.tar.gz" | tar -xz -C /usr/local + export PATH=$PATH:/usr/local/go/bin + go version + + # Install Foundry + curl -L https://foundry.paradigm.xyz | bash + source ~/.bashrc + foundryup + + # The go-sequence repository is already mounted at the current working directory + ls -la + + # Clone the sequence-v3 repository + git clone git@github.com:0xsequence/sequence-v3.git + + # Start the RPC server + echo "Starting Go RPC server..." + go run ./cmd/sequence/ server & + + # Wait a moment for the server to start + sleep 5 + + # Install dependencies for sequence-v3 + cd sequence-v3 + forge install + + # Run specific tests in the v3 module + echo "Running BaseSig.t.sol tests..." + forge test --mp test/modules/BaseSig.t.sol -vvv + + echo "Running Calls.t.sol tests..." + forge test --mp test/modules/Calls.t.sol -vvv + + echo "Running Payload.t.sol tests..." + forge test --mp test/modules/Payload.t.sol -vvv + + echo "Running Stage1Module.t.sol tests..." + forge test --mp test/Stage1Module.t.sol -vvv + + # Cleanup SSH key + rm -f ~/.ssh/id_rsa + plugins: + - docker#v5.3.0: + image: "ubuntu:22.04" + environment: + - "GITHUB_SSH_KEY" + - "FOUNDRY_PROFILE=default" + - "GO_VERSION=1.20" + workdir: "/workdir/go-sequence" + volumes: + - ".:/workdir/go-sequence" diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index eecfd05e..718cb501 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -55,7 +55,44 @@ jobs: if: ${{ steps.pnpm-cache.outputs.cache-hit != 'true' }} - name: Boot testchain - run: make start-testchain-verbose & + run: make start-testchain-geth-verbose & + + - name: Wait for testchain to initialize + run: | + echo "Waiting for testchain to initialize..." + sleep 15 + curl -s http://localhost:8545 -H"Content-type: application/json" -X POST -d '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}' || (echo "Testchain not ready"; exit 1) + echo "Testchain is ready" - name: Test run: make test + + v3-workflow: + name: Workflow for V3 + runs-on: ubuntu-latest + + steps: + - name: Get Commit SHA + run: echo "COMMIT_SHA=${{ github.event.pull_request.head.sha }}" + - name: Trigger Private Workflow + uses: actions/github-script@v6 + # TODO: remove this once the private workflow is fixed + continue-on-error: true + with: + script: | + const { owner, repo } = context; + const privateOwner = '0xsequence'; + const privateRepo = 'sequence-v3'; + const workflowId = 13719302078; + const token = ${{ secrets.GITHUB_TOKEN }}; + const octokit = new Octokit({ auth: token }); + await octokit.rest.repos.createDispatchEvent({ + owner: privateOwner, + repo: privateRepo, + workflow_id: workflowId, + ref: 'main', + inputs: { + sdk_type: 'go', + commit_hash: process.env.COMMIT_SHA + } + }); diff --git a/.gitignore b/.gitignore index 794f728a..82f936e7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,7 @@ node_modules intents/intent.gen.ts + +sequence-server + +.claude diff --git a/Makefile b/Makefile index c00a2e0f..14e20638 100644 --- a/Makefile +++ b/Makefile @@ -14,13 +14,30 @@ test: wait-on-chain check-testchain-running go-test go-test: go clean -testcache && go test $(TEST_FLAGS) -run=$(TEST) ./... +clean: + @go clean -testcache + +.PHONY: mock +mock: + go generate ./mock + test-concurrently: cd ./testutil/chain && pnpm test + +# +# Testchain +# start-testchain: - cd ./testutil/chain && pnpm start:geth + cd ./testutil/chain && pnpm start:hardhat start-testchain-verbose: + cd ./testutil/chain && pnpm start:hardhat:verbose + +start-testchain-geth: + cd ./testutil/chain && pnpm start:geth + +start-testchain-geth-verbose: cd ./testutil/chain && pnpm start:geth:verbose start-testchain-anvil: @@ -29,16 +46,9 @@ start-testchain-anvil: start-testchain-anvil-verbose: cd ./testutil/chain && pnpm start:anvil:verbose -clean: - @go clean -testcache - check-testchain-running: @curl http://localhost:8545 -H"Content-type: application/json" -X POST -d '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}' --write-out '%{http_code}' --silent --output /dev/null | grep 200 > /dev/null \ || { echo "*****"; echo "Oops! testchain is not running. Please run 'make start-testchain' in another terminal or use 'test-concurrently'."; echo "*****"; exit 1; } wait-on-chain: cd ./testutil/chain && pnpm wait:server - -.PHONY: mock -mock: - go generate ./mock diff --git a/auth.go b/auth.go index 070e9834..d8759da8 100644 --- a/auth.go +++ b/auth.go @@ -13,6 +13,7 @@ import ( "github.com/0xsequence/go-sequence/core" v1 "github.com/0xsequence/go-sequence/core/v1" v2 "github.com/0xsequence/go-sequence/core/v2" + v3 "github.com/0xsequence/go-sequence/core/v3" "github.com/0xsequence/go-sequence/eip6492" "github.com/goware/logger" ) @@ -164,6 +165,10 @@ func V2ValidateSequenceAccountProofWith(walletContext WalletContext) ethauth.Val return GenericValidateSequenceAccountProofWith[*v2.WalletConfig](walletContext) } +func V3ValidateSequenceAccountProofWith(walletContext WalletContext) ethauth.ValidatorFunc { + return GenericValidateSequenceAccountProofWith[*v3.WalletConfig](walletContext) +} + func ValidateSequenceAccountProofWith(walletContext WalletContext) ethauth.ValidatorFunc { return V2ValidateSequenceAccountProofWith(walletContext) } @@ -172,6 +177,7 @@ func GeneralValidateSequenceAccountProofWith(walletContexts WalletContexts) etha return func(ctx context.Context, provider *ethrpc.Provider, chainID *big.Int, proof *ethauth.Proof) (bool, string, error) { validatorFuncV1 := GenericValidateSequenceAccountProofWith[*v1.WalletConfig](walletContexts[1]) validatorFuncV2 := GenericValidateSequenceAccountProofWith[*v2.WalletConfig](walletContexts[2]) + validatorFuncV3 := GenericValidateSequenceAccountProofWith[*v3.WalletConfig](walletContexts[3]) valid1, address1, err1 := validatorFuncV2(ctx, provider, chainID, proof) if valid1 && err1 == nil { @@ -183,6 +189,11 @@ func GeneralValidateSequenceAccountProofWith(walletContexts WalletContexts) etha return valid2, address2, nil } - return false, "", fmt.Errorf("ValidateSequenceAccountProof failed. %v, %v", err1, err2) + valid3, address3, err3 := validatorFuncV3(ctx, provider, chainID, proof) + if valid3 && err3 == nil { + return valid3, address3, nil + } + + return false, "", fmt.Errorf("ValidateSequenceAccountProof failed. %v, %v, %v", err1, err2, err3) } } diff --git a/cmd/sequence/address.go b/cmd/sequence/address.go new file mode 100644 index 00000000..ccc7ae77 --- /dev/null +++ b/cmd/sequence/address.go @@ -0,0 +1,69 @@ +package main + +import ( + "fmt" + + "github.com/0xsequence/ethkit/go-ethereum/common" + "github.com/0xsequence/ethkit/go-ethereum/common/hexutil" + "github.com/0xsequence/go-sequence" + "github.com/0xsequence/go-sequence/contracts" + "github.com/0xsequence/go-sequence/core" + "github.com/spf13/cobra" +) + +func calculateAddress(params *AddressCalculateParams) (string, error) { + imageHash := core.ImageHash{Hash: common.HexToHash(params.ImageHash)} + factory := common.HexToAddress(params.Factory) + module := common.HexToAddress(params.Module) + + creationCode := params.CreationCode + if creationCode == "" { + creationCode = hexutil.Encode(contracts.V3.CreationCode) + } + + address, err := sequence.AddressFromImageHash(imageHash, sequence.WalletContext{ + FactoryAddress: factory, + MainModuleAddress: module, + CreationCode: creationCode, + }) + if err != nil { + return "", fmt.Errorf("failed to calculate address: %w", err) + } + + return address.Hex(), nil +} + +func newAddressCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "address", + Short: "Address utilities", + } + + var params AddressCalculateParams + + calculateCmd := &cobra.Command{ + Use: "calculate", + Short: "Calculate counterfactual address", + RunE: func(cmd *cobra.Command, args []string) error { + address, err := calculateAddress(¶ms) + if err != nil { + return err + } + fmt.Println(address) + return nil + }, + } + + calculateCmd.Flags().StringVar(¶ms.ImageHash, "image-hash", "", "Image hash") + calculateCmd.Flags().StringVar(¶ms.Factory, "factory", "", "Factory address") + calculateCmd.Flags().StringVar(¶ms.Module, "module", "", "Module address") + calculateCmd.Flags().StringVar(¶ms.CreationCode, "creation-code", "", "Creation code (optional)") + + calculateCmd.MarkFlagRequired("image-hash") + calculateCmd.MarkFlagRequired("factory") + calculateCmd.MarkFlagRequired("module") + + cmd.AddCommand(calculateCmd) + + return cmd +} diff --git a/cmd/sequence/config.go b/cmd/sequence/config.go new file mode 100644 index 00000000..b7062532 --- /dev/null +++ b/cmd/sequence/config.go @@ -0,0 +1,713 @@ +package main + +import ( + "context" + "encoding/json" + "fmt" + "log" + "math/big" + "os" + "strings" + + "github.com/0xsequence/ethkit/go-ethereum/common" + "github.com/0xsequence/go-sequence/core" + v3 "github.com/0xsequence/go-sequence/core/v3" + "github.com/davecgh/go-spew/spew" + "github.com/spf13/cobra" +) + +type ConfigElement interface { + ToTree() v3.WalletConfigTree +} + +type SignerElement struct { + Address common.Address + Weight uint8 +} + +func (s *SignerElement) ToTree() v3.WalletConfigTree { + return &v3.WalletConfigTreeAddressLeaf{ + Weight: s.Weight, + Address: s.Address, + } +} + +type SignatureConfigElement struct { + Address common.Address + Type string + Values []string + Weight uint8 +} + +func (s *SignatureConfigElement) ToTree() v3.WalletConfigTree { + return &v3.WalletConfigTreeAddressLeaf{ + Weight: s.Weight, + Address: s.Address, + } +} + +func parseSignature(signature string) (*SignatureConfigElement, error) { + parts := strings.Split(signature, ":") + if len(parts) < 5 { + return nil, fmt.Errorf("invalid signature format: %s", signature) + } + + address := strings.TrimPrefix(parts[0], "--signature ") + + weight, ok := new(big.Int).SetString(parts[len(parts)-1], 10) + if !ok { + return nil, fmt.Errorf("invalid weight: %s", parts[len(parts)-1]) + } + + return &SignatureConfigElement{ + Address: common.HexToAddress(address), + Type: parts[1], + Values: parts[2 : len(parts)-1], + Weight: uint8(weight.Uint64()), + }, nil +} + +type SapientSignerElement struct { + Address common.Address + Weight uint8 + ImageHash core.ImageHash +} + +func (s *SapientSignerElement) ToTree() v3.WalletConfigTree { + return &v3.WalletConfigTreeSapientSignerLeaf{ + Weight: s.Weight, + Address: s.Address, + ImageHash_: s.ImageHash, + } +} + +type SubdigestElement struct { + Digest common.Hash +} + +func (s *SubdigestElement) ToTree() v3.WalletConfigTree { + return &v3.WalletConfigTreeSubdigestLeaf{ + Subdigest: s.Digest, + } +} + +type AnyAddressSubdigestElement struct { + Digest common.Hash +} + +func (s *AnyAddressSubdigestElement) ToTree() v3.WalletConfigTree { + return &v3.WalletConfigTreeAnyAddressSubdigestLeaf{ + Digest: s.Digest, + } +} + +type NestedElement struct { + Threshold uint16 + Weight uint8 + Elements []ConfigElement +} + +func (n *NestedElement) ToTree() v3.WalletConfigTree { + var trees []v3.WalletConfigTree + for _, element := range n.Elements { + trees = append(trees, element.ToTree()) + } + balancedInnerTree := buildBalancedTree(trees) + return &v3.WalletConfigTreeNestedLeaf{ + Weight: n.Weight, + Threshold: n.Threshold, + Tree: balancedInnerTree, + } +} + +type NodeElement struct { + Hash core.ImageHash +} + +func (n *NodeElement) ToTree() v3.WalletConfigTree { + return &v3.WalletConfigTreeNodeLeaf{ + Node: n.Hash, + } +} + +type JSONOutput struct { + Threshold string `json:"threshold"` + Checkpoint string `json:"checkpoint"` + Topology interface{} `json:"topology"` + Checkpointer string `json:"checkpointer,omitempty"` +} + +type JSONLeaf struct { + Type string `json:"type"` + Address string `json:"address,omitempty"` + Weight string `json:"weight,omitempty"` + Hash string `json:"hash,omitempty"` + Digest string `json:"digest,omitempty"` + ImageHash string `json:"imageHash,omitempty"` +} + +type JSONNode struct { + Left interface{} `json:"left"` + Right interface{} `json:"right"` +} + +type JSONNested struct { + Type string `json:"type"` + Tree interface{} `json:"tree"` + Weight string `json:"weight"` + Threshold string `json:"threshold"` +} + +type ConfigOutput struct { + Threshold string `json:"threshold"` + Checkpoint string `json:"checkpoint"` + Topology interface{} `json:"topology"` + Checkpointer string `json:"checkpointer,omitempty"` +} + +func (c ConfigOutput) MarshalJSON() ([]byte, error) { + return json.Marshal(JSONOutput(c)) +} + +type TopologyOutput struct { + Type string `json:"type,omitempty"` + Address string `json:"address,omitempty"` + Weight string `json:"weight,omitempty"` + Left *TopologyOutput `json:"left,omitempty"` + Right *TopologyOutput `json:"right,omitempty"` +} + +func (t TopologyOutput) MarshalJSON() ([]byte, error) { + m := make(map[string]interface{}) + + if t.Type != "" { + m["type"] = t.Type + } + if t.Address != "" { + m["address"] = t.Address + } + if t.Weight != "" { + m["weight"] = t.Weight + } + if t.Left != nil { + m["left"] = t.Left + } + if t.Right != nil { + m["right"] = t.Right + } + + return json.Marshal(m) +} + +func treeToMap(tree v3.WalletConfigTree) interface{} { + return treeToMapInternal(tree, true) +} + +func treeToMapInternal(tree v3.WalletConfigTree, isRoot bool) interface{} { + switch t := tree.(type) { + case *v3.WalletConfigTreeAddressLeaf: + return JSONLeaf{ + Type: "signer", + Address: t.Address.Hex(), + Weight: fmt.Sprintf("%d", t.Weight), + } + case *v3.WalletConfigTreeSapientSignerLeaf: + return JSONLeaf{ + Type: "sapient-signer", + Address: t.Address.Hex(), + Weight: fmt.Sprintf("%d", t.Weight), + ImageHash: t.ImageHash_.Hex(), + } + case *v3.WalletConfigTreeSubdigestLeaf: + return JSONLeaf{ + Type: "subdigest", + Digest: t.Subdigest.Hex(), + } + case *v3.WalletConfigTreeAnyAddressSubdigestLeaf: + return JSONLeaf{ + Type: "any-address-subdigest", + Digest: t.Digest.Hex(), + } + case *v3.WalletConfigTreeNestedLeaf: + if isRoot { + return treeToMapInternal(t.Tree, false) + } + return JSONNested{ + Type: "nested", + Threshold: fmt.Sprintf("%d", t.Threshold), + Weight: fmt.Sprintf("%d", t.Weight), + Tree: treeToMapInternal(t.Tree, false), + } + case *v3.WalletConfigTreeNodeLeaf: + return JSONLeaf{ + Type: "node", + Hash: t.Node.Hex(), + } + case *v3.WalletConfigTreeNode: + return []interface{}{ + treeToMapInternal(t.Left, false), + treeToMapInternal(t.Right, false), + } + default: + log.Printf("Unsupported tree type: %T", tree) + return nil + } +} + +// Parse the entire input content into a list of ConfigElements +func parseElements(input string) ([]ConfigElement, error) { + var elements []ConfigElement + var current strings.Builder + parenthesesCount := 0 + + input = strings.TrimSpace(input) + for i := 0; i < len(input); i++ { + char := rune(input[i]) + + switch char { + case '(': + parenthesesCount++ + current.WriteRune(char) + case ')': + if parenthesesCount == 0 { + return nil, fmt.Errorf("mismatched closing parenthesis at position %d", i) + } + parenthesesCount-- + current.WriteRune(char) + if parenthesesCount == 0 && current.Len() > 0 { + // Complete nested element + elementStr := current.String() + element, err := parseElement(elementStr) + if err != nil { + return nil, err + } + elements = append(elements, element) + current.Reset() + } + case ' ': + if parenthesesCount == 0 && current.Len() > 0 { + elementStr := current.String() + element, err := parseElement(elementStr) + if err != nil { + return nil, err + } + elements = append(elements, element) + current.Reset() + } else if parenthesesCount > 0 { + current.WriteRune(char) + } + default: + current.WriteRune(char) + } + } + + // Handle the last element + if current.Len() > 0 { + if parenthesesCount > 0 { + return nil, fmt.Errorf("unclosed parenthesis in input") + } + elementStr := current.String() + element, err := parseElement(elementStr) + if err != nil { + return nil, err + } + elements = append(elements, element) + } + + if len(elements) == 0 { + return nil, fmt.Errorf("no valid elements found in input") + } + + return elements, nil +} + +// Parse a single element (nested or non-nested) +func parseElement(element string) (ConfigElement, error) { + log.Printf("Parsing element: %q", element) + + if strings.HasPrefix(element, "nested:") { + return parseNestedElement(element) + } + + if strings.HasPrefix(element, "--signature ") || strings.Contains(element, ":hash:") { + return parseSignature(element) + } + + parts := strings.Split(element, ":") + if len(parts) < 2 { + return nil, fmt.Errorf("invalid element format: %s", element) + } + + switch parts[0] { + case "signer": + if len(parts) != 3 { + return nil, fmt.Errorf("invalid signer format: %s", element) + } + weight, ok := new(big.Int).SetString(parts[2], 10) + if !ok { + return nil, fmt.Errorf("invalid weight: %s", parts[2]) + } + return &SignerElement{ + Address: common.HexToAddress(parts[1]), + Weight: uint8(weight.Uint64()), + }, nil + + case "sapient": + if len(parts) != 4 { + return nil, fmt.Errorf("invalid sapient format: %s", element) + } + weight, ok := new(big.Int).SetString(parts[3], 10) + if !ok { + return nil, fmt.Errorf("invalid weight: %s", parts[3]) + } + return &SapientSignerElement{ + Address: common.HexToAddress(parts[2]), + ImageHash: core.ImageHash{Hash: common.HexToHash(parts[1])}, + Weight: uint8(weight.Uint64()), + }, nil + + case "subdigest": + if len(parts) != 2 { + return nil, fmt.Errorf("invalid subdigest format: %s", element) + } + hash := common.HexToHash(parts[1]) + return &SubdigestElement{Digest: hash}, nil + + case "any-address-subdigest": + if len(parts) != 2 { + return nil, fmt.Errorf("invalid any-address-subdigest format: %s", element) + } + hash := common.HexToHash(parts[1]) + return &AnyAddressSubdigestElement{Digest: hash}, nil + + case "node": + if len(parts) != 2 { + return nil, fmt.Errorf("invalid node format: %s", element) + } + hash := common.HexToHash(parts[1]) + return &NodeElement{ + Hash: core.ImageHash{Hash: hash}, + }, nil + + default: + return nil, fmt.Errorf("unknown element type: %s", parts[0]) + } +} + +// Parse a nested element +func parseNestedElement(element string) (*NestedElement, error) { + log.Printf("Parsing nested element: %q", element) + + headerEnd := strings.Index(element, "(") + if headerEnd == -1 { + return nil, fmt.Errorf("invalid nested format: missing opening parenthesis") + } + + header := strings.TrimSpace(element[:headerEnd]) + parts := strings.Split(header, ":") + + if len(parts) < 3 || parts[0] != "nested" { + return nil, fmt.Errorf("invalid nested format: header should be 'nested:threshold:weight'") + } + + threshold, ok := new(big.Int).SetString(parts[1], 10) + if !ok { + return nil, fmt.Errorf("invalid threshold: %s", parts[1]) + } + + weight, ok := new(big.Int).SetString(parts[2], 10) + if !ok { + return nil, fmt.Errorf("invalid weight: %s", parts[2]) + } + + contentStart := headerEnd + 1 + contentEnd := strings.LastIndex(element, ")") + if contentEnd == -1 || contentEnd <= contentStart { + return nil, fmt.Errorf("invalid nested format: missing or mismatched closing parenthesis") + } + + content := element[contentStart:contentEnd] + log.Printf("Nested content: %q", content) + + elements, err := parseElements(content) + if err != nil { + return nil, fmt.Errorf("failed to parse nested elements: %w", err) + } + + return &NestedElement{ + Threshold: uint16(threshold.Uint64()), + Weight: uint8(weight.Uint64()), + Elements: elements, + }, nil +} + +// Updated createConfig function +func createConfig(threshold uint16, checkpoint uint64, content string, checkpointer string) (ConfigOutput, error) { + log.Printf("Creating config with threshold: %d, checkpoint: %d, content: %q, checkpointer: %q", threshold, checkpoint, content, checkpointer) + + elements, err := parseElements(content) + if err != nil { + return ConfigOutput{}, fmt.Errorf("failed to parse elements: %w", err) + } + + var tree v3.WalletConfigTree + if len(elements) == 1 { + tree = elements[0].ToTree() + } else { + var trees []v3.WalletConfigTree + for _, element := range elements { + trees = append(trees, element.ToTree()) + } + tree = &v3.WalletConfigTreeNestedLeaf{ + Threshold: threshold, + Weight: 0, + Tree: buildBalancedTree(trees), + } + } + + topology := treeToMap(tree) + + return ConfigOutput{ + Threshold: fmt.Sprintf("%d", threshold), + Checkpoint: fmt.Sprintf("%d", checkpoint), + Topology: topology, + Checkpointer: checkpointer, + }, nil +} + +// Updated createNewConfig function +func createNewConfig(params *ConfigNewParams) (string, error) { + threshold, ok := new(big.Int).SetString(params.Threshold, 10) + if !ok { + return "", fmt.Errorf("invalid threshold: %s", params.Threshold) + } + if !threshold.IsUint64() || threshold.Uint64() > uint64(^uint16(0)) { + return "", fmt.Errorf("threshold too large: %s", params.Threshold) + } + + checkpoint, ok := new(big.Int).SetString(params.Checkpoint, 10) + if !ok { + return "", fmt.Errorf("invalid checkpoint: %s", params.Checkpoint) + } + if !checkpoint.IsUint64() { + return "", fmt.Errorf("checkpoint too large: %s", params.Checkpoint) + } + + if params.Checkpointer != "" { + if !common.IsHexAddress(params.Checkpointer) { + return "", fmt.Errorf("invalid checkpointer address: %s", params.Checkpointer) + } + } + + if params.From != "flat" { + return "", fmt.Errorf("unsupported 'from' format: %s", params.From) + } + + log.Printf("Creating config with threshold=%s checkpoint=%s content=%q checkpointer=%q", params.Threshold, params.Checkpoint, params.Content, params.Checkpointer) + + config, err := createConfig(uint16(threshold.Uint64()), uint64(checkpoint.Uint64()), params.Content, params.Checkpointer) + if err != nil { + return "", fmt.Errorf("failed to create config: %w", err) + } + + jsonConfig, err := json.Marshal(config) + if err != nil { + return "", fmt.Errorf("failed to marshal config: %w", err) + } + + log.Printf("Created config: %s", string(jsonConfig)) + return string(jsonConfig), nil +} + +func buildBalancedTree(elements []v3.WalletConfigTree) v3.WalletConfigTree { + if len(elements) == 0 { + return nil + } + if len(elements) == 1 { + return elements[0] + } + mid := len(elements) / 2 + left := buildBalancedTree(elements[:mid]) + right := buildBalancedTree(elements[mid:]) + return &v3.WalletConfigTreeNode{ + Left: left, + Right: right, + } +} + +func buildTree(element interface{}) (interface{}, error) { + switch v := element.(type) { + case []interface{}: + if len(v) != 2 { + return nil, fmt.Errorf("array must have exactly two elements") + } + left, err := buildTree(v[0]) + if err != nil { + return nil, err + } + right, err := buildTree(v[1]) + if err != nil { + return nil, err + } + return map[string]interface{}{ + "left": left, + "right": right, + }, nil + case map[string]interface{}: + if tree, ok := v["tree"]; ok && v["type"] == "nested" { + processedTree, err := buildTree(tree) + if err != nil { + return nil, fmt.Errorf("failed to process nested tree: %w", err) + } + v["tree"] = processedTree + } + return v, nil + case string: + return map[string]interface{}{ + "type": "node", + "hash": v, + }, nil + default: + return nil, fmt.Errorf("unsupported element type: %T", v) + } +} + +func handleRawConfig(input []byte) (map[string]interface{}, error) { + var rawConfig map[string]interface{} + if err := json.Unmarshal(input, &rawConfig); err != nil { + return nil, fmt.Errorf("failed to parse raw config: %w", err) + } + + if input, ok := rawConfig["input"].(map[string]interface{}); ok { + rawConfig = input + } + + if topology := rawConfig["topology"]; topology != nil { + tree, err := buildTree(topology) + if err != nil { + return nil, fmt.Errorf("failed to build tree from topology: %w", err) + } + rawConfig["tree"] = tree + delete(rawConfig, "topology") + } + + return rawConfig, nil +} + +// calculateImageHash calculates the image hash for a given configuration +func calculateImageHash(params *ConfigImageHashParams) (string, error) { + rawConfig, err := handleRawConfig(params.Input) + if err != nil { + return "", fmt.Errorf("failed to handle raw config: %w", err) + } + + config, err := v3.Core.DecodeWalletConfig(rawConfig) + if err != nil { + return "", fmt.Errorf("failed to decode wallet config: %w", err) + } + + log.Printf("Decoded config: %+v", config) + spew.Dump(config) + + imageHash := config.ImageHash() + return "0x" + common.Bytes2Hex(imageHash.Bytes()), nil +} + +// encodeConfig encodes a configuration into a signature format +func encodeConfig(params *ConfigEncodeParams) (string, error) { + rawConfig, err := handleRawConfig(params.Input) + if err != nil { + return "", fmt.Errorf("failed to handle raw config: %w", err) + } + + config, err := v3.Core.DecodeWalletConfig(rawConfig) + if err != nil { + return "", fmt.Errorf("failed to decode wallet config: %w", err) + } + + spew.Dump(config) + + sig, err := config.BuildNoChainIDSignature(context.Background(), func(ctx context.Context, signer common.Address, sigs []core.SignerSignature) (core.SignerSignatureType, []byte, error) { + return 0, nil, core.ErrSigningNoSigner + }, false) + if err != nil { + return "", fmt.Errorf("failed to build signature: %w", err) + } + + data, err := sig.Data() + if err != nil { + return "", fmt.Errorf("failed to encode signature: %w", err) + } + + return "0x" + common.Bytes2Hex(data), nil +} + +func newConfigCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "config", + Short: "Configuration utilities", + } + + var newParams ConfigNewParams + newCmd := &cobra.Command{ + Use: "new [elements...]", + Short: "Create a new configuration", + RunE: func(cmd *cobra.Command, args []string) error { + newParams.Content = strings.Join(args, " ") + result, err := createNewConfig(&newParams) + if err != nil { + return err + } + fmt.Println(result) + return nil + }, + } + newCmd.Flags().StringVar(&newParams.Threshold, "threshold", "1", "Threshold value for the configuration") + newCmd.Flags().StringVar(&newParams.Checkpoint, "checkpoint", "0", "Checkpoint value for the configuration") + newCmd.Flags().StringVar(&newParams.Checkpointer, "checkpointer", "", "Optional checkpointer address for the configuration") + newCmd.Flags().StringVar(&newParams.From, "from", "flat", "The process to use to create the configuration") + + imageHashCmd := &cobra.Command{ + Use: "image-hash [input]", + Short: "Calculate image hash from hex input", + RunE: func(cmd *cobra.Command, args []string) error { + if len(args) != 1 { + return fmt.Errorf("input is required") + } + params := &ConfigImageHashParams{ + Input: json.RawMessage(args[0]), + } + result, err := calculateImageHash(params) + if err != nil { + return err + } + fmt.Println(result) + return nil + }, + } + + encodeCmd := &cobra.Command{ + Use: "encode [input]", + Short: "Encode configuration from hex input", + RunE: func(cmd *cobra.Command, args []string) error { + if len(args) != 1 { + return fmt.Errorf("input is required") + } + params := &ConfigEncodeParams{ + Input: json.RawMessage(args[0]), + } + result, err := encodeConfig(params) + if err != nil { + return err + } + fmt.Println(result) + return nil + }, + } + + cmd.AddCommand(newCmd, imageHashCmd, encodeCmd) + + log.SetOutput(os.Stderr) + + return cmd +} diff --git a/cmd/sequence/dev_tools.go b/cmd/sequence/dev_tools.go new file mode 100644 index 00000000..d46a1d31 --- /dev/null +++ b/cmd/sequence/dev_tools.go @@ -0,0 +1,362 @@ +package main + +import ( + "crypto/sha256" + "encoding/binary" + "encoding/json" + "fmt" + "math" + "math/big" + "math/rand" + + "github.com/0xsequence/ethkit/go-ethereum/common" + "github.com/spf13/cobra" +) + +type RandomOptions struct { + SeededRandom *SeededRandom + MinThresholdOnNested uint64 + MaxPermissions uint64 + MaxRules uint64 + CheckpointerMode string // 'no', 'random', or 'yes' +} + +type SeededRandom struct { + currentSeed string + hash []byte + index int +} + +func createSeededRandom(seed string) *SeededRandom { + hash := sha256.Sum256([]byte(seed)) + return &SeededRandom{ + currentSeed: seed, + hash: hash[:], + index: 0, + } +} + +func (r *SeededRandom) Float64() float64 { + if r.index >= len(r.hash)-4 { + r.currentSeed = r.currentSeed + "1" + hash := sha256.Sum256([]byte(r.currentSeed)) + r.hash = hash[:] + r.index = 0 + } + + value := float64(binary.LittleEndian.Uint32(r.hash[r.index:r.index+4])) / float64(math.MaxUint32) + r.index += 4 + return value +} + +func randomBytes(length int, options *RandomOptions) []byte { + bytes := make([]byte, length) + if options != nil && options.SeededRandom != nil { + for i := 0; i < length; i++ { + bytes[i] = byte(options.SeededRandom.Float64() * 256) + } + return bytes + } + // Fallback to crypto/rand in a real implementation + for i := 0; i < length; i++ { + bytes[i] = byte(math.Floor(rand.Float64() * 256)) + } + return bytes +} + +func randomBigInt(max *big.Int, options *RandomOptions) *big.Int { + if options != nil && options.SeededRandom != nil { + val := new(big.Int).SetUint64(uint64(options.SeededRandom.Float64() * float64(max.Uint64()))) + return val + } + // Fallback to math/rand in a real implementation + val := new(big.Int).SetUint64(uint64(rand.Float64() * float64(max.Uint64()))) + return val +} + +func randomAddress(options *RandomOptions) common.Address { + return common.BytesToAddress(randomBytes(20, options)) +} + +func generateRandomTopology(depth int, options *RandomOptions) interface{} { + if depth <= 0 { + var leafType int + if options != nil && options.SeededRandom != nil { + leafType = int(options.SeededRandom.Float64() * 5) + } else { + leafType = int(rand.Float64() * 5) + } + + switch leafType { + case 0: // SignerLeaf + return map[string]interface{}{ + "type": "signer", + "address": randomAddress(options).Hex(), + "weight": randomBigInt(big.NewInt(256), options).Uint64(), + } + + case 1: // SapientSigner + return map[string]interface{}{ + "type": "sapient-signer", + "address": randomAddress(options).Hex(), + "weight": randomBigInt(big.NewInt(256), options).Uint64(), + "imageHash": fmt.Sprintf("0x%x", randomBytes(32, options)), + } + + case 2: // SubdigestLeaf + return map[string]interface{}{ + "type": "subdigest", + "digest": fmt.Sprintf("0x%x", randomBytes(32, options)), + } + + case 3: // NodeLeaf + return fmt.Sprintf("0x%x", randomBytes(32, options)) + + case 4: // NestedLeaf + minThreshold := big.NewInt(0) + if options != nil && options.MinThresholdOnNested > 0 { + minThreshold = big.NewInt(int64(options.MinThresholdOnNested)) + } + maxThreshold := new(big.Int).Sub(big.NewInt(65535), minThreshold) + threshold := new(big.Int).Add(minThreshold, randomBigInt(maxThreshold, options)) + + return map[string]interface{}{ + "type": "nested", + "tree": generateRandomTopology(0, options), + "weight": randomBigInt(big.NewInt(256), options).Uint64(), + "threshold": threshold.Uint64(), + } + } + } + + // Generate a node with two random subtrees + return []interface{}{ + generateRandomTopology(depth-1, options), + generateRandomTopology(depth-1, options), + } +} + +func generateRandomRule(options *RandomOptions) map[string]interface{} { + var cumulative bool + if options != nil && options.SeededRandom != nil { + cumulative = options.SeededRandom.Float64()*2 > 1 + } else { + cumulative = rand.Float64()*2 > 1 + } + + return map[string]interface{}{ + "cumulative": cumulative, + "operation": uint8(rand.Float64() * 4), + "value": fmt.Sprintf("0x%x", randomBytes(32, options)), + "offset": randomBigInt(big.NewInt(100), options).Uint64(), + "mask": fmt.Sprintf("0x%x", randomBytes(32, options)), + } +} + +func generateRandomPermission(options *RandomOptions) map[string]interface{} { + var rulesCount uint64 + if options != nil && options.MaxRules > 0 { + if options.SeededRandom != nil { + rulesCount = uint64(options.SeededRandom.Float64()*float64(options.MaxRules)) + 1 + } else { + rulesCount = uint64(rand.Float64()*float64(options.MaxRules)) + 1 + } + } else { + rulesCount = uint64(rand.Float64()*5) + 1 + } + + rules := make([]interface{}, rulesCount) + for i := uint64(0); i < rulesCount; i++ { + rules[i] = generateRandomRule(options) + } + + return map[string]interface{}{ + "target": randomAddress(options).Hex(), + "rules": rules, + } +} + +func generateSessionsTopology(depth int, options *RandomOptions) interface{} { + var isLeaf bool + if options != nil && options.SeededRandom != nil { + isLeaf = options.SeededRandom.Float64()*2 > 1 + } else { + isLeaf = rand.Float64()*2 > 1 + } + + if isLeaf || depth <= 1 { + var permissionsCount uint64 + if options != nil && options.MaxPermissions > 0 { + if options.SeededRandom != nil { + permissionsCount = uint64(options.SeededRandom.Float64()*float64(options.MaxPermissions)) + 1 + } else { + permissionsCount = uint64(rand.Float64()*float64(options.MaxPermissions)) + 1 + } + } else { + permissionsCount = uint64(rand.Float64()*5) + 1 + } + + permissions := make([]interface{}, permissionsCount) + for i := uint64(0); i < permissionsCount; i++ { + permissions[i] = generateRandomPermission(options) + } + + return map[string]interface{}{ + "signer": randomAddress(options).Hex(), + "valueLimit": randomBigInt(big.NewInt(100), options).Uint64(), + "deadline": randomBigInt(big.NewInt(1000), options).Uint64(), + "permissions": permissions, + } + } + + return []interface{}{ + generateSessionsTopology(depth-1, options), + generateSessionsTopology(depth-1, options), + } +} + +func doRandomConfig(maxDepth int, options *RandomOptions) (string, error) { + config := map[string]interface{}{ + "threshold": randomBigInt(big.NewInt(100), options).Uint64(), + "checkpoint": randomBigInt(big.NewInt(1000), options).Uint64(), + "topology": generateRandomTopology(maxDepth, options), + } + + // Handle checkpointer based on mode + if options != nil { + switch options.CheckpointerMode { + case "yes": + config["checkpointer"] = randomAddress(options).Hex() + case "random": + isAdded := false + if options.SeededRandom != nil { + isAdded = options.SeededRandom.Float64() > 0.5 + } else { + isAdded = rand.Float64() > 0.5 + } + if isAdded { + config["checkpointer"] = randomAddress(options).Hex() + } + } + } + + output, err := json.MarshalIndent(config, "", " ") + if err != nil { + return "", err + } + + return string(output), nil +} + +func doRandomSessionTopology(maxDepth int, options *RandomOptions) (string, error) { + topology := generateSessionsTopology(maxDepth, options) + output, err := json.MarshalIndent(topology, "", " ") + if err != nil { + return "", err + } + return string(output), nil +} + +// Handler functions for RPC calls +func handleRandomConfig(p *RandomConfigParams) (string, error) { + options := &RandomOptions{ + MinThresholdOnNested: p.MinThresholdOnNested, + CheckpointerMode: p.Checkpointer, + } + + if p.Seed != "" { + options.SeededRandom = createSeededRandom(p.Seed) + } + + return doRandomConfig(int(p.MaxDepth), options) +} + +func handleRandomSessionTopology(p *RandomSessionTopologyParams) (string, error) { + options := &RandomOptions{ + MaxPermissions: p.MaxPermissions, + MaxRules: p.MaxRules, + } + + if p.Seed != "" { + options.SeededRandom = createSeededRandom(p.Seed) + } + + return doRandomSessionTopology(int(p.MaxDepth), options) +} + +func newDevToolsCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "dev-tools", + Short: "Development tools and utilities", + } + + randomConfigCmd := &cobra.Command{ + Use: "random-config", + Short: "Generate a random configuration", + RunE: func(cmd *cobra.Command, args []string) error { + maxDepth, _ := cmd.Flags().GetInt("max-depth") + seed, _ := cmd.Flags().GetString("seed") + minThreshold, _ := cmd.Flags().GetUint64("min-threshold-on-nested") + checkpointer, _ := cmd.Flags().GetString("checkpointer") + + options := &RandomOptions{ + MinThresholdOnNested: minThreshold, + CheckpointerMode: checkpointer, + } + + if seed != "" { + options.SeededRandom = createSeededRandom(seed) + } + + result, err := doRandomConfig(maxDepth, options) + if err != nil { + return err + } + + fmt.Println(result) + return nil + }, + } + + randomConfigCmd.Flags().Int("max-depth", 3, "Maximum depth of the configuration tree") + randomConfigCmd.Flags().String("seed", "", "Seed for deterministic generation") + randomConfigCmd.Flags().Uint64("min-threshold-on-nested", 0, "Minimum threshold value for nested leaves") + randomConfigCmd.Flags().String("checkpointer", "no", "Checkpointer mode: no (never add), random (50% chance), yes (always add)") + + randomSessionCmd := &cobra.Command{ + Use: "random-session-topology", + Short: "Generate a random session topology", + RunE: func(cmd *cobra.Command, args []string) error { + maxDepth, _ := cmd.Flags().GetInt("max-depth") + maxPermissions, _ := cmd.Flags().GetUint64("max-permissions") + maxRules, _ := cmd.Flags().GetUint64("max-rules") + seed, _ := cmd.Flags().GetString("seed") + + options := &RandomOptions{ + MaxPermissions: maxPermissions, + MaxRules: maxRules, + } + + if seed != "" { + options.SeededRandom = createSeededRandom(seed) + } + + result, err := doRandomSessionTopology(maxDepth, options) + if err != nil { + return err + } + + fmt.Println(result) + return nil + }, + } + + randomSessionCmd.Flags().Int("max-depth", 1, "Maximum depth of the session topology") + randomSessionCmd.Flags().Uint64("max-permissions", 1, "Maximum number of permissions in each session") + randomSessionCmd.Flags().Uint64("max-rules", 1, "Maximum number of rules in each permission") + randomSessionCmd.Flags().String("seed", "", "Seed for deterministic generation") + + cmd.AddCommand(randomConfigCmd, randomSessionCmd) + + return cmd +} diff --git a/cmd/sequence/main.go b/cmd/sequence/main.go new file mode 100644 index 00000000..35123ef3 --- /dev/null +++ b/cmd/sequence/main.go @@ -0,0 +1,33 @@ +package main + +import ( + "fmt" + "os" + + "github.com/spf13/cobra" +) + +func main() { + rootCmd := &cobra.Command{ + Use: "sequence", + Short: "Sequence CLI tool", + Long: `A command line interface for interacting with Sequence services`, + } + + rootCmd.AddCommand( + newPayloadCmd(), + newConfigCmd(), + newDevToolsCmd(), + newSignatureCmd(), + newSessionCmd(), + newSessionExplicitCmd(), + newSessionImplicitCmd(), + newServerCmd(), + newAddressCmd(), + ) + + if err := rootCmd.Execute(); err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } +} diff --git a/cmd/sequence/payload.go b/cmd/sequence/payload.go new file mode 100644 index 00000000..f2a3d206 --- /dev/null +++ b/cmd/sequence/payload.go @@ -0,0 +1,155 @@ +package main + +import ( + "encoding/json" + "fmt" + "log" + "math/big" + + "github.com/0xsequence/ethkit/go-ethereum/common" + "github.com/0xsequence/ethkit/go-ethereum/common/hexutil" + v3 "github.com/0xsequence/go-sequence/core/v3" + + "github.com/spf13/cobra" +) + +func handleToAbi(p *PayloadToAbiParams) (string, error) { + // TODO: implement + log.Printf("payload: %s", p.Payload) + return "", fmt.Errorf("not implemented") +} + +func handleToPacked(p *PayloadToPackedParams) (string, error) { + // Decode the ABI-encoded payload + decoded, err := v3.DecodeABIPayload(p.Payload) + if err != nil { + return "", fmt.Errorf("failed to decode ABI payload: %w", err) + } + + if decoded.Kind != v3.KindTransactions { + return "", fmt.Errorf("conversion to packed only implemented for call payloads") + } + + return hexutil.Encode(v3.NewCallsPayload(common.Address{0x01}, nil, decoded.Calls, decoded.Space, decoded.Nonce, decoded.ParentWallets).Encode(common.Address{0x02})), nil +} + +func handleToJSON(p *PayloadToJSONParams) (string, error) { + // Decode the ABI-encoded payload + decoded, err := v3.DecodeABIPayload(p.Payload) + if err != nil { + return "", fmt.Errorf("failed to decode ABI payload: %w", err) + } + + // Marshal to JSOn + jsonBytes, err := json.Marshal(decoded) + if err != nil { + return "", fmt.Errorf("failed to marshal to JSON: %w", err) + } + return string(jsonBytes), nil +} + +func handleHash(p *PayloadHashParams) (string, error) { + walletAddr := common.HexToAddress(p.Wallet) + chainID := new(big.Int) + if _, ok := chainID.SetString(p.ChainId, 10); !ok { + return "", fmt.Errorf("invalid chain ID: %s", p.ChainId) + } + + data, err := hexutil.Decode(p.Payload) + if err != nil { + return "", fmt.Errorf("unable to hex decode payload: %w", err) + } + + payload, err := v3.DecodeRawPayload(walletAddr, chainID, data) + + if err != nil { + return "", fmt.Errorf("failed to decode payload: %w", err) + } + + return payload.Digest().String(), nil +} + +// newPayloadCmd defines the command-line interface. +func newPayloadCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "payload", + Short: "Payload conversion utilities", + } + + toAbiCmd := &cobra.Command{ + Use: "to-abi [payload]", + Short: "Convert payload to ABI format", + RunE: func(cmd *cobra.Command, args []string) error { + payload, err := fromPosOrStdin(args, 0) + if err != nil { + return err + } + result, err := handleToAbi(&PayloadToAbiParams{Payload: payload}) + if err != nil { + return err + } + fmt.Println(result) + return nil + }, + } + + toPackedCmd := &cobra.Command{ + Use: "to-packed [payload]", + Short: "Convert payload to packed format", + RunE: func(cmd *cobra.Command, args []string) error { + payload, err := fromPosOrStdin(args, 0) + if err != nil { + return err + } + result, err := handleToPacked(&PayloadToPackedParams{Payload: payload}) + if err != nil { + return err + } + fmt.Println(result) + return nil + }, + } + + toJsonCmd := &cobra.Command{ + Use: "to-json [payload]", + Short: "Convert payload to JSON format", + RunE: func(cmd *cobra.Command, args []string) error { + payload, err := fromPosOrStdin(args, 0) + if err != nil { + return err + } + result, err := handleToJSON(&PayloadToJSONParams{Payload: payload}) + if err != nil { + return err + } + fmt.Println(result) + return nil + }, + } + + hashCmd := &cobra.Command{ + Use: "hash [payload]", + Short: "Hash the payload", + RunE: func(cmd *cobra.Command, args []string) error { + payload, err := fromPosOrStdin(args, 0) + if err != nil { + return err + } + wallet, _ := cmd.Flags().GetString("wallet") + chainId, _ := cmd.Flags().GetString("chain-id") + result, err := handleHash(&PayloadHashParams{Payload: payload, Wallet: wallet, ChainId: chainId}) + if err != nil { + return err + } + fmt.Println(result) + return nil + }, + } + hashCmd.Flags().String("wallet", "", "Wallet address") + hashCmd.Flags().String("chain-id", "", "Chain ID") + hashCmd.MarkFlagRequired("wallet") + hashCmd.MarkFlagRequired("chain-id") + + cmd.AddCommand(toAbiCmd, toPackedCmd, toJsonCmd, hashCmd) + return cmd +} diff --git a/cmd/sequence/rpc.go b/cmd/sequence/rpc.go new file mode 100644 index 00000000..08de0df7 --- /dev/null +++ b/cmd/sequence/rpc.go @@ -0,0 +1,373 @@ +package main + +import ( + "encoding/json" + "fmt" + "log" + "net/http" + + "github.com/spf13/cobra" +) + +type JsonRpcRequest struct { + JsonRPC string `json:"jsonrpc"` + Method string `json:"method"` + Params json.RawMessage `json:"params,omitempty"` + ID interface{} `json:"id,omitempty"` +} + +type JsonRpcSuccessResponse struct { + JsonRPC string `json:"jsonrpc"` + Result interface{} `json:"result"` + ID interface{} `json:"id,omitempty"` +} + +type JsonRpcErrorResponse struct { + JsonRPC string `json:"jsonrpc"` + Error JsonRpcError `json:"error"` + ID interface{} `json:"id,omitempty"` +} + +type JsonRpcError struct { + Code int `json:"code"` + Message string `json:"message"` + Data interface{} `json:"data,omitempty"` +} + +func successResponse(id interface{}, result interface{}) JsonRpcSuccessResponse { + return JsonRpcSuccessResponse{ + JsonRPC: "2.0", + ID: id, + Result: result, + } +} + +func errorResponse(id interface{}, code int, message string, data interface{}) JsonRpcErrorResponse { + return JsonRpcErrorResponse{ + JsonRPC: "2.0", + ID: id, + Error: JsonRpcError{ + Code: code, + Message: message, + Data: data, + }, + } +} + +func handleAddressCalculate(params json.RawMessage) (interface{}, error) { + var p AddressCalculateParams + if err := json.Unmarshal(params, &p); err != nil { + return nil, fmt.Errorf("invalid params: %w", err) + } + return calculateAddress(&p) +} + +func handleConfigNew(params json.RawMessage) (interface{}, error) { + var p ConfigNewParams + if err := json.Unmarshal(params, &p); err != nil { + return nil, fmt.Errorf("invalid params: %w", err) + } + return createNewConfig(&p) +} + +func handleConfigImageHash(params json.RawMessage) (interface{}, error) { + var p ConfigImageHashParams + if err := json.Unmarshal(params, &p); err != nil { + return nil, fmt.Errorf("invalid params: %w", err) + } + return calculateImageHash(&p) +} + +func handleConfigEncode(params json.RawMessage) (interface{}, error) { + var p ConfigEncodeParams + if err := json.Unmarshal(params, &p); err != nil { + return nil, fmt.Errorf("invalid params: %w", err) + } + return encodeConfig(&p) +} + +func handleSignatureEncode(params json.RawMessage) (interface{}, error) { + var p SignatureEncodeParams + if err := json.Unmarshal(params, &p); err != nil { + return nil, fmt.Errorf("invalid params: %w", err) + } + return signatureEncode(&p) +} + +func handleSignatureConcat(params json.RawMessage) (interface{}, error) { + var p SignatureConcatParams + if err := json.Unmarshal(params, &p); err != nil { + return nil, fmt.Errorf("invalid params: %w", err) + } + return signatureConcat(&p) +} + +func handleSignatureDecode(params json.RawMessage) (interface{}, error) { + var p SignatureDecodeParams + if err := json.Unmarshal(params, &p); err != nil { + return nil, fmt.Errorf("invalid params: %w", err) + } + return "", fmt.Errorf("not implemented") +} + +func handleDevToolsRandomConfig(params json.RawMessage) (interface{}, error) { + var p RandomConfigParams + if err := json.Unmarshal(params, &p); err != nil { + return nil, fmt.Errorf("invalid params: %w", err) + } + return handleRandomConfig(&p) +} + +func handleDevToolsRandomSessionTopology(params json.RawMessage) (interface{}, error) { + var p RandomSessionTopologyParams + if err := json.Unmarshal(params, &p); err != nil { + return nil, fmt.Errorf("invalid params: %w", err) + } + return handleRandomSessionTopology(&p) +} + +func handlePayloadToAbi(params json.RawMessage) (interface{}, error) { + var p PayloadToAbiParams + if err := json.Unmarshal(params, &p); err != nil { + return nil, fmt.Errorf("invalid params: %w", err) + } + return handleToAbi(&p) +} + +func handlePayloadToPacked(params json.RawMessage) (interface{}, error) { + var p PayloadToPackedParams + if err := json.Unmarshal(params, &p); err != nil { + return nil, fmt.Errorf("invalid params: %w", err) + } + return handleToPacked(&p) +} + +func handlePayloadToJSON(params json.RawMessage) (interface{}, error) { + var p PayloadToJSONParams + if err := json.Unmarshal(params, &p); err != nil { + return nil, fmt.Errorf("invalid params: %w", err) + } + return handleToJSON(&p) +} + +func handlePayloadHash(params json.RawMessage) (interface{}, error) { + var p PayloadHashParams + if err := json.Unmarshal(params, &p); err != nil { + return nil, fmt.Errorf("invalid params: %w", err) + } + return handleHash(&p) +} + +func handleSessionEmptyTopology(params json.RawMessage) (interface{}, error) { + var p EmptyTopologyParams + if err := json.Unmarshal(params, &p); err != nil { + return nil, fmt.Errorf("invalid params: %w", err) + } + return handleEmptyTopology(&p) +} + +func handleSessionEncodeTopology(params json.RawMessage) (interface{}, error) { + var p EncodeTopologyParams + if err := json.Unmarshal(params, &p); err != nil { + return nil, fmt.Errorf("invalid params: %w", err) + } + return handleEncodeTopology(&p) +} + +func handleSessionEncodeCallSignatures(params json.RawMessage) (interface{}, error) { + var p EncodeSessionCallSignaturesParams + if err := json.Unmarshal(params, &p); err != nil { + return nil, fmt.Errorf("invalid params: %w", err) + } + return handleEncodeSessionCallSignatures(&p) +} + +func handleSessionImageHash(params json.RawMessage) (interface{}, error) { + var p ImageHashParams + if err := json.Unmarshal(params, &p); err != nil { + return nil, fmt.Errorf("invalid params: %w", err) + } + return handleImageHash(&p) +} + +func handleExplicitSessionAdd(params json.RawMessage) (interface{}, error) { + var p AddSessionParams + if err := json.Unmarshal(params, &p); err != nil { + return nil, fmt.Errorf("invalid params: %w", err) + } + return handleAddExplicitSession(&p) +} + +func handleExplicitSessionRemove(params json.RawMessage) (interface{}, error) { + var p RemoveSessionParams + if err := json.Unmarshal(params, &p); err != nil { + return nil, fmt.Errorf("invalid params: %w", err) + } + return handleRemoveExplicitSession(&p) +} + +func handleImplicitSessionAddBlacklist(params json.RawMessage) (interface{}, error) { + var p AddBlacklistParams + if err := json.Unmarshal(params, &p); err != nil { + return nil, fmt.Errorf("invalid params: %w", err) + } + return handleAddBlacklist(&p) +} + +func handleImplicitSessionRemoveBlacklist(params json.RawMessage) (interface{}, error) { + var p RemoveBlacklistParams + if err := json.Unmarshal(params, &p); err != nil { + return nil, fmt.Errorf("invalid params: %w", err) + } + return handleRemoveBlacklist(&p) +} + +func handleRPCRequest(w http.ResponseWriter, r *http.Request, debug bool, silent bool) { + if !silent { + log.Printf("[%s] %s from %s", r.Method, r.URL.Path, r.RemoteAddr) + } + + if r.Method != http.MethodPost || r.URL.Path != "/rpc" { + if !silent { + log.Printf("404 Not Found") + } + http.Error(w, "Not Found", http.StatusNotFound) + return + } + + var req JsonRpcRequest + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + if !silent { + log.Printf("JSON parse error: %v", err) + } + json.NewEncoder(w).Encode(errorResponse(nil, -32700, "Parse error", err.Error())) + return + } + + if debug && !silent { + log.Printf("Request details: %+v", req) + log.Printf("Method requested (exact): '%s'", req.Method) + log.Printf("Params: %s", string(req.Params)) + log.Printf("Method comparison: requested='%s' vs defined='session_explicit_encodeCallSignature'", req.Method) + log.Printf("Method bytes: requested=%v", []byte(req.Method)) + } + + if !silent { + log.Printf("Method requested: %s", req.Method) + } + + if req.JsonRPC != "2.0" { + json.NewEncoder(w).Encode(errorResponse(req.ID, -32600, "Invalid JSON-RPC version", nil)) + return + } + + var result interface{} + var err error + + // Log before method switch + if debug && !silent { + log.Printf("Attempting to match method: '%s'", req.Method) + } + + switch req.Method { + case "address_calculate": + result, err = handleAddressCalculate(req.Params) + case "config_new": + result, err = handleConfigNew(req.Params) + case "config_imageHash": + result, err = handleConfigImageHash(req.Params) + case "config_encode": + result, err = handleConfigEncode(req.Params) + case "signature_encode": + result, err = handleSignatureEncode(req.Params) + case "signature_concat": + result, err = handleSignatureConcat(req.Params) + case "signature_decode": + result, err = handleSignatureDecode(req.Params) + case "devTools_randomConfig": + result, err = handleDevToolsRandomConfig(req.Params) + case "devTools_randomSessionTopology": + result, err = handleDevToolsRandomSessionTopology(req.Params) + case "payload_toAbi": + result, err = handlePayloadToAbi(req.Params) + case "payload_toPacked": + result, err = handlePayloadToPacked(req.Params) + case "payload_toJson": + result, err = handlePayloadToJSON(req.Params) + case "payload_hashFor": + result, err = handlePayloadHash(req.Params) + case "session_empty": + result, err = handleSessionEmptyTopology(req.Params) + case "session_encodeTopology": + result, err = handleSessionEncodeTopology(req.Params) + case "session_encodeCallSignatures": + result, err = handleSessionEncodeCallSignatures(req.Params) + case "session_imageHash": + result, err = handleSessionImageHash(req.Params) + case "session_explicit_add": + result, err = handleExplicitSessionAdd(req.Params) + case "session_explicit_remove": + result, err = handleExplicitSessionRemove(req.Params) + case "session_implicit_addBlacklistAddress": + result, err = handleImplicitSessionAddBlacklist(req.Params) + case "session_implicit_removeBlacklistAddress": + result, err = handleImplicitSessionRemoveBlacklist(req.Params) + default: + if !silent { + log.Printf("Method not found: %s", req.Method) + } + json.NewEncoder(w).Encode(errorResponse(req.ID, -32601, fmt.Sprintf("Method not found: %s", req.Method), nil)) + return + } + + if err != nil { + if !silent { + log.Printf("Error handling method %s: %v", req.Method, err) + } + json.NewEncoder(w).Encode(errorResponse(req.ID, -32000, err.Error(), nil)) + return + } + + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(successResponse(req.ID, result)) +} + +func startRPCServer(host string, port int, debug bool, silent bool) error { + addr := fmt.Sprintf("%s:%d", host, port) + if !silent { + log.Printf("RPC server running at http://%s/rpc", addr) + if debug { + log.Printf("Debug mode enabled - detailed logging active") + } + } + + http.HandleFunc("/rpc", func(w http.ResponseWriter, r *http.Request) { + handleRPCRequest(w, r, debug, silent) + }) + + return http.ListenAndServe(addr, nil) +} + +func newServerCmd() *cobra.Command { + var ( + host string + port int + debug bool + silent bool + ) + + cmd := &cobra.Command{ + Use: "server", + Short: "Run a JSON-RPC server exposing CLI functionality", + RunE: func(cmd *cobra.Command, args []string) error { + return startRPCServer(host, port, debug, silent) + }, + } + + cmd.Flags().StringVar(&host, "host", "127.0.0.1", "Hostname to listen on") + cmd.Flags().IntVar(&port, "port", 9999, "Port to listen on") + cmd.Flags().BoolVar(&debug, "debug", false, "Enable debug logging") + cmd.Flags().BoolVar(&silent, "silent", false, "Disable all logging output") + + return cmd +} diff --git a/cmd/sequence/session.go b/cmd/sequence/session.go new file mode 100644 index 00000000..f76e99d8 --- /dev/null +++ b/cmd/sequence/session.go @@ -0,0 +1,250 @@ +package main + +import ( + "errors" + "fmt" + "math/big" + "strconv" + "strings" + + "encoding/hex" + + "github.com/0xsequence/ethkit/go-ethereum/common" + v3 "github.com/0xsequence/go-sequence/core/v3" + "github.com/spf13/cobra" +) + +func handleEmptyTopology(p *EmptyTopologyParams) (string, error) { + signer := common.HexToAddress(p.IdentitySigner) + topology := v3.EmptySessionsTopology(signer) + return v3.SessionsTopologyToJSON(topology) +} + +func handleEncodeTopology(p *EncodeTopologyParams) (string, error) { + encoded, err := v3.EncodeSessionsTopology(p.SessionTopology) + if err != nil { + return "", fmt.Errorf("failed to encode session topology: %w", err) + } + return "0x" + common.Bytes2Hex(encoded), nil +} + +func handleEncodeSessionCallSignatures(p *EncodeSessionCallSignaturesParams) (string, error) { + callSigs := make([]v3.SessionCallSignature, len(p.CallSignatures)) + for i, sig := range p.CallSignatures { + sessionSig, err := rsyFromRsvStr(sig.SessionSignature) + if err != nil { + return "", fmt.Errorf("failed to decode session signature: %w", err) + } + if sig.Attestation.ApprovedSigner != "" && sig.IdentitySignature != "" { + // Implicit call signature + idSig, err := rsyFromRsvStr(sig.IdentitySignature) + if err != nil { + return "", fmt.Errorf("failed to decode identity signature: %w", err) + } + + // Convert hex-encoded fields to bytes + identityType, err := hex.DecodeString(sig.Attestation.IdentityType[2:]) // Remove "0x" prefix + if err != nil { + return "", fmt.Errorf("failed to decode identity type: %w", err) + } + + issuerHash, err := hex.DecodeString(sig.Attestation.IssuerHash[2:]) + if err != nil { + return "", fmt.Errorf("failed to decode issuer hash: %w", err) + } + + audienceHash, err := hex.DecodeString(sig.Attestation.AudienceHash[2:]) + if err != nil { + return "", fmt.Errorf("failed to decode audience hash: %w", err) + } + + applicationData, err := hex.DecodeString(sig.Attestation.ApplicationData[2:]) + if err != nil { + return "", fmt.Errorf("failed to decode application data: %w", err) + } + + attestation := v3.Attestation{ + ApprovedSigner: common.HexToAddress(sig.Attestation.ApprovedSigner), + IdentityType: identityType, + IssuerHash: issuerHash, + AudienceHash: audienceHash, + ApplicationData: applicationData, + AuthData: v3.AuthData{ + RedirectUrl: sig.Attestation.AuthData.RedirectUrl, + }, + } + + callSig := v3.ImplicitSessionCallSignature{ + Attestation: attestation, + IdentitySignature: idSig, + SessionSignature: sessionSig, + } + callSigs[i] = callSig + } else { + // Explicit call signature + permissionIndex, ok := new(big.Int).SetString(sig.PermissionIndex, 10) + if !ok { + return "", fmt.Errorf("failed to decode permission index: %w", err) + } + callSig := v3.ExplicitSessionCallSignature{ + PermissionIndex: permissionIndex, + SessionSignature: sessionSig, + } + callSigs[i] = callSig + } + } + + explicitAddrs := make([]common.Address, len(p.ExplicitSigners)) + for i, signer := range p.ExplicitSigners { + explicitAddrs[i] = common.HexToAddress(signer) + } + + implicitAddrs := make([]common.Address, len(p.ImplicitSigners)) + for i, signer := range p.ImplicitSigners { + implicitAddrs[i] = common.HexToAddress(signer) + } + + encoded, err := v3.EncodeSessionCallSignatures(callSigs, p.SessionTopology, explicitAddrs, implicitAddrs) + if err != nil { + return "", fmt.Errorf("failed to encode session call signatures: %w", err) + } + return "0x" + common.Bytes2Hex(encoded), nil +} + +func handleImageHash(p *ImageHashParams) (string, error) { + configTree, err := v3.SessionsTopologyToGenericTree(p.SessionTopology) + if err != nil { + return "", fmt.Errorf("failed to convert session topology to generic tree: %w", err) + } + return configTree.ImageHash().String(), nil +} + +func rsyFromRsvStr(sigStr string) (v3.RSY, error) { + parts := strings.Split(sigStr, ":") + if len(parts) != 3 { + return v3.RSY{}, errors.New("signature must be in r:s:v format") + } + r, err := hex.DecodeString(parts[0][2:]) + if err != nil { + return v3.RSY{}, fmt.Errorf("invalid r value: %w", err) + } + s, err := hex.DecodeString(parts[1][2:]) + if err != nil { + return v3.RSY{}, fmt.Errorf("invalid s value: %w", err) + } + v, err := strconv.Atoi(string(parts[2])) + if err != nil { + return v3.RSY{}, fmt.Errorf("invalid v value: %w", err) + } + return v3.RSY{R: r, S: s, YParity: uint8(v - 27)}, nil +} + +// newSessionCmd defines the command-line interface. +func newSessionCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "session", + Short: "Session utilities", + } + + emptyCmd := &cobra.Command{ + Use: "empty [identity-signer]", + Short: "Create an empty session topology with the given identity signer", + RunE: func(cmd *cobra.Command, args []string) error { + identitySigner, err := fromPosOrStdin(args, 0) + if err != nil { + return err + } + result, err := handleEmptyTopology(&EmptyTopologyParams{IdentitySigner: identitySigner}) + if err != nil { + return err + } + fmt.Println(result) + return nil + }, + } + + encodeTopologyCmd := &cobra.Command{ + Use: "encode-topology [session-topology]", + Short: "Encode a session topology", + RunE: func(cmd *cobra.Command, args []string) error { + config, err := fromPosOrStdin(args, 0) + if err != nil { + return err + } + topology, err := v3.SessionsTopologyFromJSON(config) + if err != nil { + return err + } + result, err := handleEncodeTopology(&EncodeTopologyParams{SessionTopology: topology}) + if err != nil { + return err + } + fmt.Println(result) + return nil + }, + } + + encodeCallsCmd := &cobra.Command{ + Use: "encode-calls [session-topology] [call-signatures] [explicit-signers] [implicit-signers]", + Short: "Encode call signatures for sessions", + RunE: func(cmd *cobra.Command, args []string) error { + if len(args) < 4 { + return fmt.Errorf("requires session topology, call signatures, explicit signers, and implicit signers") + } + + config := args[0] + callSigs := make([]CallSignaturesParams, len(args)-1) + for i, sig := range args[1:] { + callSigs[i] = CallSignaturesParams{ + SessionSignature: sig, + } + } + explicitSigners, _ := cmd.Flags().GetStringSlice("explicit-signers") + implicitSigners, _ := cmd.Flags().GetStringSlice("implicit-signers") + + topology, err := v3.SessionsTopologyFromJSON(config) + if err != nil { + return err + } + + result, err := handleEncodeSessionCallSignatures(&EncodeSessionCallSignaturesParams{ + SessionTopology: topology, + CallSignatures: callSigs, + ExplicitSigners: explicitSigners, + ImplicitSigners: implicitSigners, + }) + if err != nil { + return err + } + fmt.Println(result) + return nil + }, + } + encodeCallsCmd.Flags().StringSlice("explicit-signers", []string{}, "Explicit signers") + encodeCallsCmd.Flags().StringSlice("implicit-signers", []string{}, "Implicit signers") + + imageHashCmd := &cobra.Command{ + Use: "image-hash [session-topology]", + Short: "Hash a session topology", + RunE: func(cmd *cobra.Command, args []string) error { + config, err := fromPosOrStdin(args, 0) + if err != nil { + return err + } + topology, err := v3.SessionsTopologyFromJSON(config) + if err != nil { + return err + } + result, err := handleImageHash(&ImageHashParams{SessionTopology: topology}) + if err != nil { + return err + } + fmt.Println(result) + return nil + }, + } + + cmd.AddCommand(emptyCmd, encodeTopologyCmd, encodeCallsCmd, imageHashCmd) + cmd.AddCommand(newSessionExplicitCmd(), newSessionImplicitCmd()) + return cmd +} diff --git a/cmd/sequence/session_explicit.go b/cmd/sequence/session_explicit.go new file mode 100644 index 00000000..d9d0e7e8 --- /dev/null +++ b/cmd/sequence/session_explicit.go @@ -0,0 +1,105 @@ +package main + +import ( + "encoding/json" + "fmt" + + v3 "github.com/0xsequence/go-sequence/core/v3" + "github.com/spf13/cobra" +) + +func handleAddExplicitSession(p *AddSessionParams) (string, error) { + var session v3.SessionPermissions + if err := json.Unmarshal(p.ExplicitSession, &session); err != nil { + return "", fmt.Errorf("failed to decode explicit session: %w", err) + } + + updated, err := v3.AddExplicitSession(p.SessionTopology, session) + if err != nil { + return "", fmt.Errorf("failed to add explicit session: %w", err) + } + + return v3.SessionsTopologyToJSON(updated) +} + +func handleRemoveExplicitSession(p *RemoveSessionParams) (string, error) { + if p.ExplicitSessionAddress == "" || p.ExplicitSessionAddress[:2] != "0x" { + return "", fmt.Errorf("explicit session address must be a valid address") + } + + updated, err := v3.RemoveExplicitSession(p.SessionTopology, p.ExplicitSessionAddress) + if err != nil { + return "", fmt.Errorf("failed to remove explicit session: %w", err) + } + + return v3.SessionsTopologyToJSON(updated) +} + +// newSessionExplicitCmd defines the command-line interface. +func newSessionExplicitCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "explicit", + Short: "Explicit session utilities", + } + + addCmd := &cobra.Command{ + Use: "add [explicit-session] [session-topology]", + Short: "Add an explicit session to a session topology", + RunE: func(cmd *cobra.Command, args []string) error { + explicitSession, err := fromPosOrStdin(args, 0) + if err != nil { + return err + } + sessionTopologyString, err := fromPosOrStdin(args, 1) + if err != nil { + return err + } + sessionTopology, err := v3.SessionsTopologyFromJSON(sessionTopologyString) + if err != nil { + return fmt.Errorf("failed to decode session topology: %w", err) + } + + result, err := handleAddExplicitSession(&AddSessionParams{ + ExplicitSession: json.RawMessage(explicitSession), + SessionTopology: sessionTopology, + }) + if err != nil { + return err + } + fmt.Println(result) + return nil + }, + } + + removeCmd := &cobra.Command{ + Use: "remove [explicit-session-address] [session-topology]", + Short: "Remove a session from the session topology", + RunE: func(cmd *cobra.Command, args []string) error { + if len(args) < 1 { + return fmt.Errorf("explicit session address is required") + } + + sessionTopologyString, err := fromPosOrStdin(args, 1) + if err != nil { + return err + } + sessionTopology, err := v3.SessionsTopologyFromJSON(sessionTopologyString) + if err != nil { + return fmt.Errorf("failed to decode session topology: %w", err) + } + + result, err := handleRemoveExplicitSession(&RemoveSessionParams{ + ExplicitSessionAddress: args[0], + SessionTopology: sessionTopology, + }) + if err != nil { + return err + } + fmt.Println(result) + return nil + }, + } + + cmd.AddCommand(addCmd, removeCmd) + return cmd +} diff --git a/cmd/sequence/session_implicit.go b/cmd/sequence/session_implicit.go new file mode 100644 index 00000000..77efb05e --- /dev/null +++ b/cmd/sequence/session_implicit.go @@ -0,0 +1,109 @@ +package main + +import ( + "encoding/json" + "fmt" + + "github.com/0xsequence/ethkit/go-ethereum/common" + v3 "github.com/0xsequence/go-sequence/core/v3" + "github.com/spf13/cobra" +) + +func handleAddBlacklist(p *AddBlacklistParams) (string, error) { + blacklistAddr := common.HexToAddress(p.BlacklistAddress) + updated, err := v3.AddToImplicitBlacklist(p.SessionTopology, blacklistAddr) + if err != nil { + return "", fmt.Errorf("failed to add to implicit blacklist: %w", err) + } + + jsonBytes, err := json.Marshal(updated) + if err != nil { + return "", fmt.Errorf("failed to marshal updated topology: %w", err) + } + + return string(jsonBytes), nil +} + +func handleRemoveBlacklist(p *RemoveBlacklistParams) (string, error) { + blacklistAddr := common.HexToAddress(p.BlacklistAddress) + updated, err := v3.RemoveFromImplicitBlacklist(p.SessionTopology, blacklistAddr) + if err != nil { + return "", fmt.Errorf("failed to remove from implicit blacklist: %w", err) + } + + jsonBytes, err := json.Marshal(updated) + if err != nil { + return "", fmt.Errorf("failed to marshal updated topology: %w", err) + } + + return string(jsonBytes), nil +} + +// newSessionImplicitCmd defines the command-line interface. +func newSessionImplicitCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "implicit", + Short: "Implicit session utilities", + } + + addCmd := &cobra.Command{ + Use: "blacklist-add [blacklist-address] [session-topology]", + Short: "Add an address to the implicit session blacklist", + RunE: func(cmd *cobra.Command, args []string) error { + if len(args) < 1 { + return fmt.Errorf("blacklist address is required") + } + + sessionTopologyString, err := fromPosOrStdin(args, 1) + if err != nil { + return err + } + sessionTopology, err := v3.SessionsTopologyFromJSON(sessionTopologyString) + if err != nil { + return fmt.Errorf("failed to decode session topology: %w", err) + } + + result, err := handleAddBlacklist(&AddBlacklistParams{ + BlacklistAddress: args[0], + SessionTopology: sessionTopology, + }) + if err != nil { + return err + } + fmt.Println(result) + return nil + }, + } + + removeCmd := &cobra.Command{ + Use: "blacklist-remove [blacklist-address] [session-topology]", + Short: "Remove an address from the implicit session blacklist", + RunE: func(cmd *cobra.Command, args []string) error { + if len(args) < 1 { + return fmt.Errorf("blacklist address is required") + } + + sessionTopologyString, err := fromPosOrStdin(args, 1) + if err != nil { + return err + } + sessionTopology, err := v3.SessionsTopologyFromJSON(sessionTopologyString) + if err != nil { + return fmt.Errorf("failed to decode session topology: %w", err) + } + + result, err := handleRemoveBlacklist(&RemoveBlacklistParams{ + BlacklistAddress: args[0], + SessionTopology: sessionTopology, + }) + if err != nil { + return err + } + fmt.Println(result) + return nil + }, + } + + cmd.AddCommand(addCmd, removeCmd) + return cmd +} diff --git a/cmd/sequence/signature.go b/cmd/sequence/signature.go new file mode 100644 index 00000000..5ffd06dc --- /dev/null +++ b/cmd/sequence/signature.go @@ -0,0 +1,392 @@ +package main + +import ( + "context" + "encoding/hex" + "encoding/json" + "fmt" + "log" + "strings" + + "github.com/0xsequence/ethkit/go-ethereum/common" + "github.com/0xsequence/go-sequence/core" + v3 "github.com/0xsequence/go-sequence/core/v3" + "github.com/spf13/cobra" +) + +type SignatureElement struct { + Address string `json:"address"` + Type string `json:"type"` + Values []string `json:"values"` +} + +type WalletConfigInput struct { + Threshold json.RawMessage `json:"threshold"` + Checkpoint json.RawMessage `json:"checkpoint"` + Tree json.RawMessage `json:"tree,omitempty"` + Topology json.RawMessage `json:"topology,omitempty"` + Checkpointer json.RawMessage `json:"checkpointer,omitempty"` +} + +func convertTopologyToTree(topology interface{}) (interface{}, error) { + switch v := topology.(type) { + case []interface{}: + if len(v) != 2 { + return nil, fmt.Errorf("array must have exactly two elements") + } + left, err := convertTopologyToTree(v[0]) + if err != nil { + return nil, err + } + right, err := convertTopologyToTree(v[1]) + if err != nil { + return nil, err + } + return map[string]interface{}{ + "left": left, + "right": right, + }, nil + case map[string]interface{}: + if nodeType, ok := v["type"].(string); ok { + switch nodeType { + case "signer": + return map[string]interface{}{ + "weight": v["weight"], + "address": v["address"], + }, nil + case "nested": + if tree, ok := v["tree"]; ok { + processedTree, err := convertTopologyToTree(tree) + if err != nil { + return nil, err + } + return map[string]interface{}{ + "threshold": v["threshold"], + "weight": v["weight"], + "tree": processedTree, + }, nil + } + case "node": + if hash, ok := v["hash"].(string); ok { + return map[string]interface{}{ + "hash": hash, + }, nil + } + } + } + + if left, hasLeft := v["left"]; hasLeft { + if right, hasRight := v["right"]; hasRight { + leftProcessed, err := convertTopologyToTree(left) + if err != nil { + return nil, err + } + rightProcessed, err := convertTopologyToTree(right) + if err != nil { + return nil, err + } + return map[string]interface{}{ + "left": leftProcessed, + "right": rightProcessed, + }, nil + } + } + return v, nil + default: + return nil, fmt.Errorf("unsupported topology type: %T", v) + } +} + +func signatureConcat(params *SignatureConcatParams) (string, error) { + if len(params.Signatures) == 0 { + return "", fmt.Errorf("no signatures provided") + } + + // Decode each signature + decodedSignatures := make([]core.Signature[*v3.WalletConfig], len(params.Signatures)) + for i, sig := range params.Signatures { + sig = strings.TrimPrefix(sig, "0x") + sigBytes := common.FromHex(sig) + + decoded, err := v3.Core.DecodeSignature(sigBytes) + if err != nil { + return "", fmt.Errorf("failed to decode signature %d: %w", i, err) + } + decodedSignatures[i] = decoded + } + + chainedSig := v3.ChainedSignature(decodedSignatures) + + encodedSig, err := chainedSig.Data() + if err != nil { + return "", fmt.Errorf("failed to encode chained signature: %w", err) + } + + return "0x" + common.Bytes2Hex(encodedSig), nil +} + +func signatureEncode(p *SignatureEncodeParams) (interface{}, error) { + var input WalletConfigInput + if err := json.Unmarshal(p.Input, &input); err != nil { + return nil, fmt.Errorf("failed to parse input config: %w", err) + } + + var threshold, checkpoint interface{} + if err := json.Unmarshal(input.Threshold, &threshold); err != nil { + return nil, fmt.Errorf("failed to parse threshold: %w", err) + } + if err := json.Unmarshal(input.Checkpoint, &checkpoint); err != nil { + return nil, fmt.Errorf("failed to parse checkpoint: %w", err) + } + + rawConfig := map[string]interface{}{ + "threshold": convertNumbers(threshold), + "checkpoint": convertNumbers(checkpoint), + } + + var checkpointerStr string + if input.Checkpointer != nil { + if err := json.Unmarshal(input.Checkpointer, &checkpointerStr); err != nil { + return nil, fmt.Errorf("failed to parse checkpointer: %w", err) + } + if checkpointerStr != "" { + rawConfig["checkpointer"] = checkpointerStr + } + } + + var treeData json.RawMessage + if input.Tree != nil { + treeData = input.Tree + } else if input.Topology != nil { + treeData = input.Topology + } else { + return nil, fmt.Errorf("either tree or topology must be provided") + } + + var tree interface{} + if err := json.Unmarshal(treeData, &tree); err != nil { + return nil, fmt.Errorf("failed to parse tree/topology: %w", err) + } + + var err error + tree, err = convertTopologyToTree(tree) + if err != nil { + return nil, fmt.Errorf("failed to convert topology to tree: %w", err) + } + + rawConfig["tree"] = convertNumbers(tree) + + config, err := v3.Core.DecodeWalletConfig(rawConfig) + if err != nil { + return nil, fmt.Errorf("failed to decode wallet config: %w", err) + } + + var signatures []SignatureElement + if p.Signatures != "" { + sigData := strings.TrimPrefix(p.Signatures, "--signature ") + sigParts := strings.Split(sigData, ":") + + if len(sigParts) >= 2 { + sig := SignatureElement{ + Address: sigParts[0], + Type: sigParts[1], + Values: sigParts[2:], + } + signatures = append(signatures, sig) + } + } + + var checkpointerDataBytes []byte + if p.CheckpointerData != "" { + var err error + checkpointerDataBytes, err = hex.DecodeString(strings.TrimPrefix(p.CheckpointerData, "0x")) + if err != nil { + return nil, fmt.Errorf("failed to decode checkpointer data: %w", err) + } + } + + var signature core.Signature[*v3.WalletConfig] + if p.ChainId { + signature, err = config.BuildRegularSignature(context.Background(), func(ctx context.Context, signer common.Address, sigs []core.SignerSignature) (core.SignerSignatureType, []byte, error) { + for _, sig := range signatures { + if strings.EqualFold(sig.Address, signer.Hex()) { + switch sig.Type { + case "eth_sign": + if len(sig.Values) != 3 { + continue + } + r := common.HexToHash(sig.Values[0]).Bytes() + s := common.HexToHash(sig.Values[1]).Bytes() + v := byte(common.HexToHash(sig.Values[2]).Big().Uint64()) + + return core.SignerSignatureTypeEthSign, append(append(r, s...), v), nil + case "hash": + if len(sig.Values) != 3 { + continue + } + r := common.HexToHash(sig.Values[0]).Bytes() + s := common.HexToHash(sig.Values[1]).Bytes() + v := byte(common.HexToHash(sig.Values[2]).Big().Uint64()) + + return core.SignerSignatureTypeEIP712, append(append(r, s...), v), nil + case "erc1271": + if len(sig.Values) != 1 { + continue + } + + return core.SignerSignatureTypeEIP1271, common.FromHex(sig.Values[0]), nil + case "sapient", "sapient_compact": + if len(sig.Values) != 1 { + continue + } + + if sig.Type == "sapient" { + return core.SignerSignatureTypeSapient, common.FromHex(sig.Values[0]), nil + } else { + return core.SignerSignatureTypeSapientCompact, common.FromHex(sig.Values[0]), nil + } + default: + log.Printf("Unsupported signature type: %s", sig.Type) + continue + } + } + } + + return 0, nil, core.ErrSigningNoSigner + }, false, checkpointerDataBytes) + } else { + signature, err = config.BuildNoChainIDSignature(context.Background(), func(ctx context.Context, signer common.Address, sigs []core.SignerSignature) (core.SignerSignatureType, []byte, error) { + for _, sig := range signatures { + if strings.EqualFold(sig.Address, signer.Hex()) { + switch sig.Type { + case "eth_sign": + if len(sig.Values) != 3 { + continue + } + r := common.HexToHash(sig.Values[0]).Bytes() + s := common.HexToHash(sig.Values[1]).Bytes() + v := byte(common.HexToHash(sig.Values[2]).Big().Uint64()) + + return core.SignerSignatureTypeEthSign, append(append(r, s...), v), nil + case "hash": + if len(sig.Values) != 3 { + continue + } + r := common.HexToHash(sig.Values[0]).Bytes() + s := common.HexToHash(sig.Values[1]).Bytes() + v := byte(common.HexToHash(sig.Values[2]).Big().Uint64()) + + return core.SignerSignatureTypeEIP712, append(append(r, s...), v), nil + case "erc1271": + if len(sig.Values) != 1 { + continue + } + + return core.SignerSignatureTypeEIP1271, common.FromHex(sig.Values[0]), nil + case "sapient", "sapient_compact": + if len(sig.Values) != 1 { + continue + } + + if sig.Type == "sapient" { + return core.SignerSignatureTypeSapient, common.FromHex(sig.Values[0]), nil + } else { + return core.SignerSignatureTypeSapientCompact, common.FromHex(sig.Values[0]), nil + } + default: + log.Printf("Unsupported signature type: %s", sig.Type) + continue + } + } + } + + return 0, nil, core.ErrSigningNoSigner + }, false, checkpointerDataBytes) + } + + if err != nil { + return nil, fmt.Errorf("failed to build signature: %w", err) + } + + data, err := signature.Data() + if err != nil { + return nil, fmt.Errorf("failed to encode signature: %w", err) + } + + return "0x" + common.Bytes2Hex(data), nil +} + +func newSignatureCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "signature", + Short: "Signature utilities", + } + + var input string + var signatures []string + var chainId bool + var checkpointerData string + + encodeCmd := &cobra.Command{ + Use: "encode [input]", + Short: "Encode signature from hex input", + RunE: func(cmd *cobra.Command, args []string) error { + if len(args) > 0 { + input = args[0] + } + if input == "" { + return fmt.Errorf("input is required") + } + if len(signatures) == 0 { + return fmt.Errorf("at least one signature is required") + } + + allSignatures := strings.Join(signatures, " ") + + params := &SignatureEncodeParams{ + Input: json.RawMessage(input), + Signatures: allSignatures, + ChainId: chainId, + CheckpointerData: checkpointerData, + } + + result, err := signatureEncode(params) + if err != nil { + return err + } + + fmt.Println(result) + return nil + }, + } + + concatCmd := &cobra.Command{ + Use: "concat [signatures...]", + Short: "Concatenate multiple signatures", + RunE: func(cmd *cobra.Command, args []string) error { + if len(args) == 0 { + return fmt.Errorf("at least one signature is required") + } + + params := &SignatureConcatParams{ + Signatures: args, + } + + result, err := signatureConcat(params) + if err != nil { + return err + } + + fmt.Println(result) + return nil + }, + } + + encodeCmd.Flags().StringArrayVarP(&signatures, "signature", "s", []string{}, "Signatures") + encodeCmd.Flags().BoolVar(&chainId, "chain-id", true, "Use chainId of recovered chain on signature") + encodeCmd.Flags().StringVar(&checkpointerData, "checkpointer-data", "", "Checkpointer data in hex format") + + cmd.AddCommand(encodeCmd, concatCmd) + + return cmd +} diff --git a/cmd/sequence/types.go b/cmd/sequence/types.go new file mode 100644 index 00000000..fb21f713 --- /dev/null +++ b/cmd/sequence/types.go @@ -0,0 +1,150 @@ +package main + +import ( + "encoding/json" + + v3 "github.com/0xsequence/go-sequence/core/v3" +) + +// Address params +type AddressCalculateParams struct { + ImageHash string `json:"imageHash"` + Factory string `json:"factory"` + Module string `json:"module"` + CreationCode string `json:"creationCode"` +} + +// Config params +type ConfigNewParams struct { + Threshold string `json:"threshold"` + Checkpoint string `json:"checkpoint"` + From string `json:"from"` + Content string `json:"content"` + Checkpointer string `json:"checkpointer,omitempty"` +} + +// ConfigImageHashParams represents parameters for calculating image hash +type ConfigImageHashParams struct { + Input json.RawMessage `json:"input"` +} + +// ConfigEncodeParams represents parameters for encoding configuration +type ConfigEncodeParams struct { + Input json.RawMessage `json:"input"` +} + +// Signature params +type SignatureEncodeParams struct { + Input json.RawMessage `json:"input"` + Signatures string `json:"signatures"` + ChainId bool `json:"chainId"` + CheckpointerData string `json:"checkpointerData,omitempty"` +} + +type SignatureConcatParams struct { + Signatures []string `json:"signatures"` +} + +type SignatureDecodeParams struct { + Signature string `json:"signature"` +} + +// DevTools params +type RandomConfigParams struct { + MaxDepth uint64 `json:"maxDepth"` + Seed string `json:"seed"` + MinThresholdOnNested uint64 `json:"minThresholdOnNested"` + Checkpointer string `json:"checkpointer"` +} + +type RandomSessionTopologyParams struct { + MaxDepth uint64 `json:"maxDepth"` + MaxPermissions uint64 `json:"maxPermissions"` + MaxRules uint64 `json:"maxRules"` + Seed string `json:"seed"` +} + +// Payload params +type PayloadToAbiParams struct { + Payload string `json:"payload"` +} + +type PayloadToPackedParams struct { + Payload string `json:"payload"` +} + +type PayloadToJSONParams struct { + Payload string `json:"payload"` +} + +type PayloadHashParams struct { + Wallet string `json:"wallet"` + ChainId string `json:"chainId"` + Payload string `json:"payload"` +} + +// Session params +type EmptyTopologyParams struct { + IdentitySigner string `json:"identitySigner"` +} + +type EncodeTopologyParams struct { + SessionTopology v3.SessionsTopology `json:"sessionTopology"` +} + +type EncodeCallSignatureParams struct { + // Always + SessionSignature string `json:"sessionSignature"` + // Implicit + Attestation string `json:"attestation"` + IdentitySignature string `json:"identitySignature"` + // Explicit + PermissionIndex string `json:"permissionIndex"` +} + +type EncodeSessionCallSignaturesParams struct { + SessionTopology v3.SessionsTopology `json:"sessionTopology"` + CallSignatures []CallSignaturesParams `json:"callSignatures"` + ExplicitSigners []string `json:"explicitSigners"` + ImplicitSigners []string `json:"implicitSigners"` +} + +type CallSignaturesParams struct { + Attestation struct { + ApprovedSigner string `json:"approvedSigner"` + IdentityType string `json:"identityType"` + IssuerHash string `json:"issuerHash"` + AudienceHash string `json:"audienceHash"` + ApplicationData string `json:"applicationData"` + AuthData struct { + RedirectUrl string `json:"redirectUrl"` + } `json:"authData"` + } `json:"attestation"` + IdentitySignature string `json:"identitySignature"` // RSV string + SessionSignature string `json:"sessionSignature"` // RSV string + PermissionIndex string `json:"permissionIndex"` +} + +type ImageHashParams struct { + SessionTopology v3.SessionsTopology `json:"sessionTopology"` +} + +type AddSessionParams struct { + ExplicitSession json.RawMessage `json:"explicitSession"` + SessionTopology v3.SessionsTopology `json:"sessionTopology"` +} + +type RemoveSessionParams struct { + ExplicitSessionAddress string `json:"explicitSessionAddress"` + SessionTopology v3.SessionsTopology `json:"sessionTopology"` +} + +type AddBlacklistParams struct { + BlacklistAddress string `json:"blacklistAddress"` + SessionTopology v3.SessionsTopology `json:"sessionTopology"` +} + +type RemoveBlacklistParams struct { + BlacklistAddress string `json:"blacklistAddress"` + SessionTopology v3.SessionsTopology `json:"sessionTopology"` +} diff --git a/cmd/sequence/utils.go b/cmd/sequence/utils.go new file mode 100644 index 00000000..6960b047 --- /dev/null +++ b/cmd/sequence/utils.go @@ -0,0 +1,109 @@ +package main + +import ( + "bufio" + "encoding/json" + "fmt" + "io" + "math" + "os" + "strings" +) + +func convertNumbers(input interface{}) interface{} { + switch v := input.(type) { + case map[string]interface{}: + result := make(map[string]interface{}) + for key, value := range v { + result[key] = convertNumbers(value) + } + return result + case []interface{}: + result := make([]interface{}, len(v)) + for i, value := range v { + result[i] = convertNumbers(value) + } + return result + case json.Number: + if strings.Contains(string(v), ".") { + f, _ := v.Float64() + return f + } + n, _ := v.Int64() + if n == 0 { + return int64(0) // Ensure 0 is converted to int64 + } + return n + case float64: + if v == float64(int64(v)) { + return int64(v) // Convert whole numbers to int64 + } + return v + case int: + return int64(v) + case int32: + return int64(v) + case int64: + return v + case uint: + return int64(v) + case uint32: + return int64(v) + case uint64: + if v <= math.MaxInt64 { + return int64(v) + } + return v + case string: + // Try to parse string as number + if n, err := json.Number(v).Int64(); err == nil { + return n + } + if f, err := json.Number(v).Float64(); err == nil { + if f == float64(int64(f)) { + return int64(f) + } + return f + } + return v + default: + return v + } +} + +// readStdin reads all input from stdin until EOF +func readStdin() (string, error) { + reader := bufio.NewReader(os.Stdin) + var input []byte + + for { + chunk, err := reader.ReadByte() + if err == io.EOF { + break + } + if err != nil { + return "", fmt.Errorf("failed to read from stdin: %w", err) + } + input = append(input, chunk) + } + + return string(input), nil +} + +// fromPosOrStdin gets the value from either the positional argument or stdin +func fromPosOrStdin(args []string, pos int) (string, error) { + if len(args) > pos { + return args[pos], nil + } + + input, err := readStdin() + if err != nil { + return "", err + } + + if input == "" { + return "", fmt.Errorf("no input provided") + } + + return input, nil +} diff --git a/config.go b/config.go index 641f579c..529c1e35 100644 --- a/config.go +++ b/config.go @@ -4,37 +4,26 @@ import ( "fmt" "sort" - "github.com/0xsequence/ethkit/ethcoder" "github.com/0xsequence/ethkit/go-ethereum/common" + "github.com/0xsequence/ethkit/go-ethereum/common/hexutil" "github.com/0xsequence/ethkit/go-ethereum/crypto" "github.com/0xsequence/go-sequence/core" v1 "github.com/0xsequence/go-sequence/core/v1" ) -func AddressFromWalletConfig(walletConfig core.WalletConfig, context WalletContext) (common.Address, error) { - return AddressFromImageHash(walletConfig.ImageHash().Hex(), context) +func AddressFromWalletConfig(deployConfig core.ImageHashable, context WalletContext) (common.Address, error) { + return AddressFromImageHash(deployConfig.ImageHash(), context) } -func AddressFromImageHash(imageHash string, context WalletContext) (common.Address, error) { - mainModule32 := [32]byte{} - copy(mainModule32[12:], context.MainModuleAddress.Bytes()) - - codePack, err := ethcoder.SolidityPack([]string{"bytes", "bytes32"}, []interface{}{walletContractBytecode, mainModule32}) - if err != nil { - return common.Address{}, fmt.Errorf("sequence, AddressFromImageHash: %w", err) - } - codeHash := crypto.Keccak256(codePack) - - hashPack, err := ethcoder.SolidityPack( - []string{"bytes1", "address", "bytes32", "bytes32"}, - []interface{}{[]byte{0xff}, context.FactoryAddress, common.FromHex(imageHash), codeHash}, - ) +func AddressFromImageHash(deployHash core.ImageHash, context WalletContext) (common.Address, error) { + creationCode, err := hexutil.Decode(context.CreationCode) if err != nil { - return common.Address{}, fmt.Errorf("sequence, AddressFromImageHash: %w", err) + return common.Address{}, fmt.Errorf(`invalid creation code "%v": %w`, context.CreationCode, err) } - hash := crypto.Keccak256(hashPack)[12:] - return common.BytesToAddress(hash), nil + var mainModule common.Hash + mainModule.SetBytes(context.MainModuleAddress.Bytes()) + return crypto.CreateAddress2(context.FactoryAddress, deployHash.Hash, crypto.Keccak256(creationCode, mainModule.Bytes())), nil } func IsWalletConfigEqual(walletConfigA, walletConfigB core.WalletConfig) bool { diff --git a/config_test.go b/config_test.go index eefcea15..2ee4f8ab 100644 --- a/config_test.go +++ b/config_test.go @@ -4,9 +4,12 @@ import ( "testing" "github.com/0xsequence/ethkit/go-ethereum/common" + "github.com/0xsequence/ethkit/go-ethereum/common/hexutil" "github.com/0xsequence/go-sequence" + "github.com/0xsequence/go-sequence/contracts" v1 "github.com/0xsequence/go-sequence/core/v1" v2 "github.com/0xsequence/go-sequence/core/v2" + v3 "github.com/0xsequence/go-sequence/core/v3" "github.com/stretchr/testify/assert" ) @@ -43,6 +46,21 @@ func TestWalletConfig(t *testing.T) { assert.Equal(t, 2, int(wc.Signers()[common.HexToAddress("abc")])) assert.Equal(t, 2, int(wc.Signers()[common.HexToAddress("456")])) }) + + t.Run("v3", func(t *testing.T) { + wc := &v3.WalletConfig{ + Threshold_: 4, //big.NewInt(4), + Tree: v3.WalletConfigTreeNodes( + &v3.WalletConfigTreeAddressLeaf{Weight: 2, Address: common.HexToAddress("def")}, + &v3.WalletConfigTreeAddressLeaf{Weight: 2, Address: common.HexToAddress("abc")}, + &v3.WalletConfigTreeAddressLeaf{Weight: 2, Address: common.HexToAddress("456")}, + ), + } + + assert.Equal(t, 2, int(wc.Signers()[common.HexToAddress("def")])) + assert.Equal(t, 2, int(wc.Signers()[common.HexToAddress("abc")])) + assert.Equal(t, 2, int(wc.Signers()[common.HexToAddress("456")])) + }) } func TestWalletConfigNoDupes(t *testing.T) { @@ -104,6 +122,19 @@ func TestWalletConfigImageHash(t *testing.T) { assert.Equal(t, expected, wc.ImageHash().Hex()) }) + + t.Run("v3", func(t *testing.T) { + wc := &v3.WalletConfig{ + Threshold_: 1, //big.NewInt(1), + Tree: v3.WalletConfigTreeNodes( + &v3.WalletConfigTreeAddressLeaf{Weight: 1, Address: common.Address{}}, + ), + } + + expected := "0x2e933435748a0b51a395e77bfc6690e8d541c4b9b0b6b507e109d8db15344907" + + assert.Equal(t, expected, wc.ImageHash().Hex()) + }) } func TestWalletAddressFromWalletConfig(t *testing.T) { @@ -118,6 +149,7 @@ func TestWalletAddressFromWalletConfig(t *testing.T) { context := sequence.WalletContext{ FactoryAddress: common.HexToAddress("0x7c2C195CD6D34B8F845992d380aADB2730bB9C6F"), MainModuleAddress: common.HexToAddress("0x8858eeB3DfffA017D4BCE9801D340D36Cf895CCf"), + CreationCode: hexutil.Encode(contracts.V1.CreationCode), } expected := common.HexToAddress("0xF0BA65550F2d1DCCf4B131B774844DC3d801D886") @@ -138,6 +170,7 @@ func TestWalletAddressFromWalletConfig(t *testing.T) { context := sequence.WalletContext{ FactoryAddress: common.HexToAddress("0x7c2C195CD6D34B8F845992d380aADB2730bB9C6F"), MainModuleAddress: common.HexToAddress("0x8858eeB3DfffA017D4BCE9801D340D36Cf895CCf"), + CreationCode: hexutil.Encode(contracts.V2.CreationCode), } expected := common.HexToAddress("0x8AD6cbc016f72971d317f281497aa080DF87a013") @@ -146,6 +179,27 @@ func TestWalletAddressFromWalletConfig(t *testing.T) { assert.NoError(t, err) assert.Equal(t, expected, address) }) + + t.Run("v3", func(t *testing.T) { + wc := &v3.WalletConfig{ + Threshold_: 1, //big.NewInt(1), + Tree: v3.WalletConfigTreeNodes( + &v3.WalletConfigTreeAddressLeaf{Weight: 1, Address: common.Address{}}, + ), + } + + context := sequence.WalletContext{ + FactoryAddress: common.HexToAddress("0x7c2C195CD6D34B8F845992d380aADB2730bB9C6F"), + MainModuleAddress: common.HexToAddress("0x8858eeB3DfffA017D4BCE9801D340D36Cf895CCf"), + CreationCode: hexutil.Encode(contracts.V3.CreationCode), + } + + expected := common.HexToAddress("0xe6b7B59e6ABf35069D895022b427BfabE4C9Fd7f") + + address, err := sequence.AddressFromWalletConfig(wc, context) + assert.NoError(t, err) + assert.Equal(t, expected, address) + }) } func TestWalletIsWalletConfigUsable(t *testing.T) { @@ -214,4 +268,37 @@ func TestWalletIsWalletConfigUsable(t *testing.T) { assert.Error(t, wcBad.IsUsable()) } }) + + t.Run("v3", func(t *testing.T) { + { + wcGood := &v3.WalletConfig{ + Threshold_: 1, //big.NewInt(1), + Tree: v3.WalletConfigTreeNodes( + &v3.WalletConfigTreeAddressLeaf{Weight: 1, Address: common.HexToAddress("0xd63A09C47FDc03e2Cff620446b37f205A7D0679D")}, + ), + } + + assert.NoError(t, wcGood.IsUsable()) + } + { + wcBad := &v3.WalletConfig{ + Threshold_: 0, //big.NewInt(0), + Tree: v3.WalletConfigTreeNodes( + &v3.WalletConfigTreeAddressLeaf{Weight: 1, Address: common.HexToAddress("0xd63A09C47FDc03e2Cff620446b37f205A7D0679D")}, + ), + } + + assert.Error(t, wcBad.IsUsable()) + } + { + wcBad := &v3.WalletConfig{ + Threshold_: 2, //big.NewInt(2), + Tree: v3.WalletConfigTreeNodes( + &v3.WalletConfigTreeAddressLeaf{Weight: 1, Address: common.HexToAddress("0xd63A09C47FDc03e2Cff620446b37f205A7D0679D")}, + ), + } + + assert.Error(t, wcBad.IsUsable()) + } + }) } diff --git a/contracts/artifacts/value-forwarder/ValueForwarder.json b/contracts/artifacts/value-forwarder/ValueForwarder.json new file mode 100644 index 00000000..5d2f4086 --- /dev/null +++ b/contracts/artifacts/value-forwarder/ValueForwarder.json @@ -0,0 +1,75 @@ +{ + "abi": [ + { + "type": "function", + "name": "forwardValue", + "inputs": [ + { "name": "to", "type": "address", "internalType": "address" }, + { "name": "value", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [], + "stateMutability": "payable" + } + ], + "bytecode": { + "object": "0x6080806040523460155761014f908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c6398f850f11461002757600080fd5b6040366003190112610114576004356001600160a01b038116810361011457600080808093602435905af13d1561010f573d67ffffffffffffffff81116100f95760405190601f8101601f19908116603f0116820167ffffffffffffffff8111838210176100f9576040528152600060203d92013e5b156100a457005b60405162461bcd60e51b815260206004820152602760248201527f56616c7565466f727761726465723a204661696c656420746f20666f72776172604482015266642076616c756560c81b6064820152608490fd5b634e487b7160e01b600052604160045260246000fd5b61009d565b600080fdfea26469706673582212202706a11f313e042ccf1cd42b40b5f01308364a2290592fe4e14dce33175da1bf64736f6c634300081c0033", + "sourceMap": "151:216:42:-:0;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x6080604052600436101561001257600080fd5b60003560e01c6398f850f11461002757600080fd5b6040366003190112610114576004356001600160a01b038116810361011457600080808093602435905af13d1561010f573d67ffffffffffffffff81116100f95760405190601f8101601f19908116603f0116820167ffffffffffffffff8111838210176100f9576040528152600060203d92013e5b156100a457005b60405162461bcd60e51b815260206004820152602760248201527f56616c7565466f727761726465723a204661696c656420746f20666f72776172604482015266642076616c756560c81b6064820152608490fd5b634e487b7160e01b600052604160045260246000fd5b61009d565b600080fdfea26469706673582212202706a11f313e042ccf1cd42b40b5f01308364a2290592fe4e14dce33175da1bf64736f6c634300081c0033", + "sourceMap": "151:216:42:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;151:216:42;;;;;;-1:-1:-1;;;;;151:216:42;;;;;;;;;;;;;270:25;;;151:216;;;;;;;;;;;;;;;;-1:-1:-1;;151:216:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;151:216:42;;;;;;;;;;;;;;;;;-1:-1:-1;;;151:216:42;;;;;;;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "methodIdentifiers": { "forwardValue(address,uint256)": "98f850f1" }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"forwardValue\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Michael Standen\",\"kind\":\"dev\",\"methods\":{},\"title\":\"ValueForwarder\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Forwarder for value\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/mocks/ValueForwarder.sol\":\"ValueForwarder\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"test/mocks/ValueForwarder.sol\":{\"keccak256\":\"0x2c86b5ca1001b169892de7cd3b069c5d29223e54a8701350cae39502cef5d8a3\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c880a96377be176d3385a44653ed62e1678b88da9141582d8fbb5f0a6165bfe2\",\"dweb:/ipfs/QmXtDzW2wewKnPp56ntZtCM7AatTpi5M3YWZPvMAmWM15E\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.28+commit.7893614a" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { "internalType": "address", "name": "to", "type": "address" }, + { "internalType": "uint256", "name": "value", "type": "uint256" } + ], + "stateMutability": "payable", + "type": "function", + "name": "forwardValue" + } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "settings": { + "remappings": [ + "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", + "erc2470-libs/=lib/erc2470-libs/", + "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/", + "forge-std/=lib/forge-std/src/", + "halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { + "test/mocks/ValueForwarder.sol": "ValueForwarder" + }, + "evmVersion": "paris", + "libraries": {}, + "viaIR": true + }, + "sources": { + "test/mocks/ValueForwarder.sol": { + "keccak256": "0x2c86b5ca1001b169892de7cd3b069c5d29223e54a8701350cae39502cef5d8a3", + "urls": [ + "bzz-raw://c880a96377be176d3385a44653ed62e1678b88da9141582d8fbb5f0a6165bfe2", + "dweb:/ipfs/QmXtDzW2wewKnPp56ntZtCM7AatTpi5M3YWZPvMAmWM15E" + ], + "license": "Apache-2.0" + } + }, + "version": 1 + }, + "id": 42 +} diff --git a/contracts/artifacts/wallet-contracts-v3/Attestation.sol/LibAttestation.json b/contracts/artifacts/wallet-contracts-v3/Attestation.sol/LibAttestation.json new file mode 100644 index 00000000..eb09d95c --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Attestation.sol/LibAttestation.json @@ -0,0 +1 @@ +{"abi":[],"bytecode":{"object":"0x60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea26469706673582212208ad6df47a99ff0983f124a3a6b65833e64078239f4e6d53bfd54473bde9b883e64736f6c634300081c0033","sourceMap":"1023:3579:40:-:0;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x600080fdfea26469706673582212208ad6df47a99ff0983f124a3a6b65833e64078239f4e6d53bfd54473bde9b883e64736f6c634300081c0033","sourceMap":"1023:3579:40:-:0;;","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Michael Standen\",\"kind\":\"dev\",\"methods\":{},\"title\":\"LibAttestation\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Library for attestation management\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/extensions/sessions/implicit/Attestation.sol\":\"LibAttestation\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/extensions/sessions/implicit/Attestation.sol\":{\"keccak256\":\"0xcaa44022b5eb4bc7ab487b3b1a0125da67e2e891cee983ef6cdb6814f045efc8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://94829782b6dcb482d7c002511c590d1ad8de3b21e5e72575df18be73565b3638\",\"dweb:/ipfs/QmZ4u9FxALzMzKR7auW8FmFkhGVw8kRDeDRJ1PKwKaWNWF\"]},\"src/extensions/sessions/implicit/ISignalsImplicitMode.sol\":{\"keccak256\":\"0x6cb48f50c49bcb3c7071306fe9fac6c102bc9eabf73d9909e19ab3b9a835d0a8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://15297e969f64fc1152654d1cefbe276c15a0ecfc11f86b4c276bb0b454fe700a\",\"dweb:/ipfs/QmeehNFYBPPtJePwUcqiYCgiuFotur4VVVCV1KvegdCCZ4\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/extensions/sessions/implicit/Attestation.sol":"LibAttestation"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/extensions/sessions/implicit/Attestation.sol":{"keccak256":"0xcaa44022b5eb4bc7ab487b3b1a0125da67e2e891cee983ef6cdb6814f045efc8","urls":["bzz-raw://94829782b6dcb482d7c002511c590d1ad8de3b21e5e72575df18be73565b3638","dweb:/ipfs/QmZ4u9FxALzMzKR7auW8FmFkhGVw8kRDeDRJ1PKwKaWNWF"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/ISignalsImplicitMode.sol":{"keccak256":"0x6cb48f50c49bcb3c7071306fe9fac6c102bc9eabf73d9909e19ab3b9a835d0a8","urls":["bzz-raw://15297e969f64fc1152654d1cefbe276c15a0ecfc11f86b4c276bb0b454fe700a","dweb:/ipfs/QmeehNFYBPPtJePwUcqiYCgiuFotur4VVVCV1KvegdCCZ4"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"}},"version":1},"id":40} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Attestation.t.sol/AttestationImp.json b/contracts/artifacts/wallet-contracts-v3/Attestation.t.sol/AttestationImp.json new file mode 100644 index 00000000..8199ff53 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Attestation.t.sol/AttestationImp.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"fromPacked","inputs":[{"name":"encoded","type":"bytes","internalType":"bytes"},{"name":"pointer","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"attestation","type":"tuple","internalType":"struct Attestation","components":[{"name":"approvedSigner","type":"address","internalType":"address"},{"name":"identityType","type":"bytes4","internalType":"bytes4"},{"name":"issuerHash","type":"bytes32","internalType":"bytes32"},{"name":"audienceHash","type":"bytes32","internalType":"bytes32"},{"name":"applicationData","type":"bytes","internalType":"bytes"},{"name":"authData","type":"tuple","internalType":"struct AuthData","components":[{"name":"redirectUrl","type":"string","internalType":"string"},{"name":"issuedAt","type":"uint64","internalType":"uint64"}]}]},{"name":"newPointer","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"toPacked","inputs":[{"name":"attestation","type":"tuple","internalType":"struct Attestation","components":[{"name":"approvedSigner","type":"address","internalType":"address"},{"name":"identityType","type":"bytes4","internalType":"bytes4"},{"name":"issuerHash","type":"bytes32","internalType":"bytes32"},{"name":"audienceHash","type":"bytes32","internalType":"bytes32"},{"name":"applicationData","type":"bytes","internalType":"bytes"},{"name":"authData","type":"tuple","internalType":"struct AuthData","components":[{"name":"redirectUrl","type":"string","internalType":"string"},{"name":"issuedAt","type":"uint64","internalType":"uint64"}]}]}],"outputs":[{"name":"encoded","type":"bytes","internalType":"bytes"}],"stateMutability":"pure"}],"bytecode":{"object":"0x60808060405234601557610860908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c80636e84064c146103cb5763c0a850471461003257600080fd5b346103c65760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103c65760043567ffffffffffffffff81116103c65760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126103c6576040516100ab81610672565b816004013573ffffffffffffffffffffffffffffffffffffffff811681036103c65781526024820135907fffffffff00000000000000000000000000000000000000000000000000000000821682036103c65760208101918252604081019260448101358452606082019060648101358252608481013567ffffffffffffffff81116103c6578101366023820112156103c65761015290369060246004820135910161071a565b906080840191825260a48101359067ffffffffffffffff82116103c6570160407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126103c657604051906101a9826106bd565b600481013567ffffffffffffffff81116103c6576004908201019036601f830112156103c6576101e2602492369060208135910161071a565b835201359367ffffffffffffffff851685036103c657602082019485528160a08201525194517fffffffff00000000000000000000000000000000000000000000000000000000169551925191519182519151938451955194604051958691602083019860e81b7fffffff0000000000000000000000000000000000000000000000000000000000168952805190816023850191602001916102839261060c565b82019060c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166023820152036023017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8810186526008016102e690866106d9565b60405197889760601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602089015260348801526038870152605886015260e81b7fffffff000000000000000000000000000000000000000000000000000000000016607885015280519081607b860191602001916103659261060c565b830190519182607b83016103789261060c565b01607b01037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810182526103ac90826106d9565b604051809160208252602082016103c29161062f565b0390f35b600080fd5b346103c65760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103c65760043567ffffffffffffffff81116103c657366023820112156103c65780600401359067ffffffffffffffff82116103c6576024810136602484840101116103c65760243591610448610799565b50610451610799565b92818101602481013560601c8552602085019560388201357fffffffff000000000000000000000000000000000000000000000000000000001687526040860190603c83013582526060870192605c8101358452607c013560e81c93605b016104ba85826107d6565b6104c69082848a610812565b60808a0196916104d791369161071a565b86526104e2916107d6565b6104ea61077f565b968682016024013560e81c91600301928361050584826107d6565b9161050f93610812565b369061051a9261071a565b8752610525916107d6565b9384016024013560c01c602086015260a08601948552604051968796604088525173ffffffffffffffffffffffffffffffffffffffff166040880152517fffffffff000000000000000000000000000000000000000000000000000000001660608701525160808601525160a08501525160c0840160c0905261010084016105ac9161062f565b9151918381037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00160e0850152825160408252604082016105ec9161062f565b926020015167ffffffffffffffff16906020015260080160208301520390f35b60005b83811061061f5750506000910152565b818101518382015260200161060f565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361066b8151809281875287808801910161060c565b0116010190565b60c0810190811067ffffffffffffffff82111761068e57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff82111761068e57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761068e57604052565b92919267ffffffffffffffff821161068e5760405191610762601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016602001846106d9565b8294818452818301116103c6578281602093846000960137010152565b6040519061078c826106bd565b6000602083606081520152565b604051906107a682610672565b81600081526000602082015260006040820152600060608201526060608082015260a06107d161077f565b910152565b919082018092116107e357565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b909392938483116103c65784116103c657810192039056fea26469706673582212202e33622ba99786e6153906e84e48774f50268db7d2d4c4e8012fedb96f89a93164736f6c634300081c0033","sourceMap":"257:402:78:-:0;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436101561001257600080fd5b60003560e01c80636e84064c146103cb5763c0a850471461003257600080fd5b346103c65760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103c65760043567ffffffffffffffff81116103c65760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126103c6576040516100ab81610672565b816004013573ffffffffffffffffffffffffffffffffffffffff811681036103c65781526024820135907fffffffff00000000000000000000000000000000000000000000000000000000821682036103c65760208101918252604081019260448101358452606082019060648101358252608481013567ffffffffffffffff81116103c6578101366023820112156103c65761015290369060246004820135910161071a565b906080840191825260a48101359067ffffffffffffffff82116103c6570160407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126103c657604051906101a9826106bd565b600481013567ffffffffffffffff81116103c6576004908201019036601f830112156103c6576101e2602492369060208135910161071a565b835201359367ffffffffffffffff851685036103c657602082019485528160a08201525194517fffffffff00000000000000000000000000000000000000000000000000000000169551925191519182519151938451955194604051958691602083019860e81b7fffffff0000000000000000000000000000000000000000000000000000000000168952805190816023850191602001916102839261060c565b82019060c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166023820152036023017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8810186526008016102e690866106d9565b60405197889760601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602089015260348801526038870152605886015260e81b7fffffff000000000000000000000000000000000000000000000000000000000016607885015280519081607b860191602001916103659261060c565b830190519182607b83016103789261060c565b01607b01037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810182526103ac90826106d9565b604051809160208252602082016103c29161062f565b0390f35b600080fd5b346103c65760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103c65760043567ffffffffffffffff81116103c657366023820112156103c65780600401359067ffffffffffffffff82116103c6576024810136602484840101116103c65760243591610448610799565b50610451610799565b92818101602481013560601c8552602085019560388201357fffffffff000000000000000000000000000000000000000000000000000000001687526040860190603c83013582526060870192605c8101358452607c013560e81c93605b016104ba85826107d6565b6104c69082848a610812565b60808a0196916104d791369161071a565b86526104e2916107d6565b6104ea61077f565b968682016024013560e81c91600301928361050584826107d6565b9161050f93610812565b369061051a9261071a565b8752610525916107d6565b9384016024013560c01c602086015260a08601948552604051968796604088525173ffffffffffffffffffffffffffffffffffffffff166040880152517fffffffff000000000000000000000000000000000000000000000000000000001660608701525160808601525160a08501525160c0840160c0905261010084016105ac9161062f565b9151918381037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00160e0850152825160408252604082016105ec9161062f565b926020015167ffffffffffffffff16906020015260080160208301520390f35b60005b83811061061f5750506000910152565b818101518382015260200161060f565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361066b8151809281875287808801910161060c565b0116010190565b60c0810190811067ffffffffffffffff82111761068e57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff82111761068e57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761068e57604052565b92919267ffffffffffffffff821161068e5760405191610762601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016602001846106d9565b8294818452818301116103c6578281602093846000960137010152565b6040519061078c826106bd565b6000602083606081520152565b604051906107a682610672565b81600081526000602082015260006040820152600060608201526060608082015260a06107d161077f565b910152565b919082018092116107e357565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b909392938483116103c65784116103c657810192039056fea26469706673582212202e33622ba99786e6153906e84e48774f50268db7d2d4c4e8012fedb96f89a93164736f6c634300081c0033","sourceMap":"257:402:78:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3621:27:40;;257:402:78;;;4049:20:40;;257:402:78;;;;;;;;4019:108:40;;;257:402:78;4019:108:40;;257:402:78;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;4019:108:40;257:402:78;4019:108:40;;;;;;257:402:78;4019:108:40;;;;;:::i;:::-;257:402:78;;;;;;;;;;3462:279:40;;257:402:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;3462:279:40;4019:108;3462:279;;;;;;;;:::i;:::-;257:402:78;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;3281:184:68;;;;257:402:78;3281:184:68;;;;;257:402:78;;;1783:24:40;;2716:202:68;;;;;;;257:402:78;;;1860:22:40;;3047:107:68;;;;;257:402:78;;3281:184:68;1936:24:40;;3047:107:68;;;;;257:402:78;;1318:135:68;;;;;;;;2187:21:40;;;;:::i;:::-;2168:41;;;;;;:::i;:::-;2138:27;;;;;257:402:78;;;;;:::i;:::-;2138:71:40;;2215:22;;;:::i;:::-;257:402:78;;:::i;:::-;1318:135:68;;;;257:402:78;1318:135:68;;;;;;;3019:27:40;;;;;;:::i;:::-;3003:44;;;;:::i;:::-;257:402:78;;;;;:::i;:::-;2973:75:40;;3054:28;;;:::i;:::-;1578:135:68;;;257:402:78;1578:135:68;;;;257:402:78;3089:17:40;;257:402:78;2261:20:40;;;2260:76;;;257:402:78;;;;;;;;;;;;;;;;2716:202:68;257:402:78;3281:184:68;257:402:78;;;;2138:27:40;257:402:78;;;;2261:20:40;257:402:78;;;;1578:135:68;257:402:78;;1578:135:68;257:402:78;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;1578:135:68;;257:402:78;;;;;;;;;;;;;;;-1:-1:-1;;257:402:78;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;257:402:78;;;;;-1:-1:-1;257:402:78;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;257:402:78;;;;;;:::o;:::-;;;;;;;:::i;:::-;-1:-1:-1;257:402:78;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;-1:-1:-1;257:402:78;;-1:-1:-1;257:402:78;;;;-1:-1:-1;257:402:78;;;;-1:-1:-1;257:402:78;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o","linkReferences":{}},"methodIdentifiers":{"fromPacked(bytes,uint256)":"6e84064c","toPacked((address,bytes4,bytes32,bytes32,bytes,(string,uint64)))":"c0a85047"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"encoded\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"pointer\",\"type\":\"uint256\"}],\"name\":\"fromPacked\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"approvedSigner\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"identityType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes32\",\"name\":\"issuerHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"audienceHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"applicationData\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"redirectUrl\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"issuedAt\",\"type\":\"uint64\"}],\"internalType\":\"struct AuthData\",\"name\":\"authData\",\"type\":\"tuple\"}],\"internalType\":\"struct Attestation\",\"name\":\"attestation\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"newPointer\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"approvedSigner\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"identityType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes32\",\"name\":\"issuerHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"audienceHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"applicationData\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"redirectUrl\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"issuedAt\",\"type\":\"uint64\"}],\"internalType\":\"struct AuthData\",\"name\":\"authData\",\"type\":\"tuple\"}],\"internalType\":\"struct Attestation\",\"name\":\"attestation\",\"type\":\"tuple\"}],\"name\":\"toPacked\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"encoded\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/extensions/sessions/Attestation.t.sol\":\"AttestationImp\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/extensions/sessions/implicit/Attestation.sol\":{\"keccak256\":\"0xcaa44022b5eb4bc7ab487b3b1a0125da67e2e891cee983ef6cdb6814f045efc8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://94829782b6dcb482d7c002511c590d1ad8de3b21e5e72575df18be73565b3638\",\"dweb:/ipfs/QmZ4u9FxALzMzKR7auW8FmFkhGVw8kRDeDRJ1PKwKaWNWF\"]},\"src/extensions/sessions/implicit/ISignalsImplicitMode.sol\":{\"keccak256\":\"0x6cb48f50c49bcb3c7071306fe9fac6c102bc9eabf73d9909e19ab3b9a835d0a8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://15297e969f64fc1152654d1cefbe276c15a0ecfc11f86b4c276bb0b454fe700a\",\"dweb:/ipfs/QmeehNFYBPPtJePwUcqiYCgiuFotur4VVVCV1KvegdCCZ4\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"test/extensions/sessions/Attestation.t.sol\":{\"keccak256\":\"0x00666e18f76eb3afa983c92912f24a414e2113486d59f4030d05d8f12b779c12\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://39ea087757923a5945cc75f0815afba738f034e9ec68e11e238dc2c47efd10d9\",\"dweb:/ipfs/QmQagc48NM7A94rpZ3A2qar74AqsiZYxjgm2q9KNsfcdGF\"]},\"test/utils/TestUtils.sol\":{\"keccak256\":\"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad\",\"dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"bytes","name":"encoded","type":"bytes"},{"internalType":"uint256","name":"pointer","type":"uint256"}],"stateMutability":"pure","type":"function","name":"fromPacked","outputs":[{"internalType":"struct Attestation","name":"attestation","type":"tuple","components":[{"internalType":"address","name":"approvedSigner","type":"address"},{"internalType":"bytes4","name":"identityType","type":"bytes4"},{"internalType":"bytes32","name":"issuerHash","type":"bytes32"},{"internalType":"bytes32","name":"audienceHash","type":"bytes32"},{"internalType":"bytes","name":"applicationData","type":"bytes"},{"internalType":"struct AuthData","name":"authData","type":"tuple","components":[{"internalType":"string","name":"redirectUrl","type":"string"},{"internalType":"uint64","name":"issuedAt","type":"uint64"}]}]},{"internalType":"uint256","name":"newPointer","type":"uint256"}]},{"inputs":[{"internalType":"struct Attestation","name":"attestation","type":"tuple","components":[{"internalType":"address","name":"approvedSigner","type":"address"},{"internalType":"bytes4","name":"identityType","type":"bytes4"},{"internalType":"bytes32","name":"issuerHash","type":"bytes32"},{"internalType":"bytes32","name":"audienceHash","type":"bytes32"},{"internalType":"bytes","name":"applicationData","type":"bytes"},{"internalType":"struct AuthData","name":"authData","type":"tuple","components":[{"internalType":"string","name":"redirectUrl","type":"string"},{"internalType":"uint64","name":"issuedAt","type":"uint64"}]}]}],"stateMutability":"pure","type":"function","name":"toPacked","outputs":[{"internalType":"bytes","name":"encoded","type":"bytes"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/extensions/sessions/Attestation.t.sol":"AttestationImp"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/extensions/sessions/implicit/Attestation.sol":{"keccak256":"0xcaa44022b5eb4bc7ab487b3b1a0125da67e2e891cee983ef6cdb6814f045efc8","urls":["bzz-raw://94829782b6dcb482d7c002511c590d1ad8de3b21e5e72575df18be73565b3638","dweb:/ipfs/QmZ4u9FxALzMzKR7auW8FmFkhGVw8kRDeDRJ1PKwKaWNWF"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/ISignalsImplicitMode.sol":{"keccak256":"0x6cb48f50c49bcb3c7071306fe9fac6c102bc9eabf73d9909e19ab3b9a835d0a8","urls":["bzz-raw://15297e969f64fc1152654d1cefbe276c15a0ecfc11f86b4c276bb0b454fe700a","dweb:/ipfs/QmeehNFYBPPtJePwUcqiYCgiuFotur4VVVCV1KvegdCCZ4"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"test/extensions/sessions/Attestation.t.sol":{"keccak256":"0x00666e18f76eb3afa983c92912f24a414e2113486d59f4030d05d8f12b779c12","urls":["bzz-raw://39ea087757923a5945cc75f0815afba738f034e9ec68e11e238dc2c47efd10d9","dweb:/ipfs/QmQagc48NM7A94rpZ3A2qar74AqsiZYxjgm2q9KNsfcdGF"],"license":"Apache-2.0"},"test/utils/TestUtils.sol":{"keccak256":"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79","urls":["bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad","dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa"],"license":"Apache-2.0"}},"version":1},"id":78} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Attestation.t.sol/AttestationTest.json b/contracts/artifacts/wallet-contracts-v3/Attestation.t.sol/AttestationTest.json new file mode 100644 index 00000000..b208f80a --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Attestation.t.sol/AttestationTest.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"attestationImp","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract AttestationImp"}],"stateMutability":"view"},{"type":"function","name":"excludeArtifacts","inputs":[],"outputs":[{"name":"excludedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"excludeContracts","inputs":[],"outputs":[{"name":"excludedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"excludeSelectors","inputs":[],"outputs":[{"name":"excludedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"excludeSenders","inputs":[],"outputs":[{"name":"excludedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"setUp","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"targetArtifactSelectors","inputs":[],"outputs":[{"name":"targetedArtifactSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzArtifactSelector[]","components":[{"name":"artifact","type":"string","internalType":"string"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetArtifacts","inputs":[],"outputs":[{"name":"targetedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"targetContracts","inputs":[],"outputs":[{"name":"targetedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"targetInterfaces","inputs":[],"outputs":[{"name":"targetedInterfaces_","type":"tuple[]","internalType":"struct StdInvariant.FuzzInterface[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"artifacts","type":"string[]","internalType":"string[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSelectors","inputs":[],"outputs":[{"name":"targetedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSenders","inputs":[],"outputs":[{"name":"targetedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"test_packAndUnpackAttestation","inputs":[{"name":"attestation","type":"tuple","internalType":"struct Attestation","components":[{"name":"approvedSigner","type":"address","internalType":"address"},{"name":"identityType","type":"bytes4","internalType":"bytes4"},{"name":"issuerHash","type":"bytes32","internalType":"bytes32"},{"name":"audienceHash","type":"bytes32","internalType":"bytes32"},{"name":"applicationData","type":"bytes","internalType":"bytes"},{"name":"authData","type":"tuple","internalType":"struct AuthData","components":[{"name":"redirectUrl","type":"string","internalType":"string"},{"name":"issuedAt","type":"uint64","internalType":"uint64"}]}]}],"outputs":[],"stateMutability":"view"},{"type":"event","name":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false}],"bytecode":{"object":"0x60808060405234602f57600160ff19600c541617600c55600160ff19601f541617601f5561280790816100358239f35b600080fdfe608080604052600436101561001357600080fd5b600090813560e01c9081630a9254e41461152c575080631ed7831c146114835780632ade3880146112575780633e5e3c23146111ae5780633f7286f41461110557806366d9a9a014610faa57806385226c8114610f025780638e5b0d85146104ac578063916a17c6146103d7578063b0464fdc14610302578063b0b3fea6146102ad578063b5508aa914610205578063ba414fa6146101c2578063e20c9f71146101095763fa7626d4146100c657600080fd5b3461010657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261010657602060ff601f54166040519015158152f35b80fd5b503461010657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101065760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b8181106101965761019285610186818703826117fb565b6040519182918261160a565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff1684526020909301926001928301920161016f565b503461010657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101065760206101fb611d6f565b6040519015158152f35b503461010657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101065760195461024081611957565b9161024e60405193846117fb565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b83831061029057604051806101928782611716565b60016020819261029f8561196f565b81520192019201919061027b565b503461010657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261010657602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051908152f35b503461010657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261010657601c5461033d81611957565b9161034b60405193846117fb565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b83831061038d576040518061019287826118b2565b600260206001926040516103a081611794565b73ffffffffffffffffffffffffffffffffffffffff86541681526103c5858701611a76565b83820152815201920192019190610378565b503461010657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261010657601d5461041281611957565b9161042060405193846117fb565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b838310610462576040518061019287826118b2565b6002602060019260405161047581611794565b73ffffffffffffffffffffffffffffffffffffffff865416815261049a858701611a76565b8382015281520192019201919061044d565b50346101065760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101065760043567ffffffffffffffff8111610efe5760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8236030112610efe57604051610526816117df565b816004013573ffffffffffffffffffffffffffffffffffffffff81168103610c9e57815260248201357fffffffff0000000000000000000000000000000000000000000000000000000081168103610c9e57602082019081526040820192604481013584526060830160648201358152608482013567ffffffffffffffff8111610efa57820136602382011215610efa576105cb903690602460048201359101611876565b916080850192835260a48101359067ffffffffffffffff8211610ef257019460407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8736030112610efa576040519561062387611794565b600481013567ffffffffffffffff8111610ef6576004908201019036601f83011215610ef65761065c6024923690602081359101611876565b8852013567ffffffffffffffff81168103610ef257602087015260a0850195865273ffffffffffffffffffffffffffffffffffffffff601f5460081c1693604051957fc0a850470000000000000000000000000000000000000000000000000000000087526020600488015273ffffffffffffffffffffffffffffffffffffffff81511660248801527fffffffff0000000000000000000000000000000000000000000000000000000082511660448801528251606488015283516084880152888780610735885160c060a484015260e483019061167d565b8b51907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc8382030160c4840152602067ffffffffffffffff81610781855160408652604086019061167d565b940151169101520381895afa968715610ea7578997610eb2575b508860405180977f6e84064c0000000000000000000000000000000000000000000000000000000082526040600483015281806107db604482018d61167d565b85602483015203915afa968715610ea75789968a98610d17575b509061085173ffffffffffffffffffffffffffffffffffffffff9251986040998a51916108228c846117fb565b600783527f706f696e746572000000000000000000000000000000000000000000000000006020840152611e55565b51168873ffffffffffffffffffffffffffffffffffffffff8751168851926108798a856117fb565b600e84527f617070726f7665645369676e65720000000000000000000000000000000000006020850152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610d13576109068a5194859384937f2f2769d10000000000000000000000000000000000000000000000000000000085526004850152602484015260606044840152606483019061167d565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610d0957610cc1575b5091610a00610a42926109bf7fffffffff000000000000000000000000000000000000000000000000000000008b979651167fffffffff0000000000000000000000000000000000000000000000000000000060208a0151168a51916109908c846117fb565b600c83527f6964656e746974795479706500000000000000000000000000000000000000006020840152611eee565b51878701518851916109d18a846117fb565b600a83527f69737375657248617368000000000000000000000000000000000000000000006020840152611eee565b516060850151865191610a1388846117fb565b600c83527f61756469656e63654861736800000000000000000000000000000000000000006020840152611eee565b516080830151908451610a5586826117fb565b600f81527f6170706c69636174696f6e4461746100000000000000000000000000000000006020820152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610c9e578391610b41610ae192610b11895196879586957fe24fed0000000000000000000000000000000000000000000000000000000000875260606004880152606487019061167d565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc86830301602487015261167d565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc84830301604485015261167d565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610ca257610cac575b5060a0845151920191825151908451610b7e86826117fb565b601481527f61757468446174612e726564697265637455726c0000000000000000000000006020820152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610c9e578391610c0a610ae192610b11895196879586957f36f656d800000000000000000000000000000000000000000000000000000000875260606004880152606487019061167d565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610ca257610c89575b505067ffffffffffffffff60208181610c869651015116925101511690610c57835193846117fb565b601183527f61757468446174612e69737375656441740000000000000000000000000000006020840152611e55565b80f35b81610c93916117fb565b610c9e578338610c2e565b8380fd5b84513d84823e3d90fd5b81610cb6916117fb565b610c9e578338610b65565b610a42926109bf8a610cfb7fffffffff000000000000000000000000000000000000000000000000000000009c610a0095999896996117fb565b9a505092509390929361092a565b87513d8b823e3d90fd5b8280fd5b91965096503d808a833e610d2b81836117fb565b810195604082880312610ea357815167ffffffffffffffff8111610e9f5782019660c088820312610e9f5760405197610d63896117df565b805173ffffffffffffffffffffffffffffffffffffffff81168103610e9b57895260208101517fffffffff0000000000000000000000000000000000000000000000000000000081168103610e9b5760208a0152604081015160408a0152606081015160608a0152608081015167ffffffffffffffff8111610e9b5782610deb918301611d52565b60808a015260a08101519067ffffffffffffffff8211610e9b570190604082820312610e935760405191610e1e83611794565b805167ffffffffffffffff8111610e9757810182601f82011215610e97576020928184610e4d93519101611d1d565b8352015167ffffffffffffffff81168103610e935773ffffffffffffffffffffffffffffffffffffffff93826020928361085195015260a08b01520151989192506107f5565b8b80fd5b8d80fd5b8c80fd5b8a80fd5b8980fd5b6040513d8b823e3d90fd5b9096503d808a833e610ec481836117fb565b8101602082820312610ea357815167ffffffffffffffff8111610e9f57610eeb9201611d52565b953861079b565b8780fd5b8880fd5b8680fd5b5080fd5b503461010657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261010657601a54610f3d81611957565b91610f4b60405193846117fb565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b838310610f8d57604051806101928782611716565b600160208192610f9c8561196f565b815201920192019190610f78565b503461010657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261010657601b54610fe581611957565b610ff260405191826117fb565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b8383106110ca57868587604051928392602084019060208552518091526040840160408260051b8601019392905b82821061105f57505050500390f35b919360206110ba827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc06001959799849503018652885190836110aa835160408452604084019061167d565b92015190848184039101526116c0565b9601920192018594939192611050565b600260206001926040516110dd81611794565b6110e68661196f565b81526110f3858701611a76565b83820152815201920192019190611022565b503461010657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101065760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b8181106111825761019285610186818703826117fb565b825473ffffffffffffffffffffffffffffffffffffffff1684526020909301926001928301920161116b565b503461010657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101065760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b81811061122b5761019285610186818703826117fb565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201611214565b503461010657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261010657601e5461129281611957565b61129f60405191826117fb565b818152601e83526020810191837f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350845b8383106113ed5786858760405192839260208401906020855251809152604084019160408260051b8601019392815b83831061130b5786860387f35b9193957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09086929496030183528551906020604082019273ffffffffffffffffffffffffffffffffffffffff81511683520151916040602083015282518091526060820190602060608260051b850101940192855b8281106113a4575050505050602080600192970193019301909286959492936112fe565b90919293946020806113e0837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08760019603018952895161167d565b9701950193929101611380565b6040516113f981611794565b73ffffffffffffffffffffffffffffffffffffffff835416815260018301805461142281611957565b9161143060405193846117fb565b8183528a526020808b20908b9084015b8382106114665750505050600192826020928360029501528152019201920191906112cf565b6001602081926114758661196f565b815201930191019091611440565b503461010657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101065760405180916020601654928381520191601682527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289915b8181106115005761019285610186818703826117fb565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016114e9565b905034610efe57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610efe5761087b8082019082821067ffffffffffffffff8311176115dd57908291611f578339039082f080156115d0577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00601f549260081b16911617601f5580f35b50604051903d90823e3d90fd5b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b602060408183019282815284518094520192019060005b81811061162e5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101611621565b60005b83811061166d5750506000910152565b818101518382015260200161165d565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936116b98151809281875287808801910161165a565b0116010190565b906020808351928381520192019060005b8181106116de5750505090565b82517fffffffff00000000000000000000000000000000000000000000000000000000168452602093840193909201916001016116d1565b602081016020825282518091526040820191602060408360051b8301019401926000915b83831061174957505050505090565b9091929394602080611785837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08660019603018752895161167d565b9701930193019193929061173a565b6040810190811067ffffffffffffffff8211176117b057604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60c0810190811067ffffffffffffffff8211176117b057604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176117b057604052565b67ffffffffffffffff81116117b057601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926118828261183c565b9161189060405193846117fb565b8294818452818301116118ad578281602093846000960137010152565b600080fd5b602081016020825282518091526040820191602060408360051b8301019401926000915b8383106118e557505050505090565b9091929394602080611948837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff8151168452015191818582015201906116c0565b970193019301919392906118d6565b67ffffffffffffffff81116117b05760051b60200190565b906040519160008154918260011c92600181168015611a6c575b602085108114611a3f578487528693929181156119ff57506001146119b8575b506119b6925003836117fb565b565b90506000929192526020600020906000915b8183106119e35750509060206119b692820101386119a9565b60209193508060019154838589010152019101909184926119ca565b602093506119b69592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b820101386119a9565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f1693611989565b90604051918281549182825260208201906000526020600020926000905b806007830110611c90576119b6945491818110611c5a575b818110611c24575b818110611bee575b818110611bb8575b818110611b82575b818110611b4c575b818110611b17575b10611aea575b5003836117fb565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260200138611ae2565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b168152019301611adc565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b168152019301611ad4565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b168152019301611acc565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b168152019301611ac4565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b168152019301611abc565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b168152019301611ab4565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b168152019301611aac565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e0820152019401920185929391611a94565b90929192611d2a8161183c565b91611d3860405193846117fb565b8294828452828201116118ad5760206119b693019061165a565b9080601f830112156118ad578151611d6c92602001611d1d565b90565b60085460ff168015611d7e5790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115611e4957600091611e17575b50151590565b90506020813d602011611e41575b81611e32602093836117fb565b810103126118ad575138611e11565b3d9150611e25565b6040513d6000823e3d90fd5b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156118ad57600091611ebd60405194859384937f88b44c850000000000000000000000000000000000000000000000000000000085526004850152602484015260606044840152606483019061167d565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015611e4957611ee35750565b60006119b6916117fb565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156118ad57600091611ebd60405194859384937fc1fa1ed00000000000000000000000000000000000000000000000000000000085526004850152602484015260606044840152606483019061167d56fe60808060405234601557610860908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c80636e84064c146103cb5763c0a850471461003257600080fd5b346103c65760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103c65760043567ffffffffffffffff81116103c65760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126103c6576040516100ab81610672565b816004013573ffffffffffffffffffffffffffffffffffffffff811681036103c65781526024820135907fffffffff00000000000000000000000000000000000000000000000000000000821682036103c65760208101918252604081019260448101358452606082019060648101358252608481013567ffffffffffffffff81116103c6578101366023820112156103c65761015290369060246004820135910161071a565b906080840191825260a48101359067ffffffffffffffff82116103c6570160407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126103c657604051906101a9826106bd565b600481013567ffffffffffffffff81116103c6576004908201019036601f830112156103c6576101e2602492369060208135910161071a565b835201359367ffffffffffffffff851685036103c657602082019485528160a08201525194517fffffffff00000000000000000000000000000000000000000000000000000000169551925191519182519151938451955194604051958691602083019860e81b7fffffff0000000000000000000000000000000000000000000000000000000000168952805190816023850191602001916102839261060c565b82019060c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166023820152036023017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8810186526008016102e690866106d9565b60405197889760601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602089015260348801526038870152605886015260e81b7fffffff000000000000000000000000000000000000000000000000000000000016607885015280519081607b860191602001916103659261060c565b830190519182607b83016103789261060c565b01607b01037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810182526103ac90826106d9565b604051809160208252602082016103c29161062f565b0390f35b600080fd5b346103c65760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103c65760043567ffffffffffffffff81116103c657366023820112156103c65780600401359067ffffffffffffffff82116103c6576024810136602484840101116103c65760243591610448610799565b50610451610799565b92818101602481013560601c8552602085019560388201357fffffffff000000000000000000000000000000000000000000000000000000001687526040860190603c83013582526060870192605c8101358452607c013560e81c93605b016104ba85826107d6565b6104c69082848a610812565b60808a0196916104d791369161071a565b86526104e2916107d6565b6104ea61077f565b968682016024013560e81c91600301928361050584826107d6565b9161050f93610812565b369061051a9261071a565b8752610525916107d6565b9384016024013560c01c602086015260a08601948552604051968796604088525173ffffffffffffffffffffffffffffffffffffffff166040880152517fffffffff000000000000000000000000000000000000000000000000000000001660608701525160808601525160a08501525160c0840160c0905261010084016105ac9161062f565b9151918381037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00160e0850152825160408252604082016105ec9161062f565b926020015167ffffffffffffffff16906020015260080160208301520390f35b60005b83811061061f5750506000910152565b818101518382015260200161060f565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361066b8151809281875287808801910161060c565b0116010190565b60c0810190811067ffffffffffffffff82111761068e57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff82111761068e57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761068e57604052565b92919267ffffffffffffffff821161068e5760405191610762601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016602001846106d9565b8294818452818301116103c6578281602093846000960137010152565b6040519061078c826106bd565b6000602083606081520152565b604051906107a682610672565b81600081526000602082015260006040820152600060608201526060608082015260a06107d161077f565b910152565b919082018092116107e357565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b909392938483116103c65784116103c657810192039056fea26469706673582212202e33622ba99786e6153906e84e48774f50268db7d2d4c4e8012fedb96f89a93164736f6c634300081c0033a2646970667358221220f02f854f0383bf9bbcf23105177dbcd52473fce8b812bc196592c272115f295764736f6c634300081c0033","sourceMap":"661:1066:78:-:0;;;;;;;3166:4:5;661:1066:78;;3166:4:5;661:1066:78;;;3166:4:5;661:1066:78;3166:4:5;661:1066:78;;1087:4:16;661:1066:78;;;1087:4:16;661:1066:78;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608080604052600436101561001357600080fd5b600090813560e01c9081630a9254e41461152c575080631ed7831c146114835780632ade3880146112575780633e5e3c23146111ae5780633f7286f41461110557806366d9a9a014610faa57806385226c8114610f025780638e5b0d85146104ac578063916a17c6146103d7578063b0464fdc14610302578063b0b3fea6146102ad578063b5508aa914610205578063ba414fa6146101c2578063e20c9f71146101095763fa7626d4146100c657600080fd5b3461010657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261010657602060ff601f54166040519015158152f35b80fd5b503461010657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101065760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b8181106101965761019285610186818703826117fb565b6040519182918261160a565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff1684526020909301926001928301920161016f565b503461010657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101065760206101fb611d6f565b6040519015158152f35b503461010657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101065760195461024081611957565b9161024e60405193846117fb565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b83831061029057604051806101928782611716565b60016020819261029f8561196f565b81520192019201919061027b565b503461010657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261010657602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051908152f35b503461010657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261010657601c5461033d81611957565b9161034b60405193846117fb565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b83831061038d576040518061019287826118b2565b600260206001926040516103a081611794565b73ffffffffffffffffffffffffffffffffffffffff86541681526103c5858701611a76565b83820152815201920192019190610378565b503461010657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261010657601d5461041281611957565b9161042060405193846117fb565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b838310610462576040518061019287826118b2565b6002602060019260405161047581611794565b73ffffffffffffffffffffffffffffffffffffffff865416815261049a858701611a76565b8382015281520192019201919061044d565b50346101065760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101065760043567ffffffffffffffff8111610efe5760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8236030112610efe57604051610526816117df565b816004013573ffffffffffffffffffffffffffffffffffffffff81168103610c9e57815260248201357fffffffff0000000000000000000000000000000000000000000000000000000081168103610c9e57602082019081526040820192604481013584526060830160648201358152608482013567ffffffffffffffff8111610efa57820136602382011215610efa576105cb903690602460048201359101611876565b916080850192835260a48101359067ffffffffffffffff8211610ef257019460407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8736030112610efa576040519561062387611794565b600481013567ffffffffffffffff8111610ef6576004908201019036601f83011215610ef65761065c6024923690602081359101611876565b8852013567ffffffffffffffff81168103610ef257602087015260a0850195865273ffffffffffffffffffffffffffffffffffffffff601f5460081c1693604051957fc0a850470000000000000000000000000000000000000000000000000000000087526020600488015273ffffffffffffffffffffffffffffffffffffffff81511660248801527fffffffff0000000000000000000000000000000000000000000000000000000082511660448801528251606488015283516084880152888780610735885160c060a484015260e483019061167d565b8b51907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc8382030160c4840152602067ffffffffffffffff81610781855160408652604086019061167d565b940151169101520381895afa968715610ea7578997610eb2575b508860405180977f6e84064c0000000000000000000000000000000000000000000000000000000082526040600483015281806107db604482018d61167d565b85602483015203915afa968715610ea75789968a98610d17575b509061085173ffffffffffffffffffffffffffffffffffffffff9251986040998a51916108228c846117fb565b600783527f706f696e746572000000000000000000000000000000000000000000000000006020840152611e55565b51168873ffffffffffffffffffffffffffffffffffffffff8751168851926108798a856117fb565b600e84527f617070726f7665645369676e65720000000000000000000000000000000000006020850152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610d13576109068a5194859384937f2f2769d10000000000000000000000000000000000000000000000000000000085526004850152602484015260606044840152606483019061167d565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610d0957610cc1575b5091610a00610a42926109bf7fffffffff000000000000000000000000000000000000000000000000000000008b979651167fffffffff0000000000000000000000000000000000000000000000000000000060208a0151168a51916109908c846117fb565b600c83527f6964656e746974795479706500000000000000000000000000000000000000006020840152611eee565b51878701518851916109d18a846117fb565b600a83527f69737375657248617368000000000000000000000000000000000000000000006020840152611eee565b516060850151865191610a1388846117fb565b600c83527f61756469656e63654861736800000000000000000000000000000000000000006020840152611eee565b516080830151908451610a5586826117fb565b600f81527f6170706c69636174696f6e4461746100000000000000000000000000000000006020820152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610c9e578391610b41610ae192610b11895196879586957fe24fed0000000000000000000000000000000000000000000000000000000000875260606004880152606487019061167d565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc86830301602487015261167d565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc84830301604485015261167d565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610ca257610cac575b5060a0845151920191825151908451610b7e86826117fb565b601481527f61757468446174612e726564697265637455726c0000000000000000000000006020820152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610c9e578391610c0a610ae192610b11895196879586957f36f656d800000000000000000000000000000000000000000000000000000000875260606004880152606487019061167d565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610ca257610c89575b505067ffffffffffffffff60208181610c869651015116925101511690610c57835193846117fb565b601183527f61757468446174612e69737375656441740000000000000000000000000000006020840152611e55565b80f35b81610c93916117fb565b610c9e578338610c2e565b8380fd5b84513d84823e3d90fd5b81610cb6916117fb565b610c9e578338610b65565b610a42926109bf8a610cfb7fffffffff000000000000000000000000000000000000000000000000000000009c610a0095999896996117fb565b9a505092509390929361092a565b87513d8b823e3d90fd5b8280fd5b91965096503d808a833e610d2b81836117fb565b810195604082880312610ea357815167ffffffffffffffff8111610e9f5782019660c088820312610e9f5760405197610d63896117df565b805173ffffffffffffffffffffffffffffffffffffffff81168103610e9b57895260208101517fffffffff0000000000000000000000000000000000000000000000000000000081168103610e9b5760208a0152604081015160408a0152606081015160608a0152608081015167ffffffffffffffff8111610e9b5782610deb918301611d52565b60808a015260a08101519067ffffffffffffffff8211610e9b570190604082820312610e935760405191610e1e83611794565b805167ffffffffffffffff8111610e9757810182601f82011215610e97576020928184610e4d93519101611d1d565b8352015167ffffffffffffffff81168103610e935773ffffffffffffffffffffffffffffffffffffffff93826020928361085195015260a08b01520151989192506107f5565b8b80fd5b8d80fd5b8c80fd5b8a80fd5b8980fd5b6040513d8b823e3d90fd5b9096503d808a833e610ec481836117fb565b8101602082820312610ea357815167ffffffffffffffff8111610e9f57610eeb9201611d52565b953861079b565b8780fd5b8880fd5b8680fd5b5080fd5b503461010657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261010657601a54610f3d81611957565b91610f4b60405193846117fb565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b838310610f8d57604051806101928782611716565b600160208192610f9c8561196f565b815201920192019190610f78565b503461010657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261010657601b54610fe581611957565b610ff260405191826117fb565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b8383106110ca57868587604051928392602084019060208552518091526040840160408260051b8601019392905b82821061105f57505050500390f35b919360206110ba827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc06001959799849503018652885190836110aa835160408452604084019061167d565b92015190848184039101526116c0565b9601920192018594939192611050565b600260206001926040516110dd81611794565b6110e68661196f565b81526110f3858701611a76565b83820152815201920192019190611022565b503461010657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101065760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b8181106111825761019285610186818703826117fb565b825473ffffffffffffffffffffffffffffffffffffffff1684526020909301926001928301920161116b565b503461010657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101065760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b81811061122b5761019285610186818703826117fb565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201611214565b503461010657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261010657601e5461129281611957565b61129f60405191826117fb565b818152601e83526020810191837f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350845b8383106113ed5786858760405192839260208401906020855251809152604084019160408260051b8601019392815b83831061130b5786860387f35b9193957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09086929496030183528551906020604082019273ffffffffffffffffffffffffffffffffffffffff81511683520151916040602083015282518091526060820190602060608260051b850101940192855b8281106113a4575050505050602080600192970193019301909286959492936112fe565b90919293946020806113e0837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08760019603018952895161167d565b9701950193929101611380565b6040516113f981611794565b73ffffffffffffffffffffffffffffffffffffffff835416815260018301805461142281611957565b9161143060405193846117fb565b8183528a526020808b20908b9084015b8382106114665750505050600192826020928360029501528152019201920191906112cf565b6001602081926114758661196f565b815201930191019091611440565b503461010657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101065760405180916020601654928381520191601682527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289915b8181106115005761019285610186818703826117fb565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016114e9565b905034610efe57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610efe5761087b8082019082821067ffffffffffffffff8311176115dd57908291611f578339039082f080156115d0577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00601f549260081b16911617601f5580f35b50604051903d90823e3d90fd5b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b602060408183019282815284518094520192019060005b81811061162e5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101611621565b60005b83811061166d5750506000910152565b818101518382015260200161165d565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936116b98151809281875287808801910161165a565b0116010190565b906020808351928381520192019060005b8181106116de5750505090565b82517fffffffff00000000000000000000000000000000000000000000000000000000168452602093840193909201916001016116d1565b602081016020825282518091526040820191602060408360051b8301019401926000915b83831061174957505050505090565b9091929394602080611785837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08660019603018752895161167d565b9701930193019193929061173a565b6040810190811067ffffffffffffffff8211176117b057604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60c0810190811067ffffffffffffffff8211176117b057604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176117b057604052565b67ffffffffffffffff81116117b057601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926118828261183c565b9161189060405193846117fb565b8294818452818301116118ad578281602093846000960137010152565b600080fd5b602081016020825282518091526040820191602060408360051b8301019401926000915b8383106118e557505050505090565b9091929394602080611948837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff8151168452015191818582015201906116c0565b970193019301919392906118d6565b67ffffffffffffffff81116117b05760051b60200190565b906040519160008154918260011c92600181168015611a6c575b602085108114611a3f578487528693929181156119ff57506001146119b8575b506119b6925003836117fb565b565b90506000929192526020600020906000915b8183106119e35750509060206119b692820101386119a9565b60209193508060019154838589010152019101909184926119ca565b602093506119b69592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b820101386119a9565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f1693611989565b90604051918281549182825260208201906000526020600020926000905b806007830110611c90576119b6945491818110611c5a575b818110611c24575b818110611bee575b818110611bb8575b818110611b82575b818110611b4c575b818110611b17575b10611aea575b5003836117fb565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260200138611ae2565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b168152019301611adc565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b168152019301611ad4565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b168152019301611acc565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b168152019301611ac4565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b168152019301611abc565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b168152019301611ab4565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b168152019301611aac565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e0820152019401920185929391611a94565b90929192611d2a8161183c565b91611d3860405193846117fb565b8294828452828201116118ad5760206119b693019061165a565b9080601f830112156118ad578151611d6c92602001611d1d565b90565b60085460ff168015611d7e5790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115611e4957600091611e17575b50151590565b90506020813d602011611e41575b81611e32602093836117fb565b810103126118ad575138611e11565b3d9150611e25565b6040513d6000823e3d90fd5b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156118ad57600091611ebd60405194859384937f88b44c850000000000000000000000000000000000000000000000000000000085526004850152602484015260606044840152606483019061167d565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015611e4957611ee35750565b60006119b6916117fb565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156118ad57600091611ebd60405194859384937fc1fa1ed00000000000000000000000000000000000000000000000000000000085526004850152602484015260606044840152606483019061167d56fe60808060405234601557610860908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c80636e84064c146103cb5763c0a850471461003257600080fd5b346103c65760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103c65760043567ffffffffffffffff81116103c65760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126103c6576040516100ab81610672565b816004013573ffffffffffffffffffffffffffffffffffffffff811681036103c65781526024820135907fffffffff00000000000000000000000000000000000000000000000000000000821682036103c65760208101918252604081019260448101358452606082019060648101358252608481013567ffffffffffffffff81116103c6578101366023820112156103c65761015290369060246004820135910161071a565b906080840191825260a48101359067ffffffffffffffff82116103c6570160407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126103c657604051906101a9826106bd565b600481013567ffffffffffffffff81116103c6576004908201019036601f830112156103c6576101e2602492369060208135910161071a565b835201359367ffffffffffffffff851685036103c657602082019485528160a08201525194517fffffffff00000000000000000000000000000000000000000000000000000000169551925191519182519151938451955194604051958691602083019860e81b7fffffff0000000000000000000000000000000000000000000000000000000000168952805190816023850191602001916102839261060c565b82019060c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166023820152036023017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8810186526008016102e690866106d9565b60405197889760601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602089015260348801526038870152605886015260e81b7fffffff000000000000000000000000000000000000000000000000000000000016607885015280519081607b860191602001916103659261060c565b830190519182607b83016103789261060c565b01607b01037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810182526103ac90826106d9565b604051809160208252602082016103c29161062f565b0390f35b600080fd5b346103c65760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103c65760043567ffffffffffffffff81116103c657366023820112156103c65780600401359067ffffffffffffffff82116103c6576024810136602484840101116103c65760243591610448610799565b50610451610799565b92818101602481013560601c8552602085019560388201357fffffffff000000000000000000000000000000000000000000000000000000001687526040860190603c83013582526060870192605c8101358452607c013560e81c93605b016104ba85826107d6565b6104c69082848a610812565b60808a0196916104d791369161071a565b86526104e2916107d6565b6104ea61077f565b968682016024013560e81c91600301928361050584826107d6565b9161050f93610812565b369061051a9261071a565b8752610525916107d6565b9384016024013560c01c602086015260a08601948552604051968796604088525173ffffffffffffffffffffffffffffffffffffffff166040880152517fffffffff000000000000000000000000000000000000000000000000000000001660608701525160808601525160a08501525160c0840160c0905261010084016105ac9161062f565b9151918381037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00160e0850152825160408252604082016105ec9161062f565b926020015167ffffffffffffffff16906020015260080160208301520390f35b60005b83811061061f5750506000910152565b818101518382015260200161060f565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361066b8151809281875287808801910161060c565b0116010190565b60c0810190811067ffffffffffffffff82111761068e57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff82111761068e57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761068e57604052565b92919267ffffffffffffffff821161068e5760405191610762601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016602001846106d9565b8294818452818301116103c6578281602093846000960137010152565b6040519061078c826106bd565b6000602083606081520152565b604051906107a682610672565b81600081526000602082015260006040820152600060608201526060608082015260a06107d161077f565b910152565b919082018092116107e357565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b909392938483116103c65784116103c657810192039056fea26469706673582212202e33622ba99786e6153906e84e48774f50268db7d2d4c4e8012fedb96f89a93164736f6c634300081c0033a2646970667358221220f02f854f0383bf9bbcf23105177dbcd52473fce8b812bc196592c272115f295764736f6c634300081c0033","sourceMap":"661:1066:78:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1065:26:16;661:1066:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2723:18:9;661:1066:78;;;;;;;2723:18:9;661:1066:78;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2575:18:9;661:1066:78;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;2575:18:9;661:1066:78;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;702:36;661:1066;;;;;;;;;;;;;;;;;;;;;;2876:18:9;661:1066:78;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;2876:18:9;661:1066:78;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;3653:18:9;661:1066:78;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;3653:18:9;661:1066:78;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;940:36;661:1066;940:36;;661:1066;;940:36;;661:1066;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;940:36;;;;;;;;;;;;;;661:1066;;;;;1031:36;;661:1066;1031:36;;661:1066;;1031:36;;661:1066;;;;;;;;;:::i;:::-;;;;;;1031:36;;;;;;;;;;661:1066;;1031:36;;;661:1066;;;1074:43;661:1066;;;;;;;;;;;;;:::i;:::-;;;;;;;;;1074:43;:::i;:::-;661:1066;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3668:29:4;;;;661:1066:78;;;3668:29:4;;;;;661:1066:78;3668:29:4;;661:1066:78;3668:29:4;;661:1066:78;;;;;;;;;;;;;;;:::i;:::-;3668:29:4;;661:1066:78;3668:29:4;;;;;;;;661:1066:78;;;1288:67;1361:73;661:1066;1209:73;661:1066;;;;;;;;1244:21;;661:1066;;;;;;;;;:::i;:::-;;;;;;;;;1209:73;:::i;:::-;661:1066;1321:19;;;661:1066;;;;;;;;:::i;:::-;;;;;;;;;1288:67;:::i;:::-;661:1066;;1396:21;;661:1066;;;;;;;;:::i;:::-;;;;;;;;;1361:73;:::i;:::-;1449:27;661:1066;1478:24;;;661:1066;;;;;;;:::i;:::-;;;;;;;;;;4734:29:4;;;;661:1066:78;;;;;;;;4734:29:4;;;;;661:1066:78;4734:29:4;;661:1066:78;;4734:29:4;;661:1066:78;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;4734:29:4;;661:1066:78;4734:29:4;;;;;;;;661:1066:78;1537:20;661:1066;1537:20;;:32;1571:17;;;;;:29;661:1066;;;;;;;:::i;:::-;;;;;;;;;;4458:29:4;;;;661:1066:78;;;;;;;;4458:29:4;;;;;661:1066:78;4458:29:4;;661:1066:78;;4458:29:4;;661:1066:78;;;;;;:::i;:::-;4458:29:4;;661:1066:78;4458:29:4;;;;;;;;661:1066:78;1640:20;;661:1066;;1640:20;;1631:88;1640:20;;:29;661:1066;;1671:17;;:26;661:1066;;;;;;;;;:::i;:::-;;;;;;;;;1631:88;:::i;:::-;661:1066;;4458:29:4;;;;;:::i;:::-;661:1066:78;;4458:29:4;;;;661:1066:78;;;;4458:29:4;661:1066:78;;;;;;;;;4734:29:4;;;;;:::i;:::-;661:1066:78;;4734:29:4;;;;3668;1361:73:78;3668:29:4;1209:73:78;3668:29:4;;661:1066:78;3668:29:4;1288:67:78;3668:29:4;;;;;;:::i;:::-;;;;;;;;;;;;;661:1066:78;;;;;;;;;3668:29:4;661:1066:78;;;1031:36;;;;;;;;;;;;;;;:::i;:::-;;;661:1066;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1074:43;661:1066;;;;;;;;;1031:36;;;;;;661:1066;;;;;;;;;;;;;;;;;;;;1031:36;661:1066;;;;;;;;;940:36;;;;;;;;;;;;;:::i;:::-;;;661:1066;;;;;;;;;;;;;;;;;;:::i;:::-;940:36;;;;661:1066;;;;;;;;;;;;;;;;;;;;;;;;;;;;3162:18:9;661:1066:78;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;3162:18:9;661:1066:78;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;3346:26:9;661:1066:78;;;;:::i;:::-;;;;;;;:::i;:::-;;;;3346:26:9;661:1066:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3501:18:9;661:1066:78;;;;;;;3501:18:9;661:1066:78;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3794:16:9;661:1066:78;;;;;;;3794:16:9;661:1066:78;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3948:19:9;661:1066:78;;;;:::i;:::-;;;;;;;:::i;:::-;;;;3948:19:9;661:1066:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3018:16:9;661:1066:78;;;;;;;3018:16:9;661:1066:78;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;790:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;661:1066;;773:37;661:1066;;;;;;;;773:37;661:1066;;;790:20;661:1066;;;;;;;;;;;790:20;661:1066;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;661:1066:78;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::o;:::-;;;;;;;;;;;;;;-1:-1:-1;661:1066:78;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;661:1066:78;;;;;-1:-1:-1;661:1066:78;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;661:1066:78;;;;;;:::o;:::-;-1:-1:-1;661:1066:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;-1:-1:-1;661:1066:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;;;-1:-1:-1;661:1066:78;;;;;-1:-1:-1;661:1066:78;;-1:-1:-1;661:1066:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;661:1066:78;;-1:-1:-1;661:1066:78;;-1:-1:-1;661:1066:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;1243:204:4:-;1302:7;661:1066:78;;;;;;;1325:14:4;:::o;1298:143::-;661:1066:78;;;;1377:39:4;;661:1066:78;1377:39:4;;;661:1066:78;192:59:4;;;;661:1066:78;192:59:4;1377:39;;;661:1066:78;1377:39:4;;;;;;;661:1066:78;1377:39:4;;;1298:143;1377:53;;;1370:60;:::o;1377:39::-;;;192:59;1377:39;;192:59;1377:39;;;;;;192:59;1377:39;;;:::i;:::-;;;192:59;;;;661:1066:78;1377:39:4;;;;;;-1:-1:-1;1377:39:4;;;661:1066:78;;;;;;;;;2386:134:4;;661:1066:78;2484:29:4;;;;-1:-1:-1;661:1066:78;;;;2484:29:4;;;;;661:1066:78;2484:29:4;;;;;661:1066:78;;;;;;;;;;;;;;;:::i;:::-;2484:29:4;;661:1066:78;2484:29:4;;;;;;;;2386:134;:::o;2484:29::-;-1:-1:-1;2484:29:4;;;:::i;3826:134::-;;661:1066:78;3924:29:4;;;;-1:-1:-1;661:1066:78;;;;3924:29:4;;;;;661:1066:78;3924:29:4;;;;;661:1066:78;;;;;;;;;;;;;;;:::i","linkReferences":{}},"methodIdentifiers":{"IS_TEST()":"fa7626d4","attestationImp()":"b0b3fea6","excludeArtifacts()":"b5508aa9","excludeContracts()":"e20c9f71","excludeSelectors()":"b0464fdc","excludeSenders()":"1ed7831c","failed()":"ba414fa6","setUp()":"0a9254e4","targetArtifactSelectors()":"66d9a9a0","targetArtifacts()":"85226c81","targetContracts()":"3f7286f4","targetInterfaces()":"2ade3880","targetSelectors()":"916a17c6","targetSenders()":"3e5e3c23","test_packAndUnpackAttestation((address,bytes4,bytes32,bytes32,bytes,(string,uint64)))":"8e5b0d85"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"IS_TEST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"attestationImp\",\"outputs\":[{\"internalType\":\"contract AttestationImp\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"excludedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setUp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifactSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"artifact\",\"type\":\"string\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzArtifactSelector[]\",\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"targetedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetInterfaces\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"artifacts\",\"type\":\"string[]\"}],\"internalType\":\"struct StdInvariant.FuzzInterface[]\",\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"approvedSigner\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"identityType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes32\",\"name\":\"issuerHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"audienceHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"applicationData\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"redirectUrl\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"issuedAt\",\"type\":\"uint64\"}],\"internalType\":\"struct AuthData\",\"name\":\"authData\",\"type\":\"tuple\"}],\"internalType\":\"struct Attestation\",\"name\":\"attestation\",\"type\":\"tuple\"}],\"name\":\"test_packAndUnpackAttestation\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/extensions/sessions/Attestation.t.sol\":\"AttestationTest\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/extensions/sessions/implicit/Attestation.sol\":{\"keccak256\":\"0xcaa44022b5eb4bc7ab487b3b1a0125da67e2e891cee983ef6cdb6814f045efc8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://94829782b6dcb482d7c002511c590d1ad8de3b21e5e72575df18be73565b3638\",\"dweb:/ipfs/QmZ4u9FxALzMzKR7auW8FmFkhGVw8kRDeDRJ1PKwKaWNWF\"]},\"src/extensions/sessions/implicit/ISignalsImplicitMode.sol\":{\"keccak256\":\"0x6cb48f50c49bcb3c7071306fe9fac6c102bc9eabf73d9909e19ab3b9a835d0a8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://15297e969f64fc1152654d1cefbe276c15a0ecfc11f86b4c276bb0b454fe700a\",\"dweb:/ipfs/QmeehNFYBPPtJePwUcqiYCgiuFotur4VVVCV1KvegdCCZ4\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"test/extensions/sessions/Attestation.t.sol\":{\"keccak256\":\"0x00666e18f76eb3afa983c92912f24a414e2113486d59f4030d05d8f12b779c12\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://39ea087757923a5945cc75f0815afba738f034e9ec68e11e238dc2c47efd10d9\",\"dweb:/ipfs/QmQagc48NM7A94rpZ3A2qar74AqsiZYxjgm2q9KNsfcdGF\"]},\"test/utils/TestUtils.sol\":{\"keccak256\":\"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad\",\"dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log","anonymous":false},{"inputs":[{"internalType":"address","name":"","type":"address","indexed":false}],"type":"event","name":"log_address","anonymous":false},{"inputs":[{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"log_bytes","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32","indexed":false}],"type":"event","name":"log_bytes32","anonymous":false},{"inputs":[{"internalType":"int256","name":"","type":"int256","indexed":false}],"type":"event","name":"log_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address","name":"val","type":"address","indexed":false}],"type":"event","name":"log_named_address","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes","name":"val","type":"bytes","indexed":false}],"type":"event","name":"log_named_bytes","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes32","name":"val","type":"bytes32","indexed":false}],"type":"event","name":"log_named_bytes32","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false}],"type":"event","name":"log_named_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"string","name":"val","type":"string","indexed":false}],"type":"event","name":"log_named_string","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false}],"type":"event","name":"log_named_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log_string","anonymous":false},{"inputs":[{"internalType":"uint256","name":"","type":"uint256","indexed":false}],"type":"event","name":"log_uint","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"logs","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"IS_TEST","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"attestationImp","outputs":[{"internalType":"contract AttestationImp","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeArtifacts","outputs":[{"internalType":"string[]","name":"excludedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeContracts","outputs":[{"internalType":"address[]","name":"excludedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"excludedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSenders","outputs":[{"internalType":"address[]","name":"excludedSenders_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"failed","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"setUp"},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifactSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzArtifactSelector[]","name":"targetedArtifactSelectors_","type":"tuple[]","components":[{"internalType":"string","name":"artifact","type":"string"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifacts","outputs":[{"internalType":"string[]","name":"targetedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetContracts","outputs":[{"internalType":"address[]","name":"targetedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetInterfaces","outputs":[{"internalType":"struct StdInvariant.FuzzInterface[]","name":"targetedInterfaces_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"string[]","name":"artifacts","type":"string[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"targetedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSenders","outputs":[{"internalType":"address[]","name":"targetedSenders_","type":"address[]"}]},{"inputs":[{"internalType":"struct Attestation","name":"attestation","type":"tuple","components":[{"internalType":"address","name":"approvedSigner","type":"address"},{"internalType":"bytes4","name":"identityType","type":"bytes4"},{"internalType":"bytes32","name":"issuerHash","type":"bytes32"},{"internalType":"bytes32","name":"audienceHash","type":"bytes32"},{"internalType":"bytes","name":"applicationData","type":"bytes"},{"internalType":"struct AuthData","name":"authData","type":"tuple","components":[{"internalType":"string","name":"redirectUrl","type":"string"},{"internalType":"uint64","name":"issuedAt","type":"uint64"}]}]}],"stateMutability":"view","type":"function","name":"test_packAndUnpackAttestation"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/extensions/sessions/Attestation.t.sol":"AttestationTest"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/extensions/sessions/implicit/Attestation.sol":{"keccak256":"0xcaa44022b5eb4bc7ab487b3b1a0125da67e2e891cee983ef6cdb6814f045efc8","urls":["bzz-raw://94829782b6dcb482d7c002511c590d1ad8de3b21e5e72575df18be73565b3638","dweb:/ipfs/QmZ4u9FxALzMzKR7auW8FmFkhGVw8kRDeDRJ1PKwKaWNWF"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/ISignalsImplicitMode.sol":{"keccak256":"0x6cb48f50c49bcb3c7071306fe9fac6c102bc9eabf73d9909e19ab3b9a835d0a8","urls":["bzz-raw://15297e969f64fc1152654d1cefbe276c15a0ecfc11f86b4c276bb0b454fe700a","dweb:/ipfs/QmeehNFYBPPtJePwUcqiYCgiuFotur4VVVCV1KvegdCCZ4"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"test/extensions/sessions/Attestation.t.sol":{"keccak256":"0x00666e18f76eb3afa983c92912f24a414e2113486d59f4030d05d8f12b779c12","urls":["bzz-raw://39ea087757923a5945cc75f0815afba738f034e9ec68e11e238dc2c47efd10d9","dweb:/ipfs/QmQagc48NM7A94rpZ3A2qar74AqsiZYxjgm2q9KNsfcdGF"],"license":"Apache-2.0"},"test/utils/TestUtils.sol":{"keccak256":"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79","urls":["bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad","dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa"],"license":"Apache-2.0"}},"version":1},"id":78} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Base.sol/CommonBase.json b/contracts/artifacts/wallet-contracts-v3/Base.sol/CommonBase.json new file mode 100644 index 00000000..b4cd8046 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Base.sol/CommonBase.json @@ -0,0 +1 @@ +{"abi":[],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"CONSOLE\":{\"details\":\"console.sol and console2.sol work by executing a staticcall to this address. Calculated as `address(uint160(uint88(bytes11(\\\"console.log\\\"))))`.\"},\"CREATE2_FACTORY\":{\"details\":\"Used when deploying with create2. Taken from https://github.com/Arachnid/deterministic-deployment-proxy.\"},\"DEFAULT_SENDER\":{\"details\":\"The default address for tx.origin and msg.sender. Calculated as `address(uint160(uint256(keccak256(\\\"foundry default caller\\\"))))`.\"},\"DEFAULT_TEST_CONTRACT\":{\"details\":\"The address of the first contract `CREATE`d by a running test contract. When running tests, each test contract is `CREATE`d by `DEFAULT_SENDER` with nonce 1. Calculated as `VM.computeCreateAddress(VM.computeCreateAddress(DEFAULT_SENDER, 1), 1)`.\"},\"MULTICALL3_ADDRESS\":{\"details\":\"Deterministic deployment address of the Multicall3 contract. Taken from https://www.multicall3.com.\"},\"SECP256K1_ORDER\":{\"details\":\"The order of the secp256k1 curve.\"},\"VM_ADDRESS\":{\"details\":\"Cheat code address. Calculated as `address(uint160(uint256(keccak256(\\\"hevm cheat code\\\"))))`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/forge-std/src/Base.sol\":\"CommonBase\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"lib/forge-std/src/Base.sol":"CommonBase"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"}},"version":1},"id":2} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Base.sol/ScriptBase.json b/contracts/artifacts/wallet-contracts-v3/Base.sol/ScriptBase.json new file mode 100644 index 00000000..187c36a8 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Base.sol/ScriptBase.json @@ -0,0 +1 @@ +{"abi":[],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/forge-std/src/Base.sol\":\"ScriptBase\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"lib/forge-std/src/Base.sol":"ScriptBase"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"}},"version":1},"id":2} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Base.sol/TestBase.json b/contracts/artifacts/wallet-contracts-v3/Base.sol/TestBase.json new file mode 100644 index 00000000..6b7b66ea --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Base.sol/TestBase.json @@ -0,0 +1 @@ +{"abi":[],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/forge-std/src/Base.sol\":\"TestBase\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"lib/forge-std/src/Base.sol":"TestBase"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"}},"version":1},"id":2} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Base64.sol/Base64.json b/contracts/artifacts/wallet-contracts-v3/Base64.sol/Base64.json new file mode 100644 index 00000000..4e3f3356 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Base64.sol/Base64.json @@ -0,0 +1 @@ +{"abi":[],"bytecode":{"object":"0x60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea26469706673582212208d9e4aef761006cc80ee3c4814c84aba486ec30962b219c413ef9844534c174064736f6c634300081c0033","sourceMap":"430:6142:67:-:0;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x600080fdfea26469706673582212208d9e4aef761006cc80ee3c4814c84aba486ec30962b219c413ef9844534c174064736f6c634300081c0033","sourceMap":"430:6142:67:-:0;;","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Solady (https://github.com/vectorized/solady/blob/main/src/utils/Base64.sol)Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/Base64.sol)Modified from (https://github.com/Brechtpd/base64/blob/main/base64.sol) by Brecht Devos - .\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Library to encode strings in Base64.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/utils/Base64.sol\":\"Base64\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/utils/Base64.sol\":{\"keccak256\":\"0xcac0262a4cd9b8ad3097dbbeeddb715d1bb00de216428328044f2543ef1b7dd1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e53e555db05754733333946af30995887e7274d617744b1205f3cd8648fab3b4\",\"dweb:/ipfs/Qme9hZfFyKCMLNWqA1vK3a82k7kXznkpid4FeBFQdS67WR\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/utils/Base64.sol":"Base64"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/utils/Base64.sol":{"keccak256":"0xcac0262a4cd9b8ad3097dbbeeddb715d1bb00de216428328044f2543ef1b7dd1","urls":["bzz-raw://e53e555db05754733333946af30995887e7274d617744b1205f3cd8648fab3b4","dweb:/ipfs/Qme9hZfFyKCMLNWqA1vK3a82k7kXznkpid4FeBFQdS67WR"],"license":"MIT"}},"version":1},"id":67} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Base64.t.sol/Base64Test.json b/contracts/artifacts/wallet-contracts-v3/Base64.t.sol/Base64Test.json new file mode 100644 index 00000000..e73e9476 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Base64.t.sol/Base64Test.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"excludeArtifacts","inputs":[],"outputs":[{"name":"excludedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"excludeContracts","inputs":[],"outputs":[{"name":"excludedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"excludeSelectors","inputs":[],"outputs":[{"name":"excludedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"excludeSenders","inputs":[],"outputs":[{"name":"excludedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"targetArtifactSelectors","inputs":[],"outputs":[{"name":"targetedArtifactSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzArtifactSelector[]","components":[{"name":"artifact","type":"string","internalType":"string"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetArtifacts","inputs":[],"outputs":[{"name":"targetedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"targetContracts","inputs":[],"outputs":[{"name":"targetedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"targetInterfaces","inputs":[],"outputs":[{"name":"targetedInterfaces_","type":"tuple[]","internalType":"struct StdInvariant.FuzzInterface[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"artifacts","type":"string[]","internalType":"string[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSelectors","inputs":[],"outputs":[{"name":"targetedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSenders","inputs":[],"outputs":[{"name":"targetedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"test_decode","inputs":[{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"test_decode_empty","inputs":[],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"test_encode","inputs":[{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"test_encode_empty","inputs":[],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"test_manual_cases","inputs":[],"outputs":[],"stateMutability":"pure"},{"type":"event","name":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false}],"bytecode":{"object":"0x60808060405234602f57600160ff19600c541617600c55600160ff19601f541617601f5561254f90816100358239f35b600080fdfe608080604052600436101561001357600080fd5b600090813560e01c9081631ed7831c1461122e575080632724c2331461114f5780632ade388014610f235780633e5e3c2314610e7a5780633f7286f414610dd157806366d9a9a014610c7657806385226c8114610bce5780638d2d29ee14610a73578063916a17c61461099e578063ab501bd01461073c578063b0464fdc14610667578063b4581625146105d6578063b5508aa91461052e578063ba414fa6146104eb578063da85a3f6146101d8578063e20c9f711461011f5763fa7626d4146100dc57600080fd5b3461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57602060ff601f54166040519015158152f35b80fd5b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c5760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b8181106101ac576101a88561019c818703826115c1565b604051918291826112d3565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610185565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c576104e8604061029a815161021b83826115c1565b600181527f0100000000000000000000000000000000000000000000000000000000000000602082015261029561025182611f35565b610290855161026087826115c1565b600481527f41513d3d00000000000000000000000000000000000000000000000000000000602082015282611e74565b611cee565b6124b9565b6102f06102a5611bc7565b6102956102b182611f35565b61029085516102c087826115c1565b600481527f4151493d00000000000000000000000000000000000000000000000000000000602082015282611e74565b6103186102fb611c02565b61029561030782611f35565b610290610312611c3d565b82611e74565b6103a3815161032783826115c1565b600481527f0102030400000000000000000000000000000000000000000000000000000000602082015261036c8161029561036182611f35565b610290610312611c78565b61037c8161029561036182612044565b6103978161029561038c82612110565b610290610312611cb3565b61029561038c82612221565b61040781516103b283826115c1565b600481528460208201526102956103c882611f35565b61029085516103d787826115c1565b600881527f4141414141413d3d000000000000000000000000000000000000000000000000602082015282611e74565b61048b815161041683826115c1565b600481527fffffffff00000000000000000000000000000000000000000000000000000000602082015261029561044c82611f35565b610290855161045b87826115c1565b600881527f2f2f2f2f2f773d3d000000000000000000000000000000000000000000000000602082015282611e74565b6104a1610496611c02565b610295610290611c3d565b6104ad815191826115c1565b600381527f415149000000000000000000000000000000000000000000000000000000000060208201526102956104e2611bc7565b91611cee565b80f35b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c576020610524611ae1565b6040519015158152f35b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c576019546105698161163c565b9161057760405193846115c1565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b8383106105b957604051806101a887826113df565b6001602081926105c885611654565b8152019201920191906105a4565b503461011c576104e86106116105eb36611502565b9190610617610606610290610601368786611a02565b611f35565b610611368685611a02565b906124b9565b61063061060661029061062b368786611a02565b612044565b610649610606610290610644368786611a02565b612110565b61065f61029061065a368685611a02565b612221565b923691611a02565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57601c546106a28161163c565b916106b060405193846115c1565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b8383106106f257604051806101a8878261145d565b6002602060019260405161070581611576565b73ffffffffffffffffffffffffffffffffffffffff865416815261072a85870161175b565b838201528152019201920191906106dd565b503461011c5761074b36611502565b9061075a610601368484611a02565b604051907fa5cbfe65000000000000000000000000000000000000000000000000000000008252848280610792878760048401611a9b565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115610993576107c3928692610977575b50611e74565b6107d161062b368484611a02565b604051907fc8bd0e4a000000000000000000000000000000000000000000000000000000008252848280610809878760048401611a9b565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115610993576108399286926109775750611e74565b82610848610644368585611a02565b92604051937fa5cbfe65000000000000000000000000000000000000000000000000000000008552828580610881858860048401611a9b565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115610958576108b96108bf92610902978691610963575b5061232c565b90611e74565b6108cd61065a368386611a02565b9260405194859283927fc8bd0e4a00000000000000000000000000000000000000000000000000000000845260048401611a9b565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215610958576104e8926108b9918591610936575061232c565b61095291503d8087833e61094a81836115c1565b810190611a39565b386108b3565b6040513d85823e3d90fd5b61095291503d8088833e61094a81836115c1565b61098c9192503d8088833e61094a81836115c1565b90386107bd565b6040513d87823e3d90fd5b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57601d546109d98161163c565b916109e760405193846115c1565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b838310610a2957604051806101a8878261145d565b60026020600192604051610a3c81611576565b73ffffffffffffffffffffffffffffffffffffffff8654168152610a6185870161175b565b83820152815201920192019190610a14565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c576060806060519182610acb575b836104e88360405190610ac36020836115c1565b838252611e74565b90506003600283010460021b604051917f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566601f526106707f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f18603f52602083019082840160208101916080870193600460038651938b88525b0191603f8351818160121c16518d538181600c1c1651600153818160061c165160025316516003538a51815201908985831015610b875750600490600390610b44565b956104e89992955060409150936003937f3d3d0000000000000000000000000000000000000000000000000000000000009552016040520660020482035252815238610aaf565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57601a54610c098161163c565b91610c1760405193846115c1565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b838310610c5957604051806101a887826113df565b600160208192610c6885611654565b815201920192019190610c44565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57601b54610cb18161163c565b610cbe60405191826115c1565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b838310610d9657868587604051928392602084019060208552518091526040840160408260051b8601019392905b828210610d2b57505050500390f35b91936020610d86827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0600195979984950301865288519083610d768351604084526040840190611346565b9201519084818403910152611389565b9601920192018594939192610d1c565b60026020600192604051610da981611576565b610db286611654565b8152610dbf85870161175b565b83820152815201920192019190610cee565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c5760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b818110610e4e576101a88561019c818703826115c1565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610e37565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c5760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b818110610ef7576101a88561019c818703826115c1565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610ee0565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57601e54610f5e8161163c565b610f6b60405191826115c1565b818152601e83526020810191837f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350845b8383106110b95786858760405192839260208401906020855251809152604084019160408260051b8601019392815b838310610fd75786860387f35b9193957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09086929496030183528551906020604082019273ffffffffffffffffffffffffffffffffffffffff81511683520151916040602083015282518091526060820190602060608260051b850101940192855b82811061107057505050505060208060019297019301930190928695949293610fca565b90919293946020806110ac837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa087600196030189528951611346565b970195019392910161104c565b6040516110c581611576565b73ffffffffffffffffffffffffffffffffffffffff83541681526001830180546110ee8161163c565b916110fc60405193846115c1565b8183528a526020808b20908b9084015b838210611132575050505060019282602092836002950152815201920192019190610f9b565b60016020819261114186611654565b81520193019101909161110c565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c5761119760405161118f6020826115c1565b828152611cee565b51737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561122a57604051907f98296c540000000000000000000000000000000000000000000000000000000082526004820152816024820152818082604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561121d5761120f5780f35b611218916115c1565b388180f35b50604051903d90823e3d90fd5b5080fd5b823461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57601654908183526020830191601682527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289915b8181106112a7576101a88561019c818703826115c1565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201611290565b602060408183019282815284518094520192019060005b8181106112f75750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016112ea565b60005b8381106113365750506000910152565b8181015183820152602001611326565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361138281518092818752878088019101611323565b0116010190565b906020808351928381520192019060005b8181106113a75750505090565b82517fffffffff000000000000000000000000000000000000000000000000000000001684526020938401939092019160010161139a565b602081016020825282518091526040820191602060408360051b8301019401926000915b83831061141257505050505090565b909192939460208061144e837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187528951611346565b97019301930191939290611403565b602081016020825282518091526040820191602060408360051b8301019401926000915b83831061149057505050505090565b90919293946020806114f3837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190611389565b97019301930191939290611481565b9060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126115715760043567ffffffffffffffff811161157157826023820112156115715780600401359267ffffffffffffffff84116115715760248483010111611571576024019190565b600080fd5b6040810190811067ffffffffffffffff82111761159257604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761159257604052565b67ffffffffffffffff811161159257601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b67ffffffffffffffff81116115925760051b60200190565b906040519160008154918260011c92600181168015611751575b602085108114611724578487528693929181156116e4575060011461169d575b5061169b925003836115c1565b565b90506000929192526020600020906000915b8183106116c857505090602061169b928201013861168e565b60209193508060019154838589010152019101909184926116af565b6020935061169b9592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201013861168e565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f169361166e565b90604051918281549182825260208201906000526020600020926000905b8060078301106119755761169b94549181811061193f575b818110611909575b8181106118d3575b81811061189d575b818110611867575b818110611831575b8181106117fc575b106117cf575b5003836115c1565b7fffffffff00000000000000000000000000000000000000000000000000000000168152602001386117c7565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b1681520193016117c1565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b1681520193016117b9565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b1681520193016117b1565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b1681520193016117a9565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b1681520193016117a1565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b168152019301611799565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b168152019301611791565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e0820152019401920185929391611779565b929192611a0e82611602565b91611a1c60405193846115c1565b829481845281830111611571578281602093846000960137010152565b6020818303126115715780519067ffffffffffffffff8211611571570181601f82011215611571578051611a6c81611602565b92611a7a60405194856115c1565b8184526020828401011161157157611a989160208085019101611323565b90565b90601f836040947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093602086528160208701528686013760008582860101520116010190565b60085460ff168015611af05790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115611bbb57600091611b89575b50151590565b90506020813d602011611bb3575b81611ba4602093836115c1565b81010312611571575138611b83565b3d9150611b97565b6040513d6000823e3d90fd5b60405190611bd66040836115c1565b600282527f01020000000000000000000000000000000000000000000000000000000000006020830152565b60405190611c116040836115c1565b600382527f01020300000000000000000000000000000000000000000000000000000000006020830152565b60405190611c4c6040836115c1565b600482527f41514944000000000000000000000000000000000000000000000000000000006020830152565b60405190611c876040836115c1565b600882527f4151494442413d3d0000000000000000000000000000000000000000000000006020830152565b60405190611cc26040836115c1565b600682527f41514944424100000000000000000000000000000000000000000000000000006020830152565b90606091805180611cfd575050565b90925060038160021c029060038116908115611e595750017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b6040519281845260208401918401916003600460208501937ffc000000fc00686c7074787c8084888c9094989ca0a4a8acb0b4b8bcc0c4c8cc605b527804080c1014181c2024282c3034383c4044484c5054585c6064603b526ef8fcf800fcd0d4d8dce0e4e8ecf0f4601a525b0191825160ff81165160061c81601e1a517ffc000000fc00686c7074787c8084888c9094989ca0a4a8acb0b4b8bcc0c4c8cc161760061c81601d1a517ffc000000fc00686c7074787c8084888c9094989ca0a4a8acb0b4b8bcc0c4c8cc161760061c90601c1a517ffc000000fc00686c7074787c8084888c9094989ca0a4a8acb0b4b8bcc0c4c8cc16178152019082821015611e4657600390600490611da5565b5050604060009201604052526000606052565b613d3d91508401511860ff81161590601e1a15019003611d38565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561157157611ed4600091611f0460405194859384937ff320d963000000000000000000000000000000000000000000000000000000008552604060048601526044850190611346565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc848303016024850152611346565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015611bbb57611f2a5750565b600061169b916115c1565b80516060929181611f44575050565b9092506003600284010460021b90604051937f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566601f526106707f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f18603f5260208501918386019060208201926020818301019460046003875194600089525b0191603f8351818160121c16516000538181600c1c1651600153818160061c16516002531651600353600051815201908582101561200657600490600390611fc3565b50935060407f3d3d00000000000000000000000000000000000000000000000000000000000093600393600097520160405206600204820352528252565b80516060929181612053575050565b9092506003600284010460021b90604051937f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566601f527f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f603f5260208501918386019060208201926020818301019460046003875194600089520191603f8351818160121c16516000538181600c1c1651600153818160061c16516002531651600353600051815201908582101561200657600490600390611fc3565b8051606092918161211f575050565b9092506003600284010460021b604051937f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566601f526106707f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f18603f5260208501928286019160208301946020828401019060046003835195600085525b0191603f8351818160121c16516000538181600c1c1651600153818160061c1651600253165160035360005181520190878210156121e05760049060039061219d565b5095506000936003936040925201604052066002048093037f3d3d000000000000000000000000000000000000000000000000000000000000815252038252565b80516060929181612230575050565b9092506003600284010460021b604051937f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566601f527f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f603f5260208501928286019160208301946020828401019060046003835195600085520191603f8351818160121c16516000538181600c1c1651600153818160061c1651600253165160035360005181520190878210156121e05760049060039061219d565b9081518110156122fd570160200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9081515b801580158061243a575b156123995761236a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01612330565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506123a381611602565b906123b160405192836115c1565b8082527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06123de82611602565b0136602084013760005b8181106123f6575090925050565b807fff00000000000000000000000000000000000000000000000000000000000000612424600193886122ec565b511660001a61243382866122ec565b53016123e8565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820182811161236a577fff000000000000000000000000000000000000000000000000000000000000006124b17f3d0000000000000000000000000000000000000000000000000000000000000092876122ec565b51161461233a565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561157157611ed4600091611f0460405194859384937f9762463100000000000000000000000000000000000000000000000000000000855260406004860152604485019061134656fea26469706673582212201774a0551ad433c2bd5f1e2ef6feca46b2e10185be27f89264e4f402995afbf964736f6c634300081c0033","sourceMap":"166:5210:95:-:0;;;;;;;3166:4:5;166:5210:95;;3166:4:5;166:5210:95;;;3166:4:5;166:5210:95;3166:4:5;166:5210:95;;1087:4:16;166:5210:95;;;1087:4:16;166:5210:95;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608080604052600436101561001357600080fd5b600090813560e01c9081631ed7831c1461122e575080632724c2331461114f5780632ade388014610f235780633e5e3c2314610e7a5780633f7286f414610dd157806366d9a9a014610c7657806385226c8114610bce5780638d2d29ee14610a73578063916a17c61461099e578063ab501bd01461073c578063b0464fdc14610667578063b4581625146105d6578063b5508aa91461052e578063ba414fa6146104eb578063da85a3f6146101d8578063e20c9f711461011f5763fa7626d4146100dc57600080fd5b3461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57602060ff601f54166040519015158152f35b80fd5b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c5760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b8181106101ac576101a88561019c818703826115c1565b604051918291826112d3565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610185565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c576104e8604061029a815161021b83826115c1565b600181527f0100000000000000000000000000000000000000000000000000000000000000602082015261029561025182611f35565b610290855161026087826115c1565b600481527f41513d3d00000000000000000000000000000000000000000000000000000000602082015282611e74565b611cee565b6124b9565b6102f06102a5611bc7565b6102956102b182611f35565b61029085516102c087826115c1565b600481527f4151493d00000000000000000000000000000000000000000000000000000000602082015282611e74565b6103186102fb611c02565b61029561030782611f35565b610290610312611c3d565b82611e74565b6103a3815161032783826115c1565b600481527f0102030400000000000000000000000000000000000000000000000000000000602082015261036c8161029561036182611f35565b610290610312611c78565b61037c8161029561036182612044565b6103978161029561038c82612110565b610290610312611cb3565b61029561038c82612221565b61040781516103b283826115c1565b600481528460208201526102956103c882611f35565b61029085516103d787826115c1565b600881527f4141414141413d3d000000000000000000000000000000000000000000000000602082015282611e74565b61048b815161041683826115c1565b600481527fffffffff00000000000000000000000000000000000000000000000000000000602082015261029561044c82611f35565b610290855161045b87826115c1565b600881527f2f2f2f2f2f773d3d000000000000000000000000000000000000000000000000602082015282611e74565b6104a1610496611c02565b610295610290611c3d565b6104ad815191826115c1565b600381527f415149000000000000000000000000000000000000000000000000000000000060208201526102956104e2611bc7565b91611cee565b80f35b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c576020610524611ae1565b6040519015158152f35b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c576019546105698161163c565b9161057760405193846115c1565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b8383106105b957604051806101a887826113df565b6001602081926105c885611654565b8152019201920191906105a4565b503461011c576104e86106116105eb36611502565b9190610617610606610290610601368786611a02565b611f35565b610611368685611a02565b906124b9565b61063061060661029061062b368786611a02565b612044565b610649610606610290610644368786611a02565b612110565b61065f61029061065a368685611a02565b612221565b923691611a02565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57601c546106a28161163c565b916106b060405193846115c1565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b8383106106f257604051806101a8878261145d565b6002602060019260405161070581611576565b73ffffffffffffffffffffffffffffffffffffffff865416815261072a85870161175b565b838201528152019201920191906106dd565b503461011c5761074b36611502565b9061075a610601368484611a02565b604051907fa5cbfe65000000000000000000000000000000000000000000000000000000008252848280610792878760048401611a9b565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115610993576107c3928692610977575b50611e74565b6107d161062b368484611a02565b604051907fc8bd0e4a000000000000000000000000000000000000000000000000000000008252848280610809878760048401611a9b565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115610993576108399286926109775750611e74565b82610848610644368585611a02565b92604051937fa5cbfe65000000000000000000000000000000000000000000000000000000008552828580610881858860048401611a9b565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115610958576108b96108bf92610902978691610963575b5061232c565b90611e74565b6108cd61065a368386611a02565b9260405194859283927fc8bd0e4a00000000000000000000000000000000000000000000000000000000845260048401611a9b565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215610958576104e8926108b9918591610936575061232c565b61095291503d8087833e61094a81836115c1565b810190611a39565b386108b3565b6040513d85823e3d90fd5b61095291503d8088833e61094a81836115c1565b61098c9192503d8088833e61094a81836115c1565b90386107bd565b6040513d87823e3d90fd5b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57601d546109d98161163c565b916109e760405193846115c1565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b838310610a2957604051806101a8878261145d565b60026020600192604051610a3c81611576565b73ffffffffffffffffffffffffffffffffffffffff8654168152610a6185870161175b565b83820152815201920192019190610a14565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c576060806060519182610acb575b836104e88360405190610ac36020836115c1565b838252611e74565b90506003600283010460021b604051917f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566601f526106707f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f18603f52602083019082840160208101916080870193600460038651938b88525b0191603f8351818160121c16518d538181600c1c1651600153818160061c165160025316516003538a51815201908985831015610b875750600490600390610b44565b956104e89992955060409150936003937f3d3d0000000000000000000000000000000000000000000000000000000000009552016040520660020482035252815238610aaf565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57601a54610c098161163c565b91610c1760405193846115c1565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b838310610c5957604051806101a887826113df565b600160208192610c6885611654565b815201920192019190610c44565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57601b54610cb18161163c565b610cbe60405191826115c1565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b838310610d9657868587604051928392602084019060208552518091526040840160408260051b8601019392905b828210610d2b57505050500390f35b91936020610d86827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0600195979984950301865288519083610d768351604084526040840190611346565b9201519084818403910152611389565b9601920192018594939192610d1c565b60026020600192604051610da981611576565b610db286611654565b8152610dbf85870161175b565b83820152815201920192019190610cee565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c5760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b818110610e4e576101a88561019c818703826115c1565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610e37565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c5760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b818110610ef7576101a88561019c818703826115c1565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610ee0565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57601e54610f5e8161163c565b610f6b60405191826115c1565b818152601e83526020810191837f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350845b8383106110b95786858760405192839260208401906020855251809152604084019160408260051b8601019392815b838310610fd75786860387f35b9193957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09086929496030183528551906020604082019273ffffffffffffffffffffffffffffffffffffffff81511683520151916040602083015282518091526060820190602060608260051b850101940192855b82811061107057505050505060208060019297019301930190928695949293610fca565b90919293946020806110ac837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa087600196030189528951611346565b970195019392910161104c565b6040516110c581611576565b73ffffffffffffffffffffffffffffffffffffffff83541681526001830180546110ee8161163c565b916110fc60405193846115c1565b8183528a526020808b20908b9084015b838210611132575050505060019282602092836002950152815201920192019190610f9b565b60016020819261114186611654565b81520193019101909161110c565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c5761119760405161118f6020826115c1565b828152611cee565b51737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561122a57604051907f98296c540000000000000000000000000000000000000000000000000000000082526004820152816024820152818082604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561121d5761120f5780f35b611218916115c1565b388180f35b50604051903d90823e3d90fd5b5080fd5b823461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57601654908183526020830191601682527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289915b8181106112a7576101a88561019c818703826115c1565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201611290565b602060408183019282815284518094520192019060005b8181106112f75750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016112ea565b60005b8381106113365750506000910152565b8181015183820152602001611326565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361138281518092818752878088019101611323565b0116010190565b906020808351928381520192019060005b8181106113a75750505090565b82517fffffffff000000000000000000000000000000000000000000000000000000001684526020938401939092019160010161139a565b602081016020825282518091526040820191602060408360051b8301019401926000915b83831061141257505050505090565b909192939460208061144e837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187528951611346565b97019301930191939290611403565b602081016020825282518091526040820191602060408360051b8301019401926000915b83831061149057505050505090565b90919293946020806114f3837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190611389565b97019301930191939290611481565b9060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126115715760043567ffffffffffffffff811161157157826023820112156115715780600401359267ffffffffffffffff84116115715760248483010111611571576024019190565b600080fd5b6040810190811067ffffffffffffffff82111761159257604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761159257604052565b67ffffffffffffffff811161159257601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b67ffffffffffffffff81116115925760051b60200190565b906040519160008154918260011c92600181168015611751575b602085108114611724578487528693929181156116e4575060011461169d575b5061169b925003836115c1565b565b90506000929192526020600020906000915b8183106116c857505090602061169b928201013861168e565b60209193508060019154838589010152019101909184926116af565b6020935061169b9592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201013861168e565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f169361166e565b90604051918281549182825260208201906000526020600020926000905b8060078301106119755761169b94549181811061193f575b818110611909575b8181106118d3575b81811061189d575b818110611867575b818110611831575b8181106117fc575b106117cf575b5003836115c1565b7fffffffff00000000000000000000000000000000000000000000000000000000168152602001386117c7565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b1681520193016117c1565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b1681520193016117b9565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b1681520193016117b1565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b1681520193016117a9565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b1681520193016117a1565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b168152019301611799565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b168152019301611791565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e0820152019401920185929391611779565b929192611a0e82611602565b91611a1c60405193846115c1565b829481845281830111611571578281602093846000960137010152565b6020818303126115715780519067ffffffffffffffff8211611571570181601f82011215611571578051611a6c81611602565b92611a7a60405194856115c1565b8184526020828401011161157157611a989160208085019101611323565b90565b90601f836040947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093602086528160208701528686013760008582860101520116010190565b60085460ff168015611af05790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115611bbb57600091611b89575b50151590565b90506020813d602011611bb3575b81611ba4602093836115c1565b81010312611571575138611b83565b3d9150611b97565b6040513d6000823e3d90fd5b60405190611bd66040836115c1565b600282527f01020000000000000000000000000000000000000000000000000000000000006020830152565b60405190611c116040836115c1565b600382527f01020300000000000000000000000000000000000000000000000000000000006020830152565b60405190611c4c6040836115c1565b600482527f41514944000000000000000000000000000000000000000000000000000000006020830152565b60405190611c876040836115c1565b600882527f4151494442413d3d0000000000000000000000000000000000000000000000006020830152565b60405190611cc26040836115c1565b600682527f41514944424100000000000000000000000000000000000000000000000000006020830152565b90606091805180611cfd575050565b90925060038160021c029060038116908115611e595750017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b6040519281845260208401918401916003600460208501937ffc000000fc00686c7074787c8084888c9094989ca0a4a8acb0b4b8bcc0c4c8cc605b527804080c1014181c2024282c3034383c4044484c5054585c6064603b526ef8fcf800fcd0d4d8dce0e4e8ecf0f4601a525b0191825160ff81165160061c81601e1a517ffc000000fc00686c7074787c8084888c9094989ca0a4a8acb0b4b8bcc0c4c8cc161760061c81601d1a517ffc000000fc00686c7074787c8084888c9094989ca0a4a8acb0b4b8bcc0c4c8cc161760061c90601c1a517ffc000000fc00686c7074787c8084888c9094989ca0a4a8acb0b4b8bcc0c4c8cc16178152019082821015611e4657600390600490611da5565b5050604060009201604052526000606052565b613d3d91508401511860ff81161590601e1a15019003611d38565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561157157611ed4600091611f0460405194859384937ff320d963000000000000000000000000000000000000000000000000000000008552604060048601526044850190611346565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc848303016024850152611346565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015611bbb57611f2a5750565b600061169b916115c1565b80516060929181611f44575050565b9092506003600284010460021b90604051937f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566601f526106707f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f18603f5260208501918386019060208201926020818301019460046003875194600089525b0191603f8351818160121c16516000538181600c1c1651600153818160061c16516002531651600353600051815201908582101561200657600490600390611fc3565b50935060407f3d3d00000000000000000000000000000000000000000000000000000000000093600393600097520160405206600204820352528252565b80516060929181612053575050565b9092506003600284010460021b90604051937f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566601f527f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f603f5260208501918386019060208201926020818301019460046003875194600089520191603f8351818160121c16516000538181600c1c1651600153818160061c16516002531651600353600051815201908582101561200657600490600390611fc3565b8051606092918161211f575050565b9092506003600284010460021b604051937f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566601f526106707f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f18603f5260208501928286019160208301946020828401019060046003835195600085525b0191603f8351818160121c16516000538181600c1c1651600153818160061c1651600253165160035360005181520190878210156121e05760049060039061219d565b5095506000936003936040925201604052066002048093037f3d3d000000000000000000000000000000000000000000000000000000000000815252038252565b80516060929181612230575050565b9092506003600284010460021b604051937f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566601f527f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f603f5260208501928286019160208301946020828401019060046003835195600085520191603f8351818160121c16516000538181600c1c1651600153818160061c1651600253165160035360005181520190878210156121e05760049060039061219d565b9081518110156122fd570160200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9081515b801580158061243a575b156123995761236a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01612330565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506123a381611602565b906123b160405192836115c1565b8082527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06123de82611602565b0136602084013760005b8181106123f6575090925050565b807fff00000000000000000000000000000000000000000000000000000000000000612424600193886122ec565b511660001a61243382866122ec565b53016123e8565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820182811161236a577fff000000000000000000000000000000000000000000000000000000000000006124b17f3d0000000000000000000000000000000000000000000000000000000000000092876122ec565b51161461233a565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561157157611ed4600091611f0460405194859384937f9762463100000000000000000000000000000000000000000000000000000000855260406004860152604485019061134656fea26469706673582212201774a0551ad433c2bd5f1e2ef6feca46b2e10185be27f89264e4f402995afbf964736f6c634300081c0033","sourceMap":"166:5210:95:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1065:26:16;166:5210:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2723:18:9;166:5210:95;;;;;;;2723:18:9;166:5210:95;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4890:8;166:5210;2643:10;166:5210;;;;;;:::i;:::-;;;;;;;;;2597:22;3431:26:67;;;:::i;:::-;2543:25:95;166:5210;;;;;;:::i;:::-;;;;;;;;;2543:25;;:::i;:::-;2597:22;:::i;:::-;2643:10;:::i;:::-;2848:8;166:5210;;:::i;:::-;2802:22;3431:26:67;;;:::i;:::-;2761:25:95;166:5210;;;;;;:::i;:::-;;;;;;;;;2761:25;;:::i;2848:8::-;3059:10;166:5210;;:::i;:::-;3013:22;3431:26:67;;;:::i;:::-;2972:25:95;166:5210;;:::i;:::-;2972:25;;:::i;3059:10::-;3843:9;166:5210;;;;;;:::i;:::-;;;;;;;;;3275:9;3431:26:67;3229:22:95;3431:26:67;;;:::i;:::-;3184:29:95;166:5210;;:::i;3275:9::-;3460;3704:29:67;3414:22:95;3704:29:67;;;:::i;3460:9:95:-;3647;3515:37;3601:22;3515:37;;;:::i;:::-;3558:27;166:5210;;:::i;3647:9::-;3797:22;3712:36;;;:::i;3843:9::-;4055:8;166:5210;;;;;;:::i;:::-;;;;;;;;;4009:22;3431:26:67;;;:::i;:::-;3964:29:95;166:5210;;;;;;:::i;:::-;;;;;;;;;3964:29;;:::i;4055:8::-;4263:7;166:5210;;;;;;:::i;:::-;;;;;;;;;4217:22;3431:26:67;;;:::i;:::-;4172:29:95;166:5210;;;;;;:::i;:::-;;;;;;;;;4172:29;;:::i;4263:7::-;4597:13;166:5210;;:::i;:::-;4533:31;166:5210;;:::i;4597:13::-;166:5210;;;;;;:::i;:::-;;;;;;;;;4842:24;166:5210;;:::i;:::-;4842:24;;:::i;4890:8::-;166:5210;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2575:18:9;166:5210:95;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;2575:18:9;166:5210:95;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;1968:40;166:5210;;;;:::i;:::-;;;1333:23;1305:22;3431:26:67;166:5210:95;;;;;:::i;:::-;3431:26:67;:::i;1305:22:95:-;166:5210;;;;;:::i;:::-;1333:23;;:::i;:::-;1522:31;1486:30;3704:29:67;166:5210:95;;;;;:::i;:::-;3704:29:67;:::i;1522:31:95:-;1728:32;1691:31;1621:32;166:5210;;;;;:::i;:::-;1621:32;:::i;1728:::-;1923:39;1846:31;166:5210;;;;;:::i;:::-;1846:31;:::i;1923:39::-;166:5210;;;;:::i;:::-;;;;;;;;;;;;2876:18:9;166:5210:95;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;2876:18:9;166:5210:95;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3431:26:67;166:5210:95;;;;;:::i;3431:26:67:-;166:5210:95;;372:17;166:5210;372:17;;;;;;;;166:5210;372:17;;;:::i;:::-;;;336:42:2;372:17:95;;;;;;;412:8;372:17;;;;;166:5210;412:8;;:::i;:::-;3704:29:67;166:5210:95;;;;;:::i;3704:29:67:-;166:5210:95;;554:20;166:5210;554:20;;;;;;;;166:5210;554:20;;;:::i;:::-;;;336:42:2;554:20:95;;;;;;;605:16;554:20;;;;;605:16;;:::i;:::-;166:5210;698:32;166:5210;;;;;:::i;698:32::-;166:5210;;;784:17;166:5210;784:17;;;;;;;;166:5210;784:17;;;:::i;:::-;;;336:42:2;784:17:95;;;;;;;770:32;834:17;784;1039:20;784:17;;;;;166:5210;770:32;;:::i;:::-;834:17;;:::i;:::-;946:31;166:5210;;;;;:::i;946:31::-;166:5210;;;1039:20;;;;;166:5210;1039:20;;166:5210;1039:20;;;:::i;:::-;;;336:42:2;1039:20:95;;;;;;;1100:25;1039:20;1025:35;1039:20;;;;;1025:35;;:::i;1039:20::-;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;166:5210;;2024:14:2;166:5210:95;;2024:14:2;;;;784:17:95;;;;;;;;;;;;;:::i;554:20::-;;;;;;;;;;;;;;:::i;:::-;;;;;;166:5210;;2024:14:2;166:5210:95;;2024:14:2;;;;166:5210:95;;;;;;;;;;;;3653:18:9;166:5210:95;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;3653:18:9;166:5210:95;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;869:2326:67;;;;;166:5210:95;;2139:20;166:5210;;;;;;;;:::i;:::-;;;;2139:20;:::i;869:2326:67:-;;;;;;;;;;166:5210:95;869:2326:67;;;;;;;;;;;;;;;;;;;;;;;;;166:5210:95;869:2326:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;166:5210:95;;869:2326:67;;;;;;2139:20:95;869:2326:67;;;;166:5210:95;869:2326:67;;;;;;;;;166:5210:95;869:2326:67;;;;;;;;;;;;;166:5210:95;;;;;;;;;;;;3162:18:9;166:5210:95;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;3162:18:9;166:5210:95;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;3346:26:9;166:5210:95;;;;:::i;:::-;;;;;;;:::i;:::-;;;;3346:26:9;166:5210:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3501:18:9;166:5210:95;;;;;;;3501:18:9;166:5210:95;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3794:16:9;166:5210:95;;;;;;;3794:16:9;166:5210:95;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3948:19:9;166:5210:95;;;;:::i;:::-;;;;;;;:::i;:::-;;;;3948:19:9;166:5210:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;2269:20;166:5210;;;;;;:::i;:::-;;;;2269:20;:::i;:::-;166:5210;;2349:24:4;;;;166:5210:95;;2349:24:4;166:5210:95;2349:24:4;;166:5210:95;2349:24:4;;192:59;166:5210:95;;;;192:59:4;2349:24;;;;;166:5210:95;2349:24:4;;;;;;;;166:5210:95;;2349:24:4;;;;:::i;:::-;;;166:5210:95;;2349:24:4;166:5210:95;;;2024:14:2;;;;;;;;2349:24:4;166:5210:95;;;;;;;;;;;;;;;3018:16:9;166:5210:95;;;;;;;;;3018:16:9;166:5210:95;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;166:5210:95;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::o;:::-;;;;;;;;;;;;;;-1:-1:-1;166:5210:95;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;166:5210:95;;;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;166:5210:95;;;;;-1:-1:-1;166:5210:95;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;-1:-1:-1;166:5210:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;;;-1:-1:-1;166:5210:95;;;;;-1:-1:-1;166:5210:95;;-1:-1:-1;166:5210:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;166:5210:95;;-1:-1:-1;166:5210:95;;-1:-1:-1;166:5210:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;166:5210:95;;;;;;:::o;2024:14:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;166:5210:95;;;;;;;:::i;:::-;2024:14:2;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;166:5210:95;2024:14:2;166:5210:95;2024:14:2;166:5210:95;2024:14:2;;;;;;;;166:5210:95;;;;;2024:14:2;166:5210:95;;;;;;;;2024:14:2;;;:::o;1243:204:4:-;1302:7;166:5210:95;;;;;;;1325:14:4;:::o;1298:143::-;166:5210:95;;;;1377:39:4;;166:5210:95;1377:39:4;;;166:5210:95;192:59:4;;;;;;1377:39;;;166:5210:95;1377:39:4;;;;;;;166:5210:95;1377:39:4;;;1298:143;1377:53;;;1370:60;:::o;1377:39::-;;;192:59;1377:39;;192:59;1377:39;;;;;;192:59;1377:39;;;:::i;:::-;;;192:59;;;;;1377:39;;;;;;-1:-1:-1;1377:39:4;;;166:5210:95;;2024:14:2;166:5210:95;2024:14:2;;;;;166:5210:95;;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;:::o;4216:2353:67:-;;166:5210:95;4349:2216:67;;;;;;4216:2353;;:::o;4349:2216::-;;;;;;;;;;;;;;;;;;-1:-1:-1;4349:2216:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;166:5210:95;4349:2216:67;4216:2353::o;4349:2216::-;;;;;;;;;;;;;;;;;;;;;4220:122:4;166:5210:95;4311:24:4;;;;166:5210:95;-1:-1:-1;166:5210:95;;;;4311:24:4;;;;;166:5210:95;4311:24:4;;166:5210:95;4311:24:4;;;166:5210:95;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;4311:24:4;;166:5210:95;4311:24:4;;;;;;;;4220:122;:::o;4311:24::-;-1:-1:-1;4311:24:4;;;:::i;713:2486:67:-;869:2326;;166:5210:95;;713:2486:67;869:2326;;;713:2486;;:::o;869:2326::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;166:5210:95;869:2326:67;;;;;;;;;;;;;;166:5210:95;869:2326:67;;;;;;;;;;;;;;;;;;;;;166:5210:95;869:2326:67;;;;;;;;;;;;;;;;;;;;;;;;;;166:5210:95;869:2326:67;;;;;;;;;;;;;;713:2486::o;:::-;869:2326;;166:5210:95;;713:2486:67;869:2326;;;713:2486;;:::o;869:2326::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;166:5210:95;869:2326:67;;;;;;;;;;;;;166:5210:95;869:2326:67;;;;;;;510:4:95;869:2326:67;;;;;;;;;;;;;166:5210:95;869:2326:67;;;;;;;;;;;;;;;;;713:2486;869:2326;;166:5210:95;;713:2486:67;869:2326;;;713:2486;;:::o;869:2326::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;166:5210:95;869:2326:67;;;;;;;;;;;;;;166:5210:95;869:2326:67;;;;;;;510:4:95;869:2326:67;;;;;;;;;;;;;166:5210:95;869:2326:67;;;;;;;;;;;;;;;;;;;;;166:5210:95;869:2326:67;;;;;;;;;;;;;;;;;;;;;;713:2486::o;:::-;869:2326;;166:5210:95;;713:2486:67;869:2326;;;713:2486;;:::o;869:2326::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;510:4:95;869:2326:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;166:5210:95;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;4966:407;;166:5210;;5142:74;5149:10;;;;:42;;;5142:74;5149:42;;;166:5210;;;;5142:74;;166:5210;;5158:1;166:5210;;;;;5158:1;166:5210;5149:42;;166:5210;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;5158:1;5286:10;;;;;;-1:-1:-1;5347:21:95;;-1:-1:-1;;4966:407:95:o;5298:3::-;5323:12;166:5210;5323:12;166:5210;5323:12;;;:::i;:::-;166:5210;;5158:1;5311:24;;;;;:::i;:::-;;166:5210;5271:13;;5149:42;166:5210;;;;;;;;;;5163:21;166:5210;5163:21;;;:::i;:::-;166:5210;;5163:28;5149:42;;4500:120:4;166:5210:95;4589:24:4;;;;166:5210:95;-1:-1:-1;166:5210:95;;;;4589:24:4;;;;;166:5210:95;4589:24:4;;166:5210:95;4589:24:4;;;166:5210:95;;;;;;:::i","linkReferences":{}},"methodIdentifiers":{"IS_TEST()":"fa7626d4","excludeArtifacts()":"b5508aa9","excludeContracts()":"e20c9f71","excludeSelectors()":"b0464fdc","excludeSenders()":"1ed7831c","failed()":"ba414fa6","targetArtifactSelectors()":"66d9a9a0","targetArtifacts()":"85226c81","targetContracts()":"3f7286f4","targetInterfaces()":"2ade3880","targetSelectors()":"916a17c6","targetSenders()":"3e5e3c23","test_decode(bytes)":"b4581625","test_decode_empty()":"2724c233","test_encode(bytes)":"ab501bd0","test_encode_empty()":"8d2d29ee","test_manual_cases()":"da85a3f6"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"IS_TEST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"excludedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifactSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"artifact\",\"type\":\"string\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzArtifactSelector[]\",\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"targetedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetInterfaces\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"artifacts\",\"type\":\"string[]\"}],\"internalType\":\"struct StdInvariant.FuzzInterface[]\",\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"test_decode\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"test_decode_empty\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"test_encode\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"test_encode_empty\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"test_manual_cases\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/utils/Base64.t.sol\":\"Base64Test\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/utils/Base64.sol\":{\"keccak256\":\"0xcac0262a4cd9b8ad3097dbbeeddb715d1bb00de216428328044f2543ef1b7dd1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e53e555db05754733333946af30995887e7274d617744b1205f3cd8648fab3b4\",\"dweb:/ipfs/Qme9hZfFyKCMLNWqA1vK3a82k7kXznkpid4FeBFQdS67WR\"]},\"test/utils/Base64.t.sol\":{\"keccak256\":\"0x22458dd009f926dfbee1f8a79e3908844efa018af76d49c732fc2f28fb8b062b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://5c17ed323a1999da187d6cbec94452b350d2952fa94ef2bcda0c40335d5e1232\",\"dweb:/ipfs/QmZFt1vwWvKchuBdsApkQTnYEWiQnpYswLxiTSNx32gqQZ\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log","anonymous":false},{"inputs":[{"internalType":"address","name":"","type":"address","indexed":false}],"type":"event","name":"log_address","anonymous":false},{"inputs":[{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"log_bytes","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32","indexed":false}],"type":"event","name":"log_bytes32","anonymous":false},{"inputs":[{"internalType":"int256","name":"","type":"int256","indexed":false}],"type":"event","name":"log_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address","name":"val","type":"address","indexed":false}],"type":"event","name":"log_named_address","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes","name":"val","type":"bytes","indexed":false}],"type":"event","name":"log_named_bytes","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes32","name":"val","type":"bytes32","indexed":false}],"type":"event","name":"log_named_bytes32","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false}],"type":"event","name":"log_named_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"string","name":"val","type":"string","indexed":false}],"type":"event","name":"log_named_string","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false}],"type":"event","name":"log_named_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log_string","anonymous":false},{"inputs":[{"internalType":"uint256","name":"","type":"uint256","indexed":false}],"type":"event","name":"log_uint","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"logs","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"IS_TEST","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeArtifacts","outputs":[{"internalType":"string[]","name":"excludedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeContracts","outputs":[{"internalType":"address[]","name":"excludedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"excludedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSenders","outputs":[{"internalType":"address[]","name":"excludedSenders_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"failed","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifactSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzArtifactSelector[]","name":"targetedArtifactSelectors_","type":"tuple[]","components":[{"internalType":"string","name":"artifact","type":"string"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifacts","outputs":[{"internalType":"string[]","name":"targetedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetContracts","outputs":[{"internalType":"address[]","name":"targetedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetInterfaces","outputs":[{"internalType":"struct StdInvariant.FuzzInterface[]","name":"targetedInterfaces_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"string[]","name":"artifacts","type":"string[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"targetedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSenders","outputs":[{"internalType":"address[]","name":"targetedSenders_","type":"address[]"}]},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"pure","type":"function","name":"test_decode"},{"inputs":[],"stateMutability":"pure","type":"function","name":"test_decode_empty"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"pure","type":"function","name":"test_encode"},{"inputs":[],"stateMutability":"pure","type":"function","name":"test_encode_empty"},{"inputs":[],"stateMutability":"pure","type":"function","name":"test_manual_cases"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/utils/Base64.t.sol":"Base64Test"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/utils/Base64.sol":{"keccak256":"0xcac0262a4cd9b8ad3097dbbeeddb715d1bb00de216428328044f2543ef1b7dd1","urls":["bzz-raw://e53e555db05754733333946af30995887e7274d617744b1205f3cd8648fab3b4","dweb:/ipfs/Qme9hZfFyKCMLNWqA1vK3a82k7kXznkpid4FeBFQdS67WR"],"license":"MIT"},"test/utils/Base64.t.sol":{"keccak256":"0x22458dd009f926dfbee1f8a79e3908844efa018af76d49c732fc2f28fb8b062b","urls":["bzz-raw://5c17ed323a1999da187d6cbec94452b350d2952fa94ef2bcda0c40335d5e1232","dweb:/ipfs/QmZFt1vwWvKchuBdsApkQTnYEWiQnpYswLxiTSNx32gqQZ"],"license":"Apache-2.0"}},"version":1},"id":95} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/BaseAuth.sol/BaseAuth.json b/contracts/artifacts/wallet-contracts-v3/BaseAuth.sol/BaseAuth.json new file mode 100644 index 00000000..59c3fd3e --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/BaseAuth.sol/BaseAuth.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"getStaticSignature","inputs":[{"name":"_hash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"isValidSignature","inputs":[{"name":"_hash","type":"bytes32","internalType":"bytes32"},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"view"},{"type":"function","name":"recoverPartialSignature","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"threshold","type":"uint256","internalType":"uint256"},{"name":"weight","type":"uint256","internalType":"uint256"},{"name":"isValidImage","type":"bool","internalType":"bool"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"checkpoint","type":"uint256","internalType":"uint256"},{"name":"opHash","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"recoverSapientSignature","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"setStaticSignature","inputs":[{"name":"_hash","type":"bytes32","internalType":"bytes32"},{"name":"_address","type":"address","internalType":"address"},{"name":"_timestamp","type":"uint96","internalType":"uint96"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateImageHash","inputs":[{"name":"_imageHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"StaticSignatureSet","inputs":[{"name":"_hash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_address","type":"address","indexed":false,"internalType":"address"},{"name":"_timestamp","type":"uint96","indexed":false,"internalType":"uint96"}],"anonymous":false},{"type":"error","name":"InvalidERC1271Signature","inputs":[{"name":"_opHash","type":"bytes32","internalType":"bytes32"},{"name":"_signer","type":"address","internalType":"address"},{"name":"_signature","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"InvalidKind","inputs":[{"name":"kind","type":"uint8","internalType":"uint8"}]},{"type":"error","name":"InvalidSapientSignature","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"InvalidSignatureFlag","inputs":[{"name":"_flag","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidSignatureWeight","inputs":[{"name":"_threshold","type":"uint256","internalType":"uint256"},{"name":"_weight","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidStaticSignatureExpired","inputs":[{"name":"_opHash","type":"bytes32","internalType":"bytes32"},{"name":"_expires","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidStaticSignatureWrongCaller","inputs":[{"name":"_opHash","type":"bytes32","internalType":"bytes32"},{"name":"_caller","type":"address","internalType":"address"},{"name":"_expectedCaller","type":"address","internalType":"address"}]},{"type":"error","name":"LowWeightChainedSignature","inputs":[{"name":"_signature","type":"bytes","internalType":"bytes"},{"name":"_threshold","type":"uint256","internalType":"uint256"},{"name":"_weight","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"OnlySelf","inputs":[{"name":"_sender","type":"address","internalType":"address"}]},{"type":"error","name":"UnusedSnapshot","inputs":[{"name":"_snapshot","type":"tuple","internalType":"struct Snapshot","components":[{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"checkpoint","type":"uint256","internalType":"uint256"}]}]},{"type":"error","name":"WrongChainedCheckpointOrder","inputs":[{"name":"_nextCheckpoint","type":"uint256","internalType":"uint256"},{"name":"_checkpoint","type":"uint256","internalType":"uint256"}]}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"getStaticSignature(bytes32)":"92dcb3fc","isValidSignature(bytes32,bytes)":"1626ba7e","recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":"ad55366b","recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":"13792a4a","setStaticSignature(bytes32,address,uint96)":"f727ef1c","updateImageHash(bytes32)":"29561426"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_signer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"InvalidERC1271Signature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"}],\"name\":\"InvalidKind\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"InvalidSapientSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_flag\",\"type\":\"uint256\"}],\"name\":\"InvalidSignatureFlag\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_weight\",\"type\":\"uint256\"}],\"name\":\"InvalidSignatureWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_expires\",\"type\":\"uint256\"}],\"name\":\"InvalidStaticSignatureExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_expectedCaller\",\"type\":\"address\"}],\"name\":\"InvalidStaticSignatureWrongCaller\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_weight\",\"type\":\"uint256\"}],\"name\":\"LowWeightChainedSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"checkpoint\",\"type\":\"uint256\"}],\"internalType\":\"struct Snapshot\",\"name\":\"_snapshot\",\"type\":\"tuple\"}],\"name\":\"UnusedSnapshot\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nextCheckpoint\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_checkpoint\",\"type\":\"uint256\"}],\"name\":\"WrongChainedCheckpointOrder\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"_timestamp\",\"type\":\"uint96\"}],\"name\":\"StaticSignatureSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"getStaticSignature\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"recoverPartialSignature\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isValidImage\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"checkpoint\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"opHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"recoverSapientSignature\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"_timestamp\",\"type\":\"uint96\"}],\"name\":\"setStaticSignature\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_imageHash\",\"type\":\"bytes32\"}],\"name\":\"updateImageHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Agustin Aguilar, Michael Standen\",\"kind\":\"dev\",\"methods\":{\"getStaticSignature(bytes32)\":{\"params\":{\"_hash\":\"The hash to get the static signature for\"},\"returns\":{\"_0\":\"address The address associated with the static signature\",\"_1\":\"timestamp The timestamp of the static signature\"}},\"isValidSignature(bytes32,bytes)\":{\"details\":\"MUST return the correct magic value if the signature provided is valid for the provided hash > The bytes4 magic value to return when signature is valid is 0x1626ba7e : bytes4(keccak256(\\\"isValidSignature(bytes32,bytes)\\\") > This function MAY modify Ethereum's state\",\"params\":{\"_hash\":\"keccak256 hash that was signed\",\"_signature\":\"Signature byte array associated with _data\"},\"returns\":{\"_0\":\"Magic value 0x1626ba7e if the signature is valid and 0x0 otherwise\"}},\"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"params\":{\"_payload\":\"The payload\",\"_signature\":\"The signature to recover\"},\"returns\":{\"checkpoint\":\"The checkpoint identifier\",\"imageHash\":\"The derived image hash\",\"isValidImage\":\"Whether the image hash is valid\",\"opHash\":\"The hash of the payload\",\"threshold\":\"The signature threshold\",\"weight\":\"The derived weight\"}},\"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"params\":{\"payload\":\"The payload to recover the signature from\",\"signature\":\"The signature to recover the image hash from\"},\"returns\":{\"_0\":\"The recovered image hash\"}},\"setStaticSignature(bytes32,address,uint96)\":{\"details\":\"Only callable by the wallet itself\",\"params\":{\"_address\":\"The address to associate with the static signature\",\"_hash\":\"The hash to set the static signature for\",\"_timestamp\":\"The timestamp of the static signature\"}},\"updateImageHash(bytes32)\":{\"details\":\"Only callable by the wallet itself\",\"params\":{\"_imageHash\":\"The new image hash\"}}},\"stateVariables\":{\"STATIC_SIGNATURE_KEY\":{\"details\":\"keccak256(\\\"org.sequence.module.auth.static\\\")\"}},\"title\":\"BaseAuth\",\"version\":1},\"userdoc\":{\"errors\":{\"InvalidERC1271Signature(bytes32,address,bytes)\":[{\"notice\":\"Error thrown when the ERC1271 signature is invalid\"}],\"InvalidKind(uint8)\":[{\"notice\":\"Error thrown when the kind is invalid\"}],\"InvalidSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":[{\"notice\":\"Error thrown when the sapient signature is invalid\"}],\"InvalidSignatureFlag(uint256)\":[{\"notice\":\"Error thrown when the signature flag is invalid\"}],\"InvalidSignatureWeight(uint256,uint256)\":[{\"notice\":\"Error thrown when the signature weight is invalid\"}],\"InvalidStaticSignatureExpired(bytes32,uint256)\":[{\"notice\":\"Error thrown when the static signature has expired\"}],\"InvalidStaticSignatureWrongCaller(bytes32,address,address)\":[{\"notice\":\"Error thrown when the static signature has the wrong caller\"}],\"LowWeightChainedSignature(bytes,uint256,uint256)\":[{\"notice\":\"Error thrown when the weight is too low for a chained signature\"}],\"OnlySelf(address)\":[{\"notice\":\"Error thrown when the caller is not the same as the contract\"}],\"UnusedSnapshot((bytes32,uint256))\":[{\"notice\":\"Error thrown when the snapshot is unused\"}],\"WrongChainedCheckpointOrder(uint256,uint256)\":[{\"notice\":\"Error thrown when the checkpoint order is wrong\"}]},\"events\":{\"StaticSignatureSet(bytes32,address,uint96)\":{\"notice\":\"Event emitted when a static signature is set\"}},\"kind\":\"user\",\"methods\":{\"getStaticSignature(bytes32)\":{\"notice\":\"Get the static signature for a specific hash\"},\"isValidSignature(bytes32,bytes)\":{\"notice\":\"Verifies whether the provided signature is valid with respect to the provided hash\"},\"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"notice\":\"Recover the partial signature\"},\"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"notice\":\"Recovers the image hash of a given signature\"},\"setStaticSignature(bytes32,address,uint96)\":{\"notice\":\"Set the static signature for a specific hash\"},\"updateImageHash(bytes32)\":{\"notice\":\"Update the image hash\"}},\"notice\":\"Base contract for the auth module\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/modules/auth/BaseAuth.sol\":\"BaseAuth\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/Storage.sol\":{\"keccak256\":\"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da\",\"dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn\"]},\"src/modules/auth/BaseAuth.sol\":{\"keccak256\":\"0xbf2e40def03fcb5f4a5129b2f5803e21951325b92e00126cbe1427b7c25cfefd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://b560905fcc4b957d27c2abed78a1e82529c89fa472e91b3d108fbfd91aa7c3f7\",\"dweb:/ipfs/QmRjLLtTWE6dFX2kBQCgLz7ossfMxhAFgDC8Jx9XuGL6Wy\"]},\"src/modules/auth/BaseSig.sol\":{\"keccak256\":\"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8\",\"dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3\"]},\"src/modules/auth/SelfAuth.sol\":{\"keccak256\":\"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42\",\"dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W\"]},\"src/modules/interfaces/IAuth.sol\":{\"keccak256\":\"0xf6fa30af2ec91d5fbeac17c9b1f2aa73b7883c9ac98745605007e57666394b91\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://6e90a87978519462f9612f4a17e38fddc1c7bcf700ff834a1de7dce326f30353\",\"dweb:/ipfs/QmXmWAsRRK6t4jPs4VcXrouyokxdALM28D3odX7ub48WEp\"]},\"src/modules/interfaces/ICheckpointer.sol\":{\"keccak256\":\"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1\",\"dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t\"]},\"src/modules/interfaces/IERC1271.sol\":{\"keccak256\":\"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b\",\"dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF\"]},\"src/modules/interfaces/IPartialAuth.sol\":{\"keccak256\":\"0x0d1aa021615d8e90696e71a9468331457a1babfa2ffe169654b7456e5bcb7a73\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://bbacd149a6358ab0d4b9c588d2e3a55fc71ed4723269150d7b91ca70092f6519\",\"dweb:/ipfs/QmUSwtrYCrRcRFsy5rCzdMPrw1FCU7ZoeXdsW6kK9yc8FK\"]},\"src/modules/interfaces/ISapient.sol\":{\"keccak256\":\"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489\",\"dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"src/utils/LibOptim.sol\":{\"keccak256\":\"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81\",\"dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32"},{"internalType":"address","name":"_signer","type":"address"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"type":"error","name":"InvalidERC1271Signature"},{"inputs":[{"internalType":"uint8","name":"kind","type":"uint8"}],"type":"error","name":"InvalidKind"},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"type":"error","name":"InvalidSapientSignature"},{"inputs":[{"internalType":"uint256","name":"_flag","type":"uint256"}],"type":"error","name":"InvalidSignatureFlag"},{"inputs":[{"internalType":"uint256","name":"_threshold","type":"uint256"},{"internalType":"uint256","name":"_weight","type":"uint256"}],"type":"error","name":"InvalidSignatureWeight"},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32"},{"internalType":"uint256","name":"_expires","type":"uint256"}],"type":"error","name":"InvalidStaticSignatureExpired"},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32"},{"internalType":"address","name":"_caller","type":"address"},{"internalType":"address","name":"_expectedCaller","type":"address"}],"type":"error","name":"InvalidStaticSignatureWrongCaller"},{"inputs":[{"internalType":"bytes","name":"_signature","type":"bytes"},{"internalType":"uint256","name":"_threshold","type":"uint256"},{"internalType":"uint256","name":"_weight","type":"uint256"}],"type":"error","name":"LowWeightChainedSignature"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"}],"type":"error","name":"OnlySelf"},{"inputs":[{"internalType":"struct Snapshot","name":"_snapshot","type":"tuple","components":[{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"uint256","name":"checkpoint","type":"uint256"}]}],"type":"error","name":"UnusedSnapshot"},{"inputs":[{"internalType":"uint256","name":"_nextCheckpoint","type":"uint256"},{"internalType":"uint256","name":"_checkpoint","type":"uint256"}],"type":"error","name":"WrongChainedCheckpointOrder"},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32","indexed":false},{"internalType":"address","name":"_address","type":"address","indexed":false},{"internalType":"uint96","name":"_timestamp","type":"uint96","indexed":false}],"type":"event","name":"StaticSignatureSet","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getStaticSignature","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"view","type":"function","name":"isValidSignature","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"view","type":"function","name":"recoverPartialSignature","outputs":[{"internalType":"uint256","name":"threshold","type":"uint256"},{"internalType":"uint256","name":"weight","type":"uint256"},{"internalType":"bool","name":"isValidImage","type":"bool"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"uint256","name":"checkpoint","type":"uint256"},{"internalType":"bytes32","name":"opHash","type":"bytes32"}]},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"view","type":"function","name":"recoverSapientSignature","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint96","name":"_timestamp","type":"uint96"}],"stateMutability":"nonpayable","type":"function","name":"setStaticSignature"},{"inputs":[{"internalType":"bytes32","name":"_imageHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"updateImageHash"}],"devdoc":{"kind":"dev","methods":{"getStaticSignature(bytes32)":{"params":{"_hash":"The hash to get the static signature for"},"returns":{"_0":"address The address associated with the static signature","_1":"timestamp The timestamp of the static signature"}},"isValidSignature(bytes32,bytes)":{"details":"MUST return the correct magic value if the signature provided is valid for the provided hash > The bytes4 magic value to return when signature is valid is 0x1626ba7e : bytes4(keccak256(\"isValidSignature(bytes32,bytes)\") > This function MAY modify Ethereum's state","params":{"_hash":"keccak256 hash that was signed","_signature":"Signature byte array associated with _data"},"returns":{"_0":"Magic value 0x1626ba7e if the signature is valid and 0x0 otherwise"}},"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"params":{"_payload":"The payload","_signature":"The signature to recover"},"returns":{"checkpoint":"The checkpoint identifier","imageHash":"The derived image hash","isValidImage":"Whether the image hash is valid","opHash":"The hash of the payload","threshold":"The signature threshold","weight":"The derived weight"}},"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"params":{"payload":"The payload to recover the signature from","signature":"The signature to recover the image hash from"},"returns":{"_0":"The recovered image hash"}},"setStaticSignature(bytes32,address,uint96)":{"details":"Only callable by the wallet itself","params":{"_address":"The address to associate with the static signature","_hash":"The hash to set the static signature for","_timestamp":"The timestamp of the static signature"}},"updateImageHash(bytes32)":{"details":"Only callable by the wallet itself","params":{"_imageHash":"The new image hash"}}},"version":1},"userdoc":{"kind":"user","methods":{"getStaticSignature(bytes32)":{"notice":"Get the static signature for a specific hash"},"isValidSignature(bytes32,bytes)":{"notice":"Verifies whether the provided signature is valid with respect to the provided hash"},"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"notice":"Recover the partial signature"},"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"notice":"Recovers the image hash of a given signature"},"setStaticSignature(bytes32,address,uint96)":{"notice":"Set the static signature for a specific hash"},"updateImageHash(bytes32)":{"notice":"Update the image hash"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/modules/auth/BaseAuth.sol":"BaseAuth"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/Storage.sol":{"keccak256":"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f","urls":["bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da","dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn"],"license":"Apache-2.0"},"src/modules/auth/BaseAuth.sol":{"keccak256":"0xbf2e40def03fcb5f4a5129b2f5803e21951325b92e00126cbe1427b7c25cfefd","urls":["bzz-raw://b560905fcc4b957d27c2abed78a1e82529c89fa472e91b3d108fbfd91aa7c3f7","dweb:/ipfs/QmRjLLtTWE6dFX2kBQCgLz7ossfMxhAFgDC8Jx9XuGL6Wy"],"license":"Apache-2.0"},"src/modules/auth/BaseSig.sol":{"keccak256":"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa","urls":["bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8","dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3"],"license":"Apache-2.0"},"src/modules/auth/SelfAuth.sol":{"keccak256":"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c","urls":["bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42","dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W"],"license":"Apache-2.0"},"src/modules/interfaces/IAuth.sol":{"keccak256":"0xf6fa30af2ec91d5fbeac17c9b1f2aa73b7883c9ac98745605007e57666394b91","urls":["bzz-raw://6e90a87978519462f9612f4a17e38fddc1c7bcf700ff834a1de7dce326f30353","dweb:/ipfs/QmXmWAsRRK6t4jPs4VcXrouyokxdALM28D3odX7ub48WEp"],"license":"Apache-2.0"},"src/modules/interfaces/ICheckpointer.sol":{"keccak256":"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513","urls":["bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1","dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t"],"license":"Apache-2.0"},"src/modules/interfaces/IERC1271.sol":{"keccak256":"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9","urls":["bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b","dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF"],"license":"Apache-2.0"},"src/modules/interfaces/IPartialAuth.sol":{"keccak256":"0x0d1aa021615d8e90696e71a9468331457a1babfa2ffe169654b7456e5bcb7a73","urls":["bzz-raw://bbacd149a6358ab0d4b9c588d2e3a55fc71ed4723269150d7b91ca70092f6519","dweb:/ipfs/QmUSwtrYCrRcRFsy5rCzdMPrw1FCU7ZoeXdsW6kK9yc8FK"],"license":"Apache-2.0"},"src/modules/interfaces/ISapient.sol":{"keccak256":"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359","urls":["bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489","dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"src/utils/LibOptim.sol":{"keccak256":"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde","urls":["bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81","dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x"],"license":"Apache-2.0"}},"version":1},"id":50} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/BaseSig.sol/BaseSig.json b/contracts/artifacts/wallet-contracts-v3/BaseSig.sol/BaseSig.json new file mode 100644 index 00000000..15ed1f85 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/BaseSig.sol/BaseSig.json @@ -0,0 +1 @@ +{"abi":[{"type":"error","name":"InvalidERC1271Signature","inputs":[{"name":"_opHash","type":"bytes32","internalType":"bytes32"},{"name":"_signer","type":"address","internalType":"address"},{"name":"_signature","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"InvalidSignatureFlag","inputs":[{"name":"_flag","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"LowWeightChainedSignature","inputs":[{"name":"_signature","type":"bytes","internalType":"bytes"},{"name":"_threshold","type":"uint256","internalType":"uint256"},{"name":"_weight","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"UnusedSnapshot","inputs":[{"name":"_snapshot","type":"tuple","internalType":"struct Snapshot","components":[{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"checkpoint","type":"uint256","internalType":"uint256"}]}]},{"type":"error","name":"WrongChainedCheckpointOrder","inputs":[{"name":"_nextCheckpoint","type":"uint256","internalType":"uint256"},{"name":"_checkpoint","type":"uint256","internalType":"uint256"}]}],"bytecode":{"object":"0x60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea2646970667358221220401b5c029146d068655ef1a0033f6c7865828c8aea29604726f330cbfca28a7a64736f6c634300081c0033","sourceMap":"671:18191:51:-:0;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x600080fdfea2646970667358221220401b5c029146d068655ef1a0033f6c7865828c8aea29604726f330cbfca28a7a64736f6c634300081c0033","sourceMap":"671:18191:51:-:0;;","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_signer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"InvalidERC1271Signature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_flag\",\"type\":\"uint256\"}],\"name\":\"InvalidSignatureFlag\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_weight\",\"type\":\"uint256\"}],\"name\":\"LowWeightChainedSignature\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"checkpoint\",\"type\":\"uint256\"}],\"internalType\":\"struct Snapshot\",\"name\":\"_snapshot\",\"type\":\"tuple\"}],\"name\":\"UnusedSnapshot\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nextCheckpoint\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_checkpoint\",\"type\":\"uint256\"}],\"name\":\"WrongChainedCheckpointOrder\",\"type\":\"error\"}],\"devdoc\":{\"author\":\"Agustin Aguilar, Michael Standen, William Hua, Shun Kakinoki\",\"kind\":\"dev\",\"methods\":{},\"title\":\"BaseSig\",\"version\":1},\"userdoc\":{\"errors\":{\"InvalidERC1271Signature(bytes32,address,bytes)\":[{\"notice\":\"Error thrown when the ERC1271 signature is invalid\"}],\"InvalidSignatureFlag(uint256)\":[{\"notice\":\"Error thrown when the signature flag is invalid\"}],\"LowWeightChainedSignature(bytes,uint256,uint256)\":[{\"notice\":\"Error thrown when the weight is too low for a chained signature\"}],\"UnusedSnapshot((bytes32,uint256))\":[{\"notice\":\"Error thrown when the snapshot is unused\"}],\"WrongChainedCheckpointOrder(uint256,uint256)\":[{\"notice\":\"Error thrown when the checkpoint order is wrong\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Library for recovering signatures from the base-auth payload\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/modules/auth/BaseSig.sol\":\"BaseSig\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/auth/BaseSig.sol\":{\"keccak256\":\"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8\",\"dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3\"]},\"src/modules/interfaces/ICheckpointer.sol\":{\"keccak256\":\"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1\",\"dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t\"]},\"src/modules/interfaces/IERC1271.sol\":{\"keccak256\":\"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b\",\"dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF\"]},\"src/modules/interfaces/ISapient.sol\":{\"keccak256\":\"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489\",\"dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"src/utils/LibOptim.sol\":{\"keccak256\":\"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81\",\"dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32"},{"internalType":"address","name":"_signer","type":"address"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"type":"error","name":"InvalidERC1271Signature"},{"inputs":[{"internalType":"uint256","name":"_flag","type":"uint256"}],"type":"error","name":"InvalidSignatureFlag"},{"inputs":[{"internalType":"bytes","name":"_signature","type":"bytes"},{"internalType":"uint256","name":"_threshold","type":"uint256"},{"internalType":"uint256","name":"_weight","type":"uint256"}],"type":"error","name":"LowWeightChainedSignature"},{"inputs":[{"internalType":"struct Snapshot","name":"_snapshot","type":"tuple","components":[{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"uint256","name":"checkpoint","type":"uint256"}]}],"type":"error","name":"UnusedSnapshot"},{"inputs":[{"internalType":"uint256","name":"_nextCheckpoint","type":"uint256"},{"internalType":"uint256","name":"_checkpoint","type":"uint256"}],"type":"error","name":"WrongChainedCheckpointOrder"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/modules/auth/BaseSig.sol":"BaseSig"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/auth/BaseSig.sol":{"keccak256":"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa","urls":["bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8","dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3"],"license":"Apache-2.0"},"src/modules/interfaces/ICheckpointer.sol":{"keccak256":"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513","urls":["bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1","dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t"],"license":"Apache-2.0"},"src/modules/interfaces/IERC1271.sol":{"keccak256":"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9","urls":["bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b","dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF"],"license":"Apache-2.0"},"src/modules/interfaces/ISapient.sol":{"keccak256":"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359","urls":["bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489","dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"src/utils/LibOptim.sol":{"keccak256":"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde","urls":["bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81","dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x"],"license":"Apache-2.0"}},"version":1},"id":51} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/BaseSig.t.sol/BaseSigImp.json b/contracts/artifacts/wallet-contracts-v3/BaseSig.t.sol/BaseSigImp.json new file mode 100644 index 00000000..f626d5c8 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/BaseSig.t.sol/BaseSigImp.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"recoverPub","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"},{"name":"_ignoreCheckpointer","type":"bool","internalType":"bool"},{"name":"_checkpointer","type":"address","internalType":"address"}],"outputs":[{"name":"threshold","type":"uint256","internalType":"uint256"},{"name":"weight","type":"uint256","internalType":"uint256"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"checkpoint","type":"uint256","internalType":"uint256"},{"name":"opHash","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"error","name":"InvalidERC1271Signature","inputs":[{"name":"_opHash","type":"bytes32","internalType":"bytes32"},{"name":"_signer","type":"address","internalType":"address"},{"name":"_signature","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"InvalidKind","inputs":[{"name":"kind","type":"uint8","internalType":"uint8"}]},{"type":"error","name":"InvalidSignatureFlag","inputs":[{"name":"_flag","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"LowWeightChainedSignature","inputs":[{"name":"_signature","type":"bytes","internalType":"bytes"},{"name":"_threshold","type":"uint256","internalType":"uint256"},{"name":"_weight","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"UnusedSnapshot","inputs":[{"name":"_snapshot","type":"tuple","internalType":"struct Snapshot","components":[{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"checkpoint","type":"uint256","internalType":"uint256"}]}]},{"type":"error","name":"WrongChainedCheckpointOrder","inputs":[{"name":"_nextCheckpoint","type":"uint256","internalType":"uint256"},{"name":"_checkpoint","type":"uint256","internalType":"uint256"}]}],"bytecode":{"object":"0x60808060405234601557611e95908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c63545bbe2a1461002757600080fd5b346101ce5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ce5760043567ffffffffffffffff81116101ce576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126101ce5761009d610264565b906100aa81600401610285565b82526100b8602482016102a2565b6020830152604481013567ffffffffffffffff81116101ce576100e1906004369184010161038e565b6040830152606481013560608301526084810135608083015260a481013567ffffffffffffffff81116101ce5761011e9060043691840101610370565b60a083015260c481013560c083015260e481013560e08301526101048101359067ffffffffffffffff82116101ce57600461015c92369201016104ab565b61010082015260243567ffffffffffffffff81116101ce576101ca916101896101a0923690600401610510565b610191610293565b9161019a6102c7565b9361067e565b604080519586526020860194909452928401919091526060830152608082015290819060a0820190565b0390f35b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff82111761021e57604052565b6101d3565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761021e57604052565b6040519061027461012083610223565b565b6040519061027460e083610223565b359060ff821682036101ce57565b6044359081151582036101ce57565b359081151582036101ce57565b67ffffffffffffffff811161021e5760051b60200190565b6064359073ffffffffffffffffffffffffffffffffffffffff821682036101ce57565b359073ffffffffffffffffffffffffffffffffffffffff821682036101ce57565b92919267ffffffffffffffff821161021e576040519161035360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160184610223565b8294818452818301116101ce578281602093846000960137010152565b9080601f830112156101ce5781602061038b9335910161030b565b90565b81601f820112156101ce578035906103a5826102af565b926103b36040519485610223565b82845260208085019360051b830101918183116101ce5760208101935b8385106103df57505050505090565b843567ffffffffffffffff81116101ce57820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082860301126101ce57610426610276565b91610433602083016102ea565b83526040820135602084015260608201359267ffffffffffffffff84116101ce5760e083610468886020809881980101610370565b60408401526080810135606084015261048360a082016102a2565b608084015261049460c082016102a2565b60a0840152013560c08201528152019401936103d0565b9080601f830112156101ce5781356104c2816102af565b926104d06040519485610223565b81845260208085019260051b8201019283116101ce57602001905b8282106104f85750505090565b60208091610505846102ea565b8152019101906104eb565b9181601f840112156101ce5782359167ffffffffffffffff83116101ce57602083818601950101116101ce57565b6040519061054b82610202565b60006020838281520152565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b906001820180921161059457565b610557565b9190820180921161059457565b909392938483116101ce5784116101ce578101920390565b908160409103126101ce576020604051916105d883610202565b805183520151602082015290565b919082519283825260005b8481106106305750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b806020809284010151828286010152016105f1565b60409073ffffffffffffffffffffffffffffffffffffffff61038b949316815281602082015201906105e6565b6040513d6000823e3d90fd5b909491939291853560f81c6001909381908761069861053e565b9360408089161480610978575b610876575b5050506001808616146108505760028581161460208501526007600286901c1688820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190809691819660201661071a9060051c90565b61072390610586565b8a820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101959098899a8161076f84610c35565b98899361077b936105a6565b9161078593610f60565b909861079991600052602052604060002090565b906107ac91600052602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff166107d591600052602052604060002090565b94815190868215159283610845575b505081610836575b506107f45750565b6040517fccbb534f00000000000000000000000000000000000000000000000000000000815281516004820152602090910151602482015280604481015b0390fd5b905060208201511015386107ec565b1415915086386107e4565b8661086b979294955061086393986105a6565b939092610a54565b919394909293929190565b8a81013560601c985060140192509087908a9084901561089a575b508291506106aa565b60038101955073ffffffffffffffffffffffffffffffffffffffff945081013560e81c9260409261091d9290916108e8916108e19189906108db8983610599565b926105a6565b369161030b565b83519586809481937fccce3bc80000000000000000000000000000000000000000000000000000000083523060048401610645565b0392165afa80156109735761093b92600091610944575b5092610599565b86388981610891565b610966915060403d60401161096c575b61095e8183610223565b8101906105be565b38610934565b503d610954565b610672565b5073ffffffffffffffffffffffffffffffffffffffff8916156106a5565b60405190610120820182811067ffffffffffffffff82111761021e576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b90610a4a90604093969594966060845260608401916109f1565b9460208201520152565b9194929092600095600095600095600095600095610a70610996565b60028152937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9460005b828110610ac757505050505050508051151580610ab9575b6107f45750565b506020810151841115610ab2565b600381019d50959b5093995091975092909190610aeb908b9085013560e81c610599565b958a6000848903610c2f575089915b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c03610bff5750906001610b3489610b3b9487896105a6565b908b61067e565b9c939c9b929b9a919a99909a9b9d8e9d9e8f905b10610bb95750928b885114610bb0575b808b1015610b7e57508a60c08501528992959295949194939093610a9a565b7f37daf62b0000000000000000000000000000000000000000000000000000000060005260048b905260245260446000fd5b60008852610b5f565b8d8f610832610bca85858c8e6105a6565b9390926040519485947fb006aba000000000000000000000000000000000000000000000000000000000865260048601610a30565b9798999a916001610c158b610c1c94888a6105a6565b908661067e565b50929d919c909b929a9092918e8e610b4f565b91610afa565b610c97610cc3610c55610c4f6020850151151530906117dc565b936118d7565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610223565b51902090565b908160209103126101ce57517fffffffff00000000000000000000000000000000000000000000000000000000811681036101ce5790565b60409061038b9492815281602082015201916109f1565b73ffffffffffffffffffffffffffffffffffffffff61038b9593606093835216602082015281604082015201916109f1565b908160209103126101ce575190565b9080602083519182815201916020808360051b8301019401926000915b838310610d8557505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080610df8604085015160e0604086015260e08501906105e6565b936060810151606085015260808101511515608085015260a0810151151560a0850152015191015297019301930191939290610d76565b906020808351928381520192019060005b818110610e4d5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101610e40565b91610f5261038b949260408552610e9660408601825160ff169052565b602081015115156060860152610100610f0b610ec3604084015161012060808a0152610160890190610d59565b606084015160a0890152608084015160c089015260a08401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08983030160e08a01526105e6565b9160c08101518288015260e081015161012088015201517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086830301610140870152610e2f565b9260208185039101526109f1565b9391909360009460009460005b818110610f7b575050505050565b8481013560f881901c9860019092019788979692909160fc1c9889156117755750600189146117355760028914611568576003891461153957600489146114b8576006891461141257600589146113c457600789146112fd57600889146112a7576009891461117e57600a891461101b577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b9091929394959697506003891697881561116d575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190810190816110939187876105a6565b6040517f898bd921000000000000000000000000000000000000000000000000000000008152939184916110cb918a60048501610d01565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa9182156109735761110e9360009361113a575b5060ff909a168091019a611c43565b908015611134579061112891600052602052604060002090565b955b9392919093610f6d565b50611128565b60ff91935061115f9060203d8111611166575b6111578183610223565b810190610d4a565b92906110ff565b503d61114d565b8084013560f81c9850600101611030565b90919293949596975060038916978815611296575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190810190816111f69187876105a6565b6040517f13792a4a0000000000000000000000000000000000000000000000000000000081529391849161122e918b60048501610e79565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa918215610973576112709360009361113a575060ff909a168091019a611c43565b908015611290579061128a91600052602052604060002090565b9561112a565b5061128a565b8084013560f81c9850600101611193565b9850602087019750949593949293919290918201356112c586611bea565b81146112d5575b61127090611c04565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506112cc565b975090919293949597600f169687156113b2575b602060006113236113909a9b86611ab2565b9c9092918a60405161136681610c978a82019485603c917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008252601c8201520190565b51902092604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa15610973576112709060ff6000519a1680910199611af5565b600189019883013560f81c9750611311565b9850602087019750949593949293919290918201358085146113ea575b61127090611bab565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506113e1565b989091929394959662ffffff985061143a611434600c8416603f9060021c1690565b60ff1690565b9182156114a4575b6003168015611493575b9081906114779061146f908781013560e81c906003019c168c01809c89896105a6565b90898b610f60565b91111561148a575b906112709291611b60565b9982019961147f565b50600281019084013560f01c61144c565b8482013560f81c9250600190910190611442565b97509761150e61151b929394959697600f61152393169085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b92908301809386866105a6565b908688610f60565b9061128a92980198600052602052604060002090565b985096509394929391929091908082013590602001968015611290579061128a91600052602052604060002090565b90919293949596975060038916978815611724575b8084013560601c996115dc916014019061159c9060021c600316611434565b9085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9081019061164060208c6115f285858b8b6105a6565b919073ffffffffffffffffffffffffffffffffffffffff8c604051968795869485937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501610d01565b0392165afa908115610973577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000916000916116f6575b5016036116b257509060ff61127092991680910199611af5565b6108326116c38c93899389896105a6565b906040519485947fb2fed7ae00000000000000000000000000000000000000000000000000000000865260048601610d18565b611717915060203d811161171d575b61170f8183610223565b810190610cc9565b38611698565b503d611705565b8381013560f81c985060010161157d565b98600f91929394959697985016968715611764575b60148101976112709160ff9091169084013560601c611af5565b8281013560f81c975060010161174a565b98509091929394959698600f169788156117c7575b506020600061179d6113909a9b86611ab2565b9c90916040519384938c859094939260ff6060936080840197845216602083015260408201520152565b60018101995083013560f81c9750602061178a565b1561188c576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a08152610cc360c082610223565b46906117e5565b805160209091019060005b8181106118ab5750505090565b825173ffffffffffffffffffffffffffffffffffffffff1684526020938401939092019160010161189e565b6101008101516040516118f281610c97602082018095611893565b51902090611901815160ff1690565b60ff81168061197a57505090610cc361191d6040840151611d24565b92610c9760806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b600181036119d857505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46693810193845290810191909152606081019290925290610cc38160808101610c97565b60028103611a2e57505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e460208201908152918101929092526060820192909252610cc38160808101610c97565b600303611a82575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46660208201908152918101929092526060820192909252610cc38160808101610c97565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff81116105945791565b90604051907fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208301937f53657175656e6365207369676e65723a0a000000000000000000000000000000855260601b166031830152604582015260458152610cc3606582610223565b916040519160208301937f53657175656e6365206e657374656420636f6e6669673a0a0000000000000000855260388401526058830152607882015260788152610cc3609882610223565b60405160208101917f53657175656e636520737461746963206469676573743a0a00000000000000008352603882015260388152610cc3605882610223565b610c97610cc3610c55610c4f6000602086015115156117dc565b60405160208101917f53657175656e636520616e792061646472657373207375626469676573743a0a8352604082015260408152610cc3606082610223565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e63652073617069656e7420636f6e6669673a0a00000000000000865260601b166039840152604d830152606d820152606d8152610cc3608d82610223565b8051821015611cc75760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805160209091019060005b818110611d0e5750505090565b8251845260209384019390920191600101611d01565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611d6a611d54836102af565b92611d626040519485610223565b8084526102af565b0136602083013760005b8351811015611e465780611d8a60019286611cb3565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152611e3261012082610223565b519020611e3f8285611cb3565b5201611d74565b50909150604051610cc381610c97602082018095611cf656fea26469706673582212201a9f2861a08bc1996a59ae125a7db061038f3e34d7d2884d636c0442c0f707f164736f6c634300081c0033","sourceMap":"514:381:88:-:0;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436101561001257600080fd5b60003560e01c63545bbe2a1461002757600080fd5b346101ce5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ce5760043567ffffffffffffffff81116101ce576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126101ce5761009d610264565b906100aa81600401610285565b82526100b8602482016102a2565b6020830152604481013567ffffffffffffffff81116101ce576100e1906004369184010161038e565b6040830152606481013560608301526084810135608083015260a481013567ffffffffffffffff81116101ce5761011e9060043691840101610370565b60a083015260c481013560c083015260e481013560e08301526101048101359067ffffffffffffffff82116101ce57600461015c92369201016104ab565b61010082015260243567ffffffffffffffff81116101ce576101ca916101896101a0923690600401610510565b610191610293565b9161019a6102c7565b9361067e565b604080519586526020860194909452928401919091526060830152608082015290819060a0820190565b0390f35b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff82111761021e57604052565b6101d3565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761021e57604052565b6040519061027461012083610223565b565b6040519061027460e083610223565b359060ff821682036101ce57565b6044359081151582036101ce57565b359081151582036101ce57565b67ffffffffffffffff811161021e5760051b60200190565b6064359073ffffffffffffffffffffffffffffffffffffffff821682036101ce57565b359073ffffffffffffffffffffffffffffffffffffffff821682036101ce57565b92919267ffffffffffffffff821161021e576040519161035360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160184610223565b8294818452818301116101ce578281602093846000960137010152565b9080601f830112156101ce5781602061038b9335910161030b565b90565b81601f820112156101ce578035906103a5826102af565b926103b36040519485610223565b82845260208085019360051b830101918183116101ce5760208101935b8385106103df57505050505090565b843567ffffffffffffffff81116101ce57820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082860301126101ce57610426610276565b91610433602083016102ea565b83526040820135602084015260608201359267ffffffffffffffff84116101ce5760e083610468886020809881980101610370565b60408401526080810135606084015261048360a082016102a2565b608084015261049460c082016102a2565b60a0840152013560c08201528152019401936103d0565b9080601f830112156101ce5781356104c2816102af565b926104d06040519485610223565b81845260208085019260051b8201019283116101ce57602001905b8282106104f85750505090565b60208091610505846102ea565b8152019101906104eb565b9181601f840112156101ce5782359167ffffffffffffffff83116101ce57602083818601950101116101ce57565b6040519061054b82610202565b60006020838281520152565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b906001820180921161059457565b610557565b9190820180921161059457565b909392938483116101ce5784116101ce578101920390565b908160409103126101ce576020604051916105d883610202565b805183520151602082015290565b919082519283825260005b8481106106305750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b806020809284010151828286010152016105f1565b60409073ffffffffffffffffffffffffffffffffffffffff61038b949316815281602082015201906105e6565b6040513d6000823e3d90fd5b909491939291853560f81c6001909381908761069861053e565b9360408089161480610978575b610876575b5050506001808616146108505760028581161460208501526007600286901c1688820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190809691819660201661071a9060051c90565b61072390610586565b8a820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101959098899a8161076f84610c35565b98899361077b936105a6565b9161078593610f60565b909861079991600052602052604060002090565b906107ac91600052602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff166107d591600052602052604060002090565b94815190868215159283610845575b505081610836575b506107f45750565b6040517fccbb534f00000000000000000000000000000000000000000000000000000000815281516004820152602090910151602482015280604481015b0390fd5b905060208201511015386107ec565b1415915086386107e4565b8661086b979294955061086393986105a6565b939092610a54565b919394909293929190565b8a81013560601c985060140192509087908a9084901561089a575b508291506106aa565b60038101955073ffffffffffffffffffffffffffffffffffffffff945081013560e81c9260409261091d9290916108e8916108e19189906108db8983610599565b926105a6565b369161030b565b83519586809481937fccce3bc80000000000000000000000000000000000000000000000000000000083523060048401610645565b0392165afa80156109735761093b92600091610944575b5092610599565b86388981610891565b610966915060403d60401161096c575b61095e8183610223565b8101906105be565b38610934565b503d610954565b610672565b5073ffffffffffffffffffffffffffffffffffffffff8916156106a5565b60405190610120820182811067ffffffffffffffff82111761021e576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b90610a4a90604093969594966060845260608401916109f1565b9460208201520152565b9194929092600095600095600095600095600095610a70610996565b60028152937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9460005b828110610ac757505050505050508051151580610ab9575b6107f45750565b506020810151841115610ab2565b600381019d50959b5093995091975092909190610aeb908b9085013560e81c610599565b958a6000848903610c2f575089915b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c03610bff5750906001610b3489610b3b9487896105a6565b908b61067e565b9c939c9b929b9a919a99909a9b9d8e9d9e8f905b10610bb95750928b885114610bb0575b808b1015610b7e57508a60c08501528992959295949194939093610a9a565b7f37daf62b0000000000000000000000000000000000000000000000000000000060005260048b905260245260446000fd5b60008852610b5f565b8d8f610832610bca85858c8e6105a6565b9390926040519485947fb006aba000000000000000000000000000000000000000000000000000000000865260048601610a30565b9798999a916001610c158b610c1c94888a6105a6565b908661067e565b50929d919c909b929a9092918e8e610b4f565b91610afa565b610c97610cc3610c55610c4f6020850151151530906117dc565b936118d7565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610223565b51902090565b908160209103126101ce57517fffffffff00000000000000000000000000000000000000000000000000000000811681036101ce5790565b60409061038b9492815281602082015201916109f1565b73ffffffffffffffffffffffffffffffffffffffff61038b9593606093835216602082015281604082015201916109f1565b908160209103126101ce575190565b9080602083519182815201916020808360051b8301019401926000915b838310610d8557505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080610df8604085015160e0604086015260e08501906105e6565b936060810151606085015260808101511515608085015260a0810151151560a0850152015191015297019301930191939290610d76565b906020808351928381520192019060005b818110610e4d5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101610e40565b91610f5261038b949260408552610e9660408601825160ff169052565b602081015115156060860152610100610f0b610ec3604084015161012060808a0152610160890190610d59565b606084015160a0890152608084015160c089015260a08401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08983030160e08a01526105e6565b9160c08101518288015260e081015161012088015201517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086830301610140870152610e2f565b9260208185039101526109f1565b9391909360009460009460005b818110610f7b575050505050565b8481013560f881901c9860019092019788979692909160fc1c9889156117755750600189146117355760028914611568576003891461153957600489146114b8576006891461141257600589146113c457600789146112fd57600889146112a7576009891461117e57600a891461101b577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b9091929394959697506003891697881561116d575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190810190816110939187876105a6565b6040517f898bd921000000000000000000000000000000000000000000000000000000008152939184916110cb918a60048501610d01565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa9182156109735761110e9360009361113a575b5060ff909a168091019a611c43565b908015611134579061112891600052602052604060002090565b955b9392919093610f6d565b50611128565b60ff91935061115f9060203d8111611166575b6111578183610223565b810190610d4a565b92906110ff565b503d61114d565b8084013560f81c9850600101611030565b90919293949596975060038916978815611296575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190810190816111f69187876105a6565b6040517f13792a4a0000000000000000000000000000000000000000000000000000000081529391849161122e918b60048501610e79565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa918215610973576112709360009361113a575060ff909a168091019a611c43565b908015611290579061128a91600052602052604060002090565b9561112a565b5061128a565b8084013560f81c9850600101611193565b9850602087019750949593949293919290918201356112c586611bea565b81146112d5575b61127090611c04565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506112cc565b975090919293949597600f169687156113b2575b602060006113236113909a9b86611ab2565b9c9092918a60405161136681610c978a82019485603c917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008252601c8201520190565b51902092604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa15610973576112709060ff6000519a1680910199611af5565b600189019883013560f81c9750611311565b9850602087019750949593949293919290918201358085146113ea575b61127090611bab565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506113e1565b989091929394959662ffffff985061143a611434600c8416603f9060021c1690565b60ff1690565b9182156114a4575b6003168015611493575b9081906114779061146f908781013560e81c906003019c168c01809c89896105a6565b90898b610f60565b91111561148a575b906112709291611b60565b9982019961147f565b50600281019084013560f01c61144c565b8482013560f81c9250600190910190611442565b97509761150e61151b929394959697600f61152393169085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b92908301809386866105a6565b908688610f60565b9061128a92980198600052602052604060002090565b985096509394929391929091908082013590602001968015611290579061128a91600052602052604060002090565b90919293949596975060038916978815611724575b8084013560601c996115dc916014019061159c9060021c600316611434565b9085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9081019061164060208c6115f285858b8b6105a6565b919073ffffffffffffffffffffffffffffffffffffffff8c604051968795869485937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501610d01565b0392165afa908115610973577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000916000916116f6575b5016036116b257509060ff61127092991680910199611af5565b6108326116c38c93899389896105a6565b906040519485947fb2fed7ae00000000000000000000000000000000000000000000000000000000865260048601610d18565b611717915060203d811161171d575b61170f8183610223565b810190610cc9565b38611698565b503d611705565b8381013560f81c985060010161157d565b98600f91929394959697985016968715611764575b60148101976112709160ff9091169084013560601c611af5565b8281013560f81c975060010161174a565b98509091929394959698600f169788156117c7575b506020600061179d6113909a9b86611ab2565b9c90916040519384938c859094939260ff6060936080840197845216602083015260408201520152565b60018101995083013560f81c9750602061178a565b1561188c576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a08152610cc360c082610223565b46906117e5565b805160209091019060005b8181106118ab5750505090565b825173ffffffffffffffffffffffffffffffffffffffff1684526020938401939092019160010161189e565b6101008101516040516118f281610c97602082018095611893565b51902090611901815160ff1690565b60ff81168061197a57505090610cc361191d6040840151611d24565b92610c9760806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b600181036119d857505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46693810193845290810191909152606081019290925290610cc38160808101610c97565b60028103611a2e57505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e460208201908152918101929092526060820192909252610cc38160808101610c97565b600303611a82575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46660208201908152918101929092526060820192909252610cc38160808101610c97565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff81116105945791565b90604051907fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208301937f53657175656e6365207369676e65723a0a000000000000000000000000000000855260601b166031830152604582015260458152610cc3606582610223565b916040519160208301937f53657175656e6365206e657374656420636f6e6669673a0a0000000000000000855260388401526058830152607882015260788152610cc3609882610223565b60405160208101917f53657175656e636520737461746963206469676573743a0a00000000000000008352603882015260388152610cc3605882610223565b610c97610cc3610c55610c4f6000602086015115156117dc565b60405160208101917f53657175656e636520616e792061646472657373207375626469676573743a0a8352604082015260408152610cc3606082610223565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e63652073617069656e7420636f6e6669673a0a00000000000000865260601b166039840152604d830152606d820152606d8152610cc3608d82610223565b8051821015611cc75760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805160209091019060005b818110611d0e5750505090565b8251845260209384019390920191600101611d01565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611d6a611d54836102af565b92611d626040519485610223565b8084526102af565b0136602083013760005b8351811015611e465780611d8a60019286611cb3565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152611e3261012082610223565b519020611e3f8285611cb3565b5201611d74565b50909150604051610cc381610c97602082018095611cf656fea26469706673582212201a9f2861a08bc1996a59ae125a7db061038f3e34d7d2884d636c0442c0f707f164736f6c634300081c0033","sourceMap":"514:381:88:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;814:73;514:381;;;;;;:::i;:::-;;;:::i;:::-;;;;:::i;:::-;814:73;;:::i;:::-;514:381;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;514:381:88;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;-1:-1:-1;514:381:88;;;;;;;:::o;:::-;;;;;;;;;;;;4790:4:51;514:381:88;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2963:3141:51;;;;;;;566:109:68;;;;;3268:69:51;;;3762:24;514:381:88;;;:::i;:::-;3963:20:51;3979:4;3963:20;;;:28;:59;;;2963:3141;3959:742;;2963:3141;4774:20;;;4790:4;4774:20;;;:28;4770:126;;5004:4;4988:20;;;:28;4967:18;;;514:381:88;;;;;;;2363:226:68;;;;;;;;;;;;;;;;;;;;;;;;;5158:67:51;;;;;5330:20;4967:18;5330:20;5329:27;;514:381:88;;;;5329:27:51;5328:33;;;:::i;:::-;2363:226:68;;;;;;;;;;;;;;;;;;;;;;;;;5369:65:51;;;;5480:15;;;;;:::i;:::-;5555:19;;;;;;:::i;:::-;5523:52;;;;:::i;:::-;5501:74;5594:50;;;545:85:69;;;;;;;461:173;;5594:50:51;5662:51;;;545:85:69;;;;;;;461:173;;5662:51:51;514:381:88;;;5731:72:51;;545:85:69;;;;;;;461:173;;5731:72:51;514:381:88;;;5948:32:51;;;;;:67;;;;2963:3141;5948:104;;;;;2963:3141;5944:156;;;2963:3141;:::o;5944:156::-;3979:4;514:381:88;6069:24:51;;;514:381:88;;6069:24:51;;;514:381:88;;;;;;;;;;;;;;6069:24:51;;;;5948:104;6033:19;;4967:18;6033:19;;514:381:88;-1:-1:-1;6019:33:51;5948:104;;;:67;5984:31;;;-1:-1:-1;5948:67:51;;;;4770:126;4869:19;4819:70;4869:19;;;;;;;;;:::i;:::-;4819:70;;;;:::i;:::-;4812:77;;;;;;;;;:::o;3959:742::-;3281:184:68;;;;;;;-1:-1:-1;3281:184:68;;;-1:-1:-1;3162:307:68;3281:184;;;;;;4197:20:51;4193:502;;3959:742;;;;;;;4193:502;1318:135:68;;;;-1:-1:-1;514:381:88;;-1:-1:-1;1318:135:68;;;;;;3979:4:51;;4572:73;;3979:4;;514:381:88;;4471:48:51;;1318:135:68;;4489:29:51;1318:135:68;;4489:29:51;:::i;:::-;4471:48;;:::i;:::-;514:381:88;;;:::i;:::-;;;4572:73:51;;;;;;514:381:88;4572:73:51;;4621:4;4572:73;;;;:::i;:::-;;514:381:88;;4572:73:51;;;;;;4656:30;4572:73;-1:-1:-1;4572:73:51;;;4193:502;4561:84;4656:30;;:::i;:::-;4193:502;;;;;;4572:73;;;;3979:4;4572:73;3979:4;4572:73;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;:::i;3963:59::-;514:381:88;;;;3995:27:51;3963:59;;514:381:88;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;514:381:88;;-1:-1:-1;514:381:88;;;;;;;;;-1:-1:-1;514:381:88;;;;-1:-1:-1;514:381:88;;;;;;;;;-1:-1:-1;514:381:88;;;;-1:-1:-1;514:381:88;;;;;;:::o;2482:4:48:-;514:381:88;2482:4:48;514:381:88;2482:4:48;;514:381:88;2482:4:48;514:381:88;;;;;;;-1:-1:-1;514:381:88;;;;;;;;2482:4:48;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;514:381:88;2482:4:48;514:381:88;2482:4:48:o;6108:1663:51:-;;;;;;514:381:88;6304:14:51;514:381:88;6320:17:51;514:381:88;6339:18:51;514:381:88;6359:14:51;514:381:88;;;;:::i;:::-;;2482:4:48;;6423:47:51;6522:17;;514:381:88;6553:26:51;;;;;;514:381:88;;;;;;;;;7647:33:51;;:71;;;6546:1091;7643:124;;6108:1663;:::o;7647:71::-;7698:20;;;;514:381:88;7684:34:51;;;7647:71;;6546:1091;1318:135:68;;;;-1:-1:-1;1201:256:68;;-1:-1:-1;1201:256:68;;-1:-1:-1;1201:256:68;;-1:-1:-1;1201:256:68;;;;6717:16:51;;1318:135:68;;;;;;;6717:16:51;:::i;:::-;6773:57;;514:381:88;6773:28:51;;;;;:57;;;;6522:17;6843:35;;6522:17;;6971:26;;6999:4;6971:26;;6953:65;6971:26;;;;:::i;:::-;6953:65;;;:::i;:::-;6890:128;;;;;;;;;;;;;;;;6839:339;;;;7190:18;7186:122;;7315:16;514:381:88;;;;7344:32:51;7340:89;;6839:339;7441:28;;;;7437:115;;7560:23;;;;;2482:4:48;7603:27:51;6546:1091;;;;;;;;;;;;7437:115;7488:55;514:381:88;7488:55:51;;514:381:88;;;2482:4:48;514:381:88;2482:4:48;514:381:88;7488:55:51;7340:89;514:381:88;2482:4:48;;7340:89:51;;7186:122;7253:26;;7227:72;7253:26;;;;;;:::i;:::-;514:381:88;;;;;7227:72:51;;;;;;;;;;:::i;6839:339::-;7122:26;;;;;7150:4;7122:26;;7099:70;7122:26;;;;:::i;:::-;7099:70;;;:::i;:::-;-1:-1:-1;7043:126:51;;;;;;;;;;;;;6839:339;;6773:57;;;;9564:274:48;9784:48;;9743:18;9666:50;9682:18;;;514:381:88;;;9710:4:48;9666:50;;:::i;:::-;9743:18;;:::i;:::-;514:381:88;;9784:48:48;;;9682:18;9784:48;;;;514:381:88;;;;;;;;;;;;;;;;;;9784:48:48;;;;;;;;;:::i;:::-;514:381:88;9774:59:48;;9564:274;:::o;842:1:51:-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;514:381:88;;842:1:51;;;;;;;;:::i;109:10:60:-;514:381:88;109:10:60;;;;;514:381:88;;;109:10:60;;;514:381:88;109:10:60;;;;;;;;:::i;1206:1:51:-;;;;;;;;;514:381:88;1206:1:51;:::o;:::-;;;514:381:88;;;;;;;;1206:1:51;514:381:88;1206:1:51;;;;;;;514:381:88;;1206:1:51;-1:-1:-1;1206:1:51;;;;;;;;;;;;;:::o;:::-;;;;;;514:381:88;1206:1:51;;;;;;;;;;;;;514:381:88;1206:1:51;;514:381:88;;;1206:1:51;;;;;;;514:381:88;1206:1:51;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;514:381:88;1206:1:51;;;;514:381:88;;1206:1:51;;;;;;;;514:381:88;;1206:1:51;;;;;;;;514:381:88;1206:1:51;;;;;;;;;;;;;;514:381:88;;;;;;;;;;;1206:1:51;-1:-1:-1;1206:1:51;;;;;;;;;;:::o;:::-;;;514:381:88;;;;;1206:1:51;;;;;;;;;;;;;;;;;;;;;;;;;;;514:381:88;;740:1:51;;;1206;;;;;514:381:88;;1206:1:51;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;514:381:88;1206:1:51;;;;;;;514:381:88;1206:1:51;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;514:381:88;1206:1:51;;;;;;;514:381:88;1206:1:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;7775:11084::-;;;;;514:381:88;7930:12:51;514:381:88;7968:14:51;514:381:88;8044:26:51;;;;;;7775:11084;;;;;:::o;8037:10812::-;798:135:68;;;;;;;;;;;;;;;;683:254;;;;514:381:88;;8454:27:51;;;8450:864;;9374:20;786:1;9374:20;;9370:676;;842:1;10096:30;;10092:1383;;885:1;11512:17;;11508:279;;8405:1;11826:19;;11822:656;;1023:1;12517:19;;12513:1278;;978:1;13833:22;;13829:518;;1080:1;14398:31;;14394:933;;1150:1;15464:44;;15460:617;;1206:1;16127:30;;16123:1308;;1270:2;17489:38;;17485:1312;;18814:26;514:381:88;18814:26:51;8405:1;514:381:88;;;1270:2:51;514:381:88;7488:55:51;17485:1312;17799:16;;;;;;;;;885:1;17799:16;;17832:15;;;17828:99;;17485:1312;3281:184:68;;;;;;;;;18081:16:51;;514:381:88;;;;;;2363:226:68;;;;;;;;;;;;;;;;;;;;;;;;;740:1:51;;;18467:26;;;;;;;:::i;:::-;514:381:88;;;18405:89:51;;514:381:88;;;;18405:89:51;;514:381:88;8405:1:51;18405:89;;;:::i;:::-;;514:381:88;;;;18405:89:51;;;;;;;;;;;;18637:51;18405:89;514:381:88;18405:89:51;;;17485:1312;18506:16;514:381:88;18506:16:51;514:381:88;;740:1:51;;;18637:51;;:::i;:::-;18707:59;:18;;;;18728:31;;;545:85:69;;;;;;;461:173;;18728:31:51;18778:8;8037:10812;;;;;;;;18707:59;;;;18405:89;514:381:88;18405:89:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;17828:99;798:135:68;;;;;;;-1:-1:-1;798:135:68;;17828:99:51;;16123:1308;16429:16;;;;;;;;;885:1;16429:16;;16462:15;;;16458:99;;16123:1308;3281:184:68;;;;;;;;;16749:16:51;;514:381:88;;;;;;2363:226:68;;;;;;;;;;;;;;;;;;;;;;;;;740:1:51;;;17100:26;;;;;;;:::i;:::-;514:381:88;;;17051:76:51;;514:381:88;;;;17051:76:51;;514:381:88;8405:1:51;17051:76;;;:::i;:::-;;514:381:88;;;;17051:76:51;;;;;;;;;;;;17271:51;17051:76;514:381:88;17051:76:51;;;17139:16;514:381:88;17139:16:51;514:381:88;;740:1:51;;;17271:51;;:::i;:::-;17341:59;:18;;;;17362:31;;;545:85:69;;;;;;;461:173;;17362:31:51;17412:8;;;17341:59;;;;16458:99;798:135:68;;;;;;;-1:-1:-1;798:135:68;;16458:99:51;;15460:617;2926:232:68;-1:-1:-1;3047:107:68;;;;-1:-1:-1;2926:232:68;;;;;;;;;;3047:107;;;15775:28:51;2926:232:68;15775:28:51;:::i;:::-;15819:29;;15815:88;;15460:617;15930:38;;;:::i;15815:88::-;15873:17;;-1:-1:-1;15815:88:51;;14394:933;14742:16;;;;;;;;;14754:4;14742:16;14775:15;;;14771:99;;14394:933;15044:61;514:381:88;3511:494:68;15024:92:51;3511:494:68;;;;:::i;:::-;14943:53:51;;;;514:381:88;;;15044:61:51;;;;;;;;1080:1;;;;;;;;514:381:88;1080:1:51;;;15044:61;514:381:88;15034:72:51;;514:381:88;;;15024:92:51;;;;740:1;;;;514:381:88;740:1:51;;;;;514:381:88;;;;740:1:51;;;;;;;514:381:88;740:1:51;514:381:88;740:1:51;15024:92;;;;;;786:1;15024:92;;;;;15176:42;15024:92;514:381:88;;15024:92:51;514:381:88;;740:1:51;;;15176:42;;:::i;14771:99::-;798:135:68;;;;;;;;;;-1:-1:-1;14771:99:51;;13829:518;2926:232:68;-1:-1:-1;3047:107:68;;;;-1:-1:-1;2926:232:68;;;;;;;;;;3047:107;;;14099:20:51;;;14095:79;;13829:518;14201:37;;;:::i;14095:79::-;14144:17;;-1:-1:-1;14095:79:51;;12513:1278;12882:16;;;;;;;;514:381:88;12882:16:51;;12851:53;12876:28;12894:4;12882:16;;514:381:88;842:1:51;514:381:88;;;842:1:51;;12876:28;514:381:88;;;;12851:53:51;12920:19;;;12916:107;;12513:1278;885:1;13069:16;13102:22;;13098:114;;12513:1278;1201:256:68;;;13399:60:51;;13432:26;;1318:135:68;;;;;;;;;514:381:88;;740:1:51;;13432:26;;;;;:::i;:::-;13399:60;;;;:::i;:::-;13471:16;-1:-1:-1;13504:35:51;13500:92;;12513:1278;13619:63;;;;;:::i;13500:92::-;740:1;;;;13500:92;;13098:114;-1:-1:-1;1058:135:68;;;;;;;;;13098:114:51;;12916:107;798:135:68;;;;;;;-1:-1:-1;798:135:68;;;;;12916:107:51;;11822:656;12023:16;;;2213:380:68;12312:26:51;12023:16;;;;;;12035:4;12279:60;12023:16;;2213:380:68;;;;;;2363:226;;;;;;;;;;;;;;;;;;;2213:380;;;740:1:51;;;;12312:26;;;;;:::i;:::-;12279:60;;;;:::i;:::-;;12416:31;12279:60;740:1;;12416:31;545:85:69;;;;;;;461:173;;11508:279:51;2926:232:68;-1:-1:-1;2926:232:68;-1:-1:-1;2926:232:68;;;;;;;;;3047:107;;;;;;;11697:59:51;:18;;;;11718:31;;;545:85:69;;;;;;;461:173;;10092:1383:51;10387:16;;;;;;;;;885:1;10387:16;;10420:15;;;10416:99;;10092:1383;3281:184:68;;;;;;;2213:380;;3281:184;;;10669:47:51;;514:381:88;;;;10688:28:51;842:1;10669:47;2213:380:68;;;;;;2363:226;;;;;;;;;;;;;;;;;;;2213:380;;;740:1:51;;;11024:26;10983:68;;11024:26;;;;;;;:::i;:::-;514:381:88;;;;;;10983:68:51;;;;;;;514:381:88;10983:68:51;;8405:1;10983:68;;;:::i;:::-;;514:381:88;;10983:68:51;;;;;;;514:381:88;10983:68:51;842:1;10983:68;514:381:88;10983:68:51;;;10092:1383;842:1;;10983:97;10979:203;;11193:16;;514:381:88;11324:42:51;11193:16;514:381:88;;740:1:51;;;11324:42;;:::i;10979:203::-;11103:66;11142:26;;;;;;;;:::i;:::-;514:381:88;;;11103:66:51;;;;;;8405:1;11103:66;;;:::i;10983:68::-;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;10416:99;798:135:68;;;;;;;-1:-1:-1;798:135:68;;10416:99:51;;9370:676;9567:16;9579:4;9567:16;;;;;;;;;;9600:15;;;9596:99;;9370:676;3281:184:68;;;;9895:42:51;;514:381:88;;;;;3281:184:68;;;;;9895:42:51;:::i;9596:99::-;798:135:68;;;;;;;-1:-1:-1;798:135:68;;9596:99:51;;8450:864;8794:16;;;;;;;;;;8806:4;8794:16;8827:15;;;8823:99;;8450:864;3511:494:68;9076:27:51;514:381:88;3511:494:68;9076:27:51;3511:494:68;;;;:::i;:::-;8995:53:51;;;514:381:88;;9076:27:51;;;;;740:1;;;;514:381:88;740:1:51;;;;;514:381:88;;;;740:1:51;;;;;;;514:381:88;740:1:51;514:381:88;740:1:51;8823:99;798:135:68;;;;-1:-1:-1;798:135:68;;;;;;-1:-1:-1;9076:27:51;8823:99;;939:351:48;1206:48;;;-1:-1:-1;1206:48:48;;514:381:88;;;1077:202:48;;;;514:381:88;539:66:48;514:381:88;;709:66:48;514:381:88;868:66:48;;514:381:88;868:66:48;;;;514:381:88;868:66:48;;;514:381:88;;868:66:48;;;514:381:88;868:66:48;1077:202;;;;;;:::i;1206:48::-;1240:13;1206:48;;;514:381:88;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;1206:1:51;;;;;;;;514:381:88;;;;8278:1282:48;8416:22;;;;514:381:88;;8399:40:48;;514:381:88;8399:40:48;;;514:381:88;;;:::i;8399:40:48:-;514:381:88;8389:51:48;;514:381:88;;;;;;;;;;;;8451:34:48;514:381:88;;8525:14:48;;;8712:82;8515:25;514:381:88;8525:14:48;;;8515:25;:::i;:::-;8750:14;8712:82;8766:14;8750;;;514:381:88;8766:14:48;;514:381:88;;;;8712:82:48;;;8399:40;8712:82;;;;1799:66;;;;;;;;;514:381:88;1799:66:48;514:381:88;;1799:66:48;;;514:381:88;1799:66:48;;;514:381:88;1799:66:48;;;514:381:88;1799:66:48;514:381:88;1799:66:48;8447:1109;2395:4;8812:29;;2395:4;;-1:-1:-1;;8998:16:48;;;514:381:88;;8399:40:48;514:381:88;;;8988:27:48;514:381:88;;;1979:66:48;8959:70;;;514:381:88;;;1979:66:48;;;514:381:88;;;;1979:66:48;;;514:381:88;;;;8959:70:48;;514:381:88;1979:66:48;;;8959:70;1979:66;8808:748;2482:4;9047:35;;2482:4;;-1:-1:-1;;9216:18:48;;514:381:88;;;;2174:66:48;8399:40;9181:67;;514:381:88;;;1979:66:48;;;514:381:88;;;;1979:66:48;;;514:381:88;;;;9181:67:48;514:381:88;1979:66:48;;;9181:67;1979:66;9043:513;2556:4;9266:28;2556:4;;-1:-1:-1;9443:15:48;;514:381:88;;;;1979:66:48;8399:40;9414:58;;514:381:88;;;1979:66:48;;;514:381:88;;;;1979:66:48;;;514:381:88;;;;9414:58:48;514:381:88;1979:66:48;;;9414:58;1979:66;9262:294;9523:26;514:381:88;9523:26:48;514:381:88;;9523:26:48;740:1:51;2556:4:48;514:381:88;7488:55:51;3511:494:68;3690:173;;;;;;;;;;;;3998:2;3955:14;3931:39;;514:381:88;;;;;;;;;3511:494:68;:::o;1947:181:51:-;;514:381:88;;2068:54:51;514:381:88;2068:54:51;;;514:381:88;;;;;;;;;;;;;;;;2068:54:51;;;;;;:::i;2132:210::-;;514:381:88;;2263:73:51;;;;514:381:88;;;;;;;;;;;;;;;;;2263:73:51;;;;;;:::i;2562:182::-;514:381:88;;2681:57:51;;;514:381:88;;;;;;;;;2681:57:51;;;;;;:::i;9842:280:48:-;10068:48;;10027:18;9956:44;514:381:88;9972:18:48;;;514:381:88;;;9956:44:48;:::i;2748:211:51:-;514:381:88;;2878:75:51;;;514:381:88;;;;;;;;;2878:75:51;;;;;;:::i;2346:212::-;;514:381:88;;2478:74:51;514:381:88;2478:74:51;;;514:381:88;;;;;;;;;;;;;;;;;;;;2478:74:51;;;;;;:::i;514:381:88:-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;1206:1:51;;;;514:381:88;;;;7820:454:48;;514:381:88;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;-1:-1:-1;8164:3:48;514:381:88;;8146:16:48;;;;;8202:8;;514:381:88;8202:8:48;;;:::i;:::-;;514:381:88;1478:66:48;;514:381:88;7708:7:48;514:381:88;7708:7:48;;514:381:88;7727:6:48;514:381:88;7727:6:48;;;514:381:88;;;;;7717:17:48;7736:10;;;;514:381:88;7748:14:48;;;514:381:88;;;7764:14:48;7780:17;7764:14;;;514:381:88;;;7780:17:48;;514:381:88;;;;7667:138:48;514:381:88;7667:138:48;;514:381:88;1478:66:48;514:381:88;;;1478:66:48;;514:381:88;7736:10:48;1478:66;;514:381:88;7748:14:48;1478:66;;514:381:88;7764:14:48;1478:66;;514:381:88;7780:17:48;1478:66;;1206:1:51;1478:66:48;;;1206:1:51;1478:66:48;;;514:381:88;1478:66:48;7667:138;;;;;;:::i;:::-;514:381:88;7650:161:48;;8177:34;;;;:::i;:::-;2482:4;514:381:88;8131:13:48;;8146:16;;;;;514:381:88;;8240:28:48;;514:381:88;;8240:28:48;;514:381:88;;;:::i","linkReferences":{}},"methodIdentifiers":{"recoverPub((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes,bool,address)":"545bbe2a"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_signer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"InvalidERC1271Signature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"}],\"name\":\"InvalidKind\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_flag\",\"type\":\"uint256\"}],\"name\":\"InvalidSignatureFlag\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_weight\",\"type\":\"uint256\"}],\"name\":\"LowWeightChainedSignature\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"checkpoint\",\"type\":\"uint256\"}],\"internalType\":\"struct Snapshot\",\"name\":\"_snapshot\",\"type\":\"tuple\"}],\"name\":\"UnusedSnapshot\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nextCheckpoint\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_checkpoint\",\"type\":\"uint256\"}],\"name\":\"WrongChainedCheckpointOrder\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"_ignoreCheckpointer\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"_checkpointer\",\"type\":\"address\"}],\"name\":\"recoverPub\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"checkpoint\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"opHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"InvalidERC1271Signature(bytes32,address,bytes)\":[{\"notice\":\"Error thrown when the ERC1271 signature is invalid\"}],\"InvalidKind(uint8)\":[{\"notice\":\"Error thrown when the kind is invalid\"}],\"InvalidSignatureFlag(uint256)\":[{\"notice\":\"Error thrown when the signature flag is invalid\"}],\"LowWeightChainedSignature(bytes,uint256,uint256)\":[{\"notice\":\"Error thrown when the weight is too low for a chained signature\"}],\"UnusedSnapshot((bytes32,uint256))\":[{\"notice\":\"Error thrown when the snapshot is unused\"}],\"WrongChainedCheckpointOrder(uint256,uint256)\":[{\"notice\":\"Error thrown when the checkpoint order is wrong\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/modules/BaseSig.t.sol\":\"BaseSigImp\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/auth/BaseSig.sol\":{\"keccak256\":\"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8\",\"dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3\"]},\"src/modules/interfaces/ICheckpointer.sol\":{\"keccak256\":\"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1\",\"dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t\"]},\"src/modules/interfaces/IERC1271.sol\":{\"keccak256\":\"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b\",\"dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF\"]},\"src/modules/interfaces/ISapient.sol\":{\"keccak256\":\"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489\",\"dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"src/utils/LibOptim.sol\":{\"keccak256\":\"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81\",\"dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x\"]},\"test/modules/BaseSig.t.sol\":{\"keccak256\":\"0x11437c537dcc74468343003a2d3555dfb1299c0ad9c1d11379f6ce9f8aee9c3a\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://679667d1d960e7c6b47a07561cc76e6ce3c32309c3ac961b16b603434e936773\",\"dweb:/ipfs/QmRYS4PLNmN1rAbe9SPVbzJNbUdnYR7uyAQY3S8UR24VNZ\"]},\"test/utils/PrimitivesRPC.sol\":{\"keccak256\":\"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe\",\"dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv\"]},\"test/utils/TestUtils.sol\":{\"keccak256\":\"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad\",\"dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32"},{"internalType":"address","name":"_signer","type":"address"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"type":"error","name":"InvalidERC1271Signature"},{"inputs":[{"internalType":"uint8","name":"kind","type":"uint8"}],"type":"error","name":"InvalidKind"},{"inputs":[{"internalType":"uint256","name":"_flag","type":"uint256"}],"type":"error","name":"InvalidSignatureFlag"},{"inputs":[{"internalType":"bytes","name":"_signature","type":"bytes"},{"internalType":"uint256","name":"_threshold","type":"uint256"},{"internalType":"uint256","name":"_weight","type":"uint256"}],"type":"error","name":"LowWeightChainedSignature"},{"inputs":[{"internalType":"struct Snapshot","name":"_snapshot","type":"tuple","components":[{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"uint256","name":"checkpoint","type":"uint256"}]}],"type":"error","name":"UnusedSnapshot"},{"inputs":[{"internalType":"uint256","name":"_nextCheckpoint","type":"uint256"},{"internalType":"uint256","name":"_checkpoint","type":"uint256"}],"type":"error","name":"WrongChainedCheckpointOrder"},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"},{"internalType":"bool","name":"_ignoreCheckpointer","type":"bool"},{"internalType":"address","name":"_checkpointer","type":"address"}],"stateMutability":"view","type":"function","name":"recoverPub","outputs":[{"internalType":"uint256","name":"threshold","type":"uint256"},{"internalType":"uint256","name":"weight","type":"uint256"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"uint256","name":"checkpoint","type":"uint256"},{"internalType":"bytes32","name":"opHash","type":"bytes32"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/modules/BaseSig.t.sol":"BaseSigImp"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/auth/BaseSig.sol":{"keccak256":"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa","urls":["bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8","dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3"],"license":"Apache-2.0"},"src/modules/interfaces/ICheckpointer.sol":{"keccak256":"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513","urls":["bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1","dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t"],"license":"Apache-2.0"},"src/modules/interfaces/IERC1271.sol":{"keccak256":"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9","urls":["bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b","dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF"],"license":"Apache-2.0"},"src/modules/interfaces/ISapient.sol":{"keccak256":"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359","urls":["bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489","dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"src/utils/LibOptim.sol":{"keccak256":"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde","urls":["bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81","dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x"],"license":"Apache-2.0"},"test/modules/BaseSig.t.sol":{"keccak256":"0x11437c537dcc74468343003a2d3555dfb1299c0ad9c1d11379f6ce9f8aee9c3a","urls":["bzz-raw://679667d1d960e7c6b47a07561cc76e6ce3c32309c3ac961b16b603434e936773","dweb:/ipfs/QmRYS4PLNmN1rAbe9SPVbzJNbUdnYR7uyAQY3S8UR24VNZ"],"license":"Apache-2.0"},"test/utils/PrimitivesRPC.sol":{"keccak256":"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe","urls":["bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe","dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv"],"license":"Apache-2.0"},"test/utils/TestUtils.sol":{"keccak256":"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79","urls":["bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad","dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa"],"license":"Apache-2.0"}},"version":1},"id":88} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/BaseSig.t.sol/BaseSigTest.json b/contracts/artifacts/wallet-contracts-v3/BaseSig.t.sol/BaseSigTest.json new file mode 100644 index 00000000..140cd610 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/BaseSig.t.sol/BaseSigTest.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"baseSigImp","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract BaseSigImp"}],"stateMutability":"view"},{"type":"function","name":"excludeArtifacts","inputs":[],"outputs":[{"name":"excludedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"excludeContracts","inputs":[],"outputs":[{"name":"excludedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"excludeSelectors","inputs":[],"outputs":[{"name":"excludedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"excludeSenders","inputs":[],"outputs":[{"name":"excludedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"setUp","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"targetArtifactSelectors","inputs":[],"outputs":[{"name":"targetedArtifactSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzArtifactSelector[]","components":[{"name":"artifact","type":"string","internalType":"string"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetArtifacts","inputs":[],"outputs":[{"name":"targetedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"targetContracts","inputs":[],"outputs":[{"name":"targetedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"targetInterfaces","inputs":[],"outputs":[{"name":"targetedInterfaces_","type":"tuple[]","internalType":"struct StdInvariant.FuzzInterface[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"artifacts","type":"string[]","internalType":"string[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSelectors","inputs":[],"outputs":[{"name":"targetedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSenders","inputs":[],"outputs":[{"name":"targetedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"test_checkpointer_current_snapshot","inputs":[{"name":"params","type":"tuple","internalType":"struct BaseSigTest.test_checkpointer_current_snapshot_params","components":[{"name":"payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"checkpointer","type":"address","internalType":"address"},{"name":"checkpoint","type":"uint56","internalType":"uint56"},{"name":"signer1pk","type":"uint256","internalType":"uint256"},{"name":"threshold","type":"uint8","internalType":"uint8"},{"name":"weight","type":"uint8","internalType":"uint8"},{"name":"checkpointerData","type":"bytes","internalType":"bytes"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_checkpointer_different_image_hash_fail","inputs":[{"name":"params","type":"tuple","internalType":"struct BaseSigTest.test_checkpointer_different_image_hash_fail_params","components":[{"name":"payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"checkpointer","type":"address","internalType":"address"},{"name":"checkpointerData","type":"bytes","internalType":"bytes"},{"name":"checkpoint","type":"uint56","internalType":"uint56"},{"name":"signer1pk","type":"uint256","internalType":"uint256"},{"name":"threshold","type":"uint8","internalType":"uint8"},{"name":"weight","type":"uint8","internalType":"uint8"},{"name":"differentImageHash","type":"bytes32","internalType":"bytes32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_checkpointer_disabled","inputs":[{"name":"params","type":"tuple","internalType":"struct BaseSigTest.test_checkpointer_disabled_params","components":[{"name":"payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"checkpointer","type":"address","internalType":"address"},{"name":"checkpoint","type":"uint56","internalType":"uint56"},{"name":"snapshotCheckpoint","type":"uint56","internalType":"uint56"},{"name":"signer1pk","type":"uint256","internalType":"uint256"},{"name":"threshold","type":"uint8","internalType":"uint8"},{"name":"weight","type":"uint8","internalType":"uint8"},{"name":"checkpointerData","type":"bytes","internalType":"bytes"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_checkpointer_disabled_old_checkpoint","inputs":[{"name":"params","type":"tuple","internalType":"struct BaseSigTest.test_checkpointer_disabled_old_checkpoint_params","components":[{"name":"payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"checkpointer","type":"address","internalType":"address"},{"name":"checkpoint","type":"uint56","internalType":"uint56"},{"name":"snapshotCheckpoint","type":"uint56","internalType":"uint56"},{"name":"signer1pk","type":"uint256","internalType":"uint256"},{"name":"threshold","type":"uint8","internalType":"uint8"},{"name":"weight","type":"uint8","internalType":"uint8"},{"name":"checkpointerData","type":"bytes","internalType":"bytes"},{"name":"ignoredImageHash","type":"bytes32","internalType":"bytes32"},{"name":"oldCheckpoint","type":"uint56","internalType":"uint56"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_checkpointer_disabled_with_chain","inputs":[{"name":"params","type":"tuple","internalType":"struct BaseSigTest.test_checkpointer_disabled_with_chain_params","components":[{"name":"payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"checkpointer","type":"address","internalType":"address"},{"name":"checkpointerData","type":"bytes","internalType":"bytes"},{"name":"signerPk1","type":"uint256","internalType":"uint256"},{"name":"signerPk2","type":"uint256","internalType":"uint256"},{"name":"checkpoint1","type":"uint56","internalType":"uint56"},{"name":"checkpoint2","type":"uint56","internalType":"uint56"},{"name":"ignoredSnapshotCheckpoint","type":"uint56","internalType":"uint56"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_checkpointer_higher_checkpoint_fail","inputs":[{"name":"params","type":"tuple","internalType":"struct BaseSigTest.test_checkpointer_higher_checkpoint_fail_params","components":[{"name":"payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"checkpointer","type":"address","internalType":"address"},{"name":"checkpointerData","type":"bytes","internalType":"bytes"},{"name":"checkpointerCheckpoint","type":"uint56","internalType":"uint56"},{"name":"checkpoint","type":"uint56","internalType":"uint56"},{"name":"signer1pk","type":"uint256","internalType":"uint256"},{"name":"threshold","type":"uint8","internalType":"uint8"},{"name":"weight","type":"uint8","internalType":"uint8"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_checkpointer_old_checkpoint_with_chain","inputs":[{"name":"params","type":"tuple","internalType":"struct BaseSigTest.test_checkpointer_old_checkpoint_with_chain_params","components":[{"name":"payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"checkpointer","type":"address","internalType":"address"},{"name":"checkpointerData","type":"bytes","internalType":"bytes"},{"name":"signerPk1","type":"uint256","internalType":"uint256"},{"name":"signerPk2","type":"uint256","internalType":"uint256"},{"name":"checkpoint1","type":"uint56","internalType":"uint56"},{"name":"checkpoint2","type":"uint56","internalType":"uint56"},{"name":"oldCheckpoint","type":"uint56","internalType":"uint56"},{"name":"ignoredImageHash","type":"bytes32","internalType":"bytes32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_checkpointer_past_with_chain","inputs":[{"name":"params","type":"tuple","internalType":"struct BaseSigTest.test_checkpointer_past_with_chain_params","components":[{"name":"payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"checkpointer","type":"address","internalType":"address"},{"name":"checkpointerData","type":"bytes","internalType":"bytes"},{"name":"signerPk1","type":"uint256","internalType":"uint256"},{"name":"signerPk2","type":"uint256","internalType":"uint256"},{"name":"checkpoint1","type":"uint56","internalType":"uint56"},{"name":"checkpoint2","type":"uint56","internalType":"uint56"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_checkpointer_unused_snapshot_chain_fail","inputs":[{"name":"params","type":"tuple","internalType":"struct BaseSigTest.test_checkpointer_unused_snapshot_chain_params_fail","components":[{"name":"payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"checkpointer","type":"address","internalType":"address"},{"name":"checkpointerData","type":"bytes","internalType":"bytes"},{"name":"signerPk1","type":"uint256","internalType":"uint256"},{"name":"signerPk2","type":"uint256","internalType":"uint256"},{"name":"checkpoint1","type":"uint56","internalType":"uint56"},{"name":"checkpoint2","type":"uint56","internalType":"uint56"},{"name":"snapshotCheckpoint","type":"uint56","internalType":"uint56"},{"name":"snapshotImageHash","type":"bytes32","internalType":"bytes32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_recover_anyAddressSubdigest","inputs":[{"name":"params","type":"tuple","internalType":"struct BaseSigTest.test_recover_anyAddressSubdigest_params","components":[{"name":"payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"prefix","type":"tuple[]","internalType":"struct BaseSigTest.AddressWeightPair[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"weight","type":"uint8","internalType":"uint8"}]},{"name":"suffix","type":"tuple[]","internalType":"struct BaseSigTest.AddressWeightPair[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"weight","type":"uint8","internalType":"uint8"}]},{"name":"threshold","type":"uint16","internalType":"uint16"},{"name":"checkpoint","type":"uint56","internalType":"uint56"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_recover_chained_low_weight_fail","inputs":[{"name":"params","type":"tuple","internalType":"struct BaseSigTest.test_recover_chained_low_weight_fail_params","components":[{"name":"payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"threshold","type":"uint256","internalType":"uint256"},{"name":"weight","type":"uint256","internalType":"uint256"},{"name":"signer1pk","type":"uint256","internalType":"uint256"},{"name":"signer2pk","type":"uint256","internalType":"uint256"},{"name":"signer3pk","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_recover_chained_signature_single_case","inputs":[{"name":"_finalPayload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_recover_chained_wrong_checkpoint_order_fail","inputs":[{"name":"params","type":"tuple","internalType":"struct BaseSigTest.test_recover_chained_wrong_checkpoint_order_fail_params","components":[{"name":"payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"signer1pk","type":"uint256","internalType":"uint256"},{"name":"signer2pk","type":"uint256","internalType":"uint256"},{"name":"signer3pk","type":"uint256","internalType":"uint256"},{"name":"checkpoint1","type":"uint256","internalType":"uint256"},{"name":"checkpoint2","type":"uint256","internalType":"uint256"},{"name":"checkpoint3","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_recover_invalid_signature_flag","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"checkpointSize","type":"uint8","internalType":"uint8"},{"name":"thresholdSize","type":"uint8","internalType":"uint8"},{"name":"invalidFlag","type":"uint8","internalType":"uint8"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_recover_nested_config","inputs":[{"name":"params","type":"tuple","internalType":"struct BaseSigTest.test_recover_nested_config_params","components":[{"name":"prefix","type":"tuple[]","internalType":"struct BaseSigTest.AddressWeightPair[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"weight","type":"uint8","internalType":"uint8"}]},{"name":"suffix","type":"tuple[]","internalType":"struct BaseSigTest.AddressWeightPair[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"weight","type":"uint8","internalType":"uint8"}]},{"name":"nestedPrefix","type":"tuple[]","internalType":"struct BaseSigTest.AddressWeightPair[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"weight","type":"uint8","internalType":"uint8"}]},{"name":"nestedSuffix","type":"tuple[]","internalType":"struct BaseSigTest.AddressWeightPair[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"weight","type":"uint8","internalType":"uint8"}]},{"name":"payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"threshold","type":"uint16","internalType":"uint16"},{"name":"checkpoint","type":"uint56","internalType":"uint56"},{"name":"internalThreshold","type":"uint16","internalType":"uint16"},{"name":"externalWeight","type":"uint8","internalType":"uint8"},{"name":"weight","type":"uint8","internalType":"uint8"},{"name":"pk","type":"uint256","internalType":"uint256"},{"name":"useEthSign","type":"bool","internalType":"bool"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_recover_one_1271_invalid_signature_bad_return_fail","inputs":[{"name":"params","type":"tuple","internalType":"struct BaseSigTest.test_recover_one_1271_invalid_signature_bad_return_fail_params","components":[{"name":"prefix","type":"tuple[]","internalType":"struct BaseSigTest.AddressWeightPair[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"weight","type":"uint8","internalType":"uint8"}]},{"name":"suffix","type":"tuple[]","internalType":"struct BaseSigTest.AddressWeightPair[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"weight","type":"uint8","internalType":"uint8"}]},{"name":"payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"threshold","type":"uint16","internalType":"uint16"},{"name":"checkpoint","type":"uint56","internalType":"uint56"},{"name":"weight","type":"uint8","internalType":"uint8"},{"name":"signer","type":"address","internalType":"address"},{"name":"signature","type":"bytes","internalType":"bytes"},{"name":"bad4Bytes","type":"bytes4","internalType":"bytes4"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_recover_one_1271_invalid_signature_revert_fail","inputs":[{"name":"params","type":"tuple","internalType":"struct BaseSigTest.test_recover_one_1271_invalid_signature_fail_params","components":[{"name":"prefix","type":"tuple[]","internalType":"struct BaseSigTest.AddressWeightPair[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"weight","type":"uint8","internalType":"uint8"}]},{"name":"suffix","type":"tuple[]","internalType":"struct BaseSigTest.AddressWeightPair[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"weight","type":"uint8","internalType":"uint8"}]},{"name":"payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"threshold","type":"uint16","internalType":"uint16"},{"name":"checkpoint","type":"uint56","internalType":"uint56"},{"name":"weight","type":"uint8","internalType":"uint8"},{"name":"signer","type":"address","internalType":"address"},{"name":"signature","type":"bytes","internalType":"bytes"},{"name":"revertFromSigner","type":"bytes","internalType":"bytes"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_recover_one_1271_signer","inputs":[{"name":"params","type":"tuple","internalType":"struct BaseSigTest.test_recover_one_1271_signer_params","components":[{"name":"prefix","type":"tuple[]","internalType":"struct BaseSigTest.AddressWeightPair[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"weight","type":"uint8","internalType":"uint8"}]},{"name":"suffix","type":"tuple[]","internalType":"struct BaseSigTest.AddressWeightPair[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"weight","type":"uint8","internalType":"uint8"}]},{"name":"payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"threshold","type":"uint16","internalType":"uint16"},{"name":"checkpoint","type":"uint56","internalType":"uint56"},{"name":"weight","type":"uint8","internalType":"uint8"},{"name":"signer","type":"address","internalType":"address"},{"name":"signature","type":"bytes","internalType":"bytes"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_recover_one_sapient_signer","inputs":[{"name":"params","type":"tuple","internalType":"struct BaseSigTest.test_recover_one_sapient_signer_params","components":[{"name":"prefix","type":"tuple[]","internalType":"struct BaseSigTest.AddressWeightPair[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"weight","type":"uint8","internalType":"uint8"}]},{"name":"suffix","type":"tuple[]","internalType":"struct BaseSigTest.AddressWeightPair[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"weight","type":"uint8","internalType":"uint8"}]},{"name":"payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"threshold","type":"uint16","internalType":"uint16"},{"name":"checkpoint","type":"uint56","internalType":"uint56"},{"name":"weight","type":"uint8","internalType":"uint8"},{"name":"signer","type":"address","internalType":"address"},{"name":"signature","type":"bytes","internalType":"bytes"},{"name":"sapientImageHash","type":"bytes32","internalType":"bytes32"},{"name":"isCompact","type":"bool","internalType":"bool"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_recover_one_signer","inputs":[{"name":"params","type":"tuple","internalType":"struct BaseSigTest.test_recover_one_signer_params","components":[{"name":"prefix","type":"tuple[]","internalType":"struct BaseSigTest.AddressWeightPair[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"weight","type":"uint8","internalType":"uint8"}]},{"name":"suffix","type":"tuple[]","internalType":"struct BaseSigTest.AddressWeightPair[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"weight","type":"uint8","internalType":"uint8"}]},{"name":"payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"threshold","type":"uint16","internalType":"uint16"},{"name":"checkpoint","type":"uint56","internalType":"uint56"},{"name":"weight","type":"uint8","internalType":"uint8"},{"name":"pk","type":"uint256","internalType":"uint256"},{"name":"useEthSign","type":"bool","internalType":"bool"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_recover_random_config_unsigned","inputs":[{"name":"_maxDepth","type":"uint256","internalType":"uint256"},{"name":"_seed","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_recover_random_config_unsigned_skewed_left","inputs":[{"name":"_seed","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_recover_random_config_unsigned_skewed_right","inputs":[{"name":"_seed","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_recover_subdigest","inputs":[{"name":"params","type":"tuple","internalType":"struct BaseSigTest.test_recover_subdigest_params","components":[{"name":"payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"prefix","type":"tuple[]","internalType":"struct BaseSigTest.AddressWeightPair[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"weight","type":"uint8","internalType":"uint8"}]},{"name":"suffix","type":"tuple[]","internalType":"struct BaseSigTest.AddressWeightPair[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"weight","type":"uint8","internalType":"uint8"}]},{"name":"threshold","type":"uint16","internalType":"uint16"},{"name":"checkpoint","type":"uint56","internalType":"uint56"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"error","name":"InvalidKind","inputs":[{"name":"kind","type":"uint8","internalType":"uint8"}]}],"bytecode":{"object":"0x60808060405234603157600160ff19600c541617600c55600160ff19601f541617601f5562019bbd9081620000378239f35b600080fdfe60a08060405260043610156200001457600080fd5b60006080526080513560e01c908163035082a71462012ac8575080630965d1621462011f765780630a9254e41462011ec55780630e8cc06714620119055780631bc86b7e14620103c45780631d2d5933146200fa2e5780631ed7831c146200f97957806323f1d045146200e7ac57806327181b75146200d81c5780632ade3880146200d63757806339441709146200c7a75780633e5e3c23146200c6f25780633e707bb2146200b9c65780633f7286f4146200b9115780634e07914a146200a3005780635418a2c3146200a2a857806356b9fb3e14620095dd57806366d9a9a0146200946457806366fee9211462008eb257806368193b7f14620084225780637a7c73be1462006f5757806385226c811462006eaf578063916a17c61462006dc5578063960158901462006d3757806397b6de28146200654d578063a81c626314620055a3578063b0464fdc14620054b9578063b4d4462b146200541d578063b5508aa91462005375578063b938827c1462003bec578063ba414fa61462003ba4578063bff915aa14620030f9578063d82c180214620020f2578063e20c9f71146200202c578063e8a63f731462000ef9578063f7647d6b1462000881578063f8aca5ac14620002385763fa7626d414620001ee57600080fd5b3462000232576080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126200023257602060ff601f54166040519015158152f35b60805180fd5b34620002325760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325760043567ffffffffffffffff811162000232576200028c903690600401620134dc565b60243560ff811690819003620002325760443560ff81169290839003620002325760643560ff8116908190036200023257600f600b620002d792620002d18562014a38565b62017282565b620003b260076040948551620002ee8782620133b5565b600c81527f426f756e6420726573756c740000000000000000000000000000000000000000602082015286516200038f816200035c60208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528b6024840152606483019062013935565b886044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282620133b5565b608051916080519151906a636f6e736f6c652e6c6f675afa506080519062017282565b938351620003c18582620133b5565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152845162000462816200042f60208201947fb60e72cc000000000000000000000000000000000000000000000000000000008652896024840152606483019062013935565b896044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282620133b5565b608051916080519151906a636f6e736f6c652e6c6f675afa5060805160ff861691620004919160019162017282565b84516200049f8682620133b5565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152855162000540816200050d60208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528a6024840152606483019062013935565b856044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282620133b5565b608051916080519151906a636f6e736f6c652e6c6f675afa5060ff818116600101908111620008505760ff1690620005868260ff6200057f8662014a26565b1662013f7c565b96600188018098116200085057620005ba620005a28962013454565b98620005b189519a8b620133b5565b808a5262013454565b937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe060208a0195013686378851156200081f5762000639947fff000000000000000000000000000000000000000000000000000000000000006200057f9360fc60e060ff9760051b169160021b161760f81b166080511a905362014a26565b84518110156200081f5760805160fc83901b7ff00000000000000000000000000000000000000000000000000000000000000016901a9085016020015360ff8351917fb2505f7c00000000000000000000000000000000000000000000000000000000602084015216602482015260248152620006b8604482620133b5565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562000232578251907ff28dceb30000000000000000000000000000000000000000000000000000000082526020600483015281806200071660805193602483019062013935565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156200081357620007f6575b506200079a9260a09173ffffffffffffffffffffffffffffffffffffffff601f5460081c169084518096819482937f545bbe2a0000000000000000000000000000000000000000000000000000000084526004840162013f18565b03915afa908115620007eb5750620007b3575b60805180f35b620007d99060a03d60a011620007e3575b620007d08183620133b5565b81019062013d5a565b50505050620007ad565b503d620007c4565b513d608051823e3d90fd5b6080516200080491620133b5565b6080516200023257836200073f565b83513d608051823e3d90fd5b7f4e487b71000000000000000000000000000000000000000000000000000000006080515260326004526024608051fd5b7f4e487b71000000000000000000000000000000000000000000000000000000006080515260116004526024608051fd5b34620002325760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126200023257620008c36006600160043562017282565b6040908151620008d48382620133b5565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152825162000942816200050d60208201947fb60e72cc000000000000000000000000000000000000000000000000000000008652876024840152606483019062013935565b608051916080519151906a636f6e736f6c652e6c6f675afa5062000965620142f7565b6001602082015282516200097a8482620133b5565b6004815260208101927f6e6f6e65000000000000000000000000000000000000000000000000000000008452608051508451907f6900a3ae000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562000eed576080519162000ecd575b508451907f6900a3ae000000000000000000000000000000000000000000000000000000008252602435600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562000ec1576080519262000e9f575b50858051917f6900a3ae0000000000000000000000000000000000000000000000000000000083526001600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562000e935762000cf19762000b219662000bd16009600b9660199562000c279a60029a6080519262000e6e575b50602c809293519d8e809b7f7b226d61784465707468223a000000000000000000000000000000000000000060208301526020815194859301910162013910565b89017f2c2273656564223a2200000000000000000000000000000000000000000000008382015262000b5e82518093602060358501910162013910565b01017f222c226d696e5468726573686f6c644f6e4e6573746564223a000000000000008382015262000b9b82518093602060228501910162013910565b0101917f2c22736b65776564223a2200000000000000000000000000000000000000000085840152518093602484019062013910565b01017f227d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2810184520182620133b5565b62000c8662000c4a737109709ecfa91a80626ff3989d68f67f5b1dd12d62017484565b855194859283927f0199a22000000000000000000000000000000000000000000000000000000000845260606004850152606484019062013935565b93603c8386037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024860152601587527f646576546f6f6c735f72616e646f6d436f6e666967000000000000000000000060208801520160448401528760805195019062013935565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af191821562000813576080519262000e3e575b5062000d839060a062000d3284620171c2565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c16865180809681947f545bbe2a000000000000000000000000000000000000000000000000000000008352876004840162013f51565b03915afa91821562000e3257608051620007ad955093849384929062000def575b509062000dc562000dcc9262000dbf62000dc59697620169dd565b620155d8565b9062016ae3565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b62000dbf955062000dc5945062000dcc925062000e2162000dc59160a03d60a011620007e357620007d08183620133b5565b929950919750945062000da4915050565b84513d608051823e3d90fd5b62000d8391925062000e66903d80608051833e62000e5d8183620133b5565b81019062013c82565b919062000d1f565b602c925062000e8b83913d80608051833e62000e5d8183620133b5565b925062000ae0565b82513d608051823e3d90fd5b62000eb99192503d80608051833e62000e5d8183620133b5565b908662000a64565b86513d608051823e3d90fd5b62000ee691503d80608051833e62000e5d8183620133b5565b8562000a05565b85513d608051823e3d90fd5b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325760043567ffffffffffffffff811162000232576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011262000232576040519062000f7a82620132b7565b806004013567ffffffffffffffff8111620002325762000fa19060043691840101620134dc565b825262000fb16024820162013432565b9060208301918252604481013567ffffffffffffffff8111620002325762000fe090600436918401016201348f565b926040810193845260608101606483013581526080820193608484013585526200100d60a4850162013742565b9560a084019687526200103860e46200102960c4880162013742565b9660c087019788520162013742565b9060e0850191825260036040865101515110737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc7576200200f575b50620010ca855162014a38565b73ffffffffffffffffffffffffffffffffffffffff620010ed8185511662014dd6565b168352620010fc845162014d5c565b84526200110a875162014d5c565b875266ffffffffffffff620011438162001127818c511662014d98565b16808b52826200113b818b511692620142d8565b169062014dad565b168652620011506201450e565b938051604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75773ffffffffffffffffffffffffffffffffffffffff916080519162001feb575b501685528751604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519162001fb5575b5073ffffffffffffffffffffffffffffffffffffffff602087019116815273ffffffffffffffffffffffffffffffffffffffff85511666ffffffffffffff8b51169073ffffffffffffffffffffffffffffffffffffffff88511691604051927f56ca623e000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc75762001385936080519362001f93575b506200137f6002602760405180967f7369676e65723a00000000000000000000000000000000000000000000000000602083015262001329815180926020868601910162013910565b81017f3a310000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2810186520184620133b5565b6201523b565b620013976040880191808352620155d8565b9860808801998a5266ffffffffffffff73ffffffffffffffffffffffffffffffffffffffff8851169151169073ffffffffffffffffffffffffffffffffffffffff84511691604051927f56ca623e000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc757620014e2936080519362001f71575b50620014dc6002602760405180967f7369676e65723a00000000000000000000000000000000000000000000000000602083015262001486815180926020868601910162013910565b81017f3a320000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2810186520184620133b5565b620153ba565b9262001541620014f960608a0195808752620155d8565b9160a08a019283526101c08a019260028451525160c084510152600160208451015251915173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc757608051928392839262001f44575b5060ff6101808b01946101008c01946101408d019485528552168452519173ffffffffffffffffffffffffffffffffffffffff8a511690604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc7576080519262001f22575b505191604051927fb11a19e8000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc7576080519362001f00575b505193604051947fb11a19e8000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa94851562001dc7576080519562001edb575b5060ff90511693604051947f6900a3ae000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc75760016200186c93819362001875986080519262001df7575b5060069060206040519886620017868b9851809285808c01910162013910565b87017f3a686173683a000000000000000000000000000000000000000000000000000083820152620017c2825180938560268501910162013910565b01017f3a0000000000000000000000000000000000000000000000000000000000000083820152620017ff82518093602060078501910162013910565b01017f3a00000000000000000000000000000000000000000000000000000000000000838201526200183c82518093602060028501910162013910565b010103017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282620133b5565b85519162015b1d565b9860c08701998a525192620018a8885173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b604051947fe341eaa400000000000000000000000000000000000000000000000000000000865260048601526024850152606084604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75760805193608051956080519262001e85575b5073ffffffffffffffffffffffffffffffffffffffff9060ff6101a08b01966101208c01986101608d0195865289521686525193511694604051957f56ca623e000000000000000000000000000000000000000000000000000000008752600487015260805186602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa95861562001dc7576080519662001e63575b505190604051917fb11a19e8000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc7576080519262001e41575b505193604051947fb11a19e8000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa94851562001dc7576080519562001e1c575b5060ff90511693604051947f6900a3ae000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc75773ffffffffffffffffffffffffffffffffffffffff96600162001b0693819362001b16996080519262001df7575060069060206040519886620017868b9851809285808c01910162013910565b6020895101511591519262015900565b9260e0850193845266ffffffffffffff6102008601936080518551525116602084510152511662001ba062001bcd604051937fccce3bc80000000000000000000000000000000000000000000000000000000060208601526004855262001b7f602486620133b5565b51604051928391602083019190916020806040830194805184520151910152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282620133b5565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620002325762001c279260405193849283927fb96213e4000000000000000000000000000000000000000000000000000000008452608051956004850162013d15565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562001dc75762001dd4575b509062001ca36101e0939262001cfe9662001c6a62014342565b915162001c778362013f8a565b5262001c838262013f8a565b505162001c908262013fc7565b5262001c9c8162013fc7565b5062016bb3565b928391015260a073ffffffffffffffffffffffffffffffffffffffff601f5460081c1692825160405196879283927f545bbe2a0000000000000000000000000000000000000000000000000000000084526004840162013f18565b0381855afa92831562001dc757608051620007ad969094859283918290819062001d6c575b62000dc59899509262001d6595949262001d5462001d5c9362001d4e66ffffffffffffff9762016962565b62016962565b519062016ae3565b51169062016a69565b5162015714565b50509162000dc5965062001d65935066ffffffffffffff915062001d5c62001d4e62001dad62001d549a60a03d60a011620007e357620007d08183620133b5565b939d50929b50919750939590945092915089905062001d23565b6040513d608051823e3d90fd5b6080519193929162001de691620133b5565b608051620002325790918662001c50565b600691925062001e14903d80608051833e62000e5d8183620133b5565b919062001766565b60ff91955062001e39903d80608051833e62000e5d8183620133b5565b949062001a60565b62001e5b9192503d80608051833e62000e5d8183620133b5565b908d62001a01565b62001e7d9196503d80608051833e62000e5d8183620133b5565b948d620019a2565b90955073ffffffffffffffffffffffffffffffffffffffff945062001ec6915060603d60601162001ed3575b62001ebd8183620133b5565b81019062013cee565b959194909591906200190f565b503d62001eb1565b60ff91955062001ef8903d80608051833e62000e5d8183620133b5565b9490620016f5565b62001f1a9193503d80608051833e62000e5d8183620133b5565b918f62001696565b62001f3c9192503d80608051833e62000e5d8183620133b5565b908f62001637565b9150925062001f65915060603d60601162001ed35762001ebd8183620133b5565b91929091908e620015a4565b62001f8b9193503d80608051833e62000e5d8183620133b5565b918f6200143d565b62001fad9193503d80608051833e62000e5d8183620133b5565b918e620012e0565b62001fdc915060203d60201162001fe3575b62001fd38183620133b5565b810190620141d8565b8a62001224565b503d62001fc7565b62002008915060203d60201162001fe35762001fd38183620133b5565b8b620011c3565b6080516200201d91620133b5565b608051620002325788620010bd565b3462000232576080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011262000232576040518060206015549182815201906015608051527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475906080515b818110620020c557620020c185620020b481870382620133b5565b60405191829182620138be565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff1684526020909301926001928301920162002099565b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325760043567ffffffffffffffff811162000232576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011262000232576040516200217281620132b7565b816004013567ffffffffffffffff8111620002325762002199906004369185010162013757565b8152602482013567ffffffffffffffff81116200023257620021c2906004369185010162013757565b9060208101918252604483013567ffffffffffffffff81116200023257620021f19060043691860101620134dc565b604082019081526200220660648501620137f4565b6060830152620022196084850162013742565b60808301526200222c60a48501620133f7565b60a08301526200224a60e460c084019560c48101358752016201340b565b9260e08301938452610258620022668451518351519062013f7c565b10737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc757620030dc575b50620022e7825162014a38565b620022f3855162014d5c565b93848652604051947fffa186490000000000000000000000000000000000000000000000000000000086526004860152602085602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa94851562001dc75760805195620030b6575b506080515b845180518210156200243a57620023848273ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e56200000000000000000000000000000000000000000000000000000000825273ffffffffffffffffffffffffffffffffffffffff88161415600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc7576200241d575b5060010162002357565b6080516200242b91620133b5565b60805162000232578762002413565b5050919490926080515b845180518210156200252757620024718273ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e56200000000000000000000000000000000000000000000000000000000825273ffffffffffffffffffffffffffffffffffffffff88161415600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc7576200250a575b5060010162002444565b6080516200251891620133b5565b60805162000232578762002500565b50506080519285908790869060605b855180518910156200277757620025638973ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519162002757575b5060ff6020620025d48b8a5162013fe9565b5101511691604051927f6900a3ae000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc75760016200272e926007829683946080519162002737575b50602060405197846200265f8a9651809285808a01910162013910565b85017f7369676e65723a00000000000000000000000000000000000000000000000000838201526200269b825180938560278501910162013910565b01017f3a0000000000000000000000000000000000000000000000000000000000000083820152620026d882518093602060088501910162013910565b01017f20000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1810184520182620133b5565b97019662002536565b6200275091503d80608051833e62000e5d8183620133b5565b8f62002642565b6200277091503d80608051833e62000e5d8183620133b5565b89620025c2565b509386869173ffffffffffffffffffffffffffffffffffffffff604051917f56ca623e000000000000000000000000000000000000000000000000000000008352169687600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc7576080519262003094575b5060ff60a08501511690604051917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576007600192620028f6946080519162003074575b50602060405196846200287d899651809285808a01910162013910565b85017f7369676e65723a0000000000000000000000000000000000000000000000000083820152620028b9825180938560278501910162013910565b01017f3a00000000000000000000000000000000000000000000000000000000000000838201526200183c82518093602060088501910162013910565b95608051965b8551805189101562002ae457620029298973ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519162002ac4575b5060ff60206200299a8b8a5162013fe9565b51015116604051907f6900a3ae000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc7576001936008859262002a9b946080519162002aa4575b506020604051968462002a22899651809285808a01910162013910565b85017f207369676e65723a0000000000000000000000000000000000000000000000008382015262002a5e825180938560288501910162013910565b01017f3a00000000000000000000000000000000000000000000000000000000000000838201526200183c82518093602060098501910162013910565b970196620028fc565b62002abd91503d80608051833e62000e5d8183620133b5565b8e62002a05565b62002add91503d80608051833e62000e5d8183620133b5565b8962002988565b508462002b0a889261ffff60608801511666ffffffffffffff6080890151169062016218565b9362002b34835173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b90825162003028575b5190604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc757608051928392839262002ffb575b50511562002fea5762002bb462014243565b915b604051957f56ca623e000000000000000000000000000000000000000000000000000000008752600487015260805186602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa95861562001dc7576080519662002fc8575b50604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519162002fa8575b50604051917fb11a19e8000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc7576080519262002f86575b5060ff604051947f6900a3ae00000000000000000000000000000000000000000000000000000000865216600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc75762002e6696600162002e129562002d689562002e0395839560a09a6080519462002f58575b509062002d8e60208093816040519c8d8b83829d5194859301910162013910565b890162002d7e8251809385808501910162013910565b0101918281519485920162013910565b017f3a00000000000000000000000000000000000000000000000000000000000000815262002dc7825180936020878501910162013910565b017f3a00000000000000000000000000000000000000000000000000000000000000838201526200183c82518093602060028501910162013910565b60208451015115908662016756565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c1683516040518096819482937f545bbe2a0000000000000000000000000000000000000000000000000000000084526004840162013f51565b03915afa91821562001dc757608051620007ad959093849283918291829162002f01575b509262002ed360ff9362002ebe60a09462000dc562000dc59b9c62000dbf62002edd9b9a61ffff60608a0151169062016a69565b66ffffffffffffff6080840151169062016a69565b0151169062016a69565b5173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b62000dc5975062002edd955060ff935060a0925062000dbf94915062000dc562002ebe62002f4262002ed393863d8811620007e357620007d08183620133b5565b9d50919a50959850965093945062002e8a915050565b6020809392955062002f7b62002d8e923d80608051833e62000e5d8183620133b5565b959293505062002d47565b62002fa09192503d80608051833e62000e5d8183620133b5565b908862002ccc565b62002fc191503d80608051833e62000e5d8183620133b5565b8862002c6f565b62002fe29196503d80608051833e62000e5d8183620133b5565b948862002c12565b62002ff462014206565b9162002bb6565b915092506200301c915060603d60601162001ed35762001ebd8183620133b5565b91929091908862002ba2565b9060405160208101917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008352603c820152603c81526200306a605c82620133b5565b5190209062002b3d565b6200308d91503d80608051833e62000e5d8183620133b5565b8c62002860565b620030ae9192503d80608051833e62000e5d8183620133b5565b9088620027f0565b620030d491955060203d60201162001fe35762001fd38183620133b5565b938662002352565b608051620030ea91620133b5565b608051620002325785620022da565b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325760043567ffffffffffffffff811162000232576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8236030112620002325760405162003179816201333f565b816004013567ffffffffffffffff81116200023257620031a09060043691850101620134dc565b8152620031b06024830162013432565b6020820152620031c36044830162013742565b9060408101918252620031d96064840162013742565b60608201526080810160848401358152620031f760a48501620133f7565b9260a083019384526200320d60c48601620133f7565b9360c0840194855260e486013567ffffffffffffffff811162000232576200323c90600436918901016201348f565b60e08501526200325d61012461010086019761010481013589520162013742565b61012085015260036040855101515110737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75762003b87575b50620032eb62013c3a565b620032f7855162014a38565b66ffffffffffffff6200333281620033128187511662014d0a565b16808652826200332a816101208b0151169262013bcd565b169062014d4e565b1661012086015273ffffffffffffffffffffffffffffffffffffffff6200335f8160208801511662014dd6565b16602086015262003371845162014d5c565b808552604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75773ffffffffffffffffffffffffffffffffffffffff916080519162003b63575b5016815260ff620033fd81885116828551169062014d8a565b16865273ffffffffffffffffffffffffffffffffffffffff60208601511660ff83511666ffffffffffffff85511673ffffffffffffffffffffffffffffffffffffffff84511691604051927f56ca623e000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc7576080519362003b41575b5060ff8a511693604051947f6900a3ae000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa93841562001dc757620035c6956080519562003b17575b506001620035c09160276040519788927f7369676e65723a00000000000000000000000000000000000000000000000000602085015262003553815180926020868801910162013910565b83017f3a00000000000000000000000000000000000000000000000000000000000000838201526200359082518093602060288501910162013910565b010103017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101865285620133b5565b62014eff565b620035d86020830191808352620155d8565b946040830195865251906200360b875173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b604051927fe341eaa400000000000000000000000000000000000000000000000000000000845260048401526024830152606082604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc75760805191608051916080519462003aee575b50519073ffffffffffffffffffffffffffffffffffffffff85511693604051947f56ca623e000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa94851562001dc7576080519562003acc575b50604051917fb11a19e8000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc7576080519262003aaa575b50604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519162003a8a575b5060ff604051947f6900a3ae00000000000000000000000000000000000000000000000000000000865216600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc75760809560016200383493819362003848988a519262003a6e575060069060206040519886620017868b9851809285808c01910162013910565b602089510151159060e08a01519262015900565b97606083019889525191019081515266ffffffffffffff6101208601511660208251015273ffffffffffffffffffffffffffffffffffffffff60208601511662001ba0620038ca604051937fccce3bc80000000000000000000000000000000000000000000000000000000060208601526004855262001b7f602486620133b5565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257620039249260405193849283927fb96213e4000000000000000000000000000000000000000000000000000000008452608051956004850162013d15565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562001dc75762003a51575b50620039ac9260a073ffffffffffffffffffffffffffffffffffffffff601f5460081c1697865190519060405196879283927f545bbe2a0000000000000000000000000000000000000000000000000000000084526004840162013f18565b03818a5afa95861562001dc757608051968795869485939284929062003a04575b5094620007ad9a979462001d5466ffffffffffffff9560ff62000dc59c9a9662001d5c62001d5c978362001d659d51169062016a69565b949a9750979598505092505060a03d60a01162003a49575b62003a288183620133b5565b810162003a359162013d5a565b969996989597909691949193908b620039cd565b503d62003a1c565b60805162003a5f91620133b5565b6080516200023257866200394d565b600691925062001e14903d808d51833e62000e5d8183620133b5565b62003aa391503d80608051833e62000e5d8183620133b5565b8c620037a5565b62003ac49192503d80608051833e62000e5d8183620133b5565b908c62003748565b62003ae69195503d80608051833e62000e5d8183620133b5565b938c620036eb565b9150925062003b0f915060603d60601162001ed35762001ebd8183620133b5565b928b62003673565b620035c091955062003b386001913d80608051833e62000e5d8183620133b5565b95915062003508565b62003b5b9193503d80608051833e62000e5d8183620133b5565b918b620034a0565b62003b80915060203d60201162001fe35762001fd38183620133b5565b89620033e4565b60805162003b9591620133b5565b608051620002325786620032e0565b3462000232576080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126200023257602062003be262014937565b6040519015158152f35b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325760043567ffffffffffffffff8111620002325762003c40903690600401620134dc565b62003c4b8162014a38565b60405190610340820182811067ffffffffffffffff82111762005344576040526080518252608051602083015260805160408301526080516060830152608051608083015260805160a0830152606060c0830152606060e0830152606061010083015260805161012083015260805161014083015260805161016083015262003cd3620142f7565b61018083015262003ce3620142f7565b6101a083015260606101c083015260606101e083015260606102008301526080516102208301526080516102408301526080516102608301526080516102808301526080516102a08301526080516102c08301526080516102e08301526080516103008301526080516103208301526001606083015260026080830152600360a08301526040517fffa1864900000000000000000000000000000000000000000000000000000000815260016004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75773ffffffffffffffffffffffffffffffffffffffff916080519162005320575b501682526080820151604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75773ffffffffffffffffffffffffffffffffffffffff9160805191620052fc575b5016602083015260a0820151604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75773ffffffffffffffffffffffffffffffffffffffff9160805191620052d8575b5016604083015273ffffffffffffffffffffffffffffffffffffffff825116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75762003ff19160805191620052b8575b5062003feb6002602760405180947f7369676e65723a00000000000000000000000000000000000000000000000000602083015262003f95815180926020868601910162013910565b81017f3a310000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2810184520182620133b5565b620163f1565b60c083015273ffffffffffffffffffffffffffffffffffffffff602083015116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519162005298575b5073ffffffffffffffffffffffffffffffffffffffff835116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576002600a602793620041eb936080519162005278575b5060405194859160208301977f7369676e65723a00000000000000000000000000000000000000000000000000895262004132815180926020868801910162013910565b83017f3a33200000000000000000000000000000000000000000000000000000000000838201527f7369676e65723a00000000000000000000000000000000000000000000000000602a8201526200419582518093602060318501910162013910565b01017f3a320000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2810184520182620133b5565b6040517f6900a3ae0000000000000000000000000000000000000000000000000000000081526001600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519162005258575b50604051927f6900a3ae0000000000000000000000000000000000000000000000000000000084526002600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc757620043cc946080519462005224575b5062004374926010600293601b9362000bd1602e604051998a967f7b227468726573686f6c64223a22000000000000000000000000000000000000602089015262004301815180926020868c01910162013910565b87017f222c22636865636b706f696e74223a2200000000000000000000000000000000838201526200433e825180936020603e8501910162013910565b0101917f222c2266726f6d223a22666c6174222c22636f6e74656e74223a22000000000085840152518093602b84019062013910565b62004393737109709ecfa91a80626ff3989d68f67f5b1dd12d62017484565b90604051809381927f0199a220000000000000000000000000000000000000000000000000000000008352608051946004840162014ea1565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811562001dc7576080519162005204575b5060e083015273ffffffffffffffffffffffffffffffffffffffff604083015116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc75760805191620051e4575b5073ffffffffffffffffffffffffffffffffffffffff60208401511690604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc757620045ab9260805192620051b7575b506002600a620045a59260276040519586927f7369676e65723a00000000000000000000000000000000000000000000000000602085015262004542815180926020868801910162013910565b83017f3a32200000000000000000000000000000000000000000000000000000000000838201527f7369676e65723a00000000000000000000000000000000000000000000000000602a8201526200419582518093602060318501910162013910565b6201651e565b610100830152620045c060c0830151620155d8565b610120830152620045d560e0830151620155d8565b610140830152620045eb610100830151620155d8565b61016083015260026101808301515260026101a08301515261014082015160c0610180840151015261016082015160c06101a084015101526060820151610180830151906200465773ffffffffffffffffffffffffffffffffffffffff601f5460081c16809362015714565b604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75760805160ff9290918291829162005190575b50610260870152610240860152166102208401526080830151620046e8826101a086015162015714565b604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75760805160ff9290918291829162005169575b506102c08701526102a0860152166102808401526200477460a0840151918362015714565b604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75760805160ff9290918291829162005142575b50610320860152610300850152166102e083015261010082015173ffffffffffffffffffffffffffffffffffffffff60408401511690604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc7576080519262005120575b50610300840151604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519162005100575b5061032085015192604051937fb11a19e8000000000000000000000000000000000000000000000000000000008552600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa93841562001dc75760805194620050de575b5060ff6102e08701511693604051947f6900a3ae000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc7576001620049c8938193620049d5986080519262001df7575060069060206040519886620017868b9851809285808c01910162013910565b6020840151159162016756565b6101c083015260c082015173ffffffffffffffffffffffffffffffffffffffff83511690604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc75760805192620050bc575b5061024084015190604051917fb11a19e8000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc757608051926200509a575b5061026085015192604051937fb11a19e8000000000000000000000000000000000000000000000000000000008552600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa93841562001dc7576080519462005078575b5060ff6102208701511693604051947f6900a3ae000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc757600162004c9893819362004c9e986080519262004fef575b506006906020604051998662004bb28c9851809285808c01910162013910565b87017f3a686173683a00000000000000000000000000000000000000000000000000008382015262004bee825180938560268501910162013910565b01017f3a000000000000000000000000000000000000000000000000000000000000008382015262004c2b82518093602060078501910162013910565b01017f3a000000000000000000000000000000000000000000000000000000000000008382015262004c6882518093602060028501910162013910565b010103017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101845283620133b5565b6201689f565b6101e083015260e08201519073ffffffffffffffffffffffffffffffffffffffff60208401511691604051927f56ca623e000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc7576080519362005056575b506102a0840151604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519162005036575b506102c085015191604051927fb11a19e8000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc7576080519362005014575b5060ff6102808701511692604051937f6900a3ae000000000000000000000000000000000000000000000000000000008552600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc75762004f4396600162004c9893819362004e82986080519262004fef57506006906020604051998662004bb28c9851809285808c01910162013910565b61020084015262004eef62004e966201439f565b6101c085015162004ea78262013f8a565b5262004eb38162013f8a565b5061020085015162004ec58262013fc7565b5262004ed18162013fc7565b506101e085015162004ee38262013fd8565b5262001c9c8162013fd8565b60a073ffffffffffffffffffffffffffffffffffffffff601f5460081c1691604051809581927f545bbe2a000000000000000000000000000000000000000000000000000000008352866004840162013f51565b0381845afa91821562001dc757608051620007ad959093849182918290819062004f9c575b62000dc597985062001d4e9262004f8d62004f9696959362001d4e6101209462016962565b01519062016ae3565b62015714565b5050905062000dc5945062004f96915062001d4e62001d4e61012062004fd762004f8d9960a03d60a011620007e357620007d08183620133b5565b939c50929a5091965090949350915088905062004f68565b60069192506200500c903d80608051833e62000e5d8183620133b5565b919062004b92565b6200502e9193503d80608051833e62000e5d8183620133b5565b918662004de9565b6200504f91503d80608051833e62000e5d8183620133b5565b8562004d85565b620050709193503d80608051833e62000e5d8183620133b5565b918462004d22565b620050929194503d80608051833e62000e5d8183620133b5565b928662004b1d565b620050b49192503d80608051833e62000e5d8183620133b5565b908562004ab9565b620050d69192503d80608051833e62000e5d8183620133b5565b908462004a55565b620050f89194503d80608051833e62000e5d8183620133b5565b928662004934565b6200511991503d80608051833e62000e5d8183620133b5565b85620048d0565b6200513a9192503d80608051833e62000e5d8183620133b5565b90846200486d565b91505062005162915060603d60601162001ed35762001ebd8183620133b5565b86620047db565b91505062005189915060603d60601162001ed35762001ebd8183620133b5565b876200474f565b915050620051b0915060603d60601162001ed35762001ebd8183620133b5565b87620046be565b620045a5919250600a620051da6002923d80608051833e62000e5d8183620133b5565b93925050620044f5565b620051fd91503d80608051833e62000e5d8183620133b5565b8362004477565b6200521d91503d80608051833e62000e5d8183620133b5565b83620043fa565b601b9194509260106002936200524b62004374963d80608051833e62000e5d8183620133b5565b96935093505092620042ac565b6200527191503d80608051833e62000e5d8183620133b5565b8562004248565b6200529191503d80608051833e62000e5d8183620133b5565b88620040ee565b620052b191503d80608051833e62000e5d8183620133b5565b836200406d565b620052d191503d80608051833e62000e5d8183620133b5565b8462003f4c565b620052f5915060203d60201162001fe35762001fd38183620133b5565b8462003ecd565b62005319915060203d60201162001fe35762001fd38183620133b5565b8462003e51565b6200533d915060203d60201162001fe35762001fd38183620133b5565b8462003dd8565b7f4e487b71000000000000000000000000000000000000000000000000000000006080515260416004526024608051fd5b3462000232576080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126200023257601954620053b58162013419565b90620053c56040519283620133b5565b80825260208201601960805152602060805120608051915b838310620053fd5760405160208082528190620020c1908201886201397a565b6001602081926200540e85620143fc565b815201920192019190620053dd565b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325762005458620142f7565b6001602082015260409062000d83620054ab8351620054788582620133b5565b600581527f7269676874000000000000000000000000000000000000000000000000000000602082015260043562016eb9565b9160a062000d3284620171c2565b3462000232576080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126200023257601c54620054f98162013419565b90620055096040519283620133b5565b80825260208201601c608051527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211608051915b838310620055545760405180620020c1878262013b24565b6002602060019260405162005569816201337b565b73ffffffffffffffffffffffffffffffffffffffff8654168152620055908587016201467c565b838201528152019201920191906200553c565b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325760043567ffffffffffffffff81116200023257620055f7903690600401620139f5565b60036040825101515110737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75762006530575b5062005681815162014a38565b602081019073ffffffffffffffffffffffffffffffffffffffff620056a98184511662014dd6565b1682526060810191620056bd835162014d5c565b83526080820191620056d0835162014d5c565b835260a0810191620056fa66fffffffffffffe600166ffffffffffffff8651166080515062017282565b9466ffffffffffffff6040968751620057148982620133b5565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152885162005782816200050d60208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528d6024840152606483019062013935565b608051916080519151906a636f6e736f6c652e6c6f675afa50169182855266ffffffffffffff620057c160c0860194826200113b8188511692620142d8565b16835260e0840166ffffffffffffff620057e781835116826200332a818b511662013bcd565b168152620057f46201450e565b9280518951907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620065245773ffffffffffffffffffffffffffffffffffffffff916080519162006500575b501684528888518151907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562000e935760805191620064dc575b5073ffffffffffffffffffffffffffffffffffffffff602087019116815273ffffffffffffffffffffffffffffffffffffffff85511666ffffffffffffff8a51169073ffffffffffffffffffffffffffffffffffffffff885116918451927f56ca623e000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562000eed57620059ca9360805193620064ba575b506200137f60026027885180967f7369676e65723a00000000000000000000000000000000000000000000000000602083015262001329815180926020868601910162013910565b92620059dc83880194808652620155d8565b976080880198895266ffffffffffffff73ffffffffffffffffffffffffffffffffffffffff8851169151169073ffffffffffffffffffffffffffffffffffffffff845116918551927f56ca623e000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562000ec15762005ac9936080519362006498575b50620014dc60026027895180967f7369676e65723a00000000000000000000000000000000000000000000000000602083015262001486815180926020868601910162013910565b9362005b2862005ae060608a0196808852620155d8565b9260a08a019384526101c08a019360028551525160c085510152600160208551015251925173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b8451927fe341eaa400000000000000000000000000000000000000000000000000000000845260048401526024830152606082604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562000e32576080519160805191608051946200646f575b5060ff6101808b01936101008c01936101408d019687528452168352519073ffffffffffffffffffffffffffffffffffffffff8a5116908651917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620063fa57608051926200644d575b5051938651947fb11a19e8000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa948515620063fa57608051956200642b575b5051928651937fb11a19e8000000000000000000000000000000000000000000000000000000008552600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa938415620063fa576080519462006406575b5060ff905116928651937f6900a3ae000000000000000000000000000000000000000000000000000000008552600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620063fa57600162005e5293819362005e5f9760805192620063d5575b5060069060208c519a8662005d6c8d9851809285808c01910162013910565b87017f3a686173683a00000000000000000000000000000000000000000000000000008382015262005da8825180938560268501910162013910565b01017f3a000000000000000000000000000000000000000000000000000000000000008382015262005de582518093602060078501910162013910565b01017f3a000000000000000000000000000000000000000000000000000000000000008382015262005e2282518093602060028501910162013910565b010103017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101855284620133b5565b848b019283519162015b1d565b9a60c088019b8c52519362005e928a5173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b8451957fe341eaa400000000000000000000000000000000000000000000000000000000875260048701526024860152606085604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562000e3257889060805160805197608051946200638f575b509060ff73ffffffffffffffffffffffffffffffffffffffff926101a085019961016061012087019601968752855216885251945116908551917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562000ec157608051926200636d575b5051918551927fb11a19e8000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562000ec157608051936200634b575b5051958551967fb11a19e8000000000000000000000000000000000000000000000000000000008852600488015260805187602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa96871562000ec1576080519762006326575b5060ff905116958551967f6900a3ae000000000000000000000000000000000000000000000000000000008852600488015260805187602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562000ec1576001620060fd97620060ed94829473ffffffffffffffffffffffffffffffffffffffff9b6080519262006300575b50602060069293519886620017868b9851809285808c01910162013910565b60208a5101511591519262015900565b9260e0850193845266ffffffffffffff610100880151936102008701948551525116602084510152511662001ba0620061898a51937fccce3bc80000000000000000000000000000000000000000000000000000000060208601526004855262006169602486620133b5565b518b51928391602083019190916020806040830194805184520151910152565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257620061e2928a5193849283927fb96213e4000000000000000000000000000000000000000000000000000000008452608051956004850162013d15565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015620062f457620062cf575b5090620062266101e0949392620062809762001c6a62014342565b938491015260a073ffffffffffffffffffffffffffffffffffffffff601f5460081c16938351885197889283927f545bbe2a0000000000000000000000000000000000000000000000000000000084526004840162013f18565b0381865afa93841562000ec157608051620007ad975094859283918290819062001d6c5762000dc59899509262001d6595949262001d5462001d5c9362001d4e66ffffffffffffff9762016962565b6080519194939291620062e291620133b5565b6080516200023257909192876200620b565b88513d608051823e3d90fd5b600692506200631e6020913d80608051833e62000e5d8183620133b5565b9250620060ce565b60ff91975062006343903d80608051833e62000e5d8183620133b5565b969062006048565b620063659193503d80608051833e62000e5d8183620133b5565b918f62005fea565b620063879192503d80608051833e62000e5d8183620133b5565b908f62005f8c565b73ffffffffffffffffffffffffffffffffffffffff92985060ff9450620063c8915060603d60601162001ed35762001ebd8183620133b5565b9098909490925062005efa565b6006919250620063f2903d80608051833e62000e5d8183620133b5565b919062005d4d565b87513d608051823e3d90fd5b60ff91945062006423903d80608051833e62000e5d8183620133b5565b939062005cdd565b620064459195503d80608051833e62000e5d8183620133b5565b933862005c7f565b620064679192503d80608051833e62000e5d8183620133b5565b903862005c21565b9150925062006490915060603d60601162001ed35762001ebd8183620133b5565b928f62005b8f565b620064b29193503d80608051833e62000e5d8183620133b5565b913862005a81565b620064d49193503d80608051833e62000e5d8183620133b5565b918f62005982565b620064f9915060203d60201162001fe35762001fd38183620133b5565b8b620058c7565b6200651d915060203d60201162001fe35762001fd38183620133b5565b8b62005866565b8a513d608051823e3d90fd5b6080516200653e91620133b5565b60805162000232578162005674565b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325760043567ffffffffffffffff811162000232576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8236030112620002325760405190620065ce82620132b7565b806004013567ffffffffffffffff81116200023257620065f59060043691840101620134dc565b8252620066056024820162013432565b6020830152620066186044820162013742565b91604081019283526200662e6064830162013742565b606082015260808101608483013581526200664c60a48401620133f7565b9360a083019485526200666260c48501620133f7565b9360c0840194855260e48101359067ffffffffffffffff8211620002325760046200669192369201016201348f565b60e084015260036040845101515110737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75762006d1a575b506200671e62013c3a565b946200672b845162014a38565b73ffffffffffffffffffffffffffffffffffffffff620067518160208701511662014dd6565b16602085015262006763835162014d5c565b808452604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75773ffffffffffffffffffffffffffffffffffffffff916080519162006cf6575b5016865260ff620067ef81875116828451169062014d8a565b16855273ffffffffffffffffffffffffffffffffffffffff60208501511660ff82511666ffffffffffffff84511673ffffffffffffffffffffffffffffffffffffffff89511691604051927f56ca623e000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc7576080519362006cd4575b5060ff89511693604051947f6900a3ae000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa93841562001dc75762006944956080519562003b1757506001620035c09160276040519788927f7369676e65723a00000000000000000000000000000000000000000000000000602085015262003553815180926020868801910162013910565b620069566020880191808352620155d8565b9360408801948552519062006989865173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b604051927fe341eaa400000000000000000000000000000000000000000000000000000000845260048401526024830152606082604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc75760805191608051916080519462006cab575b50519073ffffffffffffffffffffffffffffffffffffffff8a511693604051947f56ca623e000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa94851562001dc7576080519562006c89575b50604051917fb11a19e8000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc7576080519262006c67575b50604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519162006c47575b5060ff604051947f6900a3ae00000000000000000000000000000000000000000000000000000000865216600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc757608095600162006bb293819362006bc6988a519262003a6e575060069060206040519886620017868b9851809285808c01910162013910565b602088510151159060e08901519262015900565b96606081019788520160805181515266ffffffffffffff60608601511660208251015273ffffffffffffffffffffffffffffffffffffffff60208601511662001ba0620038ca604051937fccce3bc80000000000000000000000000000000000000000000000000000000060208601526004855262001b7f602486620133b5565b62006c6091503d80608051833e62000e5d8183620133b5565b8b62006b23565b62006c819192503d80608051833e62000e5d8183620133b5565b908b62006ac6565b62006ca39195503d80608051833e62000e5d8183620133b5565b938b62006a69565b9150925062006ccc915060603d60601162001ed35762001ebd8183620133b5565b928a620069f1565b62006cee9193503d80608051833e62000e5d8183620133b5565b918a62006892565b62006d13915060203d60201162001fe35762001fd38183620133b5565b88620067d6565b60805162006d2891620133b5565b60805162000232578562006713565b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325762006d72620142f7565b6001602082015260409062000d83620054ab835162006d928582620133b5565b600481527f6c65667400000000000000000000000000000000000000000000000000000000602082015260043562016eb9565b3462000232576080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126200023257601d5462006e058162013419565b9062006e156040519283620133b5565b80825260208201601d608051527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f608051915b83831062006e605760405180620020c1878262013b24565b6002602060019260405162006e75816201337b565b73ffffffffffffffffffffffffffffffffffffffff865416815262006e9c8587016201467c565b8382015281520192019201919062006e48565b3462000232576080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126200023257601a5462006eef8162013419565b9062006eff6040519283620133b5565b80825260208201601a60805152602060805120608051915b83831062006f375760405160208082528190620020c1908201886201397a565b60016020819262006f4885620143fc565b81520192019201919062006f17565b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325760043567ffffffffffffffff8111620002325760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8236030112620002325760405162006fd68162013322565b816004013567ffffffffffffffff8111620002325762006ffd9060043691850101620134dc565b80825260208201602484013581526200704a604084019260448601358452606486013560608601526084860135608086015260a486013560a086015260c460c08601960135865262014a38565b62007059608084015162014dc1565b60808401526200706d60a084015162014dc1565b60a08401526200707e845162014dc1565b80855260a08401516080850151811162008416575b81116200840a575b50620070a6620145ac565b90620070b3815162014d5c565b8152620070c1835162014d5c565b8352620070d2606085015162014d5c565b60608501528051604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75773ffffffffffffffffffffffffffffffffffffffff9160805191620083e6575b501682528251604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75773ffffffffffffffffffffffffffffffffffffffff9160805191620083c2575b501660208301526060840151604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75773ffffffffffffffffffffffffffffffffffffffff91608051916200839e575b50166040830152608084015173ffffffffffffffffffffffffffffffffffffffff83511690604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576200736692608051926200837c575b50620073606002602760405180957f7369676e65723a0000000000000000000000000000000000000000000000000060208301526200730a815180926020868601910162013910565b81017f3a310000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2810185520183620133b5565b6201664b565b606083015260a084015173ffffffffffffffffffffffffffffffffffffffff602084015116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc757608051916200835c575b506040519062007488600260278460208101947f7369676e65723a00000000000000000000000000000000000000000000000000865262007432815180926020868601910162013910565b81017f3a320000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2810185520183620133b5565b6040517f6900a3ae0000000000000000000000000000000000000000000000000000000081526002600482015260805190919082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc757608051926200833a575b50604051937f6900a3ae000000000000000000000000000000000000000000000000000000008552600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc7576200759e946080519462005224575062004374926010600293601b9362000bd1602e604051998a967f7b227468726573686f6c64223a22000000000000000000000000000000000000602089015262004301815180926020868c01910162013910565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811562001dc757608051916200831a575b506080830152845173ffffffffffffffffffffffffffffffffffffffff60408401511690604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc757620076f09260805192620082f8575b50620073606002602760405180957f7369676e65723a0000000000000000000000000000000000000000000000000060208301526200769a815180926020868601910162013910565b81017f3a330000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2810185520183620133b5565b60a083015261012082016002815152610140830191600283515260e084015160c08351015261010084015160c084510152519051936200774d73ffffffffffffffffffffffffffffffffffffffff601f5460081c16809662015714565b604051927fe341eaa400000000000000000000000000000000000000000000000000000000845260048401526024830152606082604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc75760ff8692620077db94608051916080519160805191620082d1575b506102008901526101e0880152166101c086015251925162015714565b604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc7576080519384928391620082a2575b5060ff9061024085019361026086019687528452166102208401526200786c606086015191865162015714565b604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc75760805191829182916200827b575b5060ff6102808601936102a08701936102c08801938452845216835260a08501519173ffffffffffffffffffffffffffffffffffffffff60408701511690604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc7576080519262008259575b505191604051927fb11a19e8000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc7576080519362008237575b505193604051947fb11a19e8000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa94851562001dc7576080519562008212575b5060ff90511693604051947f6900a3ae000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc757600162007ab893819362007ac6986080519262001df7575060069060206040519886620017868b9851809285808c01910162013910565b602087510151159162016756565b916101608101928352606081015173ffffffffffffffffffffffffffffffffffffffff82511690604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc75760805192620081f0575b506101e083015190604051917fb11a19e8000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc75760805192620081ce575b5061020084015192604051937fb11a19e8000000000000000000000000000000000000000000000000000000008552600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa93841562001dc75760805194620081ac575b5060ff6101c08601511693604051947f6900a3ae000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc757600162004c9893819362007ca5986080519262004fef57506006906020604051998662004bb28c9851809285808c01910162013910565b916101808201928352608082015173ffffffffffffffffffffffffffffffffffffffff60208401511691604051927f56ca623e000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc757608051936200818a575b505195604051967fb11a19e8000000000000000000000000000000000000000000000000000000008852600488015260805187602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa96871562001dc7576080519762008168575b505195604051967fb11a19e8000000000000000000000000000000000000000000000000000000008852600488015260805187602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa96871562001dc7576080519762008146575b5060ff6102208501511691604051927f6900a3ae000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75760016101a0958162004c989362007ed29c62007e84986080519262004fef57506006906020604051998662004bb28c9851809285808c01910162013910565b910190815262007e936201439f565b925162007ea08462013f8a565b5262007eac8362013f8a565b505162007eb98362013fc7565b5262007ec58262013fc7565b505162004ee38262013fd8565b915160a082015190818111156200804d575050608081015160a0820151604051917f37daf62b000000000000000000000000000000000000000000000000000000006020840152602483015260448201526044815262007f34606482620133b5565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907ff28dceb300000000000000000000000000000000000000000000000000000000825260206004830152818062007f9360805193602483019062013935565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562001dc75762008030575b506200801a9160a0915b73ffffffffffffffffffffffffffffffffffffffff601f5460081c1690516040518095819482937f545bbe2a0000000000000000000000000000000000000000000000000000000084526004840162013f51565b03915afa801562001dc757620007b35760805180f35b6080516200803e91620133b5565b60805162000232578262007fbc565b604051917f37daf62b000000000000000000000000000000000000000000000000000000006020840152602483015260448201526044815262008092606482620133b5565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907ff28dceb3000000000000000000000000000000000000000000000000000000008252602060048301528180620080f160805193602483019062013935565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562001dc75762008129575b506200801a9160a09162007fc6565b6080516200813791620133b5565b6080516200023257826200811a565b620081609197503d80608051833e62000e5d8183620133b5565b958962007de9565b620081829197503d80608051833e62000e5d8183620133b5565b958962007d8a565b620081a49193503d80608051833e62000e5d8183620133b5565b918962007d2b565b620081c69194503d80608051833e62000e5d8183620133b5565b928a62007c11565b620081e89192503d80608051833e62000e5d8183620133b5565b908962007bad565b6200820a9192503d80608051833e62000e5d8183620133b5565b908862007b49565b60ff9195506200822f903d80608051833e62000e5d8183620133b5565b949062007a28565b620082519193503d80608051833e62000e5d8183620133b5565b918a620079c9565b620082739192503d80608051833e62000e5d8183620133b5565b908a6200796a565b9150506200829b915060603d60601162001ed35762001ebd8183620133b5565b88620078d0565b905060ff9450620082c691925060603d60601162001ed35762001ebd8183620133b5565b94909291906200783f565b915050620082f1915060603d60601162001ed35762001ebd8183620133b5565b8c620077be565b620083129192503d80608051833e62000e5d8183620133b5565b908862007651565b6200833391503d80608051833e62000e5d8183620133b5565b86620075cc565b620083549192503d80608051833e62000e5d8183620133b5565b9089620074e8565b6200837591503d80608051833e62000e5d8183620133b5565b87620073e7565b620083969192503d80608051833e62000e5d8183620133b5565b9088620072c1565b620083bb915060203d60201162001fe35762001fd38183620133b5565b876200723b565b620083df915060203d60201162001fe35762001fd38183620133b5565b87620071bf565b62008403915060203d60201162001fe35762001fd38183620133b5565b8762007149565b60a0840152846200709b565b80608086015262007093565b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325760043567ffffffffffffffff811162000232576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126200023257604051620084a281620132b7565b816004013567ffffffffffffffff81116200023257620084c99060043691850101620134dc565b8152620084d96024830162013432565b6020820152604482013567ffffffffffffffff811162000232576200850590600436918501016201348f565b6040820152620085186064830162013742565b60608201526080810191608481013583526200853760a48201620133f7565b9260a0830193845260e46200854f60c48401620133f7565b9260c0850193845201359360e0840194808652737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e5620000000000000000000000000000000000000000000000000000000082521515600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75762008e95575b50620085e4845162014a38565b66ffffffffffffff620085fd8160608701511662014dc1565b16606085015273ffffffffffffffffffffffffffffffffffffffff620086298160208701511662014dd6565b1660208501526200863b825162014d5c565b825260ff6200865281855116828451169062014d8a565b1683526200865f62013c3a565b928251604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75773ffffffffffffffffffffffffffffffffffffffff916080519162008e71575b50169081855260ff73ffffffffffffffffffffffffffffffffffffffff60208801511693511666ffffffffffffff60608801511691604051937f56ca623e000000000000000000000000000000000000000000000000000000008552600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa93841562001dc7576080519462008e4c575b5060ff90511693604051947f6900a3ae000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa93841562001dc75762008815956080519562003b1757506001620035c09160276040519788927f7369676e65723a00000000000000000000000000000000000000000000000000602085015262003553815180926020868801910162013910565b90620088286020840192808452620155d8565b80604085015285511415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75762008e2f575b505190620088d1845173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b604051927fe341eaa400000000000000000000000000000000000000000000000000000000845260048401526024830152606082604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc75760805191608051916080519462008e06575b50519073ffffffffffffffffffffffffffffffffffffffff85511693604051947f56ca623e000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa94851562001dc7576080519562008de4575b50604051917fb11a19e8000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc7576080519262008dc2575b50604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519162008da2575b5060ff604051947f6900a3ae00000000000000000000000000000000000000000000000000000000865216600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc757608095600162008afa93819362008b0e988a519262003a6e575060069060206040519886620017868b9851809285808c01910162013910565b602086510151159060408701519262015900565b93606083019485525191019081515266ffffffffffffff60608301511660208251015273ffffffffffffffffffffffffffffffffffffffff602083015116604051907fccce3bc80000000000000000000000000000000000000000000000000000000060208301526004825262008b87602483620133b5565b8251604080518251602080830191909152909201519082015262008baf816060810162001ba0565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620002325762008c099260405193849283927fb96213e4000000000000000000000000000000000000000000000000000000008452608051956004850162013d15565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562001dc75762008d85575b50516040517fccbb534f000000000000000000000000000000000000000000000000000000006020808301919091528251602483015290910151604482015262008c80816064810162001ba0565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907ff28dceb300000000000000000000000000000000000000000000000000000000825260206004830152818062008cdf60805193602483019062013935565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562001dc75762008d68575b506200801a9160a09173ffffffffffffffffffffffffffffffffffffffff601f5460081c1690519151916040518095819482937f545bbe2a0000000000000000000000000000000000000000000000000000000084526004840162013f18565b60805162008d7691620133b5565b60805162000232578262008d08565b60805162008d9391620133b5565b60805162000232578362008c32565b62008dbb91503d80608051833e62000e5d8183620133b5565b8862008a6b565b62008ddc9192503d80608051833e62000e5d8183620133b5565b908862008a0e565b62008dfe9195503d80608051833e62000e5d8183620133b5565b9388620089b1565b9150925062008e27915060603d60601162001ed35762001ebd8183620133b5565b928762008939565b60805162008e3d91620133b5565b608051620002325785620088a5565b60ff91945062008e69903d80608051833e62000e5d8183620133b5565b939062008763565b62008e8e915060203d60201162001fe35762001fd38183620133b5565b88620086d2565b60805162008ea391620133b5565b608051620002325785620085d7565b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325760043567ffffffffffffffff8111620002325762008f0690369060040162013804565b62008f12815162014a38565b62008f3b815173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b6080519190602082019060605b82518051861015620090a15762008f758673ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519162009081575b5060ff602062008fe688875162013fe9565b5101511690604051917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576001936200905693608051936200905f575b5062014017565b94019362008f48565b620090799193503d80608051833e62000e5d8183620133b5565b91896200904f565b6200909a91503d80608051833e62000e5d8183620133b5565b8662008fd4565b848383604051907fb11a19e800000000000000000000000000000000000000000000000000000000825282600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc757608051926200943a575b50600a62009164916020604096959651948262009128879451809285808801910162013910565b83017f7375626469676573743a00000000000000000000000000000000000000000000838201526200183c8251809385602a8501910162013910565b6080519260408301915b82518051861015620092c7576200919b8673ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc75760805191620092a7575b5060ff60206200920c88875162013fe9565b5101511690604051917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576001936200927c936080519362009285575b5062014111565b9401936200916e565b6200929f9193503d80608051833e62000e5d8183620133b5565b918962009275565b620092c091503d80608051833e62000e5d8183620133b5565b86620091fa565b50836200937e83606083019060a0620092f761ffff84511696608087019766ffffffffffffff8951169062016218565b62009329620093226020885101511560405162009316602082620133b5565b60805181528462016756565b91620155d8565b9573ffffffffffffffffffffffffffffffffffffffff601f5460081c1690516040518097819482937f545bbe2a0000000000000000000000000000000000000000000000000000000084526004840162013f51565b03915afa801562001dc757620007ad956080519360805191608051956080519260805195620093e0575b620093da979850620093d49262001d5c620093da96959361ffff66ffffffffffffff9451169062016a69565b620168bb565b62016ae3565b945050620093da9550620093da925061ffff9150620093d49066ffffffffffffff6200942162001d5c9960a03d60a011620007e357620007d08183620133b5565b919c508c9b5090989197509550929350919050620093a8565b620091649192506200945b600a913d80608051833e62000e5d8183620133b5565b92915062009101565b3462000232576080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126200023257601b54620094a48162013419565b90620094b46040519283620133b5565b808252602082019081601b608051527f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1608051915b8383106200959b57848660405191829160208301906020845251809152604083019060408160051b8501019291608051905b8282106200952b57505050500390f35b919360206200958a827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc060019597998495030186528851908362009579835160408452604084019062013935565b920151908481840391015262013acc565b96019201920185949391926200951b565b60026020600192604051620095b0816201337b565b620095bb86620143fc565b8152620095ca8587016201467c565b83820152815201920192019190620094e9565b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325760043567ffffffffffffffff811162000232576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011262000232576040516200965d8162013304565b816004013567ffffffffffffffff8111620002325762009684906004369185010162013757565b8152602482013567ffffffffffffffff81116200023257620096ad906004369185010162013757565b60208201908152604483013567ffffffffffffffff81116200023257620096db9060043691860101620134dc565b9060408301918252620096f160648501620137f4565b60608401908152620097066084860162013742565b92608085019384526200971c60a48701620133f7565b9560a086019687526200973260c4820162013432565b9560c0810196875260e482013567ffffffffffffffff811162000232576200976461010491600436918601016201348f565b9260e083019384520135977fffffffff000000000000000000000000000000000000000000000000000000008916890362000232576101008201988952620097c373ffffffffffffffffffffffffffffffffffffffff89511662015b2e565b610258620097d78351518851519062013f7c565b10737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc7576200a28b575b507f1626ba7e000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008a5116146200a280575b6080515b825180518210156200998057620098c98273ffffffffffffffffffffffffffffffffffffffff9262013fe9565b51511673ffffffffffffffffffffffffffffffffffffffff8a51161415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75762009963575b506001016200989c565b6080516200997191620133b5565b60805162000232578a62009959565b5050888896976080515b8951805182101562009a6e57620099b78273ffffffffffffffffffffffffffffffffffffffff9262013fe9565b51511673ffffffffffffffffffffffffffffffffffffffff8a51161415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75762009a51575b506001016200998a565b60805162009a5f91620133b5565b60805162000232578a62009a47565b505088878962009a7f895162014a38565b6080519860605b885180518c101562009c065762009ab38c73ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7578c906080519262009bd9575b50602062009b2660ff928d5162013fe9565b5101511691604051927f6900a3ae000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc757600162009bb0926007829683946080519162009bb95750602060405197846200265f8a9651809285808a01910162013910565b9a019962009a86565b62009bd291503d80608051833e62000e5d8183620133b5565b3862002642565b60ff91925062009b2662009bfc6020923d80608051833e62000e5d8183620133b5565b9392505062009b14565b50878a9173ffffffffffffffffffffffffffffffffffffffff85511691604051927f56ca623e000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc757608051936200a25b575b5060ff90511690604051917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc757600760019262009d0894608051916200a23b5750602060405196846200287d899651809285808a01910162013910565b96608051975b865180518a101562009e7c5762009d3b8a73ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519162009e5c575b5060ff602062009dac8c8b5162013fe9565b51015116604051907f6900a3ae000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc7576001936008859262009e33946080519162009e3c57506020604051968462002a22899651809285808a01910162013910565b98019762009d0e565b62009e5591503d80608051833e62000e5d8183620133b5565b8f62002a05565b62009e7591503d80608051833e62000e5d8183620133b5565b8a62009d9a565b5062009e9b908866ffffffffffffff61ffff8951169151169062016218565b9062009f4162009ec9855173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b917fffffffff0000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8851169162009f6e87516040519586917f1626ba7e000000000000000000000000000000000000000000000000000000006020840152886024840162013ffe565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101865285620133b5565b51166040519060208201526020815262009f8a604082620133b5565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620002325762009fe49260405193849283927fb96213e4000000000000000000000000000000000000000000000000000000008452608051956004850162013d15565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562001dc7576200a21e575b5073ffffffffffffffffffffffffffffffffffffffff855116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc757608051916200a1fe575b50835190604051917f71aad10d0000000000000000000000000000000000000000000000000000000083526020600484015282806200a0c960805193602483019062013935565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc75762007f349462001ba09373ffffffffffffffffffffffffffffffffffffffff936200a18793608051926200a1d4575b5060096200a17991602060405194826200a13d879451809285808801910162013910565b83017f3a657263313237313a0000000000000000000000000000000000000000000000838201526200183c825180938560298501910162013910565b602089510151159162016756565b96511693516040519485937fb2fed7ae0000000000000000000000000000000000000000000000000000000060208601526024850152604484015260606064840152608483019062013935565b6200a1799192506200a1f56009913d80608051833e62000e5d8183620133b5565b9291506200a119565b6200a21791503d80608051833e62000e5d8183620133b5565b866200a082565b6080516200a22c91620133b5565b6080516200023257856200a00d565b6200a25491503d80608051833e62000e5d8183620133b5565b8d62002860565b60ff9193506200a278903d80608051833e62000e5d8183620133b5565b929062009c7f565b608051895262009898565b6080516200a29991620133b5565b6080516200023257896200984b565b3462000232576080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126200023257602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051908152f35b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325760043567ffffffffffffffff8111620002325760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011262000232576040519060c0820182811067ffffffffffffffff8211176200534457604052806004013567ffffffffffffffff811162000232576200a3b79060043691840101620134dc565b9182815260248201356020820152604482013560408201526200a3fa60608201936064840135855260a4608084019460848101358652013560a084015262014a38565b60408101516080516200a4119160ff919062017282565b9160409283516200a4238582620133b5565b600c81527f426f756e6420726573756c740000000000000000000000000000000000000000602082015284516200a491816200050d60208201947fb60e72cc000000000000000000000000000000000000000000000000000000008652896024840152606483019062013935565b608051916080519151906a636f6e736f6c652e6c6f675afa5080604084015260208301516001820180921162000850576200a4d09161ffff9162017282565b83516200a4de8582620133b5565b600c81527f426f756e6420726573756c740000000000000000000000000000000000000000602082015284516200a54c816200050d60208201947fb60e72cc000000000000000000000000000000000000000000000000000000008652896024840152606483019062013935565b608051916080519151906a636f6e736f6c652e6c6f675afa5060208301526200a574620145ac565b936200a581815162014d5c565b81526200a58f825162014d5c565b82526200a5a060a084015162014d5c565b60a084015280518451907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562000eed579073ffffffffffffffffffffffffffffffffffffffff91608051916200b8ed575b5016855281518451907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562000eed579073ffffffffffffffffffffffffffffffffffffffff91608051916200b8c9575b5016602086015260a08301518451907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562000eed579073ffffffffffffffffffffffffffffffffffffffff91608051916200b8a5575b50168486015273ffffffffffffffffffffffffffffffffffffffff8551168451907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562000eed57906200a7d391608051916200b885575b5062003feb60026027885180947f7369676e65723a00000000000000000000000000000000000000000000000000602083015262003f95815180926020868601910162013910565b606086015261ffff60208401511673ffffffffffffffffffffffffffffffffffffffff6020870151168551907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562000ec157608051916200b865575b5060408501518651907f6900a3ae000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620063fa57600160279493926200a94492608051916200b845575b50895195869160208301957f7369676e65723a0000000000000000000000000000000000000000000000000087526200a907815180926020868801910162013910565b83017f3a000000000000000000000000000000000000000000000000000000000000008382015262005e2282518093602060288501910162013910565b86517f6900a3ae000000000000000000000000000000000000000000000000000000008152600481019290925260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620063fa57608051926200b823575b508651927f6900a3ae0000000000000000000000000000000000000000000000000000000084526002600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa938415620062f45790886200aab495949392608051956200b7e5575b50926010600293601b9362000bd1602e6200aa5d9851998a967f7b227468726573686f6c64223a22000000000000000000000000000000000000602089015262004301815180926020868c01910162013910565b6200aa7c737109709ecfa91a80626ff3989d68f67f5b1dd12d62017484565b908651809381927f0199a220000000000000000000000000000000000000000000000000000000008352608051946004840162014ea1565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811562000eed57608051916200b7c5575b50608086015273ffffffffffffffffffffffffffffffffffffffff84860151168451907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562000eed57906200ac0191608051916200b7a5575b50620045a560026027885180947f7369676e65723a0000000000000000000000000000000000000000000000000060208301526200abab815180926020868601910162013910565b81017f3a330000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2810184520182620133b5565b60a08601526101208501916002835152610140860191600283515260e087015160c08551015261010087015160c084510152519251926200ac5f73ffffffffffffffffffffffffffffffffffffffff601f5460081c16809562015714565b8651917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562000ec1579160ff85926200aced946080519160805191608051916200b77e575b506102008c01526101e08b0152166101c089015251925162015714565b8451917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562000e325760805160ff92909182918291906200b757575b50610260880152610240870152166102208501526200ad7b60a083015191835162015714565b8351917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620008135760805160ff92909182918291906200b730575b506102c08701526102a08601521661028084015260a083015173ffffffffffffffffffffffffffffffffffffffff83850151168351907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562000e3257608051916200b710575b506102a0850151908451917fb11a19e8000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562000eed57608051926200b6ee575b506102c08601518551907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562000ec157608051916200b6ce575b5060ff61028088015116908651917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620063fa579260016200afcc9381936200afda989796608051926200b6a9575b5060069060208c519886620017868b9851809285808c01910162013910565b602084510151159162016756565b610160840152606083015173ffffffffffffffffffffffffffffffffffffffff845116908351917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562000e3257608051926200b687575b506101e0850151918451927fb11a19e8000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562000eed57608051936200b665575b506102008601518551907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562000ec157608051916200b645575b5060ff6101c088015116908651917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620063fa5792600162004c989381936200b1b4989796608051926200b620575b5060069060208c51998662004bb28c9851809285808c01910162013910565b610180840152608083015173ffffffffffffffffffffffffffffffffffffffff602085015116908351917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562000e3257608051926200b5fe575b50610240850151918451927fb11a19e8000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562000eed57608051936200b5dc575b506102608601518551907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562000ec157608051916200b5bc575b5060ff61022088015116908651917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620063fa57610180959360016200b394969462004c98948294608051926200b597575b5060069060208d51998662004bb28c9851809285808c01910162013910565b936101a081019485526200b3a76201439f565b946101608201516200b3b98762013f8a565b526200b3c58662013f8a565b50516200b3d28662013fc7565b526200b3de8562013fc7565b5001516200b3ec8462013fd8565b526200b3f88362013fd8565b506200b45f6200b4976200b4176200b4108662016bb3565b9562013fc7565b516020840151604085015186519485937fb006aba000000000000000000000000000000000000000000000000000000000602086015260606024860152608485019062013935565b9160448401526064830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282620133b5565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562000232578251907ff28dceb30000000000000000000000000000000000000000000000000000000082526020600483015281806200b4f560805193602483019062013935565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562000813576200b57a575b506200079a9260a09173ffffffffffffffffffffffffffffffffffffffff601f5460081c16905184518096819482937f545bbe2a0000000000000000000000000000000000000000000000000000000084526004840162013f51565b6080516200b58891620133b5565b6080516200023257836200b51e565b60069192506200b5b4903d80608051833e62000e5d8183620133b5565b91906200b375565b6200b5d591503d80608051833e62000e5d8183620133b5565b876200b2fb565b6200b5f69193503d80608051833e62000e5d8183620133b5565b91866200b299565b6200b6189192503d80608051833e62000e5d8183620133b5565b90856200b236565b60069192506200b63d903d80608051833e62000e5d8183620133b5565b91906200b195565b6200b65e91503d80608051833e62000e5d8183620133b5565b876200b11e565b6200b67f9193503d80608051833e62000e5d8183620133b5565b91866200b0bc565b6200b6a19192503d80608051833e62000e5d8183620133b5565b90856200b059565b60069192506200b6c6903d80608051833e62000e5d8183620133b5565b91906200afad565b6200b6e791503d80608051833e62000e5d8183620133b5565b876200af36565b6200b7089192503d80608051833e62000e5d8183620133b5565b90866200aed4565b6200b72991503d80608051833e62000e5d8183620133b5565b856200ae71565b9150506200b750915060603d60601162001ed35762001ebd8183620133b5565b876200ade3565b9150506200b777915060603d60601162001ed35762001ebd8183620133b5565b886200ad55565b9150506200b79e915060603d60601162001ed35762001ebd8183620133b5565b8c6200acd0565b6200b7be91503d80608051833e62000e5d8183620133b5565b876200ab63565b6200b7de91503d80608051833e62000e5d8183620133b5565b866200aae2565b6200aa5d94919550600293601b9362000bd1602e6200b8136010953d80608051833e62000e5d8183620133b5565b999598505050935093506200aa09565b6200b83d9192503d80608051833e62000e5d8183620133b5565b90886200a9a1565b6200b85e91503d80608051833e62000e5d8183620133b5565b8b6200a8c4565b6200b87e91503d80608051833e62000e5d8183620133b5565b876200a857565b6200b89e91503d80608051833e62000e5d8183620133b5565b876200a78b565b6200b8c2915060203d60201162001fe35762001fd38183620133b5565b876200a70c565b6200b8e6915060203d60201162001fe35762001fd38183620133b5565b876200a68f565b6200b90a915060203d60201162001fe35762001fd38183620133b5565b876200a618565b3462000232576080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011262000232576040518060206017549182815201906017608051527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15906080515b8181106200b99957620020c185620020b481870382620133b5565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016200b97e565b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325760043567ffffffffffffffff811162000232576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126200023257604051906200ba4782620132b7565b806004013567ffffffffffffffff811162000232576200ba6e906004369184010162013757565b8252602481013567ffffffffffffffff811162000232576200ba97906004369184010162013757565b9160208101928352604482013567ffffffffffffffff811162000232576200bac69060043691850101620134dc565b92604082019384526200badc60648401620137f4565b93606083019485526200baf26084850162013742565b90608084019182526200bb0860a48601620133f7565b9560a085019687526200bb1e60c4870162013432565b9560c0860196875260e48101359067ffffffffffffffff8211620002325760046200bb4d92369201016201348f565b9460e081019586526200bb7773ffffffffffffffffffffffffffffffffffffffff88511662015b2e565b6102586200bb8b8251518751519062013f7c565b10737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc7576200c6d5575b506080515b815180518210156200bce8576200bc318273ffffffffffffffffffffffffffffffffffffffff9262013fe9565b51511673ffffffffffffffffffffffffffffffffffffffff8951161415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc7576200bccb575b506001016200bc04565b6080516200bcd991620133b5565b6080516200023257896200bcc1565b5050878795966080515b885180518210156200bdd6576200bd1f8273ffffffffffffffffffffffffffffffffffffffff9262013fe9565b51511673ffffffffffffffffffffffffffffffffffffffff8951161415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc7576200bdb9575b506001016200bcf2565b6080516200bdc791620133b5565b6080516200023257896200bdaf565b505090869188876200bde9885162014a38565b6080519760605b875180518b10156200bf41576200be1d8b73ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc757608051916200bf21575b5060ff60206200be8e8d8c5162013fe9565b5101511691604051927f6900a3ae000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc75760016200bf18926007829683946080519162009bb95750602060405197846200265f8a9651809285808a01910162013910565b9901986200bdf0565b6200bf3a91503d80608051833e62000e5d8183620133b5565b8b6200be7c565b5086899173ffffffffffffffffffffffffffffffffffffffff82511690604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc757608051926200c6b3575b5060ff89511690604051917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc75760076001926200c04394608051916200a23b5750602060405196846200287d899651809285808a01910162013910565b96608051975b865180518a10156200c197576200c0768a73ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc757608051916200c177575b5060ff60206200c0e78c8b5162013fe9565b51015116604051907f6900a3ae000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc757600193600885926200c16e946080519162009e3c57506020604051968462002a22899651809285808a01910162013910565b9801976200c049565b6200c19091503d80608051833e62000e5d8183620133b5565b8a6200c0d5565b50856200c1b7899261ffff87511666ffffffffffffff8451169062016218565b936200c1e1875173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b6200c23a73ffffffffffffffffffffffffffffffffffffffff8351166200c26786516040519384917f1626ba7e000000000000000000000000000000000000000000000000000000006020840152866024840162013ffe565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101845283620133b5565b6040517f1626ba7e000000000000000000000000000000000000000000000000000000006020820152602081526200c2a1604082620133b5565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562000232576200c2fb9260405193849283927fb96213e4000000000000000000000000000000000000000000000000000000008452608051956004850162013d15565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562001dc7576200c696575b5073ffffffffffffffffffffffffffffffffffffffff8251166200c37e8551926200c23a6040519485927f1626ba7e0000000000000000000000000000000000000000000000000000000060208501526024840162013ffe565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562000232576200c3d791604051809381927fbd6af4340000000000000000000000000000000000000000000000000000000083526080519460048401620142a9565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562001dc7576200c679575b5073ffffffffffffffffffffffffffffffffffffffff90511691604051927f56ca623e000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc757608051936200c657575b505191604051927f71aad10d0000000000000000000000000000000000000000000000000000000084526020600485015283806200c4bc60805193602483019062013935565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc7576200c57b9360a0926200c52792608051926200c62d575b5060096200c51891602060405194826200a13d879451809285808801910162013910565b60208951015115908762016756565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c1688516040518096819482937f545bbe2a0000000000000000000000000000000000000000000000000000000084526004840162013f51565b03915afa94851562001dc75760805194608051956080519260805195608051996200c5dd575b509466ffffffffffffff62000dc5989562001d5c60ff9662000dc5620007ad9e9b9762000dbf62001d5c9861ffff62002edd9e51169062016a69565b949996985096505092505060a03d60a0116200c625575b6200c6008183620133b5565b81016200c60d9162013d5a565b97919396909692939694919598939692908a6200c5a1565b503d6200c5f4565b6200c5189192506200c64e6009913d80608051833e62000e5d8183620133b5565b9291506200c4f4565b6200c6719193503d80608051833e62000e5d8183620133b5565b91876200c476565b6080516200c68791620133b5565b6080516200023257876200c400565b6080516200c6a491620133b5565b6080516200023257886200c324565b6200c6cd9192503d80608051833e62000e5d8183620133b5565b90896200bfba565b6080516200c6e391620133b5565b6080516200023257886200bbff565b3462000232576080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011262000232576040518060206018549182815201906018608051527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e906080515b8181106200c77a57620020c185620020b481870382620133b5565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016200c75f565b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325760043567ffffffffffffffff811162000232576200c7fb903690600401620139f5565b60036040825101515110737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc7576200d61a575b506200c885815162014a38565b602081019073ffffffffffffffffffffffffffffffffffffffff6200c8ad8184511662014dd6565b16825260608101916200c8c1835162014d5c565b8352608082016200c8d3815162014d5c565b815260a0830166ffffffffffffff6200c8ef8183511662014d98565b169182825266ffffffffffffff6200c91560c0870194826200113b8188511692620142d8565b16835266ffffffffffffff6200c9368160e088015116828551169062014dad565b1660e08601526200c9466201450e565b958051604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75773ffffffffffffffffffffffffffffffffffffffff91608051916200d5f6575b50168752815192604051937fffa186490000000000000000000000000000000000000000000000000000000085526004850152602084602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa93841562001dc757608051946200d5d0575b5073ffffffffffffffffffffffffffffffffffffffff602089019416845266ffffffffffffff73ffffffffffffffffffffffffffffffffffffffff8751169151169073ffffffffffffffffffffffffffffffffffffffff89511691604051927f56ca623e000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc7576200cb1f93608051936200d5ae57506200137f6002602760405180967f7369676e65723a00000000000000000000000000000000000000000000000000602083015262001329815180926020868601910162013910565b906200cb326040890192808452620155d8565b946080890195865266ffffffffffffff73ffffffffffffffffffffffffffffffffffffffff88511691511673ffffffffffffffffffffffffffffffffffffffff86511690604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576200cc30936200cc2493608051936200d58c5750620014dc6002602760405180967f7369676e65723a00000000000000000000000000000000000000000000000000602083015262001486815180926020868601910162013910565b8060608b0152620155d8565b9060a08901918252610100880195865190511415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc7576200d56f575b50855182511415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc7576200d552575b506200cd77906101c08a019260028451525160c084510152600160208451015251915173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75760805192839283926200d525575b5060ff6101808b01946101008c01946101408d019485528552168452519173ffffffffffffffffffffffffffffffffffffffff8a511690604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc757608051926200d503575b505191604051927fb11a19e8000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc757608051936200d4e1575b505193604051947fb11a19e8000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa94851562001dc757608051956200d4bc575b5060ff90511693604051947f6900a3ae000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc75760016200cfbb9381936200cfc7986080519262001df7575060069060206040519886620017868b9851809285808c01910162013910565b60408801519162015b1d565b60c087015251906200cff7855173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b604051927fe341eaa400000000000000000000000000000000000000000000000000000000845260048401526024830152606082604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519283928391906200d491575b5060ff6101a08901936101208a01956101608b01938452865216835273ffffffffffffffffffffffffffffffffffffffff606089015192511693604051947f56ca623e000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa94851562001dc757608051956200d46f575b505190604051917fb11a19e8000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc757608051926200d44d575b505192604051937fb11a19e8000000000000000000000000000000000000000000000000000000008552600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa93841562001dc757608051946200d428575b5060ff90511692604051937f6900a3ae000000000000000000000000000000000000000000000000000000008552600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc75773ffffffffffffffffffffffffffffffffffffffff9560016200d2569381936200d26a986080519262001df7575060069060206040519886620017868b9851809285808c01910162013910565b602087510151159060408801519262015900565b9160e08601928352519261020086019384515266ffffffffffffff60e0860151166020855101525116604051907fccce3bc8000000000000000000000000000000000000000000000000000000006020830152600482526200d2ce602483620133b5565b835160408051825160208083019190915290920151908201526200d2f6816060810162001ba0565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562000232576200d3509260405193849283927fb96213e4000000000000000000000000000000000000000000000000000000008452608051956004850162013d15565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562001dc7576200d40b575b5062001ba0916101e06200d3bf62008c80936200d39562014342565b90516200d3a28262013f8a565b526200d3ae8162013f8a565b5060c088015162001c908262013fc7565b9501948552516040519283917fccbb534f000000000000000000000000000000000000000000000000000000006020840152602483019190916020806040830194805184520151910152565b6080516200d41991620133b5565b6080516200023257846200d379565b60ff9194506200d445903d80608051833e62000e5d8183620133b5565b93906200d1b0565b6200d4679192503d80608051833e62000e5d8183620133b5565b90896200d151565b6200d4899195503d80608051833e62000e5d8183620133b5565b93896200d0f2565b919350506200d4b2915060603d60601162001ed35762001ebd8183620133b5565b929092886200d05c565b60ff9195506200d4d9903d80608051833e62000e5d8183620133b5565b94906200cf2b565b6200d4fb9193503d80608051833e62000e5d8183620133b5565b918b6200cecc565b6200d51d9192503d80608051833e62000e5d8183620133b5565b908b6200ce6d565b915092506200d546915060603d60601162001ed35762001ebd8183620133b5565b91929091908a6200cdda565b6080516200d56091620133b5565b6080516200023257896200cd31565b6080516200d57d91620133b5565b6080516200023257896200ccb7565b6200d5a69193503d80608051833e62000e5d8183620133b5565b918d6200143d565b6200d5c89193503d80608051833e62000e5d8183620133b5565b918b620012e0565b6200d5ee91945060203d60201162001fe35762001fd38183620133b5565b92886200ca1b565b6200d613915060203d60201162001fe35762001fd38183620133b5565b896200c9b9565b6080516200d62891620133b5565b6080516200023257816200c878565b3462000232576080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126200023257601e546200d6778162013419565b906200d6876040519283620133b5565b808252602082019081601e608051527f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350608051915b8383106200d77357848660405191829160208301906020845251809152604083019060408160051b8501019291608051905b8282106200d6fe57505050500390f35b919360206200d762827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc060019597998495030186526040838a5173ffffffffffffffffffffffffffffffffffffffff8151168452015191818582015201906201397a565b96019201920185949391926200d6ee565b6040516200d781816201337b565b825473ffffffffffffffffffffffffffffffffffffffff1681526001830180546200d7ac8162013419565b916200d7bc6040519384620133b5565b81835260208301906080515260206080512090608051905b8382106200d7fc5750505050600192826020928360029501528152019201920191906200d6bc565b6001602081926200d80d86620143fc565b8152019301910190916200d7d4565b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325760043567ffffffffffffffff8111620002325760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126200023257604051906200d89c8262013322565b806004013567ffffffffffffffff811162000232576200d8c39060043691840101620134dc565b82526200d8d36024820162013432565b6020830152604481013567ffffffffffffffff811162000232576200d939916200d90660c492600436918401016201348f565b604085015260648101356060850152608481013560808501526200d92d60a4820162013742565b60a08501520162013742565b60c082015260036040825101515110737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc7576200e78f575b506200d9c8815162014a38565b73ffffffffffffffffffffffffffffffffffffffff6200d9ee8160208401511662014dd6565b1660208201526200da03606082015162014d5c565b60608201526200da17608082015162014d5c565b608082015266ffffffffffffff6200da54816200da3a8160a08601511662014d98565b168060a0850152826200113b8160c08701511692620142d8565b1660c0820152604051906200da69826201335d565b6080518252608051602083015260606040830152606080830152608051608083015260805160a0830152606060c0830152606060e08301526040516200daaf816201337b565b60008152600060208201526101008301526080516101208301526080516101408301526080516101608301526080516101808301526080516101a08301526080516101c08301526200db00620142f7565b6101e083015260606102008301526060810151604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75773ffffffffffffffffffffffffffffffffffffffff91608051916200e76b575b501682526080810151604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75773ffffffffffffffffffffffffffffffffffffffff91608051916200e747575b5016602083015273ffffffffffffffffffffffffffffffffffffffff60208201511666ffffffffffffff60a08301511673ffffffffffffffffffffffffffffffffffffffff84511690604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576200dcff936200dcf393608051936200e72557506200137f6002602760405180967f7369676e65723a00000000000000000000000000000000000000000000000000602083015262001329815180926020868601910162013910565b806040850152620155d8565b608083015273ffffffffffffffffffffffffffffffffffffffff60208201511666ffffffffffffff60c08301511673ffffffffffffffffffffffffffffffffffffffff60208501511690604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576200de03936200ddf793608051936200e7035750620014dc6002602760405180967f7369676e65723a00000000000000000000000000000000000000000000000000602083015262001486815180926020868601910162013910565b806060850152620155d8565b60a083015260026101e08301515260a082015160c06101e08401510152600160206101e0840151015260608101516200de5e6101e084015173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75760805160ff929091829182916200e6dc575b50610160860152610120850152166101a0830152604082015173ffffffffffffffffffffffffffffffffffffffff83511690604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc757608051926200e6ba575b50610120840151604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc757608051916200e69a575b5061016085015192604051937fb11a19e8000000000000000000000000000000000000000000000000000000008552600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa93841562001dc757608051946200e678575b5060ff6101a08701511693604051947f6900a3ae000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc75760016200e0ae9381936200e0ba986080519262001df7575060069060206040519886620017868b9851809285808c01910162013910565b60408401519162015b1d565b60c083015260808101516200e0ed825173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75760805160ff929091829182916200e651575b50610180860152610140850152166101c0830152606082015173ffffffffffffffffffffffffffffffffffffffff60208401511690604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc757608051926200e62f575b50610140840151604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc757608051916200e60f575b5061018085015192604051937fb11a19e8000000000000000000000000000000000000000000000000000000008552600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa93841562001dc757608051946200e5ed575b5060ff6101c08701511693604051947f6900a3ae000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc75760016200e3409381936200e354986080519262001df7575060069060206040519886620017868b9851809285808c01910162013910565b602084510151159060408501519262015900565b60e083015260a08201516101008301515266ffffffffffffff60c0820151166020610100840151015273ffffffffffffffffffffffffffffffffffffffff602082015116604051907fccce3bc8000000000000000000000000000000000000000000000000000000006020830152600482526200e3d3602483620133b5565b61010084015160408051825160208083019190915290920151908201526200e3ff816060810162001ba0565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562000232576200e4599260405193849283927fb96213e4000000000000000000000000000000000000000000000000000000008452608051956004850162013d15565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562001dc7576200e5d0575b506200e520906200e4c36200e49662014342565b60e08501516200e4a68262013f8a565b526200e4b28162013f8a565b5060c085015162001c908262013fc7565b8061020085015260a073ffffffffffffffffffffffffffffffffffffffff601f5460081c1691835160405195869283927f545bbe2a0000000000000000000000000000000000000000000000000000000084526004840162013f18565b0381845afa91821562001dc757608051620007ad95909384918291829081906200e57e575b62000dc59798506200e5699262004f8d62001d6596959362001d4e60809462016962565b66ffffffffffffff60a0840151169062016a69565b5050905062000dc5945062001d6591506200e56962001d4e60806200e5b862004f8d9960a03d60a011620007e357620007d08183620133b5565b939c50929a509196509094935091508890506200e545565b6080516200e5de91620133b5565b6080516200023257826200e482565b6200e6079194503d80608051833e62000e5d8183620133b5565b92866200e2ac565b6200e62891503d80608051833e62000e5d8183620133b5565b856200e248565b6200e6499192503d80608051833e62000e5d8183620133b5565b90846200e1e5565b9150506200e671915060603d60601162001ed35762001ebd8183620133b5565b866200e154565b6200e6929194503d80608051833e62000e5d8183620133b5565b92866200e01a565b6200e6b391503d80608051833e62000e5d8183620133b5565b856200dfb6565b6200e6d49192503d80608051833e62000e5d8183620133b5565b90846200df53565b9150506200e6fc915060603d60601162001ed35762001ebd8183620133b5565b866200dec5565b6200e71d9193503d80608051833e62000e5d8183620133b5565b91876200143d565b6200e73f9193503d80608051833e62000e5d8183620133b5565b9187620012e0565b6200e764915060203d60201162001fe35762001fd38183620133b5565b846200dbfc565b6200e788915060203d60201162001fe35762001fd38183620133b5565b846200db83565b6080516200e79d91620133b5565b6080516200023257816200d9bb565b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325760043567ffffffffffffffff811162000232576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011262000232576040516200e82c816201333f565b816004013567ffffffffffffffff811162000232576200e853906004369185010162013757565b8152602482013567ffffffffffffffff811162000232576200e87c906004369185010162013757565b6020820152604482013567ffffffffffffffff811162000232576200e8a89060043691850101620134dc565b60408201526200e8bb60648301620137f4565b91606082019283526200e8d16084820162013742565b60808301526200e8e460a48201620133f7565b9060a083019182526200e8fa60c4820162013432565b60c084015260e481013567ffffffffffffffff811162000232576200e946916200e92e61012492600436918401016201348f565b60e0860152610104810135610100860152016201340b565b6101208301526200e97173ffffffffffffffffffffffffffffffffffffffff60c08401511662015b2e565b6102586200e9888351516020850151519062013f7c565b10737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc7576200f95c575b506080515b825180518210156200eae8576200ea2e8273ffffffffffffffffffffffffffffffffffffffff9262013fe9565b51511673ffffffffffffffffffffffffffffffffffffffff60c0850151161415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc7576200eacb575b506001016200ea01565b6080516200ead991620133b5565b6080516200023257846200eac1565b50506080515b602083015180518210156200ebd8576200eb1e8273ffffffffffffffffffffffffffffffffffffffff9262013fe9565b51511673ffffffffffffffffffffffffffffffffffffffff60c0850151161415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc7576200ebbb575b506001016200eaee565b6080516200ebc991620133b5565b6080516200023257846200ebb1565b5050906200ebea604082015162014a38565b6080519260605b825180518610156200ed62576200ec1e8673ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc757608051916200ed42575b5060ff60206200ec8f88875162013fe9565b5101511691604051927f6900a3ae000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc75760016200ed1992600782968394608051916200ed225750602060405197846200265f8a9651809285808a01910162013910565b9401936200ebf1565b6200ed3b91503d80608051833e62000e5d8183620133b5565b8c62002642565b6200ed5b91503d80608051833e62000e5d8183620133b5565b866200ec7d565b5091909161010082015190604051917fb11a19e8000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc757608051926200f93a575b5073ffffffffffffffffffffffffffffffffffffffff60c084015116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc757608051916200f91a575b5060ff86511691604051927f6900a3ae000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc7576200ef47936001938492608051926200f8f5575b50600890602060405198866200eece8b9851809285808c01910162013910565b87017f73617069656e743a000000000000000000000000000000000000000000000000838201526200ef0a825180938560288501910162013910565b01017f3a0000000000000000000000000000000000000000000000000000000000000083820152620017ff82518093602060098501910162013910565b92608051935b602083015180518610156200f0c0576200ef7d8673ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc757608051916200f0a0575b5060ff60206200eff0888288015162013fe9565b51015116604051907f6900a3ae000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc757600193600885926200f07794608051916200f08057506020604051968462002a22899651809285808a01910162013910565b9401936200ef4d565b6200f09991503d80608051833e62000e5d8183620133b5565b8b62002a05565b6200f0b991503d80608051833e62000e5d8183620133b5565b866200efdc565b50906200f0e3849261ffff84511666ffffffffffffff6080870151169062016218565b610120840151909190156200f68c57604080516200f1028282620133b5565b601181527f3a73617069656e745f636f6d706163743a0000000000000000000000000000006020820152906200f159604087015173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b906200c23a73ffffffffffffffffffffffffffffffffffffffff60c0890151166200f1b860e08a015184519384917f898bd921000000000000000000000000000000000000000000000000000000006020840152876024840162013ffe565b6101008901518351906020820152602081526200f1d68482620133b5565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562000232576200f22f92845193849283927fb96213e4000000000000000000000000000000000000000000000000000000008452608051956004850162013d15565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562000e93576200f66f575b5073ffffffffffffffffffffffffffffffffffffffff60c0880151166200f2e460e0890151936200f2b784519586927f898bd9210000000000000000000000000000000000000000000000000000000060208501526024840162013ffe565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101855284620133b5565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562000232576200f33c928251809481927fbd6af4340000000000000000000000000000000000000000000000000000000083526080519460048401620142a9565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115620007eb57506200f652575b505b73ffffffffffffffffffffffffffffffffffffffff60c086015116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc757608051916200f632575b5060e0860151604051907f71aad10d0000000000000000000000000000000000000000000000000000000082526020600483015281806200f42960805193602483019062013935565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc7576200f4cb60a09360206200f534966200f4dd95608051916200f612575b506200f49d8260405196856200f487899751809285808b01910162013910565b860162002d7e8251809385808501910162013910565b01037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282620133b5565b60206040890151015115908662016756565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c1660408801516040518095819482937f545bbe2a0000000000000000000000000000000000000000000000000000000084526004840162013f51565b03915afa93841562001dc75760805193608051946080519260805194608051986200f5c9575b509462001d5c620007ad99956200f58f6200f5a49662000dc562000dc59b9762000dbf60ff9861ffff60409e51169062016a69565b66ffffffffffffff6080880151169062016a69565b015173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b94509550509294505060a03d60a0116200f60a575b6200f5ea8183620133b5565b81016200f5f79162013d5a565b969295929490939192909190896200f55a565b503d6200f5de565b6200f62b91503d80608051833e62000e5d8183620133b5565b8c6200f467565b6200f64b91503d80608051833e62000e5d8183620133b5565b866200f3e0565b6080516200f66091620133b5565b6080516200023257856200f367565b6080516200f67d91620133b5565b6080516200023257876200f258565b604080516200f69c8282620133b5565b600981527f3a73617069656e743a000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff60c0870151166040870151906200f72b60e0890151926200c23a85519485927f13792a4a0000000000000000000000000000000000000000000000000000000060208501526024840162014280565b6101008801518351906020820152602081526200f7498482620133b5565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562000232576200f7a292845193849283927fb96213e4000000000000000000000000000000000000000000000000000000008452608051956004850162013d15565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562000e93576200f8d8575b5073ffffffffffffffffffffffffffffffffffffffff60c087015116906040870151916200f83160e0890151936200f2b784519586927f13792a4a0000000000000000000000000000000000000000000000000000000060208501526024840162014280565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562000232576200f889928251809481927fbd6af4340000000000000000000000000000000000000000000000000000000083526080519460048401620142a9565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115620007eb57506200f8bb575b506200f369565b6080516200f8c991620133b5565b6080516200023257856200f8b4565b6080516200f8e691620133b5565b6080516200023257866200f7cb565b60089192506200f912903d80608051833e62000e5d8183620133b5565b91906200eeae565b6200f93391503d80608051833e62000e5d8183620133b5565b866200ee41565b6200f9549192503d80608051833e62000e5d8183620133b5565b90856200edc9565b6080516200f96a91620133b5565b6080516200023257836200e9fc565b3462000232576080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011262000232576040518060206016549182815201906016608051527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289906080515b8181106200fa0157620020c185620020b481870382620133b5565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016200f9e6565b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325760043567ffffffffffffffff8111620002325760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126200023257604051906200faae8262013322565b806004013567ffffffffffffffff811162000232576200fad59060043691840101620134dc565b82526200fae56024820162013432565b91602081019283526200fafb6044830162013742565b60408201526060810190606483013582526200fb1a60848401620133f7565b608082019081526200fb2f60a48501620133f7565b9360a0830194855260c48101359067ffffffffffffffff8211620002325760046200fb5e92369201016201348f565b60c083015260036040835101515110737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc757620103a7575b506200fbeb62013c3a565b946200fbf8835162014a38565b73ffffffffffffffffffffffffffffffffffffffff6200fc1b8183511662014dd6565b1681526200fc2a845162014d5c565b808552604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75773ffffffffffffffffffffffffffffffffffffffff916080519162010383575b5016865260ff6200fcb681875116828551169062014d8a565b16855273ffffffffffffffffffffffffffffffffffffffff81511660ff83511666ffffffffffffff60408601511673ffffffffffffffffffffffffffffffffffffffff89511691604051927f56ca623e000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc7576080519362010361575b5060ff89511693604051947f6900a3ae000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa93841562001dc7576200fe0b956080519562003b1757506001620035c09160276040519788927f7369676e65723a00000000000000000000000000000000000000000000000000602085015262003553815180926020868801910162013910565b906200fe1e6020880192808452620155d8565b9460408801958652516200fe50855173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc75760805193849283929162010335575b505173ffffffffffffffffffffffffffffffffffffffff8a511692604051937f56ca623e000000000000000000000000000000000000000000000000000000008552600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa93841562001dc7576080519462010313575b50604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc75760805191620102f3575b50604051957fb11a19e8000000000000000000000000000000000000000000000000000000008752600487015260805186602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa95861562001dc75760805196620102d1575b5060ff604051937f6900a3ae00000000000000000000000000000000000000000000000000000000855216600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc757600160809581620100899373ffffffffffffffffffffffffffffffffffffffff9a6201009d988a519262003a6e575060069060206040519886620017868b9851809285808c01910162013910565b602088510151159060c08901519262015900565b95606089019687525197019687515266ffffffffffffff6040850151166020885101525116604051907fccce3bc800000000000000000000000000000000000000000000000000000000602083015260048252620100fd602483620133b5565b8651604080518251602080830191909152909201519082015262010125816060810162001ba0565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562000232576201017f9260405193849283927fb96213e4000000000000000000000000000000000000000000000000000000008452608051956004850162013d15565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562001dc757620102b4575b50620102079060a073ffffffffffffffffffffffffffffffffffffffff601f5460081c1694845190519060405194859283927f545bbe2a0000000000000000000000000000000000000000000000000000000084526004840162013f18565b0381875afa94851562001dc75760805195869384938493928492906201026c575b5062001d65946201025862000dc59998979560ff60209662001d5c620007ad9f9783620102629851169062016a69565b8251519062016ae3565b5101519062016a69565b9450975050949392505060a03d60a011620102ac575b6201028e8183620133b5565b81016201029b9162013d5a565b979596949590949193908a62010228565b503d62010282565b608051620102c291620133b5565b608051620002325785620101a8565b620102eb9196503d80608051833e62000e5d8183620133b5565b948b6200ffe6565b6201030c91503d80608051833e62000e5d8183620133b5565b8b6200ff89565b6201032d9194503d80608051833e62000e5d8183620133b5565b928b6200ff2c565b9150935062010356915060603d60601162001ed35762001ebd8183620133b5565b919091938a6200feb5565b6201037b9193503d80608051833e62000e5d8183620133b5565b918a6200fd59565b620103a0915060203d60201162001fe35762001fd38183620133b5565b886200fc9d565b608051620103b591620133b5565b6080516200023257856200fbe0565b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325760043567ffffffffffffffff811162000232576101807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8236030112620002325760405190610180820182811067ffffffffffffffff8211176200534457604052806004013567ffffffffffffffff811162000232576201047d906004369184010162013757565b8252602481013567ffffffffffffffff81116200023257620104a6906004369184010162013757565b6020830152604481013567ffffffffffffffff81116200023257620104d2906004369184010162013757565b6040830152606481013567ffffffffffffffff81116200023257620104fe906004369184010162013757565b6060830152608481013567ffffffffffffffff81116200023257620105ad91620105326101649260043691840101620134dc565b60808501526201054560a48201620137f4565b60a08501526201055860c4820162013742565b60c08501526201056b60e48201620137f4565b60e08501526201057f6101048201620133f7565b610100850152620105946101248201620133f7565b610120850152610144810135610140850152016201340b565b610160820152610258620105ec620105df620105d28451516020860151519062013f7c565b6040850151519062013f7c565b6060840151519062013f7c565b10737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc757620118e8575b5062010670608082015162014a38565b6201068061014082015162014d5c565b80610140830152604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc75760805191620118c4575b506080515b82518051821015620107ca57620107148273ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e56200000000000000000000000000000000000000000000000000000000825273ffffffffffffffffffffffffffffffffffffffff84161415600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc757620107ad575b50600101620106e7565b608051620107bb91620133b5565b608051620002325783620107a3565b50506080515b60208301518051821015620108b657620108008273ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e56200000000000000000000000000000000000000000000000000000000825273ffffffffffffffffffffffffffffffffffffffff84161415600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75762010899575b50600101620107d0565b608051620108a791620133b5565b6080516200023257836201088f565b50506080515b60408301518051821015620109a257620108ec8273ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e56200000000000000000000000000000000000000000000000000000000825273ffffffffffffffffffffffffffffffffffffffff84161415600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75762010985575b50600101620108bc565b6080516201099391620133b5565b6080516200023257836201097b565b50506080515b6060830151805182101562010a8e57620109d88273ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e56200000000000000000000000000000000000000000000000000000000825273ffffffffffffffffffffffffffffffffffffffff84161415600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75762010a71575b50600101620109a8565b60805162010a7f91620133b5565b60805162000232578362010a67565b50506080519160605b8151805185101562010c085762010ac48573ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519162010be8575b5060ff602062010b3587865162013fe9565b5101511691604051927f6900a3ae000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc757600162010bbf926007829683946080519162010bc85750602060405197846200265f8a9651809285808a01910162013910565b93019262010a97565b62010be191503d80608051833e62000e5d8183620133b5565b8b62002642565b62010c0191503d80608051833e62000e5d8183620133b5565b8562010b23565b506080519290919060605b6040830151805186101562010d6a5762010c438673ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519162010d4a575b5060ff602062010cb788604088015162013fe9565b5101511691604051927f6900a3ae000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc757600162010d4192600782968394608051916200ed225750602060405197846200265f8a9651809285808a01910162013910565b94019362010c13565b62010d6391503d80608051833e62000e5d8183620133b5565b8662010ca2565b50919091604051907f56ca623e00000000000000000000000000000000000000000000000000000000825273ffffffffffffffffffffffffffffffffffffffff8416600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc75760805192620118a2575b5060ff6101208401511690604051917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc757600760019262010e6e9460805191620118825750602060405196846200287d899651809285808a01910162013910565b92608051935b6060830151805186101562010fc85762010ea48673ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519162010fa8575b5060ff602062010f1888606088015162013fe9565b51015116604051907f6900a3ae000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc7576001936008859262010f9f94608051916200f08057506020604051968462002a22899651809285808a01910162013910565b94019362010e74565b62010fc191503d80608051833e62000e5d8183620133b5565b8662010f03565b50839161ffff60e08501511691604051927f6900a3ae000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc7576080519362011860575b5060ff61010086015116604051907f6900a3ae000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc757600180936007620111ce966002956080519162011840575b5060206040519986620110c28c9851809285808c01910162013910565b87017f6e65737465643a0000000000000000000000000000000000000000000000000083820152620110fe825180938560278501910162013910565b01017f3a00000000000000000000000000000000000000000000000000000000000000838201526201113b82518093602060088501910162013910565b01017f3a28000000000000000000000000000000000000000000000000000000000000838201526201117882518093602060038501910162013910565b01017f29000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1810184520182620133b5565b91608051925b602082015180518510156201134757620112048573ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519162011327575b5060ff602062011277878287015162013fe9565b51015116604051907f6900a3ae000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75760019360088592620112fe94608051916201130757506020604051968462002a22899651809285808a01910162013910565b930192620111d4565b6201132091503d80608051833e62000e5d8183620133b5565b8a62002a05565b6201134091503d80608051833e62000e5d8183620133b5565b8562011263565b506201136b9061ffff60a08401511666ffffffffffffff60c0850151169062016218565b9062011398608082015173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b610160820151620117f6575b61014082015190604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519182918291620117cf575b5061016084015115620117be576201142662014243565b915b73ffffffffffffffffffffffffffffffffffffffff604051977f56ca623e00000000000000000000000000000000000000000000000000000000895216600488015260805187602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa96871562001dc757608051976201179c575b50604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc757608051916201177c575b50604051917fb11a19e8000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc757608051926201175a575b5060ff604051947f6900a3ae00000000000000000000000000000000000000000000000000000000865216600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc75762011658976001620116019562002d6895620115ef95839560a09a6080519462002f5857509062002d8e60208093816040519c8d8b83829d5194859301910162013910565b60206080850151015115908562016756565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c1660808401516040518097819482937f545bbe2a0000000000000000000000000000000000000000000000000000000084526004840162013f51565b03915afa91821562001dc757608051620007ad949093849283928392839190620116ff575b508593620116ae6200f5a49462000dc56080989562000dbf620116c39661ffff60a062000dc59e0151169062016a69565b66ffffffffffffff60c0860151169062016a69565b60ff6101208401511661ffff60e0850151161115845150600014620116f55760ff80610100850151165b169062016a69565b60ff8451620116ed565b62000dbf9297506080955062000dc59694506200f5a49350620116c39150620116ae6201174162000dc59260a03d60a011620007e357620007d08183620133b5565b9c999b929a5098909750955090935091506201167d9050565b620117749192503d80608051833e62000e5d8183620133b5565b908762011554565b6201179591503d80608051833e62000e5d8183620133b5565b87620114f7565b620117b69197503d80608051833e62000e5d8183620133b5565b95876201149a565b620117c862014206565b9162011428565b915050620117ef915060603d60601162001ed35762001ebd8183620133b5565b866201140f565b60405160208101917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008352603c820152603c815262011837605c82620133b5565b519020620113a4565b6201185991503d80608051833e62000e5d8183620133b5565b8b620110a5565b6201187a9193503d80608051833e62000e5d8183620133b5565b918562011031565b6201189b91503d80608051833e62000e5d8183620133b5565b8962002860565b620118bc9192503d80608051833e62000e5d8183620133b5565b908562010de1565b620118e1915060203d60201162001fe35762001fd38183620133b5565b82620106e2565b608051620118f691620133b5565b60805162000232578162010660565b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325760043567ffffffffffffffff811162000232576201195990369060040162013804565b60056040825101515110737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75762011ea8575b50620119e3815162014a38565b805160208101511562011e9d5762011a976080515b60405160208101917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408301527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de6060830152608082015260805160a082015260a0815262011a8d60c082620133b5565b51902091620178fc565b6040519060208201927f19010000000000000000000000000000000000000000000000000000000000008452602283015260428201526042815262011ade606282620133b5565b51902062011b0a825173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b608051929091602082019160605b8351805187101562011c705762011b458773ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519162011c50575b5060ff602062011bb689885162013fe9565b5101511690604051917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc75760019362011c25936080519362011c2e575062014017565b95019462011b18565b62011c489193503d80608051833e62000e5d8183620133b5565b918a6200904f565b62011c6991503d80608051833e62000e5d8183620133b5565b8762011ba4565b50828591604051917fb11a19e8000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc7576080519262011e73575b50601662011d33916020604096959651948262011cf7879451809285808801910162013910565b83017f616e792d616464726573732d7375626469676573743a00000000000000000000838201526200183c825180938560368501910162013910565b6080519260408301915b82518051861015620092c75762011d6a8673ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519162011e53575b5060ff602062011ddb88875162013fe9565b5101511690604051917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc75760019362011e4a936080519362009285575062014111565b94019362011d3d565b62011e6c91503d80608051833e62000e5d8183620133b5565b8662011dc9565b62011d3391925062011e946016913d80608051833e62000e5d8183620133b5565b92915062011cd0565b62011a9746620119f8565b60805162011eb691620133b5565b608051620002325781620119d6565b3462000232576080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126200023257604051611eb080820182811067ffffffffffffffff8211176200534457829162017cd883390390608051f0801562001dc7577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00601f549260081b16911617601f55608051608051f35b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325760043567ffffffffffffffff811162000232576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8236030112620002325760405162011ff68162013304565b816004013567ffffffffffffffff811162000232576201201d906004369185010162013757565b8152602482013567ffffffffffffffff8111620002325762012046906004369185010162013757565b60208201908152604483013567ffffffffffffffff81116200023257620120749060043691860101620134dc565b92604083019384526201208a60648201620137f4565b9060608401918252620120a06084820162013742565b9460808501958652620120b660a48301620133f7565b9160a08601928352620120cc60c4820162013432565b9560c0810196875260e482013567ffffffffffffffff81116200023257620120fb90600436918501016201348f565b9160e082019283526101048101359067ffffffffffffffff8211620002325760046201212b92369201016201348f565b9361010082019485526201215673ffffffffffffffffffffffffffffffffffffffff89511662015b2e565b6102586201216a8351518951519062013f7c565b10737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75762012aab575b506080515b82518051821015620122c757620122108273ffffffffffffffffffffffffffffffffffffffff9262013fe9565b51511673ffffffffffffffffffffffffffffffffffffffff8a51161415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc757620122aa575b50600101620121e3565b608051620122b891620133b5565b60805162000232578a620122a0565b5050888896976080515b81518051821015620123b557620122fe8273ffffffffffffffffffffffffffffffffffffffff9262013fe9565b51511673ffffffffffffffffffffffffffffffffffffffff8a51161415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75762012398575b50600101620122d1565b608051620123a691620133b5565b60805162000232578a6201238e565b50509087918988620123c8895162014a38565b6080519860605b885180518c10156201252f57620123fc8c73ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7578c906080519262012502575b5060206201246f60ff928d5162013fe9565b5101511691604051927f6900a3ae000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc7576001620124f9926007829683946080519162009bb95750602060405197846200265f8a9651809285808a01910162013910565b9a0199620123cf565b60ff9192506201246f620125256020923d80608051833e62000e5d8183620133b5565b939250506201245d565b50878a9173ffffffffffffffffffffffffffffffffffffffff89511691604051927f56ca623e000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc7576080519362012a86575b5060ff90511690604051917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc75760076001926201263194608051916200a23b5750602060405196846200287d899651809285808a01910162013910565b96608051975b865180518a10156201278557620126648a73ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519162012765575b5060ff6020620126d58c8b5162013fe9565b51015116604051907f6900a3ae000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc757600193600885926201275c946080519162009e3c57506020604051968462002a22899651809285808a01910162013910565b98019762012637565b6201277e91503d80608051833e62000e5d8183620133b5565b8a620126c3565b50620127a4908866ffffffffffffff61ffff8951169151169062016218565b90620127ce845173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b73ffffffffffffffffffffffffffffffffffffffff825116620128278551926200c23a6040519485927f1626ba7e0000000000000000000000000000000000000000000000000000000060208501526024840162013ffe565b8651737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257620128839260405193849283927fdbaad147000000000000000000000000000000000000000000000000000000008452608051956004850162013d15565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562001dc75762012a69575b5073ffffffffffffffffffffffffffffffffffffffff90511691604051927f56ca623e000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc7576080519362012a47575b505191604051927f71aad10d0000000000000000000000000000000000000000000000000000000084526020600485015283806201296860805193602483019062013935565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc757620129bc936080519262012a1d575b5060096200afcc91602060405194826200a13d879451809285808801910162013910565b9151737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907ff28dceb300000000000000000000000000000000000000000000000000000000825260206004830152818062007f9360805193602483019062013935565b6200afcc91925062012a3e6009913d80608051833e62000e5d8183620133b5565b92915062012998565b62012a619193503d80608051833e62000e5d8183620133b5565b918562012922565b60805162012a7791620133b5565b608051620002325785620128ac565b60ff91935062012aa3903d80608051833e62000e5d8183620133b5565b9290620125a8565b60805162012ab991620133b5565b608051620002325789620121de565b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011262000232576004359067ffffffffffffffff821162000232576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8336030112620002325762012b4681620132b7565b816004013567ffffffffffffffff8111620002325762012b6d9060043691850101620134dc565b815262012b7d6024830162013432565b60208201908152604483013567ffffffffffffffff8111620002325762012bab90600436918601016201348f565b604083015262012bbe6064840162013742565b6060830190815262012bd36084850162013742565b916080840192835260a084019460a4810135865262012c0a60e462012bfb60c48401620133f7565b9260c0880193845201620133f7565b9360e0860194855262012c1e865162014a38565b66ffffffffffffff62012c4d8162012c398188511662014d0a565b16808752826200332a818651169262013bcd565b16905273ffffffffffffffffffffffffffffffffffffffff62012c738184511662014dd6565b16825262012c82865162014d5c565b865260ff62012c9981865116828451169062014d8a565b16845262012ca662013c3a565b9360ff73ffffffffffffffffffffffffffffffffffffffff84511692511666ffffffffffffff8551169073ffffffffffffffffffffffffffffffffffffffff87511692604051937f56ca623e000000000000000000000000000000000000000000000000000000008552600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa93841562001dc7576080519462013292575b5060ff90511693604051947f6900a3ae000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa93841562001dc75762012df7956080519562003b1757506001620035c09160276040519788927f7369676e65723a00000000000000000000000000000000000000000000000000602085015262003553815180926020868801910162013910565b62012e096020850191808352620155d8565b9560408501968752519262012e3c865173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b604051947fe341eaa400000000000000000000000000000000000000000000000000000000865260048601526024850152606084604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc75760805190608051956080519462013264575b50519073ffffffffffffffffffffffffffffffffffffffff87511691604051927f56ca623e000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc7576080519362013242575b50604051967fb11a19e8000000000000000000000000000000000000000000000000000000008852600488015260805187602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa96871562001dc7576080519762013220575b50604051947fb11a19e8000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa94851562001dc75760805195620131fe575b5060ff604051927f6900a3ae00000000000000000000000000000000000000000000000000000000845216600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa96871562001dc7576201308260016080958173ffffffffffffffffffffffffffffffffffffffff9b66ffffffffffffff9a62013096988a519262003a6e575060069060206040519886620017868b9851809285808c01910162013910565b60208a510151159060408b01519262015900565b9760608701988952519501948551525116602084510152511690604051917fccce3bc800000000000000000000000000000000000000000000000000000000602084015260048352620130eb602484620133b5565b8151604080518251602080830191909152909201519082015262013113816060810162001ba0565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562000232576201316d9360405194859283927fb96213e4000000000000000000000000000000000000000000000000000000008452608051956004850162013d15565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811562001dc75762001ba09262008c8092620131e9575b50516040519283917fccbb534f000000000000000000000000000000000000000000000000000000006020840152602483019190916020806040830194805184520151910152565b608051620131f791620133b5565b85620131a1565b620132189195503d80608051833e62000e5d8183620133b5565b938a62012fd6565b6201323a9197503d80608051833e62000e5d8183620133b5565b958a62012f79565b6201325c9193503d80608051833e62000e5d8183620133b5565b918a62012f1c565b915092506201328691945060603d60601162001ed35762001ebd8183620133b5565b94919094928962012ea4565b60ff919450620132af903d80608051833e62000e5d8183620133b5565b939062012d45565b610100810190811067ffffffffffffffff821117620132d557604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610120810190811067ffffffffffffffff821117620132d557604052565b60e0810190811067ffffffffffffffff821117620132d557604052565b610140810190811067ffffffffffffffff821117620132d557604052565b610220810190811067ffffffffffffffff821117620132d557604052565b6040810190811067ffffffffffffffff821117620132d557604052565b60a0810190811067ffffffffffffffff821117620132d557604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117620132d557604052565b359060ff821682036201340657565b600080fd5b359081151582036201340657565b67ffffffffffffffff8111620132d55760051b60200190565b359073ffffffffffffffffffffffffffffffffffffffff821682036201340657565b67ffffffffffffffff8111620132d557601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b81601f820112156201340657803590620134a98262013454565b92620134b96040519485620133b5565b828452602083830101116201340657816000926020809301838601378301015290565b9190610120838203126201340657604051620134f88162013304565b80936201350581620133f7565b825262013515602082016201340b565b6020830152604081013567ffffffffffffffff81116201340657810183601f82011215620134065780356201354a8162013419565b916201355a6040519384620133b5565b81835260208084019260051b82010190868211620134065760208101925b8284106201366457505050506040830152606081013560608301526080810135608083015260a081013567ffffffffffffffff8111620134065783620135c09183016201348f565b60a083015260c081013560c083015260e081013560e08301526101008101359067ffffffffffffffff82116201340657019180601f84011215620134065782356201360b8162013419565b936201361b6040519586620133b5565b81855260208086019260051b8201019283116201340657602001905b82821062013649575050506101000152565b60208091620136588462013432565b81520191019062013637565b833567ffffffffffffffff81116201340657820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828b030112620134065760405191620136b48362013322565b620136c26020830162013432565b83526040820135602084015260608201359267ffffffffffffffff8411620134065760e083620136fa8d60208098819801016201348f565b6040840152608081013560608401526201371760a082016201340b565b60808401526201372a60c082016201340b565b60a0840152013560c082015281520193019262013578565b359066ffffffffffffff821682036201340657565b81601f820112156201340657803590620137718262013419565b92620137816040519485620133b5565b82845260208085019360061b830101918183116201340657602001925b828410620137ad575050505090565b604084830312620134065760206040918251620137ca816201337b565b620137d58762013432565b8152620137e4838801620133f7565b838201528152019301926201379e565b359061ffff821682036201340657565b91909160a081840312620134065760405190620138218262013398565b8193813567ffffffffffffffff811162013406578162013843918401620134dc565b8352602082013567ffffffffffffffff81116201340657816201386891840162013757565b602084015260408201359067ffffffffffffffff82116201340657826201389a60809492620138b99486940162013757565b6040860152620138ad60608201620137f4565b60608601520162013742565b910152565b602060408183019282815284518094520192019060005b818110620138e35750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101620138d5565b60005b838110620139245750506000910152565b818101518382015260200162013913565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093620139738151809281875287808801910162013910565b0116010190565b9080602083519182815201916020808360051b8301019401926000915b838310620139a757505050505090565b9091929394602080620139e5837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08660019603018752895162013935565b9701930193019193929062013997565b9190916101208184031262013406576040519062013a138262013304565b8193813567ffffffffffffffff811162013406578162013a35918401620134dc565b835262013a456020830162013432565b602084015260408201359167ffffffffffffffff8311620134065762013a736101009392849383016201348f565b6040850152606081013560608501526080810135608085015262013a9a60a0820162013742565b60a085015262013aad60c0820162013742565b60c085015262013ac060e0820162013742565b60e08501520135910152565b906020808351928381520192019060005b81811062013aeb5750505090565b82517fffffffff000000000000000000000000000000000000000000000000000000001684526020938401939092019160010162013add565b602081016020825282518091526040820191602060408360051b8301019401926000915b83831062013b5857505050505090565b909192939460208062013bbd837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff81511684520151918185820152019062013acc565b9701930193019193929062013b48565b66ffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9116019066ffffffffffffff821162013c0b57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6040519062013c498262013398565b8160008152606060208201526000604082015260608082015260806040519162013c73836201337b565b60008352600060208401520152565b602081830312620134065780519067ffffffffffffffff821162013406570181601f8201121562013406576020815191019062013cbf8162013454565b9262013ccf6040519485620133b5565b81845281830111620134065762013ceb91602084019062013910565b90565b908160609103126201340657805160ff811681036201340657916040602083015192015190565b9162013d4b9073ffffffffffffffffffffffffffffffffffffffff62013ceb959316845260606020850152606084019062013935565b91604081840391015262013935565b908160a091031262013406578051916020820151916040810151916080606083015192015190565b610120820160ff82511683526020820151151560208401526040820151906101206040850152815180915261014084019060206101408260051b8701019301916000905b82821062013e6d575050505062013e0161010091606084015160608601526080840151608086015260a084015185820360a087015262013935565b9160c081015160c085015260e081015160e08501520151916101008183039101526020808351928381520192019060005b81811062013e405750505090565b825173ffffffffffffffffffffffffffffffffffffffff1684526020938401939092019160010162013e32565b90919293602080827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec08a6001950301855287519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c08062013ee1604085015160e0604086015260e085019062013935565b936060810151606085015260808101511515608085015260a0810151151560a0850152015191015296019201920190929162013dc6565b929162013f4660609162013f3760009460808852608088019062013d82565b90868203602088015262013935565b938260408201520152565b929162013f7060609162013f3760009460808852608088019062013d82565b93600160408201520152565b9190820180921162013c0b57565b80511562013f985760200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80516001101562013f985760400190565b80516002101562013f985760600190565b805182101562013f985760209160051b010190565b60409062013ceb93928152816020820152019062013935565b6001809160076201410f94969560206040519884620140408b9651809285808a01910162013910565b85017f7369676e65723a00000000000000000000000000000000000000000000000000838201526201407c825180938560278501910162013910565b01017f3a0000000000000000000000000000000000000000000000000000000000000083820152620140b982518093602060088501910162013910565b01017f20000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1810185520183620133b5565b565b60019060086201410f93959460206040519784620141398a9651809285808a01910162013910565b85017f2000000000000000000000000000000000000000000000000000000000000000838201527f7369676e65723a0000000000000000000000000000000000000000000000000060218201526201419b825180938560288501910162013910565b01017f3a000000000000000000000000000000000000000000000000000000000000008382015262004c6882518093602060098501910162013910565b9081602091031262013406575173ffffffffffffffffffffffffffffffffffffffff81168103620134065790565b6040519062014217604083620133b5565b600682527f3a686173683a00000000000000000000000000000000000000000000000000006020830152565b6040519062014254604083620133b5565b600a82527f3a6574685f7369676e3a000000000000000000000000000000000000000000006020830152565b90916201429a62013ceb9360408452604084019062013d82565b91602081840391015262013935565b60409073ffffffffffffffffffffffffffffffffffffffff62013ceb9493168152816020820152019062013935565b66ffffffffffffff60019116019066ffffffffffffff821162013c0b57565b60405190620143068262013304565b6060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b60405160609190620143558382620133b5565b60028152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018260005b8281106201438d57505050565b80606060208093850101520162014380565b60405160809190620143b28382620133b5565b60038152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018260005b828110620143ea57505050565b806060602080938501015201620143dd565b906040519160008154918260011c9260018116801562014503575b602085108114620144d65784875286939291811562014494575060011462014449575b506201410f92500383620133b5565b90506000929192526020600020906000915b818310620144775750509060206201410f92820101386201443a565b60209193508060019154838589010152019101909184926201445b565b602093506201410f9592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b820101386201443a565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f169362014417565b604051906201451d826201335d565b8160008152600060208201526060604082015260608082015260006080820152600060a0820152606060c0820152606060e08201526000610100820152600061012082015260006101408201526000610160820152600061018082015260006101a08201526201458c620142f7565b6101c082015260606101e08201526102006040519162013c73836201337b565b604051906102e0820182811067ffffffffffffffff821117620132d55760405260006102c08382815282602082015282604082015260608082015260606080820152606060a08201528260c08201528260e08201528261010082015262014612620142f7565b61012082015262014622620142f7565b6101408201526060610160820152606061018082015260606101a0820152826101c0820152826101e08201528261020082015282610220820152826102408201528261026082015282610280820152826102a08201520152565b90604051918281549182825260208201906000526020600020926000905b806007830110620148a9576201410f94549181811062014872575b8181106201483b575b81811062014804575b818110620147cd575b81811062014796575b8181106201475f575b81811062014729575b10620146fb575b500383620133b5565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260200138620146f2565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b168152019301620146eb565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b168152019301620146e2565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b168152019301620146d9565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b168152019301620146d0565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b168152019301620146c7565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b168152019301620146be565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b168152019301620146b5565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e08201520194019201859293916201469a565b60085460ff168015620149475790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562014a1a57600091620149e2575b50151590565b90506020813d60201162014a11575b8162014a0060209383620133b5565b8101031262013406575138620149dc565b3d9150620149f1565b6040513d6000823e3d90fd5b60ff166001019060ff821162013c0b57565b62014a4b6003600060ff84511662017282565b60ff604091600080845162014a618682620133b5565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152855162014b028162014acf60208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528a6024840152606483019062013935565b876044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282620133b5565b51906a636f6e736f6c652e6c6f675afa50168083521562014b21575050565b6060820162014b4873ffffffffffffffffffffffffffffffffffffffff6000835162017282565b90600080845162014b5a8682620133b5565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152855162014bc8816200035c60208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528a6024840152606483019062013935565b51906a636f6e736f6c652e6c6f675afa50526080820162014bea815162014dc1565b905260005b81830190815190815181101562014d0357839260c062014cf78362014c2a60028462014c1e8460019a62013fe9565b51015160009062017282565b936000808962014cac62014cdf825162014c458482620133b5565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152835192839160208301957fb60e72cc0000000000000000000000000000000000000000000000000000000087526024840152606483019062013935565b8b6044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282620133b5565b51906a636f6e736f6c652e6c6f675afa505162013fe9565b51015201905062014bef565b5050505050565b66ffffffffffffff600162014d1f9262017282565b9060008060406200035c62014d3b825162014c458482620133b5565b51906a636f6e736f6c652e6c6f675afa50565b90600062014d1f9262017282565b7ffffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364139600162014d1f9262017282565b62014d1f9160ff9162017282565b66fffffffffffffe600062014d1f9262017282565b62014d1f9166ffffffffffffff9162017282565b66ffffffffffffff600062014d1f9262017282565b73ffffffffffffffffffffffffffffffffffffffff811660018110158062014e95575b801562014e80575b801562014e62575b801562014e57575b1562014e535773ffffffffffffffffffffffffffffffffffffffff9150604051602081019182526020815262014e49604082620133b5565b5190201662014dd6565b5090565b50813b151562014e11565b50734e59b44847b379578588920ca78fbf26c0b4956c811462014e09565b506a636f6e736f6c652e6c6f67811462014e01565b5060ff81111562014df9565b60409062014ebd62013ceb949360608352606083019062013935565b908280828403806020850152600a85527f636f6e6669675f6e657700000000000000000000000000000000000000000000602086015201910152019062013935565b91909161ffff604051937f6900a3ae000000000000000000000000000000000000000000000000000000008552166004840152600083602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562014a1a576000936201521a575b50604051917f6900a3ae0000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562014a1a57600092620151f9575b5073ffffffffffffffffffffffffffffffffffffffff604051917f56ca623e000000000000000000000000000000000000000000000000000000008352166004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562014a1a576012600094601b60029362015190986201513c968992620151d6575b50601090602e604051998a967f7b227468726573686f6c64223a22000000000000000000000000000000000000602089015262015085815180926020868c01910162013910565b87017f222c22636865636b706f696e74223a220000000000000000000000000000000083820152620150c2825180936020603e8501910162013910565b01017f222c2266726f6d223a22666c6174222c22636f6e74656e74223a22000000000083820152620150ff825180936020602b8501910162013910565b01017f222c22636865636b706f696e746572223a2200000000000000000000000000008382015262000bd1825180936020602d8501910162013910565b6201515b737109709ecfa91a80626ff3989d68f67f5b1dd12d62017484565b60405193849283927f0199a2200000000000000000000000000000000000000000000000000000000084526004840162014ea1565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811562014a1a57600091620151be575090565b62013ceb91503d806000833e62000e5d8183620133b5565b6010919250620151f1903d808c833e62000e5d8183620133b5565b91906201503e565b620152129192503d806000833e62000e5d8183620133b5565b903862014fbb565b620152339193503d806000833e62000e5d8183620133b5565b913862014f60565b90604051917f6900a3ae00000000000000000000000000000000000000000000000000000000835260016004840152600083602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562014a1a576000936201521a5750604051917f6900a3ae0000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562014a1a57600092620151f9575073ffffffffffffffffffffffffffffffffffffffff604051917f56ca623e000000000000000000000000000000000000000000000000000000008352166004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562014a1a576012600094601b60029362015190986201513c968992620151d65750601090602e604051998a967f7b227468726573686f6c64223a22000000000000000000000000000000000000602089015262015085815180926020868c01910162013910565b90604051917f6900a3ae00000000000000000000000000000000000000000000000000000000835260026004840152600083602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562014a1a576000936201521a5750604051917f6900a3ae0000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562014a1a57600092620151f9575073ffffffffffffffffffffffffffffffffffffffff604051917f56ca623e000000000000000000000000000000000000000000000000000000008352166004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562014a1a576012600094601b60029362015190986201513c968992620151d65750601090602e604051998a967f7b227468726573686f6c64223a22000000000000000000000000000000000000602089015262015085815180926020868c01910162013910565b906201410f6001602960405180957f7b22696e707574223a0000000000000000000000000000000000000000000000602083015262015582815180926020868601910162013910565b81017f7d000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1810185520183620133b5565b60006201564b620155eb60409362015539565b620156b06201560e737109709ecfa91a80626ff3989d68f67f5b1dd12d62017484565b91855195869485947f0199a22000000000000000000000000000000000000000000000000000000000865260606004870152606486019062013935565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152601083527f636f6e6669675f696d61676548617368000000000000000000000000000000006020840152016044860152019062013935565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811562014a1a57600091620156f5575b506020815191818082019384920101031262013406575190565b6201570d91503d806000833e62000e5d8183620133b5565b38620156db565b60208101519091620157d3911562015820576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a0815262011a8d60c082620133b5565b6040519060208201927f1901000000000000000000000000000000000000000000000000000000000000845260228301526042820152604281526201581a606282620133b5565b51902090565b46906201572a565b6040519062015839604083620133b5565b600582527f66616c73650000000000000000000000000000000000000000000000000000006020830152565b6040519062015876604083620133b5565b600482527f74727565000000000000000000000000000000000000000000000000000000006020830152565b604090620158be62013ceb949360608352606083019062013935565b908280828403806020850152601085527f7369676e61747572655f656e636f646500000000000000000000000000000000602086015201910152019062013935565b911562015b06576201595560006201591762015865565b945b604051809381927f71aad10d00000000000000000000000000000000000000000000000000000000835260206004840152602483019062013935565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562014a1a576015600094600c600293620151909862015a8f96899262015ae3575b50600f906029604051998a967f7b22696e707574223a00000000000000000000000000000000000000000000006020890152620159d8815180926020868c01910162013910565b87017f2c227369676e617475726573223a2200000000000000000000000000000000008382015262015a1582518093602060388501910162013910565b01017f222c22636861696e4964223a00000000000000000000000000000000000000008382015262015a52825180936020601b8501910162013910565b01017f2c22636865636b706f696e74657244617461223a2200000000000000000000008382015262000bd182518093602060218501910162013910565b62015aae737109709ecfa91a80626ff3989d68f67f5b1dd12d62017484565b60405193849283927f0199a22000000000000000000000000000000000000000000000000000000000845260048401620158a2565b600f91925062015afe903d808c833e62000e5d8183620133b5565b919062015991565b62015955600062015b1662015828565b9462015919565b906201595560006201591762015828565b60009073ffffffffffffffffffffffffffffffffffffffff8116906001821080156201620d575b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562015e8657604051907f4c63e562000000000000000000000000000000000000000000000000000000008252151560048201528381602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562015e7b57620161f6575b50600a46148015620161ea575b1562015ea8577342000000000000000000000000000000000000008210801562015e8a575b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562015e8657604051907f4c63e562000000000000000000000000000000000000000000000000000000008252151560048201528381602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562015e7b5790849162015e62575b50505b3b15737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562015e5e57604051907f4c63e56200000000000000000000000000000000000000000000000000000000825260048201528281602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562015e3a5790839162015e45575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562015e1d576040517f4c63e5620000000000000000000000000000000000000000000000000000000081526a636f6e736f6c652e6c6f6782141560048201528281602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562015e3a5790839162015e21575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562015e1d57734e59b44847b379578588920ca78fbf26c0b4956c604051917f4c63e562000000000000000000000000000000000000000000000000000000008352141560048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562015e125762015dfa575050565b62015e07828092620133b5565b62015e0f5750565b80fd5b6040513d84823e3d90fd5b5080fd5b8162015e2d91620133b5565b62015e1d57813862015d6d565b6040513d85823e3d90fd5b8162015e5191620133b5565b62015e1d57813862015ce9565b8280fd5b8162015e6e91620133b5565b62015e5e57823862015c70565b6040513d86823e3d90fd5b8380fd5b50734200000000000000000000000000000000000800821162015bfa565b61a4b146148015620161dd575b1562015f695760648210801562015f5e575b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562015e8657604051907f4c63e562000000000000000000000000000000000000000000000000000000008252151560048201528381602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562015e7b5790849162015f45575b505062015c73565b8162015f5191620133b5565b62015e5e57823862015f3d565b506068821162015ec7565b61a86a46148015620161d1575b1562015c735773010000000000000000000000000000000000000082108015620161b3575b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562015e8657604051907f4c63e562000000000000000000000000000000000000000000000000000000008252151560048201528381602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562015e7b579084916201619a575b5050730200000000000000000000000000000000000000821080156201617c575b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562015e8657604051907f4c63e562000000000000000000000000000000000000000000000000000000008252151560048201528381602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562015e7b5790849162016163575b5050730300000000000000000000000000000000000000821080156201614557737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562015e8657604051907f4c63e562000000000000000000000000000000000000000000000000000000008252151560048201528381602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562015e7b5790849162015f4557505062015c73565b507303000000000000000000000000000000000000ff821162015ec7565b816201616f91620133b5565b62015e5e578238620160a8565b507302000000000000000000000000000000000000ff821162016032565b81620161a691620133b5565b62015e5e57823862016011565b507301000000000000000000000000000000000000ff821162015f9b565b5061a869461462015f76565b5062066eed461462015eb5565b506101a4461462015bd5565b836201620591949294620133b5565b913862015bc8565b5060ff821162015b55565b61ffff604051917f6900a3ae000000000000000000000000000000000000000000000000000000008352166004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562014a1a57600091620163d2575b50604051917f6900a3ae0000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562014a1a5762015190936000938493620163a2575b50601b6201513c926010600293602e6040519788947f7b227468726573686f6c64223a22000000000000000000000000000000000000602087015262016328815180926020868a01910162013910565b85017f222c22636865636b706f696e74223a22000000000000000000000000000000008382015262016365825180936020603e8501910162013910565b01017f222c2266726f6d223a22666c6174222c22636f6e74656e74223a2200000000008382015262000bd1825180936020602b8501910162013910565b60029193506201513c926010620163c6601b933d808a833e62000e5d8183620133b5565b959350509250620162d8565b620163ea91503d806000833e62000e5d8183620133b5565b3862016276565b6040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260016004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562014a1a57600091620164ff575b50604051907f6900a3ae00000000000000000000000000000000000000000000000000000000825260016004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562014a1a5762015190936000938493620163a25750601b6201513c926010600293602e6040519788947f7b227468726573686f6c64223a22000000000000000000000000000000000000602087015262016328815180926020868a01910162013910565b6201651791503d806000833e62000e5d8183620133b5565b386201644c565b6040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260016004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562014a1a576000916201662c575b50604051907f6900a3ae00000000000000000000000000000000000000000000000000000000825260036004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562014a1a5762015190936000938493620163a25750601b6201513c926010600293602e6040519788947f7b227468726573686f6c64223a22000000000000000000000000000000000000602087015262016328815180926020868a01910162013910565b6201664491503d806000833e62000e5d8183620133b5565b3862016579565b6040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260016004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562014a1a57600091620163d25750604051917f6900a3ae0000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562014a1a5762015190936000938493620163a25750601b6201513c926010600293602e6040519788947f7b227468726573686f6c64223a22000000000000000000000000000000000000602087015262016328815180926020868a01910162013910565b9062015a8f6001600c600094620151909686146201688d57600f6201677a62015865565b60296040519788947f7b22696e707574223a00000000000000000000000000000000000000000000006020870152620167bd815180926020868a01910162013910565b85017f2c227369676e617475726573223a22000000000000000000000000000000000083820152620167fa82518093602060388501910162013910565b01017f222c22636861696e4964223a00000000000000000000000000000000000000008382015262016837825180936020601b8501910162013910565b01017f7d000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1810184520182620133b5565b600f6201689962015828565b6201677a565b620151909162015a8f6001600c600094600f6201677a62015865565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156201340657604051907f98296c5400000000000000000000000000000000000000000000000000000000825260048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562014a1a57620169555750565b60006201410f91620133b5565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156201340657604051907f98296c54000000000000000000000000000000000000000000000000000000008252600482015260016024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562014a1a57620169555750565b600090737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562015e1d57604051907f98296c5400000000000000000000000000000000000000000000000000000000825260048201528160248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562015e125762016a5a575050565b8162016a6691620133b5565b50565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156201340657604051917f98296c5400000000000000000000000000000000000000000000000000000000835260048301526024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562014a1a57620169555750565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156201340657604051917f7c84c69b00000000000000000000000000000000000000000000000000000000835260048301526024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562014a1a57620169555750565b60206201410f92949362016b858260405197856200f4878a9751809285808b01910162013910565b01037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101845283620133b5565b60409081519162016bc58184620133b5565b600f83527f7b227369676e617475726573223a5b0000000000000000000000000000000000602084015280519062016bfe8183620133b5565b600282527f5d7d000000000000000000000000000000000000000000000000000000000000602083015260009160605b845184101562016dde578362016d9f57825162016c4c8482620133b5565b600181527f22000000000000000000000000000000000000000000000000000000000000006020820152905b62016cc6600062016c8a878962013fe9565b518651809381927f71aad10d00000000000000000000000000000000000000000000000000000000835260206004840152602483019062013935565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562016d945760019392602062016d6e93869360009162016d77575b5062016d1c828a5197856200f4878a9751809285808b01910162013910565b017f22000000000000000000000000000000000000000000000000000000000000008152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1810184520182620133b5565b93019262016c2e565b62016d8d913d8091833e62000e5d8183620133b5565b3862016cfd565b85513d6000823e3d90fd5b825162016dad8482620133b5565b600281527f2c2200000000000000000000000000000000000000000000000000000000000060208201529062016c78565b829562016e1b939550600094509062016df8929162016b5d565b62016e806201560e737109709ecfa91a80626ff3989d68f67f5b1dd12d62017484565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152601083527f7369676e61747572655f636f6e636174000000000000000000000000000000006020840152016044860152019062013935565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af191821562016eaf5750600091620151be575090565b513d6000823e3d90fd5b6040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260366004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562014a1a57600091620171a3575b50604051917f6900a3ae0000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562014a1a5760009262017182575b50604051917f6900a3ae00000000000000000000000000000000000000000000000000000000835260016004840152600083602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562014a1a576002600b620170ff9460196040986009620170dc9660009a8b9162017164575b50602c8c51998a967f7b226d61784465707468223a0000000000000000000000000000000000000000602089015262017025815180926020868c01910162013910565b87017f2c2273656564223a220000000000000000000000000000000000000000000000838201526201706282518093602060358501910162013910565b01017f222c226d696e5468726573686f6c644f6e4e6573746564223a00000000000000838201526201709f82518093602060228501910162013910565b01017f2c22736b65776564223a220000000000000000000000000000000000000000008382015262000bd182518093602060248501910162013910565b620151906201560e737109709ecfa91a80626ff3989d68f67f5b1dd12d62017484565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152601583527f646576546f6f6c735f72616e646f6d436f6e66696700000000000000000000006020840152016044860152019062013935565b6201717b91503d808d833e62000e5d8183620133b5565b3862016fe2565b6201719b9192503d806000833e62000e5d8183620133b5565b903862016f6f565b620171bb91503d806000833e62000e5d8183620133b5565b3862016f14565b6000620171d5620170dc60409362015539565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152600d83527f636f6e6669675f656e636f6465000000000000000000000000000000000000006020840152016044860152019062013935565b9190820391821162013c0b57565b811562017253570690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600090838311620174005782811091821580620173f5575b620173ed57620172ab84866201723a565b926001840180941162013c0b57600383111580620173e3575b620173d2577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83101580620173c7575b620173b45785831115620173625750509062017315846201731b936201723a565b62017248565b9081156201735d576201732f925062013f7c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811162013c0b5790565b505090565b95949291909562017374575b50505050565b8394955062017315906201738993946201723a565b9081156201735d576201739d92506201723a565b6001810180911162013c0b5790388080806201736e565b5050905062013ceb92915019906201723a565b5082198411620172f4565b505091905062013ceb925062013f7c565b50828411620172c4565b509250505090565b50848211156201729a565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374645574696c7320626f756e642875696e743235362c75696e743235362c7560448201527f696e74323536293a204d6178206973206c657373207468616e206d696e2e00006064820152fd5b73ffffffffffffffffffffffffffffffffffffffff166040517fc1978d1f00000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5345515f53444b5f5250435f4d494e5f504f52540000000000000000000000006044820152602081606481855afa90811562014a1a57600091620178c4575b50604051907fc1978d1f00000000000000000000000000000000000000000000000000000000825260206004830152601460248301527f5345515f53444b5f5250435f4d41585f504f52540000000000000000000000006044830152602082606481865afa91821562014a1a576000926201788a575b508082106201782c577fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a6548015620177d7575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811462013c0b5781600162017612920193847fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a6556201723a565b916001830180931162013c0b5762017636926201762f9162017248565b9062013f7c565b6040517ff877cb1900000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5345515f53444b5f5250435f55524c5f505245464958000000000000000000006044820152600081606481865afa90811562014a1a57600091620177b8575b50604051917ff877cb1900000000000000000000000000000000000000000000000000000000835260206004840152601660248401527f5345515f53444b5f5250435f55524c5f535546464958000000000000000000006044840152600083606481875afa92831562014a1a5760009362017795575b506000906024604051809681937f6900a3ae00000000000000000000000000000000000000000000000000000000835260048301525afa90811562014a1a5762013ceb9360009262017774575b5062016b5d565b6201778d9192503d806000833e62000e5d8183620133b5565b90386201776d565b6000919350620177b0903d8084833e62000e5d8183620133b5565b929062017720565b620177d091503d806000833e62000e5d8183620133b5565b38620176aa565b50604051602081019036600083376201782360208236810160008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282620133b5565b519020620175b7565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e76616c696420706f72742072616e676500000000000000000000000000006044820152fd5b90916020823d602011620178bb575b81620178a860209383620133b5565b8101031262015e0f575051903862017584565b3d915062017899565b906020823d602011620178f3575b81620178e160209383620133b5565b8101031262015e0f575051386201750e565b3d9150620178d2565b61010081015160405160208101818193602081519391019260005b81811062017ca7575050620179549250037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282620133b5565b5190209060ff815116801560001462017b715750906040820151928351916201799a620179818462013419565b93620179916040519586620133b5565b80855262013419565b937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe060208501950136863760005b865181101562017aa25780620179e16001928962013fe9565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e0830152610100820152610100815262017a8b61012082620133b5565b51902062017a9a828862013fe9565b5201620179c8565b5092919450926040519081602081019182945192909260005b81811062017b5757505062017af89250037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282620133b5565b51902091608060608301519201516040519260208401947f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a2865260408501526060840152608083015260a082015260a081526201581a60c082620133b5565b845183526020948501948694509092019160010162017abb565b6001810362017bce575060a0015160208151910120906040519060208201927fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d466845260408301526060820152606081526201581a608082620133b5565b6002810362017c24575060c00151906040519060208201927f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e4845260408301526060820152606081526201581a608082620133b5565b6003810362017c7a575060e00151906040519060208201927fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d466845260408301526060820152606081526201581a608082620133b5565b7f048183200000000000000000000000000000000000000000000000000000000060005260045260246000fd5b845173ffffffffffffffffffffffffffffffffffffffff168352602094850194869450909201916001016201791756fe60808060405234601557611e95908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c63545bbe2a1461002757600080fd5b346101ce5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ce5760043567ffffffffffffffff81116101ce576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126101ce5761009d610264565b906100aa81600401610285565b82526100b8602482016102a2565b6020830152604481013567ffffffffffffffff81116101ce576100e1906004369184010161038e565b6040830152606481013560608301526084810135608083015260a481013567ffffffffffffffff81116101ce5761011e9060043691840101610370565b60a083015260c481013560c083015260e481013560e08301526101048101359067ffffffffffffffff82116101ce57600461015c92369201016104ab565b61010082015260243567ffffffffffffffff81116101ce576101ca916101896101a0923690600401610510565b610191610293565b9161019a6102c7565b9361067e565b604080519586526020860194909452928401919091526060830152608082015290819060a0820190565b0390f35b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff82111761021e57604052565b6101d3565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761021e57604052565b6040519061027461012083610223565b565b6040519061027460e083610223565b359060ff821682036101ce57565b6044359081151582036101ce57565b359081151582036101ce57565b67ffffffffffffffff811161021e5760051b60200190565b6064359073ffffffffffffffffffffffffffffffffffffffff821682036101ce57565b359073ffffffffffffffffffffffffffffffffffffffff821682036101ce57565b92919267ffffffffffffffff821161021e576040519161035360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160184610223565b8294818452818301116101ce578281602093846000960137010152565b9080601f830112156101ce5781602061038b9335910161030b565b90565b81601f820112156101ce578035906103a5826102af565b926103b36040519485610223565b82845260208085019360051b830101918183116101ce5760208101935b8385106103df57505050505090565b843567ffffffffffffffff81116101ce57820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082860301126101ce57610426610276565b91610433602083016102ea565b83526040820135602084015260608201359267ffffffffffffffff84116101ce5760e083610468886020809881980101610370565b60408401526080810135606084015261048360a082016102a2565b608084015261049460c082016102a2565b60a0840152013560c08201528152019401936103d0565b9080601f830112156101ce5781356104c2816102af565b926104d06040519485610223565b81845260208085019260051b8201019283116101ce57602001905b8282106104f85750505090565b60208091610505846102ea565b8152019101906104eb565b9181601f840112156101ce5782359167ffffffffffffffff83116101ce57602083818601950101116101ce57565b6040519061054b82610202565b60006020838281520152565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b906001820180921161059457565b610557565b9190820180921161059457565b909392938483116101ce5784116101ce578101920390565b908160409103126101ce576020604051916105d883610202565b805183520151602082015290565b919082519283825260005b8481106106305750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b806020809284010151828286010152016105f1565b60409073ffffffffffffffffffffffffffffffffffffffff61038b949316815281602082015201906105e6565b6040513d6000823e3d90fd5b909491939291853560f81c6001909381908761069861053e565b9360408089161480610978575b610876575b5050506001808616146108505760028581161460208501526007600286901c1688820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190809691819660201661071a9060051c90565b61072390610586565b8a820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101959098899a8161076f84610c35565b98899361077b936105a6565b9161078593610f60565b909861079991600052602052604060002090565b906107ac91600052602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff166107d591600052602052604060002090565b94815190868215159283610845575b505081610836575b506107f45750565b6040517fccbb534f00000000000000000000000000000000000000000000000000000000815281516004820152602090910151602482015280604481015b0390fd5b905060208201511015386107ec565b1415915086386107e4565b8661086b979294955061086393986105a6565b939092610a54565b919394909293929190565b8a81013560601c985060140192509087908a9084901561089a575b508291506106aa565b60038101955073ffffffffffffffffffffffffffffffffffffffff945081013560e81c9260409261091d9290916108e8916108e19189906108db8983610599565b926105a6565b369161030b565b83519586809481937fccce3bc80000000000000000000000000000000000000000000000000000000083523060048401610645565b0392165afa80156109735761093b92600091610944575b5092610599565b86388981610891565b610966915060403d60401161096c575b61095e8183610223565b8101906105be565b38610934565b503d610954565b610672565b5073ffffffffffffffffffffffffffffffffffffffff8916156106a5565b60405190610120820182811067ffffffffffffffff82111761021e576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b90610a4a90604093969594966060845260608401916109f1565b9460208201520152565b9194929092600095600095600095600095600095610a70610996565b60028152937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9460005b828110610ac757505050505050508051151580610ab9575b6107f45750565b506020810151841115610ab2565b600381019d50959b5093995091975092909190610aeb908b9085013560e81c610599565b958a6000848903610c2f575089915b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c03610bff5750906001610b3489610b3b9487896105a6565b908b61067e565b9c939c9b929b9a919a99909a9b9d8e9d9e8f905b10610bb95750928b885114610bb0575b808b1015610b7e57508a60c08501528992959295949194939093610a9a565b7f37daf62b0000000000000000000000000000000000000000000000000000000060005260048b905260245260446000fd5b60008852610b5f565b8d8f610832610bca85858c8e6105a6565b9390926040519485947fb006aba000000000000000000000000000000000000000000000000000000000865260048601610a30565b9798999a916001610c158b610c1c94888a6105a6565b908661067e565b50929d919c909b929a9092918e8e610b4f565b91610afa565b610c97610cc3610c55610c4f6020850151151530906117dc565b936118d7565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610223565b51902090565b908160209103126101ce57517fffffffff00000000000000000000000000000000000000000000000000000000811681036101ce5790565b60409061038b9492815281602082015201916109f1565b73ffffffffffffffffffffffffffffffffffffffff61038b9593606093835216602082015281604082015201916109f1565b908160209103126101ce575190565b9080602083519182815201916020808360051b8301019401926000915b838310610d8557505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080610df8604085015160e0604086015260e08501906105e6565b936060810151606085015260808101511515608085015260a0810151151560a0850152015191015297019301930191939290610d76565b906020808351928381520192019060005b818110610e4d5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101610e40565b91610f5261038b949260408552610e9660408601825160ff169052565b602081015115156060860152610100610f0b610ec3604084015161012060808a0152610160890190610d59565b606084015160a0890152608084015160c089015260a08401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08983030160e08a01526105e6565b9160c08101518288015260e081015161012088015201517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086830301610140870152610e2f565b9260208185039101526109f1565b9391909360009460009460005b818110610f7b575050505050565b8481013560f881901c9860019092019788979692909160fc1c9889156117755750600189146117355760028914611568576003891461153957600489146114b8576006891461141257600589146113c457600789146112fd57600889146112a7576009891461117e57600a891461101b577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b9091929394959697506003891697881561116d575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190810190816110939187876105a6565b6040517f898bd921000000000000000000000000000000000000000000000000000000008152939184916110cb918a60048501610d01565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa9182156109735761110e9360009361113a575b5060ff909a168091019a611c43565b908015611134579061112891600052602052604060002090565b955b9392919093610f6d565b50611128565b60ff91935061115f9060203d8111611166575b6111578183610223565b810190610d4a565b92906110ff565b503d61114d565b8084013560f81c9850600101611030565b90919293949596975060038916978815611296575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190810190816111f69187876105a6565b6040517f13792a4a0000000000000000000000000000000000000000000000000000000081529391849161122e918b60048501610e79565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa918215610973576112709360009361113a575060ff909a168091019a611c43565b908015611290579061128a91600052602052604060002090565b9561112a565b5061128a565b8084013560f81c9850600101611193565b9850602087019750949593949293919290918201356112c586611bea565b81146112d5575b61127090611c04565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506112cc565b975090919293949597600f169687156113b2575b602060006113236113909a9b86611ab2565b9c9092918a60405161136681610c978a82019485603c917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008252601c8201520190565b51902092604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa15610973576112709060ff6000519a1680910199611af5565b600189019883013560f81c9750611311565b9850602087019750949593949293919290918201358085146113ea575b61127090611bab565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506113e1565b989091929394959662ffffff985061143a611434600c8416603f9060021c1690565b60ff1690565b9182156114a4575b6003168015611493575b9081906114779061146f908781013560e81c906003019c168c01809c89896105a6565b90898b610f60565b91111561148a575b906112709291611b60565b9982019961147f565b50600281019084013560f01c61144c565b8482013560f81c9250600190910190611442565b97509761150e61151b929394959697600f61152393169085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b92908301809386866105a6565b908688610f60565b9061128a92980198600052602052604060002090565b985096509394929391929091908082013590602001968015611290579061128a91600052602052604060002090565b90919293949596975060038916978815611724575b8084013560601c996115dc916014019061159c9060021c600316611434565b9085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9081019061164060208c6115f285858b8b6105a6565b919073ffffffffffffffffffffffffffffffffffffffff8c604051968795869485937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501610d01565b0392165afa908115610973577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000916000916116f6575b5016036116b257509060ff61127092991680910199611af5565b6108326116c38c93899389896105a6565b906040519485947fb2fed7ae00000000000000000000000000000000000000000000000000000000865260048601610d18565b611717915060203d811161171d575b61170f8183610223565b810190610cc9565b38611698565b503d611705565b8381013560f81c985060010161157d565b98600f91929394959697985016968715611764575b60148101976112709160ff9091169084013560601c611af5565b8281013560f81c975060010161174a565b98509091929394959698600f169788156117c7575b506020600061179d6113909a9b86611ab2565b9c90916040519384938c859094939260ff6060936080840197845216602083015260408201520152565b60018101995083013560f81c9750602061178a565b1561188c576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a08152610cc360c082610223565b46906117e5565b805160209091019060005b8181106118ab5750505090565b825173ffffffffffffffffffffffffffffffffffffffff1684526020938401939092019160010161189e565b6101008101516040516118f281610c97602082018095611893565b51902090611901815160ff1690565b60ff81168061197a57505090610cc361191d6040840151611d24565b92610c9760806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b600181036119d857505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46693810193845290810191909152606081019290925290610cc38160808101610c97565b60028103611a2e57505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e460208201908152918101929092526060820192909252610cc38160808101610c97565b600303611a82575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46660208201908152918101929092526060820192909252610cc38160808101610c97565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff81116105945791565b90604051907fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208301937f53657175656e6365207369676e65723a0a000000000000000000000000000000855260601b166031830152604582015260458152610cc3606582610223565b916040519160208301937f53657175656e6365206e657374656420636f6e6669673a0a0000000000000000855260388401526058830152607882015260788152610cc3609882610223565b60405160208101917f53657175656e636520737461746963206469676573743a0a00000000000000008352603882015260388152610cc3605882610223565b610c97610cc3610c55610c4f6000602086015115156117dc565b60405160208101917f53657175656e636520616e792061646472657373207375626469676573743a0a8352604082015260408152610cc3606082610223565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e63652073617069656e7420636f6e6669673a0a00000000000000865260601b166039840152604d830152606d820152606d8152610cc3608d82610223565b8051821015611cc75760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805160209091019060005b818110611d0e5750505090565b8251845260209384019390920191600101611d01565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611d6a611d54836102af565b92611d626040519485610223565b8084526102af565b0136602083013760005b8351811015611e465780611d8a60019286611cb3565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152611e3261012082610223565b519020611e3f8285611cb3565b5201611d74565b50909150604051610cc381610c97602082018095611cf656fea26469706673582212201a9f2861a08bc1996a59ae125a7db061038f3e34d7d2884d636c0442c0f707f164736f6c634300081c0033a264697066735822122090f964d029e459c6b6b579b7839b5826af9c353b1a716b598fccfea452eb3dcb64736f6c634300081c0033","sourceMap":"897:68123:88:-:0;;;;;;;3166:4:5;897:68123:88;;3166:4:5;897:68123:88;;;3166:4:5;897:68123:88;3166:4:5;897:68123:88;;1087:4:16;897:68123:88;;;1087:4:16;897:68123:88;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60a08060405260043610156200001457600080fd5b60006080526080513560e01c908163035082a71462012ac8575080630965d1621462011f765780630a9254e41462011ec55780630e8cc06714620119055780631bc86b7e14620103c45780631d2d5933146200fa2e5780631ed7831c146200f97957806323f1d045146200e7ac57806327181b75146200d81c5780632ade3880146200d63757806339441709146200c7a75780633e5e3c23146200c6f25780633e707bb2146200b9c65780633f7286f4146200b9115780634e07914a146200a3005780635418a2c3146200a2a857806356b9fb3e14620095dd57806366d9a9a0146200946457806366fee9211462008eb257806368193b7f14620084225780637a7c73be1462006f5757806385226c811462006eaf578063916a17c61462006dc5578063960158901462006d3757806397b6de28146200654d578063a81c626314620055a3578063b0464fdc14620054b9578063b4d4462b146200541d578063b5508aa91462005375578063b938827c1462003bec578063ba414fa61462003ba4578063bff915aa14620030f9578063d82c180214620020f2578063e20c9f71146200202c578063e8a63f731462000ef9578063f7647d6b1462000881578063f8aca5ac14620002385763fa7626d414620001ee57600080fd5b3462000232576080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126200023257602060ff601f54166040519015158152f35b60805180fd5b34620002325760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325760043567ffffffffffffffff811162000232576200028c903690600401620134dc565b60243560ff811690819003620002325760443560ff81169290839003620002325760643560ff8116908190036200023257600f600b620002d792620002d18562014a38565b62017282565b620003b260076040948551620002ee8782620133b5565b600c81527f426f756e6420726573756c740000000000000000000000000000000000000000602082015286516200038f816200035c60208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528b6024840152606483019062013935565b886044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282620133b5565b608051916080519151906a636f6e736f6c652e6c6f675afa506080519062017282565b938351620003c18582620133b5565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152845162000462816200042f60208201947fb60e72cc000000000000000000000000000000000000000000000000000000008652896024840152606483019062013935565b896044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282620133b5565b608051916080519151906a636f6e736f6c652e6c6f675afa5060805160ff861691620004919160019162017282565b84516200049f8682620133b5565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152855162000540816200050d60208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528a6024840152606483019062013935565b856044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282620133b5565b608051916080519151906a636f6e736f6c652e6c6f675afa5060ff818116600101908111620008505760ff1690620005868260ff6200057f8662014a26565b1662013f7c565b96600188018098116200085057620005ba620005a28962013454565b98620005b189519a8b620133b5565b808a5262013454565b937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe060208a0195013686378851156200081f5762000639947fff000000000000000000000000000000000000000000000000000000000000006200057f9360fc60e060ff9760051b169160021b161760f81b166080511a905362014a26565b84518110156200081f5760805160fc83901b7ff00000000000000000000000000000000000000000000000000000000000000016901a9085016020015360ff8351917fb2505f7c00000000000000000000000000000000000000000000000000000000602084015216602482015260248152620006b8604482620133b5565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562000232578251907ff28dceb30000000000000000000000000000000000000000000000000000000082526020600483015281806200071660805193602483019062013935565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156200081357620007f6575b506200079a9260a09173ffffffffffffffffffffffffffffffffffffffff601f5460081c169084518096819482937f545bbe2a0000000000000000000000000000000000000000000000000000000084526004840162013f18565b03915afa908115620007eb5750620007b3575b60805180f35b620007d99060a03d60a011620007e3575b620007d08183620133b5565b81019062013d5a565b50505050620007ad565b503d620007c4565b513d608051823e3d90fd5b6080516200080491620133b5565b6080516200023257836200073f565b83513d608051823e3d90fd5b7f4e487b71000000000000000000000000000000000000000000000000000000006080515260326004526024608051fd5b7f4e487b71000000000000000000000000000000000000000000000000000000006080515260116004526024608051fd5b34620002325760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126200023257620008c36006600160043562017282565b6040908151620008d48382620133b5565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152825162000942816200050d60208201947fb60e72cc000000000000000000000000000000000000000000000000000000008652876024840152606483019062013935565b608051916080519151906a636f6e736f6c652e6c6f675afa5062000965620142f7565b6001602082015282516200097a8482620133b5565b6004815260208101927f6e6f6e65000000000000000000000000000000000000000000000000000000008452608051508451907f6900a3ae000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562000eed576080519162000ecd575b508451907f6900a3ae000000000000000000000000000000000000000000000000000000008252602435600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562000ec1576080519262000e9f575b50858051917f6900a3ae0000000000000000000000000000000000000000000000000000000083526001600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562000e935762000cf19762000b219662000bd16009600b9660199562000c279a60029a6080519262000e6e575b50602c809293519d8e809b7f7b226d61784465707468223a000000000000000000000000000000000000000060208301526020815194859301910162013910565b89017f2c2273656564223a2200000000000000000000000000000000000000000000008382015262000b5e82518093602060358501910162013910565b01017f222c226d696e5468726573686f6c644f6e4e6573746564223a000000000000008382015262000b9b82518093602060228501910162013910565b0101917f2c22736b65776564223a2200000000000000000000000000000000000000000085840152518093602484019062013910565b01017f227d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2810184520182620133b5565b62000c8662000c4a737109709ecfa91a80626ff3989d68f67f5b1dd12d62017484565b855194859283927f0199a22000000000000000000000000000000000000000000000000000000000845260606004850152606484019062013935565b93603c8386037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024860152601587527f646576546f6f6c735f72616e646f6d436f6e666967000000000000000000000060208801520160448401528760805195019062013935565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af191821562000813576080519262000e3e575b5062000d839060a062000d3284620171c2565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c16865180809681947f545bbe2a000000000000000000000000000000000000000000000000000000008352876004840162013f51565b03915afa91821562000e3257608051620007ad955093849384929062000def575b509062000dc562000dcc9262000dbf62000dc59697620169dd565b620155d8565b9062016ae3565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b62000dbf955062000dc5945062000dcc925062000e2162000dc59160a03d60a011620007e357620007d08183620133b5565b929950919750945062000da4915050565b84513d608051823e3d90fd5b62000d8391925062000e66903d80608051833e62000e5d8183620133b5565b81019062013c82565b919062000d1f565b602c925062000e8b83913d80608051833e62000e5d8183620133b5565b925062000ae0565b82513d608051823e3d90fd5b62000eb99192503d80608051833e62000e5d8183620133b5565b908662000a64565b86513d608051823e3d90fd5b62000ee691503d80608051833e62000e5d8183620133b5565b8562000a05565b85513d608051823e3d90fd5b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325760043567ffffffffffffffff811162000232576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011262000232576040519062000f7a82620132b7565b806004013567ffffffffffffffff8111620002325762000fa19060043691840101620134dc565b825262000fb16024820162013432565b9060208301918252604481013567ffffffffffffffff8111620002325762000fe090600436918401016201348f565b926040810193845260608101606483013581526080820193608484013585526200100d60a4850162013742565b9560a084019687526200103860e46200102960c4880162013742565b9660c087019788520162013742565b9060e0850191825260036040865101515110737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc7576200200f575b50620010ca855162014a38565b73ffffffffffffffffffffffffffffffffffffffff620010ed8185511662014dd6565b168352620010fc845162014d5c565b84526200110a875162014d5c565b875266ffffffffffffff620011438162001127818c511662014d98565b16808b52826200113b818b511692620142d8565b169062014dad565b168652620011506201450e565b938051604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75773ffffffffffffffffffffffffffffffffffffffff916080519162001feb575b501685528751604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519162001fb5575b5073ffffffffffffffffffffffffffffffffffffffff602087019116815273ffffffffffffffffffffffffffffffffffffffff85511666ffffffffffffff8b51169073ffffffffffffffffffffffffffffffffffffffff88511691604051927f56ca623e000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc75762001385936080519362001f93575b506200137f6002602760405180967f7369676e65723a00000000000000000000000000000000000000000000000000602083015262001329815180926020868601910162013910565b81017f3a310000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2810186520184620133b5565b6201523b565b620013976040880191808352620155d8565b9860808801998a5266ffffffffffffff73ffffffffffffffffffffffffffffffffffffffff8851169151169073ffffffffffffffffffffffffffffffffffffffff84511691604051927f56ca623e000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc757620014e2936080519362001f71575b50620014dc6002602760405180967f7369676e65723a00000000000000000000000000000000000000000000000000602083015262001486815180926020868601910162013910565b81017f3a320000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2810186520184620133b5565b620153ba565b9262001541620014f960608a0195808752620155d8565b9160a08a019283526101c08a019260028451525160c084510152600160208451015251915173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc757608051928392839262001f44575b5060ff6101808b01946101008c01946101408d019485528552168452519173ffffffffffffffffffffffffffffffffffffffff8a511690604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc7576080519262001f22575b505191604051927fb11a19e8000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc7576080519362001f00575b505193604051947fb11a19e8000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa94851562001dc7576080519562001edb575b5060ff90511693604051947f6900a3ae000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc75760016200186c93819362001875986080519262001df7575b5060069060206040519886620017868b9851809285808c01910162013910565b87017f3a686173683a000000000000000000000000000000000000000000000000000083820152620017c2825180938560268501910162013910565b01017f3a0000000000000000000000000000000000000000000000000000000000000083820152620017ff82518093602060078501910162013910565b01017f3a00000000000000000000000000000000000000000000000000000000000000838201526200183c82518093602060028501910162013910565b010103017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282620133b5565b85519162015b1d565b9860c08701998a525192620018a8885173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b604051947fe341eaa400000000000000000000000000000000000000000000000000000000865260048601526024850152606084604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75760805193608051956080519262001e85575b5073ffffffffffffffffffffffffffffffffffffffff9060ff6101a08b01966101208c01986101608d0195865289521686525193511694604051957f56ca623e000000000000000000000000000000000000000000000000000000008752600487015260805186602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa95861562001dc7576080519662001e63575b505190604051917fb11a19e8000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc7576080519262001e41575b505193604051947fb11a19e8000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa94851562001dc7576080519562001e1c575b5060ff90511693604051947f6900a3ae000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc75773ffffffffffffffffffffffffffffffffffffffff96600162001b0693819362001b16996080519262001df7575060069060206040519886620017868b9851809285808c01910162013910565b6020895101511591519262015900565b9260e0850193845266ffffffffffffff6102008601936080518551525116602084510152511662001ba062001bcd604051937fccce3bc80000000000000000000000000000000000000000000000000000000060208601526004855262001b7f602486620133b5565b51604051928391602083019190916020806040830194805184520151910152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282620133b5565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620002325762001c279260405193849283927fb96213e4000000000000000000000000000000000000000000000000000000008452608051956004850162013d15565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562001dc75762001dd4575b509062001ca36101e0939262001cfe9662001c6a62014342565b915162001c778362013f8a565b5262001c838262013f8a565b505162001c908262013fc7565b5262001c9c8162013fc7565b5062016bb3565b928391015260a073ffffffffffffffffffffffffffffffffffffffff601f5460081c1692825160405196879283927f545bbe2a0000000000000000000000000000000000000000000000000000000084526004840162013f18565b0381855afa92831562001dc757608051620007ad969094859283918290819062001d6c575b62000dc59899509262001d6595949262001d5462001d5c9362001d4e66ffffffffffffff9762016962565b62016962565b519062016ae3565b51169062016a69565b5162015714565b50509162000dc5965062001d65935066ffffffffffffff915062001d5c62001d4e62001dad62001d549a60a03d60a011620007e357620007d08183620133b5565b939d50929b50919750939590945092915089905062001d23565b6040513d608051823e3d90fd5b6080519193929162001de691620133b5565b608051620002325790918662001c50565b600691925062001e14903d80608051833e62000e5d8183620133b5565b919062001766565b60ff91955062001e39903d80608051833e62000e5d8183620133b5565b949062001a60565b62001e5b9192503d80608051833e62000e5d8183620133b5565b908d62001a01565b62001e7d9196503d80608051833e62000e5d8183620133b5565b948d620019a2565b90955073ffffffffffffffffffffffffffffffffffffffff945062001ec6915060603d60601162001ed3575b62001ebd8183620133b5565b81019062013cee565b959194909591906200190f565b503d62001eb1565b60ff91955062001ef8903d80608051833e62000e5d8183620133b5565b9490620016f5565b62001f1a9193503d80608051833e62000e5d8183620133b5565b918f62001696565b62001f3c9192503d80608051833e62000e5d8183620133b5565b908f62001637565b9150925062001f65915060603d60601162001ed35762001ebd8183620133b5565b91929091908e620015a4565b62001f8b9193503d80608051833e62000e5d8183620133b5565b918f6200143d565b62001fad9193503d80608051833e62000e5d8183620133b5565b918e620012e0565b62001fdc915060203d60201162001fe3575b62001fd38183620133b5565b810190620141d8565b8a62001224565b503d62001fc7565b62002008915060203d60201162001fe35762001fd38183620133b5565b8b620011c3565b6080516200201d91620133b5565b608051620002325788620010bd565b3462000232576080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011262000232576040518060206015549182815201906015608051527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475906080515b818110620020c557620020c185620020b481870382620133b5565b60405191829182620138be565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff1684526020909301926001928301920162002099565b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325760043567ffffffffffffffff811162000232576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011262000232576040516200217281620132b7565b816004013567ffffffffffffffff8111620002325762002199906004369185010162013757565b8152602482013567ffffffffffffffff81116200023257620021c2906004369185010162013757565b9060208101918252604483013567ffffffffffffffff81116200023257620021f19060043691860101620134dc565b604082019081526200220660648501620137f4565b6060830152620022196084850162013742565b60808301526200222c60a48501620133f7565b60a08301526200224a60e460c084019560c48101358752016201340b565b9260e08301938452610258620022668451518351519062013f7c565b10737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc757620030dc575b50620022e7825162014a38565b620022f3855162014d5c565b93848652604051947fffa186490000000000000000000000000000000000000000000000000000000086526004860152602085602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa94851562001dc75760805195620030b6575b506080515b845180518210156200243a57620023848273ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e56200000000000000000000000000000000000000000000000000000000825273ffffffffffffffffffffffffffffffffffffffff88161415600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc7576200241d575b5060010162002357565b6080516200242b91620133b5565b60805162000232578762002413565b5050919490926080515b845180518210156200252757620024718273ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e56200000000000000000000000000000000000000000000000000000000825273ffffffffffffffffffffffffffffffffffffffff88161415600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc7576200250a575b5060010162002444565b6080516200251891620133b5565b60805162000232578762002500565b50506080519285908790869060605b855180518910156200277757620025638973ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519162002757575b5060ff6020620025d48b8a5162013fe9565b5101511691604051927f6900a3ae000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc75760016200272e926007829683946080519162002737575b50602060405197846200265f8a9651809285808a01910162013910565b85017f7369676e65723a00000000000000000000000000000000000000000000000000838201526200269b825180938560278501910162013910565b01017f3a0000000000000000000000000000000000000000000000000000000000000083820152620026d882518093602060088501910162013910565b01017f20000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1810184520182620133b5565b97019662002536565b6200275091503d80608051833e62000e5d8183620133b5565b8f62002642565b6200277091503d80608051833e62000e5d8183620133b5565b89620025c2565b509386869173ffffffffffffffffffffffffffffffffffffffff604051917f56ca623e000000000000000000000000000000000000000000000000000000008352169687600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc7576080519262003094575b5060ff60a08501511690604051917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576007600192620028f6946080519162003074575b50602060405196846200287d899651809285808a01910162013910565b85017f7369676e65723a0000000000000000000000000000000000000000000000000083820152620028b9825180938560278501910162013910565b01017f3a00000000000000000000000000000000000000000000000000000000000000838201526200183c82518093602060088501910162013910565b95608051965b8551805189101562002ae457620029298973ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519162002ac4575b5060ff60206200299a8b8a5162013fe9565b51015116604051907f6900a3ae000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc7576001936008859262002a9b946080519162002aa4575b506020604051968462002a22899651809285808a01910162013910565b85017f207369676e65723a0000000000000000000000000000000000000000000000008382015262002a5e825180938560288501910162013910565b01017f3a00000000000000000000000000000000000000000000000000000000000000838201526200183c82518093602060098501910162013910565b970196620028fc565b62002abd91503d80608051833e62000e5d8183620133b5565b8e62002a05565b62002add91503d80608051833e62000e5d8183620133b5565b8962002988565b508462002b0a889261ffff60608801511666ffffffffffffff6080890151169062016218565b9362002b34835173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b90825162003028575b5190604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc757608051928392839262002ffb575b50511562002fea5762002bb462014243565b915b604051957f56ca623e000000000000000000000000000000000000000000000000000000008752600487015260805186602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa95861562001dc7576080519662002fc8575b50604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519162002fa8575b50604051917fb11a19e8000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc7576080519262002f86575b5060ff604051947f6900a3ae00000000000000000000000000000000000000000000000000000000865216600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc75762002e6696600162002e129562002d689562002e0395839560a09a6080519462002f58575b509062002d8e60208093816040519c8d8b83829d5194859301910162013910565b890162002d7e8251809385808501910162013910565b0101918281519485920162013910565b017f3a00000000000000000000000000000000000000000000000000000000000000815262002dc7825180936020878501910162013910565b017f3a00000000000000000000000000000000000000000000000000000000000000838201526200183c82518093602060028501910162013910565b60208451015115908662016756565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c1683516040518096819482937f545bbe2a0000000000000000000000000000000000000000000000000000000084526004840162013f51565b03915afa91821562001dc757608051620007ad959093849283918291829162002f01575b509262002ed360ff9362002ebe60a09462000dc562000dc59b9c62000dbf62002edd9b9a61ffff60608a0151169062016a69565b66ffffffffffffff6080840151169062016a69565b0151169062016a69565b5173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b62000dc5975062002edd955060ff935060a0925062000dbf94915062000dc562002ebe62002f4262002ed393863d8811620007e357620007d08183620133b5565b9d50919a50959850965093945062002e8a915050565b6020809392955062002f7b62002d8e923d80608051833e62000e5d8183620133b5565b959293505062002d47565b62002fa09192503d80608051833e62000e5d8183620133b5565b908862002ccc565b62002fc191503d80608051833e62000e5d8183620133b5565b8862002c6f565b62002fe29196503d80608051833e62000e5d8183620133b5565b948862002c12565b62002ff462014206565b9162002bb6565b915092506200301c915060603d60601162001ed35762001ebd8183620133b5565b91929091908862002ba2565b9060405160208101917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008352603c820152603c81526200306a605c82620133b5565b5190209062002b3d565b6200308d91503d80608051833e62000e5d8183620133b5565b8c62002860565b620030ae9192503d80608051833e62000e5d8183620133b5565b9088620027f0565b620030d491955060203d60201162001fe35762001fd38183620133b5565b938662002352565b608051620030ea91620133b5565b608051620002325785620022da565b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325760043567ffffffffffffffff811162000232576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8236030112620002325760405162003179816201333f565b816004013567ffffffffffffffff81116200023257620031a09060043691850101620134dc565b8152620031b06024830162013432565b6020820152620031c36044830162013742565b9060408101918252620031d96064840162013742565b60608201526080810160848401358152620031f760a48501620133f7565b9260a083019384526200320d60c48601620133f7565b9360c0840194855260e486013567ffffffffffffffff811162000232576200323c90600436918901016201348f565b60e08501526200325d61012461010086019761010481013589520162013742565b61012085015260036040855101515110737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75762003b87575b50620032eb62013c3a565b620032f7855162014a38565b66ffffffffffffff6200333281620033128187511662014d0a565b16808652826200332a816101208b0151169262013bcd565b169062014d4e565b1661012086015273ffffffffffffffffffffffffffffffffffffffff6200335f8160208801511662014dd6565b16602086015262003371845162014d5c565b808552604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75773ffffffffffffffffffffffffffffffffffffffff916080519162003b63575b5016815260ff620033fd81885116828551169062014d8a565b16865273ffffffffffffffffffffffffffffffffffffffff60208601511660ff83511666ffffffffffffff85511673ffffffffffffffffffffffffffffffffffffffff84511691604051927f56ca623e000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc7576080519362003b41575b5060ff8a511693604051947f6900a3ae000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa93841562001dc757620035c6956080519562003b17575b506001620035c09160276040519788927f7369676e65723a00000000000000000000000000000000000000000000000000602085015262003553815180926020868801910162013910565b83017f3a00000000000000000000000000000000000000000000000000000000000000838201526200359082518093602060288501910162013910565b010103017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101865285620133b5565b62014eff565b620035d86020830191808352620155d8565b946040830195865251906200360b875173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b604051927fe341eaa400000000000000000000000000000000000000000000000000000000845260048401526024830152606082604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc75760805191608051916080519462003aee575b50519073ffffffffffffffffffffffffffffffffffffffff85511693604051947f56ca623e000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa94851562001dc7576080519562003acc575b50604051917fb11a19e8000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc7576080519262003aaa575b50604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519162003a8a575b5060ff604051947f6900a3ae00000000000000000000000000000000000000000000000000000000865216600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc75760809560016200383493819362003848988a519262003a6e575060069060206040519886620017868b9851809285808c01910162013910565b602089510151159060e08a01519262015900565b97606083019889525191019081515266ffffffffffffff6101208601511660208251015273ffffffffffffffffffffffffffffffffffffffff60208601511662001ba0620038ca604051937fccce3bc80000000000000000000000000000000000000000000000000000000060208601526004855262001b7f602486620133b5565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257620039249260405193849283927fb96213e4000000000000000000000000000000000000000000000000000000008452608051956004850162013d15565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562001dc75762003a51575b50620039ac9260a073ffffffffffffffffffffffffffffffffffffffff601f5460081c1697865190519060405196879283927f545bbe2a0000000000000000000000000000000000000000000000000000000084526004840162013f18565b03818a5afa95861562001dc757608051968795869485939284929062003a04575b5094620007ad9a979462001d5466ffffffffffffff9560ff62000dc59c9a9662001d5c62001d5c978362001d659d51169062016a69565b949a9750979598505092505060a03d60a01162003a49575b62003a288183620133b5565b810162003a359162013d5a565b969996989597909691949193908b620039cd565b503d62003a1c565b60805162003a5f91620133b5565b6080516200023257866200394d565b600691925062001e14903d808d51833e62000e5d8183620133b5565b62003aa391503d80608051833e62000e5d8183620133b5565b8c620037a5565b62003ac49192503d80608051833e62000e5d8183620133b5565b908c62003748565b62003ae69195503d80608051833e62000e5d8183620133b5565b938c620036eb565b9150925062003b0f915060603d60601162001ed35762001ebd8183620133b5565b928b62003673565b620035c091955062003b386001913d80608051833e62000e5d8183620133b5565b95915062003508565b62003b5b9193503d80608051833e62000e5d8183620133b5565b918b620034a0565b62003b80915060203d60201162001fe35762001fd38183620133b5565b89620033e4565b60805162003b9591620133b5565b608051620002325786620032e0565b3462000232576080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126200023257602062003be262014937565b6040519015158152f35b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325760043567ffffffffffffffff8111620002325762003c40903690600401620134dc565b62003c4b8162014a38565b60405190610340820182811067ffffffffffffffff82111762005344576040526080518252608051602083015260805160408301526080516060830152608051608083015260805160a0830152606060c0830152606060e0830152606061010083015260805161012083015260805161014083015260805161016083015262003cd3620142f7565b61018083015262003ce3620142f7565b6101a083015260606101c083015260606101e083015260606102008301526080516102208301526080516102408301526080516102608301526080516102808301526080516102a08301526080516102c08301526080516102e08301526080516103008301526080516103208301526001606083015260026080830152600360a08301526040517fffa1864900000000000000000000000000000000000000000000000000000000815260016004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75773ffffffffffffffffffffffffffffffffffffffff916080519162005320575b501682526080820151604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75773ffffffffffffffffffffffffffffffffffffffff9160805191620052fc575b5016602083015260a0820151604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75773ffffffffffffffffffffffffffffffffffffffff9160805191620052d8575b5016604083015273ffffffffffffffffffffffffffffffffffffffff825116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75762003ff19160805191620052b8575b5062003feb6002602760405180947f7369676e65723a00000000000000000000000000000000000000000000000000602083015262003f95815180926020868601910162013910565b81017f3a310000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2810184520182620133b5565b620163f1565b60c083015273ffffffffffffffffffffffffffffffffffffffff602083015116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519162005298575b5073ffffffffffffffffffffffffffffffffffffffff835116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576002600a602793620041eb936080519162005278575b5060405194859160208301977f7369676e65723a00000000000000000000000000000000000000000000000000895262004132815180926020868801910162013910565b83017f3a33200000000000000000000000000000000000000000000000000000000000838201527f7369676e65723a00000000000000000000000000000000000000000000000000602a8201526200419582518093602060318501910162013910565b01017f3a320000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2810184520182620133b5565b6040517f6900a3ae0000000000000000000000000000000000000000000000000000000081526001600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519162005258575b50604051927f6900a3ae0000000000000000000000000000000000000000000000000000000084526002600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc757620043cc946080519462005224575b5062004374926010600293601b9362000bd1602e604051998a967f7b227468726573686f6c64223a22000000000000000000000000000000000000602089015262004301815180926020868c01910162013910565b87017f222c22636865636b706f696e74223a2200000000000000000000000000000000838201526200433e825180936020603e8501910162013910565b0101917f222c2266726f6d223a22666c6174222c22636f6e74656e74223a22000000000085840152518093602b84019062013910565b62004393737109709ecfa91a80626ff3989d68f67f5b1dd12d62017484565b90604051809381927f0199a220000000000000000000000000000000000000000000000000000000008352608051946004840162014ea1565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811562001dc7576080519162005204575b5060e083015273ffffffffffffffffffffffffffffffffffffffff604083015116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc75760805191620051e4575b5073ffffffffffffffffffffffffffffffffffffffff60208401511690604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc757620045ab9260805192620051b7575b506002600a620045a59260276040519586927f7369676e65723a00000000000000000000000000000000000000000000000000602085015262004542815180926020868801910162013910565b83017f3a32200000000000000000000000000000000000000000000000000000000000838201527f7369676e65723a00000000000000000000000000000000000000000000000000602a8201526200419582518093602060318501910162013910565b6201651e565b610100830152620045c060c0830151620155d8565b610120830152620045d560e0830151620155d8565b610140830152620045eb610100830151620155d8565b61016083015260026101808301515260026101a08301515261014082015160c0610180840151015261016082015160c06101a084015101526060820151610180830151906200465773ffffffffffffffffffffffffffffffffffffffff601f5460081c16809362015714565b604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75760805160ff9290918291829162005190575b50610260870152610240860152166102208401526080830151620046e8826101a086015162015714565b604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75760805160ff9290918291829162005169575b506102c08701526102a0860152166102808401526200477460a0840151918362015714565b604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75760805160ff9290918291829162005142575b50610320860152610300850152166102e083015261010082015173ffffffffffffffffffffffffffffffffffffffff60408401511690604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc7576080519262005120575b50610300840151604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519162005100575b5061032085015192604051937fb11a19e8000000000000000000000000000000000000000000000000000000008552600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa93841562001dc75760805194620050de575b5060ff6102e08701511693604051947f6900a3ae000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc7576001620049c8938193620049d5986080519262001df7575060069060206040519886620017868b9851809285808c01910162013910565b6020840151159162016756565b6101c083015260c082015173ffffffffffffffffffffffffffffffffffffffff83511690604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc75760805192620050bc575b5061024084015190604051917fb11a19e8000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc757608051926200509a575b5061026085015192604051937fb11a19e8000000000000000000000000000000000000000000000000000000008552600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa93841562001dc7576080519462005078575b5060ff6102208701511693604051947f6900a3ae000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc757600162004c9893819362004c9e986080519262004fef575b506006906020604051998662004bb28c9851809285808c01910162013910565b87017f3a686173683a00000000000000000000000000000000000000000000000000008382015262004bee825180938560268501910162013910565b01017f3a000000000000000000000000000000000000000000000000000000000000008382015262004c2b82518093602060078501910162013910565b01017f3a000000000000000000000000000000000000000000000000000000000000008382015262004c6882518093602060028501910162013910565b010103017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101845283620133b5565b6201689f565b6101e083015260e08201519073ffffffffffffffffffffffffffffffffffffffff60208401511691604051927f56ca623e000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc7576080519362005056575b506102a0840151604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519162005036575b506102c085015191604051927fb11a19e8000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc7576080519362005014575b5060ff6102808701511692604051937f6900a3ae000000000000000000000000000000000000000000000000000000008552600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc75762004f4396600162004c9893819362004e82986080519262004fef57506006906020604051998662004bb28c9851809285808c01910162013910565b61020084015262004eef62004e966201439f565b6101c085015162004ea78262013f8a565b5262004eb38162013f8a565b5061020085015162004ec58262013fc7565b5262004ed18162013fc7565b506101e085015162004ee38262013fd8565b5262001c9c8162013fd8565b60a073ffffffffffffffffffffffffffffffffffffffff601f5460081c1691604051809581927f545bbe2a000000000000000000000000000000000000000000000000000000008352866004840162013f51565b0381845afa91821562001dc757608051620007ad959093849182918290819062004f9c575b62000dc597985062001d4e9262004f8d62004f9696959362001d4e6101209462016962565b01519062016ae3565b62015714565b5050905062000dc5945062004f96915062001d4e62001d4e61012062004fd762004f8d9960a03d60a011620007e357620007d08183620133b5565b939c50929a5091965090949350915088905062004f68565b60069192506200500c903d80608051833e62000e5d8183620133b5565b919062004b92565b6200502e9193503d80608051833e62000e5d8183620133b5565b918662004de9565b6200504f91503d80608051833e62000e5d8183620133b5565b8562004d85565b620050709193503d80608051833e62000e5d8183620133b5565b918462004d22565b620050929194503d80608051833e62000e5d8183620133b5565b928662004b1d565b620050b49192503d80608051833e62000e5d8183620133b5565b908562004ab9565b620050d69192503d80608051833e62000e5d8183620133b5565b908462004a55565b620050f89194503d80608051833e62000e5d8183620133b5565b928662004934565b6200511991503d80608051833e62000e5d8183620133b5565b85620048d0565b6200513a9192503d80608051833e62000e5d8183620133b5565b90846200486d565b91505062005162915060603d60601162001ed35762001ebd8183620133b5565b86620047db565b91505062005189915060603d60601162001ed35762001ebd8183620133b5565b876200474f565b915050620051b0915060603d60601162001ed35762001ebd8183620133b5565b87620046be565b620045a5919250600a620051da6002923d80608051833e62000e5d8183620133b5565b93925050620044f5565b620051fd91503d80608051833e62000e5d8183620133b5565b8362004477565b6200521d91503d80608051833e62000e5d8183620133b5565b83620043fa565b601b9194509260106002936200524b62004374963d80608051833e62000e5d8183620133b5565b96935093505092620042ac565b6200527191503d80608051833e62000e5d8183620133b5565b8562004248565b6200529191503d80608051833e62000e5d8183620133b5565b88620040ee565b620052b191503d80608051833e62000e5d8183620133b5565b836200406d565b620052d191503d80608051833e62000e5d8183620133b5565b8462003f4c565b620052f5915060203d60201162001fe35762001fd38183620133b5565b8462003ecd565b62005319915060203d60201162001fe35762001fd38183620133b5565b8462003e51565b6200533d915060203d60201162001fe35762001fd38183620133b5565b8462003dd8565b7f4e487b71000000000000000000000000000000000000000000000000000000006080515260416004526024608051fd5b3462000232576080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126200023257601954620053b58162013419565b90620053c56040519283620133b5565b80825260208201601960805152602060805120608051915b838310620053fd5760405160208082528190620020c1908201886201397a565b6001602081926200540e85620143fc565b815201920192019190620053dd565b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325762005458620142f7565b6001602082015260409062000d83620054ab8351620054788582620133b5565b600581527f7269676874000000000000000000000000000000000000000000000000000000602082015260043562016eb9565b9160a062000d3284620171c2565b3462000232576080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126200023257601c54620054f98162013419565b90620055096040519283620133b5565b80825260208201601c608051527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211608051915b838310620055545760405180620020c1878262013b24565b6002602060019260405162005569816201337b565b73ffffffffffffffffffffffffffffffffffffffff8654168152620055908587016201467c565b838201528152019201920191906200553c565b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325760043567ffffffffffffffff81116200023257620055f7903690600401620139f5565b60036040825101515110737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75762006530575b5062005681815162014a38565b602081019073ffffffffffffffffffffffffffffffffffffffff620056a98184511662014dd6565b1682526060810191620056bd835162014d5c565b83526080820191620056d0835162014d5c565b835260a0810191620056fa66fffffffffffffe600166ffffffffffffff8651166080515062017282565b9466ffffffffffffff6040968751620057148982620133b5565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152885162005782816200050d60208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528d6024840152606483019062013935565b608051916080519151906a636f6e736f6c652e6c6f675afa50169182855266ffffffffffffff620057c160c0860194826200113b8188511692620142d8565b16835260e0840166ffffffffffffff620057e781835116826200332a818b511662013bcd565b168152620057f46201450e565b9280518951907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620065245773ffffffffffffffffffffffffffffffffffffffff916080519162006500575b501684528888518151907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562000e935760805191620064dc575b5073ffffffffffffffffffffffffffffffffffffffff602087019116815273ffffffffffffffffffffffffffffffffffffffff85511666ffffffffffffff8a51169073ffffffffffffffffffffffffffffffffffffffff885116918451927f56ca623e000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562000eed57620059ca9360805193620064ba575b506200137f60026027885180967f7369676e65723a00000000000000000000000000000000000000000000000000602083015262001329815180926020868601910162013910565b92620059dc83880194808652620155d8565b976080880198895266ffffffffffffff73ffffffffffffffffffffffffffffffffffffffff8851169151169073ffffffffffffffffffffffffffffffffffffffff845116918551927f56ca623e000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562000ec15762005ac9936080519362006498575b50620014dc60026027895180967f7369676e65723a00000000000000000000000000000000000000000000000000602083015262001486815180926020868601910162013910565b9362005b2862005ae060608a0196808852620155d8565b9260a08a019384526101c08a019360028551525160c085510152600160208551015251925173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b8451927fe341eaa400000000000000000000000000000000000000000000000000000000845260048401526024830152606082604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562000e32576080519160805191608051946200646f575b5060ff6101808b01936101008c01936101408d019687528452168352519073ffffffffffffffffffffffffffffffffffffffff8a5116908651917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620063fa57608051926200644d575b5051938651947fb11a19e8000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa948515620063fa57608051956200642b575b5051928651937fb11a19e8000000000000000000000000000000000000000000000000000000008552600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa938415620063fa576080519462006406575b5060ff905116928651937f6900a3ae000000000000000000000000000000000000000000000000000000008552600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620063fa57600162005e5293819362005e5f9760805192620063d5575b5060069060208c519a8662005d6c8d9851809285808c01910162013910565b87017f3a686173683a00000000000000000000000000000000000000000000000000008382015262005da8825180938560268501910162013910565b01017f3a000000000000000000000000000000000000000000000000000000000000008382015262005de582518093602060078501910162013910565b01017f3a000000000000000000000000000000000000000000000000000000000000008382015262005e2282518093602060028501910162013910565b010103017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101855284620133b5565b848b019283519162015b1d565b9a60c088019b8c52519362005e928a5173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b8451957fe341eaa400000000000000000000000000000000000000000000000000000000875260048701526024860152606085604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562000e3257889060805160805197608051946200638f575b509060ff73ffffffffffffffffffffffffffffffffffffffff926101a085019961016061012087019601968752855216885251945116908551917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562000ec157608051926200636d575b5051918551927fb11a19e8000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562000ec157608051936200634b575b5051958551967fb11a19e8000000000000000000000000000000000000000000000000000000008852600488015260805187602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa96871562000ec1576080519762006326575b5060ff905116958551967f6900a3ae000000000000000000000000000000000000000000000000000000008852600488015260805187602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562000ec1576001620060fd97620060ed94829473ffffffffffffffffffffffffffffffffffffffff9b6080519262006300575b50602060069293519886620017868b9851809285808c01910162013910565b60208a5101511591519262015900565b9260e0850193845266ffffffffffffff610100880151936102008701948551525116602084510152511662001ba0620061898a51937fccce3bc80000000000000000000000000000000000000000000000000000000060208601526004855262006169602486620133b5565b518b51928391602083019190916020806040830194805184520151910152565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257620061e2928a5193849283927fb96213e4000000000000000000000000000000000000000000000000000000008452608051956004850162013d15565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015620062f457620062cf575b5090620062266101e0949392620062809762001c6a62014342565b938491015260a073ffffffffffffffffffffffffffffffffffffffff601f5460081c16938351885197889283927f545bbe2a0000000000000000000000000000000000000000000000000000000084526004840162013f18565b0381865afa93841562000ec157608051620007ad975094859283918290819062001d6c5762000dc59899509262001d6595949262001d5462001d5c9362001d4e66ffffffffffffff9762016962565b6080519194939291620062e291620133b5565b6080516200023257909192876200620b565b88513d608051823e3d90fd5b600692506200631e6020913d80608051833e62000e5d8183620133b5565b9250620060ce565b60ff91975062006343903d80608051833e62000e5d8183620133b5565b969062006048565b620063659193503d80608051833e62000e5d8183620133b5565b918f62005fea565b620063879192503d80608051833e62000e5d8183620133b5565b908f62005f8c565b73ffffffffffffffffffffffffffffffffffffffff92985060ff9450620063c8915060603d60601162001ed35762001ebd8183620133b5565b9098909490925062005efa565b6006919250620063f2903d80608051833e62000e5d8183620133b5565b919062005d4d565b87513d608051823e3d90fd5b60ff91945062006423903d80608051833e62000e5d8183620133b5565b939062005cdd565b620064459195503d80608051833e62000e5d8183620133b5565b933862005c7f565b620064679192503d80608051833e62000e5d8183620133b5565b903862005c21565b9150925062006490915060603d60601162001ed35762001ebd8183620133b5565b928f62005b8f565b620064b29193503d80608051833e62000e5d8183620133b5565b913862005a81565b620064d49193503d80608051833e62000e5d8183620133b5565b918f62005982565b620064f9915060203d60201162001fe35762001fd38183620133b5565b8b620058c7565b6200651d915060203d60201162001fe35762001fd38183620133b5565b8b62005866565b8a513d608051823e3d90fd5b6080516200653e91620133b5565b60805162000232578162005674565b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325760043567ffffffffffffffff811162000232576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8236030112620002325760405190620065ce82620132b7565b806004013567ffffffffffffffff81116200023257620065f59060043691840101620134dc565b8252620066056024820162013432565b6020830152620066186044820162013742565b91604081019283526200662e6064830162013742565b606082015260808101608483013581526200664c60a48401620133f7565b9360a083019485526200666260c48501620133f7565b9360c0840194855260e48101359067ffffffffffffffff8211620002325760046200669192369201016201348f565b60e084015260036040845101515110737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75762006d1a575b506200671e62013c3a565b946200672b845162014a38565b73ffffffffffffffffffffffffffffffffffffffff620067518160208701511662014dd6565b16602085015262006763835162014d5c565b808452604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75773ffffffffffffffffffffffffffffffffffffffff916080519162006cf6575b5016865260ff620067ef81875116828451169062014d8a565b16855273ffffffffffffffffffffffffffffffffffffffff60208501511660ff82511666ffffffffffffff84511673ffffffffffffffffffffffffffffffffffffffff89511691604051927f56ca623e000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc7576080519362006cd4575b5060ff89511693604051947f6900a3ae000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa93841562001dc75762006944956080519562003b1757506001620035c09160276040519788927f7369676e65723a00000000000000000000000000000000000000000000000000602085015262003553815180926020868801910162013910565b620069566020880191808352620155d8565b9360408801948552519062006989865173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b604051927fe341eaa400000000000000000000000000000000000000000000000000000000845260048401526024830152606082604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc75760805191608051916080519462006cab575b50519073ffffffffffffffffffffffffffffffffffffffff8a511693604051947f56ca623e000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa94851562001dc7576080519562006c89575b50604051917fb11a19e8000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc7576080519262006c67575b50604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519162006c47575b5060ff604051947f6900a3ae00000000000000000000000000000000000000000000000000000000865216600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc757608095600162006bb293819362006bc6988a519262003a6e575060069060206040519886620017868b9851809285808c01910162013910565b602088510151159060e08901519262015900565b96606081019788520160805181515266ffffffffffffff60608601511660208251015273ffffffffffffffffffffffffffffffffffffffff60208601511662001ba0620038ca604051937fccce3bc80000000000000000000000000000000000000000000000000000000060208601526004855262001b7f602486620133b5565b62006c6091503d80608051833e62000e5d8183620133b5565b8b62006b23565b62006c819192503d80608051833e62000e5d8183620133b5565b908b62006ac6565b62006ca39195503d80608051833e62000e5d8183620133b5565b938b62006a69565b9150925062006ccc915060603d60601162001ed35762001ebd8183620133b5565b928a620069f1565b62006cee9193503d80608051833e62000e5d8183620133b5565b918a62006892565b62006d13915060203d60201162001fe35762001fd38183620133b5565b88620067d6565b60805162006d2891620133b5565b60805162000232578562006713565b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325762006d72620142f7565b6001602082015260409062000d83620054ab835162006d928582620133b5565b600481527f6c65667400000000000000000000000000000000000000000000000000000000602082015260043562016eb9565b3462000232576080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126200023257601d5462006e058162013419565b9062006e156040519283620133b5565b80825260208201601d608051527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f608051915b83831062006e605760405180620020c1878262013b24565b6002602060019260405162006e75816201337b565b73ffffffffffffffffffffffffffffffffffffffff865416815262006e9c8587016201467c565b8382015281520192019201919062006e48565b3462000232576080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126200023257601a5462006eef8162013419565b9062006eff6040519283620133b5565b80825260208201601a60805152602060805120608051915b83831062006f375760405160208082528190620020c1908201886201397a565b60016020819262006f4885620143fc565b81520192019201919062006f17565b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325760043567ffffffffffffffff8111620002325760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8236030112620002325760405162006fd68162013322565b816004013567ffffffffffffffff8111620002325762006ffd9060043691850101620134dc565b80825260208201602484013581526200704a604084019260448601358452606486013560608601526084860135608086015260a486013560a086015260c460c08601960135865262014a38565b62007059608084015162014dc1565b60808401526200706d60a084015162014dc1565b60a08401526200707e845162014dc1565b80855260a08401516080850151811162008416575b81116200840a575b50620070a6620145ac565b90620070b3815162014d5c565b8152620070c1835162014d5c565b8352620070d2606085015162014d5c565b60608501528051604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75773ffffffffffffffffffffffffffffffffffffffff9160805191620083e6575b501682528251604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75773ffffffffffffffffffffffffffffffffffffffff9160805191620083c2575b501660208301526060840151604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75773ffffffffffffffffffffffffffffffffffffffff91608051916200839e575b50166040830152608084015173ffffffffffffffffffffffffffffffffffffffff83511690604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576200736692608051926200837c575b50620073606002602760405180957f7369676e65723a0000000000000000000000000000000000000000000000000060208301526200730a815180926020868601910162013910565b81017f3a310000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2810185520183620133b5565b6201664b565b606083015260a084015173ffffffffffffffffffffffffffffffffffffffff602084015116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc757608051916200835c575b506040519062007488600260278460208101947f7369676e65723a00000000000000000000000000000000000000000000000000865262007432815180926020868601910162013910565b81017f3a320000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2810185520183620133b5565b6040517f6900a3ae0000000000000000000000000000000000000000000000000000000081526002600482015260805190919082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc757608051926200833a575b50604051937f6900a3ae000000000000000000000000000000000000000000000000000000008552600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc7576200759e946080519462005224575062004374926010600293601b9362000bd1602e604051998a967f7b227468726573686f6c64223a22000000000000000000000000000000000000602089015262004301815180926020868c01910162013910565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811562001dc757608051916200831a575b506080830152845173ffffffffffffffffffffffffffffffffffffffff60408401511690604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc757620076f09260805192620082f8575b50620073606002602760405180957f7369676e65723a0000000000000000000000000000000000000000000000000060208301526200769a815180926020868601910162013910565b81017f3a330000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2810185520183620133b5565b60a083015261012082016002815152610140830191600283515260e084015160c08351015261010084015160c084510152519051936200774d73ffffffffffffffffffffffffffffffffffffffff601f5460081c16809662015714565b604051927fe341eaa400000000000000000000000000000000000000000000000000000000845260048401526024830152606082604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc75760ff8692620077db94608051916080519160805191620082d1575b506102008901526101e0880152166101c086015251925162015714565b604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc7576080519384928391620082a2575b5060ff9061024085019361026086019687528452166102208401526200786c606086015191865162015714565b604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc75760805191829182916200827b575b5060ff6102808601936102a08701936102c08801938452845216835260a08501519173ffffffffffffffffffffffffffffffffffffffff60408701511690604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc7576080519262008259575b505191604051927fb11a19e8000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc7576080519362008237575b505193604051947fb11a19e8000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa94851562001dc7576080519562008212575b5060ff90511693604051947f6900a3ae000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc757600162007ab893819362007ac6986080519262001df7575060069060206040519886620017868b9851809285808c01910162013910565b602087510151159162016756565b916101608101928352606081015173ffffffffffffffffffffffffffffffffffffffff82511690604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc75760805192620081f0575b506101e083015190604051917fb11a19e8000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc75760805192620081ce575b5061020084015192604051937fb11a19e8000000000000000000000000000000000000000000000000000000008552600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa93841562001dc75760805194620081ac575b5060ff6101c08601511693604051947f6900a3ae000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc757600162004c9893819362007ca5986080519262004fef57506006906020604051998662004bb28c9851809285808c01910162013910565b916101808201928352608082015173ffffffffffffffffffffffffffffffffffffffff60208401511691604051927f56ca623e000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc757608051936200818a575b505195604051967fb11a19e8000000000000000000000000000000000000000000000000000000008852600488015260805187602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa96871562001dc7576080519762008168575b505195604051967fb11a19e8000000000000000000000000000000000000000000000000000000008852600488015260805187602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa96871562001dc7576080519762008146575b5060ff6102208501511691604051927f6900a3ae000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75760016101a0958162004c989362007ed29c62007e84986080519262004fef57506006906020604051998662004bb28c9851809285808c01910162013910565b910190815262007e936201439f565b925162007ea08462013f8a565b5262007eac8362013f8a565b505162007eb98362013fc7565b5262007ec58262013fc7565b505162004ee38262013fd8565b915160a082015190818111156200804d575050608081015160a0820151604051917f37daf62b000000000000000000000000000000000000000000000000000000006020840152602483015260448201526044815262007f34606482620133b5565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907ff28dceb300000000000000000000000000000000000000000000000000000000825260206004830152818062007f9360805193602483019062013935565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562001dc75762008030575b506200801a9160a0915b73ffffffffffffffffffffffffffffffffffffffff601f5460081c1690516040518095819482937f545bbe2a0000000000000000000000000000000000000000000000000000000084526004840162013f51565b03915afa801562001dc757620007b35760805180f35b6080516200803e91620133b5565b60805162000232578262007fbc565b604051917f37daf62b000000000000000000000000000000000000000000000000000000006020840152602483015260448201526044815262008092606482620133b5565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907ff28dceb3000000000000000000000000000000000000000000000000000000008252602060048301528180620080f160805193602483019062013935565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562001dc75762008129575b506200801a9160a09162007fc6565b6080516200813791620133b5565b6080516200023257826200811a565b620081609197503d80608051833e62000e5d8183620133b5565b958962007de9565b620081829197503d80608051833e62000e5d8183620133b5565b958962007d8a565b620081a49193503d80608051833e62000e5d8183620133b5565b918962007d2b565b620081c69194503d80608051833e62000e5d8183620133b5565b928a62007c11565b620081e89192503d80608051833e62000e5d8183620133b5565b908962007bad565b6200820a9192503d80608051833e62000e5d8183620133b5565b908862007b49565b60ff9195506200822f903d80608051833e62000e5d8183620133b5565b949062007a28565b620082519193503d80608051833e62000e5d8183620133b5565b918a620079c9565b620082739192503d80608051833e62000e5d8183620133b5565b908a6200796a565b9150506200829b915060603d60601162001ed35762001ebd8183620133b5565b88620078d0565b905060ff9450620082c691925060603d60601162001ed35762001ebd8183620133b5565b94909291906200783f565b915050620082f1915060603d60601162001ed35762001ebd8183620133b5565b8c620077be565b620083129192503d80608051833e62000e5d8183620133b5565b908862007651565b6200833391503d80608051833e62000e5d8183620133b5565b86620075cc565b620083549192503d80608051833e62000e5d8183620133b5565b9089620074e8565b6200837591503d80608051833e62000e5d8183620133b5565b87620073e7565b620083969192503d80608051833e62000e5d8183620133b5565b9088620072c1565b620083bb915060203d60201162001fe35762001fd38183620133b5565b876200723b565b620083df915060203d60201162001fe35762001fd38183620133b5565b87620071bf565b62008403915060203d60201162001fe35762001fd38183620133b5565b8762007149565b60a0840152846200709b565b80608086015262007093565b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325760043567ffffffffffffffff811162000232576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126200023257604051620084a281620132b7565b816004013567ffffffffffffffff81116200023257620084c99060043691850101620134dc565b8152620084d96024830162013432565b6020820152604482013567ffffffffffffffff811162000232576200850590600436918501016201348f565b6040820152620085186064830162013742565b60608201526080810191608481013583526200853760a48201620133f7565b9260a0830193845260e46200854f60c48401620133f7565b9260c0850193845201359360e0840194808652737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e5620000000000000000000000000000000000000000000000000000000082521515600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75762008e95575b50620085e4845162014a38565b66ffffffffffffff620085fd8160608701511662014dc1565b16606085015273ffffffffffffffffffffffffffffffffffffffff620086298160208701511662014dd6565b1660208501526200863b825162014d5c565b825260ff6200865281855116828451169062014d8a565b1683526200865f62013c3a565b928251604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75773ffffffffffffffffffffffffffffffffffffffff916080519162008e71575b50169081855260ff73ffffffffffffffffffffffffffffffffffffffff60208801511693511666ffffffffffffff60608801511691604051937f56ca623e000000000000000000000000000000000000000000000000000000008552600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa93841562001dc7576080519462008e4c575b5060ff90511693604051947f6900a3ae000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa93841562001dc75762008815956080519562003b1757506001620035c09160276040519788927f7369676e65723a00000000000000000000000000000000000000000000000000602085015262003553815180926020868801910162013910565b90620088286020840192808452620155d8565b80604085015285511415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75762008e2f575b505190620088d1845173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b604051927fe341eaa400000000000000000000000000000000000000000000000000000000845260048401526024830152606082604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc75760805191608051916080519462008e06575b50519073ffffffffffffffffffffffffffffffffffffffff85511693604051947f56ca623e000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa94851562001dc7576080519562008de4575b50604051917fb11a19e8000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc7576080519262008dc2575b50604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519162008da2575b5060ff604051947f6900a3ae00000000000000000000000000000000000000000000000000000000865216600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc757608095600162008afa93819362008b0e988a519262003a6e575060069060206040519886620017868b9851809285808c01910162013910565b602086510151159060408701519262015900565b93606083019485525191019081515266ffffffffffffff60608301511660208251015273ffffffffffffffffffffffffffffffffffffffff602083015116604051907fccce3bc80000000000000000000000000000000000000000000000000000000060208301526004825262008b87602483620133b5565b8251604080518251602080830191909152909201519082015262008baf816060810162001ba0565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620002325762008c099260405193849283927fb96213e4000000000000000000000000000000000000000000000000000000008452608051956004850162013d15565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562001dc75762008d85575b50516040517fccbb534f000000000000000000000000000000000000000000000000000000006020808301919091528251602483015290910151604482015262008c80816064810162001ba0565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907ff28dceb300000000000000000000000000000000000000000000000000000000825260206004830152818062008cdf60805193602483019062013935565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562001dc75762008d68575b506200801a9160a09173ffffffffffffffffffffffffffffffffffffffff601f5460081c1690519151916040518095819482937f545bbe2a0000000000000000000000000000000000000000000000000000000084526004840162013f18565b60805162008d7691620133b5565b60805162000232578262008d08565b60805162008d9391620133b5565b60805162000232578362008c32565b62008dbb91503d80608051833e62000e5d8183620133b5565b8862008a6b565b62008ddc9192503d80608051833e62000e5d8183620133b5565b908862008a0e565b62008dfe9195503d80608051833e62000e5d8183620133b5565b9388620089b1565b9150925062008e27915060603d60601162001ed35762001ebd8183620133b5565b928762008939565b60805162008e3d91620133b5565b608051620002325785620088a5565b60ff91945062008e69903d80608051833e62000e5d8183620133b5565b939062008763565b62008e8e915060203d60201162001fe35762001fd38183620133b5565b88620086d2565b60805162008ea391620133b5565b608051620002325785620085d7565b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325760043567ffffffffffffffff8111620002325762008f0690369060040162013804565b62008f12815162014a38565b62008f3b815173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b6080519190602082019060605b82518051861015620090a15762008f758673ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519162009081575b5060ff602062008fe688875162013fe9565b5101511690604051917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576001936200905693608051936200905f575b5062014017565b94019362008f48565b620090799193503d80608051833e62000e5d8183620133b5565b91896200904f565b6200909a91503d80608051833e62000e5d8183620133b5565b8662008fd4565b848383604051907fb11a19e800000000000000000000000000000000000000000000000000000000825282600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc757608051926200943a575b50600a62009164916020604096959651948262009128879451809285808801910162013910565b83017f7375626469676573743a00000000000000000000000000000000000000000000838201526200183c8251809385602a8501910162013910565b6080519260408301915b82518051861015620092c7576200919b8673ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc75760805191620092a7575b5060ff60206200920c88875162013fe9565b5101511690604051917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576001936200927c936080519362009285575b5062014111565b9401936200916e565b6200929f9193503d80608051833e62000e5d8183620133b5565b918962009275565b620092c091503d80608051833e62000e5d8183620133b5565b86620091fa565b50836200937e83606083019060a0620092f761ffff84511696608087019766ffffffffffffff8951169062016218565b62009329620093226020885101511560405162009316602082620133b5565b60805181528462016756565b91620155d8565b9573ffffffffffffffffffffffffffffffffffffffff601f5460081c1690516040518097819482937f545bbe2a0000000000000000000000000000000000000000000000000000000084526004840162013f51565b03915afa801562001dc757620007ad956080519360805191608051956080519260805195620093e0575b620093da979850620093d49262001d5c620093da96959361ffff66ffffffffffffff9451169062016a69565b620168bb565b62016ae3565b945050620093da9550620093da925061ffff9150620093d49066ffffffffffffff6200942162001d5c9960a03d60a011620007e357620007d08183620133b5565b919c508c9b5090989197509550929350919050620093a8565b620091649192506200945b600a913d80608051833e62000e5d8183620133b5565b92915062009101565b3462000232576080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126200023257601b54620094a48162013419565b90620094b46040519283620133b5565b808252602082019081601b608051527f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1608051915b8383106200959b57848660405191829160208301906020845251809152604083019060408160051b8501019291608051905b8282106200952b57505050500390f35b919360206200958a827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc060019597998495030186528851908362009579835160408452604084019062013935565b920151908481840391015262013acc565b96019201920185949391926200951b565b60026020600192604051620095b0816201337b565b620095bb86620143fc565b8152620095ca8587016201467c565b83820152815201920192019190620094e9565b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325760043567ffffffffffffffff811162000232576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011262000232576040516200965d8162013304565b816004013567ffffffffffffffff8111620002325762009684906004369185010162013757565b8152602482013567ffffffffffffffff81116200023257620096ad906004369185010162013757565b60208201908152604483013567ffffffffffffffff81116200023257620096db9060043691860101620134dc565b9060408301918252620096f160648501620137f4565b60608401908152620097066084860162013742565b92608085019384526200971c60a48701620133f7565b9560a086019687526200973260c4820162013432565b9560c0810196875260e482013567ffffffffffffffff811162000232576200976461010491600436918601016201348f565b9260e083019384520135977fffffffff000000000000000000000000000000000000000000000000000000008916890362000232576101008201988952620097c373ffffffffffffffffffffffffffffffffffffffff89511662015b2e565b610258620097d78351518851519062013f7c565b10737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc7576200a28b575b507f1626ba7e000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008a5116146200a280575b6080515b825180518210156200998057620098c98273ffffffffffffffffffffffffffffffffffffffff9262013fe9565b51511673ffffffffffffffffffffffffffffffffffffffff8a51161415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75762009963575b506001016200989c565b6080516200997191620133b5565b60805162000232578a62009959565b5050888896976080515b8951805182101562009a6e57620099b78273ffffffffffffffffffffffffffffffffffffffff9262013fe9565b51511673ffffffffffffffffffffffffffffffffffffffff8a51161415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75762009a51575b506001016200998a565b60805162009a5f91620133b5565b60805162000232578a62009a47565b505088878962009a7f895162014a38565b6080519860605b885180518c101562009c065762009ab38c73ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7578c906080519262009bd9575b50602062009b2660ff928d5162013fe9565b5101511691604051927f6900a3ae000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc757600162009bb0926007829683946080519162009bb95750602060405197846200265f8a9651809285808a01910162013910565b9a019962009a86565b62009bd291503d80608051833e62000e5d8183620133b5565b3862002642565b60ff91925062009b2662009bfc6020923d80608051833e62000e5d8183620133b5565b9392505062009b14565b50878a9173ffffffffffffffffffffffffffffffffffffffff85511691604051927f56ca623e000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc757608051936200a25b575b5060ff90511690604051917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc757600760019262009d0894608051916200a23b5750602060405196846200287d899651809285808a01910162013910565b96608051975b865180518a101562009e7c5762009d3b8a73ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519162009e5c575b5060ff602062009dac8c8b5162013fe9565b51015116604051907f6900a3ae000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc7576001936008859262009e33946080519162009e3c57506020604051968462002a22899651809285808a01910162013910565b98019762009d0e565b62009e5591503d80608051833e62000e5d8183620133b5565b8f62002a05565b62009e7591503d80608051833e62000e5d8183620133b5565b8a62009d9a565b5062009e9b908866ffffffffffffff61ffff8951169151169062016218565b9062009f4162009ec9855173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b917fffffffff0000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8851169162009f6e87516040519586917f1626ba7e000000000000000000000000000000000000000000000000000000006020840152886024840162013ffe565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101865285620133b5565b51166040519060208201526020815262009f8a604082620133b5565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620002325762009fe49260405193849283927fb96213e4000000000000000000000000000000000000000000000000000000008452608051956004850162013d15565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562001dc7576200a21e575b5073ffffffffffffffffffffffffffffffffffffffff855116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc757608051916200a1fe575b50835190604051917f71aad10d0000000000000000000000000000000000000000000000000000000083526020600484015282806200a0c960805193602483019062013935565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc75762007f349462001ba09373ffffffffffffffffffffffffffffffffffffffff936200a18793608051926200a1d4575b5060096200a17991602060405194826200a13d879451809285808801910162013910565b83017f3a657263313237313a0000000000000000000000000000000000000000000000838201526200183c825180938560298501910162013910565b602089510151159162016756565b96511693516040519485937fb2fed7ae0000000000000000000000000000000000000000000000000000000060208601526024850152604484015260606064840152608483019062013935565b6200a1799192506200a1f56009913d80608051833e62000e5d8183620133b5565b9291506200a119565b6200a21791503d80608051833e62000e5d8183620133b5565b866200a082565b6080516200a22c91620133b5565b6080516200023257856200a00d565b6200a25491503d80608051833e62000e5d8183620133b5565b8d62002860565b60ff9193506200a278903d80608051833e62000e5d8183620133b5565b929062009c7f565b608051895262009898565b6080516200a29991620133b5565b6080516200023257896200984b565b3462000232576080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126200023257602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051908152f35b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325760043567ffffffffffffffff8111620002325760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011262000232576040519060c0820182811067ffffffffffffffff8211176200534457604052806004013567ffffffffffffffff811162000232576200a3b79060043691840101620134dc565b9182815260248201356020820152604482013560408201526200a3fa60608201936064840135855260a4608084019460848101358652013560a084015262014a38565b60408101516080516200a4119160ff919062017282565b9160409283516200a4238582620133b5565b600c81527f426f756e6420726573756c740000000000000000000000000000000000000000602082015284516200a491816200050d60208201947fb60e72cc000000000000000000000000000000000000000000000000000000008652896024840152606483019062013935565b608051916080519151906a636f6e736f6c652e6c6f675afa5080604084015260208301516001820180921162000850576200a4d09161ffff9162017282565b83516200a4de8582620133b5565b600c81527f426f756e6420726573756c740000000000000000000000000000000000000000602082015284516200a54c816200050d60208201947fb60e72cc000000000000000000000000000000000000000000000000000000008652896024840152606483019062013935565b608051916080519151906a636f6e736f6c652e6c6f675afa5060208301526200a574620145ac565b936200a581815162014d5c565b81526200a58f825162014d5c565b82526200a5a060a084015162014d5c565b60a084015280518451907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562000eed579073ffffffffffffffffffffffffffffffffffffffff91608051916200b8ed575b5016855281518451907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562000eed579073ffffffffffffffffffffffffffffffffffffffff91608051916200b8c9575b5016602086015260a08301518451907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562000eed579073ffffffffffffffffffffffffffffffffffffffff91608051916200b8a5575b50168486015273ffffffffffffffffffffffffffffffffffffffff8551168451907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562000eed57906200a7d391608051916200b885575b5062003feb60026027885180947f7369676e65723a00000000000000000000000000000000000000000000000000602083015262003f95815180926020868601910162013910565b606086015261ffff60208401511673ffffffffffffffffffffffffffffffffffffffff6020870151168551907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562000ec157608051916200b865575b5060408501518651907f6900a3ae000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620063fa57600160279493926200a94492608051916200b845575b50895195869160208301957f7369676e65723a0000000000000000000000000000000000000000000000000087526200a907815180926020868801910162013910565b83017f3a000000000000000000000000000000000000000000000000000000000000008382015262005e2282518093602060288501910162013910565b86517f6900a3ae000000000000000000000000000000000000000000000000000000008152600481019290925260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620063fa57608051926200b823575b508651927f6900a3ae0000000000000000000000000000000000000000000000000000000084526002600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa938415620062f45790886200aab495949392608051956200b7e5575b50926010600293601b9362000bd1602e6200aa5d9851998a967f7b227468726573686f6c64223a22000000000000000000000000000000000000602089015262004301815180926020868c01910162013910565b6200aa7c737109709ecfa91a80626ff3989d68f67f5b1dd12d62017484565b908651809381927f0199a220000000000000000000000000000000000000000000000000000000008352608051946004840162014ea1565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811562000eed57608051916200b7c5575b50608086015273ffffffffffffffffffffffffffffffffffffffff84860151168451907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562000eed57906200ac0191608051916200b7a5575b50620045a560026027885180947f7369676e65723a0000000000000000000000000000000000000000000000000060208301526200abab815180926020868601910162013910565b81017f3a330000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2810184520182620133b5565b60a08601526101208501916002835152610140860191600283515260e087015160c08551015261010087015160c084510152519251926200ac5f73ffffffffffffffffffffffffffffffffffffffff601f5460081c16809562015714565b8651917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562000ec1579160ff85926200aced946080519160805191608051916200b77e575b506102008c01526101e08b0152166101c089015251925162015714565b8451917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562000e325760805160ff92909182918291906200b757575b50610260880152610240870152166102208501526200ad7b60a083015191835162015714565b8351917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620008135760805160ff92909182918291906200b730575b506102c08701526102a08601521661028084015260a083015173ffffffffffffffffffffffffffffffffffffffff83850151168351907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562000e3257608051916200b710575b506102a0850151908451917fb11a19e8000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562000eed57608051926200b6ee575b506102c08601518551907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562000ec157608051916200b6ce575b5060ff61028088015116908651917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620063fa579260016200afcc9381936200afda989796608051926200b6a9575b5060069060208c519886620017868b9851809285808c01910162013910565b602084510151159162016756565b610160840152606083015173ffffffffffffffffffffffffffffffffffffffff845116908351917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562000e3257608051926200b687575b506101e0850151918451927fb11a19e8000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562000eed57608051936200b665575b506102008601518551907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562000ec157608051916200b645575b5060ff6101c088015116908651917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620063fa5792600162004c989381936200b1b4989796608051926200b620575b5060069060208c51998662004bb28c9851809285808c01910162013910565b610180840152608083015173ffffffffffffffffffffffffffffffffffffffff602085015116908351917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562000e3257608051926200b5fe575b50610240850151918451927fb11a19e8000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562000eed57608051936200b5dc575b506102608601518551907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562000ec157608051916200b5bc575b5060ff61022088015116908651917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620063fa57610180959360016200b394969462004c98948294608051926200b597575b5060069060208d51998662004bb28c9851809285808c01910162013910565b936101a081019485526200b3a76201439f565b946101608201516200b3b98762013f8a565b526200b3c58662013f8a565b50516200b3d28662013fc7565b526200b3de8562013fc7565b5001516200b3ec8462013fd8565b526200b3f88362013fd8565b506200b45f6200b4976200b4176200b4108662016bb3565b9562013fc7565b516020840151604085015186519485937fb006aba000000000000000000000000000000000000000000000000000000000602086015260606024860152608485019062013935565b9160448401526064830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282620133b5565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562000232578251907ff28dceb30000000000000000000000000000000000000000000000000000000082526020600483015281806200b4f560805193602483019062013935565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562000813576200b57a575b506200079a9260a09173ffffffffffffffffffffffffffffffffffffffff601f5460081c16905184518096819482937f545bbe2a0000000000000000000000000000000000000000000000000000000084526004840162013f51565b6080516200b58891620133b5565b6080516200023257836200b51e565b60069192506200b5b4903d80608051833e62000e5d8183620133b5565b91906200b375565b6200b5d591503d80608051833e62000e5d8183620133b5565b876200b2fb565b6200b5f69193503d80608051833e62000e5d8183620133b5565b91866200b299565b6200b6189192503d80608051833e62000e5d8183620133b5565b90856200b236565b60069192506200b63d903d80608051833e62000e5d8183620133b5565b91906200b195565b6200b65e91503d80608051833e62000e5d8183620133b5565b876200b11e565b6200b67f9193503d80608051833e62000e5d8183620133b5565b91866200b0bc565b6200b6a19192503d80608051833e62000e5d8183620133b5565b90856200b059565b60069192506200b6c6903d80608051833e62000e5d8183620133b5565b91906200afad565b6200b6e791503d80608051833e62000e5d8183620133b5565b876200af36565b6200b7089192503d80608051833e62000e5d8183620133b5565b90866200aed4565b6200b72991503d80608051833e62000e5d8183620133b5565b856200ae71565b9150506200b750915060603d60601162001ed35762001ebd8183620133b5565b876200ade3565b9150506200b777915060603d60601162001ed35762001ebd8183620133b5565b886200ad55565b9150506200b79e915060603d60601162001ed35762001ebd8183620133b5565b8c6200acd0565b6200b7be91503d80608051833e62000e5d8183620133b5565b876200ab63565b6200b7de91503d80608051833e62000e5d8183620133b5565b866200aae2565b6200aa5d94919550600293601b9362000bd1602e6200b8136010953d80608051833e62000e5d8183620133b5565b999598505050935093506200aa09565b6200b83d9192503d80608051833e62000e5d8183620133b5565b90886200a9a1565b6200b85e91503d80608051833e62000e5d8183620133b5565b8b6200a8c4565b6200b87e91503d80608051833e62000e5d8183620133b5565b876200a857565b6200b89e91503d80608051833e62000e5d8183620133b5565b876200a78b565b6200b8c2915060203d60201162001fe35762001fd38183620133b5565b876200a70c565b6200b8e6915060203d60201162001fe35762001fd38183620133b5565b876200a68f565b6200b90a915060203d60201162001fe35762001fd38183620133b5565b876200a618565b3462000232576080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011262000232576040518060206017549182815201906017608051527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15906080515b8181106200b99957620020c185620020b481870382620133b5565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016200b97e565b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325760043567ffffffffffffffff811162000232576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126200023257604051906200ba4782620132b7565b806004013567ffffffffffffffff811162000232576200ba6e906004369184010162013757565b8252602481013567ffffffffffffffff811162000232576200ba97906004369184010162013757565b9160208101928352604482013567ffffffffffffffff811162000232576200bac69060043691850101620134dc565b92604082019384526200badc60648401620137f4565b93606083019485526200baf26084850162013742565b90608084019182526200bb0860a48601620133f7565b9560a085019687526200bb1e60c4870162013432565b9560c0860196875260e48101359067ffffffffffffffff8211620002325760046200bb4d92369201016201348f565b9460e081019586526200bb7773ffffffffffffffffffffffffffffffffffffffff88511662015b2e565b6102586200bb8b8251518751519062013f7c565b10737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc7576200c6d5575b506080515b815180518210156200bce8576200bc318273ffffffffffffffffffffffffffffffffffffffff9262013fe9565b51511673ffffffffffffffffffffffffffffffffffffffff8951161415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc7576200bccb575b506001016200bc04565b6080516200bcd991620133b5565b6080516200023257896200bcc1565b5050878795966080515b885180518210156200bdd6576200bd1f8273ffffffffffffffffffffffffffffffffffffffff9262013fe9565b51511673ffffffffffffffffffffffffffffffffffffffff8951161415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc7576200bdb9575b506001016200bcf2565b6080516200bdc791620133b5565b6080516200023257896200bdaf565b505090869188876200bde9885162014a38565b6080519760605b875180518b10156200bf41576200be1d8b73ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc757608051916200bf21575b5060ff60206200be8e8d8c5162013fe9565b5101511691604051927f6900a3ae000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc75760016200bf18926007829683946080519162009bb95750602060405197846200265f8a9651809285808a01910162013910565b9901986200bdf0565b6200bf3a91503d80608051833e62000e5d8183620133b5565b8b6200be7c565b5086899173ffffffffffffffffffffffffffffffffffffffff82511690604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc757608051926200c6b3575b5060ff89511690604051917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc75760076001926200c04394608051916200a23b5750602060405196846200287d899651809285808a01910162013910565b96608051975b865180518a10156200c197576200c0768a73ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc757608051916200c177575b5060ff60206200c0e78c8b5162013fe9565b51015116604051907f6900a3ae000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc757600193600885926200c16e946080519162009e3c57506020604051968462002a22899651809285808a01910162013910565b9801976200c049565b6200c19091503d80608051833e62000e5d8183620133b5565b8a6200c0d5565b50856200c1b7899261ffff87511666ffffffffffffff8451169062016218565b936200c1e1875173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b6200c23a73ffffffffffffffffffffffffffffffffffffffff8351166200c26786516040519384917f1626ba7e000000000000000000000000000000000000000000000000000000006020840152866024840162013ffe565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101845283620133b5565b6040517f1626ba7e000000000000000000000000000000000000000000000000000000006020820152602081526200c2a1604082620133b5565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562000232576200c2fb9260405193849283927fb96213e4000000000000000000000000000000000000000000000000000000008452608051956004850162013d15565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562001dc7576200c696575b5073ffffffffffffffffffffffffffffffffffffffff8251166200c37e8551926200c23a6040519485927f1626ba7e0000000000000000000000000000000000000000000000000000000060208501526024840162013ffe565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562000232576200c3d791604051809381927fbd6af4340000000000000000000000000000000000000000000000000000000083526080519460048401620142a9565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562001dc7576200c679575b5073ffffffffffffffffffffffffffffffffffffffff90511691604051927f56ca623e000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc757608051936200c657575b505191604051927f71aad10d0000000000000000000000000000000000000000000000000000000084526020600485015283806200c4bc60805193602483019062013935565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc7576200c57b9360a0926200c52792608051926200c62d575b5060096200c51891602060405194826200a13d879451809285808801910162013910565b60208951015115908762016756565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c1688516040518096819482937f545bbe2a0000000000000000000000000000000000000000000000000000000084526004840162013f51565b03915afa94851562001dc75760805194608051956080519260805195608051996200c5dd575b509466ffffffffffffff62000dc5989562001d5c60ff9662000dc5620007ad9e9b9762000dbf62001d5c9861ffff62002edd9e51169062016a69565b949996985096505092505060a03d60a0116200c625575b6200c6008183620133b5565b81016200c60d9162013d5a565b97919396909692939694919598939692908a6200c5a1565b503d6200c5f4565b6200c5189192506200c64e6009913d80608051833e62000e5d8183620133b5565b9291506200c4f4565b6200c6719193503d80608051833e62000e5d8183620133b5565b91876200c476565b6080516200c68791620133b5565b6080516200023257876200c400565b6080516200c6a491620133b5565b6080516200023257886200c324565b6200c6cd9192503d80608051833e62000e5d8183620133b5565b90896200bfba565b6080516200c6e391620133b5565b6080516200023257886200bbff565b3462000232576080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011262000232576040518060206018549182815201906018608051527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e906080515b8181106200c77a57620020c185620020b481870382620133b5565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016200c75f565b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325760043567ffffffffffffffff811162000232576200c7fb903690600401620139f5565b60036040825101515110737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc7576200d61a575b506200c885815162014a38565b602081019073ffffffffffffffffffffffffffffffffffffffff6200c8ad8184511662014dd6565b16825260608101916200c8c1835162014d5c565b8352608082016200c8d3815162014d5c565b815260a0830166ffffffffffffff6200c8ef8183511662014d98565b169182825266ffffffffffffff6200c91560c0870194826200113b8188511692620142d8565b16835266ffffffffffffff6200c9368160e088015116828551169062014dad565b1660e08601526200c9466201450e565b958051604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75773ffffffffffffffffffffffffffffffffffffffff91608051916200d5f6575b50168752815192604051937fffa186490000000000000000000000000000000000000000000000000000000085526004850152602084602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa93841562001dc757608051946200d5d0575b5073ffffffffffffffffffffffffffffffffffffffff602089019416845266ffffffffffffff73ffffffffffffffffffffffffffffffffffffffff8751169151169073ffffffffffffffffffffffffffffffffffffffff89511691604051927f56ca623e000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc7576200cb1f93608051936200d5ae57506200137f6002602760405180967f7369676e65723a00000000000000000000000000000000000000000000000000602083015262001329815180926020868601910162013910565b906200cb326040890192808452620155d8565b946080890195865266ffffffffffffff73ffffffffffffffffffffffffffffffffffffffff88511691511673ffffffffffffffffffffffffffffffffffffffff86511690604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576200cc30936200cc2493608051936200d58c5750620014dc6002602760405180967f7369676e65723a00000000000000000000000000000000000000000000000000602083015262001486815180926020868601910162013910565b8060608b0152620155d8565b9060a08901918252610100880195865190511415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc7576200d56f575b50855182511415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc7576200d552575b506200cd77906101c08a019260028451525160c084510152600160208451015251915173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75760805192839283926200d525575b5060ff6101808b01946101008c01946101408d019485528552168452519173ffffffffffffffffffffffffffffffffffffffff8a511690604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc757608051926200d503575b505191604051927fb11a19e8000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc757608051936200d4e1575b505193604051947fb11a19e8000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa94851562001dc757608051956200d4bc575b5060ff90511693604051947f6900a3ae000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc75760016200cfbb9381936200cfc7986080519262001df7575060069060206040519886620017868b9851809285808c01910162013910565b60408801519162015b1d565b60c087015251906200cff7855173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b604051927fe341eaa400000000000000000000000000000000000000000000000000000000845260048401526024830152606082604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519283928391906200d491575b5060ff6101a08901936101208a01956101608b01938452865216835273ffffffffffffffffffffffffffffffffffffffff606089015192511693604051947f56ca623e000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa94851562001dc757608051956200d46f575b505190604051917fb11a19e8000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc757608051926200d44d575b505192604051937fb11a19e8000000000000000000000000000000000000000000000000000000008552600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa93841562001dc757608051946200d428575b5060ff90511692604051937f6900a3ae000000000000000000000000000000000000000000000000000000008552600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc75773ffffffffffffffffffffffffffffffffffffffff9560016200d2569381936200d26a986080519262001df7575060069060206040519886620017868b9851809285808c01910162013910565b602087510151159060408801519262015900565b9160e08601928352519261020086019384515266ffffffffffffff60e0860151166020855101525116604051907fccce3bc8000000000000000000000000000000000000000000000000000000006020830152600482526200d2ce602483620133b5565b835160408051825160208083019190915290920151908201526200d2f6816060810162001ba0565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562000232576200d3509260405193849283927fb96213e4000000000000000000000000000000000000000000000000000000008452608051956004850162013d15565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562001dc7576200d40b575b5062001ba0916101e06200d3bf62008c80936200d39562014342565b90516200d3a28262013f8a565b526200d3ae8162013f8a565b5060c088015162001c908262013fc7565b9501948552516040519283917fccbb534f000000000000000000000000000000000000000000000000000000006020840152602483019190916020806040830194805184520151910152565b6080516200d41991620133b5565b6080516200023257846200d379565b60ff9194506200d445903d80608051833e62000e5d8183620133b5565b93906200d1b0565b6200d4679192503d80608051833e62000e5d8183620133b5565b90896200d151565b6200d4899195503d80608051833e62000e5d8183620133b5565b93896200d0f2565b919350506200d4b2915060603d60601162001ed35762001ebd8183620133b5565b929092886200d05c565b60ff9195506200d4d9903d80608051833e62000e5d8183620133b5565b94906200cf2b565b6200d4fb9193503d80608051833e62000e5d8183620133b5565b918b6200cecc565b6200d51d9192503d80608051833e62000e5d8183620133b5565b908b6200ce6d565b915092506200d546915060603d60601162001ed35762001ebd8183620133b5565b91929091908a6200cdda565b6080516200d56091620133b5565b6080516200023257896200cd31565b6080516200d57d91620133b5565b6080516200023257896200ccb7565b6200d5a69193503d80608051833e62000e5d8183620133b5565b918d6200143d565b6200d5c89193503d80608051833e62000e5d8183620133b5565b918b620012e0565b6200d5ee91945060203d60201162001fe35762001fd38183620133b5565b92886200ca1b565b6200d613915060203d60201162001fe35762001fd38183620133b5565b896200c9b9565b6080516200d62891620133b5565b6080516200023257816200c878565b3462000232576080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126200023257601e546200d6778162013419565b906200d6876040519283620133b5565b808252602082019081601e608051527f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350608051915b8383106200d77357848660405191829160208301906020845251809152604083019060408160051b8501019291608051905b8282106200d6fe57505050500390f35b919360206200d762827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc060019597998495030186526040838a5173ffffffffffffffffffffffffffffffffffffffff8151168452015191818582015201906201397a565b96019201920185949391926200d6ee565b6040516200d781816201337b565b825473ffffffffffffffffffffffffffffffffffffffff1681526001830180546200d7ac8162013419565b916200d7bc6040519384620133b5565b81835260208301906080515260206080512090608051905b8382106200d7fc5750505050600192826020928360029501528152019201920191906200d6bc565b6001602081926200d80d86620143fc565b8152019301910190916200d7d4565b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325760043567ffffffffffffffff8111620002325760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126200023257604051906200d89c8262013322565b806004013567ffffffffffffffff811162000232576200d8c39060043691840101620134dc565b82526200d8d36024820162013432565b6020830152604481013567ffffffffffffffff811162000232576200d939916200d90660c492600436918401016201348f565b604085015260648101356060850152608481013560808501526200d92d60a4820162013742565b60a08501520162013742565b60c082015260036040825101515110737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc7576200e78f575b506200d9c8815162014a38565b73ffffffffffffffffffffffffffffffffffffffff6200d9ee8160208401511662014dd6565b1660208201526200da03606082015162014d5c565b60608201526200da17608082015162014d5c565b608082015266ffffffffffffff6200da54816200da3a8160a08601511662014d98565b168060a0850152826200113b8160c08701511692620142d8565b1660c0820152604051906200da69826201335d565b6080518252608051602083015260606040830152606080830152608051608083015260805160a0830152606060c0830152606060e08301526040516200daaf816201337b565b60008152600060208201526101008301526080516101208301526080516101408301526080516101608301526080516101808301526080516101a08301526080516101c08301526200db00620142f7565b6101e083015260606102008301526060810151604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75773ffffffffffffffffffffffffffffffffffffffff91608051916200e76b575b501682526080810151604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75773ffffffffffffffffffffffffffffffffffffffff91608051916200e747575b5016602083015273ffffffffffffffffffffffffffffffffffffffff60208201511666ffffffffffffff60a08301511673ffffffffffffffffffffffffffffffffffffffff84511690604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576200dcff936200dcf393608051936200e72557506200137f6002602760405180967f7369676e65723a00000000000000000000000000000000000000000000000000602083015262001329815180926020868601910162013910565b806040850152620155d8565b608083015273ffffffffffffffffffffffffffffffffffffffff60208201511666ffffffffffffff60c08301511673ffffffffffffffffffffffffffffffffffffffff60208501511690604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576200de03936200ddf793608051936200e7035750620014dc6002602760405180967f7369676e65723a00000000000000000000000000000000000000000000000000602083015262001486815180926020868601910162013910565b806060850152620155d8565b60a083015260026101e08301515260a082015160c06101e08401510152600160206101e0840151015260608101516200de5e6101e084015173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75760805160ff929091829182916200e6dc575b50610160860152610120850152166101a0830152604082015173ffffffffffffffffffffffffffffffffffffffff83511690604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc757608051926200e6ba575b50610120840151604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc757608051916200e69a575b5061016085015192604051937fb11a19e8000000000000000000000000000000000000000000000000000000008552600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa93841562001dc757608051946200e678575b5060ff6101a08701511693604051947f6900a3ae000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc75760016200e0ae9381936200e0ba986080519262001df7575060069060206040519886620017868b9851809285808c01910162013910565b60408401519162015b1d565b60c083015260808101516200e0ed825173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75760805160ff929091829182916200e651575b50610180860152610140850152166101c0830152606082015173ffffffffffffffffffffffffffffffffffffffff60208401511690604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc757608051926200e62f575b50610140840151604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc757608051916200e60f575b5061018085015192604051937fb11a19e8000000000000000000000000000000000000000000000000000000008552600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa93841562001dc757608051946200e5ed575b5060ff6101c08701511693604051947f6900a3ae000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc75760016200e3409381936200e354986080519262001df7575060069060206040519886620017868b9851809285808c01910162013910565b602084510151159060408501519262015900565b60e083015260a08201516101008301515266ffffffffffffff60c0820151166020610100840151015273ffffffffffffffffffffffffffffffffffffffff602082015116604051907fccce3bc8000000000000000000000000000000000000000000000000000000006020830152600482526200e3d3602483620133b5565b61010084015160408051825160208083019190915290920151908201526200e3ff816060810162001ba0565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562000232576200e4599260405193849283927fb96213e4000000000000000000000000000000000000000000000000000000008452608051956004850162013d15565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562001dc7576200e5d0575b506200e520906200e4c36200e49662014342565b60e08501516200e4a68262013f8a565b526200e4b28162013f8a565b5060c085015162001c908262013fc7565b8061020085015260a073ffffffffffffffffffffffffffffffffffffffff601f5460081c1691835160405195869283927f545bbe2a0000000000000000000000000000000000000000000000000000000084526004840162013f18565b0381845afa91821562001dc757608051620007ad95909384918291829081906200e57e575b62000dc59798506200e5699262004f8d62001d6596959362001d4e60809462016962565b66ffffffffffffff60a0840151169062016a69565b5050905062000dc5945062001d6591506200e56962001d4e60806200e5b862004f8d9960a03d60a011620007e357620007d08183620133b5565b939c50929a509196509094935091508890506200e545565b6080516200e5de91620133b5565b6080516200023257826200e482565b6200e6079194503d80608051833e62000e5d8183620133b5565b92866200e2ac565b6200e62891503d80608051833e62000e5d8183620133b5565b856200e248565b6200e6499192503d80608051833e62000e5d8183620133b5565b90846200e1e5565b9150506200e671915060603d60601162001ed35762001ebd8183620133b5565b866200e154565b6200e6929194503d80608051833e62000e5d8183620133b5565b92866200e01a565b6200e6b391503d80608051833e62000e5d8183620133b5565b856200dfb6565b6200e6d49192503d80608051833e62000e5d8183620133b5565b90846200df53565b9150506200e6fc915060603d60601162001ed35762001ebd8183620133b5565b866200dec5565b6200e71d9193503d80608051833e62000e5d8183620133b5565b91876200143d565b6200e73f9193503d80608051833e62000e5d8183620133b5565b9187620012e0565b6200e764915060203d60201162001fe35762001fd38183620133b5565b846200dbfc565b6200e788915060203d60201162001fe35762001fd38183620133b5565b846200db83565b6080516200e79d91620133b5565b6080516200023257816200d9bb565b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325760043567ffffffffffffffff811162000232576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011262000232576040516200e82c816201333f565b816004013567ffffffffffffffff811162000232576200e853906004369185010162013757565b8152602482013567ffffffffffffffff811162000232576200e87c906004369185010162013757565b6020820152604482013567ffffffffffffffff811162000232576200e8a89060043691850101620134dc565b60408201526200e8bb60648301620137f4565b91606082019283526200e8d16084820162013742565b60808301526200e8e460a48201620133f7565b9060a083019182526200e8fa60c4820162013432565b60c084015260e481013567ffffffffffffffff811162000232576200e946916200e92e61012492600436918401016201348f565b60e0860152610104810135610100860152016201340b565b6101208301526200e97173ffffffffffffffffffffffffffffffffffffffff60c08401511662015b2e565b6102586200e9888351516020850151519062013f7c565b10737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc7576200f95c575b506080515b825180518210156200eae8576200ea2e8273ffffffffffffffffffffffffffffffffffffffff9262013fe9565b51511673ffffffffffffffffffffffffffffffffffffffff60c0850151161415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc7576200eacb575b506001016200ea01565b6080516200ead991620133b5565b6080516200023257846200eac1565b50506080515b602083015180518210156200ebd8576200eb1e8273ffffffffffffffffffffffffffffffffffffffff9262013fe9565b51511673ffffffffffffffffffffffffffffffffffffffff60c0850151161415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc7576200ebbb575b506001016200eaee565b6080516200ebc991620133b5565b6080516200023257846200ebb1565b5050906200ebea604082015162014a38565b6080519260605b825180518610156200ed62576200ec1e8673ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc757608051916200ed42575b5060ff60206200ec8f88875162013fe9565b5101511691604051927f6900a3ae000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc75760016200ed1992600782968394608051916200ed225750602060405197846200265f8a9651809285808a01910162013910565b9401936200ebf1565b6200ed3b91503d80608051833e62000e5d8183620133b5565b8c62002642565b6200ed5b91503d80608051833e62000e5d8183620133b5565b866200ec7d565b5091909161010082015190604051917fb11a19e8000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc757608051926200f93a575b5073ffffffffffffffffffffffffffffffffffffffff60c084015116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc757608051916200f91a575b5060ff86511691604051927f6900a3ae000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc7576200ef47936001938492608051926200f8f5575b50600890602060405198866200eece8b9851809285808c01910162013910565b87017f73617069656e743a000000000000000000000000000000000000000000000000838201526200ef0a825180938560288501910162013910565b01017f3a0000000000000000000000000000000000000000000000000000000000000083820152620017ff82518093602060098501910162013910565b92608051935b602083015180518610156200f0c0576200ef7d8673ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc757608051916200f0a0575b5060ff60206200eff0888288015162013fe9565b51015116604051907f6900a3ae000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc757600193600885926200f07794608051916200f08057506020604051968462002a22899651809285808a01910162013910565b9401936200ef4d565b6200f09991503d80608051833e62000e5d8183620133b5565b8b62002a05565b6200f0b991503d80608051833e62000e5d8183620133b5565b866200efdc565b50906200f0e3849261ffff84511666ffffffffffffff6080870151169062016218565b610120840151909190156200f68c57604080516200f1028282620133b5565b601181527f3a73617069656e745f636f6d706163743a0000000000000000000000000000006020820152906200f159604087015173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b906200c23a73ffffffffffffffffffffffffffffffffffffffff60c0890151166200f1b860e08a015184519384917f898bd921000000000000000000000000000000000000000000000000000000006020840152876024840162013ffe565b6101008901518351906020820152602081526200f1d68482620133b5565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562000232576200f22f92845193849283927fb96213e4000000000000000000000000000000000000000000000000000000008452608051956004850162013d15565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562000e93576200f66f575b5073ffffffffffffffffffffffffffffffffffffffff60c0880151166200f2e460e0890151936200f2b784519586927f898bd9210000000000000000000000000000000000000000000000000000000060208501526024840162013ffe565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101855284620133b5565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562000232576200f33c928251809481927fbd6af4340000000000000000000000000000000000000000000000000000000083526080519460048401620142a9565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115620007eb57506200f652575b505b73ffffffffffffffffffffffffffffffffffffffff60c086015116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc757608051916200f632575b5060e0860151604051907f71aad10d0000000000000000000000000000000000000000000000000000000082526020600483015281806200f42960805193602483019062013935565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc7576200f4cb60a09360206200f534966200f4dd95608051916200f612575b506200f49d8260405196856200f487899751809285808b01910162013910565b860162002d7e8251809385808501910162013910565b01037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282620133b5565b60206040890151015115908662016756565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c1660408801516040518095819482937f545bbe2a0000000000000000000000000000000000000000000000000000000084526004840162013f51565b03915afa93841562001dc75760805193608051946080519260805194608051986200f5c9575b509462001d5c620007ad99956200f58f6200f5a49662000dc562000dc59b9762000dbf60ff9861ffff60409e51169062016a69565b66ffffffffffffff6080880151169062016a69565b015173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b94509550509294505060a03d60a0116200f60a575b6200f5ea8183620133b5565b81016200f5f79162013d5a565b969295929490939192909190896200f55a565b503d6200f5de565b6200f62b91503d80608051833e62000e5d8183620133b5565b8c6200f467565b6200f64b91503d80608051833e62000e5d8183620133b5565b866200f3e0565b6080516200f66091620133b5565b6080516200023257856200f367565b6080516200f67d91620133b5565b6080516200023257876200f258565b604080516200f69c8282620133b5565b600981527f3a73617069656e743a000000000000000000000000000000000000000000000060208201529073ffffffffffffffffffffffffffffffffffffffff60c0870151166040870151906200f72b60e0890151926200c23a85519485927f13792a4a0000000000000000000000000000000000000000000000000000000060208501526024840162014280565b6101008801518351906020820152602081526200f7498482620133b5565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562000232576200f7a292845193849283927fb96213e4000000000000000000000000000000000000000000000000000000008452608051956004850162013d15565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562000e93576200f8d8575b5073ffffffffffffffffffffffffffffffffffffffff60c087015116906040870151916200f83160e0890151936200f2b784519586927f13792a4a0000000000000000000000000000000000000000000000000000000060208501526024840162014280565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562000232576200f889928251809481927fbd6af4340000000000000000000000000000000000000000000000000000000083526080519460048401620142a9565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115620007eb57506200f8bb575b506200f369565b6080516200f8c991620133b5565b6080516200023257856200f8b4565b6080516200f8e691620133b5565b6080516200023257866200f7cb565b60089192506200f912903d80608051833e62000e5d8183620133b5565b91906200eeae565b6200f93391503d80608051833e62000e5d8183620133b5565b866200ee41565b6200f9549192503d80608051833e62000e5d8183620133b5565b90856200edc9565b6080516200f96a91620133b5565b6080516200023257836200e9fc565b3462000232576080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011262000232576040518060206016549182815201906016608051527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289906080515b8181106200fa0157620020c185620020b481870382620133b5565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016200f9e6565b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325760043567ffffffffffffffff8111620002325760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126200023257604051906200faae8262013322565b806004013567ffffffffffffffff811162000232576200fad59060043691840101620134dc565b82526200fae56024820162013432565b91602081019283526200fafb6044830162013742565b60408201526060810190606483013582526200fb1a60848401620133f7565b608082019081526200fb2f60a48501620133f7565b9360a0830194855260c48101359067ffffffffffffffff8211620002325760046200fb5e92369201016201348f565b60c083015260036040835101515110737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc757620103a7575b506200fbeb62013c3a565b946200fbf8835162014a38565b73ffffffffffffffffffffffffffffffffffffffff6200fc1b8183511662014dd6565b1681526200fc2a845162014d5c565b808552604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75773ffffffffffffffffffffffffffffffffffffffff916080519162010383575b5016865260ff6200fcb681875116828551169062014d8a565b16855273ffffffffffffffffffffffffffffffffffffffff81511660ff83511666ffffffffffffff60408601511673ffffffffffffffffffffffffffffffffffffffff89511691604051927f56ca623e000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc7576080519362010361575b5060ff89511693604051947f6900a3ae000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa93841562001dc7576200fe0b956080519562003b1757506001620035c09160276040519788927f7369676e65723a00000000000000000000000000000000000000000000000000602085015262003553815180926020868801910162013910565b906200fe1e6020880192808452620155d8565b9460408801958652516200fe50855173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc75760805193849283929162010335575b505173ffffffffffffffffffffffffffffffffffffffff8a511692604051937f56ca623e000000000000000000000000000000000000000000000000000000008552600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa93841562001dc7576080519462010313575b50604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc75760805191620102f3575b50604051957fb11a19e8000000000000000000000000000000000000000000000000000000008752600487015260805186602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa95861562001dc75760805196620102d1575b5060ff604051937f6900a3ae00000000000000000000000000000000000000000000000000000000855216600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc757600160809581620100899373ffffffffffffffffffffffffffffffffffffffff9a6201009d988a519262003a6e575060069060206040519886620017868b9851809285808c01910162013910565b602088510151159060c08901519262015900565b95606089019687525197019687515266ffffffffffffff6040850151166020885101525116604051907fccce3bc800000000000000000000000000000000000000000000000000000000602083015260048252620100fd602483620133b5565b8651604080518251602080830191909152909201519082015262010125816060810162001ba0565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562000232576201017f9260405193849283927fb96213e4000000000000000000000000000000000000000000000000000000008452608051956004850162013d15565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562001dc757620102b4575b50620102079060a073ffffffffffffffffffffffffffffffffffffffff601f5460081c1694845190519060405194859283927f545bbe2a0000000000000000000000000000000000000000000000000000000084526004840162013f18565b0381875afa94851562001dc75760805195869384938493928492906201026c575b5062001d65946201025862000dc59998979560ff60209662001d5c620007ad9f9783620102629851169062016a69565b8251519062016ae3565b5101519062016a69565b9450975050949392505060a03d60a011620102ac575b6201028e8183620133b5565b81016201029b9162013d5a565b979596949590949193908a62010228565b503d62010282565b608051620102c291620133b5565b608051620002325785620101a8565b620102eb9196503d80608051833e62000e5d8183620133b5565b948b6200ffe6565b6201030c91503d80608051833e62000e5d8183620133b5565b8b6200ff89565b6201032d9194503d80608051833e62000e5d8183620133b5565b928b6200ff2c565b9150935062010356915060603d60601162001ed35762001ebd8183620133b5565b919091938a6200feb5565b6201037b9193503d80608051833e62000e5d8183620133b5565b918a6200fd59565b620103a0915060203d60201162001fe35762001fd38183620133b5565b886200fc9d565b608051620103b591620133b5565b6080516200023257856200fbe0565b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325760043567ffffffffffffffff811162000232576101807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8236030112620002325760405190610180820182811067ffffffffffffffff8211176200534457604052806004013567ffffffffffffffff811162000232576201047d906004369184010162013757565b8252602481013567ffffffffffffffff81116200023257620104a6906004369184010162013757565b6020830152604481013567ffffffffffffffff81116200023257620104d2906004369184010162013757565b6040830152606481013567ffffffffffffffff81116200023257620104fe906004369184010162013757565b6060830152608481013567ffffffffffffffff81116200023257620105ad91620105326101649260043691840101620134dc565b60808501526201054560a48201620137f4565b60a08501526201055860c4820162013742565b60c08501526201056b60e48201620137f4565b60e08501526201057f6101048201620133f7565b610100850152620105946101248201620133f7565b610120850152610144810135610140850152016201340b565b610160820152610258620105ec620105df620105d28451516020860151519062013f7c565b6040850151519062013f7c565b6060840151519062013f7c565b10737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc757620118e8575b5062010670608082015162014a38565b6201068061014082015162014d5c565b80610140830152604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc75760805191620118c4575b506080515b82518051821015620107ca57620107148273ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e56200000000000000000000000000000000000000000000000000000000825273ffffffffffffffffffffffffffffffffffffffff84161415600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc757620107ad575b50600101620106e7565b608051620107bb91620133b5565b608051620002325783620107a3565b50506080515b60208301518051821015620108b657620108008273ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e56200000000000000000000000000000000000000000000000000000000825273ffffffffffffffffffffffffffffffffffffffff84161415600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75762010899575b50600101620107d0565b608051620108a791620133b5565b6080516200023257836201088f565b50506080515b60408301518051821015620109a257620108ec8273ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e56200000000000000000000000000000000000000000000000000000000825273ffffffffffffffffffffffffffffffffffffffff84161415600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75762010985575b50600101620108bc565b6080516201099391620133b5565b6080516200023257836201097b565b50506080515b6060830151805182101562010a8e57620109d88273ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e56200000000000000000000000000000000000000000000000000000000825273ffffffffffffffffffffffffffffffffffffffff84161415600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75762010a71575b50600101620109a8565b60805162010a7f91620133b5565b60805162000232578362010a67565b50506080519160605b8151805185101562010c085762010ac48573ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519162010be8575b5060ff602062010b3587865162013fe9565b5101511691604051927f6900a3ae000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc757600162010bbf926007829683946080519162010bc85750602060405197846200265f8a9651809285808a01910162013910565b93019262010a97565b62010be191503d80608051833e62000e5d8183620133b5565b8b62002642565b62010c0191503d80608051833e62000e5d8183620133b5565b8562010b23565b506080519290919060605b6040830151805186101562010d6a5762010c438673ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519162010d4a575b5060ff602062010cb788604088015162013fe9565b5101511691604051927f6900a3ae000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc757600162010d4192600782968394608051916200ed225750602060405197846200265f8a9651809285808a01910162013910565b94019362010c13565b62010d6391503d80608051833e62000e5d8183620133b5565b8662010ca2565b50919091604051907f56ca623e00000000000000000000000000000000000000000000000000000000825273ffffffffffffffffffffffffffffffffffffffff8416600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc75760805192620118a2575b5060ff6101208401511690604051917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc757600760019262010e6e9460805191620118825750602060405196846200287d899651809285808a01910162013910565b92608051935b6060830151805186101562010fc85762010ea48673ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519162010fa8575b5060ff602062010f1888606088015162013fe9565b51015116604051907f6900a3ae000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc7576001936008859262010f9f94608051916200f08057506020604051968462002a22899651809285808a01910162013910565b94019362010e74565b62010fc191503d80608051833e62000e5d8183620133b5565b8662010f03565b50839161ffff60e08501511691604051927f6900a3ae000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc7576080519362011860575b5060ff61010086015116604051907f6900a3ae000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc757600180936007620111ce966002956080519162011840575b5060206040519986620110c28c9851809285808c01910162013910565b87017f6e65737465643a0000000000000000000000000000000000000000000000000083820152620110fe825180938560278501910162013910565b01017f3a00000000000000000000000000000000000000000000000000000000000000838201526201113b82518093602060088501910162013910565b01017f3a28000000000000000000000000000000000000000000000000000000000000838201526201117882518093602060038501910162013910565b01017f29000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1810184520182620133b5565b91608051925b602082015180518510156201134757620112048573ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519162011327575b5060ff602062011277878287015162013fe9565b51015116604051907f6900a3ae000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75760019360088592620112fe94608051916201130757506020604051968462002a22899651809285808a01910162013910565b930192620111d4565b6201132091503d80608051833e62000e5d8183620133b5565b8a62002a05565b6201134091503d80608051833e62000e5d8183620133b5565b8562011263565b506201136b9061ffff60a08401511666ffffffffffffff60c0850151169062016218565b9062011398608082015173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b610160820151620117f6575b61014082015190604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519182918291620117cf575b5061016084015115620117be576201142662014243565b915b73ffffffffffffffffffffffffffffffffffffffff604051977f56ca623e00000000000000000000000000000000000000000000000000000000895216600488015260805187602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa96871562001dc757608051976201179c575b50604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc757608051916201177c575b50604051917fb11a19e8000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc757608051926201175a575b5060ff604051947f6900a3ae00000000000000000000000000000000000000000000000000000000865216600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc75762011658976001620116019562002d6895620115ef95839560a09a6080519462002f5857509062002d8e60208093816040519c8d8b83829d5194859301910162013910565b60206080850151015115908562016756565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c1660808401516040518097819482937f545bbe2a0000000000000000000000000000000000000000000000000000000084526004840162013f51565b03915afa91821562001dc757608051620007ad949093849283928392839190620116ff575b508593620116ae6200f5a49462000dc56080989562000dbf620116c39661ffff60a062000dc59e0151169062016a69565b66ffffffffffffff60c0860151169062016a69565b60ff6101208401511661ffff60e0850151161115845150600014620116f55760ff80610100850151165b169062016a69565b60ff8451620116ed565b62000dbf9297506080955062000dc59694506200f5a49350620116c39150620116ae6201174162000dc59260a03d60a011620007e357620007d08183620133b5565b9c999b929a5098909750955090935091506201167d9050565b620117749192503d80608051833e62000e5d8183620133b5565b908762011554565b6201179591503d80608051833e62000e5d8183620133b5565b87620114f7565b620117b69197503d80608051833e62000e5d8183620133b5565b95876201149a565b620117c862014206565b9162011428565b915050620117ef915060603d60601162001ed35762001ebd8183620133b5565b866201140f565b60405160208101917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008352603c820152603c815262011837605c82620133b5565b519020620113a4565b6201185991503d80608051833e62000e5d8183620133b5565b8b620110a5565b6201187a9193503d80608051833e62000e5d8183620133b5565b918562011031565b6201189b91503d80608051833e62000e5d8183620133b5565b8962002860565b620118bc9192503d80608051833e62000e5d8183620133b5565b908562010de1565b620118e1915060203d60201162001fe35762001fd38183620133b5565b82620106e2565b608051620118f691620133b5565b60805162000232578162010660565b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325760043567ffffffffffffffff811162000232576201195990369060040162013804565b60056040825101515110737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75762011ea8575b50620119e3815162014a38565b805160208101511562011e9d5762011a976080515b60405160208101917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408301527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de6060830152608082015260805160a082015260a0815262011a8d60c082620133b5565b51902091620178fc565b6040519060208201927f19010000000000000000000000000000000000000000000000000000000000008452602283015260428201526042815262011ade606282620133b5565b51902062011b0a825173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b608051929091602082019160605b8351805187101562011c705762011b458773ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519162011c50575b5060ff602062011bb689885162013fe9565b5101511690604051917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc75760019362011c25936080519362011c2e575062014017565b95019462011b18565b62011c489193503d80608051833e62000e5d8183620133b5565b918a6200904f565b62011c6991503d80608051833e62000e5d8183620133b5565b8762011ba4565b50828591604051917fb11a19e8000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc7576080519262011e73575b50601662011d33916020604096959651948262011cf7879451809285808801910162013910565b83017f616e792d616464726573732d7375626469676573743a00000000000000000000838201526200183c825180938560368501910162013910565b6080519260408301915b82518051861015620092c75762011d6a8673ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519162011e53575b5060ff602062011ddb88875162013fe9565b5101511690604051917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc75760019362011e4a936080519362009285575062014111565b94019362011d3d565b62011e6c91503d80608051833e62000e5d8183620133b5565b8662011dc9565b62011d3391925062011e946016913d80608051833e62000e5d8183620133b5565b92915062011cd0565b62011a9746620119f8565b60805162011eb691620133b5565b608051620002325781620119d6565b3462000232576080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126200023257604051611eb080820182811067ffffffffffffffff8211176200534457829162017cd883390390608051f0801562001dc7577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00601f549260081b16911617601f55608051608051f35b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620002325760043567ffffffffffffffff811162000232576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8236030112620002325760405162011ff68162013304565b816004013567ffffffffffffffff811162000232576201201d906004369185010162013757565b8152602482013567ffffffffffffffff8111620002325762012046906004369185010162013757565b60208201908152604483013567ffffffffffffffff81116200023257620120749060043691860101620134dc565b92604083019384526201208a60648201620137f4565b9060608401918252620120a06084820162013742565b9460808501958652620120b660a48301620133f7565b9160a08601928352620120cc60c4820162013432565b9560c0810196875260e482013567ffffffffffffffff81116200023257620120fb90600436918501016201348f565b9160e082019283526101048101359067ffffffffffffffff8211620002325760046201212b92369201016201348f565b9361010082019485526201215673ffffffffffffffffffffffffffffffffffffffff89511662015b2e565b6102586201216a8351518951519062013f7c565b10737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75762012aab575b506080515b82518051821015620122c757620122108273ffffffffffffffffffffffffffffffffffffffff9262013fe9565b51511673ffffffffffffffffffffffffffffffffffffffff8a51161415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc757620122aa575b50600101620121e3565b608051620122b891620133b5565b60805162000232578a620122a0565b5050888896976080515b81518051821015620123b557620122fe8273ffffffffffffffffffffffffffffffffffffffff9262013fe9565b51511673ffffffffffffffffffffffffffffffffffffffff8a51161415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc75762012398575b50600101620122d1565b608051620123a691620133b5565b60805162000232578a6201238e565b50509087918988620123c8895162014a38565b6080519860605b885180518c10156201252f57620123fc8c73ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7578c906080519262012502575b5060206201246f60ff928d5162013fe9565b5101511691604051927f6900a3ae000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc7576001620124f9926007829683946080519162009bb95750602060405197846200265f8a9651809285808a01910162013910565b9a0199620123cf565b60ff9192506201246f620125256020923d80608051833e62000e5d8183620133b5565b939250506201245d565b50878a9173ffffffffffffffffffffffffffffffffffffffff89511691604051927f56ca623e000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc7576080519362012a86575b5060ff90511690604051917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc75760076001926201263194608051916200a23b5750602060405196846200287d899651809285808a01910162013910565b96608051975b865180518a10156201278557620126648a73ffffffffffffffffffffffffffffffffffffffff9262013fe9565b515116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc7576080519162012765575b5060ff6020620126d58c8b5162013fe9565b51015116604051907f6900a3ae000000000000000000000000000000000000000000000000000000008252600482015260805181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562001dc757600193600885926201275c946080519162009e3c57506020604051968462002a22899651809285808a01910162013910565b98019762012637565b6201277e91503d80608051833e62000e5d8183620133b5565b8a620126c3565b50620127a4908866ffffffffffffff61ffff8951169151169062016218565b90620127ce845173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b73ffffffffffffffffffffffffffffffffffffffff825116620128278551926200c23a6040519485927f1626ba7e0000000000000000000000000000000000000000000000000000000060208501526024840162013ffe565b8651737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257620128839260405193849283927fdbaad147000000000000000000000000000000000000000000000000000000008452608051956004850162013d15565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562001dc75762012a69575b5073ffffffffffffffffffffffffffffffffffffffff90511691604051927f56ca623e000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc7576080519362012a47575b505191604051927f71aad10d0000000000000000000000000000000000000000000000000000000084526020600485015283806201296860805193602483019062013935565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562001dc757620129bc936080519262012a1d575b5060096200afcc91602060405194826200a13d879451809285808801910162013910565b9151737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200023257604051907ff28dceb300000000000000000000000000000000000000000000000000000000825260206004830152818062007f9360805193602483019062013935565b6200afcc91925062012a3e6009913d80608051833e62000e5d8183620133b5565b92915062012998565b62012a619193503d80608051833e62000e5d8183620133b5565b918562012922565b60805162012a7791620133b5565b608051620002325785620128ac565b60ff91935062012aa3903d80608051833e62000e5d8183620133b5565b9290620125a8565b60805162012ab991620133b5565b608051620002325789620121de565b34620002325760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011262000232576004359067ffffffffffffffff821162000232576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8336030112620002325762012b4681620132b7565b816004013567ffffffffffffffff8111620002325762012b6d9060043691850101620134dc565b815262012b7d6024830162013432565b60208201908152604483013567ffffffffffffffff8111620002325762012bab90600436918601016201348f565b604083015262012bbe6064840162013742565b6060830190815262012bd36084850162013742565b916080840192835260a084019460a4810135865262012c0a60e462012bfb60c48401620133f7565b9260c0880193845201620133f7565b9360e0860194855262012c1e865162014a38565b66ffffffffffffff62012c4d8162012c398188511662014d0a565b16808752826200332a818651169262013bcd565b16905273ffffffffffffffffffffffffffffffffffffffff62012c738184511662014dd6565b16825262012c82865162014d5c565b865260ff62012c9981865116828451169062014d8a565b16845262012ca662013c3a565b9360ff73ffffffffffffffffffffffffffffffffffffffff84511692511666ffffffffffffff8551169073ffffffffffffffffffffffffffffffffffffffff87511692604051937f56ca623e000000000000000000000000000000000000000000000000000000008552600485015260805184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa93841562001dc7576080519462013292575b5060ff90511693604051947f6900a3ae000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa93841562001dc75762012df7956080519562003b1757506001620035c09160276040519788927f7369676e65723a00000000000000000000000000000000000000000000000000602085015262003553815180926020868801910162013910565b62012e096020850191808352620155d8565b9560408501968752519262012e3c865173ffffffffffffffffffffffffffffffffffffffff601f5460081c169062015714565b604051947fe341eaa400000000000000000000000000000000000000000000000000000000865260048601526024850152606084604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562001dc75760805190608051956080519462013264575b50519073ffffffffffffffffffffffffffffffffffffffff87511691604051927f56ca623e000000000000000000000000000000000000000000000000000000008452600484015260805183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562001dc7576080519362013242575b50604051967fb11a19e8000000000000000000000000000000000000000000000000000000008852600488015260805187602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa96871562001dc7576080519762013220575b50604051947fb11a19e8000000000000000000000000000000000000000000000000000000008652600486015260805185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa94851562001dc75760805195620131fe575b5060ff604051927f6900a3ae00000000000000000000000000000000000000000000000000000000845216600483015260805182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa96871562001dc7576201308260016080958173ffffffffffffffffffffffffffffffffffffffff9b66ffffffffffffff9a62013096988a519262003a6e575060069060206040519886620017868b9851809285808c01910162013910565b60208a510151159060408b01519262015900565b9760608701988952519501948551525116602084510152511690604051917fccce3bc800000000000000000000000000000000000000000000000000000000602084015260048352620130eb602484620133b5565b8151604080518251602080830191909152909201519082015262013113816060810162001ba0565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562000232576201316d9360405194859283927fb96213e4000000000000000000000000000000000000000000000000000000008452608051956004850162013d15565b0381608051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811562001dc75762001ba09262008c8092620131e9575b50516040519283917fccbb534f000000000000000000000000000000000000000000000000000000006020840152602483019190916020806040830194805184520151910152565b608051620131f791620133b5565b85620131a1565b620132189195503d80608051833e62000e5d8183620133b5565b938a62012fd6565b6201323a9197503d80608051833e62000e5d8183620133b5565b958a62012f79565b6201325c9193503d80608051833e62000e5d8183620133b5565b918a62012f1c565b915092506201328691945060603d60601162001ed35762001ebd8183620133b5565b94919094928962012ea4565b60ff919450620132af903d80608051833e62000e5d8183620133b5565b939062012d45565b610100810190811067ffffffffffffffff821117620132d557604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610120810190811067ffffffffffffffff821117620132d557604052565b60e0810190811067ffffffffffffffff821117620132d557604052565b610140810190811067ffffffffffffffff821117620132d557604052565b610220810190811067ffffffffffffffff821117620132d557604052565b6040810190811067ffffffffffffffff821117620132d557604052565b60a0810190811067ffffffffffffffff821117620132d557604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117620132d557604052565b359060ff821682036201340657565b600080fd5b359081151582036201340657565b67ffffffffffffffff8111620132d55760051b60200190565b359073ffffffffffffffffffffffffffffffffffffffff821682036201340657565b67ffffffffffffffff8111620132d557601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b81601f820112156201340657803590620134a98262013454565b92620134b96040519485620133b5565b828452602083830101116201340657816000926020809301838601378301015290565b9190610120838203126201340657604051620134f88162013304565b80936201350581620133f7565b825262013515602082016201340b565b6020830152604081013567ffffffffffffffff81116201340657810183601f82011215620134065780356201354a8162013419565b916201355a6040519384620133b5565b81835260208084019260051b82010190868211620134065760208101925b8284106201366457505050506040830152606081013560608301526080810135608083015260a081013567ffffffffffffffff8111620134065783620135c09183016201348f565b60a083015260c081013560c083015260e081013560e08301526101008101359067ffffffffffffffff82116201340657019180601f84011215620134065782356201360b8162013419565b936201361b6040519586620133b5565b81855260208086019260051b8201019283116201340657602001905b82821062013649575050506101000152565b60208091620136588462013432565b81520191019062013637565b833567ffffffffffffffff81116201340657820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828b030112620134065760405191620136b48362013322565b620136c26020830162013432565b83526040820135602084015260608201359267ffffffffffffffff8411620134065760e083620136fa8d60208098819801016201348f565b6040840152608081013560608401526201371760a082016201340b565b60808401526201372a60c082016201340b565b60a0840152013560c082015281520193019262013578565b359066ffffffffffffff821682036201340657565b81601f820112156201340657803590620137718262013419565b92620137816040519485620133b5565b82845260208085019360061b830101918183116201340657602001925b828410620137ad575050505090565b604084830312620134065760206040918251620137ca816201337b565b620137d58762013432565b8152620137e4838801620133f7565b838201528152019301926201379e565b359061ffff821682036201340657565b91909160a081840312620134065760405190620138218262013398565b8193813567ffffffffffffffff811162013406578162013843918401620134dc565b8352602082013567ffffffffffffffff81116201340657816201386891840162013757565b602084015260408201359067ffffffffffffffff82116201340657826201389a60809492620138b99486940162013757565b6040860152620138ad60608201620137f4565b60608601520162013742565b910152565b602060408183019282815284518094520192019060005b818110620138e35750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101620138d5565b60005b838110620139245750506000910152565b818101518382015260200162013913565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093620139738151809281875287808801910162013910565b0116010190565b9080602083519182815201916020808360051b8301019401926000915b838310620139a757505050505090565b9091929394602080620139e5837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08660019603018752895162013935565b9701930193019193929062013997565b9190916101208184031262013406576040519062013a138262013304565b8193813567ffffffffffffffff811162013406578162013a35918401620134dc565b835262013a456020830162013432565b602084015260408201359167ffffffffffffffff8311620134065762013a736101009392849383016201348f565b6040850152606081013560608501526080810135608085015262013a9a60a0820162013742565b60a085015262013aad60c0820162013742565b60c085015262013ac060e0820162013742565b60e08501520135910152565b906020808351928381520192019060005b81811062013aeb5750505090565b82517fffffffff000000000000000000000000000000000000000000000000000000001684526020938401939092019160010162013add565b602081016020825282518091526040820191602060408360051b8301019401926000915b83831062013b5857505050505090565b909192939460208062013bbd837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff81511684520151918185820152019062013acc565b9701930193019193929062013b48565b66ffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9116019066ffffffffffffff821162013c0b57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6040519062013c498262013398565b8160008152606060208201526000604082015260608082015260806040519162013c73836201337b565b60008352600060208401520152565b602081830312620134065780519067ffffffffffffffff821162013406570181601f8201121562013406576020815191019062013cbf8162013454565b9262013ccf6040519485620133b5565b81845281830111620134065762013ceb91602084019062013910565b90565b908160609103126201340657805160ff811681036201340657916040602083015192015190565b9162013d4b9073ffffffffffffffffffffffffffffffffffffffff62013ceb959316845260606020850152606084019062013935565b91604081840391015262013935565b908160a091031262013406578051916020820151916040810151916080606083015192015190565b610120820160ff82511683526020820151151560208401526040820151906101206040850152815180915261014084019060206101408260051b8701019301916000905b82821062013e6d575050505062013e0161010091606084015160608601526080840151608086015260a084015185820360a087015262013935565b9160c081015160c085015260e081015160e08501520151916101008183039101526020808351928381520192019060005b81811062013e405750505090565b825173ffffffffffffffffffffffffffffffffffffffff1684526020938401939092019160010162013e32565b90919293602080827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec08a6001950301855287519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c08062013ee1604085015160e0604086015260e085019062013935565b936060810151606085015260808101511515608085015260a0810151151560a0850152015191015296019201920190929162013dc6565b929162013f4660609162013f3760009460808852608088019062013d82565b90868203602088015262013935565b938260408201520152565b929162013f7060609162013f3760009460808852608088019062013d82565b93600160408201520152565b9190820180921162013c0b57565b80511562013f985760200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80516001101562013f985760400190565b80516002101562013f985760600190565b805182101562013f985760209160051b010190565b60409062013ceb93928152816020820152019062013935565b6001809160076201410f94969560206040519884620140408b9651809285808a01910162013910565b85017f7369676e65723a00000000000000000000000000000000000000000000000000838201526201407c825180938560278501910162013910565b01017f3a0000000000000000000000000000000000000000000000000000000000000083820152620140b982518093602060088501910162013910565b01017f20000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1810185520183620133b5565b565b60019060086201410f93959460206040519784620141398a9651809285808a01910162013910565b85017f2000000000000000000000000000000000000000000000000000000000000000838201527f7369676e65723a0000000000000000000000000000000000000000000000000060218201526201419b825180938560288501910162013910565b01017f3a000000000000000000000000000000000000000000000000000000000000008382015262004c6882518093602060098501910162013910565b9081602091031262013406575173ffffffffffffffffffffffffffffffffffffffff81168103620134065790565b6040519062014217604083620133b5565b600682527f3a686173683a00000000000000000000000000000000000000000000000000006020830152565b6040519062014254604083620133b5565b600a82527f3a6574685f7369676e3a000000000000000000000000000000000000000000006020830152565b90916201429a62013ceb9360408452604084019062013d82565b91602081840391015262013935565b60409073ffffffffffffffffffffffffffffffffffffffff62013ceb9493168152816020820152019062013935565b66ffffffffffffff60019116019066ffffffffffffff821162013c0b57565b60405190620143068262013304565b6060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b60405160609190620143558382620133b5565b60028152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018260005b8281106201438d57505050565b80606060208093850101520162014380565b60405160809190620143b28382620133b5565b60038152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018260005b828110620143ea57505050565b806060602080938501015201620143dd565b906040519160008154918260011c9260018116801562014503575b602085108114620144d65784875286939291811562014494575060011462014449575b506201410f92500383620133b5565b90506000929192526020600020906000915b818310620144775750509060206201410f92820101386201443a565b60209193508060019154838589010152019101909184926201445b565b602093506201410f9592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b820101386201443a565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f169362014417565b604051906201451d826201335d565b8160008152600060208201526060604082015260608082015260006080820152600060a0820152606060c0820152606060e08201526000610100820152600061012082015260006101408201526000610160820152600061018082015260006101a08201526201458c620142f7565b6101c082015260606101e08201526102006040519162013c73836201337b565b604051906102e0820182811067ffffffffffffffff821117620132d55760405260006102c08382815282602082015282604082015260608082015260606080820152606060a08201528260c08201528260e08201528261010082015262014612620142f7565b61012082015262014622620142f7565b6101408201526060610160820152606061018082015260606101a0820152826101c0820152826101e08201528261020082015282610220820152826102408201528261026082015282610280820152826102a08201520152565b90604051918281549182825260208201906000526020600020926000905b806007830110620148a9576201410f94549181811062014872575b8181106201483b575b81811062014804575b818110620147cd575b81811062014796575b8181106201475f575b81811062014729575b10620146fb575b500383620133b5565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260200138620146f2565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b168152019301620146eb565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b168152019301620146e2565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b168152019301620146d9565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b168152019301620146d0565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b168152019301620146c7565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b168152019301620146be565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b168152019301620146b5565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e08201520194019201859293916201469a565b60085460ff168015620149475790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562014a1a57600091620149e2575b50151590565b90506020813d60201162014a11575b8162014a0060209383620133b5565b8101031262013406575138620149dc565b3d9150620149f1565b6040513d6000823e3d90fd5b60ff166001019060ff821162013c0b57565b62014a4b6003600060ff84511662017282565b60ff604091600080845162014a618682620133b5565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152855162014b028162014acf60208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528a6024840152606483019062013935565b876044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282620133b5565b51906a636f6e736f6c652e6c6f675afa50168083521562014b21575050565b6060820162014b4873ffffffffffffffffffffffffffffffffffffffff6000835162017282565b90600080845162014b5a8682620133b5565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152855162014bc8816200035c60208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528a6024840152606483019062013935565b51906a636f6e736f6c652e6c6f675afa50526080820162014bea815162014dc1565b905260005b81830190815190815181101562014d0357839260c062014cf78362014c2a60028462014c1e8460019a62013fe9565b51015160009062017282565b936000808962014cac62014cdf825162014c458482620133b5565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152835192839160208301957fb60e72cc0000000000000000000000000000000000000000000000000000000087526024840152606483019062013935565b8b6044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282620133b5565b51906a636f6e736f6c652e6c6f675afa505162013fe9565b51015201905062014bef565b5050505050565b66ffffffffffffff600162014d1f9262017282565b9060008060406200035c62014d3b825162014c458482620133b5565b51906a636f6e736f6c652e6c6f675afa50565b90600062014d1f9262017282565b7ffffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364139600162014d1f9262017282565b62014d1f9160ff9162017282565b66fffffffffffffe600062014d1f9262017282565b62014d1f9166ffffffffffffff9162017282565b66ffffffffffffff600062014d1f9262017282565b73ffffffffffffffffffffffffffffffffffffffff811660018110158062014e95575b801562014e80575b801562014e62575b801562014e57575b1562014e535773ffffffffffffffffffffffffffffffffffffffff9150604051602081019182526020815262014e49604082620133b5565b5190201662014dd6565b5090565b50813b151562014e11565b50734e59b44847b379578588920ca78fbf26c0b4956c811462014e09565b506a636f6e736f6c652e6c6f67811462014e01565b5060ff81111562014df9565b60409062014ebd62013ceb949360608352606083019062013935565b908280828403806020850152600a85527f636f6e6669675f6e657700000000000000000000000000000000000000000000602086015201910152019062013935565b91909161ffff604051937f6900a3ae000000000000000000000000000000000000000000000000000000008552166004840152600083602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562014a1a576000936201521a575b50604051917f6900a3ae0000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562014a1a57600092620151f9575b5073ffffffffffffffffffffffffffffffffffffffff604051917f56ca623e000000000000000000000000000000000000000000000000000000008352166004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562014a1a576012600094601b60029362015190986201513c968992620151d6575b50601090602e604051998a967f7b227468726573686f6c64223a22000000000000000000000000000000000000602089015262015085815180926020868c01910162013910565b87017f222c22636865636b706f696e74223a220000000000000000000000000000000083820152620150c2825180936020603e8501910162013910565b01017f222c2266726f6d223a22666c6174222c22636f6e74656e74223a22000000000083820152620150ff825180936020602b8501910162013910565b01017f222c22636865636b706f696e746572223a2200000000000000000000000000008382015262000bd1825180936020602d8501910162013910565b6201515b737109709ecfa91a80626ff3989d68f67f5b1dd12d62017484565b60405193849283927f0199a2200000000000000000000000000000000000000000000000000000000084526004840162014ea1565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811562014a1a57600091620151be575090565b62013ceb91503d806000833e62000e5d8183620133b5565b6010919250620151f1903d808c833e62000e5d8183620133b5565b91906201503e565b620152129192503d806000833e62000e5d8183620133b5565b903862014fbb565b620152339193503d806000833e62000e5d8183620133b5565b913862014f60565b90604051917f6900a3ae00000000000000000000000000000000000000000000000000000000835260016004840152600083602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562014a1a576000936201521a5750604051917f6900a3ae0000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562014a1a57600092620151f9575073ffffffffffffffffffffffffffffffffffffffff604051917f56ca623e000000000000000000000000000000000000000000000000000000008352166004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562014a1a576012600094601b60029362015190986201513c968992620151d65750601090602e604051998a967f7b227468726573686f6c64223a22000000000000000000000000000000000000602089015262015085815180926020868c01910162013910565b90604051917f6900a3ae00000000000000000000000000000000000000000000000000000000835260026004840152600083602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562014a1a576000936201521a5750604051917f6900a3ae0000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562014a1a57600092620151f9575073ffffffffffffffffffffffffffffffffffffffff604051917f56ca623e000000000000000000000000000000000000000000000000000000008352166004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562014a1a576012600094601b60029362015190986201513c968992620151d65750601090602e604051998a967f7b227468726573686f6c64223a22000000000000000000000000000000000000602089015262015085815180926020868c01910162013910565b906201410f6001602960405180957f7b22696e707574223a0000000000000000000000000000000000000000000000602083015262015582815180926020868601910162013910565b81017f7d000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1810185520183620133b5565b60006201564b620155eb60409362015539565b620156b06201560e737109709ecfa91a80626ff3989d68f67f5b1dd12d62017484565b91855195869485947f0199a22000000000000000000000000000000000000000000000000000000000865260606004870152606486019062013935565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152601083527f636f6e6669675f696d61676548617368000000000000000000000000000000006020840152016044860152019062013935565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811562014a1a57600091620156f5575b506020815191818082019384920101031262013406575190565b6201570d91503d806000833e62000e5d8183620133b5565b38620156db565b60208101519091620157d3911562015820576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a0815262011a8d60c082620133b5565b6040519060208201927f1901000000000000000000000000000000000000000000000000000000000000845260228301526042820152604281526201581a606282620133b5565b51902090565b46906201572a565b6040519062015839604083620133b5565b600582527f66616c73650000000000000000000000000000000000000000000000000000006020830152565b6040519062015876604083620133b5565b600482527f74727565000000000000000000000000000000000000000000000000000000006020830152565b604090620158be62013ceb949360608352606083019062013935565b908280828403806020850152601085527f7369676e61747572655f656e636f646500000000000000000000000000000000602086015201910152019062013935565b911562015b06576201595560006201591762015865565b945b604051809381927f71aad10d00000000000000000000000000000000000000000000000000000000835260206004840152602483019062013935565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562014a1a576015600094600c600293620151909862015a8f96899262015ae3575b50600f906029604051998a967f7b22696e707574223a00000000000000000000000000000000000000000000006020890152620159d8815180926020868c01910162013910565b87017f2c227369676e617475726573223a2200000000000000000000000000000000008382015262015a1582518093602060388501910162013910565b01017f222c22636861696e4964223a00000000000000000000000000000000000000008382015262015a52825180936020601b8501910162013910565b01017f2c22636865636b706f696e74657244617461223a2200000000000000000000008382015262000bd182518093602060218501910162013910565b62015aae737109709ecfa91a80626ff3989d68f67f5b1dd12d62017484565b60405193849283927f0199a22000000000000000000000000000000000000000000000000000000000845260048401620158a2565b600f91925062015afe903d808c833e62000e5d8183620133b5565b919062015991565b62015955600062015b1662015828565b9462015919565b906201595560006201591762015828565b60009073ffffffffffffffffffffffffffffffffffffffff8116906001821080156201620d575b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562015e8657604051907f4c63e562000000000000000000000000000000000000000000000000000000008252151560048201528381602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562015e7b57620161f6575b50600a46148015620161ea575b1562015ea8577342000000000000000000000000000000000000008210801562015e8a575b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562015e8657604051907f4c63e562000000000000000000000000000000000000000000000000000000008252151560048201528381602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562015e7b5790849162015e62575b50505b3b15737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562015e5e57604051907f4c63e56200000000000000000000000000000000000000000000000000000000825260048201528281602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562015e3a5790839162015e45575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562015e1d576040517f4c63e5620000000000000000000000000000000000000000000000000000000081526a636f6e736f6c652e6c6f6782141560048201528281602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562015e3a5790839162015e21575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562015e1d57734e59b44847b379578588920ca78fbf26c0b4956c604051917f4c63e562000000000000000000000000000000000000000000000000000000008352141560048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562015e125762015dfa575050565b62015e07828092620133b5565b62015e0f5750565b80fd5b6040513d84823e3d90fd5b5080fd5b8162015e2d91620133b5565b62015e1d57813862015d6d565b6040513d85823e3d90fd5b8162015e5191620133b5565b62015e1d57813862015ce9565b8280fd5b8162015e6e91620133b5565b62015e5e57823862015c70565b6040513d86823e3d90fd5b8380fd5b50734200000000000000000000000000000000000800821162015bfa565b61a4b146148015620161dd575b1562015f695760648210801562015f5e575b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562015e8657604051907f4c63e562000000000000000000000000000000000000000000000000000000008252151560048201528381602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562015e7b5790849162015f45575b505062015c73565b8162015f5191620133b5565b62015e5e57823862015f3d565b506068821162015ec7565b61a86a46148015620161d1575b1562015c735773010000000000000000000000000000000000000082108015620161b3575b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562015e8657604051907f4c63e562000000000000000000000000000000000000000000000000000000008252151560048201528381602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562015e7b579084916201619a575b5050730200000000000000000000000000000000000000821080156201617c575b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562015e8657604051907f4c63e562000000000000000000000000000000000000000000000000000000008252151560048201528381602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562015e7b5790849162016163575b5050730300000000000000000000000000000000000000821080156201614557737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562015e8657604051907f4c63e562000000000000000000000000000000000000000000000000000000008252151560048201528381602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562015e7b5790849162015f4557505062015c73565b507303000000000000000000000000000000000000ff821162015ec7565b816201616f91620133b5565b62015e5e578238620160a8565b507302000000000000000000000000000000000000ff821162016032565b81620161a691620133b5565b62015e5e57823862016011565b507301000000000000000000000000000000000000ff821162015f9b565b5061a869461462015f76565b5062066eed461462015eb5565b506101a4461462015bd5565b836201620591949294620133b5565b913862015bc8565b5060ff821162015b55565b61ffff604051917f6900a3ae000000000000000000000000000000000000000000000000000000008352166004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562014a1a57600091620163d2575b50604051917f6900a3ae0000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562014a1a5762015190936000938493620163a2575b50601b6201513c926010600293602e6040519788947f7b227468726573686f6c64223a22000000000000000000000000000000000000602087015262016328815180926020868a01910162013910565b85017f222c22636865636b706f696e74223a22000000000000000000000000000000008382015262016365825180936020603e8501910162013910565b01017f222c2266726f6d223a22666c6174222c22636f6e74656e74223a2200000000008382015262000bd1825180936020602b8501910162013910565b60029193506201513c926010620163c6601b933d808a833e62000e5d8183620133b5565b959350509250620162d8565b620163ea91503d806000833e62000e5d8183620133b5565b3862016276565b6040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260016004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562014a1a57600091620164ff575b50604051907f6900a3ae00000000000000000000000000000000000000000000000000000000825260016004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562014a1a5762015190936000938493620163a25750601b6201513c926010600293602e6040519788947f7b227468726573686f6c64223a22000000000000000000000000000000000000602087015262016328815180926020868a01910162013910565b6201651791503d806000833e62000e5d8183620133b5565b386201644c565b6040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260016004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562014a1a576000916201662c575b50604051907f6900a3ae00000000000000000000000000000000000000000000000000000000825260036004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562014a1a5762015190936000938493620163a25750601b6201513c926010600293602e6040519788947f7b227468726573686f6c64223a22000000000000000000000000000000000000602087015262016328815180926020868a01910162013910565b6201664491503d806000833e62000e5d8183620133b5565b3862016579565b6040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260016004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562014a1a57600091620163d25750604051917f6900a3ae0000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562014a1a5762015190936000938493620163a25750601b6201513c926010600293602e6040519788947f7b227468726573686f6c64223a22000000000000000000000000000000000000602087015262016328815180926020868a01910162013910565b9062015a8f6001600c600094620151909686146201688d57600f6201677a62015865565b60296040519788947f7b22696e707574223a00000000000000000000000000000000000000000000006020870152620167bd815180926020868a01910162013910565b85017f2c227369676e617475726573223a22000000000000000000000000000000000083820152620167fa82518093602060388501910162013910565b01017f222c22636861696e4964223a00000000000000000000000000000000000000008382015262016837825180936020601b8501910162013910565b01017f7d000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1810184520182620133b5565b600f6201689962015828565b6201677a565b620151909162015a8f6001600c600094600f6201677a62015865565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156201340657604051907f98296c5400000000000000000000000000000000000000000000000000000000825260048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562014a1a57620169555750565b60006201410f91620133b5565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156201340657604051907f98296c54000000000000000000000000000000000000000000000000000000008252600482015260016024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562014a1a57620169555750565b600090737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1562015e1d57604051907f98296c5400000000000000000000000000000000000000000000000000000000825260048201528160248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562015e125762016a5a575050565b8162016a6691620133b5565b50565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156201340657604051917f98296c5400000000000000000000000000000000000000000000000000000000835260048301526024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562014a1a57620169555750565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156201340657604051917f7c84c69b00000000000000000000000000000000000000000000000000000000835260048301526024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562014a1a57620169555750565b60206201410f92949362016b858260405197856200f4878a9751809285808b01910162013910565b01037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101845283620133b5565b60409081519162016bc58184620133b5565b600f83527f7b227369676e617475726573223a5b0000000000000000000000000000000000602084015280519062016bfe8183620133b5565b600282527f5d7d000000000000000000000000000000000000000000000000000000000000602083015260009160605b845184101562016dde578362016d9f57825162016c4c8482620133b5565b600181527f22000000000000000000000000000000000000000000000000000000000000006020820152905b62016cc6600062016c8a878962013fe9565b518651809381927f71aad10d00000000000000000000000000000000000000000000000000000000835260206004840152602483019062013935565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562016d945760019392602062016d6e93869360009162016d77575b5062016d1c828a5197856200f4878a9751809285808b01910162013910565b017f22000000000000000000000000000000000000000000000000000000000000008152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1810184520182620133b5565b93019262016c2e565b62016d8d913d8091833e62000e5d8183620133b5565b3862016cfd565b85513d6000823e3d90fd5b825162016dad8482620133b5565b600281527f2c2200000000000000000000000000000000000000000000000000000000000060208201529062016c78565b829562016e1b939550600094509062016df8929162016b5d565b62016e806201560e737109709ecfa91a80626ff3989d68f67f5b1dd12d62017484565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152601083527f7369676e61747572655f636f6e636174000000000000000000000000000000006020840152016044860152019062013935565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af191821562016eaf5750600091620151be575090565b513d6000823e3d90fd5b6040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260366004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562014a1a57600091620171a3575b50604051917f6900a3ae0000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562014a1a5760009262017182575b50604051917f6900a3ae00000000000000000000000000000000000000000000000000000000835260016004840152600083602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562014a1a576002600b620170ff9460196040986009620170dc9660009a8b9162017164575b50602c8c51998a967f7b226d61784465707468223a0000000000000000000000000000000000000000602089015262017025815180926020868c01910162013910565b87017f2c2273656564223a220000000000000000000000000000000000000000000000838201526201706282518093602060358501910162013910565b01017f222c226d696e5468726573686f6c644f6e4e6573746564223a00000000000000838201526201709f82518093602060228501910162013910565b01017f2c22736b65776564223a220000000000000000000000000000000000000000008382015262000bd182518093602060248501910162013910565b620151906201560e737109709ecfa91a80626ff3989d68f67f5b1dd12d62017484565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152601583527f646576546f6f6c735f72616e646f6d436f6e66696700000000000000000000006020840152016044860152019062013935565b6201717b91503d808d833e62000e5d8183620133b5565b3862016fe2565b6201719b9192503d806000833e62000e5d8183620133b5565b903862016f6f565b620171bb91503d806000833e62000e5d8183620133b5565b3862016f14565b6000620171d5620170dc60409362015539565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152600d83527f636f6e6669675f656e636f6465000000000000000000000000000000000000006020840152016044860152019062013935565b9190820391821162013c0b57565b811562017253570690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600090838311620174005782811091821580620173f5575b620173ed57620172ab84866201723a565b926001840180941162013c0b57600383111580620173e3575b620173d2577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83101580620173c7575b620173b45785831115620173625750509062017315846201731b936201723a565b62017248565b9081156201735d576201732f925062013f7c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811162013c0b5790565b505090565b95949291909562017374575b50505050565b8394955062017315906201738993946201723a565b9081156201735d576201739d92506201723a565b6001810180911162013c0b5790388080806201736e565b5050905062013ceb92915019906201723a565b5082198411620172f4565b505091905062013ceb925062013f7c565b50828411620172c4565b509250505090565b50848211156201729a565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374645574696c7320626f756e642875696e743235362c75696e743235362c7560448201527f696e74323536293a204d6178206973206c657373207468616e206d696e2e00006064820152fd5b73ffffffffffffffffffffffffffffffffffffffff166040517fc1978d1f00000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5345515f53444b5f5250435f4d494e5f504f52540000000000000000000000006044820152602081606481855afa90811562014a1a57600091620178c4575b50604051907fc1978d1f00000000000000000000000000000000000000000000000000000000825260206004830152601460248301527f5345515f53444b5f5250435f4d41585f504f52540000000000000000000000006044830152602082606481865afa91821562014a1a576000926201788a575b508082106201782c577fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a6548015620177d7575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811462013c0b5781600162017612920193847fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a6556201723a565b916001830180931162013c0b5762017636926201762f9162017248565b9062013f7c565b6040517ff877cb1900000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5345515f53444b5f5250435f55524c5f505245464958000000000000000000006044820152600081606481865afa90811562014a1a57600091620177b8575b50604051917ff877cb1900000000000000000000000000000000000000000000000000000000835260206004840152601660248401527f5345515f53444b5f5250435f55524c5f535546464958000000000000000000006044840152600083606481875afa92831562014a1a5760009362017795575b506000906024604051809681937f6900a3ae00000000000000000000000000000000000000000000000000000000835260048301525afa90811562014a1a5762013ceb9360009262017774575b5062016b5d565b6201778d9192503d806000833e62000e5d8183620133b5565b90386201776d565b6000919350620177b0903d8084833e62000e5d8183620133b5565b929062017720565b620177d091503d806000833e62000e5d8183620133b5565b38620176aa565b50604051602081019036600083376201782360208236810160008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282620133b5565b519020620175b7565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e76616c696420706f72742072616e676500000000000000000000000000006044820152fd5b90916020823d602011620178bb575b81620178a860209383620133b5565b8101031262015e0f575051903862017584565b3d915062017899565b906020823d602011620178f3575b81620178e160209383620133b5565b8101031262015e0f575051386201750e565b3d9150620178d2565b61010081015160405160208101818193602081519391019260005b81811062017ca7575050620179549250037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282620133b5565b5190209060ff815116801560001462017b715750906040820151928351916201799a620179818462013419565b93620179916040519586620133b5565b80855262013419565b937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe060208501950136863760005b865181101562017aa25780620179e16001928962013fe9565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e0830152610100820152610100815262017a8b61012082620133b5565b51902062017a9a828862013fe9565b5201620179c8565b5092919450926040519081602081019182945192909260005b81811062017b5757505062017af89250037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282620133b5565b51902091608060608301519201516040519260208401947f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a2865260408501526060840152608083015260a082015260a081526201581a60c082620133b5565b845183526020948501948694509092019160010162017abb565b6001810362017bce575060a0015160208151910120906040519060208201927fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d466845260408301526060820152606081526201581a608082620133b5565b6002810362017c24575060c00151906040519060208201927f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e4845260408301526060820152606081526201581a608082620133b5565b6003810362017c7a575060e00151906040519060208201927fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d466845260408301526060820152606081526201581a608082620133b5565b7f048183200000000000000000000000000000000000000000000000000000000060005260045260246000fd5b845173ffffffffffffffffffffffffffffffffffffffff168352602094850194869450909201916001016201791756fe60808060405234601557611e95908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c63545bbe2a1461002757600080fd5b346101ce5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101ce5760043567ffffffffffffffff81116101ce576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126101ce5761009d610264565b906100aa81600401610285565b82526100b8602482016102a2565b6020830152604481013567ffffffffffffffff81116101ce576100e1906004369184010161038e565b6040830152606481013560608301526084810135608083015260a481013567ffffffffffffffff81116101ce5761011e9060043691840101610370565b60a083015260c481013560c083015260e481013560e08301526101048101359067ffffffffffffffff82116101ce57600461015c92369201016104ab565b61010082015260243567ffffffffffffffff81116101ce576101ca916101896101a0923690600401610510565b610191610293565b9161019a6102c7565b9361067e565b604080519586526020860194909452928401919091526060830152608082015290819060a0820190565b0390f35b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff82111761021e57604052565b6101d3565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761021e57604052565b6040519061027461012083610223565b565b6040519061027460e083610223565b359060ff821682036101ce57565b6044359081151582036101ce57565b359081151582036101ce57565b67ffffffffffffffff811161021e5760051b60200190565b6064359073ffffffffffffffffffffffffffffffffffffffff821682036101ce57565b359073ffffffffffffffffffffffffffffffffffffffff821682036101ce57565b92919267ffffffffffffffff821161021e576040519161035360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160184610223565b8294818452818301116101ce578281602093846000960137010152565b9080601f830112156101ce5781602061038b9335910161030b565b90565b81601f820112156101ce578035906103a5826102af565b926103b36040519485610223565b82845260208085019360051b830101918183116101ce5760208101935b8385106103df57505050505090565b843567ffffffffffffffff81116101ce57820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082860301126101ce57610426610276565b91610433602083016102ea565b83526040820135602084015260608201359267ffffffffffffffff84116101ce5760e083610468886020809881980101610370565b60408401526080810135606084015261048360a082016102a2565b608084015261049460c082016102a2565b60a0840152013560c08201528152019401936103d0565b9080601f830112156101ce5781356104c2816102af565b926104d06040519485610223565b81845260208085019260051b8201019283116101ce57602001905b8282106104f85750505090565b60208091610505846102ea565b8152019101906104eb565b9181601f840112156101ce5782359167ffffffffffffffff83116101ce57602083818601950101116101ce57565b6040519061054b82610202565b60006020838281520152565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b906001820180921161059457565b610557565b9190820180921161059457565b909392938483116101ce5784116101ce578101920390565b908160409103126101ce576020604051916105d883610202565b805183520151602082015290565b919082519283825260005b8481106106305750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b806020809284010151828286010152016105f1565b60409073ffffffffffffffffffffffffffffffffffffffff61038b949316815281602082015201906105e6565b6040513d6000823e3d90fd5b909491939291853560f81c6001909381908761069861053e565b9360408089161480610978575b610876575b5050506001808616146108505760028581161460208501526007600286901c1688820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190809691819660201661071a9060051c90565b61072390610586565b8a820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101959098899a8161076f84610c35565b98899361077b936105a6565b9161078593610f60565b909861079991600052602052604060002090565b906107ac91600052602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff166107d591600052602052604060002090565b94815190868215159283610845575b505081610836575b506107f45750565b6040517fccbb534f00000000000000000000000000000000000000000000000000000000815281516004820152602090910151602482015280604481015b0390fd5b905060208201511015386107ec565b1415915086386107e4565b8661086b979294955061086393986105a6565b939092610a54565b919394909293929190565b8a81013560601c985060140192509087908a9084901561089a575b508291506106aa565b60038101955073ffffffffffffffffffffffffffffffffffffffff945081013560e81c9260409261091d9290916108e8916108e19189906108db8983610599565b926105a6565b369161030b565b83519586809481937fccce3bc80000000000000000000000000000000000000000000000000000000083523060048401610645565b0392165afa80156109735761093b92600091610944575b5092610599565b86388981610891565b610966915060403d60401161096c575b61095e8183610223565b8101906105be565b38610934565b503d610954565b610672565b5073ffffffffffffffffffffffffffffffffffffffff8916156106a5565b60405190610120820182811067ffffffffffffffff82111761021e576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b90610a4a90604093969594966060845260608401916109f1565b9460208201520152565b9194929092600095600095600095600095600095610a70610996565b60028152937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9460005b828110610ac757505050505050508051151580610ab9575b6107f45750565b506020810151841115610ab2565b600381019d50959b5093995091975092909190610aeb908b9085013560e81c610599565b958a6000848903610c2f575089915b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c03610bff5750906001610b3489610b3b9487896105a6565b908b61067e565b9c939c9b929b9a919a99909a9b9d8e9d9e8f905b10610bb95750928b885114610bb0575b808b1015610b7e57508a60c08501528992959295949194939093610a9a565b7f37daf62b0000000000000000000000000000000000000000000000000000000060005260048b905260245260446000fd5b60008852610b5f565b8d8f610832610bca85858c8e6105a6565b9390926040519485947fb006aba000000000000000000000000000000000000000000000000000000000865260048601610a30565b9798999a916001610c158b610c1c94888a6105a6565b908661067e565b50929d919c909b929a9092918e8e610b4f565b91610afa565b610c97610cc3610c55610c4f6020850151151530906117dc565b936118d7565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610223565b51902090565b908160209103126101ce57517fffffffff00000000000000000000000000000000000000000000000000000000811681036101ce5790565b60409061038b9492815281602082015201916109f1565b73ffffffffffffffffffffffffffffffffffffffff61038b9593606093835216602082015281604082015201916109f1565b908160209103126101ce575190565b9080602083519182815201916020808360051b8301019401926000915b838310610d8557505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080610df8604085015160e0604086015260e08501906105e6565b936060810151606085015260808101511515608085015260a0810151151560a0850152015191015297019301930191939290610d76565b906020808351928381520192019060005b818110610e4d5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101610e40565b91610f5261038b949260408552610e9660408601825160ff169052565b602081015115156060860152610100610f0b610ec3604084015161012060808a0152610160890190610d59565b606084015160a0890152608084015160c089015260a08401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08983030160e08a01526105e6565b9160c08101518288015260e081015161012088015201517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086830301610140870152610e2f565b9260208185039101526109f1565b9391909360009460009460005b818110610f7b575050505050565b8481013560f881901c9860019092019788979692909160fc1c9889156117755750600189146117355760028914611568576003891461153957600489146114b8576006891461141257600589146113c457600789146112fd57600889146112a7576009891461117e57600a891461101b577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b9091929394959697506003891697881561116d575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190810190816110939187876105a6565b6040517f898bd921000000000000000000000000000000000000000000000000000000008152939184916110cb918a60048501610d01565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa9182156109735761110e9360009361113a575b5060ff909a168091019a611c43565b908015611134579061112891600052602052604060002090565b955b9392919093610f6d565b50611128565b60ff91935061115f9060203d8111611166575b6111578183610223565b810190610d4a565b92906110ff565b503d61114d565b8084013560f81c9850600101611030565b90919293949596975060038916978815611296575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190810190816111f69187876105a6565b6040517f13792a4a0000000000000000000000000000000000000000000000000000000081529391849161122e918b60048501610e79565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa918215610973576112709360009361113a575060ff909a168091019a611c43565b908015611290579061128a91600052602052604060002090565b9561112a565b5061128a565b8084013560f81c9850600101611193565b9850602087019750949593949293919290918201356112c586611bea565b81146112d5575b61127090611c04565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506112cc565b975090919293949597600f169687156113b2575b602060006113236113909a9b86611ab2565b9c9092918a60405161136681610c978a82019485603c917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008252601c8201520190565b51902092604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa15610973576112709060ff6000519a1680910199611af5565b600189019883013560f81c9750611311565b9850602087019750949593949293919290918201358085146113ea575b61127090611bab565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506113e1565b989091929394959662ffffff985061143a611434600c8416603f9060021c1690565b60ff1690565b9182156114a4575b6003168015611493575b9081906114779061146f908781013560e81c906003019c168c01809c89896105a6565b90898b610f60565b91111561148a575b906112709291611b60565b9982019961147f565b50600281019084013560f01c61144c565b8482013560f81c9250600190910190611442565b97509761150e61151b929394959697600f61152393169085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b92908301809386866105a6565b908688610f60565b9061128a92980198600052602052604060002090565b985096509394929391929091908082013590602001968015611290579061128a91600052602052604060002090565b90919293949596975060038916978815611724575b8084013560601c996115dc916014019061159c9060021c600316611434565b9085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9081019061164060208c6115f285858b8b6105a6565b919073ffffffffffffffffffffffffffffffffffffffff8c604051968795869485937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501610d01565b0392165afa908115610973577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000916000916116f6575b5016036116b257509060ff61127092991680910199611af5565b6108326116c38c93899389896105a6565b906040519485947fb2fed7ae00000000000000000000000000000000000000000000000000000000865260048601610d18565b611717915060203d811161171d575b61170f8183610223565b810190610cc9565b38611698565b503d611705565b8381013560f81c985060010161157d565b98600f91929394959697985016968715611764575b60148101976112709160ff9091169084013560601c611af5565b8281013560f81c975060010161174a565b98509091929394959698600f169788156117c7575b506020600061179d6113909a9b86611ab2565b9c90916040519384938c859094939260ff6060936080840197845216602083015260408201520152565b60018101995083013560f81c9750602061178a565b1561188c576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a08152610cc360c082610223565b46906117e5565b805160209091019060005b8181106118ab5750505090565b825173ffffffffffffffffffffffffffffffffffffffff1684526020938401939092019160010161189e565b6101008101516040516118f281610c97602082018095611893565b51902090611901815160ff1690565b60ff81168061197a57505090610cc361191d6040840151611d24565b92610c9760806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b600181036119d857505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46693810193845290810191909152606081019290925290610cc38160808101610c97565b60028103611a2e57505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e460208201908152918101929092526060820192909252610cc38160808101610c97565b600303611a82575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46660208201908152918101929092526060820192909252610cc38160808101610c97565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff81116105945791565b90604051907fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208301937f53657175656e6365207369676e65723a0a000000000000000000000000000000855260601b166031830152604582015260458152610cc3606582610223565b916040519160208301937f53657175656e6365206e657374656420636f6e6669673a0a0000000000000000855260388401526058830152607882015260788152610cc3609882610223565b60405160208101917f53657175656e636520737461746963206469676573743a0a00000000000000008352603882015260388152610cc3605882610223565b610c97610cc3610c55610c4f6000602086015115156117dc565b60405160208101917f53657175656e636520616e792061646472657373207375626469676573743a0a8352604082015260408152610cc3606082610223565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e63652073617069656e7420636f6e6669673a0a00000000000000865260601b166039840152604d830152606d820152606d8152610cc3608d82610223565b8051821015611cc75760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805160209091019060005b818110611d0e5750505090565b8251845260209384019390920191600101611d01565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611d6a611d54836102af565b92611d626040519485610223565b8084526102af565b0136602083013760005b8351811015611e465780611d8a60019286611cb3565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152611e3261012082610223565b519020611e3f8285611cb3565b5201611d74565b50909150604051610cc381610c97602082018095611cf656fea26469706673582212201a9f2861a08bc1996a59ae125a7db061038f3e34d7d2884d636c0442c0f707f164736f6c634300081c0033a264697066735822122090f964d029e459c6b6b579b7839b5826af9c353b1a716b598fccfea452eb3dcb64736f6c634300081c0033","sourceMap":"897:68123:88:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1065:26:16;897:68123:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29755:2;897:68123;2933:19:15;29656:8:88;;;;:::i;:::-;2933:19:15;:::i;:::-;;29813:1:88;897:68123;;;;;;;;:::i;:::-;;;;;;;;;;;9786:54:15;;897:68123:88;;9786:54:15;;;;;;;897:68123:88;9786:54:15;;897:68123:88;;;;;;:::i;:::-;;;;;2024:14:2;9786:54:15;;;;;;;;:::i;:::-;-1:-1:-1;;;;;897:68123:88;;9371:159:15;679:42;9371:159;;-1:-1:-1;;;;2933:19:15;:::i;:::-;897:68123:88;;;;;;;:::i;:::-;;;;;;;;;;;9786:54:15;;897:68123:88;;9786:54:15;;;;;;;897:68123:88;9786:54:15;;897:68123:88;;;;;;:::i;:::-;;;;;2024:14:2;9786:54:15;;;;;;;;:::i;:::-;897:68123:88;;;;;;;9371:159:15;679:42;9371:159;;-1:-1:-1;;;897:68123:88;;;;2933:19:15;;29752:1:88;;2933:19:15;:::i;:::-;897:68123:88;;;;;;:::i;:::-;;;;;;;;;;;9786:54:15;;897:68123:88;;9786:54:15;;;;;;;897:68123:88;9786:54:15;;897:68123:88;;;;;;:::i;:::-;;;;;2024:14:2;9786:54:15;;;;;;;;:::i;:::-;897:68123:88;;;;;;;9371:159:15;679:42;9371:159;;-1:-1:-1;897:68123:88;;;;29752:1;1270:2:51;;;;;;897:68123:88;;30039:18;:33;:18;897:68123;30039:18;;;:::i;:::-;897:68123;30039:33;:::i;:::-;897:68123;29752:1;897:68123;;;;;;;1270:2:51;897:68123:88;;;:::i;:::-;;;;;;;;:::i;:::-;;;;1270:2:51;:::i;:::-;;9786:54:15;897:68123:88;1270:2:51;;;;897:68123:88;1270:2:51;;897:68123:88;;1270:2:51;;;30136:33:88;1270:2:51;;30136:18:88;1270:2:51;897:68123:88;;;1270:2:51;29948:1:88;1270:2:51;897:68123:88;1270:2:51;29925:1:88;1270:2:51;897:68123:88;;1270:2:51;;;897:68123:88;;30083:36;;;30136:18;:::i;:33::-;897:68123;;1270:2:51;;;;;897:68123:88;;1270:2:51;;;;;;30126:73:88;;;1270:2:51;;897:68123:88;1270:2:51;30126:73:88;897:68123;;;30222:74;30245:37;897:68123;30222:74;;;897:68123;;30222:74;;2024:14:2;897:68123:88;30222:74;;;897:68123;30222:74;;:::i;:::-;336:42:2;30206:91:88;;;;897:68123;;30206:91;2024:14:2;30206:91:88;;897:68123;;30206:91;;2024:14:2;897:68123:88;;2024:14:2;897:68123:88;;2024:14:2;897:68123:88;2024:14:2;;;;:::i;:::-;30206:91:88;897:68123;;;336:42:2;30206:91:88;;;;;;;;897:68123;2024:14:2;30303:61:88;2024:14:2;30303:61:88;2024:14:2;897:68123:88;30303:10;2024:14:2;;;897:68123:88;;;;30303:61;;;;;;2024:14:2;30303:61:88;;897:68123;30303:61;;;:::i;:::-;;;;;;;;;;;;;897:68123;;;;;30303:61;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;897:68123;2024:14:2;897:68123:88;;2024:14:2;;;;;30206:91:88;897:68123;;30206:91;;;:::i;:::-;897:68123;;;;30206:91;;;;897:68123;;2024:14:2;897:68123:88;;2024:14:2;;;;;1270:2:51;897:68123:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2933:19:15;1161:1:88;897:68123;;;2933:19:15;:::i;:::-;897:68123:88;;;;;;;;:::i;:::-;;;;;;;;;;;9786:54:15;;897:68123:88;;9786:54:15;;;;;;;897:68123:88;9786:54:15;;897:68123:88;;;;;;:::i;9786:54:15:-;-1:-1:-1;;;;;897:68123:88;;9371:159:15;679:42;9371:159;;;897:68123:88;;:::i;:::-;;;1206:17;;2482:4:48;897:68123:88;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;897:68123:88;;;1968:23:97;2024:14:2;1968:23:97;;897:68123:88;1968:23:97;;2024:14:2;-1:-1:-1;;1968:23:97;897:68123:88;1968:23:97;897:68123:88;1968:23:97;;;;;;;-1:-1:-1;;1968:23:97;;;897:68123:88;;;;2018:19:97;2024:14:2;2018:19:97;;897:68123:88;;;2018:19:97;;2024:14:2;-1:-1:-1;;2018:19:97;897:68123:88;2018:19:97;897:68123:88;2018:19:97;;;;;;;-1:-1:-1;;2018:19:97;;;897:68123:88;;;;;2080:35:97;2024:14:2;2080:35:97;;897:68123:88;;2080:35:97;;2024:14:2;-1:-1:-1;;2080:35:97;897:68123:88;2080:35:97;897:68123:88;2080:35:97;;;;;;897:68123:88;-1:-1:-1;2024:14:2;-1:-1:-1;2024:14:2;897:68123:88;;-1:-1:-1;897:68123:88;-1:-1:-1;897:68123:88;-1:-1:-1;897:68123:88;-1:-1:-1;;;2080:35:97;;;897:68123:88;;;;;;;;;;;;;;;;;;;;;;;2024:14:2;;;:::i;:::-;;;897:68123:88;2024:14:2;;;897:68123:88;2024:14:2;897:68123:88;;;;;;;;2024:14:2;;;:::i;:::-;;;897:68123:88;2024:14:2;;;897:68123:88;2024:14:2;897:68123:88;;;;;;;;2024:14:2;;;:::i;:::-;;;;897:68123:88;2024:14:2;;;897:68123:88;;;;;;;2024:14:2;;:::i;:::-;;;897:68123:88;2024:14:2;;;897:68123:88;;;;;;;;;;;:::i;:::-;;2208:11:97;897:68123:88;2208:11:97;:::i;:::-;897:68123:88;;2200:53:97;;;;;2024:14:2;2200:53:97;;897:68123:88;;2200:53:97;;897:68123:88;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;897:68123:88;;;;:::i;:::-;2200:53:97;-1:-1:-1;;;897:68123:88;2200:53:97;;;;;;;-1:-1:-1;;2200:53:97;;;897:68123:88;2259:26:97;1465:63:88;2259:26:97;1465:63:88;1354:41;;;:::i;:::-;897:68123;1465:10;2024:14:2;;;897:68123:88;;;1465:63;;;;;2024:14:2;1465:63:88;;;897:68123;1465:63;;;:::i;:::-;;;;;;;;;;897:68123;;1642:45;;-1:-1:-1;897:68123:88;;;;;;1465:63;;897:68123;1535:19;;1580:38;;1535:19;;1642:45;1535:19;;;:::i;:::-;1580:38;:::i;:::-;;;:::i;:::-;897:68123;1465:10;2024:14:2;;;897:68123:88;1642:45;;:::i;1465:63::-;1535:19;1465:63;;1642:45;1465:63;;1580:38;1465:63;;;1580:38;1465:63;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;1465:63:88;;-1:-1:-1;1465:63:88;-1:-1:-1;1465:63:88;;-1:-1:-1;;1465:63:88;;897:68123;;2024:14:2;897:68123:88;;2024:14:2;;;;;2200:53:97;1465:63:88;2200:53:97;;;;;;-1:-1:-1;;;2200:53:97;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;2080:35;897:68123:88;2080:35:97;;;;;;-1:-1:-1;;;2080:35:97;;;;;;:::i;:::-;;;;;;897:68123:88;;2024:14:2;-1:-1:-1;;2024:14:2;;;;;2018:19:97;;;;;;-1:-1:-1;;;2018:19:97;;;;;;:::i;:::-;;;;;;897:68123:88;;2024:14:2;-1:-1:-1;;2024:14:2;;;;;1968:23:97;;;;;-1:-1:-1;;;1968:23:97;;;;;;:::i;:::-;;;;;897:68123:88;;2024:14:2;-1:-1:-1;;2024:14:2;;;;;897:68123:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;57161:1;897:68123;57131:14;;:20;;897:68123;57131:31;336:42:2;57121::88;;;;897:68123;;57121:42;2024:14:2;57121:42:88;;897:68123;57121:42;;897:68123;;;57121:42;897:68123;57121:42;336::2;57121::88;;;;;;;;897:68123;57189:14;;;;;:::i;:::-;897:68123;57233:38;897:68123;;;;57233:38;:::i;:::-;897:68123;;;294:80:98;897:68123:88;;294:80:98;:::i;:::-;897:68123:88;;294:80:98;897:68123:88;;294:80:98;:::i;:::-;897:68123:88;;;57491:67;897:68123;57406:50;897:68123;;;;57406:50;:::i;:::-;897:68123;;;;;57517:22;897:68123;;;;57517:22;;:::i;:::-;897:68123;57491:67;;:::i;:::-;897:68123;;;;;:::i;:::-;;;;;;57646:25;2024:14:2;57646:25:88;;897:68123;57646:25;;2024:14:2;897:68123:88;57646:25;897:68123;57646:25;336:42:2;57646:25:88;;;;;;897:68123;;;;57646:25;;;897:68123;;;;;;;;;57696:25;2024:14:2;57696:25:88;;897:68123;57696:25;;2024:14:2;897:68123:88;57696:25;897:68123;57696:25;336:42:2;57696:25:88;;;;;;;897:68123;;57696:25;;;897:68123;57677:16;897:68123;;57677:16;;897:68123;;;;;;;;;;;;;;;;;;;;57901:29;2024:14:2;57901:29:88;;897:68123;57901:29;;897:68123;;;57901:29;897:68123;57901:29;336:42:2;57901:29:88;;;;;;;57747:197;897:68123;;;57901:29;;;897:68123;;57873:64;897:68123;2024:14:2;897:68123:88;;57873:64;;2024:14:2;897:68123:88;57873:64;;2024:14:2;;897:68123:88;;2024:14:2;;897:68123:88;2024:14:2;;;;;;:::i;:::-;;;897:68123:88;2024:14:2;;;897:68123:88;57873:64;;;;;;;;;;:::i;:::-;57747:197;:::i;:::-;57974:48;897:68123;57728:16;;:216;;;;57974:48;:::i;:::-;57950:21;897:68123;57950:21;;897:68123;;;;;;;;;;;;;;;;;;;58202:29;2024:14:2;58202:29:88;;897:68123;58202:29;;897:68123;;;58202:29;897:68123;58202:29;336:42:2;58202:29:88;;;;;;;58048:197;897:68123;;;58202:29;;;897:68123;;58174:64;897:68123;2024:14:2;897:68123:88;;58174:64;;2024:14:2;897:68123:88;58174:64;;2024:14:2;;897:68123:88;;2024:14:2;;897:68123:88;2024:14:2;;;;;;:::i;:::-;;;897:68123:88;2024:14:2;;;897:68123:88;58174:64;;;;;;;;;;:::i;:::-;58048:197;:::i;:::-;58029:16;58550:58;58275:48;897:68123;58029:16;;:216;;;;58275:48;:::i;:::-;58251:21;897:68123;58251:21;;897:68123;;;58330:20;;;;897:68123;58330:20;;897:68123;2024:14:2;897:68123:88;58390:20;;:30;897:68123;;;58450:20;;:30;2482:4:48;897:68123:88;58566:20;;897:68123;58596:10;2024:14:2;;;897:68123:88;58550:58;;:::i;:::-;897:68123;;58524:85;2024:14:2;58524:85:88;;897:68123;58524:85;;2024:14:2;897:68123:88;2024:14:2;;;897:68123:88;58524:85;897:68123;58524:85;336:42:2;58524:85:88;;;;;;897:68123;;;;;;;58524:85;;897:68123;58495:7;897:68123;58495:7;;;58504;897:68123;58504:7;;58513;;;;897:68123;;;;;;;;58706:16;897:68123;;;;;;;;58774:29;2024:14:2;58774:29:88;;897:68123;58774:29;;897:68123;;;58774:29;897:68123;58774:29;336:42:2;58774:29:88;;;;;;;897:68123;;58774:29;;;897:68123;2024:14:2;;897:68123:88;;;58835:20;2024:14:2;58835:20:88;;897:68123;58835:20;;2024:14:2;897:68123:88;;58835:20;897:68123;58835:20;336:42:2;58835:20:88;;;;;;;897:68123;;58835:20;;;897:68123;2024:14:2;;897:68123:88;;;58882:20;2024:14:2;58882:20:88;;897:68123;58882:20;;2024:14:2;897:68123:88;;58882:20;897:68123;58882:20;336:42:2;58882:20:88;;;;;;;897:68123;;58882:20;;;897:68123;;;;;;;;;58929:20;2024:14:2;58929:20:88;;897:68123;58929:20;;2024:14:2;897:68123:88;;58929:20;897:68123;58929:20;336:42:2;58929:20:88;;;;;;;897:68123;58746:213;897:68123;;;58636:381;897:68123;;;58929:20;;;897:68123;;2024:14:2;897:68123:88;;;;;;2024:14:2;897:68123:88;;;58746:213;;;;;;2024:14:2;;;:::i;:::-;;;;;;;;;897:68123:88;;2024:14:2;;;;;;;;;:::i;:::-;;;;;;;;;897:68123:88;;2024:14:2;;897:68123:88;2024:14:2;;;;;;:::i;:::-;;;;;;;;;897:68123:88;;2024:14:2;;897:68123:88;;2024:14:2;;;;;:::i;:::-;;;58746:213:88;;57873:64;58746:213;;;;;;:::i;:::-;58988:23;;58636:381;;:::i;:::-;58615:18;897:68123;58615:18;;:402;;;897:68123;59096:14;59080:52;59096:14;;897:68123;58596:10;2024:14:2;;;897:68123:88;59080:52;;:::i;:::-;897:68123;;59054:79;2024:14:2;59054:79:88;;897:68123;59054:79;;2024:14:2;897:68123:88;2024:14:2;;;897:68123:88;59054:79;897:68123;59054:79;336:42:2;59054:79:88;;;;;;897:68123;;;;;;;;59054:79;;;897:68123;59025:7;897:68123;59025:7;897:68123;59025:7;;;59034;;;;59043;;;;897:68123;;;;;;;;59236:16;897:68123;;;;;;59304:29;2024:14:2;59304:29:88;;897:68123;59304:29;;897:68123;;;59304:29;897:68123;59304:29;336:42:2;59304:29:88;;;;;;;897:68123;;59304:29;;;897:68123;2024:14:2;;897:68123:88;;;59365:20;2024:14:2;59365:20:88;;897:68123;59365:20;;2024:14:2;897:68123:88;;59365:20;897:68123;59365:20;336:42:2;59365:20:88;;;;;;;897:68123;;59365:20;;;897:68123;2024:14:2;;897:68123:88;;;59412:20;2024:14:2;59412:20:88;;897:68123;59412:20;;2024:14:2;897:68123:88;;59412:20;897:68123;59412:20;336:42:2;59412:20:88;;;;;;;897:68123;;59412:20;;;897:68123;;;;;;;;;59459:20;2024:14:2;59459:20:88;;897:68123;59459:20;;2024:14:2;897:68123:88;;59459:20;897:68123;59459:20;336:42:2;59459:20:88;;;;;;;897:68123;;;59276:213;897:68123;;;59166:401;897:68123;;;59459:20;;;897:68123;2024:14:2;897:68123:88;;;;;;2024:14:2;897:68123:88;;;59276:213;;;;;;2024:14:2;;;:::i;59276:213:88:-;897:68123;59506:14;;:24;2024:14:2;897:68123:88;59538:23;;59166:401;;:::i;:::-;59139:24;897:68123;59139:24;;:428;;;897:68123;59574:13;;;897:68123;;;59574:13;;897:68123;;;;59616:13;;:24;897:68123;;;59782:25;;897:68123;;59722:58;59745:34;897:68123;59722:58;;;897:68123;59722:58;;;897:68123;59722:58;;:::i;:::-;59793:13;897:68123;;59782:25;;;897:68123;59782:25;;2024:14:2;;;;;;;;;;;;;;;;;;;59782:25:88;;57873:64;59782:25;;;;;;:::i;:::-;336:42:2;59682:131:88;;;;;897:68123;;;59682:131;;;;;2024:14:2;59682:131:88;;897:68123;;59682:131;897:68123;59682:131;;;:::i;:::-;;897:68123;;;336:42:2;59682:131:88;;;;;;;;897:68123;59848:14;;59978:46;59954:21;59848:14;;60130:79;59848:14;;;:::i;:::-;59884:24;;59868:40;;;:::i;:::-;;;;;:::i;:::-;;59930:18;59914:34;;;:::i;:::-;;;;;:::i;:::-;;59978:46;:::i;:::-;59954:21;;;;:70;897:68123;;58596:10;2024:14:2;;;897:68123:88;60152:14;;;897:68123;;60130:79;;;;;2024:14:2;60130:79:88;;897:68123;60130:79;;;:::i;:::-;;;;;;;;;;;897:68123;;60379:52;;897:68123;;;;;;;;;;60130:79;;897:68123;60379:52;60215:22;;;;60316:40;60215:22;;;60243:19;60288:21;60215:22;;897:68123;60215:22;;:::i;:::-;60243:19;:::i;:::-;2024:14:2;60288:21:88;;:::i;:::-;897:68123;;60316:40;;:::i;:::-;60395:14;60379:52;:::i;60130:79::-;;;;60379:52;60130:79;;60316:40;60130:79;;897:68123;60130:79;;60288:21;60215:22;60130:79;60243:19;60130:79;897:68123;60130:79;897:68123;60130:79;;;;;;;:::i;:::-;;;-1:-1:-1;60130:79:88;;-1:-1:-1;60130:79:88;;-1:-1:-1;60130:79:88;;;;-1:-1:-1;60130:79:88;;-1:-1:-1;60130:79:88;;-1:-1:-1;60130:79:88;;;897:68123;;2024:14:2;897:68123:88;;2024:14:2;;;;;59682:131:88;897:68123;;;;;;59682:131;;;:::i;:::-;897:68123;;;;59682:131;;;;;59459:20;2024:14:2;59459:20:88;;;;;;897:68123;;;59459:20;;;;;;:::i;:::-;;;;;59412;897:68123;59412:20;;;;;;897:68123;;;59412:20;;;;;;:::i;:::-;;;;;59365;;;;;;897:68123;;;59365:20;;;;;;:::i;:::-;;;;;59304:29;;;;;;897:68123;;;59304:29;;;;;;:::i;:::-;;;;;59054:79;;;;897:68123;59054:79;;;;;897:68123;59054:79;897:68123;59054:79;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;58882:20;897:68123;58882:20;;;;;;897:68123;;;58882:20;;;;;;:::i;:::-;;;;;58835;;;;;;897:68123;;;58835:20;;;;;;:::i;:::-;;;;;58774:29;;;;;;897:68123;;;58774:29;;;;;;:::i;:::-;;;;;58524:85;;;;;;;;897:68123;58524:85;897:68123;58524:85;;;;;;;:::i;:::-;;;;;;;;;58202:29;;;;;;897:68123;;;58202:29;;;;;;:::i;:::-;;;;;57901;;;;;;897:68123;;;57901:29;;;;;;:::i;:::-;;;;;57696:25;;;;897:68123;57696:25;897:68123;57696:25;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;57646;;;;897:68123;57646:25;897:68123;57646:25;;;;;;;:::i;:::-;;;;57121:42;897:68123;;57121:42;;;:::i;:::-;897:68123;;;;57121:42;;;897:68123;;;;;;;;;;;;;;;;2723:18:9;897:68123:88;;;;;;;2723:18:9;897:68123:88;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;3469:3;3423:43;:13;;897:68123;3446:13;;897:68123;3423:43;;:::i;:::-;:49;336:42:2;3413:60:88;;;;897:68123;;3413:60;2024:14:2;3413:60:88;;897:68123;3413:60;;897:68123;;;3413:60;897:68123;3413:60;336:42:2;3413:60:88;;;;;;;;897:68123;3500:14;;;;;:::i;:::-;294:80:98;897:68123:88;;294:80:98;:::i;:::-;897:68123:88;;;;;;3575:18;2024:14:2;3575:18:88;;897:68123;3575:18;;2024:14:2;897:68123:88;3575:18;897:68123;3575:18;336:42:2;3575:18:88;;;;;;;897:68123;;3575:18;;;897:68123;;;;3757:3;3735:13;;897:68123;;3731:24;;;;;3780:16;;897:68123;3780:16;;:::i;:::-;;897:68123;;336:42:2;3770::88;;;;897:68123;;3770:42;2024:14:2;3770:42:88;;897:68123;;;3780:31;;897:68123;3770:42;;897:68123;;;3770:42;897:68123;3770:42;336::2;3770::88;;;;;;;;3757:3;;897:68123;;3716:13;;3770:42;897:68123;;3770:42;;;:::i;:::-;897:68123;;;;3770:42;;;3731:24;;;;;;;897:68123;;3870:3;3848:13;;897:68123;;3844:24;;;;;3893:16;;897:68123;3893:16;;:::i;:::-;;897:68123;;336:42:2;3883::88;;;;897:68123;;3883:42;2024:14:2;3883:42:88;;897:68123;;;3893:31;;897:68123;3883:42;;897:68123;;;3883:42;897:68123;3883:42;336::2;3883::88;;;;;;;;3870:3;;897:68123;;3829:13;;3883:42;897:68123;;3883:42;;;:::i;:::-;897:68123;;;;3883:42;;;3844:24;-1:-1:-1;;897:68123:88;;;3844:24;;;;;;897:68123;4043:3;4021:13;;897:68123;;4017:24;;;;;4138:16;;897:68123;4138:16;;:::i;:::-;;897:68123;;;;4126:34;2024:14:2;4126:34:88;;897:68123;4126:34;;897:68123;;;4126:34;897:68123;4126:34;336:42:2;4126:34:88;;;;;;;897:68123;;4126:34;;;4043:3;4179:13;897:68123;;4179:16;:13;;;:16;:::i;:::-;;:23;897:68123;;;;;4167:36;2024:14:2;4167:36:88;;897:68123;4167:36;;2024:14:2;897:68123:88;;4167:36;897:68123;4167:36;336:42:2;4167:36:88;;;;;;;897:68123;4081:139;897:68123;2024:14:2;897:68123:88;;;;;;4167:36;;;4043:3;897:68123;;;;;;2024:14:2;897:68123:88;;;4081:139;;;;;;2024:14:2;;;:::i;:::-;;;;;;;;;897:68123:88;;2024:14:2;;;;;;;;;:::i;:::-;;;;;;;;;897:68123:88;;2024:14:2;;897:68123:88;2024:14:2;;;;;;:::i;:::-;;;897:68123:88;2024:14:2;;;897:68123:88;4081:139;;;;;;;;;;:::i;:::-;4043:3;897:68123;4002:13;;;4167:36;;;;;897:68123;;;4167:36;;;;;;:::i;:::-;;;;4126:34;;;;;897:68123;;;4126:34;;;;;;:::i;:::-;;;;4017:24;;;;;;897:68123;;;4291:19;2024:14:2;4291:19:88;;897:68123;4291:19;;897:68123;4291:19;;897:68123;;;4291:19;897:68123;4291:19;336:42:2;4291:19:88;;;;;;;897:68123;;4291:19;;;3997:242;897:68123;;;;;;;;;;4317:26;2024:14:2;4317:26:88;;897:68123;4317:26;;2024:14:2;897:68123:88;;4317:26;897:68123;4317:26;336:42:2;4317:26:88;;;;;;;2024:14:2;897:68123:88;;4259:85;897:68123;;;4317:26;;;3997:242;897:68123;;;;;;2024:14:2;897:68123:88;;;4259:85;;;;;;2024:14:2;;;:::i;:::-;;;;;;;;;897:68123:88;;2024:14:2;;;;;;;;;:::i;:::-;;;;;;;;;897:68123:88;;2024:14:2;;897:68123:88;2024:14:2;;;;;;:::i;4259:85:88:-;897:68123;;;4354:238;4400:3;4378:13;;897:68123;;4374:24;;;;;4496:16;;897:68123;4496:16;;:::i;:::-;;897:68123;;;;4484:34;2024:14:2;4484:34:88;;897:68123;4484:34;;897:68123;;;4484:34;897:68123;4484:34;336:42:2;4484:34:88;;;;;;;897:68123;;4484:34;;;4400:3;4537:13;897:68123;;4537:16;:13;;;:16;:::i;:::-;;:23;897:68123;;;;4525:36;2024:14:2;4525:36:88;;897:68123;4525:36;;2024:14:2;897:68123:88;;4525:36;897:68123;4525:36;336:42:2;4525:36:88;;;;;;897:68123;;;;;4438:135;897:68123;;;4525:36;;;4400:3;897:68123;;;;;;2024:14:2;897:68123:88;;;4438:135;;;;;;2024:14:2;;;:::i;:::-;;;897:68123:88;2024:14:2;;;897:68123:88;2024:14:2;897:68123:88;;;;;;;;2024:14:2;;;:::i;:::-;;;;;;;;;897:68123:88;;2024:14:2;;897:68123:88;2024:14:2;;;;;;:::i;4438:135:88:-;4400:3;897:68123;4359:13;;;4525:36;;;;;897:68123;;;4525:36;;;;;;:::i;:::-;;;;4484:34;;;;;897:68123;;;4484:34;;;;;;:::i;:::-;;;;4374:24;;;4609:68;4374:24;;897:68123;;;;;;;;;;;;4609:68;;:::i;:::-;4771:14;4755:52;4771:14;;897:68123;4795:10;2024:14:2;897:68123:88;2024:14:2;897:68123:88;4755:52;;:::i;:::-;2024:14:2;;;4816:132:88;;4354:238;897:68123;;;;4990:31;2024:14:2;4990:31:88;;897:68123;4990:31;;2024:14:2;897:68123:88;2024:14:2;;;897:68123:88;4990:31;897:68123;4990:31;336:42:2;4990:31:88;;;;;;897:68123;;;;;;;4990:31;;4354:238;-1:-1:-1;2024:14:2;897:68123:88;5069:17;;897:68123;;:::i;:::-;5065:119;;897:68123;;5252:19;2024:14:2;5252:19:88;;897:68123;5252:19;;897:68123;;;5252:19;897:68123;5252:19;336:42:2;5252:19:88;;;;;;;897:68123;;5252:19;;;5065:119;897:68123;;;5288:14;2024::2;5288::88;;897:68123;5288:14;;2024::2;897:68123:88;;5288:14;897:68123;5288:14;336:42:2;5288:14:88;;;;;;;897:68123;;5288:14;;;5065:119;897:68123;;;5309:14;2024::2;5309::88;;897:68123;5309:14;;2024::2;897:68123:88;;5309:14;897:68123;5309:14;336:42:2;5309:14:88;;;;;;;897:68123;;5309:14;;;5065:119;897:68123;;;;5330:14;2024::2;5330::88;;897:68123;;5330:14;;2024::2;897:68123:88;;5330:14;897:68123;5330:14;336:42:2;5330:14:88;;;;;;;5576:73;897:68123;;5381:83;897:68123;2024:14:2;897:68123:88;5235:110;897:68123;;;;;;;5330:14;;;5065:119;897:68123;;2024:14:2;897:68123:88;;;;;;;;;;;;;5235:110;;;;2024:14:2;;;:::i;:::-;;;;897:68123:88;;2024:14:2;;;;;;;;;:::i;:::-;;;897:68123:88;;;;2024:14:2;;;;;:::i;:::-;;;;;;897:68123:88;;2024:14:2;;897:68123:88;2024:14:2;;;;;;:::i;:::-;;;;;;;;897:68123:88;;2024:14:2;;897:68123:88;2024:14:2;;;;;;:::i;5235:110:88:-;897:68123;5439:14;;:24;2024:14:2;897:68123:88;5381:83;;;:::i;:::-;897:68123;4795:10;2024:14:2;897:68123:88;2024:14:2;897:68123:88;5598:14;;897:68123;;5576:73;;;;;;2024:14:2;5576:73:88;;897:68123;5576:73;;;:::i;:::-;;;;;;;;;;897:68123;;5863:52;;897:68123;;;;;;;;;;5576:73;;5065:119;897:68123;;5764:39;897:68123;;5719:38;897:68123;;5719:38;5863:52;897:68123;;5656:37;5809:31;897:68123;;;;;;;;5656:37;;:::i;5719:38::-;897:68123;;;;;;5764:39;;:::i;:::-;897:68123;;;5809:31;;:::i;:::-;5879:14;897:68123;4795:10;2024:14:2;897:68123:88;2024:14:2;897:68123:88;5863:52;;:::i;5576:73::-;5863:52;5576:73;;5809:31;5576:73;;897:68123;5576:73;;897:68123;5576:73;;5656:37;5576:73;;;5719:38;;5576:73;5764:39;5576:73;;;;;;;;;;;:::i;:::-;;-1:-1:-1;5576:73:88;;-1:-1:-1;5576:73:88;;-1:-1:-1;5576:73:88;-1:-1:-1;5576:73:88;;-1:-1:-1;5576:73:88;;-1:-1:-1;;5576:73:88;5330:14;897:68123;5330:14;;;;;;2024::2;5330::88;;897:68123;;;5330:14;;;;;;:::i;:::-;;;;;;;;5309;;;;;;897:68123;;;5309:14;;;;;;:::i;:::-;;;;;5288;;;;;897:68123;;;5288:14;;;;;;:::i;:::-;;;;5252:19;;;;;;897:68123;;;5252:19;;;;;;:::i;:::-;;;;;5065:119;897:68123;;:::i;:::-;5065:119;;;4990:31;;;;;;;;897:68123;4990:31;897:68123;4990:31;;;;;;;:::i;:::-;;;;;;;;;4816:132;897:68123;;;;4873:65;;897:68123;;;;;;;2024:14:2;897:68123:88;4873:65;;;;;;:::i;:::-;897:68123;4863:76;;4816:132;;;4317:26;;;;;897:68123;;;4317:26;;;;;;:::i;:::-;;;;4291:19;;;;;;897:68123;;;4291:19;;;;;;:::i;:::-;;;;;3575:18;;;;;897:68123;3575:18;897:68123;3575:18;;;;;;;:::i;:::-;;;;;3413:60;897:68123;;3413:60;;;:::i;:::-;897:68123;;;;3413:60;;;897:68123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;50010:1;897:68123;49980:14;;:20;;897:68123;49980:31;336:42:2;49970::88;;;;897:68123;;49970:42;2024:14:2;49970:42:88;;897:68123;49970:42;;897:68123;;;49970:42;897:68123;49970:42;336::2;49970::88;;;;;;;;897:68123;;;;:::i;:::-;50102:14;;;;:::i;:::-;897:68123;50233:53;897:68123;50151:45;897:68123;;;;50151:45;:::i;:::-;897:68123;;;;;50264:21;897:68123;;;;;;50264:21;;:::i;:::-;897:68123;50233:53;;:::i;:::-;897:68123;;;;;;50316:38;897:68123;;;;;;50316:38;:::i;:::-;897:68123;;;;;294:80:98;897:68123:88;;294:80:98;:::i;:::-;897:68123:88;;;;;50429:25;2024:14:2;50429:25:88;;897:68123;50429:25;;2024:14:2;897:68123:88;50429:25;897:68123;50429:25;336:42:2;50429:25:88;;;;;;897:68123;;;;50429:25;;;897:68123;;;;;;50483:55;897:68123;;;;;;;;50483:55;;:::i;:::-;897:68123;;;;;;;;;;;;;;;;;;;;;;;;50732:29;2024:14:2;50732:29:88;;897:68123;50732:29;;897:68123;;;50732:29;897:68123;50732:29;336:42:2;50732:29:88;;;;;;;897:68123;;50732:29;;;897:68123;;;;;;;;;50768:26;2024:14:2;50768:26:88;;897:68123;50768:26;;2024:14:2;897:68123:88;;50768:26;897:68123;50768:26;336:42:2;50768:26:88;;;;;;;50564:238;897:68123;;;50768:26;;;897:68123;;;50704:91;897:68123;2024:14:2;897:68123:88;;50704:91;;;2024:14:2;897:68123:88;50704:91;;2024:14:2;;897:68123:88;;2024:14:2;;897:68123:88;2024:14:2;;;;;;:::i;:::-;;;;;;;;;897:68123:88;;2024:14:2;;897:68123:88;2024:14:2;;;;;;:::i;:::-;;;50704:91:88;;;;;;;;;:::i;:::-;50564:238;:::i;:::-;50833:47;897:68123;50546:15;;:256;;;;50833:47;:::i;:::-;50808:22;897:68123;50808:22;;897:68123;;;;50963:14;50947:52;50963:14;;897:68123;50987:10;2024:14:2;;;897:68123:88;50947:52;;:::i;:::-;897:68123;;50921:79;2024:14:2;50921:79:88;;897:68123;50921:79;;2024:14:2;897:68123:88;2024:14:2;;;897:68123:88;50921:79;897:68123;50921:79;336:42:2;50921:79:88;;;;;;;897:68123;;;;;;;;50921:79;;;897:68123;51094:15;;897:68123;;;;;;;;51161:29;2024:14:2;51161:29:88;;897:68123;51161:29;;897:68123;;;51161:29;897:68123;51161:29;336:42:2;51161:29:88;;;;;;;897:68123;;51161:29;;;897:68123;;;;51202:14;2024::2;51202::88;;897:68123;51202:14;;2024::2;897:68123:88;;51202:14;897:68123;51202:14;336:42:2;51202:14:88;;;;;;;897:68123;;51202:14;;;897:68123;;;;51223:14;2024::2;51223::88;;897:68123;51223:14;;2024::2;897:68123:88;;51223:14;897:68123;51223:14;336:42:2;51223:14:88;;;;;;;897:68123;;51223:14;;;897:68123;;;;;51244:14;2024::2;51244::88;;897:68123;;51244:14;;2024::2;897:68123:88;;51244:14;897:68123;51244:14;336:42:2;51244:14:88;;;;;;;897:68123;;;51133:135;897:68123;;;51024:322;897:68123;;;51244:14;;;897:68123;2024:14:2;897:68123:88;;;;;;2024:14:2;897:68123:88;;;51133:135;;;;;;2024:14:2;;;:::i;51133:135:88:-;897:68123;51285:14;;:24;2024:14:2;897:68123:88;;;;;51317:23;51024:322;;:::i;:::-;51007:14;897:68123;51007:14;;:339;;;2024:14:2;51416:13:88;;;;;897:68123;;;;;;;;51471:13;;:24;897:68123;;;;;;;51625:25;;897:68123;;51565:58;51588:34;897:68123;51565:58;;;897:68123;51565:58;;;897:68123;51565:58;;:::i;51625:25::-;336:42:2;51525:131:88;;;;;897:68123;;;51525:131;;;;;2024:14:2;51525:131:88;;897:68123;;51525:131;897:68123;51525:131;;;:::i;:::-;;897:68123;;;336:42:2;51525:131:88;;;;;;;;897:68123;2024:14:2;51762:72:88;2024:14:2;897:68123:88;;50987:10;2024:14:2;;;897:68123:88;51784:14;;;51800;;897:68123;;;51762:72;;;;;2024:14:2;51762:72:88;;897:68123;51762:72;;;:::i;:::-;;;;;;;;;;;897:68123;;;;;;;;;;;;;51762:72;;897:68123;;;52082:52;897:68123;;;51883:31;897:68123;;;52082:52;897:68123;;;51840:37;51940:22;897:68123;;51969:39;897:68123;;;51840:37;;:::i;51762:72::-;;;;;;;;;;;;;897:68123;51762:72;897:68123;51762:72;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;51525:131;897:68123;;51525:131;;;:::i;:::-;897:68123;;;;51525:131;;;51244:14;2024::2;51244::88;;;;;;897:68123;;;51244:14;;;;;;:::i;51223:::-;;;;;897:68123;;;51223:14;;;;;;:::i;:::-;;;;51202;;;;;;897:68123;;;51202:14;;;;;;:::i;:::-;;;;;51161:29;;;;;;897:68123;;;51161:29;;;;;;:::i;:::-;;;;;50921:79;;;;;;;;897:68123;50921:79;897:68123;50921:79;;;;;;;:::i;:::-;;;;;50768:26;50704:91;50768:26;;;;897:68123;50768:26;;897:68123;;;50768:26;;;;;;:::i;:::-;;;;;;50732:29;;;;;;897:68123;;;50732:29;;;;;;:::i;:::-;;;;;50429:25;;;;897:68123;50429:25;897:68123;50429:25;;;;;;;:::i;:::-;;;;49970:42;897:68123;;49970:42;;;:::i;:::-;897:68123;;;;49970:42;;;897:68123;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22458:13;;;:::i;:::-;897:68123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22562:1;897:68123;;;;22586:1;897:68123;;;;22610:1;897:68123;;;;;;2024:14:2;22637:23:88;;22562:1;897:68123;22637:23;;2024:14:2;897:68123:88;22637:23;;;336:42:2;22637:23:88;;;;;;897:68123;;;;22637:23;;;897:68123;;;;;;;;;;;22685:23;2024:14:2;22685:23:88;;897:68123;22685:23;;2024:14:2;897:68123:88;22685:23;22637;22685;336:42:2;22685:23:88;;;;;;897:68123;;;;22685:23;;;897:68123;;;;;;;;;;;;;22733:23;2024:14:2;22733:23:88;;897:68123;22733:23;;2024:14:2;897:68123:88;22733:23;22637;22733;336:42:2;22733:23:88;;;;;;897:68123;;;;22733:23;;;897:68123;;;;;;;;;;;;;22853:29;2024:14:2;22853:29:88;;897:68123;22853:29;;897:68123;;;22853:29;22637:23;22853:29;336:42:2;22853:29:88;;;;;;22784:107;897:68123;;;22853:29;;;897:68123;;22825:64;22586:1;2024:14:2;897:68123:88;;22825:64;;2024:14:2;897:68123:88;22825:64;;2024:14:2;;897:68123:88;;2024:14:2;;897:68123:88;2024:14:2;;;;;;:::i;:::-;;;897:68123:88;2024:14:2;;;897:68123:88;22825:64;;;;;;;;;;:::i;:::-;22784:107;:::i;:::-;897:68123;;;22763:128;897:68123;;;;;;;;23027:29;2024:14:2;23027:29:88;;897:68123;23027:29;;897:68123;;;23027:29;22637:23;23027:29;336:42:2;23027:29:88;;;;;;;897:68123;;23027:29;;;897:68123;;;;;;;;23076:29;2024:14:2;23076:29:88;;897:68123;23076:29;;897:68123;;;23076:29;22637:23;23076:29;336:42:2;23076:29:88;;;;;;;22586:1;2024:14:2;;897:68123:88;22988:133;897:68123;;;23076:29;;;897:68123;;;;22988:133;;;897:68123;22988:133;;2024:14:2;;;;;897:68123:88;;2024:14:2;;897:68123:88;2024:14:2;;;;;;:::i;:::-;;;897:68123:88;2024:14:2;;;897:68123:88;2024:14:2;897:68123:88;;;2024:14:2;;897:68123:88;;2024:14:2;;897:68123:88;2024:14:2;;;;;;:::i;:::-;;;897:68123:88;2024:14:2;;;897:68123:88;22988:133;;;;;;;;;;:::i;:::-;897:68123;;2024:14:2;4632:24:97;;22562:1:88;897:68123;4632:24:97;;897:68123:88;-1:-1:-1;;897:68123:88;22637:23;897:68123;336:42:2;4632:24:97;;;;;;;-1:-1:-1;;4632:24:97;;;897:68123:88;;;;4690:25:97;2024:14:2;4690:25:97;;22586:1:88;897:68123;4690:25:97;;2024:14:2;-1:-1:-1;;4690:25:97;22637:23:88;4690:25:97;336:42:2;4690:25:97;;;;;;;4820:42;-1:-1:-1;;;4690:25:97;;;897:68123:88;;;;;22586:1;897:68123;;;2024:14:2;897:68123:88;;;;;;;;;;;2024:14:2;897:68123:88;;;;;;;;2024:14:2;;;:::i;:::-;;;897:68123:88;2024:14:2;;;897:68123:88;2024:14:2;897:68123:88;;;;;;;;2024:14:2;;;:::i;:::-;;;;897:68123:88;2024:14:2;;;897:68123:88;;;;;;;2024:14:2;;:::i;897:68123:88:-;4828:11:97;336:42:2;4828:11:97;:::i;:::-;897:68123:88;;;4820:42:97;;;;2024:14:2;4820:42:97;;-1:-1:-1;;4820:42:97;897:68123:88;4820:42:97;;;:::i;:::-;;-1:-1:-1;;;336:42:2;4820::97;;;;;;;-1:-1:-1;;4820:42:97;;;897:68123:88;4868:26:97;897:68123:88;;;22898:237;897:68123;;;;;;;;23271:29;2024:14:2;23271:29:88;;897:68123;23271:29;;897:68123;;;23271:29;22637:23;23271:29;336:42:2;23271:29:88;;;;;;;897:68123;;23271:29;;;897:68123;;;;;;;;;;;23320:29;2024:14:2;23320:29:88;;897:68123;23320:29;;897:68123;;;23320:29;22637:23;23320:29;336:42:2;23320:29:88;;;;;;;23157:222;897:68123;;;23320:29;;;897:68123;;22586:1;2024:14:2;23232:133:88;897:68123;2024:14:2;897:68123:88;;23232:133;;;2024:14:2;897:68123:88;23232:133;;2024:14:2;;897:68123:88;;2024:14:2;;897:68123:88;2024:14:2;;;;;;:::i;:::-;;;897:68123:88;2024:14:2;;;897:68123:88;2024:14:2;897:68123:88;;;2024:14:2;;897:68123:88;;2024:14:2;;897:68123:88;2024:14:2;;;;;;:::i;23232:133:88:-;23157:222;:::i;:::-;897:68123;;;23142:237;23405:44;897:68123;;;23436:12;23405:44;:::i;:::-;897:68123;;;;23474:44;897:68123;;;23505:12;23474:44;:::i;:::-;897:68123;;;;23543:44;897:68123;;;23574:12;23543:44;:::i;:::-;897:68123;;;;22586:1;897:68123;;;23594:20;897:68123;22586:1;897:68123;;;23654:20;897:68123;;;;2024:14:2;897:68123:88;;;;23715:20;:30;897:68123;;;;2024:14:2;897:68123:88;;;;23770:20;:30;897:68123;;;;;;;;23904:20;2024:14:2;23888:58:88;897:68123;;2024:14:2;;;897:68123:88;23888:58;;;:::i;:::-;897:68123;;23864:83;2024:14:2;23864:83:88;;897:68123;23864:83;;2024:14:2;22637:23:88;2024:14:2;;;897:68123:88;23864:83;;;336:42:2;23864:83:88;;;;;;897:68123;;;;;;;;;;23864:83;;897:68123;;;;;;;;;;;;;;;;;;;24009:58;897:68123;;;;24025:20;24009:58;:::i;:::-;897:68123;;23985:83;2024:14:2;23985:83:88;;897:68123;23985:83;;2024:14:2;22637:23:88;2024:14:2;;;897:68123:88;23985:83;23864;23985;336:42:2;23985:83:88;;;;;;897:68123;;;;;;;;;;23985:83;;897:68123;;;;;;;;;;;;;;;24130:51;897:68123;;;;24130:51;;;:::i;:::-;897:68123;;24106:76;2024:14:2;24106:76:88;;897:68123;24106:76;;2024:14:2;22637:23:88;2024:14:2;;;897:68123:88;24106:76;23864:83;24106:76;336:42:2;24106:76:88;;;;;;897:68123;;;;;;;;;;24106:76;;897:68123;;;;;;;;;;;;;;;;;;24314:12;897:68123;;;;;;;;;24384:29;2024:14:2;24384:29:88;;897:68123;24384:29;;897:68123;;;24384:29;22637:23;24384:29;336:42:2;24384:29:88;;;;;;;897:68123;;24384:29;;;897:68123;;;;;2024:14:2;897:68123:88;;24449:20;2024:14:2;24449:20:88;;897:68123;24449:20;;2024:14:2;897:68123:88;;24449:20;22637:23;24449:20;336:42:2;24449:20:88;;;;;;;897:68123;;24449:20;;;897:68123;;;;;2024:14:2;897:68123:88;;;24500:20;2024:14:2;24500:20:88;;897:68123;24500:20;;2024:14:2;897:68123:88;;24500:20;22637:23;24500:20;336:42:2;24500:20:88;;;;;;;897:68123;;24500:20;;;897:68123;;;;;;;;;;;24551:20;2024:14:2;24551:20:88;;897:68123;24551:20;;2024:14:2;897:68123:88;;24551:20;22637:23;24551:20;336:42:2;24551:20:88;;;;;;;22562:1;24354:229;897:68123;;;24260:375;897:68123;;;24551:20;;;897:68123;2024:14:2;897:68123:88;;;;;;2024:14:2;897:68123:88;;;24354:229;;;;;;2024:14:2;;;:::i;24354:229:88:-;897:68123;24604:23;;2024:14:2;897:68123:88;24260:375;;:::i;:::-;897:68123;;;24228:407;897:68123;;;24780:12;897:68123;;;;;;;24850:29;2024:14:2;24850:29:88;;897:68123;24850:29;;897:68123;;;24850:29;22637:23;24850:29;336:42:2;24850:29:88;;;;;;;897:68123;;24850:29;;;897:68123;;;;;2024:14:2;897:68123:88;;;24915:20;2024:14:2;24915:20:88;;897:68123;24915:20;;2024:14:2;897:68123:88;;24915:20;22637:23;24915:20;336:42:2;24915:20:88;;;;;;;897:68123;;24915:20;;;897:68123;;;;;2024:14:2;897:68123:88;;;24966:20;2024:14:2;24966:20:88;;897:68123;24966:20;;2024:14:2;897:68123:88;;24966:20;22637:23;24966:20;336:42:2;24966:20:88;;;;;;;897:68123;;24966:20;;;897:68123;;;;;;;;;;;25017:20;2024:14:2;25017:20:88;;897:68123;25017:20;;2024:14:2;897:68123:88;;25017:20;22637:23;25017:20;336:42:2;25017:20:88;;;;;;;22562:1;24820:229;897:68123;;;24726:355;897:68123;;;25017:20;;;897:68123;;2024:14:2;897:68123:88;;;;;;2024:14:2;897:68123:88;;;24820:229;;;;;;2024:14:2;;;:::i;:::-;;;;;;;;;897:68123:88;;2024:14:2;;;;;;;;;:::i;:::-;;;;;;;;;897:68123:88;;2024:14:2;;897:68123:88;2024:14:2;;;;;;:::i;:::-;;;;;;;;;897:68123:88;;2024:14:2;;897:68123:88;22586:1;2024:14:2;;;;;:::i;:::-;;;24820:229:88;;897:68123;24820:229;;;;;;:::i;:::-;24726:355;:::i;:::-;897:68123;;;24705:376;897:68123;;;25164:12;897:68123;;;;;;;;;;25234:29;2024:14:2;25234:29:88;;897:68123;25234:29;;897:68123;;;25234:29;22637:23;25234:29;336:42:2;25234:29:88;;;;;;;897:68123;;25234:29;;;897:68123;;;;;2024:14:2;897:68123:88;;25299:20;2024:14:2;25299:20:88;;897:68123;25299:20;;2024:14:2;897:68123:88;;25299:20;22637:23;25299:20;336:42:2;25299:20:88;;;;;;;897:68123;;25299:20;;;897:68123;;;;;2024:14:2;897:68123:88;;;25350:20;2024:14:2;25350:20:88;;897:68123;25350:20;;2024:14:2;897:68123:88;;25350:20;22637:23;25350:20;336:42:2;25350:20:88;;;;;;;897:68123;;25350:20;;;897:68123;;;;;;;;;;;25401:20;2024:14:2;25401:20:88;;897:68123;25401:20;;2024:14:2;897:68123:88;;25401:20;22637:23;25401:20;336:42:2;25401:20:88;;;;;;;25875:72;897:68123;22562:1;25204:229;897:68123;;;25110:355;897:68123;;;25401:20;;;897:68123;2024:14:2;897:68123:88;;;;;;2024:14:2;897:68123:88;;;25204:229;;;;;;2024:14:2;;;:::i;25110:355:88:-;897:68123;;;25089:376;25690:46;25506:14;;:::i;:::-;897:68123;;;25542:29;25526:45;;;:::i;:::-;;;;;:::i;:::-;;897:68123;;;25593:18;25577:34;;;:::i;:::-;;;;;:::i;:::-;;897:68123;;;25633:18;25617:34;;;:::i;:::-;;;;;:::i;25690:46::-;897:68123;;;2024:14:2;;;897:68123:88;;;;25875:72;;;;2024:14:2;25875:72:88;;;897:68123;25875:72;;;:::i;:::-;;;;;;;;;;;897:68123;;26096:51;;897:68123;;;;;;;;;;25875:72;;897:68123;26096:51;25954:22;;;26027:16;25954:22;25982:19;26050:23;25954:22;;;;897:68123;25954:22;;:::i;25982:19::-;897:68123;2024:14:2;26027:16:88;;:::i;26050:23::-;26096:51;:::i;25875:72::-;;;;;26096:51;25875:72;;26050:23;25875:72;;26027:16;25954:22;897:68123;25875:72;25982:19;25875:72;897:68123;25875:72;897:68123;25875:72;;;;;;;:::i;:::-;;;-1:-1:-1;25875:72:88;;-1:-1:-1;25875:72:88;;-1:-1:-1;25875:72:88;;;-1:-1:-1;25875:72:88;-1:-1:-1;25875:72:88;;-1:-1:-1;25875:72:88;;25401:20;2024:14:2;25401:20:88;;;;;;897:68123;;;25401:20;;;;;;:::i;:::-;;;;;25350;;;;;;897:68123;;;25350:20;;;;;;:::i;:::-;;;;;25299;;;;;897:68123;;;25299:20;;;;;;:::i;:::-;;;;25234:29;;;;;;897:68123;;;25234:29;;;;;;:::i;:::-;;;;;24966:20;;;;;;897:68123;;;24966:20;;;;;;:::i;:::-;;;;;24915;;;;;;897:68123;;;24915:20;;;;;;:::i;:::-;;;;;24850:29;;;;;;897:68123;;;24850:29;;;;;;:::i;:::-;;;;;24500:20;;;;;;897:68123;;;24500:20;;;;;;:::i;:::-;;;;;24449;;;;;897:68123;;;24449:20;;;;;;:::i;:::-;;;;24384:29;;;;;;897:68123;;;24384:29;;;;;;:::i;:::-;;;;;24106:76;;;;;;;897:68123;24106:76;897:68123;24106:76;;;;;;;:::i;:::-;;;;23985:83;;;;;;;897:68123;23985:83;897:68123;23985:83;;;;;;;:::i;:::-;;;;23864;;;;;;;897:68123;23864:83;897:68123;23864:83;;;;;;;:::i;:::-;;;;23320:29;23232:133;23320:29;;;2024:14:2;23320:29:88;22586:1;23320:29;;897:68123;;;23320:29;;;;;;:::i;:::-;;;;;;;23271;;;;;897:68123;;;23271:29;;;;;;:::i;:::-;;;;4820:42:97;;;;;-1:-1:-1;;;4820:42:97;;;;;;:::i;:::-;;;;4690:25;897:68123:88;4690:25:97;;;;897:68123:88;22586:1;4690:25:97;;897:68123:88;4690:25:97;;-1:-1:-1;;;4690:25:97;;;;;;:::i;:::-;;;;;;;;;;4632:24;;;;;-1:-1:-1;;;4632:24:97;;;;;;:::i;:::-;;;;23076:29:88;;;;;897:68123;;;23076:29;;;;;;:::i;:::-;;;;23027;;;;;897:68123;;;23027:29;;;;;;:::i;:::-;;;;22853;;;;;897:68123;;;22853:29;;;;;;:::i;:::-;;;;22733:23;;;;897:68123;22733:23;897:68123;22733:23;;;;;;;:::i;:::-;;;;22685;;;;897:68123;22685:23;897:68123;22685:23;;;;;;;:::i;:::-;;;;22637;;;;897:68123;22637:23;897:68123;22637:23;;;;;;;:::i;:::-;;;;897:68123;;-1:-1:-1;;897:68123:88;;;;;-1:-1:-1;;897:68123:88;;;;;;;;;;;;;2575:18:9;897:68123:88;2482:4:48;897:68123:88;2482:4:48;:::i;:::-;897:68123:88;;;;;;;:::i;:::-;2482:4:48;;;897:68123:88;;;2575:18:9;-1:-1:-1;;897:68123:88;;-1:-1:-1;;897:68123:88;-1:-1:-1;;897:68123:88;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;2509:17;;2482:4:48;897:68123:88;;2769:63;2563:60;897:68123;;;;;;:::i;:::-;;;;;;;;;;;2563:60;:::i;:::-;2658:41;2769:63;2658:41;;;:::i;897:68123::-;;;;;;;;;;;;2876:18:9;897:68123:88;2482:4:48;;;:::i;:::-;897:68123:88;;;;;;;:::i;:::-;2482:4:48;;;897:68123:88;;;2876:18:9;897:68123:88;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;61382:1;897:68123;61352:14;;:20;;897:68123;61352:31;336:42:2;61342::88;;;;897:68123;;61342:42;2024:14:2;61342:42:88;;897:68123;61342:42;;897:68123;;;61342:42;;;336::2;61342::88;;;;;;;;897:68123;61410:14;;;;;:::i;:::-;897:68123;61472:19;;897:68123;;61454:38;897:68123;;;;61454:38;:::i;:::-;897:68123;;;61525:16;;;897:68123;294:80:98;897:68123:88;;294:80:98;:::i;:::-;897:68123:88;;61575:16;;;897:68123;294:80:98;897:68123:88;;294:80:98;:::i;:::-;897:68123:88;;61633:18;;;897:68123;2933:19:15;897:68123:88;304:1:98;897:68123:88;;;;-1:-1:-1;;2933:19:15;;:::i;:::-;897:68123:88;;;;;;;;;;:::i;:::-;;;;;;;;;;;9786:54:15;;897:68123:88;;9786:54:15;;;;;;;61342:42:88;9786:54:15;;897:68123:88;;;;;;:::i;9786:54:15:-;-1:-1:-1;;;;;897:68123:88;;9371:159:15;679:42;9371:159;;;897:68123:88;;;;;;61712:67;61718:18;;;897:68123;;61738:22;897:68123;;;;61738:22;;:::i;61712:67::-;897:68123;;;;61822:20;;897:68123;61816:54;897:68123;;;;;61847:22;897:68123;;;;61847:22;:::i;61816:54::-;897:68123;;;;;:::i;:::-;;;;;;61964:25;2024:14:2;61964:25:88;;897:68123;61964:25;;2024:14:2;897:68123:88;61964:25;61342:42;61964:25;336:42:2;61964:25:88;;;;;;897:68123;;;;61964:25;;;897:68123;;;;;;;;;;62014:25;2024:14:2;62014:25:88;;897:68123;62014:25;;2024:14:2;897:68123:88;62014:25;61342:42;62014:25;336:42:2;62014:25:88;;;;;;;897:68123;;62014:25;;;897:68123;61995:16;897:68123;;61995:16;;897:68123;;;;;;;;;;;;;;;;;;;;62219:29;2024:14:2;62219:29:88;;897:68123;62219:29;;897:68123;;;62219:29;61342:42;62219:29;336:42:2;62219:29:88;;;;;;;62065:197;897:68123;;;62219:29;;;897:68123;;62191:64;897:68123;2024:14:2;897:68123:88;;62191:64;;2024:14:2;897:68123:88;62191:64;;2024:14:2;;897:68123:88;;2024:14:2;;897:68123:88;2024:14:2;;;;;;:::i;62065:197:88:-;62046:16;62292:48;62046:16;;;:216;;;;62292:48;:::i;:::-;62268:21;61575:16;62268:21;;897:68123;;;;;;;;;;;;;;;;;;;62520:29;2024:14:2;62520:29:88;;897:68123;62520:29;;897:68123;;;62520:29;61342:42;62520:29;336:42:2;62520:29:88;;;;;;;62366:197;897:68123;;;62520:29;;;897:68123;;62492:64;897:68123;2024:14:2;897:68123:88;;62492:64;;2024:14:2;897:68123:88;62492:64;;2024:14:2;;897:68123:88;;2024:14:2;;897:68123:88;2024:14:2;;;;;;:::i;62366:197:88:-;62347:16;62868:58;62593:48;61525:16;62347;;:216;;;;62593:48;:::i;:::-;62569:21;61633:18;62569:21;;897:68123;;;62648:20;;;;897:68123;62648:20;;897:68123;2024:14:2;61718:18:88;62708:20;;:30;897:68123;304:1:98;897:68123:88;62768:20;;:30;2482:4:48;897:68123:88;62884:20;;897:68123;62914:10;2024:14:2;;;897:68123:88;62868:58;;:::i;:::-;897:68123;;62842:85;2024:14:2;62842:85:88;;897:68123;62842:85;;2024:14:2;61342:42:88;2024:14:2;;;61525:16:88;62842:85;897:68123;62842:85;336:42:2;62842:85:88;;;;;;;897:68123;;;;;;;;62842:85;;;897:68123;62813:7;897:68123;62813:7;;;62822;;;;62831;;;;897:68123;;;;;;;;63024:16;897:68123;;;;;;;;63092:29;2024:14:2;63092:29:88;;897:68123;63092:29;;897:68123;;;63092:29;61342:42;63092:29;336:42:2;63092:29:88;;;;;;;897:68123;;63092:29;;;897:68123;2024:14:2;;897:68123:88;;;63153:20;2024:14:2;63153:20:88;;897:68123;63153:20;;2024:14:2;897:68123:88;;63153:20;61342:42;63153:20;336:42:2;63153:20:88;;;;;;;897:68123;;63153:20;;;897:68123;2024:14:2;;897:68123:88;;;63200:20;2024:14:2;63200:20:88;;897:68123;63200:20;;2024:14:2;897:68123:88;;63200:20;61342:42;63200:20;336:42:2;63200:20:88;;;;;;;897:68123;;63200:20;;;897:68123;;;;;;;;;63247:20;2024:14:2;63247:20:88;;897:68123;63247:20;;2024:14:2;897:68123:88;;63247:20;61342:42;63247:20;336:42:2;63247:20:88;;;;;;;304:1:98;63064:213:88;897:68123;;;62954:381;897:68123;;;63247:20;;;897:68123;;2024:14:2;897:68123:88;;;;;;2024:14:2;897:68123:88;;;63064:213;;;;;;2024:14:2;;;:::i;:::-;;;;;;;;;897:68123:88;;2024:14:2;;;;;;;;;:::i;:::-;;;;;;;;;897:68123:88;;2024:14:2;;897:68123:88;2024:14:2;;;;;;:::i;:::-;;;;;;;;;897:68123:88;;2024:14:2;;897:68123:88;;2024:14:2;;;;;:::i;:::-;;;63064:213:88;;9786:54:15;63064:213:88;;;;;;:::i;:::-;63306:23;;;;;;62954:381;;:::i;:::-;62933:18;61718;62933;;:402;;;897:68123;63414:14;63398:52;63414:14;;897:68123;62914:10;2024:14:2;;;897:68123:88;63398:52;;:::i;:::-;897:68123;;63372:79;2024:14:2;63372:79:88;;897:68123;63372:79;;2024:14:2;61342:42:88;2024:14:2;;;61525:16:88;63372:79;897:68123;63372:79;336:42:2;63372:79:88;;;;;;;897:68123;;;;;;;;;63372:79;;;897:68123;63343:7;;897:68123;;63343:7;;;;63352;63361;63352;;;63361;;897:68123;;;;;;;;63554:16;897:68123;;;;;;63622:29;2024:14:2;63622:29:88;;897:68123;63622:29;;897:68123;;;63622:29;61342:42;63622:29;336:42:2;63622:29:88;;;;;;;897:68123;;63622:29;;;897:68123;2024:14:2;;897:68123:88;;;63683:20;2024:14:2;63683:20:88;;897:68123;63683:20;;2024:14:2;897:68123:88;;63683:20;61342:42;63683:20;336:42:2;63683:20:88;;;;;;;897:68123;;63683:20;;;897:68123;2024:14:2;;897:68123:88;;;63730:20;2024:14:2;63730:20:88;;897:68123;63730:20;;2024:14:2;897:68123:88;;63730:20;61342:42;63730:20;336:42:2;63730:20:88;;;;;;;897:68123;;63730:20;;;897:68123;;;;;;;;;63777:20;2024:14:2;63777:20:88;;897:68123;63777:20;;2024:14:2;897:68123:88;;63777:20;61342:42;63777:20;336:42:2;63777:20:88;;;;;;;304:1:98;63484:401:88;897:68123;63594:213;897:68123;;;;;;;63777:20;;;897:68123;;;2024:14:2;897:68123:88;;;;;2024:14:2;897:68123:88;;;63594:213;;;;;;2024:14:2;;;:::i;63594:213:88:-;897:68123;63824:14;;:24;2024:14:2;897:68123:88;63856:23;;63484:401;;:::i;:::-;63457:24;897:68123;63457:24;;:428;;;897:68123;62822:7;63918:23;;2024:14:2;63892:13:88;;;;;;;897:68123;;;;63947:13;;:24;897:68123;;;64101:25;;897:68123;;64041:58;64064:34;897:68123;64041:58;;;897:68123;64041:58;;;61342:42;64041:58;;:::i;:::-;64112:13;897:68123;;64101:25;;;897:68123;64101:25;;2024:14:2;;;;;;;;;;;;;;;;;;;64101:25:88;336:42:2;64001:131:88;;;;;897:68123;;;64001:131;;;;;2024:14:2;64001:131:88;;897:68123;;64001:131;897:68123;64001:131;;;:::i;:::-;;897:68123;;;336:42:2;64001:131:88;;;;;;;;897:68123;64167:14;;64297:46;64273:21;64167:14;;;64449:79;64167:14;;;:::i;64297:46::-;64273:21;;;;:70;61633:18;897:68123;62914:10;2024:14:2;;;897:68123:88;64471:14;;;897:68123;;64449:79;;;;;2024:14:2;64449:79:88;;897:68123;64449:79;;;:::i;:::-;;;;;;;;;;;897:68123;;64698:52;;-1:-1:-1;897:68123:88;;;;;;;;;64449:79;;64698:52;64534:22;;;;64635:40;64534:22;;;64562:19;64607:21;64534:22;;897:68123;64534:22;;:::i;64001:131::-;897:68123;;;;;;;64001:131;;;:::i;:::-;897:68123;;;;64001:131;;;;;;;897:68123;;2024:14:2;897:68123:88;;2024:14:2;;;;;63777:20:88;2024:14:2;63777:20:88;;;897:68123;63777:20;;897:68123;;;63777:20;;;;;;:::i;:::-;;;;;63730;897:68123;63730:20;;;;;;897:68123;;;63730:20;;;;;;:::i;:::-;;;;;63683;;;;;;897:68123;;;63683:20;;;;;;:::i;:::-;;;;;63622:29;;;;;;897:68123;;;63622:29;;;;;;:::i;:::-;;;;;63372:79;897:68123;63372:79;;;897:68123;63372:79;;;;;61525:16;63372:79;61525:16;63372:79;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;63372:79:88;;63247:20;2024:14:2;63247:20:88;;;;;;897:68123;;;63247:20;;;;;;:::i;:::-;;;;;;897:68123;;2024:14:2;897:68123:88;;2024:14:2;;;;;63200:20:88;897:68123;63200:20;;;;;;897:68123;;;63200:20;;;;;;:::i;:::-;;;;;63153;;;;;;897:68123;;;63153:20;;;;;;:::i;:::-;;;;;63092:29;;;;;;897:68123;;;63092:29;;;;;;:::i;:::-;;;;;62842:85;;;;;;;;61525:16;62842:85;61525:16;62842:85;;;;;;;:::i;:::-;;;;;62520:29;;;;;;897:68123;;;62520:29;;;;;;:::i;:::-;;;;;62219;;;;;;897:68123;;;62219:29;;;;;;:::i;:::-;;;;;62014:25;;;;897:68123;62014:25;897:68123;62014:25;;;;;;;:::i;:::-;;;;61964;;;;897:68123;61964:25;897:68123;61964:25;;;;;;;:::i;:::-;;;;;897:68123;;2024:14:2;897:68123:88;;2024:14:2;;;;;61342:42:88;897:68123;;61342:42;;;:::i;:::-;897:68123;;;;61342:42;;;897:68123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;47385:1;897:68123;47355:14;;:20;;897:68123;47355:31;336:42:2;47345::88;;;;897:68123;;47345:42;2024:14:2;47345:42:88;;897:68123;47345:42;;897:68123;;;47345:42;897:68123;47345:42;336::2;47345::88;;;;;;;;897:68123;;;;:::i;:::-;47462:14;;;;;:::i;:::-;897:68123;47506:38;897:68123;;;;;;47506:38;:::i;:::-;897:68123;;;;;294:80:98;897:68123:88;;294:80:98;:::i;:::-;897:68123:88;;;;;47619:25;2024:14:2;47619:25:88;;897:68123;47619:25;;2024:14:2;897:68123:88;47619:25;897:68123;47619:25;336:42:2;47619:25:88;;;;;;897:68123;;;;47619:25;;;897:68123;;;;;;47673:55;897:68123;;;;;;;;47673:55;;:::i;:::-;897:68123;;;;;;;;;;;;;;;;;;;;;;;;47922:29;2024:14:2;47922:29:88;;897:68123;47922:29;;897:68123;;;47922:29;897:68123;47922:29;336:42:2;47922:29:88;;;;;;;897:68123;;47922:29;;;897:68123;;;;;;;;;47958:26;2024:14:2;47958:26:88;;897:68123;47958:26;;2024:14:2;897:68123:88;;47958:26;897:68123;47958:26;336:42:2;47958:26:88;;;;;;;47754:238;897:68123;;;47958:26;;;897:68123;;47894:91;897:68123;2024:14:2;897:68123:88;;47894:91;;;2024:14:2;897:68123:88;47894:91;;2024:14:2;;897:68123:88;;2024:14:2;;897:68123:88;2024:14:2;;;;;;:::i;47754:238:88:-;48023:47;897:68123;47736:15;;:256;;;;48023:47;:::i;:::-;47998:22;897:68123;47998:22;;897:68123;;;;48153:14;48137:52;48153:14;;897:68123;48177:10;2024:14:2;;;897:68123:88;48137:52;;:::i;:::-;897:68123;;48111:79;2024:14:2;48111:79:88;;897:68123;48111:79;;2024:14:2;897:68123:88;2024:14:2;;;897:68123:88;48111:79;897:68123;48111:79;336:42:2;48111:79:88;;;;;;;897:68123;;;;;;;;48111:79;;;897:68123;48284:15;;897:68123;;;;;;;;48351:29;2024:14:2;48351:29:88;;897:68123;48351:29;;897:68123;;;48351:29;897:68123;48351:29;336:42:2;48351:29:88;;;;;;;897:68123;;48351:29;;;897:68123;;;;48392:14;2024::2;48392::88;;897:68123;48392:14;;2024::2;897:68123:88;;48392:14;897:68123;48392:14;336:42:2;48392:14:88;;;;;;;897:68123;;48392:14;;;897:68123;;;;48413:14;2024::2;48413::88;;897:68123;48413:14;;2024::2;897:68123:88;;48413:14;897:68123;48413:14;336:42:2;48413:14:88;;;;;;;897:68123;;48413:14;;;897:68123;;;;;48434:14;2024::2;48434::88;;897:68123;;48434:14;;2024::2;897:68123:88;;48434:14;897:68123;48434:14;336:42:2;48434:14:88;;;;;;;897:68123;;;48323:135;897:68123;;;48214:322;897:68123;;;48434:14;;;897:68123;2024:14:2;897:68123:88;;;;;;2024:14:2;897:68123:88;;;48323:135;;;;;;2024:14:2;;;:::i;48323:135:88:-;897:68123;48475:14;;:24;2024:14:2;897:68123:88;;;;;48507:23;48214:322;;:::i;:::-;48197:14;897:68123;48197:14;;:339;;;48606:13;897:68123;;48606:13;;897:68123;;;;;;;;48648:13;;:24;897:68123;;;;;;;48807:25;;897:68123;;48747:58;48770:34;897:68123;48747:58;;;897:68123;48747:58;;;897:68123;48747:58;;:::i;48413:14::-;;;;;897:68123;;;48413:14;;;;;;:::i;:::-;;;;48392;;;;;;897:68123;;;48392:14;;;;;;:::i;:::-;;;;;48351:29;;;;;;897:68123;;;48351:29;;;;;;:::i;:::-;;;;;48111:79;;;;;;;;897:68123;48111:79;897:68123;48111:79;;;;;;;:::i;:::-;;;;;47922:29;;;;;;897:68123;;;47922:29;;;;;;:::i;:::-;;;;;47619:25;;;;897:68123;47619:25;897:68123;47619:25;;;;;;;:::i;:::-;;;;47345:42;897:68123;;47345:42;;;:::i;:::-;897:68123;;;;47345:42;;;897:68123;;;;;;;;;;;;;:::i;:::-;;;1857:17;;2482:4:48;897:68123:88;;2116:63;1911:59;897:68123;;;;;;:::i;:::-;;;;;;;;;;;1911:59;:::i;897:68123::-;;;;;;;;;;;;3653:18:9;897:68123:88;2482:4:48;;;:::i;:::-;897:68123:88;;;;;;;:::i;:::-;2482:4:48;;;897:68123:88;;;3653:18:9;897:68123:88;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;3162:18:9;897:68123:88;2482:4:48;897:68123:88;2482:4:48;:::i;:::-;897:68123:88;;;;;;;:::i;:::-;2482:4:48;;;897:68123:88;;;3162:18:9;-1:-1:-1;;897:68123:88;;-1:-1:-1;;897:68123:88;-1:-1:-1;;897:68123:88;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35598:14;897:68123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35598:14;:::i;:::-;35641:46;897:68123;;;;35641:46;:::i;:::-;897:68123;;;;35714:46;897:68123;;;;35714:46;:::i;:::-;897:68123;;;;35787:46;897:68123;;35787:46;:::i;:::-;897:68123;;;;;;;;;;;35927:39;;35923:99;;897:68123;36031:39;;36027:99;;897:68123;;;;:::i;:::-;;294:80:98;897:68123:88;;294:80:98;:::i;:::-;897:68123:88;;294:80:98;897:68123:88;;294:80:98;:::i;:::-;897:68123:88;;294:80:98;897:68123:88;;;;294:80:98;:::i;:::-;897:68123:88;;;;;;;;36374:25;2024:14:2;36374:25:88;;897:68123;36374:25;;2024:14:2;897:68123:88;36374:25;897:68123;36374:25;336:42:2;36374:25:88;;;;;;897:68123;;;;36374:25;;;897:68123;;;;;;;;;36424:25;2024:14:2;36424:25:88;;897:68123;36424:25;;2024:14:2;897:68123:88;36424:25;897:68123;36424:25;336:42:2;36424:25:88;;;;;;897:68123;;;;36424:25;;;897:68123;;;;36405:16;;897:68123;;;;;;;36474:25;2024:14:2;36474:25:88;;897:68123;36474:25;;2024:14:2;897:68123:88;36474:25;897:68123;36474:25;336:42:2;36474:25:88;;;;;;897:68123;;;;36474:25;;;897:68123;;;;36455:16;;897:68123;;;;;;;;;;;;36614:29;2024:14:2;36614:29:88;;897:68123;36614:29;;897:68123;;;36614:29;897:68123;36614:29;336:42:2;36614:29:88;;;;;;;36521:136;897:68123;;;36614:29;;;897:68123;;36586:64;897:68123;2024:14:2;897:68123:88;;36586:64;;2024:14:2;897:68123:88;36586:64;;2024:14:2;;897:68123:88;;2024:14:2;;897:68123:88;2024:14:2;;;;;;:::i;:::-;;;897:68123:88;2024:14:2;;;897:68123:88;36586:64;;;;;;;;;;:::i;:::-;36521:136;:::i;:::-;897:68123;36506:12;;:151;897:68123;;;;;;36405:16;;897:68123;;;;36771:29;2024:14:2;36771:29:88;;897:68123;36771:29;;897:68123;;;36771:29;897:68123;36771:29;336:42:2;36771:29:88;;;;;;;897:68123;;36771:29;;;897:68123;;;;36743:64;;897:68123;2024:14:2;36743:64:88;897:68123;36743:64;;2024:14:2;;;;;897:68123:88;;2024:14:2;;897:68123:88;2024:14:2;;;;;;:::i;:::-;;;897:68123:88;2024:14:2;;;897:68123:88;36743:64;;;;;;;;;;:::i;:::-;897:68123;;2024:14:2;4632:24:97;;897:68123:88;;4632:24:97;;897:68123:88;-1:-1:-1;;897:68123:88;;4632:24:97;897:68123:88;;;336:42:2;4632:24:97;;;;;;;-1:-1:-1;;4632:24:97;;;897:68123:88;;;;4690:25:97;2024:14:2;4690:25:97;;897:68123:88;4690:25:97;;2024:14:2;-1:-1:-1;;4690:25:97;897:68123:88;4690:25:97;336:42:2;4690:25:97;;;;;;;4820:42;-1:-1:-1;;;4690:25:97;;;897:68123:88;;;;;;;;2024:14:2;897:68123:88;;;;;;;;;;;2024:14:2;897:68123:88;;;;;;;;2024:14:2;;;:::i;4820:42:97:-;;-1:-1:-1;;;336:42:2;4820::97;;;;;;;-1:-1:-1;;4820:42:97;;;897:68123:88;4868:26:97;897:68123:88;36663:12;;:151;897:68123;;;;36455:16;;897:68123;;;;;36928:29;2024:14:2;36928:29:88;;897:68123;36928:29;;897:68123;;;36928:29;897:68123;36928:29;336:42:2;36928:29:88;;;;;;;36835:136;897:68123;;;36928:29;;;897:68123;;36900:64;897:68123;2024:14:2;897:68123:88;;36900:64;;2024:14:2;897:68123:88;36900:64;;2024:14:2;;897:68123:88;;2024:14:2;;897:68123:88;2024:14:2;;;;;;:::i;:::-;;;897:68123:88;2024:14:2;;;897:68123:88;36900:64;;;;;;;;;;:::i;36835:136::-;897:68123;36820:12;;:151;36978:20;;;897:68123;36978:20;;897:68123;37038:20;;;;897:68123;37038:20;;897:68123;;37132:16;;2024:14:2;897:68123:88;37099:20;;:30;897:68123;37187:16;;;2024:14:2;897:68123:88;37154:20;;:30;897:68123;;37298:20;;2024:14:2;37282:58:88;897:68123;37328:10;2024:14:2;;;897:68123:88;37282:58;;;:::i;:::-;897:68123;;37256:85;2024:14:2;37256:85:88;;897:68123;37256:85;;2024:14:2;897:68123:88;2024:14:2;;;897:68123:88;37256:85;897:68123;37256:85;336:42:2;37256:85:88;;;;;;;897:68123;;;37413:58;897:68123;;;;;;;;;37256:85;;;897:68123;37237:7;;;;897:68123;37228:7;;;897:68123;;37219:7;;;897:68123;;37429:20;;37413:58;:::i;:::-;897:68123;;37387:85;2024:14:2;37387:85:88;;897:68123;37387:85;;2024:14:2;897:68123:88;2024:14:2;;;897:68123:88;37387:85;897:68123;37387:85;336:42:2;37387:85:88;;;;;;;897:68123;;;;;;;37387:85;;897:68123;37359:7;897:68123;37359:7;;;;37368;;;;897:68123;;;;;;37350:7;;;897:68123;37536:52;897:68123;;;;37552:14;;;37536:52;:::i;:::-;897:68123;;37510:79;2024:14:2;37510:79:88;;897:68123;37510:79;;2024:14:2;897:68123:88;2024:14:2;;;897:68123:88;37510:79;897:68123;37510:79;336:42:2;37510:79:88;;;;;;;897:68123;;;;;;;37510:79;;897:68123;37481:7;897:68123;37481:7;;;37490;;;;37499;;;;897:68123;;;;;;;;;36820:12;;37684;36455:16;897:68123;;36455:16;;897:68123;;;;;37754:29;2024:14:2;37754:29:88;;897:68123;37754:29;;897:68123;;;37754:29;897:68123;37754:29;336:42:2;37754:29:88;;;;;;;897:68123;;37754:29;;;897:68123;2024:14:2;;897:68123:88;;;37819:20;2024:14:2;37819:20:88;;897:68123;37819:20;;2024:14:2;897:68123:88;;37819:20;897:68123;37819:20;336:42:2;37819:20:88;;;;;;;897:68123;;37819:20;;;897:68123;2024:14:2;;897:68123:88;;;37870:20;2024:14:2;37870:20:88;;897:68123;37870:20;;2024:14:2;897:68123:88;;37870:20;897:68123;37870:20;336:42:2;37870:20:88;;;;;;;897:68123;;37870:20;;;897:68123;;;;;;;;;37921:20;2024:14:2;37921:20:88;;897:68123;37921:20;;2024:14:2;897:68123:88;;37921:20;897:68123;37921:20;336:42:2;37921:20:88;;;;;;;897:68123;37724:229;897:68123;;;37630:376;897:68123;;;37921:20;;;897:68123;2024:14:2;897:68123:88;;;;;;2024:14:2;897:68123:88;;;37724:229;;;;;;2024:14:2;;;:::i;37724:229:88:-;897:68123;37974:14;;:24;2024:14:2;897:68123:88;37630:376;;:::i;:::-;37598:29;;;;:408;;;897:68123;36506:12;;38090;897:68123;;;;;;;38160:29;2024:14:2;38160:29:88;;897:68123;38160:29;;897:68123;;;38160:29;897:68123;38160:29;336:42:2;38160:29:88;;;;;;;897:68123;;38160:29;;;897:68123;37228:7;;;;2024:14:2;897:68123:88;;;38225:20;2024:14:2;38225:20:88;;897:68123;38225:20;;2024:14:2;897:68123:88;;38225:20;897:68123;38225:20;336:42:2;38225:20:88;;;;;;;897:68123;;38225:20;;;897:68123;37237:7;;;;2024:14:2;897:68123:88;;;38276:20;2024:14:2;38276:20:88;;897:68123;38276:20;;2024:14:2;897:68123:88;;38276:20;897:68123;38276:20;336:42:2;38276:20:88;;;;;;;897:68123;;38276:20;;;897:68123;37219:7;897:68123;37219:7;;;897:68123;;;;;38327:20;2024:14:2;38327:20:88;;897:68123;38327:20;;2024:14:2;897:68123:88;;38327:20;897:68123;38327:20;336:42:2;38327:20:88;;;;;;;897:68123;38130:229;897:68123;;;38036:355;897:68123;;;38327:20;;;897:68123;2024:14:2;897:68123:88;;;;;;2024:14:2;897:68123:88;;;38130:229;;;;;;2024:14:2;;;:::i;38036:355:88:-;38015:18;;;;:376;;;897:68123;36663:12;;38475;897:68123;;36405:16;;897:68123;;;;;38545:29;2024:14:2;38545:29:88;;897:68123;38545:29;;897:68123;;;38545:29;897:68123;38545:29;336:42:2;38545:29:88;;;;;;;897:68123;;38545:29;;;897:68123;2024:14:2;;897:68123:88;;;38610:20;2024:14:2;38610:20:88;;897:68123;38610:20;;2024:14:2;897:68123:88;;38610:20;897:68123;38610:20;336:42:2;38610:20:88;;;;;;;897:68123;;38610:20;;;897:68123;2024:14:2;;897:68123:88;;;38661:20;2024:14:2;38661:20:88;;897:68123;38661:20;;2024:14:2;897:68123:88;;38661:20;897:68123;38661:20;336:42:2;38661:20:88;;;;;;;897:68123;;38661:20;;;897:68123;37350:7;897:68123;37350:7;;;897:68123;;;;;38712:20;2024:14:2;38712:20:88;;897:68123;38712:20;;2024:14:2;897:68123:88;;38712:20;897:68123;38712:20;336:42:2;38712:20:88;;;;;;897:68123;38400:18;897:68123;;38515:229;897:68123;39001:46;897:68123;38421:355;897:68123;;;38712:20;;;897:68123;2024:14:2;897:68123:88;;;;;;2024:14:2;897:68123:88;;;38515:229;;;;;;2024:14:2;;;:::i;38421:355:88:-;38400:18;;:376;;;38817:14;;:::i;:::-;38853:29;;38837:45;;;:::i;:::-;;;;;:::i;:::-;;38904:18;38888:34;;;:::i;:::-;;;;;:::i;:::-;;38944:18;38928:34;;;:::i;39001:46::-;897:68123;;;;;;;39058:39;;;;;;897:68123;;;;;;;;;;;;39132:108;39155:44;897:68123;39132:108;;;897:68123;39132:108;;2024:14:2;897:68123:88;;;2024:14:2;897:68123:88;39132:108;;;897:68123;39132:108;;:::i;:::-;336:42:2;39107:141:88;;;;897:68123;;39107:141;2024:14:2;39107:141:88;;897:68123;;39107:141;;2024:14:2;897:68123:88;;2024:14:2;897:68123:88;;2024:14:2;897:68123:88;2024:14:2;;;;:::i;:::-;39107:141:88;897:68123;;;336:42:2;39107:141:88;;;;;;;;39054:363;;39422:73;39054:363;897:68123;39054:363;;897:68123;37328:10;2024:14:2;;;897:68123:88;39444:14;;897:68123;;39422:73;;;;;;2024:14:2;39422:73:88;;897:68123;39422:73;;;:::i;:::-;;;;;;;;;;;897:68123;;;;39107:141;897:68123;;39107:141;;;:::i;:::-;897:68123;;;;39107:141;;;39054:363;897:68123;;39294:108;39317:44;897:68123;39294:108;;;897:68123;39294:108;;2024:14:2;897:68123:88;;;2024:14:2;897:68123:88;39294:108;;;897:68123;39294:108;;:::i;:::-;336:42:2;39269:141:88;;;;897:68123;;39269:141;2024:14:2;39269:141:88;;897:68123;;39269:141;;2024:14:2;897:68123:88;;2024:14:2;897:68123:88;;2024:14:2;897:68123:88;2024:14:2;;;;:::i;:::-;39269:141:88;897:68123;;;336:42:2;39269:141:88;;;;;;;;39054:363;;39422:73;39054:363;897:68123;39054:363;;;39269:141;897:68123;;39269:141;;;:::i;:::-;897:68123;;;;39269:141;;;38661:20;;;;;;897:68123;;;38661:20;;;;;;:::i;:::-;;;;;38610;;;;;;897:68123;;;38610:20;;;;;;:::i;:::-;;;;;38545:29;;;;;;897:68123;;;38545:29;;;;;;:::i;:::-;;;;;38276:20;;;;;;897:68123;;;38276:20;;;;;;:::i;:::-;;;;;38225;;;;;;897:68123;;;38225:20;;;;;;:::i;:::-;;;;;38160:29;;;;;;897:68123;;;38160:29;;;;;;:::i;:::-;;;;;37870:20;897:68123;37870:20;;;;;;897:68123;;;37870:20;;;;;;:::i;:::-;;;;;37819;;;;;;897:68123;;;37819:20;;;;;;:::i;:::-;;;;;37754:29;;;;;;897:68123;;;37754:29;;;;;;:::i;:::-;;;;;37510:79;;;;;;;897:68123;37510:79;897:68123;37510:79;;;;;;;:::i;:::-;;;;37387:85;;;897:68123;37387:85;;;;;;897:68123;37387:85;897:68123;37387:85;;;;;;;:::i;:::-;;;;;;;;37256;;;;;;;897:68123;37256:85;897:68123;37256:85;;;;;;;:::i;:::-;;;;36928:29;;;;;;897:68123;;;36928:29;;;;;;:::i;:::-;;;;;4820:42:97;;;;;-1:-1:-1;;;4820:42:97;;;;;;:::i;:::-;;;;4632:24;;;;;;-1:-1:-1;;;4632:24:97;;;;;;:::i;:::-;;;;;36771:29:88;;;;;897:68123;;;36771:29;;;;;;:::i;:::-;;;;36614;;;;;;897:68123;;;36614:29;;;;;;:::i;:::-;;;;;36474:25;;;;897:68123;36474:25;897:68123;36474:25;;;;;;;:::i;:::-;;;;36424;;;;897:68123;36424:25;897:68123;36424:25;;;;;;;:::i;:::-;;;;36374;;;;897:68123;36374:25;897:68123;36374:25;;;;;;;:::i;:::-;;;;36027:99;897:68123;;;;36027:99;;;35923;897:68123;;;;;35923:99;;897:68123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;336:42:2;44886:50:88;;;;897:68123;;44886:50;2024:14:2;44886:50:88;;44896:39;;897:68123;44886:50;;897:68123;;;44886:50;897:68123;44886:50;336:42:2;44886:50:88;;;;;;;;897:68123;44963:14;;;;;:::i;:::-;897:68123;45012:45;897:68123;;;;;;45012:45;:::i;:::-;897:68123;;;;;;45086:38;897:68123;;;;;;45086:38;:::i;:::-;897:68123;;;;;294:80:98;897:68123:88;;294:80:98;:::i;:::-;897:68123:88;;;45202:55;897:68123;;;;;;;;45202:55;;:::i;:::-;897:68123;;;;;:::i;:::-;;;;;;45351:25;2024:14:2;45351:25:88;;897:68123;45351:25;;2024:14:2;897:68123:88;45351:25;897:68123;45351:25;336:42:2;45351:25:88;;;;;;897:68123;;;;45351:25;;;897:68123;;;;;;;;;;;;;;;;;;;;;;;;;;45568:29;2024:14:2;45568:29:88;;897:68123;45568:29;;897:68123;;;45568:29;897:68123;45568:29;336:42:2;45568:29:88;;;;;;;897:68123;;45568:29;;;897:68123;;;;;;;;;45604:26;2024:14:2;45604:26:88;;897:68123;45604:26;;2024:14:2;897:68123:88;;45604:26;897:68123;45604:26;336:42:2;45604:26:88;;;;;;;45400:238;897:68123;;;45604:26;;;897:68123;;45540:91;897:68123;2024:14:2;897:68123:88;;45540:91;;;2024:14:2;897:68123:88;45540:91;;2024:14:2;;897:68123:88;;2024:14:2;;897:68123:88;2024:14:2;;;;;;:::i;45400:238:88:-;45382:15;45669:47;897:68123;45382:15;;:256;;;;45669:47;:::i;:::-;45644:22;897:68123;45644:22;;897:68123;2024:14:2;;45828:51:88;;336:42:2;45818:62:88;;;;897:68123;;45818:62;2024:14:2;45818:62:88;;897:68123;45818:62;;897:68123;;;45818:62;897:68123;45818:62;336:42:2;45818:62:88;;;;;;;;897:68123;;;45963:14;45947:52;45963:14;;897:68123;45987:10;2024:14:2;;;897:68123:88;45947:52;;:::i;:::-;897:68123;;45921:79;2024:14:2;45921:79:88;;897:68123;45921:79;;2024:14:2;897:68123:88;2024:14:2;;;897:68123:88;45921:79;897:68123;45921:79;336:42:2;45921:79:88;;;;;;;897:68123;;;;;;;;45921:79;;;897:68123;46094:15;;897:68123;;;;;;;;46161:29;2024:14:2;46161:29:88;;897:68123;46161:29;;897:68123;;;46161:29;897:68123;46161:29;336:42:2;46161:29:88;;;;;;;897:68123;;46161:29;;;897:68123;;;;46202:14;2024::2;46202::88;;897:68123;46202:14;;2024::2;897:68123:88;;46202:14;897:68123;46202:14;336:42:2;46202:14:88;;;;;;;897:68123;;46202:14;;;897:68123;;;;46223:14;2024::2;46223::88;;897:68123;46223:14;;2024::2;897:68123:88;;46223:14;897:68123;46223:14;336:42:2;46223:14:88;;;;;;;897:68123;;46223:14;;;897:68123;;;;;46244:14;2024::2;46244::88;;897:68123;;46244:14;;2024::2;897:68123:88;;46244:14;897:68123;46244:14;336:42:2;46244:14:88;;;;;;;897:68123;;;46133:135;897:68123;;;46024:322;897:68123;;;46244:14;;;897:68123;2024:14:2;897:68123:88;;;;;;2024:14:2;897:68123:88;;;46133:135;;;;;;2024:14:2;;;:::i;46133:135:88:-;897:68123;46285:14;;:24;2024:14:2;897:68123:88;;;;;46317:23;46024:322;;:::i;:::-;46007:14;897:68123;46007:14;;:339;;;2024:14:2;46397:13:88;;;;;897:68123;;;;;;;;46454:13;;:24;897:68123;;;;;;;;;46545:58;46568:34;897:68123;46545:58;;;897:68123;46545:58;;;897:68123;46545:58;;:::i;:::-;46616:13;;897:68123;;;2024:14:2;;897:68123:88;46605:25;;;2024:14:2;;;;;;;;;;;;46605:25:88;897:68123;2024:14:2;;;46605:25:88;2024:14:2;46605:25:88;336:42:2;46505:131:88;;;;;897:68123;;;46505:131;;;;;2024:14:2;46505:131:88;;897:68123;;46505:131;897:68123;46505:131;;;:::i;:::-;;897:68123;;;336:42:2;46505:131:88;;;;;;;;897:68123;-1:-1:-1;46715:13:88;897:68123;;46682:31;897:68123;46659:70;;;;;;;2024:14:2;;897:68123:88;46659:70;;2024:14:2;;;;;;;;;46659:70:88;897:68123;2024:14:2;;;46659:70:88;2024:14:2;46659:70:88;336:42:2;46643:87:88;;;;897:68123;;46643:87;2024:14:2;46643:87:88;;897:68123;;46643:87;;2024:14:2;897:68123:88;;2024:14:2;897:68123:88;;2024:14:2;897:68123:88;2024:14:2;;;;:::i;:::-;46643:87:88;897:68123;;;336:42:2;46643:87:88;;;;;;;;897:68123;2024:14:2;46736:72:88;2024:14:2;897:68123:88;2024:14:2;897:68123:88;45987:10;2024:14:2;;;897:68123:88;46758:14;;46774;;897:68123;;;46736:72;;;;;;2024:14:2;46736:72:88;;897:68123;46736:72;;;:::i;46643:87::-;897:68123;;46643:87;;;:::i;:::-;897:68123;;;;46643:87;;;46505:131;897:68123;;46505:131;;;:::i;:::-;897:68123;;;;46505:131;;;46223:14;;;;;897:68123;;;46223:14;;;;;;:::i;:::-;;;;46202;;;;;;897:68123;;;46202:14;;;;;;:::i;:::-;;;;;46161:29;;;;;;897:68123;;;46161:29;;;;;;:::i;:::-;;;;;45921:79;;;;;;;;897:68123;45921:79;897:68123;45921:79;;;;;;;:::i;:::-;;;;;45818:62;897:68123;;45818:62;;;:::i;:::-;897:68123;;;;45818:62;;;45568:29;897:68123;45568:29;;;;;;897:68123;;;45568:29;;;;;;:::i;:::-;;;;;45351:25;;;;897:68123;45351:25;897:68123;45351:25;;;;;;;:::i;:::-;;;;44886:50;897:68123;;44886:50;;;:::i;:::-;897:68123;;;;44886:50;;;897:68123;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26459:14;;;;:::i;:::-;26498:52;26514:14;;897:68123;26538:10;2024:14:2;;;897:68123:88;26498:52;;:::i;:::-;897:68123;;;;;26604:13;;;897:68123;26626:3;26604:13;;897:68123;;26600:24;;;;;26693:16;;897:68123;26693:16;;:::i;:::-;;897:68123;;;;26681:34;2024:14:2;26681:34:88;;897:68123;26681:34;;897:68123;;;26681:34;;;336:42:2;26681:34:88;;;;;;;897:68123;;26681:34;;;26626:3;26734:13;897:68123;;26734:16;:13;;;:16;:::i;:::-;;:23;897:68123;;;;;26722:36;2024:14:2;26722:36:88;;897:68123;26722:36;;2024:14:2;897:68123:88;;26722:36;26681:34;26722:36;336:42:2;26722:36:88;;;;;;;897:68123;;26652:112;897:68123;;;26722:36;;;26626:3;26652:112;;:::i;:::-;26626:3;897:68123;26585:13;;;26722:36;;;;;;897:68123;;;26722:36;;;;;;:::i;:::-;;;;;26681:34;;;;;897:68123;;;26681:34;;;;;;:::i;:::-;;;;26600:24;;;;897:68123;;26814:19;2024:14:2;26814:19:88;;;897:68123;26814:19;;2024:14:2;897:68123:88;;26814:19;26681:34;26814:19;336:42:2;26814:19:88;;;;;;;897:68123;;26814:19;;;26580:191;897:68123;;;;;;;;;;;;2024:14:2;897:68123:88;;;;;;;;;2024:14:2;;;:::i;:::-;;;897:68123:88;2024:14:2;;;897:68123:88;2024:14:2;897:68123:88;;;;;;;;2024:14:2;;;:::i;897:68123:88:-;;;26865:13;897:68123;26865:13;;26841:191;26887:3;26865:13;;897:68123;;26861:24;;;;;26959:16;;897:68123;26959:16;;:::i;:::-;;897:68123;;;;26947:34;2024:14:2;26947:34:88;;897:68123;26947:34;;897:68123;;;26947:34;26681;26947;336:42:2;26947:34:88;;;;;;;897:68123;;26947:34;;;26887:3;27000:13;897:68123;;27000:16;:13;;;:16;:::i;:::-;;:23;897:68123;;;;;26988:36;2024:14:2;26988:36:88;;897:68123;26988:36;;2024:14:2;897:68123:88;;26988:36;26681:34;26988:36;336:42:2;26988:36:88;;;;;;;897:68123;;26913:112;897:68123;;;26988:36;;;26887:3;26913:112;;:::i;:::-;26887:3;897:68123;26846:13;;;26988:36;;;;;;897:68123;;;26988:36;;;;;;:::i;:::-;;;;;26947:34;;;;;897:68123;;;26947:34;;;;;;:::i;:::-;;;;26861:24;;;27424:67;26861:24;897:68123;27089:16;;897:68123;27424:67;27061:68;897:68123;;;;27107:17;;;;897:68123;;;;;27061:68;;:::i;:::-;27271:38;27162:75;897:68123;27212:14;;:24;2024:14:2;897:68123:88;;;;;;;:::i;:::-;;;;;27162:75;;:::i;:::-;27271:38;;:::i;:::-;2024:14:2;897:68123:88;26538:10;2024:14:2;;;897:68123:88;27446:14;;897:68123;;27424:67;;;;;;2024:14:2;27424:67:88;;897:68123;27424:67;;;:::i;:::-;;;;;;;;;27686:17;897:68123;;;;;;;;;;;;;;;27424:67;;;26841:191;27653:6;897:68123;;;27541:39;897:68123;27498:37;27603:17;897:68123;;;;;;;;27498:37;;:::i;27541:39::-;27603:17;:::i;:::-;27653:6;:::i;27424:67::-;;;;27653:6;27424:67;;27603:17;27424:67;;897:68123;27424:67;;27541:39;27424:67;897:68123;27424:67;27498:37;27424:67;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;27424:67:88;;-1:-1:-1;27424:67:88;;;;-1:-1:-1;27424:67:88;-1:-1:-1;27424:67:88;;-1:-1:-1;27424:67:88;;-1:-1:-1;27424:67:88;;26814:19;897:68123;26814:19;;;;897:68123;26814:19;;897:68123;;;26814:19;;;;;;:::i;:::-;;;;;;897:68123;;;;;;;;;;;;3346:26:9;897:68123:88;2482:4:48;;;:::i;:::-;897:68123:88;;;;;;;:::i;:::-;2482:4:48;;;897:68123:88;;;;;3346:26:9;897:68123:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;11601:13;897:68123;;;;11601:13;:::i;:::-;11677:3;11631:43;:13;;897:68123;11654:13;;897:68123;11631:43;;:::i;:::-;:49;336:42:2;11621:60:88;;;;897:68123;;11621:60;2024:14:2;11621:60:88;;897:68123;11621:60;;897:68123;;;11621:60;897:68123;11621:60;336:42:2;11621:60:88;;;;;;;;897:68123;;2024:14:2;897:68123:88;;;;11692:38;11688:96;;897:68123;;;11947:3;11925:13;;897:68123;;11921:24;;;;;11970:16;;897:68123;11970:16;;:::i;:::-;;897:68123;;;;;;11970:38;;336:42:2;11960:49:88;;;;897:68123;;11960:49;2024:14:2;11960:49:88;;897:68123;11960:49;;897:68123;;;11960:49;897:68123;11960:49;336:42:2;11960:49:88;;;;;;;;11947:3;;897:68123;;11906:13;;11960:49;897:68123;;11960:49;;;:::i;:::-;897:68123;;;;11960:49;;;11921:24;;;;;;;897:68123;;12067:3;12045:13;;897:68123;;12041:24;;;;;12090:16;;897:68123;12090:16;;:::i;:::-;;897:68123;;;;;;12090:38;;336:42:2;12080:49:88;;;;897:68123;;12080:49;2024:14:2;12080:49:88;;897:68123;12080:49;;897:68123;;;12080:49;897:68123;12080:49;336:42:2;12080:49:88;;;;;;;;12067:3;;897:68123;;12026:13;;12080:49;897:68123;;12080:49;;;:::i;:::-;897:68123;;;;12080:49;;;12041:24;;;;;;12162:14;;;;:::i;:::-;897:68123;;;;12289:3;12267:13;;897:68123;;12263:24;;;;;12384:16;;897:68123;12384:16;;:::i;:::-;;897:68123;;;;12372:34;2024:14:2;12372:34:88;;897:68123;12372:34;;897:68123;;;12372:34;897:68123;12372:34;336:42:2;12372:34:88;;;;;;;897:68123;;;;12372:34;;;12289:3;12425:13;897:68123;12425:16;897:68123;12425:13;;;:16;:::i;:::-;;:23;897:68123;;;;;12413:36;2024:14:2;12413:36:88;;897:68123;12413:36;;2024:14:2;897:68123:88;;12413:36;897:68123;12413:36;336:42:2;12413:36:88;;;;;;;897:68123;12327:139;897:68123;2024:14:2;897:68123:88;;;;;;12413:36;;;897:68123;;;;;;2024:14:2;897:68123:88;;;12327:139;;;;;;2024:14:2;;;:::i;12327:139:88:-;12289:3;897:68123;12248:13;;;12413:36;;;;;897:68123;;;12413:36;;;;;;:::i;:::-;;;;12372:34;897:68123;12372:34;;;12425:16;12372:34;897:68123;12372:34;;897:68123;;;12372:34;;;;;;:::i;:::-;;;;;;;12263:24;;;;;897:68123;;;;;;;12537:26;2024:14:2;12537:26:88;;897:68123;12537:26;;897:68123;;;12537:26;897:68123;12537:26;336:42:2;12537:26:88;;;;;;;897:68123;;12537:26;;;12243:242;897:68123;;;;;;;;12570:26;2024:14:2;12570:26:88;;897:68123;12570:26;;2024:14:2;897:68123:88;;12570:26;897:68123;12570:26;336:42:2;12570:26:88;;;;;;;2024:14:2;897:68123:88;;12505:92;897:68123;;;12570:26;;;897:68123;;;;;;2024:14:2;897:68123:88;;;12505:92;;;;;;2024:14:2;;;:::i;12505:92:88:-;897:68123;;;12607:238;12653:3;12631:13;;897:68123;;12627:24;;;;;12749:16;;897:68123;12749:16;;:::i;:::-;;897:68123;;;;12737:34;2024:14:2;12737:34:88;;897:68123;12737:34;;897:68123;;;12737:34;897:68123;12737:34;336:42:2;12737:34:88;;;;;;;897:68123;;12737:34;;;12653:3;12790:13;897:68123;;12790:16;:13;;;:16;:::i;:::-;;:23;897:68123;;;;12778:36;2024:14:2;12778:36:88;;897:68123;12778:36;;2024:14:2;897:68123:88;;12778:36;897:68123;12778:36;336:42:2;12778:36:88;;;;;;897:68123;;;;;12691:135;897:68123;;;12778:36;;;897:68123;;;;;;2024:14:2;897:68123:88;;;12691:135;;;;;;2024:14:2;;;:::i;12691:135:88:-;12653:3;897:68123;12612:13;;;12778:36;;;;;897:68123;;;12778:36;;;;;;:::i;:::-;;;;12737:34;;;;;897:68123;;;12737:34;;;;;;:::i;:::-;;;;12627:24;;12862:68;12627:24;;897:68123;;12627:24;897:68123;;;;;12862:68;;:::i;:::-;13016:14;13120:89;13000:52;13016:14;;897:68123;13040:10;2024:14:2;897:68123:88;2024:14:2;897:68123:88;13000:52;;:::i;:::-;897:68123;;;;;;13192:16;13120:89;13192:16;;897:68123;;13120:89;;;2024:14:2;897:68123:88;13120:89;;;;897:68123;13120:89;;;:::i;:::-;;12327:139;13120:89;;;;;;:::i;:::-;897:68123;;;;13219:28;897:68123;13219:28;;897:68123;;13219:28;;;897:68123;13219:28;;:::i;:::-;336:42:2;13067:188:88;;;;;897:68123;;;13067:188;;;;;2024:14:2;13067:188:88;;897:68123;;13067:188;897:68123;13067:188;;;:::i;:::-;;897:68123;;;336:42:2;13067:188:88;;;;;;;;12607:238;897:68123;;;;;;;13315:26;2024:14:2;13315:26:88;;897:68123;13315:26;;897:68123;;;13315:26;897:68123;13315:26;336:42:2;13315:26:88;;;;;;;897:68123;;13315:26;;;12607:238;13368:16;;;897:68123;;;13356:29;2024:14:2;13356:29:88;;897:68123;;13356:29;;2024:14:2;897:68123:88;;2024:14:2;897:68123:88;;2024:14:2;897:68123:88;2024:14:2;;;;:::i;:::-;13356:29:88;;336:42:2;13356:29:88;;;;;;;13526:110;897:68123;;;;;13415:75;897:68123;;;13356:29;;;12607:238;897:68123;;13298:88;897:68123;;;;;;2024:14:2;897:68123:88;;;13298:88;;;;;;2024:14:2;;;:::i;:::-;;;897:68123:88;2024:14:2;;;897:68123:88;2024:14:2;897:68123:88;;;;;;;;2024:14:2;;;:::i;13298:88:88:-;897:68123;13465:14;;:24;2024:14:2;897:68123:88;13415:75;;:::i;:::-;897:68123;;;13619:16;;897:68123;;13526:110;;;13549:40;897:68123;13526:110;;;897:68123;13526:110;;2024:14:2;897:68123:88;;;;;;;;;;;;;;:::i;13356:29::-;13298:88;13356:29;;;;897:68123;13356:29;;897:68123;;;13356:29;;;;;;:::i;:::-;;;;;;13315:26;;;;;897:68123;;;13315:26;;;;;;:::i;:::-;;;;13067:188;897:68123;;13067:188;;;:::i;:::-;897:68123;;;;13067:188;;;12570:26;;;;;897:68123;;;12570:26;;;;;;:::i;:::-;;;;12537;897:68123;12537:26;;;;;;897:68123;;;12537:26;;;;;;:::i;:::-;;;;;11688:96;897:68123;;;;11688:96;;11621:60;897:68123;;11621:60;;;:::i;:::-;897:68123;;;;11621:60;;;897:68123;;;;;;;;;;;;;;934:28;897:68123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31288:14;897:68123;;;;;;;;;;;;;;;;;;;;;;;;;;;31288:14;:::i;:::-;897:68123;;;;-1:-1:-1;;2933:19:15;;897:68123:88;;-1:-1:-1;2933:19:15;:::i;:::-;897:68123:88;;;;;;;;;:::i;:::-;;;;;;;;;;;9786:54:15;;897:68123:88;;9786:54:15;;;;;;;897:68123:88;9786:54:15;;897:68123:88;;;;;;:::i;9786:54:15:-;897:68123:88;;;;;;;9371:159:15;679:42;9371:159;;;897:68123:88;;;;;;;;;;;;;;;;;2933:19:15;;897:68123:88;;2933:19:15;:::i;:::-;897:68123:88;;;;;;:::i;:::-;;;;;;;;;;;9786:54:15;;897:68123:88;;9786:54:15;;;;;;;897:68123:88;9786:54:15;;897:68123:88;;;;;;:::i;9786:54:15:-;-1:-1:-1;;;;;897:68123:88;;9371:159:15;679:42;9371:159;;;897:68123:88;;;;;;:::i;:::-;;294:80:98;897:68123:88;;294:80:98;:::i;:::-;897:68123:88;;294:80:98;897:68123:88;;294:80:98;:::i;:::-;897:68123:88;;294:80:98;897:68123:88;;;;294:80:98;:::i;:::-;897:68123:88;;;;;;;;31687:25;2024:14:2;31687:25:88;;897:68123;31687:25;;2024:14:2;897:68123:88;31687:25;897:68123;31687:25;336:42:2;31687:25:88;;;;;;;897:68123;;;;;31687:25;;;897:68123;;;;;;;;;31737:25;2024:14:2;31737:25:88;;897:68123;31737:25;;2024:14:2;897:68123:88;31737:25;897:68123;31737:25;336:42:2;31737:25:88;;;;;;;897:68123;;;;;31737:25;;;897:68123;;;;31718:16;;897:68123;;;;;;;31787:25;2024:14:2;31787:25:88;;897:68123;31787:25;;2024:14:2;897:68123:88;31787:25;897:68123;31787:25;336:42:2;31787:25:88;;;;;;;897:68123;;;;;31787:25;;;897:68123;;;31768:16;;;897:68123;;;;;;;31909:29;2024:14:2;31909:29:88;;897:68123;31909:29;;897:68123;;;31909:29;897:68123;31909:29;336:42:2;31909:29:88;;;;;;;897:68123;31840:107;897:68123;;;31909:29;;;897:68123;;31881:64;897:68123;2024:14:2;897:68123:88;;31881:64;;2024:14:2;897:68123:88;31881:64;;2024:14:2;;897:68123:88;;2024:14:2;;897:68123:88;2024:14:2;;;;;;:::i;31840:107:88:-;897:68123;31819:12;;:128;897:68123;;;;;;;;31718:16;;897:68123;;;;32085:29;2024:14:2;32085:29:88;;897:68123;32085:29;;897:68123;;;32085:29;897:68123;32085:29;336:42:2;32085:29:88;;;;;;;897:68123;;32085:29;;;897:68123;;;;;;;;32121:26;2024:14:2;32121:26:88;;897:68123;32121:26;;2024:14:2;897:68123:88;;32121:26;897:68123;32121:26;336:42:2;32121:26:88;;;;;;;897:68123;2024:14:2;897:68123:88;;;32057:91;897:68123;;;32121:26;;;897:68123;;;;32057:91;;;897:68123;32057:91;;2024:14:2;;;;;897:68123:88;;2024:14:2;;897:68123:88;2024:14:2;;;;;;:::i;:::-;;;;;;;;;897:68123:88;;2024:14:2;;897:68123:88;2024:14:2;;;;;;:::i;32057:91:88:-;897:68123;;2024:14:2;4632:24:97;;897:68123:88;4632:24:97;;897:68123:88;;;;-1:-1:-1;;897:68123:88;;;336:42:2;4632:24:97;;;;;;;-1:-1:-1;;4632:24:97;;;897:68123:88;;;;4690:25:97;2024:14:2;4690:25:97;;897:68123:88;;4690:25:97;;2024:14:2;-1:-1:-1;;4690:25:97;897:68123:88;4690:25:97;336:42:2;4690:25:97;;;;;;;-1:-1:-1;;4820:42:97;-1:-1:-1;;;;;;4690:25:97;;;897:68123:88;;;;;;;;2024:14:2;897:68123:88;;;;;;;;;;;;2024:14:2;897:68123:88;;;;;;;;2024:14:2;;;:::i;897:68123:88:-;4828:11:97;336:42:2;4828:11:97;:::i;:::-;897:68123:88;;;4820:42:97;;;;2024:14:2;4820:42:97;;-1:-1:-1;;4820:42:97;897:68123:88;4820:42:97;;;:::i;:::-;;-1:-1:-1;;;336:42:2;4820::97;;;;;;;-1:-1:-1;;4820:42:97;;;897:68123:88;4868:26:97;897:68123:88;31953:12;;:202;897:68123;31768:16;;;897:68123;;;;32251:29;2024:14:2;32251:29:88;;897:68123;32251:29;;897:68123;;;32251:29;897:68123;32251:29;336:42:2;32251:29:88;;;;;;;897:68123;32182:107;897:68123;;;32251:29;;;897:68123;;32223:64;897:68123;2024:14:2;897:68123:88;;32223:64;;2024:14:2;897:68123:88;32223:64;;2024:14:2;;897:68123:88;;2024:14:2;;897:68123:88;2024:14:2;;;;;;:::i;:::-;;;897:68123:88;2024:14:2;;;897:68123:88;32223:64;;;;;;;;;;:::i;32182:107::-;897:68123;32161:12;;:128;32296:20;;;;897:68123;32296:20;;897:68123;32356:20;;;;897:68123;32356:20;;897:68123;;32450:16;;2024:14:2;897:68123:88;32417:20;;:30;897:68123;32505:16;;;2024:14:2;897:68123:88;32472:20;;:30;897:68123;;32616:20;;2024:14:2;32600:58:88;897:68123;;2024:14:2;;;897:68123:88;32600:58;;;:::i;:::-;897:68123;;32574:85;2024:14:2;32574:85:88;;897:68123;32574:85;;2024:14:2;897:68123:88;2024:14:2;;;897:68123:88;32574:85;897:68123;32574:85;336:42:2;32574:85:88;;;;;;;897:68123;;;;32731:58;897:68123;;;;;;;;;32574:85;;;897:68123;32555:7;;;;897:68123;32546:7;;;897:68123;;32537:7;;;897:68123;;32747:20;;32731:58;:::i;:::-;897:68123;;32705:85;2024:14:2;32705:85:88;;897:68123;32705:85;;2024:14:2;897:68123:88;2024:14:2;;;897:68123:88;32705:85;897:68123;32705:85;336:42:2;32705:85:88;;;;;;;897:68123;;;;;;;;;;;32705:85;;897:68123;32686:7;;;;897:68123;32677:7;;;897:68123;;32668:7;;;897:68123;32854:52;897:68123;;;;32870:14;;;32854:52;:::i;:::-;897:68123;;32828:79;2024:14:2;32828:79:88;;897:68123;32828:79;;2024:14:2;897:68123:88;2024:14:2;;;897:68123:88;32828:79;897:68123;32828:79;336:42:2;32828:79:88;;;;;;;897:68123;;;;;;;;;;;32828:79;;897:68123;32817:7;;;;897:68123;32808:7;;;897:68123;;32799:7;;;897:68123;;32161:12;;33002;897:68123;31768:16;;;897:68123;;;;33072:29;2024:14:2;33072:29:88;;897:68123;33072:29;;897:68123;;;33072:29;897:68123;33072:29;336:42:2;33072:29:88;;;;;;;897:68123;;33072:29;;;897:68123;32808:7;;;;2024:14:2;897:68123:88;;;33137:20;2024:14:2;33137:20:88;;897:68123;33137:20;;2024:14:2;897:68123:88;;33137:20;897:68123;33137:20;336:42:2;33137:20:88;;;;;;;897:68123;;33137:20;;;897:68123;32817:7;;;;2024:14:2;897:68123:88;;33188:20;2024:14:2;33188:20:88;;897:68123;33188:20;;2024:14:2;897:68123:88;;33188:20;897:68123;33188:20;336:42:2;33188:20:88;;;;;;;897:68123;;33188:20;;;897:68123;32799:7;897:68123;32799:7;;;897:68123;;;;;33239:20;2024:14:2;33239:20:88;;897:68123;33239:20;;2024:14:2;897:68123:88;;33239:20;897:68123;33239:20;336:42:2;33239:20:88;;;;;;;897:68123;;33042:229;897:68123;;;32948:376;897:68123;;;;;33239:20;;;897:68123;;2024:14:2;897:68123:88;;;;;;2024:14:2;897:68123:88;;;33042:229;;;;;;2024:14:2;;;:::i;33042:229:88:-;897:68123;33292:14;;:24;2024:14:2;897:68123:88;32948:376;;:::i;:::-;32916:29;;;:408;897:68123;31819:12;;33408;897:68123;;;;;;;33478:29;2024:14:2;33478:29:88;;897:68123;33478:29;;897:68123;;;33478:29;897:68123;33478:29;336:42:2;33478:29:88;;;;;;;897:68123;;33478:29;;;897:68123;32546:7;;;;2024:14:2;897:68123:88;;;33543:20;2024:14:2;33543:20:88;;897:68123;33543:20;;2024:14:2;897:68123:88;;33543:20;897:68123;33543:20;336:42:2;33543:20:88;;;;;;;897:68123;;33543:20;;;897:68123;32555:7;;;;2024:14:2;897:68123:88;;33594:20;2024:14:2;33594:20:88;;897:68123;33594:20;;2024:14:2;897:68123:88;;33594:20;897:68123;33594:20;336:42:2;33594:20:88;;;;;;;897:68123;;33594:20;;;897:68123;32537:7;897:68123;32537:7;;;897:68123;;;;;33645:20;2024:14:2;33645:20:88;;897:68123;33645:20;;2024:14:2;897:68123:88;;33645:20;897:68123;33645:20;336:42:2;33645:20:88;;;;;;;897:68123;;33448:229;897:68123;;;33354:355;897:68123;;;;;33645:20;;;897:68123;;2024:14:2;897:68123:88;;;;;;2024:14:2;897:68123:88;;;33448:229;;;;;;2024:14:2;;;:::i;33354:355:88:-;33333:18;;;:376;897:68123;31953:12;;33793;897:68123;;31718:16;;897:68123;;;;;33863:29;2024:14:2;33863:29:88;;897:68123;33863:29;;897:68123;;;33863:29;897:68123;33863:29;336:42:2;33863:29:88;;;;;;;897:68123;;33863:29;;;897:68123;32677:7;;;;2024:14:2;897:68123:88;;;33928:20;2024:14:2;33928:20:88;;897:68123;33928:20;;2024:14:2;897:68123:88;;33928:20;897:68123;33928:20;336:42:2;33928:20:88;;;;;;;897:68123;;33928:20;;;897:68123;32686:7;;;;2024:14:2;897:68123:88;;33979:20;2024:14:2;33979:20:88;;897:68123;33979:20;;2024:14:2;897:68123:88;;33979:20;897:68123;33979:20;336:42:2;33979:20:88;;;;;;;897:68123;;33979:20;;;897:68123;32668:7;897:68123;32668:7;;;897:68123;;;;;34030:20;2024:14:2;34030:20:88;;897:68123;34030:20;;2024:14:2;897:68123:88;;34030:20;897:68123;34030:20;336:42:2;34030:20:88;;;;;;;33333:18;897:68123;;;33739:355;897:68123;;33833:229;897:68123;;;;;34030:20;;;897:68123;;2024:14:2;897:68123:88;;;;;;2024:14:2;897:68123:88;;;33833:229;;;;;;2024:14:2;;;:::i;33739:355:88:-;33718:18;;;;:376;;;34135:14;;:::i;:::-;32916:29;;;;34171;34155:45;;;:::i;:::-;;;;;:::i;:::-;;34222:18;34206:34;;;:::i;:::-;;;;;:::i;:::-;;33333:18;34262;34246:34;;;:::i;:::-;;;;;:::i;:::-;;897:68123;34395:114;34462:13;34319:46;;;:::i;:::-;34462:13;;:::i;:::-;;897:68123;;;;;;;;;;34395:114;;;34418:42;897:68123;34395:114;;;897:68123;;34395:114;;897:68123;;;;;;:::i;:::-;;;;;2024:14:2;897:68123:88;;;2024:14:2;34395:114:88;897:68123;34395:114;;;;;;:::i;:::-;336:42:2;34372:143:88;;;;897:68123;;34372:143;2024:14:2;34372:143:88;;897:68123;;34372:143;;2024:14:2;897:68123:88;;2024:14:2;897:68123:88;;2024:14:2;897:68123:88;2024:14:2;;;;:::i;:::-;34372:143:88;897:68123;;;336:42:2;34372:143:88;;;;;;;;897:68123;2024:14:2;34521:73:88;2024:14:2;897:68123:88;2024:14:2;897:68123:88;;2024:14:2;;;897:68123:88;34543:14;;897:68123;;34521:73;;;;;;2024:14:2;34521:73:88;;897:68123;34521:73;;;:::i;34372:143::-;897:68123;;34372:143;;;:::i;:::-;897:68123;;;;34372:143;;;34030:20;2024:14:2;34030:20:88;;;;;;897:68123;;;34030:20;;;;;;:::i;:::-;;;;;33979;;;;;897:68123;;;33979:20;;;;;;:::i;:::-;;;;33928;;;;;;897:68123;;;33928:20;;;;;;:::i;:::-;;;;;33863:29;;;;;;897:68123;;;33863:29;;;;;;:::i;:::-;;;;;33645:20;2024:14:2;33645:20:88;;;;;;897:68123;;;33645:20;;;;;;:::i;:::-;;;;;33594;;;;;897:68123;;;33594:20;;;;;;:::i;:::-;;;;33543;;;;;;897:68123;;;33543:20;;;;;;:::i;:::-;;;;;33478:29;;;;;;897:68123;;;33478:29;;;;;;:::i;:::-;;;;;33239:20;2024:14:2;33239:20:88;;;;;;897:68123;;;33239:20;;;;;;:::i;:::-;;;;;33188;;;;;897:68123;;;33188:20;;;;;;:::i;:::-;;;;33137;;;;;;897:68123;;;33137:20;;;;;;:::i;:::-;;;;;33072:29;;;;;897:68123;;;33072:29;;;;;;:::i;:::-;;;;32828:79;;;;;;;897:68123;32828:79;897:68123;32828:79;;;;;;;:::i;:::-;;;;32705:85;;;;;;;897:68123;32705:85;897:68123;32705:85;;;;;;;:::i;:::-;;;;32574;;;;;;;897:68123;32574:85;897:68123;32574:85;;;;;;;:::i;:::-;;;;32251:29;;;;;897:68123;;;32251:29;;;;;;:::i;:::-;;;;4820:42:97;;;;;-1:-1:-1;;;4820:42:97;;;;;;:::i;:::-;;;;4690:25;897:68123:88;4690:25:97;;;;897:68123:88;4690:25:97;897:68123:88;4690:25:97;2024:14:2;897:68123:88;4690:25:97;897:68123:88;4690:25:97;;-1:-1:-1;;;4690:25:97;;;;;;:::i;:::-;;;;;;;;;;;;;4632:24;;;;;;-1:-1:-1;;;4632:24:97;;;;;;:::i;:::-;;;;;32121:26:88;;;;;897:68123;;;32121:26;;;;;;:::i;:::-;;;;32085:29;;;;;897:68123;;;32085:29;;;;;;:::i;:::-;;;;31909;;;;;897:68123;;;31909:29;;;;;;:::i;:::-;;;;31787:25;;;;897:68123;31787:25;897:68123;31787:25;;;;;;;:::i;:::-;;;;31737;;;;897:68123;31737:25;897:68123;31737:25;;;;;;;:::i;:::-;;;;31687;;;;897:68123;31687:25;897:68123;31687:25;;;;;;;:::i;:::-;;;;897:68123;;;;;;;;;;;;;;;;3501:18:9;897:68123:88;;;;;;;3501:18:9;897:68123:88;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;6307:13;897:68123;;;;6307:13;:::i;:::-;6383:3;6337:43;:13;;897:68123;6360:13;;897:68123;6337:43;;:::i;:::-;:49;336:42:2;6327:60:88;;;;897:68123;;6327:60;2024:14:2;6327:60:88;;897:68123;6327:60;;897:68123;;;6327:60;897:68123;6327:60;336:42:2;6327:60:88;;;;;;;;897:68123;;;;6551:3;6529:13;;897:68123;;6525:24;;;;;6574:16;;897:68123;6574:16;;:::i;:::-;;897:68123;;;;;;6574:38;;336:42:2;6564:49:88;;;;897:68123;;6564:49;2024:14:2;6564:49:88;;897:68123;6564:49;;897:68123;;;6564:49;897:68123;6564:49;336:42:2;6564:49:88;;;;;;;;6551:3;;897:68123;;6510:13;;6564:49;897:68123;;6564:49;;;:::i;:::-;897:68123;;;;6564:49;;;6525:24;;;;;;;897:68123;;6671:3;6649:13;;897:68123;;6645:24;;;;;6694:16;;897:68123;6694:16;;:::i;:::-;;897:68123;;;;;;6694:38;;336:42:2;6684:49:88;;;;897:68123;;6684:49;2024:14:2;6684:49:88;;897:68123;6684:49;;897:68123;;;6684:49;897:68123;6684:49;336:42:2;6684:49:88;;;;;;;;6671:3;;897:68123;;6630:13;;6684:49;897:68123;;6684:49;;;:::i;:::-;897:68123;;;;6684:49;;;6645:24;;;;;;;;6766:14;;;;:::i;:::-;897:68123;;;;6893:3;6871:13;;897:68123;;6867:24;;;;;6988:16;;897:68123;6988:16;;:::i;:::-;;897:68123;;;;6976:34;2024:14:2;6976:34:88;;897:68123;6976:34;;897:68123;;;6976:34;897:68123;6976:34;336:42:2;6976:34:88;;;;;;;897:68123;;6976:34;;;6893:3;7029:13;897:68123;;7029:16;:13;;;:16;:::i;:::-;;:23;897:68123;;;;;7017:36;2024:14:2;7017:36:88;;897:68123;7017:36;;2024:14:2;897:68123:88;;7017:36;897:68123;7017:36;336:42:2;7017:36:88;;;;;;;897:68123;6931:139;897:68123;2024:14:2;897:68123:88;;;;;;7017:36;;;897:68123;;;;;;2024:14:2;897:68123:88;;;6931:139;;;;;;2024:14:2;;;:::i;6931:139:88:-;6893:3;897:68123;6852:13;;;6976:34;;;;;897:68123;;;6976:34;;;;;;:::i;:::-;;;;6867:24;;;;;897:68123;;;;;;;7141:26;2024:14:2;7141:26:88;;897:68123;7141:26;;897:68123;;;7141:26;897:68123;7141:26;336:42:2;7141:26:88;;;;;;;897:68123;;7141:26;;;6847:242;897:68123;;;;;;;;7174:26;2024:14:2;7174:26:88;;897:68123;7174:26;;2024:14:2;897:68123:88;;7174:26;897:68123;7174:26;336:42:2;7174:26:88;;;;;;;2024:14:2;897:68123:88;;7109:92;897:68123;;;7174:26;;;897:68123;;;;;;2024:14:2;897:68123:88;;;7109:92;;;;;;2024:14:2;;;:::i;7109:92:88:-;897:68123;;;7211:238;7257:3;7235:13;;897:68123;;7231:24;;;;;7353:16;;897:68123;7353:16;;:::i;:::-;;897:68123;;;;7341:34;2024:14:2;7341:34:88;;897:68123;7341:34;;897:68123;;;7341:34;897:68123;7341:34;336:42:2;7341:34:88;;;;;;;897:68123;;7341:34;;;7257:3;7394:13;897:68123;;7394:16;:13;;;:16;:::i;:::-;;:23;897:68123;;;;7382:36;2024:14:2;7382:36:88;;897:68123;7382:36;;2024:14:2;897:68123:88;;7382:36;897:68123;7382:36;336:42:2;7382:36:88;;;;;;897:68123;;;;;7295:135;897:68123;;;7382:36;;;897:68123;;;;;;2024:14:2;897:68123:88;;;7295:135;;;;;;2024:14:2;;;:::i;7295:135:88:-;7257:3;897:68123;7216:13;;;7341:34;;;;;897:68123;;;7341:34;;;;;;:::i;:::-;;;;7231:24;;;7466:68;7231:24;;897:68123;;;;;;;;7466:68;;:::i;:::-;7628:14;7612:52;7628:14;;897:68123;7652:10;2024:14:2;897:68123:88;2024:14:2;897:68123:88;7612:52;;:::i;:::-;7726:89;897:68123;;;;7726:89;7798:16;;897:68123;;7726:89;;;;897:68123;7726:89;;;;897:68123;7726:89;;;:::i;:::-;;6931:139;7726:89;;;;;;:::i;:::-;897:68123;;7726:89;897:68123;7825:30;;897:68123;;7825:30;;;897:68123;7825:30;;:::i;:::-;336:42:2;7673:190:88;;;;;897:68123;;;7673:190;;;;;2024:14:2;7673:190:88;;897:68123;;7673:190;897:68123;7673:190;;;:::i;:::-;;897:68123;;;336:42:2;7673:190:88;;;;;;;;7211:238;897:68123;;;;;7927:89;7999:16;;897:68123;7927:89;897:68123;;7927:89;;;7726;897:68123;7927:89;;;897:68123;7927:89;;;:::i;:::-;336:42:2;7872:152:88;;;;;897:68123;;;7872:152;;;;2024:14:2;7872:152:88;;897:68123;;7872:152;897:68123;7872:152;;;:::i;:::-;;897:68123;;;336:42:2;7872:152:88;;;;;;;;7211:238;897:68123;;;;;;;;8084:26;2024:14:2;8084:26:88;;897:68123;8084:26;;897:68123;;;8084:26;897:68123;8084:26;336:42:2;8084:26:88;;;;;;;897:68123;;8084:26;;;7211:238;8137:16;;897:68123;;;8125:29;2024:14:2;8125:29:88;;897:68123;;8125:29;;2024:14:2;897:68123:88;;2024:14:2;897:68123:88;;2024:14:2;897:68123:88;2024:14:2;;;;:::i;:::-;8125:29:88;;336:42:2;8125:29:88;;;;;;;8371:73;897:68123;;;8184:75;897:68123;;;8125:29;;;7211:238;897:68123;;8067:88;897:68123;;;;;;2024:14:2;897:68123:88;;;8067:88;;;;;;2024:14:2;;;:::i;8067:88:88:-;897:68123;8234:14;;:24;2024:14:2;897:68123:88;8184:75;;;:::i;:::-;897:68123;7652:10;2024:14:2;897:68123:88;2024:14:2;897:68123:88;8393:14;;897:68123;;8371:73;;;;;;2024:14:2;8371:73:88;;897:68123;8371:73;;;:::i;:::-;;;;;;;;;;897:68123;;;;;;;;;;;;;;8371:73;;;7211:238;897:68123;;;8658:52;897:68123;;8514:38;897:68123;;8514:38;8658:52;897:68123;;;8451:37;8559:39;897:68123;;8604:31;897:68123;;;8451:37;;:::i;8371:73::-;;;;;;;;;;;;897:68123;8371:73;897:68123;8371:73;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;8125:29;8067:88;8125:29;;;;897:68123;8125:29;;897:68123;;;8125:29;;;;;;:::i;:::-;;;;;;8084:26;;;;;;897:68123;;;8084:26;;;;;;:::i;:::-;;;;;7872:152;897:68123;;7872:152;;;:::i;:::-;897:68123;;;;7872:152;;;7673:190;897:68123;;7673:190;;;:::i;:::-;897:68123;;;;7673:190;;;7141:26;;;;;;897:68123;;;7141:26;;;;;;:::i;:::-;;;;;6327:60;897:68123;;6327:60;;;:::i;:::-;897:68123;;;;6327:60;;;897:68123;;;;;;;;;;;;;;;;3794:16:9;897:68123:88;;;;;;;3794:16:9;897:68123:88;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;65711:1;897:68123;65681:14;;:20;;897:68123;65681:31;336:42:2;65671::88;;;;897:68123;;65671:42;2024:14:2;65671:42:88;;897:68123;65671:42;;897:68123;;;65671:42;;;336::2;65671::88;;;;;;;;897:68123;65739:14;;;;;:::i;:::-;897:68123;65801:19;;897:68123;;65783:38;897:68123;;;;65783:38;:::i;:::-;897:68123;;;65854:16;;;897:68123;294:80:98;897:68123:88;;294:80:98;:::i;:::-;897:68123:88;;65904:16;;;294:80:98;897:68123:88;;294:80:98;:::i;:::-;897:68123:88;;65962:18;;;897:68123;65956:50;897:68123;;;;65956:50;:::i;:::-;897:68123;;;;;;66041:67;66047:18;;;897:68123;;66067:22;897:68123;;;;66067:22;;:::i;66041:67::-;897:68123;;;;66150:70;66156:25;897:68123;66156:25;;897:68123;;;;;;66150:70;;:::i;:::-;897:68123;;66156:25;;897:68123;;;:::i;:::-;;;;;;66315:25;2024:14:2;66315:25:88;;897:68123;66315:25;;2024:14:2;897:68123:88;66315:25;65671:42;66315:25;336:42:2;66315:25:88;;;;;;897:68123;;;;66315:25;;;897:68123;;;;;;;;;;66365:25;2024:14:2;66365:25:88;;897:68123;66365:25;;2024:14:2;897:68123:88;66365:25;65671:42;66365:25;336:42:2;66365:25:88;;;;;;;897:68123;;66365:25;;;897:68123;66346:16;897:68123;;66346:16;;897:68123;;;;;;;;;;;;;;;;;;;;66570:29;2024:14:2;66570:29:88;;897:68123;66570:29;;897:68123;;;66570:29;65671:42;66570:29;336:42:2;66570:29:88;;;;;;;66416:197;897:68123;;;66570:29;;;897:68123;66542:64;897:68123;2024:14:2;897:68123:88;;66542:64;;2024:14:2;897:68123:88;66542:64;;2024:14:2;;897:68123:88;;2024:14:2;;897:68123:88;2024:14:2;;;;;;:::i;66416:197:88:-;66397:16;66643:48;897:68123;66397:16;;:216;;;;66643:48;:::i;:::-;66619:21;65904:16;66619:21;;897:68123;;;;;;;;;;;;;;;;;;66871:29;2024:14:2;66871:29:88;;897:68123;66871:29;;897:68123;;;66871:29;65671:42;66871:29;336:42:2;66871:29:88;;;;;;;66944:48;897:68123;66717:197;897:68123;;;66871:29;;;897:68123;66843:64;897:68123;2024:14:2;897:68123:88;;66843:64;;2024:14:2;897:68123:88;66843:64;;2024:14:2;;897:68123:88;;2024:14:2;;897:68123:88;2024:14:2;;;;;;:::i;66717:197:88:-;66698:16;65854;66698;;:216;66944:48;:::i;:::-;66920:21;65962:18;66920:21;;897:68123;;;67009:24;;;2024:14:2;;;;;67009:49:88;;336:42:2;66999:60:88;;;;897:68123;;66999:60;2024:14:2;66999:60:88;;897:68123;66999:60;;897:68123;;;66999:60;65671:42;66999:60;336:42:2;66999:60:88;;;;;;;;897:68123;2024:14:2;;;;;67075:49:88;;336:42:2;67065:60:88;;;;897:68123;;67065:60;2024:14:2;67065:60:88;;897:68123;67065:60;;897:68123;;;67065:60;65671:42;67065:60;336:42:2;67065:60:88;;;;;;;;897:68123;67132:20;67352:58;67132:20;;;;;897:68123;67132:20;;897:68123;2024:14:2;66047:18:88;67192:20;;:30;897:68123;304:1:98;897:68123:88;67252:20;;:30;2482:4:48;897:68123:88;67368:20;;897:68123;67398:10;2024:14:2;;;897:68123:88;67352:58;;:::i;:::-;897:68123;;67326:85;2024:14:2;67326:85:88;;897:68123;67326:85;;2024:14:2;65671:42:88;2024:14:2;;;65854:16:88;67326:85;;;336:42:2;67326:85:88;;;;;;897:68123;;;;;;;67326:85;;897:68123;67297:7;897:68123;67297:7;;;67306;67009:24;67306:7;;67315;;;;897:68123;;;;;;;;67508:16;897:68123;;;;;;;;67576:29;2024:14:2;67576:29:88;;897:68123;67576:29;;897:68123;;;67576:29;65671:42;67576:29;336:42:2;67576:29:88;;;;;;;897:68123;;67576:29;;;897:68123;2024:14:2;;897:68123:88;;;67637:20;2024:14:2;67637:20:88;;897:68123;67637:20;;2024:14:2;897:68123:88;;67637:20;65671:42;67637:20;336:42:2;67637:20:88;;;;;;;897:68123;;67637:20;;;897:68123;2024:14:2;;897:68123:88;;;67684:20;2024:14:2;67684:20:88;;897:68123;67684:20;;2024:14:2;897:68123:88;;67684:20;65671:42;67684:20;336:42:2;67684:20:88;;;;;;;897:68123;;67684:20;;;897:68123;;;;;;;;;67731:20;2024:14:2;67731:20:88;;897:68123;67731:20;;2024:14:2;897:68123:88;;67731:20;65671:42;67731:20;336:42:2;67731:20:88;;;;;;;304:1:98;67548:213:88;897:68123;;;67438:381;897:68123;;;67731:20;;;897:68123;2024:14:2;897:68123:88;;;;;;2024:14:2;897:68123:88;;;67548:213;;;;;;2024:14:2;;;:::i;67548:213:88:-;897:68123;67790:23;;;67438:381;;:::i;:::-;66047:18;67417;;:402;897:68123;67898:14;67882:52;67898:14;;897:68123;67398:10;2024:14:2;;;897:68123:88;67882:52;;:::i;:::-;897:68123;;67856:79;2024:14:2;67856:79:88;;897:68123;67856:79;;2024:14:2;65671:42:88;2024:14:2;;;65854:16:88;67856:79;67326:85;67856:79;336:42:2;67856:79:88;;;;;;;897:68123;;;;;;;;67856:79;;897:68123;67827:7;897:68123;67827:7;;;67836;;;;67845;;;;897:68123;;;;;;;;;65854:16;66698;;68038;897:68123;;;;;;68106:29;2024:14:2;68106:29:88;;897:68123;68106:29;;897:68123;;;68106:29;65671:42;68106:29;336:42:2;68106:29:88;;;;;;;897:68123;;68106:29;;;897:68123;2024:14:2;;897:68123:88;;;68167:20;2024:14:2;68167:20:88;;897:68123;68167:20;;2024:14:2;897:68123:88;;68167:20;65671:42;68167:20;336:42:2;68167:20:88;;;;;;;897:68123;;68167:20;;;897:68123;2024:14:2;;897:68123:88;;;68214:20;2024:14:2;68214:20:88;;897:68123;68214:20;;2024:14:2;897:68123:88;;68214:20;65671:42;68214:20;336:42:2;68214:20:88;;;;;;;897:68123;;68214:20;;;897:68123;;;;;;;;;68261:20;2024:14:2;68261:20:88;;897:68123;68261:20;;2024:14:2;897:68123:88;;68261:20;65671:42;68261:20;336:42:2;68261:20:88;;;;;;;897:68123;;304:1:98;68078:213:88;897:68123;;;67968:401;897:68123;;;68261:20;;;897:68123;2024:14:2;897:68123:88;;;;;;2024:14:2;897:68123:88;;;68078:213;;;;;;2024:14:2;;;:::i;68078:213:88:-;897:68123;68308:14;;:24;2024:14:2;897:68123:88;67790:23;897:68123;67790:23;;68340;67968:401;;:::i;:::-;67941:24;897:68123;67941:24;;:428;;;2024:14:2;68376:13:88;;;;;;;897:68123;;;66156:25;;897:68123;;;68432:13;;:24;897:68123;;;;;68531:58;68554:34;897:68123;68531:58;;;897:68123;68531:58;;;65671:42;68531:58;;:::i;:::-;68602:13;;897:68123;;;2024:14:2;;897:68123:88;68591:25;;;2024:14:2;;;;;;;;;;;;68591:25:88;897:68123;2024:14:2;;;68591:25:88;2024:14:2;68591:25:88;336:42:2;68491:131:88;;;;;897:68123;;;68491:131;;;;;2024:14:2;68491:131:88;;897:68123;;68491:131;897:68123;68491:131;;;:::i;:::-;;897:68123;;;336:42:2;68491:131:88;;;;;;;;897:68123;68657:14;68856:70;68657:14;68763:21;68787:46;68856:70;68657:14;;;:::i;:::-;68693:24;;68677:40;;;:::i;:::-;;;;;:::i;:::-;;66047:18;67417;;68739;68723:34;;;:::i;68787:46::-;68763:21;;:70;;;68912:13;897:68123;;68856:70;;;68879:31;897:68123;68856:70;;;65671:42;68856:70;;2024:14:2;;;;;;;;;;;;;;;;;;;68491:131:88;897:68123;;68491:131;;;:::i;:::-;897:68123;;;;68491:131;;;68214:20;897:68123;68214:20;;;;;;897:68123;;;68214:20;;;;;;:::i;:::-;;;;;68167;;;;;;897:68123;;;68167:20;;;;;;:::i;:::-;;;;;68106:29;;;;;;897:68123;;;68106:29;;;;;;:::i;:::-;;;;;67856:79;;;;;;;;65854:16;67856:79;65854:16;67856:79;;;;;;;:::i;:::-;;;;;;;67684:20;897:68123;67684:20;;;;;;897:68123;;;67684:20;;;;;;:::i;:::-;;;;;67637;;;;;;897:68123;;;67637:20;;;;;;:::i;:::-;;;;;67576:29;;;;;;897:68123;;;67576:29;;;;;;:::i;:::-;;;;;67326:85;;;;;;;;65854:16;67326:85;65854:16;67326:85;;;;;;;:::i;:::-;;;;;;;;;67065:60;897:68123;;67065:60;;;:::i;:::-;897:68123;;;;67065:60;;;66999;897:68123;;66999:60;;;:::i;:::-;897:68123;;;;66999:60;;;66871:29;;;;;;897:68123;;;66871:29;;;;;;:::i;:::-;;;;;66570;;;;;;897:68123;;;66570:29;;;;;;:::i;:::-;;;;;66365:25;;;;;897:68123;66365:25;897:68123;66365:25;;;;;;;:::i;:::-;;;;;66315;;;;897:68123;66315:25;897:68123;66315:25;;;;;;;:::i;:::-;;;;65671:42;897:68123;;65671:42;;;:::i;:::-;897:68123;;;;65671:42;;;897:68123;;;;;;;;;;;;3948:19:9;897:68123:88;2482:4:48;;;:::i;:::-;897:68123:88;;;;;;;:::i;:::-;2482:4:48;;;897:68123:88;;;;;3948:19:9;897:68123:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;2482:4:48;897:68123:88;2482:4:48;:::i;:::-;897:68123:88;;;;;;;:::i;:::-;2482:4:48;;;897:68123:88;;;-1:-1:-1;;;897:68123:88;;-1:-1:-1;;897:68123:88;-1:-1:-1;;;897:68123:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;52989:1;897:68123;52959:14;;:20;;897:68123;52959:31;336:42:2;52949::88;;;;897:68123;;52949:42;2024:14:2;52949:42:88;;897:68123;52949:42;;897:68123;;;52949:42;897:68123;52949:42;336::2;52949::88;;;;;;;;897:68123;53017:14;;;;;:::i;:::-;897:68123;53061:38;897:68123;;;;;;53061:38;:::i;:::-;897:68123;;;;;294:80:98;897:68123:88;;;;294:80:98;:::i;:::-;897:68123:88;;;;294:80:98;897:68123:88;;;;294:80:98;:::i;:::-;897:68123:88;;;;;53319:67;897:68123;53234:50;897:68123;;;;;;53234:50;:::i;:::-;897:68123;;;;;;;53345:22;897:68123;;;;;;53345:22;;:::i;53319:67::-;897:68123;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;897:68123:88;;-1:-1:-1;897:68123:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;53470:25;2024:14:2;53470:25:88;;897:68123;53470:25;;2024:14:2;897:68123:88;53470:25;897:68123;53470:25;336:42:2;53470:25:88;;;;;;897:68123;;;;53470:25;;;897:68123;;;;;;;;;;;53520:25;2024:14:2;53520:25:88;;897:68123;53520:25;;2024:14:2;897:68123:88;53520:25;897:68123;53520:25;336:42:2;53520:25:88;;;;;;897:68123;;;;53520:25;;;897:68123;;;;;;;;;;;;;;;;;;;;;;;;;;53725:29;2024:14:2;53725:29:88;;897:68123;53725:29;;897:68123;;;53725:29;897:68123;53725:29;336:42:2;53725:29:88;;;;;;;53798:48;897:68123;53571:197;897:68123;;;53725:29;;;897:68123;53697:64;897:68123;2024:14:2;897:68123:88;;53697:64;;2024:14:2;897:68123:88;53697:64;;2024:14:2;;897:68123:88;;2024:14:2;;897:68123:88;2024:14:2;;;;;;:::i;53571:197:88:-;897:68123;;;;53552:216;53798:48;:::i;:::-;897:68123;;;;;;;;;;;;;;;;;;;;;;;;;54026:29;2024:14:2;54026:29:88;;897:68123;54026:29;;897:68123;;;54026:29;897:68123;54026:29;336:42:2;54026:29:88;;;;;;;54099:48;897:68123;53872:197;897:68123;;;54026:29;;;897:68123;53998:64;897:68123;2024:14:2;897:68123:88;;53998:64;;2024:14:2;897:68123:88;53998:64;;2024:14:2;;897:68123:88;;2024:14:2;;897:68123:88;2024:14:2;;;;;;:::i;53872:197:88:-;897:68123;;;;53853:216;54099:48;:::i;:::-;897:68123;;;;;;;;54154:20;897:68123;;;;2024:14:2;897:68123:88;;;;54214:20;:30;897:68123;;;;;;54274:20;:30;2482:4:48;897:68123:88;;;;54374:58;897:68123;;;54390:20;897:68123;54420:10;2024:14:2;;;897:68123:88;54374:58;;:::i;:::-;897:68123;;54348:85;2024:14:2;54348:85:88;;897:68123;54348:85;;2024:14:2;897:68123:88;2024:14:2;;;897:68123:88;54348:85;897:68123;54348:85;336:42:2;54348:85:88;;;;;;897:68123;;;;;;;;;;54348:85;;897:68123;;;;;;;;;;;;;;;;;;54530:16;897:68123;;;;;;;54598:29;2024:14:2;54598:29:88;;897:68123;54598:29;;897:68123;;;54598:29;897:68123;54598:29;336:42:2;54598:29:88;;;;;;;897:68123;;54598:29;;;897:68123;;;;;2024:14:2;897:68123:88;;54659:20;2024:14:2;54659:20:88;;897:68123;54659:20;;2024:14:2;897:68123:88;;54659:20;897:68123;54659:20;336:42:2;54659:20:88;;;;;;;897:68123;;54659:20;;;897:68123;;;;;2024:14:2;897:68123:88;;;54706:20;2024:14:2;54706:20:88;;897:68123;54706:20;;2024:14:2;897:68123:88;;54706:20;897:68123;54706:20;336:42:2;54706:20:88;;;;;;;897:68123;;54706:20;;;897:68123;;;;;;;;;;;54753:20;2024:14:2;54753:20:88;;897:68123;54753:20;;2024:14:2;897:68123:88;;54753:20;897:68123;54753:20;336:42:2;54753:20:88;;;;;;;897:68123;54570:213;897:68123;;;54460:381;897:68123;;;54753:20;;;897:68123;2024:14:2;897:68123:88;;;;;;2024:14:2;897:68123:88;;;54570:213;;;;;;2024:14:2;;;:::i;54570:213:88:-;897:68123;;;54812:23;54460:381;;:::i;:::-;897:68123;;;54439:402;897:68123;;;;54904:52;54920:14;;897:68123;54420:10;2024:14:2;;;897:68123:88;54904:52;;:::i;:::-;897:68123;;54878:79;2024:14:2;54878:79:88;;897:68123;54878:79;;2024:14:2;897:68123:88;2024:14:2;;;897:68123:88;54878:79;897:68123;54878:79;336:42:2;54878:79:88;;;;;;897:68123;;;;;;;;;;54878:79;;897:68123;;;;;;;;;;;;;;;;;;55060:16;897:68123;;;;;;;;;55128:29;2024:14:2;55128:29:88;;897:68123;55128:29;;897:68123;;;55128:29;897:68123;55128:29;336:42:2;55128:29:88;;;;;;;897:68123;;55128:29;;;897:68123;;;;;2024:14:2;897:68123:88;;55189:20;2024:14:2;55189:20:88;;897:68123;55189:20;;2024:14:2;897:68123:88;;55189:20;897:68123;55189:20;336:42:2;55189:20:88;;;;;;;897:68123;;55189:20;;;897:68123;;;;;2024:14:2;897:68123:88;;;55236:20;2024:14:2;55236:20:88;;897:68123;55236:20;;2024:14:2;897:68123:88;;55236:20;897:68123;55236:20;336:42:2;55236:20:88;;;;;;;897:68123;;55236:20;;;897:68123;;;;;;;;;;;55283:20;2024:14:2;55283:20:88;;897:68123;55283:20;;2024:14:2;897:68123:88;;55283:20;897:68123;55283:20;336:42:2;55283:20:88;;;;;;;897:68123;55100:213;897:68123;;;54990:401;897:68123;;;55283:20;;;897:68123;2024:14:2;897:68123:88;;;;;;2024:14:2;897:68123:88;;;55100:213;;;;;;2024:14:2;;;:::i;55100:213:88:-;897:68123;55330:14;;:24;2024:14:2;897:68123:88;;;;;55362:23;54990:401;;:::i;:::-;897:68123;;;54963:428;897:68123;;;2024:14:2;897:68123:88;;;55398:13;897:68123;;;;;;;;;;;55451:13;:24;897:68123;;;;;;;;;55543:58;55566:34;897:68123;55543:58;;;897:68123;55543:58;;;897:68123;55543:58;;:::i;:::-;897:68123;;;55614:13;897:68123;;;2024:14:2;;897:68123:88;55603:25;;;2024:14:2;;;;;;;;;;;;55603:25:88;897:68123;2024:14:2;;;55603:25:88;2024:14:2;55603:25:88;336:42:2;55503:131:88;;;;;897:68123;;;55503:131;;;;;2024:14:2;55503:131:88;;897:68123;;55503:131;897:68123;55503:131;;;:::i;:::-;;897:68123;;;336:42:2;55503:131:88;;;;;;;;897:68123;55669:14;55951:79;55669:14;55799:46;55669:14;;:::i;:::-;897:68123;;;55705:24;55689:40;;;:::i;:::-;;;;;:::i;:::-;;897:68123;;;55751:18;55735:34;;;:::i;55799:46::-;897:68123;;;;55775:70;897:68123;;54420:10;2024:14:2;;;897:68123:88;55973:14;;;897:68123;;55951:79;;;;;2024:14:2;55951:79:88;;897:68123;55951:79;;;:::i;:::-;;;;;;;;;;;897:68123;;56200:52;;897:68123;;;;;;;;;;55951:79;;897:68123;56200:52;56036:22;;;56109:21;56036:22;56064:19;56137:40;56036:22;;;;897:68123;56036:22;;:::i;56109:21::-;897:68123;;;;;;56137:40;;:::i;55951:79::-;;;;;56200:52;55951:79;;56137:40;55951:79;;56109:21;56036:22;897:68123;55951:79;56064:19;55951:79;897:68123;55951:79;897:68123;55951:79;;;;;;;:::i;:::-;;;-1:-1:-1;55951:79:88;;-1:-1:-1;55951:79:88;;-1:-1:-1;55951:79:88;;;-1:-1:-1;55951:79:88;-1:-1:-1;55951:79:88;;-1:-1:-1;55951:79:88;;55503:131;897:68123;;55503:131;;;:::i;:::-;897:68123;;;;55503:131;;;55236:20;;;;;;897:68123;;;55236:20;;;;;;:::i;:::-;;;;;55189;;;;;897:68123;;;55189:20;;;;;;:::i;:::-;;;;55128:29;;;;;;897:68123;;;55128:29;;;;;;:::i;:::-;;;;;54878:79;;;;;;;897:68123;54878:79;897:68123;54878:79;;;;;;;:::i;:::-;;;;54706:20;;;;;;897:68123;;;54706:20;;;;;;:::i;:::-;;;;;54659;;;;;897:68123;;;54659:20;;;;;;:::i;:::-;;;;54598:29;;;;;;897:68123;;;54598:29;;;;;;:::i;:::-;;;;;54348:85;;;;;;;897:68123;54348:85;897:68123;54348:85;;;;;;;:::i;:::-;;;;54026:29;;;;;;897:68123;;;54026:29;;;;;;:::i;:::-;;;;;53725;;;;;;897:68123;;;53725:29;;;;;;:::i;:::-;;;;;53520:25;;;;897:68123;53520:25;897:68123;53520:25;;;;;;;:::i;:::-;;;;53470;;;;897:68123;53470:25;897:68123;53470:25;;;;;;;:::i;:::-;;;;52949:42;897:68123;;52949:42;;;:::i;:::-;897:68123;;;;52949:42;;;897:68123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;14171:13;897:68123;;;;;;14171:13;:::i;:::-;14247:3;14201:43;:13;;897:68123;;;;14224:13;897:68123;14201:43;;:::i;:::-;:49;336:42:2;14191:60:88;;;;897:68123;;14191:60;2024:14:2;14191:60:88;;897:68123;14191:60;;897:68123;;;14191:60;897:68123;14191:60;336:42:2;14191:60:88;;;;;;;;897:68123;;;;14415:3;14393:13;;897:68123;;14389:24;;;;;14438:16;;897:68123;14438:16;;:::i;:::-;;897:68123;;;;;;;;14438:38;;336:42:2;14428:49:88;;;;897:68123;;14428:49;2024:14:2;14428:49:88;;897:68123;14428:49;;897:68123;;;14428:49;897:68123;14428:49;336:42:2;14428:49:88;;;;;;;;14415:3;;897:68123;;14374:13;;14428:49;897:68123;;14428:49;;;:::i;:::-;897:68123;;;;14428:49;;;14389:24;;;897:68123;;14535:3;897:68123;;;14513:13;897:68123;;14509:24;;;;;14558:16;;897:68123;14558:16;;:::i;:::-;;897:68123;;;;;;;;14558:38;;336:42:2;14548:49:88;;;;897:68123;;14548:49;2024:14:2;14548:49:88;;897:68123;14548:49;;897:68123;;;14548:49;897:68123;14548:49;336:42:2;14548:49:88;;;;;;;;14535:3;;897:68123;;14494:13;;14548:49;897:68123;;14548:49;;;:::i;:::-;897:68123;;;;14548:49;;;14509:24;;;;14630:14;897:68123;;;14630:14;;:::i;:::-;897:68123;;;;14757:3;14735:13;;897:68123;;14731:24;;;;;14852:16;;897:68123;14852:16;;:::i;:::-;;897:68123;;;;14840:34;2024:14:2;14840:34:88;;897:68123;14840:34;;897:68123;;;14840:34;897:68123;14840:34;336:42:2;14840:34:88;;;;;;;897:68123;;14840:34;;;14757:3;14893:13;897:68123;;14893:16;:13;;;:16;:::i;:::-;;:23;897:68123;;;;;14881:36;2024:14:2;14881:36:88;;897:68123;14881:36;;2024:14:2;897:68123:88;;14881:36;897:68123;14881:36;336:42:2;14881:36:88;;;;;;;897:68123;14795:139;897:68123;2024:14:2;897:68123:88;;;;;;14881:36;;;897:68123;;;;;;2024:14:2;897:68123:88;;;14795:139;;;;;;2024:14:2;;;:::i;14795:139:88:-;14757:3;897:68123;14716:13;;;14881:36;;;;;897:68123;;;14881:36;;;;;;:::i;:::-;;;;14840:34;;;;;897:68123;;;14840:34;;;;;;:::i;:::-;;;;14731:24;;;;;897:68123;;;2024:14:2;897:68123:88;;;15046:36;2024:14:2;15046:36:88;;897:68123;15046:36;;2024:14:2;897:68123:88;;15046:36;897:68123;15046:36;336:42:2;15046:36:88;;;;;;;897:68123;;15046:36;;;14711:242;897:68123;;;;;;;;;15109:26;2024:14:2;15109:26:88;;897:68123;15109:26;;897:68123;;;15109:26;897:68123;15109:26;336:42:2;15109:26:88;;;;;;;897:68123;;15109:26;;;14711:242;897:68123;;;;;;;;15162:26;2024:14:2;15162:26:88;;897:68123;15162:26;;2024:14:2;897:68123:88;;15162:26;897:68123;15162:26;336:42:2;15162:26:88;;;;;;;14982:216;897:68123;;;;;;;15162:26;;;14711:242;897:68123;;;;;;;;2024:14:2;897:68123:88;;;14982:216;;;;;;2024:14:2;;;:::i;:::-;;;897:68123:88;2024:14:2;;;897:68123:88;2024:14:2;897:68123:88;;;;;;;;2024:14:2;;;:::i;:::-;;;;;;;;;897:68123:88;;2024:14:2;;897:68123:88;2024:14:2;;;;;;:::i;14982:216:88:-;897:68123;;;15215:238;15261:3;897:68123;;;15239:13;897:68123;;15235:24;;;;;15357:16;;897:68123;15357:16;;:::i;:::-;;897:68123;;;;15345:34;2024:14:2;15345:34:88;;897:68123;15345:34;;897:68123;;;15345:34;897:68123;15345:34;336:42:2;15345:34:88;;;;;;;897:68123;;15345:34;;;15261:3;897:68123;;;15398:16;897:68123;;;;15398:13;:16;:::i;:::-;;:23;897:68123;;;;15386:36;2024:14:2;15386:36:88;;897:68123;15386:36;;2024:14:2;897:68123:88;;15386:36;897:68123;15386:36;336:42:2;15386:36:88;;;;;;897:68123;;;;;15299:135;897:68123;;;15386:36;;;897:68123;;;;;;2024:14:2;897:68123:88;;;15299:135;;;;;;2024:14:2;;;:::i;15299:135:88:-;15261:3;897:68123;15220:13;;;15386:36;;;;;897:68123;;;15386:36;;;;;;:::i;:::-;;;;15345:34;;;;;897:68123;;;15345:34;;;;;;:::i;:::-;;;;15235:24;;;15470:68;15235:24;;897:68123;;;;;;;;;;15470:68;;:::i;:::-;897:68123;;;2024:14:2;897:68123:88;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;15707:52;897:68123;;;15723:14;897:68123;;2024:14:2;897:68123:88;2024:14:2;897:68123:88;15707:52;;:::i;:::-;897:68123;15827:110;897:68123;;;;;;15827:110;897:68123;;;15920:16;897:68123;;15827:110;;;15850:55;897:68123;15827:110;;;;897:68123;15827:110;;;:::i;:::-;897:68123;;;2024:14:2;897:68123:88;;15949:35;897:68123;15949:35;;2024:14:2;897:68123:88;15949:35;;;;;;:::i;:::-;336:42:2;15770:224:88;;;;;897:68123;;;15770:224;;;;;2024:14:2;15770:224:88;;897:68123;;15770:224;897:68123;15770:224;;;:::i;:::-;;897:68123;;;336:42:2;15770:224:88;;;;;;;;15619:1017;897:68123;;;;;;;16064:110;897:68123;;;16157:16;897:68123;16064:110;897:68123;;16064:110;;;15850:55;897:68123;16064:110;;;897:68123;16064:110;;;:::i;:::-;;14795:139;16064:110;;;;;;:::i;:::-;336:42:2;16005:179:88;;;;;897:68123;;;16005:179;;;;2024:14:2;16005:179:88;;897:68123;;16005:179;897:68123;16005:179;;;:::i;:::-;;897:68123;;;336:42:2;16005:179:88;;;;;;;;;;15619:1017;;;897:68123;;;;;;;;16687:26;2024:14:2;16687:26:88;;897:68123;16687:26;;897:68123;;;16687:26;897:68123;16687:26;336:42:2;16687:26:88;;;;;;;897:68123;;16687:26;;;15619:1017;897:68123;;;;16731:16;897:68123;;16719:29;2024:14:2;16719:29:88;;897:68123;;16719:29;;2024:14:2;897:68123:88;;2024:14:2;897:68123:88;;2024:14:2;897:68123:88;2024:14:2;;;;:::i;:::-;16719:29:88;;336:42:2;16719:29:88;;;;;;;16670:79;897:68123;;;16965:73;897:68123;16778:75;897:68123;;;16719:29;;;15619:1017;897:68123;2024:14:2;897:68123:88;;;;;2024:14:2;897:68123:88;;;16670:79;;;;;;2024:14:2;;;:::i;:::-;;;;897:68123:88;;2024:14:2;;;;;;;;;:::i;:::-;;16670:79:88;14795:139;16670:79;;;;;;:::i;:::-;897:68123;;;;16828:14;:24;2024:14:2;897:68123:88;16778:75;;;:::i;:::-;897:68123;16965:10;2024:14:2;897:68123:88;2024:14:2;897:68123:88;;;;16987:14;897:68123;;16965:73;;;;;;2024:14:2;16965:73:88;;897:68123;16965:73;;;:::i;:::-;;;;;;;;;;897:68123;;;;;;;;;;;;;;16965:73;;;15619:1017;897:68123;;17153:39;17252:52;897:68123;;17108:38;17198:31;897:68123;17108:38;17252:52;897:68123;;17045:37;897:68123;;;;;;;17045:37;;:::i;17108:38::-;897:68123;;;;;;17153:39;;:::i;17198:31::-;897:68123;17268:14;897:68123;16965:10;2024:14:2;897:68123:88;2024:14:2;897:68123:88;17252:52;;:::i;16965:73::-;;;;;;;;;;897:68123;16965:73;897:68123;16965:73;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16719:29;;;;;897:68123;;;16719:29;;;;;;:::i;:::-;;;;16687:26;;;;;897:68123;;;16687:26;;;;;;:::i;:::-;;;;16005:179;897:68123;;16005:179;;;:::i;:::-;897:68123;;;;16005:179;;;15770:224;897:68123;;15770:224;;;:::i;:::-;897:68123;;;;15770:224;;;15619:1017;897:68123;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16358:14;897:68123;16292:99;897:68123;;;16374:16;897:68123;16292:99;897:68123;;16292:99;;;16315:41;897:68123;16292:99;;;897:68123;16292:99;;;:::i;:::-;897:68123;;;2024:14:2;897:68123:88;;16403:35;897:68123;16403:35;;2024:14:2;897:68123:88;16403:35;;;;;;:::i;:::-;336:42:2;16235:213:88;;;;;897:68123;;;16235:213;;;;;2024:14:2;16235:213:88;;897:68123;;16235:213;897:68123;16235:213;;;:::i;:::-;;897:68123;;;336:42:2;16235:213:88;;;;;;;;15619:1017;897:68123;;;;;;;;;;;16584:14;897:68123;16518:99;897:68123;;;16600:16;897:68123;16518:99;897:68123;;16518:99;;;16315:41;897:68123;16518:99;;;897:68123;16518:99;;;:::i;:::-;336:42:2;16459:168:88;;;;;897:68123;;;16459:168;;;;2024:14:2;16459:168:88;;897:68123;;16459:168;897:68123;16459:168;;;:::i;:::-;;897:68123;;;336:42:2;16459:168:88;;;;;;;;;;15619:1017;;;;16459:168;897:68123;;16459:168;;;:::i;:::-;897:68123;;;;16459:168;;;16235:213;897:68123;;16235:213;;;:::i;:::-;897:68123;;;;16235:213;;;15162:26;897:68123;15162:26;;;;;;897:68123;;;15162:26;;;;;;:::i;:::-;;;;;15109;;;;;897:68123;;;15109:26;;;;;;:::i;:::-;;;;15046:36;;;;;;897:68123;;;15046:36;;;;;;:::i;:::-;;;;;14191:60;897:68123;;14191:60;;;:::i;:::-;897:68123;;;;14191:60;;;897:68123;;;;;;;;;;;;;;;;3018:16:9;897:68123:88;;;;;;;3018:16:9;897:68123:88;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;40098:1;897:68123;40068:14;;:20;;897:68123;40068:31;336:42:2;40058::88;;;;897:68123;;40058:42;2024:14:2;40058:42:88;;897:68123;40058:42;;897:68123;;;40058:42;897:68123;40058:42;336::2;40058::88;;;;;;;;897:68123;;;;:::i;:::-;40183:14;;;;;:::i;:::-;897:68123;40227:38;897:68123;;;;40227:38;:::i;:::-;897:68123;;;294:80:98;897:68123:88;;294:80:98;:::i;:::-;897:68123:88;;;;;40340:25;2024:14:2;40340:25:88;;897:68123;40340:25;;2024:14:2;897:68123:88;40340:25;897:68123;40340:25;336:42:2;40340:25:88;;;;;;897:68123;;;;40340:25;;;897:68123;;;;;;40394:55;897:68123;;;;;;;;40394:55;;:::i;:::-;897:68123;;;;;;;;;;;;;;;;;;;;;;;;40643:29;2024:14:2;40643:29:88;;897:68123;40643:29;;897:68123;;;40643:29;897:68123;40643:29;336:42:2;40643:29:88;;;;;;;897:68123;;40643:29;;;897:68123;;;;;;;;;40679:26;2024:14:2;40679:26:88;;897:68123;40679:26;;2024:14:2;897:68123:88;;40679:26;897:68123;40679:26;336:42:2;40679:26:88;;;;;;;40475:238;897:68123;;;40679:26;;;897:68123;;40615:91;897:68123;2024:14:2;897:68123:88;;40615:91;;;2024:14:2;897:68123:88;40615:91;;2024:14:2;;897:68123:88;;2024:14:2;;897:68123:88;2024:14:2;;;;;;:::i;40475:238:88:-;40457:15;40744:47;897:68123;40457:15;;:256;;;;40744:47;:::i;:::-;40719:22;897:68123;40719:22;;897:68123;;;;40858:52;40874:14;;897:68123;40898:10;2024:14:2;;;897:68123:88;40858:52;;:::i;:::-;897:68123;;40832:79;2024:14:2;40832:79:88;;897:68123;40832:79;;2024:14:2;897:68123:88;2024:14:2;;;897:68123:88;40832:79;897:68123;40832:79;336:42:2;40832:79:88;;;;;;;897:68123;;;;;;;;40832:79;;897:68123;41005:15;;897:68123;;;;;;;41072:29;2024:14:2;41072:29:88;;897:68123;41072:29;;897:68123;;;41072:29;897:68123;41072:29;336:42:2;41072:29:88;;;;;;;897:68123;;41072:29;;;897:68123;;;;41113:14;2024::2;41113::88;;897:68123;41113:14;;2024::2;897:68123:88;;41113:14;897:68123;41113:14;336:42:2;41113:14:88;;;;;;;897:68123;;41113:14;;;897:68123;;;;41134:14;2024::2;41134::88;;897:68123;41134:14;;2024::2;897:68123:88;;41134:14;897:68123;41134:14;336:42:2;41134:14:88;;;;;;;897:68123;;41134:14;;;897:68123;;;;;41155:14;2024::2;41155::88;;897:68123;;41155:14;;2024::2;897:68123:88;;41155:14;897:68123;41155:14;336:42:2;41155:14:88;;;;;;897:68123;;;;41044:135;897:68123;;;40935:322;897:68123;;;41155:14;;;897:68123;2024:14:2;897:68123:88;;;;;;2024:14:2;897:68123:88;;;41044:135;;;;;;2024:14:2;;;:::i;41044:135:88:-;897:68123;41196:14;;:24;2024:14:2;897:68123:88;;;;;41228:23;40935:322;;:::i;:::-;40918:14;897:68123;40918:14;;:339;;;2024:14:2;41264:13:88;;;;;897:68123;;;;;;;;41318:13;;:24;897:68123;;;;;41409:58;41432:34;897:68123;41409:58;;;897:68123;41409:58;;;897:68123;41409:58;;:::i;:::-;41480:13;;897:68123;;;2024:14:2;;897:68123:88;41469:25;;;2024:14:2;;;;;;;;;;;;41469:25:88;897:68123;2024:14:2;;;41469:25:88;2024:14:2;41469:25:88;336:42:2;41369:131:88;;;;;897:68123;;;41369:131;;;;;2024:14:2;41369:131:88;;897:68123;;41369:131;897:68123;41369:131;;;:::i;:::-;;897:68123;;;336:42:2;41369:131:88;;;;;;;;897:68123;2024:14:2;41606:72:88;2024:14:2;897:68123:88;;40898:10;2024:14:2;;;897:68123:88;41628:14;;;41644;;897:68123;;;41606:72;;;;;2024:14:2;41606:72:88;;897:68123;41606:72;;;:::i;:::-;;;;;;;;;;;897:68123;;;;;;;;;;;;;41606:72;;897:68123;;41835:24;897:68123;41727:31;41883:52;897:68123;;;;;;;41684:37;41883:52;897:68123;;;41784:23;897:68123;;;41684:37;;:::i;41727:31::-;41784:13;;897:68123;41784:23;;:::i;:::-;41835:13;:24;897:68123;41835:24;;:::i;41606:72::-;;;;;;;;;;;897:68123;41606:72;897:68123;41606:72;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41369:131;897:68123;;41369:131;;;:::i;:::-;897:68123;;;;41369:131;;;41134:14;;;;;;897:68123;;;41134:14;;;;;;:::i;:::-;;;;;41113;;;;;897:68123;;;41113:14;;;;;;:::i;:::-;;;;41072:29;;;;;;897:68123;;;41072:29;;;;;;:::i;:::-;;;;;40832:79;;;;;;;;897:68123;40832:79;897:68123;40832:79;;;;;;;:::i;:::-;;;;;;;;40643:29;;;;;;897:68123;;;40643:29;;;;;;:::i;:::-;;;;;40340:25;;;;897:68123;40340:25;897:68123;40340:25;;;;;;;:::i;:::-;;;;40058:42;897:68123;;40058:42;;;:::i;:::-;897:68123;;;;40058:42;;;897:68123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;17918:3;17814:101;:72;:43;:13;;897:68123;;;;17837:13;897:68123;17814:43;;:::i;:::-;897:68123;;;17860:19;897:68123;17814:72;;:::i;:::-;897:68123;;;17889:19;897:68123;17814:101;;:::i;:::-;:107;336:42:2;17797:130:88;;;;897:68123;;17797:130;2024:14:2;17797:130:88;;897:68123;17797:130;;897:68123;;;17797:130;897:68123;17797:130;336:42:2;17797:130:88;;;;;;;;897:68123;;17954:14;897:68123;;;17954:14;;:::i;:::-;294:80:98;897:68123:88;;;;294:80:98;:::i;:::-;897:68123:88;;;;;;;18029:18;2024:14:2;18029:18:88;;897:68123;18029:18;;2024:14:2;897:68123:88;18029:18;897:68123;18029:18;336:42:2;18029:18:88;;;;;;;897:68123;;18029:18;;;897:68123;;;;18211:3;18189:13;;897:68123;;18185:24;;;;;18234:16;;897:68123;18234:16;;:::i;:::-;;897:68123;;336:42:2;18224::88;;;;897:68123;;18224:42;2024:14:2;18224:42:88;;897:68123;;;18234:31;;897:68123;18224:42;;897:68123;;;18224:42;897:68123;18224:42;336::2;18224::88;;;;;;;;18211:3;;897:68123;;18170:13;;18224:42;897:68123;;18224:42;;;:::i;:::-;897:68123;;;;18224:42;;;18185:24;;;897:68123;;18324:3;897:68123;;;18302:13;897:68123;;18298:24;;;;;18347:16;;897:68123;18347:16;;:::i;:::-;;897:68123;;336:42:2;18337::88;;;;897:68123;;18337:42;2024:14:2;18337:42:88;;897:68123;;;18347:31;;897:68123;18337:42;;897:68123;;;18337:42;897:68123;18337:42;336::2;18337::88;;;;;;;;18324:3;;897:68123;;18283:13;;18337:42;897:68123;;18337:42;;;:::i;:::-;897:68123;;;;18337:42;;;18298:24;;;897:68123;;18444:3;897:68123;;;18416:19;897:68123;;18412:30;;;;;18467:22;;897:68123;18467:22;;:::i;:::-;;897:68123;;336:42:2;18457:48:88;;;;897:68123;;18457:48;2024:14:2;18457:48:88;;897:68123;;;18467:37;;897:68123;18457:48;;897:68123;;;18457:48;897:68123;18457:48;336:42:2;18457:48:88;;;;;;;;18444:3;;897:68123;;18397:13;;18457:48;897:68123;;18457:48;;;:::i;:::-;897:68123;;;;18457:48;;;18412:30;;;897:68123;;18569:3;897:68123;;;18541:19;897:68123;;18537:30;;;;;18592:22;;897:68123;18592:22;;:::i;:::-;;897:68123;;336:42:2;18582:48:88;;;;897:68123;;18582:48;2024:14:2;18582:48:88;;897:68123;;;18592:37;;897:68123;18582:48;;897:68123;;;18582:48;897:68123;18582:48;336:42:2;18582:48:88;;;;;;;;18569:3;;897:68123;;18522:13;;18582:48;897:68123;;18582:48;;;:::i;:::-;897:68123;;;;18582:48;;;18537:30;-1:-1:-1;;897:68123:88;;;;18748:3;18726:13;;897:68123;;18722:24;;;;;18843:16;;897:68123;18843:16;;:::i;:::-;;897:68123;;;;18831:34;2024:14:2;18831:34:88;;897:68123;18831:34;;897:68123;;;18831:34;897:68123;18831:34;336:42:2;18831:34:88;;;;;;;897:68123;;18831:34;;;18748:3;18884:13;897:68123;;18884:16;:13;;;:16;:::i;:::-;;:23;897:68123;;;;;18872:36;2024:14:2;18872:36:88;;897:68123;18872:36;;2024:14:2;897:68123:88;;18872:36;897:68123;18872:36;336:42:2;18872:36:88;;;;;;;897:68123;18786:139;897:68123;2024:14:2;897:68123:88;;;;;;18872:36;;;897:68123;;;;;;2024:14:2;897:68123:88;;;18786:139;;;;;;2024:14:2;;;:::i;18786:139:88:-;18748:3;897:68123;18707:13;;;18872:36;;;;;897:68123;;;18872:36;;;;;;:::i;:::-;;;;18831:34;;;;;897:68123;;;18831:34;;;;;;:::i;:::-;;;;18722:24;-1:-1:-1;897:68123:88;;;18722:24;;;897:68123;19039:3;897:68123;;;19011:19;897:68123;;19007:30;;;;;19180:22;;897:68123;19180:22;;:::i;:::-;;897:68123;;;;19168:40;2024:14:2;19168:40:88;;897:68123;19168:40;;897:68123;;;19168:40;897:68123;19168:40;336:42:2;19168:40:88;;;;;;;897:68123;;19168:40;;;19039:3;897:68123;;;19251:22;897:68123;;;;19251:19;:22;:::i;:::-;;:29;897:68123;;;;;19239:42;2024:14:2;19239:42:88;;897:68123;19239:42;;2024:14:2;897:68123:88;;19239:42;897:68123;19239:42;336::2;19239::88;;;;;;;897:68123;19088:222;897:68123;2024:14:2;897:68123:88;;;;;;19239:42;;;897:68123;;;;;;2024:14:2;897:68123:88;;;19088:222;;;;;;2024:14:2;;;:::i;19088:222:88:-;19039:3;897:68123;18992:13;;;19168:40;;;;;897:68123;;;19168:40;;;;;;:::i;:::-;;;;19007:30;;;;;897:68123;;19411:19;2024:14:2;19411:19:88;;897:68123;;;;19411:19;;897:68123;;;19411:19;897:68123;19411:19;336:42:2;19411:19:88;;;;;;;897:68123;;19411:19;;;18987:342;897:68123;;;;;;;;;;19437:26;2024:14:2;19437:26:88;;897:68123;19437:26;;2024:14:2;897:68123:88;;19437:26;897:68123;19437:26;336:42:2;19437:26:88;;;;;;;2024:14:2;897:68123:88;;19368:96;897:68123;;;19437:26;;;897:68123;;;;;;2024:14:2;897:68123:88;;;19368:96;;;;;;2024:14:2;;;:::i;19368:96:88:-;897:68123;;;19474:326;19526:3;897:68123;;;19498:19;897:68123;;19494:30;;;;;19668:22;;897:68123;19668:22;;:::i;:::-;;897:68123;;;;19656:40;2024:14:2;19656:40:88;;897:68123;19656:40;;897:68123;;;19656:40;897:68123;19656:40;336:42:2;19656:40:88;;;;;;;897:68123;;19656:40;;;19526:3;897:68123;;;19739:22;897:68123;;;;19739:19;:22;:::i;:::-;;:29;897:68123;;;;19727:42;2024:14:2;19727:42:88;;897:68123;19727:42;;2024:14:2;897:68123:88;;19727:42;897:68123;19727:42;336::2;19727::88;;;;;;897:68123;;;;;19575:206;897:68123;;;19727:42;;;897:68123;;;;;;2024:14:2;897:68123:88;;;19575:206;;;;;;2024:14:2;;;:::i;19575:206:88:-;19526:3;897:68123;19479:13;;;19656:40;;;;;897:68123;;;19656:40;;;;;;:::i;:::-;;;;19494:30;;;;897:68123;;;;;;;;;19892:37;2024:14:2;19892:37:88;;897:68123;19892:37;;897:68123;;;19892:37;897:68123;19892:37;336:42:2;19892:37:88;;;;;;;897:68123;;19892:37;;;19474:326;897:68123;;;;;;;;;19956:34;2024:14:2;19956:34:88;;897:68123;19956:34;;2024:14:2;897:68123:88;;19956:34;897:68123;19956:34;336:42:2;19956:34:88;;;;;;;897:68123;;;2024:14:2;19829:227:88;897:68123;;;;;19956:34;;;19474:326;897:68123;;;;;;2024:14:2;897:68123:88;;;19829:227;;;;;;2024:14:2;;;:::i;:::-;;;897:68123:88;2024:14:2;;;897:68123:88;2024:14:2;897:68123:88;;;;;;;;2024:14:2;;;:::i;:::-;;;;;;;;;897:68123:88;;2024:14:2;;897:68123:88;;2024:14:2;;;;;:::i;:::-;;;897:68123:88;2024:14:2;;;897:68123:88;2024:14:2;897:68123:88;;;;;;;;2024:14:2;;;:::i;:::-;;;897:68123:88;2024:14:2;;;897:68123:88;19829:227;;;;;;;;;;:::i;:::-;897:68123;;;20073:238;20119:3;897:68123;;;20097:13;897:68123;;20093:24;;;;;20215:16;;897:68123;20215:16;;:::i;:::-;;897:68123;;;;20203:34;2024:14:2;20203:34:88;;897:68123;20203:34;;897:68123;;;20203:34;897:68123;20203:34;336:42:2;20203:34:88;;;;;;;897:68123;;20203:34;;;20119:3;897:68123;;;20256:16;897:68123;;;;20256:13;:16;:::i;:::-;;:23;897:68123;;;;20244:36;2024:14:2;20244:36:88;;897:68123;20244:36;;2024:14:2;897:68123:88;;20244:36;897:68123;20244:36;336:42:2;20244:36:88;;;;;;897:68123;;;;;20157:135;897:68123;;;20244:36;;;897:68123;;;;;;2024:14:2;897:68123:88;;;20157:135;;;;;;2024:14:2;;;:::i;20157:135:88:-;20119:3;897:68123;20078:13;;;20244:36;;;;;897:68123;;;20244:36;;;;;;:::i;:::-;;;;20203:34;;;;;897:68123;;;20203:34;;;;;;:::i;:::-;;;;20093:24;;20328:68;20093:24;897:68123;;;;;;;;;;;;20328:68;;:::i;:::-;897:68123;20474:52;897:68123;;;20490:14;897:68123;;2024:14:2;897:68123:88;2024:14:2;897:68123:88;20474:52;;:::i;:::-;897:68123;;;2024:14:2;20535:132:88;;20073:238;897:68123;;;;;;;20709:31;2024:14:2;20709:31:88;;897:68123;20709:31;;2024:14:2;897:68123:88;2024:14:2;;;897:68123:88;20709:31;897:68123;20709:31;336:42:2;20709:31:88;;;;;;;897:68123;;;;;;;20709:31;;20073:238;-1:-1:-1;897:68123:88;;;2024:14:2;897:68123:88;;;;;:::i;:::-;20784:119;;897:68123;;;20963:19;2024:14:2;20963:19:88;;897:68123;;20963:19;;897:68123;;;20963:19;897:68123;20963:19;336:42:2;20963:19:88;;;;;;;897:68123;;20963:19;;;20784:119;897:68123;;;20999:14;2024::2;20999::88;;897:68123;20999:14;;2024::2;897:68123:88;;20999:14;897:68123;20999:14;336:42:2;20999:14:88;;;;;;;897:68123;;20999:14;;;20784:119;897:68123;;;21020:14;2024::2;21020::88;;897:68123;21020:14;;2024::2;897:68123:88;;21020:14;897:68123;21020:14;336:42:2;21020:14:88;;;;;;;897:68123;;21020:14;;;20784:119;897:68123;;;;21041:14;2024::2;21041::88;;897:68123;;21041:14;;2024::2;897:68123:88;;21041:14;897:68123;21041:14;336:42:2;21041:14:88;;;;;;;21279:73;897:68123;;21092:75;897:68123;2024:14:2;897:68123:88;20946:110;897:68123;;;;;;;21041:14;;;897:68123;;2024:14:2;897:68123:88;;;;;;;;;;;;;20946:110;;;;2024:14:2;;;:::i;20946:110:88:-;897:68123;;;;21142:14;:24;2024:14:2;897:68123:88;21092:75;;;:::i;:::-;897:68123;;2024:14:2;897:68123:88;2024:14:2;897:68123:88;;;;21301:14;897:68123;;21279:73;;;;;;2024:14:2;21279:73:88;;897:68123;21279:73;;;:::i;:::-;;;;;;;;;;897:68123;;21622:52;;897:68123;;;;;;;;;;;21279:73;;20784:119;897:68123;;;21422:38;21512:87;897:68123;21422:38;897:68123;;;21359:37;21467:39;897:68123;;;21622:52;897:68123;;;;21359:37;;:::i;21422:38::-;897:68123;;;;;;21467:39;;:::i;:::-;897:68123;;;;;;;;;;;;-1:-1:-1;21529:41:88;897:68123;;21529:69;;;;;897:68123;;;;;;;21529:69;897:68123;21512:87;;:::i;21529:69::-;897:68123;;;21529:69;;21279:73;21359:37;21279:73;;;897:68123;21279:73;;21622:52;21279:73;;;21512:87;21279:73;;21467:39;21279:73;;21422:38;21279:73;21422:38;21279:73;897:68123;21279:73;897:68123;21279:73;;;;;;;:::i;:::-;;;;;;-1:-1:-1;21279:73:88;;;-1:-1:-1;21279:73:88;-1:-1:-1;21279:73:88;;-1:-1:-1;21279:73:88;-1:-1:-1;21279:73:88;;-1:-1:-1;21279:73:88;21020:14;;;;;;897:68123;;;21020:14;;;;;;:::i;:::-;;;;;20999;;;;;897:68123;;;20999:14;;;;;;:::i;:::-;;;;20963:19;;;;;;897:68123;;;20963:19;;;;;;:::i;:::-;;;;;20784:119;897:68123;;:::i;:::-;20784:119;;;20709:31;;;;;;;897:68123;20709:31;897:68123;20709:31;;;;;;;:::i;:::-;;;;20535:132;897:68123;;;20592:65;;897:68123;;;;;;;2024:14:2;897:68123:88;20592:65;;;;;;:::i;:::-;897:68123;20582:76;;20535:132;;19956:34;;;;;897:68123;;;19956:34;;;;;;:::i;:::-;;;;19892:37;;;;;;897:68123;;;19892:37;;;;;;:::i;:::-;;;;;19437:26;;;;;897:68123;;;19437:26;;;;;;:::i;:::-;;;;19411:19;;;;;;897:68123;;;19411:19;;;;;;:::i;:::-;;;;;18029:18;;;;897:68123;18029:18;897:68123;18029:18;;;;;;;:::i;:::-;;;;17797:130;897:68123;;17797:130;;;:::i;:::-;897:68123;;;;17797:130;;;897:68123;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28065:1;897:68123;28035:14;;:20;;897:68123;28035:31;336:42:2;28025::88;;;;897:68123;;28025:42;2024:14:2;28025:42:88;;897:68123;28025:42;;897:68123;;;28025:42;;;336::2;28025::88;;;;;;;;897:68123;28093:14;;;;;:::i;:::-;28166;;897:68123;9972:18:48;;2024:14:2;897:68123:88;1206:48:48;;10027:18;897:68123:88;;1206:48:48;897:68123:88;;;1077:202:48;;2024:14:2;539:66:48;2024:14:2;;709:66:48;897:68123:88;868:66:48;;2024:14:2;868:66:48;;;;2024:14:2;868:66:48;;;2024:14:2;897:68123:88;;868:66:48;;;897:68123:88;868:66:48;1077:202;;;;;;:::i;:::-;897:68123:88;1060:225:48;;10027:18;;:::i;:::-;897:68123:88;;10068:48:48;897:68123:88;10068:48:48;;897:68123:88;;;;;;;2024:14:2;897:68123:88;;;2024:14:2;897:68123:88;10068:48:48;;;;;;:::i;:::-;897:68123:88;10058:59:48;;28216:52:88;28232:14;;897:68123;28256:10;2024:14:2;;;897:68123:88;28216:52;;:::i;:::-;897:68123;;;;;;28322:13;;;868:66:48;28344:3:88;28322:13;;897:68123;;28318:24;;;;;28411:16;;897:68123;28411:16;;:::i;:::-;;897:68123;;;;28399:34;2024:14:2;28399:34:88;;897:68123;28399:34;;897:68123;;;28399:34;28025:42;28399:34;336:42:2;28399:34:88;;;;;;;897:68123;;28399:34;;;28344:3;28452:13;897:68123;;28452:16;:13;;;:16;:::i;:::-;;:23;897:68123;;;;;28440:36;2024:14:2;28440:36:88;;897:68123;28440:36;;2024:14:2;897:68123:88;;28440:36;28025:42;28440:36;336:42:2;28440:36:88;;;;;;;897:68123;;28370:112;897:68123;;;28440:36;;;28370:112;;:::i;:::-;28344:3;897:68123;28303:13;;;28440:36;;;;;;897:68123;;;28440:36;;;;;;:::i;:::-;;;;;28399:34;;;;;897:68123;;;28399:34;;;;;;:::i;:::-;;;;28318:24;;;;;897:68123;;28544:37;2024:14:2;28544:37:88;;897:68123;28544:37;;2024:14:2;897:68123:88;;28544:37;28025:42;28544:37;336:42:2;28544:37:88;;;;;;;897:68123;;28544:37;;;28298:191;897:68123;;;;;;;;;;;;2024:14:2;897:68123:88;;;;;;;;;2024:14:2;;;:::i;:::-;;;897:68123:88;2024:14:2;;;897:68123:88;2024:14:2;897:68123:88;;;;;;;;2024:14:2;;;:::i;897:68123:88:-;;;28613:13;897:68123;28613:13;;28589:191;28635:3;28613:13;;897:68123;;28609:24;;;;;28707:16;;897:68123;28707:16;;:::i;:::-;;897:68123;;;;28695:34;2024:14:2;28695:34:88;;897:68123;28695:34;;897:68123;;;28695:34;28025:42;28695:34;336:42:2;28695:34:88;;;;;;;897:68123;;28695:34;;;28635:3;28748:13;897:68123;;28748:16;:13;;;:16;:::i;:::-;;:23;897:68123;;;;;28736:36;2024:14:2;28736:36:88;;897:68123;28736:36;;2024:14:2;897:68123:88;;28736:36;28025:42;28736:36;336:42:2;28736:36:88;;;;;;;897:68123;;28661:112;897:68123;;;28736:36;;;28661:112;;:::i;:::-;28635:3;897:68123;28594:13;;;28695:34;;;;;897:68123;;;28695:34;;;;;;:::i;:::-;;;;28544:37;897:68123;28544:37;;;;897:68123;28544:37;;897:68123;;;28544:37;;;;;;:::i;:::-;;;;;;1206:48:48;10027:18;1240:13;1206:48;;28025:42:88;897:68123;;28025:42;;;:::i;:::-;897:68123;;;;28025:42;;;897:68123;;;;;;;;;;;;;;1010:16;;;;;;;;;;;;;;;;;;;897:68123;;;1010:16;;;;;897:68123;;997:29;897:68123;;;;;;;;997:29;897:68123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;9185:13;897:68123;;;;9185:13;:::i;:::-;9261:3;9215:43;:13;;897:68123;9238:13;;897:68123;9215:43;;:::i;:::-;:49;336:42:2;9205:60:88;;;;897:68123;;9205:60;2024:14:2;9205:60:88;;897:68123;9205:60;;897:68123;;;9205:60;897:68123;9205:60;336:42:2;9205:60:88;;;;;;;;897:68123;;;;9429:3;9407:13;;897:68123;;9403:24;;;;;9452:16;;897:68123;9452:16;;:::i;:::-;;897:68123;;;;;;9452:38;;336:42:2;9442:49:88;;;;897:68123;;9442:49;2024:14:2;9442:49:88;;897:68123;9442:49;;897:68123;;;9442:49;897:68123;9442:49;336:42:2;9442:49:88;;;;;;;;9429:3;;897:68123;;9388:13;;9442:49;897:68123;;9442:49;;;:::i;:::-;897:68123;;;;9442:49;;;9403:24;;;;;;;897:68123;;9549:3;9527:13;;897:68123;;9523:24;;;;;9572:16;;897:68123;9572:16;;:::i;:::-;;897:68123;;;;;;9572:38;;336:42:2;9562:49:88;;;;897:68123;;9562:49;2024:14:2;9562:49:88;;897:68123;9562:49;;897:68123;;;9562:49;897:68123;9562:49;336:42:2;9562:49:88;;;;;;;;9549:3;;897:68123;;9508:13;;9562:49;897:68123;;9562:49;;;:::i;:::-;897:68123;;;;9562:49;;;9523:24;;;;;;;;9644:14;;;;:::i;:::-;897:68123;;;;9771:3;9749:13;;897:68123;;9745:24;;;;;9866:16;;897:68123;9866:16;;:::i;:::-;;897:68123;;;;9854:34;2024:14:2;9854:34:88;;897:68123;9854:34;;897:68123;;;9854:34;897:68123;9854:34;336:42:2;9854:34:88;;;;;;;897:68123;;;;9854:34;;;9771:3;9907:13;897:68123;9907:16;897:68123;9907:13;;;:16;:::i;:::-;;:23;897:68123;;;;;9895:36;2024:14:2;9895:36:88;;897:68123;9895:36;;2024:14:2;897:68123:88;;9895:36;897:68123;9895:36;336:42:2;9895:36:88;;;;;;;897:68123;9809:139;897:68123;2024:14:2;897:68123:88;;;;;;9895:36;;;897:68123;;;;;;2024:14:2;897:68123:88;;;9809:139;;;;;;2024:14:2;;;:::i;9809:139:88:-;9771:3;897:68123;9730:13;;;9854:34;897:68123;9854:34;;;9907:16;9854:34;897:68123;9854:34;;897:68123;;;9854:34;;;;;;:::i;:::-;;;;;;;9745:24;;;;;897:68123;;;;;;;10019:26;2024:14:2;10019:26:88;;897:68123;10019:26;;897:68123;;;10019:26;897:68123;10019:26;336:42:2;10019:26:88;;;;;;;897:68123;;10019:26;;;9725:242;897:68123;;;;;;;;10052:26;2024:14:2;10052:26:88;;897:68123;10052:26;;2024:14:2;897:68123:88;;10052:26;897:68123;10052:26;336:42:2;10052:26:88;;;;;;;2024:14:2;897:68123:88;;9987:92;897:68123;;;10052:26;;;897:68123;;;;;;2024:14:2;897:68123:88;;;9987:92;;;;;;2024:14:2;;;:::i;9987:92:88:-;897:68123;;;10089:238;10135:3;10113:13;;897:68123;;10109:24;;;;;10231:16;;897:68123;10231:16;;:::i;:::-;;897:68123;;;;10219:34;2024:14:2;10219:34:88;;897:68123;10219:34;;897:68123;;;10219:34;897:68123;10219:34;336:42:2;10219:34:88;;;;;;;897:68123;;10219:34;;;10135:3;10272:13;897:68123;;10272:16;:13;;;:16;:::i;:::-;;:23;897:68123;;;;10260:36;2024:14:2;10260:36:88;;897:68123;10260:36;;2024:14:2;897:68123:88;;10260:36;897:68123;10260:36;336:42:2;10260:36:88;;;;;;897:68123;;;;;10173:135;897:68123;;;10260:36;;;897:68123;;;;;;2024:14:2;897:68123:88;;;10173:135;;;;;;2024:14:2;;;:::i;10173:135:88:-;10135:3;897:68123;10094:13;;;10219:34;;;;;897:68123;;;10219:34;;;;;;:::i;:::-;;;;10109:24;;10344:68;10109:24;;897:68123;;10109:24;897:68123;;;;;10344:68;;:::i;:::-;10506:14;10490:52;10506:14;;897:68123;10530:10;2024:14:2;897:68123:88;2024:14:2;897:68123:88;10490:52;;:::i;:::-;897:68123;;;;10610:89;10682:16;;897:68123;10610:89;897:68123;;10610:89;;;;897:68123;10610:89;;;897:68123;10610:89;;;:::i;:::-;10709:23;;336:42:2;10551:189:88;;;;;897:68123;;;10551:189;;;;;2024:14:2;10551:189:88;;897:68123;;10551:189;897:68123;10551:189;;;:::i;:::-;;897:68123;;;336:42:2;10551:189:88;;;;;;;;10089:238;897:68123;;;;;;;;10800:26;2024:14:2;10800:26:88;;897:68123;10800:26;;897:68123;;;10800:26;897:68123;10800:26;336:42:2;10800:26:88;;;;;;;897:68123;;10800:26;;;10089:238;10853:16;;897:68123;;;10841:29;2024:14:2;10841:29:88;;897:68123;;10841:29;;2024:14:2;897:68123:88;;2024:14:2;897:68123:88;;2024:14:2;897:68123:88;2024:14:2;;;;:::i;:::-;10841:29:88;;336:42:2;10841:29:88;;;;;;;10900:75;897:68123;;;10841:29;;;10089:238;897:68123;;10783:88;897:68123;;;;;;2024:14:2;897:68123:88;;;10783:88;;;;;;2024:14:2;;;:::i;10900:75:88:-;11004:23;;336:42:2;10988:40:88;;;;897:68123;;10988:40;2024:14:2;10988:40:88;;897:68123;;10988:40;;2024:14:2;897:68123:88;;2024:14:2;897:68123:88;;2024:14:2;897:68123:88;2024:14:2;;;;:::i;10841:29:88:-;10783:88;10841:29;;;;897:68123;10841:29;;897:68123;;;10841:29;;;;;;:::i;:::-;;;;;;10800:26;;;;;;897:68123;;;10800:26;;;;;;:::i;:::-;;;;;10551:189;897:68123;;10551:189;;;:::i;:::-;897:68123;;;;10551:189;;;10019:26;897:68123;10019:26;;;;;;897:68123;;;10019:26;;;;;;:::i;:::-;;;;;9205:60;897:68123;;9205:60;;;:::i;:::-;897:68123;;;;9205:60;;;897:68123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;42553:14;;;;:::i;:::-;897:68123;42705:62;897:68123;42614:57;897:68123;;;;42614:57;:::i;:::-;897:68123;;;;;42733:33;897:68123;;;;42733:33;;:::i;42705:62::-;897:68123;;;;42797:38;897:68123;;;;42797:38;:::i;:::-;897:68123;;;294:80:98;897:68123:88;;294:80:98;:::i;:::-;897:68123:88;;;42914:55;897:68123;;;;;;;;42914:55;;:::i;:::-;897:68123;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;43239:29;2024:14:2;43239:29:88;;897:68123;43239:29;;897:68123;;;43239:29;897:68123;43239:29;336:42:2;43239:29:88;;;;;;;897:68123;;43239:29;;;897:68123;;;;;;;;;43275:26;2024:14:2;43275:26:88;;897:68123;43275:26;;2024:14:2;897:68123:88;;43275:26;897:68123;43275:26;336:42:2;43275:26:88;;;;;;;43059:250;897:68123;;;43275:26;;;897:68123;;43211:91;897:68123;2024:14:2;897:68123:88;;43211:91;;;2024:14:2;897:68123:88;43211:91;;2024:14:2;;897:68123:88;;2024:14:2;;897:68123:88;2024:14:2;;;;;;:::i;43059:250:88:-;43340:47;897:68123;43041:15;;:268;;;;43340:47;:::i;:::-;43315:22;897:68123;43315:22;;897:68123;;;;43470:14;43454:52;43470:14;;897:68123;43494:10;2024:14:2;;;897:68123:88;43454:52;;:::i;:::-;897:68123;;43428:79;2024:14:2;43428:79:88;;897:68123;43428:79;;2024:14:2;897:68123:88;2024:14:2;;;897:68123:88;43428:79;897:68123;43428:79;336:42:2;43428:79:88;;;;;;;897:68123;;;;;;;;43428:79;;;897:68123;43601:15;;897:68123;;;;;;;;43668:29;2024:14:2;43668:29:88;;897:68123;43668:29;;897:68123;;;43668:29;897:68123;43668:29;336:42:2;43668:29:88;;;;;;;897:68123;;43668:29;;;897:68123;;;;43709:14;2024::2;43709::88;;897:68123;43709:14;;2024::2;897:68123:88;;43709:14;897:68123;43709:14;336:42:2;43709:14:88;;;;;;;897:68123;;43709:14;;;897:68123;;;;43730:14;2024::2;43730::88;;897:68123;43730:14;;2024::2;897:68123:88;;43730:14;897:68123;43730:14;336:42:2;43730:14:88;;;;;;;897:68123;;43730:14;;;897:68123;;;;;43751:14;2024::2;43751::88;;897:68123;;43751:14;;2024::2;897:68123:88;;43751:14;897:68123;43751:14;336:42:2;43751:14:88;;;;;;;43640:135;897:68123;;;;;;;;43531:322;897:68123;;;43751:14;;;897:68123;2024:14:2;897:68123:88;;;;;;2024:14:2;897:68123:88;;;43640:135;;;;;;2024:14:2;;;:::i;43640:135:88:-;897:68123;43792:14;;:24;2024:14:2;897:68123:88;;;;;43824:23;43531:322;;:::i;:::-;43514:14;897:68123;43514:14;;:339;;;2024:14:2;43860:13:88;;;;;897:68123;;;;43914:13;;:24;897:68123;;;;;;44017:58;44040:34;897:68123;44017:58;;;897:68123;44017:58;;;897:68123;44017:58;;:::i;:::-;44088:13;;897:68123;;;2024:14:2;;897:68123:88;44077:25;;;2024:14:2;;;;;;;;;;;;44077:25:88;897:68123;2024:14:2;;;44077:25:88;2024:14:2;44077:25:88;336:42:2;43977:131:88;;;;;897:68123;;;43977:131;;;;;2024:14:2;43977:131:88;;897:68123;;43977:131;897:68123;43977:131;;;:::i;:::-;;897:68123;;;336:42:2;43977:131:88;;;;;;;44131:70;43977:131;44131:70;43977:131;;;897:68123;44187:13;;897:68123;;44131:70;;;44154:31;897:68123;44131:70;;;897:68123;44131:70;;2024:14:2;;;;;;;;;;;;;;;;;;;43977:131:88;897:68123;;43977:131;;;:::i;:::-;;;;43730:14;;;;;;897:68123;;;43730:14;;;;;;:::i;:::-;;;;;43709;;;;;;897:68123;;;43709:14;;;;;;:::i;:::-;;;;;43668:29;;;;;;897:68123;;;43668:29;;;;;;:::i;:::-;;;;;43428:79;;;;;;;;;897:68123;43428:79;897:68123;43428:79;;;;;;;:::i;:::-;;;;;;;;;43239:29;897:68123;43239:29;;;;;;897:68123;;;43239:29;;;;;;:::i;:::-;;;;;897:68123;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;897:68123:88;;;;;-1:-1:-1;897:68123:88;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;897:68123:88;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;897:68123:88;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;897:68123:88;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;-1:-1:-1;897:68123:88;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;897:68123:88;;;;;;;-1:-1:-1;897:68123:88;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;897:68123:88;;-1:-1:-1;897:68123:88;;;;;;:::o;2024:14:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;897:68123:88;;;;;;;:::i;:::-;2024:14:2;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;897:68123:88;;;;;;;2024:14:2;;;;;;;;;;:::o;:::-;;;;897:68123:88;2024:14:2;;;897:68123:88;;;2024:14:2;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;897:68123:88;2024:14:2;;897:68123:88;2024:14:2;;;;;;897:68123:88;;2024:14:2;;;897:68123:88;2024:14:2;;;;;;;;;;897:68123:88;;;;;;;;2024:14:2;;897:68123:88;2024:14:2;;;;;;897:68123:88;;2024:14:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;897:68123:88;;;;;;;;;;2024:14:2;;;;;;;;;;;;:::o;:::-;;;897:68123:88;;;;2024:14:2;897:68123:88;;;;;;;;2024:14:2;;;;;;;;;;;;;;;;;;;;;;;897:68123:88;2024:14:2;;897:68123:88;;;2024:14:2;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;897:68123:88;;2024:14:2;;;897:68123:88;2024:14:2;;;;897:68123:88;;2024:14:2;;;897:68123:88;2024:14:2;;;;;897:68123:88;;2024:14:2;;;;;;;;;;;;;;;;897:68123:88;2024:14:2;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;897:68123:88;2024:14:2;897:68123:88;2024:14:2:o;:::-;;;;;;;897:68123:88;2024:14:2;;;;;;;;;:::i;:::-;;897:68123:88;2024:14:2;;;897:68123:88;2024:14:2;897:68123:88;2024:14:2:o;897:68123:88:-;;;;;;;;;;:::o;:::-;;;;;;;;;:::o;:::-;;;;;;;;;;;;;304:1:98;897:68123:88;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;2024:14:2;;897:68123:88;;;;;;;;:::i;:::-;;;;;;;;;;;;;;2024:14:2;897:68123:88;;;;;;;;;2024:14:2;;;:::i;:::-;;;;;;;;;897:68123:88;;;;;;;;2024:14:2;;;:::i;:::-;;;;;;;;;897:68123:88;;;;;;;;2024:14:2;;;:::i;:::-;;;897:68123:88;2024:14:2;;;897:68123:88;;;;;;;;;;;:::i;:::-;:::o;:::-;;;;;;;;;;;;;2024:14:2;897:68123:88;;;;;;;;;2024:14:2;;;:::i;:::-;;;897:68123:88;2024:14:2;;;897:68123:88;2024:14:2;897:68123:88;;;2024:14:2;;897:68123:88;;;;;;;;2024:14:2;;;:::i;:::-;;;;;;;;;897:68123:88;;;;;;;;2024:14:2;;;:::i;897:68123:88:-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;;;2024:14:2;897:68123:88;;;2024:14:2;897:68123:88:o;:::-;;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;-1:-1:-1;897:68123:88;;-1:-1:-1;897:68123:88;;;;;;;;;-1:-1:-1;897:68123:88;;;;-1:-1:-1;897:68123:88;;;;;;;;;-1:-1:-1;897:68123:88;;;;-1:-1:-1;897:68123:88;;;;;;:::o;2482:4:48:-;897:68123:88;;;;;;;;;:::i;:::-;;2482:4:48;;;;;;-1:-1:-1;2482:4:48;;;;;;;;;:::o;:::-;;897:68123:88;2482:4:48;;;;;;;;;;;897:68123:88;;;;;;;;;:::i;:::-;32213:1;2482:4:48;;;;;;-1:-1:-1;2482:4:48;;;;;;;;;:::o;:::-;;897:68123:88;2482:4:48;;;;;;;;;;897:68123:88;;;;;-1:-1:-1;897:68123:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;897:68123:88;;;;;-1:-1:-1;897:68123:88;;-1:-1:-1;897:68123:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;897:68123:88;;-1:-1:-1;897:68123:88;;;;;;;;;;;;;;-1:-1:-1;897:68123:88;;;;-1:-1:-1;897:68123:88;;;;;;;;;;;;;;-1:-1:-1;897:68123:88;;;;-1:-1:-1;897:68123:88;;;;-1:-1:-1;897:68123:88;;;;-1:-1:-1;897:68123:88;;;;-1:-1:-1;897:68123:88;;;;-1:-1:-1;897:68123:88;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;897:68123:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;-1:-1:-1;897:68123:88;;-1:-1:-1;897:68123:88;;-1:-1:-1;897:68123:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2024:14:2;897:68123:88;;;;;;;;2024:14:2;897:68123:88;;2024:14:2;897:68123:88;2024:14:2;;;;897:68123:88;;;;;;;;2024:14:2;897:68123:88;;2024:14:2;897:68123:88;2024:14:2;897:68123:88;2024:14:2;;897:68123:88;;;;;;;;2024:14:2;897:68123:88;;2024:14:2;897:68123:88;2024:14:2;897:68123:88;2024:14:2;;897:68123:88;;;;;;;;2024:14:2;897:68123:88;;2024:14:2;897:68123:88;2024:14:2;897:68123:88;2024:14:2;;897:68123:88;;;;;;;;2024:14:2;897:68123:88;;2024:14:2;897:68123:88;2024:14:2;897:68123:88;2024:14:2;;897:68123:88;;;;;;;;2024:14:2;897:68123:88;;2024:14:2;897:68123:88;2024:14:2;897:68123:88;2024:14:2;;897:68123:88;;;;;;;;2024:14:2;897:68123:88;;2024:14:2;897:68123:88;2024:14:2;;;897:68123:88;;;;;;;;;;;;;;;;;;;;2024:14:2;;;;897:68123:88;;;2024:14:2;;897:68123:88;2024:14:2;;897:68123:88;;;;2024:14:2;;897:68123:88;2024:14:2;;897:68123:88;;;;2024:14:2;;897:68123:88;2024:14:2;;897:68123:88;;;;2024:14:2;;897:68123:88;2024:14:2;;897:68123:88;;;;2024:14:2;;897:68123:88;2024:14:2;;897:68123:88;;;;2024:14:2;;897:68123:88;2024:14:2;;897:68123:88;;;;2024:14:2;;897:68123:88;;;;;;;;;;;;;;1243:204:4;1302:7;897:68123:88;;;;;;;1325:14:4;:::o;1298:143::-;897:68123:88;;;2024:14:2;1377:39:4;;897:68123:88;1377:39:4;;;897:68123:88;192:59:4;;;;2024:14:2;192:59:4;1377:39;;;897:68123:88;1377:39:4;;;;;;;897:68123:88;1377:39:4;;;1298:143;1377:53;;;1370:60;:::o;1377:39::-;;;192:59;1377:39;;192:59;1377:39;;;;;;192:59;1377:39;;;:::i;:::-;;;192:59;;;;2024:14:2;1377:39:4;;;;;;-1:-1:-1;1377:39:4;;;897:68123:88;;2024:14:2;897:68123:88;2024:14:2;;;;;1270:2:51;897:68123:88;;;1270:2:51;;897:68123:88;1270:2:51;;;;:::o;398:649:98:-;2933:19:15;897:68123:88;-1:-1:-1;897:68123:88;;;;2933:19:15;:::i;:::-;897:68123:88;;;-1:-1:-1;897:68123:88;;;;;;;:::i;:::-;;;;;;;;;;;9786:54:15;;897:68123:88;;9786:54:15;;;;;;;;;;897:68123:88;;;;;;:::i;:::-;;;;;2024:14:2;9786:54:15;;;;;;;;:::i;:::-;897:68123:88;9371:159:15;679:42;9371:159;;;897:68123:88;;;;580:42:98;576:467;;398:649;;:::o;576:467::-;655:14;;;2933:19:15;897:68123:88;-1:-1:-1;897:68123:88;;2933:19:15;:::i;:::-;897:68123:88;-1:-1:-1;897:68123:88;;;;;;;:::i;:::-;;;;;;;;;;;9786:54:15;;897:68123:88;;9786:54:15;;;;;;;;;;897:68123:88;;;;;;:::i;9786:54:15:-;897:68123:88;9371:159:15;679:42;9371:159;;;897:68123:88;723:14:98;;;717:42;897:68123:88;;717:42:98;:::i;:::-;897:68123:88;;-1:-1:-1;815:3:98;792:14;;;;;;897:68123:88;;;788:25:98;;;;;883:17;;:33;830:17;883;2933:19:15;897:68123:88;883:17:98;;;897:68123:88;883:17:98;;:::i;:::-;;:33;897:68123:88;-1:-1:-1;2933:19:15;;:::i;:::-;897:68123:88;-1:-1:-1;897:68123:88;;;9786:54:15;897:68123:88;;;;;;:::i;:::-;;;;;;;;;;;9786:54:15;;;897:68123:88;9786:54:15;;;;;;;;;897:68123:88;;;;;;:::i;:::-;;;;;2024:14:2;9786:54:15;;;;;;;;:::i;:::-;897:68123:88;9371:159:15;679:42;9371:159;;;830:14:98;:17;:::i;:::-;;:33;897:68123:88;;773:13:98;;;;788:25;;;;;;398:649::o;2815:199:15:-;897:68123:88;42651:1;2933:19:15;2815:199;2933:19;:::i;:::-;897:68123:88;-1:-1:-1;897:68123:88;;;9786:54:15;897:68123:88;;;;;;:::i;9786:54:15:-;897:68123:88;9371:159:15;679:42;9371:159;;;2815:199::o;:::-;;897:68123:88;2933:19:15;2815:199;2933:19;:::i;2815:199::-;307:66:98;42651:1:88;2933:19:15;2815:199;2933:19;:::i;2815:199::-;2933:19;2815:199;897:68123:88;2815:199:15;2933:19;:::i;2815:199::-;897:68123:88;;2933:19:15;2815:199;2933:19;:::i;2815:199::-;2933:19;2815:199;897:68123:88;2815:199:15;2933:19;:::i;2815:199::-;897:68123:88;;2933:19:15;2815:199;2933:19;:::i;1526:548:98:-;897:68123:88;;;1835:1:98;1813:23;;;:53;;;1798:249;1812:80;;;;1798:249;1812:105;;;;1798:249;1812:142;;;;1798:249;1812:142;;;897:68123:88;;;;;2015:21:98;;;897:68123:88;;;2015:21:98;;;;897:68123:88;2015:21:98;;:::i;:::-;897:68123:88;2005:32:98;;897:68123:88;1798:249:98;;1812:142;;1526:548;:::o;1812:142::-;1929:21;;;:25;;1812:142;;:105;1896:21;1748:42;1896:21;;1812:105;;:80;1871:21;1672:42;1871:21;;1812:80;;1813:53;1840:26;1862:4;1840:26;;;1813:53;;897:68123:88;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;4903:592:97:-;;;;897:68123:88;;;5165:24:97;2024:14:2;5165:24:97;;897:68123:88;5165:24:97;;;897:68123:88;-1:-1:-1;5165:24:97;;;897:68123:88;5165:24:97;;;;;;;-1:-1:-1;5165:24:97;;;4903:592;897:68123:88;;;5223:25:97;2024:14:2;5223:25:97;;5165:24;5223:25;;2024:14:2;-1:-1:-1;5223:25:97;5165:24;5223:25;897:68123:88;5223:25:97;;;;;;;-1:-1:-1;5223:25:97;;;4903:592;897:68123:88;;;;5338:27:97;2024:14:2;5338:27:97;;897:68123:88;5165:24:97;5338:27;;897:68123:88;-1:-1:-1;5338:27:97;5165:24;5338:27;897:68123:88;5338:27:97;;;;;;897:68123:88;-1:-1:-1;5338:27:97;897:68123:88;;5338:27:97;5416:42;5338:27;897:68123:88;5338:27:97;;;;;4903:592;897:68123:88;;;;;;;;;;;;;;2024:14:2;897:68123:88;;;;;;;;2024:14:2;;;:::i;:::-;;;897:68123:88;2024:14:2;;;897:68123:88;2024:14:2;897:68123:88;;;;;;;;2024:14:2;;;:::i;:::-;;;897:68123:88;2024:14:2;;;897:68123:88;2024:14:2;897:68123:88;;;;;;;;2024:14:2;;;:::i;:::-;;;897:68123:88;2024:14:2;;;897:68123:88;2024:14:2;897:68123:88;;;;;;;;2024:14:2;;;:::i;897:68123:88:-;5424:11:97;897:68123:88;5424:11:97;:::i;:::-;897:68123:88;;5416:42:97;;;;;2024:14:2;5416:42:97;;5165:24;5416:42;;;:::i;:::-;;;;897:68123:88;5416:42:97;;;;;;;-1:-1:-1;5416:42:97;;;5464:26;4903:592;:::o;5416:42::-;;;;;;-1:-1:-1;5416:42:97;;;;;;:::i;5338:27::-;897:68123:88;5338:27:97;;;;;;;;;;;;;;:::i;:::-;;;;;5223:25;;;;;;;-1:-1:-1;5223:25:97;;;;;;:::i;:::-;;;;;5165:24;;;;;;;-1:-1:-1;5165:24:97;;;;;;:::i;:::-;;;;;4903:592;;897:68123:88;;5165:24:97;2024:14:2;5165:24:97;;897:68123:88;5165:24:97;;;897:68123:88;-1:-1:-1;5165:24:97;;;897:68123:88;5165:24:97;;;;;;;-1:-1:-1;5165:24:97;;;897:68123:88;;;5223:25:97;2024:14:2;5223:25:97;;5165:24;5223:25;;2024:14:2;-1:-1:-1;5223:25:97;5165:24;5223:25;897:68123:88;5223:25:97;;;;;;;-1:-1:-1;5223:25:97;;;897:68123:88;;;;5338:27:97;2024:14:2;5338:27:97;;897:68123:88;5165:24:97;5338:27;;897:68123:88;-1:-1:-1;5338:27:97;5165:24;5338:27;897:68123:88;5338:27:97;;;;;;897:68123:88;-1:-1:-1;5338:27:97;897:68123:88;;5338:27:97;5416:42;5338:27;897:68123:88;5338:27:97;;;;;897:68123:88;;;;;;;;;;;;;;2024:14:2;897:68123:88;;;;;;;;2024:14:2;;;:::i;4903:592:97:-;;897:68123:88;;5165:24:97;2024:14:2;5165:24:97;;897:68123:88;5165:24:97;;;897:68123:88;-1:-1:-1;5165:24:97;;;897:68123:88;5165:24:97;;;;;;;-1:-1:-1;5165:24:97;;;897:68123:88;;;5223:25:97;2024:14:2;5223:25:97;;5165:24;5223:25;;2024:14:2;-1:-1:-1;5223:25:97;5165:24;5223:25;897:68123:88;5223:25:97;;;;;;;-1:-1:-1;5223:25:97;;;897:68123:88;;;;5338:27:97;2024:14:2;5338:27:97;;897:68123:88;5165:24:97;5338:27;;897:68123:88;-1:-1:-1;5338:27:97;5165:24;5338:27;897:68123:88;5338:27:97;;;;;;897:68123:88;-1:-1:-1;5338:27:97;897:68123:88;;5338:27:97;5416:42;5338:27;897:68123:88;5338:27:97;;;;;897:68123:88;;;;;;;;;;;;;;2024:14:2;897:68123:88;;;;;;;;2024:14:2;;;:::i;897:68123:88:-;;;;;;;;;;;;;;2024:14:2;897:68123:88;;;;;;;;2024:14:2;;;:::i;:::-;;;897:68123:88;2024:14:2;;;897:68123:88;;;;;;;;;;;:::i;5775:328:97:-;-1:-1:-1;897:68123:88;5887:43:97;897:68123:88;5775:328:97;5887:43;:::i;:::-;897:68123:88;5971:11:97;897:68123:88;5971:11:97;:::i;:::-;897:68123:88;;;5963:48:97;;;;;2024:14:2;5963:48:97;;897:68123:88;5963:48:97;;;897:68123:88;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5963:48:97;;;897:68123:88;5963:48:97;;;;;;;-1:-1:-1;5963:48:97;;;5775:328;897:68123:88;192:59:4;897:68123:88;;6067:31:97;;;;;;;;;;192:59:4;;;;2024:14:2;5775:328:97;:::o;5963:48::-;;;;;;-1:-1:-1;5963:48:97;;;;;;:::i;:::-;;;;9842:280:48;9972:18;;;2024:14:2;9842:280:48;;10027:18;;897:68123:88;1206:48:48;;-1:-1:-1;1206:48:48;;897:68123:88;;;1077:202:48;9972:18;1077:202;;2024:14:2;539:66:48;2024:14:2;;709:66:48;897:68123:88;868:66:48;;2024:14:2;868:66:48;;;;2024:14:2;868:66:48;;;2024:14:2;897:68123:88;868:66:48;;;897:68123:88;868:66:48;1077:202;;;;;;:::i;10027:18::-;897:68123:88;;10068:48:48;9972:18;10068:48;;897:68123:88;;;;;;;2024:14:2;897:68123:88;;;2024:14:2;897:68123:88;10068:48:48;;;;;;:::i;:::-;897:68123:88;10058:59:48;;9842:280;:::o;1206:48::-;1240:13;1206:48;;;897:68123:88;;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;6767:588:97:-;;7129:27;;;2024:14:2;-1:-1:-1;897:68123:88;;:::i;:::-;7129:27:97;;897:68123:88;;7195:30:97;;;;2024:14:2;7195:30:97;;2024:14:2;7195:30:97;;;2024:14:2;;;;;;:::i;:::-;7195:30:97;;897:68123:88;7195:30:97;;;;;;897:68123:88;-1:-1:-1;7195:30:97;897:68123:88;;7195:30:97;7276:48;7195:30;897:68123:88;7195:30:97;;;;;7129:27;897:68123:88;;;;;;;;;;2024:14:2;897:68123:88;;;2024:14:2;897:68123:88;;;;2024:14:2;897:68123:88;;;2024:14:2;;;:::i;:::-;;;897:68123:88;2024:14:2;;;897:68123:88;2024:14:2;897:68123:88;;;;2024:14:2;897:68123:88;;;2024:14:2;;;:::i;:::-;;;897:68123:88;2024:14:2;;;897:68123:88;2024:14:2;897:68123:88;;;;2024:14:2;897:68123:88;;;2024:14:2;;;:::i;:::-;;;897:68123:88;2024:14:2;;;897:68123:88;2024:14:2;897:68123:88;;;;2024:14:2;897:68123:88;;;2024:14:2;;;:::i;897:68123:88:-;7284:11:97;897:68123:88;7284:11:97;:::i;:::-;897:68123:88;;7276:48:97;;;;;2024:14:2;7276:48:97;;7195:30;7276:48;;;:::i;7195:30::-;897:68123:88;7195:30:97;;;;;;;;;;;;;;:::i;:::-;;;;;7129:27;2024:14:2;-1:-1:-1;897:68123:88;;:::i;:::-;7129:27:97;;;6767:588;;2024:14:2;897:68123:88;;;:::i;1051:297:98:-;-1:-1:-1;897:68123:88;;;;10311:19:6;24321:12;10311:19;;:43;;;;1051:297:98;897:68123:88;10301:54:6;;;;897:68123:88;;10301:54:6;2024:14:2;10301:54:6;;897:68123:88;;10301:54:6;;;897:68123:88;10301:54:6;;;;897:68123:88;10301:54:6;;;;;;;;1051:297:98;24065:53:6;10416:2;24065:53;10405:13;:31;;;;1051:297:98;10401:1280:6;;;10627:42;10612:58;;:120;;;;10401:1280;897:68123:88;10602:131:6;;;;897:68123:88;;10602:131:6;2024:14:2;10602:131:6;;897:68123:88;;10301:54:6;10602:131;;897:68123:88;10602:131:6;;10301:54;10602:131;897:68123:88;10602:131:6;;;;;;;;;;;10401:1280;;;;1166:17:98;:22;897:68123:88;1156:33:98;;;;897:68123:88;;1156:33:98;2024:14:2;1156:33:98;;10301:54:6;1156:33:98;;897:68123:88;1156:33:98;;10301:54:6;1156:33:98;897:68123:88;1156:33:98;;;;;;;;;;;10401:1280:6;1195:71:98;;897:68123:88;1195:71:98;;;;897:68123:88;;2024:14:2;1195:71:98;;1222:42;1205:60;;;10301:54:6;1195:71:98;;897:68123:88;1195:71:98;;10301:54:6;1195:71:98;897:68123:88;1195:71:98;;;;;;;;;;;10401:1280:6;1272:71:98;;897:68123:88;1272:71:98;;;;1299:42;897:68123:88;;1272:71:98;2024:14:2;1272:71:98;;1282:60;;10301:54:6;1272:71:98;;897:68123:88;1272:71:98;;10301:54:6;1272:71:98;897:68123:88;1272:71:98;;;;;;;;1051:297;;:::o;1272:71::-;;;;;;:::i;:::-;897:68123:88;;1051:297:98;:::o;897:68123:88:-;;;1272:71:98;897:68123:88;;2024:14:2;897:68123:88;;2024:14:2;;;;1272:71:98;897:68123:88;;;1195:71:98;;;;;:::i;:::-;897:68123:88;;1195:71:98;;;;;897:68123:88;;2024:14:2;897:68123:88;;2024:14:2;;;;1156:33:98;;;;;:::i;:::-;897:68123:88;;1156:33:98;;;;;897:68123:88;;;10602:131:6;;;;;:::i;:::-;897:68123:88;;10602:131:6;;;;;897:68123:88;;2024:14:2;897:68123:88;;2024:14:2;;;;10602:131:6;897:68123:88;;;10612:120:6;10674:58;10689:42;10674:58;;10612:120;;10401:1280;10765:5;24065:53;10754:16;:37;;;;10401:1280;10750:931;;;10941:42;10926:58;;:120;;;;10750:931;897:68123:88;10916:131:6;;;;897:68123:88;;10916:131:6;2024:14:2;10916:131:6;;897:68123:88;;10301:54:6;10916:131;;897:68123:88;10916:131:6;;10301:54;10916:131;897:68123:88;10916:131:6;;;;;;;;;;;10750:931;;;10401:1280;;10916:131;;;;;:::i;:::-;897:68123:88;;10916:131:6;;;;10926:120;10988:58;11003:42;10988:58;;10926:120;;10750:931;11079:5;24065:53;11068:16;:36;;;;10750:931;11064:617;10401:1280;11064:617;11274:42;11259:58;;:120;;;;11064:617;897:68123:88;11249:131:6;;;;897:68123:88;;11249:131:6;2024:14:2;11249:131:6;;897:68123:88;;10301:54:6;11249:131;;897:68123:88;11249:131:6;;10301:54;11249:131;897:68123:88;11249:131:6;;;;;;;;;;;11064:617;11404:58;;11419:42;11404:58;;:120;;;;11064:617;897:68123:88;11394:131:6;;;;897:68123:88;;11394:131:6;2024:14:2;11394:131:6;;897:68123:88;;10301:54:6;11394:131;;897:68123:88;11394:131:6;;10301:54;11394:131;897:68123:88;11394:131:6;;;;;;;;;;;11064:617;11549:58;;11564:42;11549:58;;:120;;;;897:68123:88;11539:131:6;;;;897:68123:88;;11539:131:6;2024:14:2;11539:131:6;;897:68123:88;;10301:54:6;11539:131;;897:68123:88;11539:131:6;;10301:54;11539:131;897:68123:88;11539:131:6;;;;;;;;;;;11064:617;;10401:1280;;11549:120;11611:58;11626:42;11611:58;;11549:120;;11394:131;;;;;:::i;:::-;897:68123:88;;11394:131:6;;;;11404:120;11466:58;11481:42;11466:58;;11404:120;;11249:131;;;;;:::i;:::-;897:68123:88;;11249:131:6;;;;11259:120;11321:58;11336:42;11321:58;;11259:120;;11068:36;24065:53;11099:5;24065:53;11088:16;11068:36;;10754:37;24065:53;10785:6;24065:53;10774:17;10754:37;;10405:31;24065:53;10433:3;24065:53;10422:14;10405:31;;10301:54;;;;;;;;:::i;:::-;;;;;10311:43;10334:20;10349:4;10334:20;;10311:43;;4413:486:97;897:68123:88;;;4632:24:97;2024:14:2;4632:24:97;;897:68123:88;4632:24:97;;;897:68123:88;-1:-1:-1;4632:24:97;;;897:68123:88;4632:24:97;;;;;;;-1:-1:-1;4632:24:97;;;4413:486;897:68123:88;;;4690:25:97;2024:14:2;4690:25:97;;4632:24;4690:25;;2024:14:2;-1:-1:-1;4690:25:97;4632:24;4690:25;897:68123:88;4690:25:97;;;;;;;4820:42;4690:25;-1:-1:-1;4690:25:97;;;;;4413:486;897:68123:88;;;;;;;;;;;;;;;;;;2024:14:2;897:68123:88;;;;;;;;2024:14:2;;;:::i;:::-;;;897:68123:88;2024:14:2;;;897:68123:88;2024:14:2;897:68123:88;;;;;;;;2024:14:2;;;:::i;:::-;;;897:68123:88;2024:14:2;;;897:68123:88;2024:14:2;897:68123:88;;;;;;;;2024:14:2;;;:::i;4690:25:97:-;897:68123:88;4690:25:97;;;897:68123:88;4690:25:97;897:68123:88;4690:25:97;897:68123:88;4690:25:97;;;;;;;;;;:::i;:::-;;;;;;;;;4632:24;;;;;;-1:-1:-1;4632:24:97;;;;;;:::i;:::-;;;;4413:486;897:68123:88;;2024:14:2;4632:24:97;;897:68123:88;4632:24:97;;;897:68123:88;-1:-1:-1;4632:24:97;;;897:68123:88;4632:24:97;;;;;;;-1:-1:-1;4632:24:97;;;4413:486;897:68123:88;;;4690:25:97;2024:14:2;4690:25:97;;897:68123:88;4632:24:97;4690:25;;2024:14:2;-1:-1:-1;4690:25:97;4632:24;4690:25;897:68123:88;4690:25:97;;;;;;;4820:42;4690:25;-1:-1:-1;4690:25:97;;;;;897:68123:88;;;;;;;;;;;;;;;;;;2024:14:2;897:68123:88;;;;;;;;2024:14:2;;;:::i;4632:24:97:-;;;;;;-1:-1:-1;4632:24:97;;;;;;:::i;:::-;;;;4413:486;897:68123:88;;2024:14:2;4632:24:97;;897:68123:88;4632:24:97;;;897:68123:88;-1:-1:-1;4632:24:97;;;897:68123:88;4632:24:97;;;;;;;-1:-1:-1;4632:24:97;;;4413:486;897:68123:88;;;4690:25:97;2024:14:2;4690:25:97;;32213:1:88;4632:24:97;4690:25;;2024:14:2;-1:-1:-1;4690:25:97;4632:24;4690:25;897:68123:88;4690:25:97;;;;;;;4820:42;4690:25;-1:-1:-1;4690:25:97;;;;;897:68123:88;;;;;;;;;;;;;;;;;;2024:14:2;897:68123:88;;;;;;;;2024:14:2;;;:::i;4632:24:97:-;;;;;;-1:-1:-1;4632:24:97;;;;;;:::i;:::-;;;;4413:486;897:68123:88;;2024:14:2;4632:24:97;;897:68123:88;4632:24:97;;;897:68123:88;-1:-1:-1;4632:24:97;;;897:68123:88;4632:24:97;;;;;;;-1:-1:-1;4632:24:97;;;897:68123:88;;;4690:25:97;2024:14:2;4690:25:97;;4632:24;4690:25;;2024:14:2;-1:-1:-1;4690:25:97;4632:24;4690:25;897:68123:88;4690:25:97;;;;;;;4820:42;4690:25;-1:-1:-1;4690:25:97;;;;;897:68123:88;;;;;;;;;;;;;;;;;;2024:14:2;897:68123:88;;;;;;;;2024:14:2;;;:::i;6263:500:97:-;;897:68123:88;;;-1:-1:-1;6263:500:97;6684:48;6263:500;6613:27;;;;897:68123:88;;;:::i;:::-;;;;;;;;;;;;2024:14:2;897:68123:88;;;;;;;;2024:14:2;;;:::i;:::-;;;897:68123:88;2024:14:2;;;897:68123:88;2024:14:2;897:68123:88;;;;;;;;2024:14:2;;;:::i;:::-;;;897:68123:88;2024:14:2;;;897:68123:88;2024:14:2;897:68123:88;;;;;;;;2024:14:2;;;:::i;:::-;;;897:68123:88;2024:14:2;;;897:68123:88;;;;;;;;;;;:::i;6613:27:97:-;897:68123:88;;;:::i;:::-;6613:27:97;;6263:500;6684:48;6263:500;897:68123:88;31430:1;897:68123;-1:-1:-1;6263:500:97;897:68123:88;;;:::i;2270:110:4:-;897:68123:88;2349:24:4;;;;897:68123:88;;2349:24:4;2024:14:2;2349:24:4;;;;;2024:14:2;29351:17:88;897:68123;;;2024:14:2;-1:-1:-1;2349:24:4;;;897:68123:88;2349:24:4;;;;;;;;2270:110;:::o;2349:24::-;-1:-1:-1;2349:24:4;;;:::i;2270:110::-;897:68123:88;2349:24:4;;;;897:68123:88;;2349:24:4;2024:14:2;2349:24:4;;;;;2024:14:2;304:1:98;897:68123:88;;;2024:14:2;-1:-1:-1;2349:24:4;;;897:68123:88;2349:24:4;;;;;;;;2270:110;:::o;:::-;897:68123:88;2349:24:4;897:68123:88;2349:24:4;;;;897:68123:88;;2349:24:4;2024:14:2;2349:24:4;;;;;2024:14:2;897:68123:88;;;;2024:14:2;2349:24:4;;;;897:68123:88;2349:24:4;;;;;;;;2270:110;;:::o;2349:24::-;;;;;:::i;:::-;2270:110;:::o;:::-;;897:68123:88;2349:24:4;;;;897:68123:88;;2349:24:4;2024:14:2;2349:24:4;;;;;2024:14:2;897:68123:88;;;2024:14:2;-1:-1:-1;2349:24:4;;;897:68123:88;2349:24:4;;;;;;;;2270:110;:::o;3710:::-;;897:68123:88;3789:24:4;;;;897:68123:88;;3789:24:4;2024:14:2;3789:24:4;;;;;2024:14:2;897:68123:88;;;2024:14:2;-1:-1:-1;3789:24:4;;;897:68123:88;3789:24:4;;;;;;;;3710:110;:::o;897:68123:88:-;;;;;;2024:14:2;897:68123:88;;;;;2024:14:2;897:68123:88;;;;;;;;;2024:14:2;;;:::i;:::-;;897:68123:88;;;;;;;;:::i;7359:560:97:-;897:68123:88;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;897:68123:88;7620:3:97;897:68123:88;;7596:22:97;;;;;7668:6;;;897:68123:88;;;;;;:::i;:::-;;;;;;;;;7668:19:97;;2024:14:2;-1:-1:-1;7702:14:97;;;;:::i;:::-;;897:68123:88;;7689:28:97;;;;2024:14:2;7689:28:97;;897:68123:88;7689:28:97;;;2024:14:2;;;;;;:::i;:::-;7689:28:97;;897:68123:88;7689:28:97;;;;;;;897:68123:88;7689:28:97;;897:68123:88;;7689:28:97;;;-1:-1:-1;7689:28:97;;;7668:19;897:68123:88;2024:14:2;897:68123:88;;;;;2024:14:2;897:68123:88;;;;;;;;;2024:14:2;;;:::i;:::-;;897:68123:88;;;;;;;;;;;;:::i;:::-;7620:3:97;897:68123:88;7581:13:97;;;7689:28;;;;;;;;;;;;:::i;:::-;;;;;897:68123:88;;2024:14:2;-1:-1:-1;2024:14:2;;;;;7668:19:97;897:68123:88;;;;;;:::i;:::-;;;;;;;;;7668:19:97;;;7596:22;;;897:68123:88;7596:22:97;;;-1:-1:-1;7596:22:97;;;7758:49;7596:22;;7758:49;:::i;:::-;897:68123:88;7848:11:97;897:68123:88;7848:11:97;:::i;897:68123:88:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7840:48:97;;;897:68123:88;7840:48:97;;;;;;;;-1:-1:-1;7840:48:97;;;7894:20;7359:560;:::o;7840:48::-;897:68123:88;2024:14:2;-1:-1:-1;2024:14:2;;;;;1723:567:97;897:68123:88;;2024:14:2;1968:23:97;;1812:2:88;1968:23:97;;;2024:14:2;-1:-1:-1;1968:23:97;;;897:68123:88;1968:23:97;;;;;;;-1:-1:-1;1968:23:97;;;1723:567;897:68123:88;;;2018:19:97;2024:14:2;2018:19:97;;1968:23;2018:19;;2024:14:2;-1:-1:-1;2018:19:97;1968:23;2018:19;897:68123:88;2018:19:97;;;;;;;-1:-1:-1;2018:19:97;;;1723:567;897:68123:88;;;2080:35:97;2024:14:2;2080:35:97;;1877:4:88;1968:23:97;2080:35;;2024:14:2;-1:-1:-1;2080:35:97;1968:23;2080:35;897:68123:88;2080:35:97;;;;;;897:68123:88;;;2080:35:97;897:68123:88;;2080:35:97;897:68123:88;;2080:35:97;-1:-1:-1;2080:35:97;;;;;1723:567;897:68123:88;;;;;;;;;;;;2024:14:2;897:68123:88;;;;;;;;2024:14:2;;;:::i;:::-;;;897:68123:88;2024:14:2;;;897:68123:88;2024:14:2;897:68123:88;;;;;;;;2024:14:2;;;:::i;:::-;;;897:68123:88;2024:14:2;;;897:68123:88;2024:14:2;897:68123:88;;;;;;;;2024:14:2;;;:::i;:::-;;;897:68123:88;2024:14:2;;;897:68123:88;2024:14:2;897:68123:88;;;;;1968:23:97;897:68123:88;;2024:14:2;;;:::i;897:68123:88:-;;2208:11:97;897:68123:88;2208:11:97;:::i;897:68123:88:-;;;;;;;;1968:23:97;897:68123:88;;;;;;;;;;;;;;;;;;;:::i;2080:35:97:-;;;;;;;;;;;;;:::i;:::-;;;;2018:19;;;;;;;-1:-1:-1;2018:19:97;;;;;;:::i;:::-;;;;;1968:23;;;;;;-1:-1:-1;1968:23:97;;;;;;:::i;:::-;;;;5499:272;-1:-1:-1;897:68123:88;5619:43:97;897:68123:88;5499:272:97;5619:43;:::i;897:68123:88:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::o;1042:78:15:-;;;;;;;:::o;:::-;;;;;;;;;;1546:1263;897:68123:88;1664:10:15;;;;897:68123:88;;1970:8:15;;;;;;:20;;;1546:1263;1966:34;;2026:9;;;;:::i;:::-;897:68123:88;2038:1:15;897:68123:88;;;;;;;2234:1:15;2229:6;;;:18;;;1546:1263;2225:38;;897:68123:88;2277:20:15;;;:46;;;1546:1263;2273:82;;2455:7;;;;;;2493;;;;;2528:11;2493:7;;:::i;:::-;2528:11;:::i;:::-;2557:8;;;2553:24;;2600:9;;;;:::i;:::-;1042:78;897:68123:88;;;;;;;2451:352:15;1546:1263::o;2553:24::-;2567:10;;;:::o;2451:352::-;2630:173;;;;;;;;2451:352;;;;;1546:1263::o;2630:173::-;2672:7;;;;;;2707:11;2672:7;;;:::i;2707:11::-;2736:8;;;2732:24;;2779:9;;;;:::i;:::-;2038:1;897:68123:88;;;;;;;2630:173:15;;;;;;;2273:82;897:68123:88;;;;2332:23:15;897:68123:88;;;;2332:23:15;;:::i;2277:46::-;897:68123:88;;;2301:22:15;;2277:46;;2225:38;2256:7;;;;;;;;;:::i;2229:18::-;2239:8;;;;2229:18;;1966:34;1992:8;;;;;;:::o;1970:20::-;1982:8;;;;;1970:20;;897:68123:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;701:863:97;897:68123:88;;;;2024:14:2;798:35:97;;897:68123:88;798:35:97;;;897:68123:88;;;;;;;;;;;;798:35:97;;;;;;;;;;;-1:-1:-1;798:35:97;;;701:863;897:68123:88;;;866:35:97;2024:14:2;866:35:97;;897:68123:88;798:35:97;866;;897:68123:88;;;;;;;;;;;;866:35:97;798;866;;;;;;;;;-1:-1:-1;866:35:97;;;701:863;916:18;;;;897:68123:88;;285:44:97;462:50;1037:32;;1033:109;;701:863;232:1;;;;;;;1278:17;232:1;;644:49;;285:44;644:49;1278:17;:::i;:::-;897:68123:88;232:1:97;897:68123:88;;;;;;;1326:27:97;1337:15;;;;:::i;:::-;1326:27;;:::i;:::-;897:68123:88;;2024:14:2;1383:39:97;;897:68123:88;798:35:97;1383:39;;232:1;;897:68123:88;232:1:97;;897:68123:88;232:1:97;897:68123:88;;;232:1:97;-1:-1:-1;1383:39:97;798:35;1383:39;;;;;;;;;-1:-1:-1;1383:39:97;;;701:863;897:68123:88;;;1451:39:97;2024:14:2;1451:39:97;;897:68123:88;798:35:97;1451:39;;232:1;;897:68123:88;232:1:97;;897:68123:88;232:1:97;897:68123:88;;;232:1:97;-1:-1:-1;1451:39:97;798:35;1451:39;;;;;;;;;-1:-1:-1;1451:39:97;;;701:863;897:68123:88;-1:-1:-1;897:68123:88;;;;1526:24:97;;;;2024:14:2;1526:24:97;;798:35;1526:24;;2024:14:2;1526:24:97;;;;;;;1504:55;1526:24;-1:-1:-1;1526:24:97;;;701:863;1504:55;;:::i;1526:24::-;;;;;;;-1:-1:-1;1526:24:97;;;;;;:::i;:::-;;;;;1451:39;-1:-1:-1;1451:39:97;;;;;;;;;;;;;;:::i;:::-;;;;;1383;;;;;;-1:-1:-1;1383:39:97;;;;;;:::i;:::-;;;;1033:109;897:68123:88;;;;1107:26:97;;1124:8;;-1:-1:-1;897:68123:88;;1107:26:97;897:68123:88;1124:8:97;;897:68123:88;;-1:-1:-1;897:68123:88;;;;1107:26:97;;;;;;;;;:::i;:::-;897:68123:88;1097:37:97;;1033:109;;897:68123:88;798:35:97;897:68123:88;;;;;;798:35:97;897:68123:88;;;;;;;;;;;;;;866:35:97;;;897:68123:88;866:35:97;;897:68123:88;866:35:97;;;;;;192:59:4;866:35:97;;;:::i;:::-;;;192:59:4;;;;2024:14:2;;866:35:97;;;;;;;-1:-1:-1;866:35:97;;798;;897:68123:88;798:35:97;;897:68123:88;798:35:97;;;;;;192:59:4;798:35:97;;;:::i;:::-;;;192:59:4;;;;2024:14:2;;798:35:97;;;;;;-1:-1:-1;798:35:97;;8278:1282:48;8416:22;;;;897:68123:88;;8399:40:48;;;;;897:68123:88;8399:40:48;897:68123:88;;;;;;;;;;;;;8399:40:48;;;;;;;;;;;;;:::i;:::-;897:68123:88;8389:51:48;;897:68123:88;;;;;8451:34:48;;8447:1109;897:68123:88;;;8525:14:48;;897:68123:88;8525:14:48;;;897:68123:88;;;2482:4:48;897:68123:88;2482:4:48;;;:::i;:::-;897:68123:88;;;;;;;:::i;:::-;2482:4:48;;;897:68123:88;:::i;:::-;;8399:40:48;;897:68123:88;;;;1270:2:51;;;897:68123:88;8164:3:48;897:68123:88;;8146:16:48;;;;;8202:8;;897:68123:88;8202:8:48;;;:::i;:::-;;897:68123:88;;;;7708:7:48;8399:40;7708:7;;897:68123:88;7727:6:48;897:68123:88;7727:6:48;;;8399:40;897:68123:88;;;;7717:17:48;7736:10;;;;897:68123:88;7748:14:48;;;2024::2;897:68123:88;;7764:14:48;7780:17;7764:14;;;2024::2;897:68123:88;;7780:17:48;;897:68123:88;;;;7667:138:48;8399:40;7667:138;;2024:14:2;1478:66:48;2024:14:2;;897:68123:88;1478:66:48;;897:68123:88;7736:10:48;1478:66;;2024:14:2;7748::48;1478:66;;2024:14:2;7764::48;1478:66;;2024:14:2;7780:17:48;1478:66;;897:68123:88;1478:66:48;;;897:68123:88;8416:22:48;1478:66;;2024:14:2;8416:22:48;7667:138;;;;;;:::i;:::-;897:68123:88;7650:161:48;;8177:34;;;;:::i;:::-;897:68123:88;;8131:13:48;;8146:16;;;;;;;897:68123:88;;8240:28:48;;8399:40;8240:28;;;;897:68123:88;;;;;;;;;;;;8240:28:48;;;;;;8399:40;8240:28;;;;;;:::i;:::-;897:68123:88;8230:39:48;;8750:14;7748;7736:10;8750:14;;897:68123:88;8766:14:48;;897:68123:88;;;8712:82:48;8399:40;8712:82;;2024:14:2;1799:66:48;2024:14:2;;897:68123:88;1799:66:48;;2024:14:2;7736:10:48;1799:66;;2024:14:2;7748::48;1799:66;;2024:14:2;7764::48;1799:66;;2024:14:2;7764::48;8712:82;;;7780:17;8712:82;;:::i;897:68123:88:-;;;2024:14:2;;8399:40:48;897:68123:88;;;;;;-1:-1:-1;897:68123:88;;;;;;;;8447:1109:48;897:68123:88;8812:29:48;;897:68123:88;;8998:16:48;;;;8399:40;897:68123:88;;;;8988:27:48;897:68123:88;;;8959:70:48;8399:40;8959:70;;2024:14:2;1979:66:48;2024:14:2;;897:68123:88;1979:66:48;;2024:14:2;1979:66:48;;;2024:14:2;1979:66:48;8959:70;;;;;;:::i;8808:748::-;2482:4;9047:35;;2482:4;;9216:18;;;2024:14:2;897:68123:88;;;9181:67:48;8399:40;9181:67;;2024:14:2;2174:66:48;2024:14:2;;897:68123:88;1979:66:48;;2024:14:2;1979:66:48;;;2024:14:2;1979:66:48;9181:67;;;;;;:::i;9043:513::-;2556:4;9266:28;;2556:4;;9443:15;;;2024:14:2;897:68123:88;;;9414:58:48;8399:40;9414:58;;2024:14:2;1979:66:48;2024:14:2;;897:68123:88;1979:66:48;;2024:14:2;1979:66:48;;;2024:14:2;1979:66:48;9414:58;;;;;;:::i;9262:294::-;9523:26;897:68123:88;9523:26:48;;2024:14:2;1270:2:51;897:68123:88;9523:26:48;897:68123:88;;;;;;;8399:40:48;897:68123:88;;;;;;-1:-1:-1;897:68123:88;;;;;;;","linkReferences":{}},"methodIdentifiers":{"IS_TEST()":"fa7626d4","baseSigImp()":"5418a2c3","excludeArtifacts()":"b5508aa9","excludeContracts()":"e20c9f71","excludeSelectors()":"b0464fdc","excludeSenders()":"1ed7831c","failed()":"ba414fa6","setUp()":"0a9254e4","targetArtifactSelectors()":"66d9a9a0","targetArtifacts()":"85226c81","targetContracts()":"3f7286f4","targetInterfaces()":"2ade3880","targetSelectors()":"916a17c6","targetSenders()":"3e5e3c23","test_checkpointer_current_snapshot(((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),address,uint56,uint256,uint8,uint8,bytes))":"1d2d5933","test_checkpointer_different_image_hash_fail(((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),address,bytes,uint56,uint256,uint8,uint8,bytes32))":"68193b7f","test_checkpointer_disabled(((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),address,uint56,uint56,uint256,uint8,uint8,bytes))":"97b6de28","test_checkpointer_disabled_old_checkpoint(((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),address,uint56,uint56,uint256,uint8,uint8,bytes,bytes32,uint56))":"bff915aa","test_checkpointer_disabled_with_chain(((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),address,bytes,uint256,uint256,uint56,uint56,uint56))":"e8a63f73","test_checkpointer_higher_checkpoint_fail(((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),address,bytes,uint56,uint56,uint256,uint8,uint8))":"035082a7","test_checkpointer_old_checkpoint_with_chain(((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),address,bytes,uint256,uint256,uint56,uint56,uint56,bytes32))":"a81c6263","test_checkpointer_past_with_chain(((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),address,bytes,uint256,uint256,uint56,uint56))":"27181b75","test_checkpointer_unused_snapshot_chain_fail(((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),address,bytes,uint256,uint256,uint56,uint56,uint56,bytes32))":"39441709","test_recover_anyAddressSubdigest(((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),(address,uint8)[],(address,uint8)[],uint16,uint56))":"0e8cc067","test_recover_chained_low_weight_fail(((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint256,uint256,uint256,uint256,uint256))":"4e07914a","test_recover_chained_signature_single_case((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]))":"b938827c","test_recover_chained_wrong_checkpoint_order_fail(((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint256,uint256,uint256,uint256,uint256,uint256))":"7a7c73be","test_recover_invalid_signature_flag((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint8,uint8,uint8)":"f8aca5ac","test_recover_nested_config(((address,uint8)[],(address,uint8)[],(address,uint8)[],(address,uint8)[],(uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint16,uint56,uint16,uint8,uint8,uint256,bool))":"1bc86b7e","test_recover_one_1271_invalid_signature_bad_return_fail(((address,uint8)[],(address,uint8)[],(uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint16,uint56,uint8,address,bytes,bytes4))":"56b9fb3e","test_recover_one_1271_invalid_signature_revert_fail(((address,uint8)[],(address,uint8)[],(uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint16,uint56,uint8,address,bytes,bytes))":"0965d162","test_recover_one_1271_signer(((address,uint8)[],(address,uint8)[],(uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint16,uint56,uint8,address,bytes))":"3e707bb2","test_recover_one_sapient_signer(((address,uint8)[],(address,uint8)[],(uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint16,uint56,uint8,address,bytes,bytes32,bool))":"23f1d045","test_recover_one_signer(((address,uint8)[],(address,uint8)[],(uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint16,uint56,uint8,uint256,bool))":"d82c1802","test_recover_random_config_unsigned(uint256,uint256)":"f7647d6b","test_recover_random_config_unsigned_skewed_left(uint256)":"96015890","test_recover_random_config_unsigned_skewed_right(uint256)":"b4d4462b","test_recover_subdigest(((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),(address,uint8)[],(address,uint8)[],uint16,uint56))":"66fee921"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"}],\"name\":\"InvalidKind\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"IS_TEST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseSigImp\",\"outputs\":[{\"internalType\":\"contract BaseSigImp\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"excludedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setUp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifactSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"artifact\",\"type\":\"string\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzArtifactSelector[]\",\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"targetedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetInterfaces\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"artifacts\",\"type\":\"string[]\"}],\"internalType\":\"struct StdInvariant.FuzzInterface[]\",\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"payload\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"checkpointer\",\"type\":\"address\"},{\"internalType\":\"uint56\",\"name\":\"checkpoint\",\"type\":\"uint56\"},{\"internalType\":\"uint256\",\"name\":\"signer1pk\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"threshold\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"weight\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"checkpointerData\",\"type\":\"bytes\"}],\"internalType\":\"struct BaseSigTest.test_checkpointer_current_snapshot_params\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"test_checkpointer_current_snapshot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"payload\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"checkpointer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"checkpointerData\",\"type\":\"bytes\"},{\"internalType\":\"uint56\",\"name\":\"checkpoint\",\"type\":\"uint56\"},{\"internalType\":\"uint256\",\"name\":\"signer1pk\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"threshold\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"weight\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"differentImageHash\",\"type\":\"bytes32\"}],\"internalType\":\"struct BaseSigTest.test_checkpointer_different_image_hash_fail_params\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"test_checkpointer_different_image_hash_fail\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"payload\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"checkpointer\",\"type\":\"address\"},{\"internalType\":\"uint56\",\"name\":\"checkpoint\",\"type\":\"uint56\"},{\"internalType\":\"uint56\",\"name\":\"snapshotCheckpoint\",\"type\":\"uint56\"},{\"internalType\":\"uint256\",\"name\":\"signer1pk\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"threshold\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"weight\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"checkpointerData\",\"type\":\"bytes\"}],\"internalType\":\"struct BaseSigTest.test_checkpointer_disabled_params\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"test_checkpointer_disabled\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"payload\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"checkpointer\",\"type\":\"address\"},{\"internalType\":\"uint56\",\"name\":\"checkpoint\",\"type\":\"uint56\"},{\"internalType\":\"uint56\",\"name\":\"snapshotCheckpoint\",\"type\":\"uint56\"},{\"internalType\":\"uint256\",\"name\":\"signer1pk\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"threshold\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"weight\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"checkpointerData\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"ignoredImageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint56\",\"name\":\"oldCheckpoint\",\"type\":\"uint56\"}],\"internalType\":\"struct BaseSigTest.test_checkpointer_disabled_old_checkpoint_params\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"test_checkpointer_disabled_old_checkpoint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"payload\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"checkpointer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"checkpointerData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"signerPk1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signerPk2\",\"type\":\"uint256\"},{\"internalType\":\"uint56\",\"name\":\"checkpoint1\",\"type\":\"uint56\"},{\"internalType\":\"uint56\",\"name\":\"checkpoint2\",\"type\":\"uint56\"},{\"internalType\":\"uint56\",\"name\":\"ignoredSnapshotCheckpoint\",\"type\":\"uint56\"}],\"internalType\":\"struct BaseSigTest.test_checkpointer_disabled_with_chain_params\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"test_checkpointer_disabled_with_chain\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"payload\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"checkpointer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"checkpointerData\",\"type\":\"bytes\"},{\"internalType\":\"uint56\",\"name\":\"checkpointerCheckpoint\",\"type\":\"uint56\"},{\"internalType\":\"uint56\",\"name\":\"checkpoint\",\"type\":\"uint56\"},{\"internalType\":\"uint256\",\"name\":\"signer1pk\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"threshold\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"weight\",\"type\":\"uint8\"}],\"internalType\":\"struct BaseSigTest.test_checkpointer_higher_checkpoint_fail_params\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"test_checkpointer_higher_checkpoint_fail\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"payload\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"checkpointer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"checkpointerData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"signerPk1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signerPk2\",\"type\":\"uint256\"},{\"internalType\":\"uint56\",\"name\":\"checkpoint1\",\"type\":\"uint56\"},{\"internalType\":\"uint56\",\"name\":\"checkpoint2\",\"type\":\"uint56\"},{\"internalType\":\"uint56\",\"name\":\"oldCheckpoint\",\"type\":\"uint56\"},{\"internalType\":\"bytes32\",\"name\":\"ignoredImageHash\",\"type\":\"bytes32\"}],\"internalType\":\"struct BaseSigTest.test_checkpointer_old_checkpoint_with_chain_params\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"test_checkpointer_old_checkpoint_with_chain\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"payload\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"checkpointer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"checkpointerData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"signerPk1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signerPk2\",\"type\":\"uint256\"},{\"internalType\":\"uint56\",\"name\":\"checkpoint1\",\"type\":\"uint56\"},{\"internalType\":\"uint56\",\"name\":\"checkpoint2\",\"type\":\"uint56\"}],\"internalType\":\"struct BaseSigTest.test_checkpointer_past_with_chain_params\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"test_checkpointer_past_with_chain\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"payload\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"checkpointer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"checkpointerData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"signerPk1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signerPk2\",\"type\":\"uint256\"},{\"internalType\":\"uint56\",\"name\":\"checkpoint1\",\"type\":\"uint56\"},{\"internalType\":\"uint56\",\"name\":\"checkpoint2\",\"type\":\"uint56\"},{\"internalType\":\"uint56\",\"name\":\"snapshotCheckpoint\",\"type\":\"uint56\"},{\"internalType\":\"bytes32\",\"name\":\"snapshotImageHash\",\"type\":\"bytes32\"}],\"internalType\":\"struct BaseSigTest.test_checkpointer_unused_snapshot_chain_params_fail\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"test_checkpointer_unused_snapshot_chain_fail\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"payload\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"weight\",\"type\":\"uint8\"}],\"internalType\":\"struct BaseSigTest.AddressWeightPair[]\",\"name\":\"prefix\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"weight\",\"type\":\"uint8\"}],\"internalType\":\"struct BaseSigTest.AddressWeightPair[]\",\"name\":\"suffix\",\"type\":\"tuple[]\"},{\"internalType\":\"uint16\",\"name\":\"threshold\",\"type\":\"uint16\"},{\"internalType\":\"uint56\",\"name\":\"checkpoint\",\"type\":\"uint56\"}],\"internalType\":\"struct BaseSigTest.test_recover_anyAddressSubdigest_params\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"test_recover_anyAddressSubdigest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"payload\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signer1pk\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signer2pk\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signer3pk\",\"type\":\"uint256\"}],\"internalType\":\"struct BaseSigTest.test_recover_chained_low_weight_fail_params\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"test_recover_chained_low_weight_fail\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_finalPayload\",\"type\":\"tuple\"}],\"name\":\"test_recover_chained_signature_single_case\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"payload\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"signer1pk\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signer2pk\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signer3pk\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"checkpoint1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"checkpoint2\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"checkpoint3\",\"type\":\"uint256\"}],\"internalType\":\"struct BaseSigTest.test_recover_chained_wrong_checkpoint_order_fail_params\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"test_recover_chained_wrong_checkpoint_order_fail\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"uint8\",\"name\":\"checkpointSize\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"thresholdSize\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"invalidFlag\",\"type\":\"uint8\"}],\"name\":\"test_recover_invalid_signature_flag\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"weight\",\"type\":\"uint8\"}],\"internalType\":\"struct BaseSigTest.AddressWeightPair[]\",\"name\":\"prefix\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"weight\",\"type\":\"uint8\"}],\"internalType\":\"struct BaseSigTest.AddressWeightPair[]\",\"name\":\"suffix\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"weight\",\"type\":\"uint8\"}],\"internalType\":\"struct BaseSigTest.AddressWeightPair[]\",\"name\":\"nestedPrefix\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"weight\",\"type\":\"uint8\"}],\"internalType\":\"struct BaseSigTest.AddressWeightPair[]\",\"name\":\"nestedSuffix\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"payload\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"threshold\",\"type\":\"uint16\"},{\"internalType\":\"uint56\",\"name\":\"checkpoint\",\"type\":\"uint56\"},{\"internalType\":\"uint16\",\"name\":\"internalThreshold\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"externalWeight\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"weight\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"pk\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"useEthSign\",\"type\":\"bool\"}],\"internalType\":\"struct BaseSigTest.test_recover_nested_config_params\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"test_recover_nested_config\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"weight\",\"type\":\"uint8\"}],\"internalType\":\"struct BaseSigTest.AddressWeightPair[]\",\"name\":\"prefix\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"weight\",\"type\":\"uint8\"}],\"internalType\":\"struct BaseSigTest.AddressWeightPair[]\",\"name\":\"suffix\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"payload\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"threshold\",\"type\":\"uint16\"},{\"internalType\":\"uint56\",\"name\":\"checkpoint\",\"type\":\"uint56\"},{\"internalType\":\"uint8\",\"name\":\"weight\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes4\",\"name\":\"bad4Bytes\",\"type\":\"bytes4\"}],\"internalType\":\"struct BaseSigTest.test_recover_one_1271_invalid_signature_bad_return_fail_params\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"test_recover_one_1271_invalid_signature_bad_return_fail\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"weight\",\"type\":\"uint8\"}],\"internalType\":\"struct BaseSigTest.AddressWeightPair[]\",\"name\":\"prefix\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"weight\",\"type\":\"uint8\"}],\"internalType\":\"struct BaseSigTest.AddressWeightPair[]\",\"name\":\"suffix\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"payload\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"threshold\",\"type\":\"uint16\"},{\"internalType\":\"uint56\",\"name\":\"checkpoint\",\"type\":\"uint56\"},{\"internalType\":\"uint8\",\"name\":\"weight\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"revertFromSigner\",\"type\":\"bytes\"}],\"internalType\":\"struct BaseSigTest.test_recover_one_1271_invalid_signature_fail_params\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"test_recover_one_1271_invalid_signature_revert_fail\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"weight\",\"type\":\"uint8\"}],\"internalType\":\"struct BaseSigTest.AddressWeightPair[]\",\"name\":\"prefix\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"weight\",\"type\":\"uint8\"}],\"internalType\":\"struct BaseSigTest.AddressWeightPair[]\",\"name\":\"suffix\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"payload\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"threshold\",\"type\":\"uint16\"},{\"internalType\":\"uint56\",\"name\":\"checkpoint\",\"type\":\"uint56\"},{\"internalType\":\"uint8\",\"name\":\"weight\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct BaseSigTest.test_recover_one_1271_signer_params\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"test_recover_one_1271_signer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"weight\",\"type\":\"uint8\"}],\"internalType\":\"struct BaseSigTest.AddressWeightPair[]\",\"name\":\"prefix\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"weight\",\"type\":\"uint8\"}],\"internalType\":\"struct BaseSigTest.AddressWeightPair[]\",\"name\":\"suffix\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"payload\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"threshold\",\"type\":\"uint16\"},{\"internalType\":\"uint56\",\"name\":\"checkpoint\",\"type\":\"uint56\"},{\"internalType\":\"uint8\",\"name\":\"weight\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"sapientImageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"isCompact\",\"type\":\"bool\"}],\"internalType\":\"struct BaseSigTest.test_recover_one_sapient_signer_params\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"test_recover_one_sapient_signer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"weight\",\"type\":\"uint8\"}],\"internalType\":\"struct BaseSigTest.AddressWeightPair[]\",\"name\":\"prefix\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"weight\",\"type\":\"uint8\"}],\"internalType\":\"struct BaseSigTest.AddressWeightPair[]\",\"name\":\"suffix\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"payload\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"threshold\",\"type\":\"uint16\"},{\"internalType\":\"uint56\",\"name\":\"checkpoint\",\"type\":\"uint56\"},{\"internalType\":\"uint8\",\"name\":\"weight\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"pk\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"useEthSign\",\"type\":\"bool\"}],\"internalType\":\"struct BaseSigTest.test_recover_one_signer_params\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"test_recover_one_signer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxDepth\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_seed\",\"type\":\"uint256\"}],\"name\":\"test_recover_random_config_unsigned\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_seed\",\"type\":\"uint256\"}],\"name\":\"test_recover_random_config_unsigned_skewed_left\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_seed\",\"type\":\"uint256\"}],\"name\":\"test_recover_random_config_unsigned_skewed_right\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"payload\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"weight\",\"type\":\"uint8\"}],\"internalType\":\"struct BaseSigTest.AddressWeightPair[]\",\"name\":\"prefix\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"weight\",\"type\":\"uint8\"}],\"internalType\":\"struct BaseSigTest.AddressWeightPair[]\",\"name\":\"suffix\",\"type\":\"tuple[]\"},{\"internalType\":\"uint16\",\"name\":\"threshold\",\"type\":\"uint16\"},{\"internalType\":\"uint56\",\"name\":\"checkpoint\",\"type\":\"uint56\"}],\"internalType\":\"struct BaseSigTest.test_recover_subdigest_params\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"test_recover_subdigest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"InvalidKind(uint8)\":[{\"notice\":\"Error thrown when the kind is invalid\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/modules/BaseSig.t.sol\":\"BaseSigTest\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/auth/BaseSig.sol\":{\"keccak256\":\"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8\",\"dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3\"]},\"src/modules/interfaces/ICheckpointer.sol\":{\"keccak256\":\"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1\",\"dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t\"]},\"src/modules/interfaces/IERC1271.sol\":{\"keccak256\":\"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b\",\"dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF\"]},\"src/modules/interfaces/ISapient.sol\":{\"keccak256\":\"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489\",\"dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"src/utils/LibOptim.sol\":{\"keccak256\":\"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81\",\"dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x\"]},\"test/modules/BaseSig.t.sol\":{\"keccak256\":\"0x11437c537dcc74468343003a2d3555dfb1299c0ad9c1d11379f6ce9f8aee9c3a\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://679667d1d960e7c6b47a07561cc76e6ce3c32309c3ac961b16b603434e936773\",\"dweb:/ipfs/QmRYS4PLNmN1rAbe9SPVbzJNbUdnYR7uyAQY3S8UR24VNZ\"]},\"test/utils/PrimitivesRPC.sol\":{\"keccak256\":\"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe\",\"dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv\"]},\"test/utils/TestUtils.sol\":{\"keccak256\":\"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad\",\"dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint8","name":"kind","type":"uint8"}],"type":"error","name":"InvalidKind"},{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log","anonymous":false},{"inputs":[{"internalType":"address","name":"","type":"address","indexed":false}],"type":"event","name":"log_address","anonymous":false},{"inputs":[{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"log_bytes","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32","indexed":false}],"type":"event","name":"log_bytes32","anonymous":false},{"inputs":[{"internalType":"int256","name":"","type":"int256","indexed":false}],"type":"event","name":"log_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address","name":"val","type":"address","indexed":false}],"type":"event","name":"log_named_address","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes","name":"val","type":"bytes","indexed":false}],"type":"event","name":"log_named_bytes","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes32","name":"val","type":"bytes32","indexed":false}],"type":"event","name":"log_named_bytes32","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false}],"type":"event","name":"log_named_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"string","name":"val","type":"string","indexed":false}],"type":"event","name":"log_named_string","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false}],"type":"event","name":"log_named_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log_string","anonymous":false},{"inputs":[{"internalType":"uint256","name":"","type":"uint256","indexed":false}],"type":"event","name":"log_uint","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"logs","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"IS_TEST","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"baseSigImp","outputs":[{"internalType":"contract BaseSigImp","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeArtifacts","outputs":[{"internalType":"string[]","name":"excludedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeContracts","outputs":[{"internalType":"address[]","name":"excludedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"excludedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSenders","outputs":[{"internalType":"address[]","name":"excludedSenders_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"failed","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"setUp"},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifactSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzArtifactSelector[]","name":"targetedArtifactSelectors_","type":"tuple[]","components":[{"internalType":"string","name":"artifact","type":"string"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifacts","outputs":[{"internalType":"string[]","name":"targetedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetContracts","outputs":[{"internalType":"address[]","name":"targetedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetInterfaces","outputs":[{"internalType":"struct StdInvariant.FuzzInterface[]","name":"targetedInterfaces_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"string[]","name":"artifacts","type":"string[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"targetedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSenders","outputs":[{"internalType":"address[]","name":"targetedSenders_","type":"address[]"}]},{"inputs":[{"internalType":"struct BaseSigTest.test_checkpointer_current_snapshot_params","name":"params","type":"tuple","components":[{"internalType":"struct Payload.Decoded","name":"payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"address","name":"checkpointer","type":"address"},{"internalType":"uint56","name":"checkpoint","type":"uint56"},{"internalType":"uint256","name":"signer1pk","type":"uint256"},{"internalType":"uint8","name":"threshold","type":"uint8"},{"internalType":"uint8","name":"weight","type":"uint8"},{"internalType":"bytes","name":"checkpointerData","type":"bytes"}]}],"stateMutability":"nonpayable","type":"function","name":"test_checkpointer_current_snapshot"},{"inputs":[{"internalType":"struct BaseSigTest.test_checkpointer_different_image_hash_fail_params","name":"params","type":"tuple","components":[{"internalType":"struct Payload.Decoded","name":"payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"address","name":"checkpointer","type":"address"},{"internalType":"bytes","name":"checkpointerData","type":"bytes"},{"internalType":"uint56","name":"checkpoint","type":"uint56"},{"internalType":"uint256","name":"signer1pk","type":"uint256"},{"internalType":"uint8","name":"threshold","type":"uint8"},{"internalType":"uint8","name":"weight","type":"uint8"},{"internalType":"bytes32","name":"differentImageHash","type":"bytes32"}]}],"stateMutability":"nonpayable","type":"function","name":"test_checkpointer_different_image_hash_fail"},{"inputs":[{"internalType":"struct BaseSigTest.test_checkpointer_disabled_params","name":"params","type":"tuple","components":[{"internalType":"struct Payload.Decoded","name":"payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"address","name":"checkpointer","type":"address"},{"internalType":"uint56","name":"checkpoint","type":"uint56"},{"internalType":"uint56","name":"snapshotCheckpoint","type":"uint56"},{"internalType":"uint256","name":"signer1pk","type":"uint256"},{"internalType":"uint8","name":"threshold","type":"uint8"},{"internalType":"uint8","name":"weight","type":"uint8"},{"internalType":"bytes","name":"checkpointerData","type":"bytes"}]}],"stateMutability":"nonpayable","type":"function","name":"test_checkpointer_disabled"},{"inputs":[{"internalType":"struct BaseSigTest.test_checkpointer_disabled_old_checkpoint_params","name":"params","type":"tuple","components":[{"internalType":"struct Payload.Decoded","name":"payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"address","name":"checkpointer","type":"address"},{"internalType":"uint56","name":"checkpoint","type":"uint56"},{"internalType":"uint56","name":"snapshotCheckpoint","type":"uint56"},{"internalType":"uint256","name":"signer1pk","type":"uint256"},{"internalType":"uint8","name":"threshold","type":"uint8"},{"internalType":"uint8","name":"weight","type":"uint8"},{"internalType":"bytes","name":"checkpointerData","type":"bytes"},{"internalType":"bytes32","name":"ignoredImageHash","type":"bytes32"},{"internalType":"uint56","name":"oldCheckpoint","type":"uint56"}]}],"stateMutability":"nonpayable","type":"function","name":"test_checkpointer_disabled_old_checkpoint"},{"inputs":[{"internalType":"struct BaseSigTest.test_checkpointer_disabled_with_chain_params","name":"params","type":"tuple","components":[{"internalType":"struct Payload.Decoded","name":"payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"address","name":"checkpointer","type":"address"},{"internalType":"bytes","name":"checkpointerData","type":"bytes"},{"internalType":"uint256","name":"signerPk1","type":"uint256"},{"internalType":"uint256","name":"signerPk2","type":"uint256"},{"internalType":"uint56","name":"checkpoint1","type":"uint56"},{"internalType":"uint56","name":"checkpoint2","type":"uint56"},{"internalType":"uint56","name":"ignoredSnapshotCheckpoint","type":"uint56"}]}],"stateMutability":"nonpayable","type":"function","name":"test_checkpointer_disabled_with_chain"},{"inputs":[{"internalType":"struct BaseSigTest.test_checkpointer_higher_checkpoint_fail_params","name":"params","type":"tuple","components":[{"internalType":"struct Payload.Decoded","name":"payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"address","name":"checkpointer","type":"address"},{"internalType":"bytes","name":"checkpointerData","type":"bytes"},{"internalType":"uint56","name":"checkpointerCheckpoint","type":"uint56"},{"internalType":"uint56","name":"checkpoint","type":"uint56"},{"internalType":"uint256","name":"signer1pk","type":"uint256"},{"internalType":"uint8","name":"threshold","type":"uint8"},{"internalType":"uint8","name":"weight","type":"uint8"}]}],"stateMutability":"nonpayable","type":"function","name":"test_checkpointer_higher_checkpoint_fail"},{"inputs":[{"internalType":"struct BaseSigTest.test_checkpointer_old_checkpoint_with_chain_params","name":"params","type":"tuple","components":[{"internalType":"struct Payload.Decoded","name":"payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"address","name":"checkpointer","type":"address"},{"internalType":"bytes","name":"checkpointerData","type":"bytes"},{"internalType":"uint256","name":"signerPk1","type":"uint256"},{"internalType":"uint256","name":"signerPk2","type":"uint256"},{"internalType":"uint56","name":"checkpoint1","type":"uint56"},{"internalType":"uint56","name":"checkpoint2","type":"uint56"},{"internalType":"uint56","name":"oldCheckpoint","type":"uint56"},{"internalType":"bytes32","name":"ignoredImageHash","type":"bytes32"}]}],"stateMutability":"nonpayable","type":"function","name":"test_checkpointer_old_checkpoint_with_chain"},{"inputs":[{"internalType":"struct BaseSigTest.test_checkpointer_past_with_chain_params","name":"params","type":"tuple","components":[{"internalType":"struct Payload.Decoded","name":"payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"address","name":"checkpointer","type":"address"},{"internalType":"bytes","name":"checkpointerData","type":"bytes"},{"internalType":"uint256","name":"signerPk1","type":"uint256"},{"internalType":"uint256","name":"signerPk2","type":"uint256"},{"internalType":"uint56","name":"checkpoint1","type":"uint56"},{"internalType":"uint56","name":"checkpoint2","type":"uint56"}]}],"stateMutability":"nonpayable","type":"function","name":"test_checkpointer_past_with_chain"},{"inputs":[{"internalType":"struct BaseSigTest.test_checkpointer_unused_snapshot_chain_params_fail","name":"params","type":"tuple","components":[{"internalType":"struct Payload.Decoded","name":"payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"address","name":"checkpointer","type":"address"},{"internalType":"bytes","name":"checkpointerData","type":"bytes"},{"internalType":"uint256","name":"signerPk1","type":"uint256"},{"internalType":"uint256","name":"signerPk2","type":"uint256"},{"internalType":"uint56","name":"checkpoint1","type":"uint56"},{"internalType":"uint56","name":"checkpoint2","type":"uint56"},{"internalType":"uint56","name":"snapshotCheckpoint","type":"uint56"},{"internalType":"bytes32","name":"snapshotImageHash","type":"bytes32"}]}],"stateMutability":"nonpayable","type":"function","name":"test_checkpointer_unused_snapshot_chain_fail"},{"inputs":[{"internalType":"struct BaseSigTest.test_recover_anyAddressSubdigest_params","name":"params","type":"tuple","components":[{"internalType":"struct Payload.Decoded","name":"payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"struct BaseSigTest.AddressWeightPair[]","name":"prefix","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint8","name":"weight","type":"uint8"}]},{"internalType":"struct BaseSigTest.AddressWeightPair[]","name":"suffix","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint8","name":"weight","type":"uint8"}]},{"internalType":"uint16","name":"threshold","type":"uint16"},{"internalType":"uint56","name":"checkpoint","type":"uint56"}]}],"stateMutability":"nonpayable","type":"function","name":"test_recover_anyAddressSubdigest"},{"inputs":[{"internalType":"struct BaseSigTest.test_recover_chained_low_weight_fail_params","name":"params","type":"tuple","components":[{"internalType":"struct Payload.Decoded","name":"payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"uint256","name":"threshold","type":"uint256"},{"internalType":"uint256","name":"weight","type":"uint256"},{"internalType":"uint256","name":"signer1pk","type":"uint256"},{"internalType":"uint256","name":"signer2pk","type":"uint256"},{"internalType":"uint256","name":"signer3pk","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"test_recover_chained_low_weight_fail"},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_finalPayload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]}],"stateMutability":"nonpayable","type":"function","name":"test_recover_chained_signature_single_case"},{"inputs":[{"internalType":"struct BaseSigTest.test_recover_chained_wrong_checkpoint_order_fail_params","name":"params","type":"tuple","components":[{"internalType":"struct Payload.Decoded","name":"payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"uint256","name":"signer1pk","type":"uint256"},{"internalType":"uint256","name":"signer2pk","type":"uint256"},{"internalType":"uint256","name":"signer3pk","type":"uint256"},{"internalType":"uint256","name":"checkpoint1","type":"uint256"},{"internalType":"uint256","name":"checkpoint2","type":"uint256"},{"internalType":"uint256","name":"checkpoint3","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"test_recover_chained_wrong_checkpoint_order_fail"},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"uint8","name":"checkpointSize","type":"uint8"},{"internalType":"uint8","name":"thresholdSize","type":"uint8"},{"internalType":"uint8","name":"invalidFlag","type":"uint8"}],"stateMutability":"nonpayable","type":"function","name":"test_recover_invalid_signature_flag"},{"inputs":[{"internalType":"struct BaseSigTest.test_recover_nested_config_params","name":"params","type":"tuple","components":[{"internalType":"struct BaseSigTest.AddressWeightPair[]","name":"prefix","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint8","name":"weight","type":"uint8"}]},{"internalType":"struct BaseSigTest.AddressWeightPair[]","name":"suffix","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint8","name":"weight","type":"uint8"}]},{"internalType":"struct BaseSigTest.AddressWeightPair[]","name":"nestedPrefix","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint8","name":"weight","type":"uint8"}]},{"internalType":"struct BaseSigTest.AddressWeightPair[]","name":"nestedSuffix","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint8","name":"weight","type":"uint8"}]},{"internalType":"struct Payload.Decoded","name":"payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"uint16","name":"threshold","type":"uint16"},{"internalType":"uint56","name":"checkpoint","type":"uint56"},{"internalType":"uint16","name":"internalThreshold","type":"uint16"},{"internalType":"uint8","name":"externalWeight","type":"uint8"},{"internalType":"uint8","name":"weight","type":"uint8"},{"internalType":"uint256","name":"pk","type":"uint256"},{"internalType":"bool","name":"useEthSign","type":"bool"}]}],"stateMutability":"nonpayable","type":"function","name":"test_recover_nested_config"},{"inputs":[{"internalType":"struct BaseSigTest.test_recover_one_1271_invalid_signature_bad_return_fail_params","name":"params","type":"tuple","components":[{"internalType":"struct BaseSigTest.AddressWeightPair[]","name":"prefix","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint8","name":"weight","type":"uint8"}]},{"internalType":"struct BaseSigTest.AddressWeightPair[]","name":"suffix","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint8","name":"weight","type":"uint8"}]},{"internalType":"struct Payload.Decoded","name":"payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"uint16","name":"threshold","type":"uint16"},{"internalType":"uint56","name":"checkpoint","type":"uint56"},{"internalType":"uint8","name":"weight","type":"uint8"},{"internalType":"address","name":"signer","type":"address"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes4","name":"bad4Bytes","type":"bytes4"}]}],"stateMutability":"nonpayable","type":"function","name":"test_recover_one_1271_invalid_signature_bad_return_fail"},{"inputs":[{"internalType":"struct BaseSigTest.test_recover_one_1271_invalid_signature_fail_params","name":"params","type":"tuple","components":[{"internalType":"struct BaseSigTest.AddressWeightPair[]","name":"prefix","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint8","name":"weight","type":"uint8"}]},{"internalType":"struct BaseSigTest.AddressWeightPair[]","name":"suffix","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint8","name":"weight","type":"uint8"}]},{"internalType":"struct Payload.Decoded","name":"payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"uint16","name":"threshold","type":"uint16"},{"internalType":"uint56","name":"checkpoint","type":"uint56"},{"internalType":"uint8","name":"weight","type":"uint8"},{"internalType":"address","name":"signer","type":"address"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"revertFromSigner","type":"bytes"}]}],"stateMutability":"nonpayable","type":"function","name":"test_recover_one_1271_invalid_signature_revert_fail"},{"inputs":[{"internalType":"struct BaseSigTest.test_recover_one_1271_signer_params","name":"params","type":"tuple","components":[{"internalType":"struct BaseSigTest.AddressWeightPair[]","name":"prefix","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint8","name":"weight","type":"uint8"}]},{"internalType":"struct BaseSigTest.AddressWeightPair[]","name":"suffix","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint8","name":"weight","type":"uint8"}]},{"internalType":"struct Payload.Decoded","name":"payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"uint16","name":"threshold","type":"uint16"},{"internalType":"uint56","name":"checkpoint","type":"uint56"},{"internalType":"uint8","name":"weight","type":"uint8"},{"internalType":"address","name":"signer","type":"address"},{"internalType":"bytes","name":"signature","type":"bytes"}]}],"stateMutability":"nonpayable","type":"function","name":"test_recover_one_1271_signer"},{"inputs":[{"internalType":"struct BaseSigTest.test_recover_one_sapient_signer_params","name":"params","type":"tuple","components":[{"internalType":"struct BaseSigTest.AddressWeightPair[]","name":"prefix","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint8","name":"weight","type":"uint8"}]},{"internalType":"struct BaseSigTest.AddressWeightPair[]","name":"suffix","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint8","name":"weight","type":"uint8"}]},{"internalType":"struct Payload.Decoded","name":"payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"uint16","name":"threshold","type":"uint16"},{"internalType":"uint56","name":"checkpoint","type":"uint56"},{"internalType":"uint8","name":"weight","type":"uint8"},{"internalType":"address","name":"signer","type":"address"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes32","name":"sapientImageHash","type":"bytes32"},{"internalType":"bool","name":"isCompact","type":"bool"}]}],"stateMutability":"nonpayable","type":"function","name":"test_recover_one_sapient_signer"},{"inputs":[{"internalType":"struct BaseSigTest.test_recover_one_signer_params","name":"params","type":"tuple","components":[{"internalType":"struct BaseSigTest.AddressWeightPair[]","name":"prefix","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint8","name":"weight","type":"uint8"}]},{"internalType":"struct BaseSigTest.AddressWeightPair[]","name":"suffix","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint8","name":"weight","type":"uint8"}]},{"internalType":"struct Payload.Decoded","name":"payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"uint16","name":"threshold","type":"uint16"},{"internalType":"uint56","name":"checkpoint","type":"uint56"},{"internalType":"uint8","name":"weight","type":"uint8"},{"internalType":"uint256","name":"pk","type":"uint256"},{"internalType":"bool","name":"useEthSign","type":"bool"}]}],"stateMutability":"nonpayable","type":"function","name":"test_recover_one_signer"},{"inputs":[{"internalType":"uint256","name":"_maxDepth","type":"uint256"},{"internalType":"uint256","name":"_seed","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"test_recover_random_config_unsigned"},{"inputs":[{"internalType":"uint256","name":"_seed","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"test_recover_random_config_unsigned_skewed_left"},{"inputs":[{"internalType":"uint256","name":"_seed","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"test_recover_random_config_unsigned_skewed_right"},{"inputs":[{"internalType":"struct BaseSigTest.test_recover_subdigest_params","name":"params","type":"tuple","components":[{"internalType":"struct Payload.Decoded","name":"payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"struct BaseSigTest.AddressWeightPair[]","name":"prefix","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint8","name":"weight","type":"uint8"}]},{"internalType":"struct BaseSigTest.AddressWeightPair[]","name":"suffix","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint8","name":"weight","type":"uint8"}]},{"internalType":"uint16","name":"threshold","type":"uint16"},{"internalType":"uint56","name":"checkpoint","type":"uint56"}]}],"stateMutability":"nonpayable","type":"function","name":"test_recover_subdigest"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/modules/BaseSig.t.sol":"BaseSigTest"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/auth/BaseSig.sol":{"keccak256":"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa","urls":["bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8","dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3"],"license":"Apache-2.0"},"src/modules/interfaces/ICheckpointer.sol":{"keccak256":"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513","urls":["bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1","dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t"],"license":"Apache-2.0"},"src/modules/interfaces/IERC1271.sol":{"keccak256":"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9","urls":["bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b","dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF"],"license":"Apache-2.0"},"src/modules/interfaces/ISapient.sol":{"keccak256":"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359","urls":["bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489","dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"src/utils/LibOptim.sol":{"keccak256":"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde","urls":["bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81","dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x"],"license":"Apache-2.0"},"test/modules/BaseSig.t.sol":{"keccak256":"0x11437c537dcc74468343003a2d3555dfb1299c0ad9c1d11379f6ce9f8aee9c3a","urls":["bzz-raw://679667d1d960e7c6b47a07561cc76e6ce3c32309c3ac961b16b603434e936773","dweb:/ipfs/QmRYS4PLNmN1rAbe9SPVbzJNbUdnYR7uyAQY3S8UR24VNZ"],"license":"Apache-2.0"},"test/utils/PrimitivesRPC.sol":{"keccak256":"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe","urls":["bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe","dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv"],"license":"Apache-2.0"},"test/utils/TestUtils.sol":{"keccak256":"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79","urls":["bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad","dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa"],"license":"Apache-2.0"}},"version":1},"id":88} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Calls.sol/Calls.json b/contracts/artifacts/wallet-contracts-v3/Calls.sol/Calls.json new file mode 100644 index 00000000..6fa567f1 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Calls.sol/Calls.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"execute","inputs":[{"name":"_payload","type":"bytes","internalType":"bytes"},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"getStaticSignature","inputs":[{"name":"_hash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"isValidSignature","inputs":[{"name":"_hash","type":"bytes32","internalType":"bytes32"},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"view"},{"type":"function","name":"readNonce","inputs":[{"name":"_space","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"recoverPartialSignature","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"threshold","type":"uint256","internalType":"uint256"},{"name":"weight","type":"uint256","internalType":"uint256"},{"name":"isValidImage","type":"bool","internalType":"bool"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"checkpoint","type":"uint256","internalType":"uint256"},{"name":"opHash","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"recoverSapientSignature","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"selfExecute","inputs":[{"name":"_payload","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"setStaticSignature","inputs":[{"name":"_hash","type":"bytes32","internalType":"bytes32"},{"name":"_address","type":"address","internalType":"address"},{"name":"_timestamp","type":"uint96","internalType":"uint96"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateImageHash","inputs":[{"name":"_imageHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"CallAborted","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"_returnData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"CallFailed","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"_returnData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"CallSkipped","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"CallSucceeded","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"NonceChange","inputs":[{"name":"_space","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"_newNonce","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"StaticSignatureSet","inputs":[{"name":"_hash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_address","type":"address","indexed":false,"internalType":"address"},{"name":"_timestamp","type":"uint96","indexed":false,"internalType":"uint96"}],"anonymous":false},{"type":"error","name":"BadNonce","inputs":[{"name":"_space","type":"uint256","internalType":"uint256"},{"name":"_provided","type":"uint256","internalType":"uint256"},{"name":"_current","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidERC1271Signature","inputs":[{"name":"_opHash","type":"bytes32","internalType":"bytes32"},{"name":"_signer","type":"address","internalType":"address"},{"name":"_signature","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"InvalidKind","inputs":[{"name":"kind","type":"uint8","internalType":"uint8"}]},{"type":"error","name":"InvalidSapientSignature","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"InvalidSignature","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"InvalidSignatureFlag","inputs":[{"name":"_flag","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidSignatureWeight","inputs":[{"name":"_threshold","type":"uint256","internalType":"uint256"},{"name":"_weight","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidStaticSignatureExpired","inputs":[{"name":"_opHash","type":"bytes32","internalType":"bytes32"},{"name":"_expires","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidStaticSignatureWrongCaller","inputs":[{"name":"_opHash","type":"bytes32","internalType":"bytes32"},{"name":"_caller","type":"address","internalType":"address"},{"name":"_expectedCaller","type":"address","internalType":"address"}]},{"type":"error","name":"LowWeightChainedSignature","inputs":[{"name":"_signature","type":"bytes","internalType":"bytes"},{"name":"_threshold","type":"uint256","internalType":"uint256"},{"name":"_weight","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"NotEnoughGas","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_index","type":"uint256","internalType":"uint256"},{"name":"_gasLeft","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"OnlySelf","inputs":[{"name":"_sender","type":"address","internalType":"address"}]},{"type":"error","name":"Reverted","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_index","type":"uint256","internalType":"uint256"},{"name":"_returnData","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"UnusedSnapshot","inputs":[{"name":"_snapshot","type":"tuple","internalType":"struct Snapshot","components":[{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"checkpoint","type":"uint256","internalType":"uint256"}]}]},{"type":"error","name":"WrongChainedCheckpointOrder","inputs":[{"name":"_nextCheckpoint","type":"uint256","internalType":"uint256"},{"name":"_checkpoint","type":"uint256","internalType":"uint256"}]}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"execute(bytes,bytes)":"1f6a1eb9","getStaticSignature(bytes32)":"92dcb3fc","isValidSignature(bytes32,bytes)":"1626ba7e","readNonce(uint256)":"8c3f5563","recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":"ad55366b","recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":"13792a4a","selfExecute(bytes)":"6ea44577","setStaticSignature(bytes32,address,uint96)":"f727ef1c","updateImageHash(bytes32)":"29561426"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_provided\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_current\",\"type\":\"uint256\"}],\"name\":\"BadNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_signer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"InvalidERC1271Signature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"}],\"name\":\"InvalidKind\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"InvalidSapientSignature\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"InvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_flag\",\"type\":\"uint256\"}],\"name\":\"InvalidSignatureFlag\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_weight\",\"type\":\"uint256\"}],\"name\":\"InvalidSignatureWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_expires\",\"type\":\"uint256\"}],\"name\":\"InvalidStaticSignatureExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_expectedCaller\",\"type\":\"address\"}],\"name\":\"InvalidStaticSignatureWrongCaller\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_weight\",\"type\":\"uint256\"}],\"name\":\"LowWeightChainedSignature\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_gasLeft\",\"type\":\"uint256\"}],\"name\":\"NotEnoughGas\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_returnData\",\"type\":\"bytes\"}],\"name\":\"Reverted\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"checkpoint\",\"type\":\"uint256\"}],\"internalType\":\"struct Snapshot\",\"name\":\"_snapshot\",\"type\":\"tuple\"}],\"name\":\"UnusedSnapshot\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nextCheckpoint\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_checkpoint\",\"type\":\"uint256\"}],\"name\":\"WrongChainedCheckpointOrder\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_returnData\",\"type\":\"bytes\"}],\"name\":\"CallAborted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_returnData\",\"type\":\"bytes\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"CallSkipped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"CallSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_space\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_newNonce\",\"type\":\"uint256\"}],\"name\":\"NonceChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"_timestamp\",\"type\":\"uint96\"}],\"name\":\"StaticSignatureSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"getStaticSignature\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_space\",\"type\":\"uint256\"}],\"name\":\"readNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"recoverPartialSignature\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isValidImage\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"checkpoint\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"opHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"recoverSapientSignature\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"}],\"name\":\"selfExecute\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"_timestamp\",\"type\":\"uint96\"}],\"name\":\"setStaticSignature\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_imageHash\",\"type\":\"bytes32\"}],\"name\":\"updateImageHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Agustin Aguilar, Michael Standen, William Hua\",\"kind\":\"dev\",\"methods\":{\"execute(bytes,bytes)\":{\"params\":{\"_payload\":\"The payload\",\"_signature\":\"The signature\"}},\"getStaticSignature(bytes32)\":{\"params\":{\"_hash\":\"The hash to get the static signature for\"},\"returns\":{\"_0\":\"address The address associated with the static signature\",\"_1\":\"timestamp The timestamp of the static signature\"}},\"isValidSignature(bytes32,bytes)\":{\"details\":\"MUST return the correct magic value if the signature provided is valid for the provided hash > The bytes4 magic value to return when signature is valid is 0x1626ba7e : bytes4(keccak256(\\\"isValidSignature(bytes32,bytes)\\\") > This function MAY modify Ethereum's state\",\"params\":{\"_hash\":\"keccak256 hash that was signed\",\"_signature\":\"Signature byte array associated with _data\"},\"returns\":{\"_0\":\"Magic value 0x1626ba7e if the signature is valid and 0x0 otherwise\"}},\"readNonce(uint256)\":{\"params\":{\"_space\":\"The space\"},\"returns\":{\"_0\":\"nonce The nonce\"}},\"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"params\":{\"_payload\":\"The payload\",\"_signature\":\"The signature to recover\"},\"returns\":{\"checkpoint\":\"The checkpoint identifier\",\"imageHash\":\"The derived image hash\",\"isValidImage\":\"Whether the image hash is valid\",\"opHash\":\"The hash of the payload\",\"threshold\":\"The signature threshold\",\"weight\":\"The derived weight\"}},\"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"params\":{\"payload\":\"The payload to recover the signature from\",\"signature\":\"The signature to recover the image hash from\"},\"returns\":{\"_0\":\"The recovered image hash\"}},\"selfExecute(bytes)\":{\"details\":\"Callable only by the contract itself\",\"params\":{\"_payload\":\"The payload\"}},\"setStaticSignature(bytes32,address,uint96)\":{\"details\":\"Only callable by the wallet itself\",\"params\":{\"_address\":\"The address to associate with the static signature\",\"_hash\":\"The hash to set the static signature for\",\"_timestamp\":\"The timestamp of the static signature\"}},\"updateImageHash(bytes32)\":{\"details\":\"Only callable by the wallet itself\",\"params\":{\"_imageHash\":\"The new image hash\"}}},\"title\":\"Calls\",\"version\":1},\"userdoc\":{\"errors\":{\"BadNonce(uint256,uint256,uint256)\":[{\"notice\":\"Error thrown when the nonce is bad\"}],\"InvalidERC1271Signature(bytes32,address,bytes)\":[{\"notice\":\"Error thrown when the ERC1271 signature is invalid\"}],\"InvalidKind(uint8)\":[{\"notice\":\"Error thrown when the kind is invalid\"}],\"InvalidSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":[{\"notice\":\"Error thrown when the sapient signature is invalid\"}],\"InvalidSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":[{\"notice\":\"Error thrown when a signature is invalid\"}],\"InvalidSignatureFlag(uint256)\":[{\"notice\":\"Error thrown when the signature flag is invalid\"}],\"InvalidSignatureWeight(uint256,uint256)\":[{\"notice\":\"Error thrown when the signature weight is invalid\"}],\"InvalidStaticSignatureExpired(bytes32,uint256)\":[{\"notice\":\"Error thrown when the static signature has expired\"}],\"InvalidStaticSignatureWrongCaller(bytes32,address,address)\":[{\"notice\":\"Error thrown when the static signature has the wrong caller\"}],\"LowWeightChainedSignature(bytes,uint256,uint256)\":[{\"notice\":\"Error thrown when the weight is too low for a chained signature\"}],\"NotEnoughGas((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint256,uint256)\":[{\"notice\":\"Error thrown when there is not enough gas\"}],\"OnlySelf(address)\":[{\"notice\":\"Error thrown when the caller is not the same as the contract\"}],\"Reverted((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint256,bytes)\":[{\"notice\":\"Error thrown when a call reverts\"}],\"UnusedSnapshot((bytes32,uint256))\":[{\"notice\":\"Error thrown when the snapshot is unused\"}],\"WrongChainedCheckpointOrder(uint256,uint256)\":[{\"notice\":\"Error thrown when the checkpoint order is wrong\"}]},\"events\":{\"CallAborted(bytes32,uint256,bytes)\":{\"notice\":\"Emitted when a call is aborted\"},\"CallFailed(bytes32,uint256,bytes)\":{\"notice\":\"Emitted when a call fails\"},\"CallSkipped(bytes32,uint256)\":{\"notice\":\"Emitted when a call is skipped\"},\"CallSucceeded(bytes32,uint256)\":{\"notice\":\"Emitted when a call succeeds\"},\"NonceChange(uint256,uint256)\":{\"notice\":\"Emitted when the nonce is changed\"},\"StaticSignatureSet(bytes32,address,uint96)\":{\"notice\":\"Event emitted when a static signature is set\"}},\"kind\":\"user\",\"methods\":{\"execute(bytes,bytes)\":{\"notice\":\"Execute a call\"},\"getStaticSignature(bytes32)\":{\"notice\":\"Get the static signature for a specific hash\"},\"isValidSignature(bytes32,bytes)\":{\"notice\":\"Verifies whether the provided signature is valid with respect to the provided hash\"},\"readNonce(uint256)\":{\"notice\":\"Read the nonce\"},\"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"notice\":\"Recover the partial signature\"},\"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"notice\":\"Recovers the image hash of a given signature\"},\"selfExecute(bytes)\":{\"notice\":\"Execute a call\"},\"setStaticSignature(bytes32,address,uint96)\":{\"notice\":\"Set the static signature for a specific hash\"},\"updateImageHash(bytes32)\":{\"notice\":\"Update the image hash\"}},\"notice\":\"Contract for executing calls\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/modules/Calls.sol\":\"Calls\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/modules/Calls.sol\":{\"keccak256\":\"0xcd0d38d0fd248e4443032dede2b8892ea0ca7e55538cd54082830f6b98d8edb1\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://617bb6d0724b18f3d77347cc454a57c1c916a0818a592552bd7fa226aa41a306\",\"dweb:/ipfs/Qmeet85Ux6cKq9JmC25JnTzFnRrgDpkyRik2svZLWt4fov\"]},\"src/modules/Nonce.sol\":{\"keccak256\":\"0x56fbf6dc9b34ab60ae8a32ffb6f583c003bb8f4a5223ce704e982400fa403fab\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://492f53628633b862702cf8f9b726067a722c94028133a8a4c4fcf3d0e73ad803\",\"dweb:/ipfs/QmTHNy4XbH47YZaqKDpknb5aApjRH9HVAREHN7N5vEFWEV\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/Storage.sol\":{\"keccak256\":\"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da\",\"dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn\"]},\"src/modules/auth/BaseAuth.sol\":{\"keccak256\":\"0xbf2e40def03fcb5f4a5129b2f5803e21951325b92e00126cbe1427b7c25cfefd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://b560905fcc4b957d27c2abed78a1e82529c89fa472e91b3d108fbfd91aa7c3f7\",\"dweb:/ipfs/QmRjLLtTWE6dFX2kBQCgLz7ossfMxhAFgDC8Jx9XuGL6Wy\"]},\"src/modules/auth/BaseSig.sol\":{\"keccak256\":\"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8\",\"dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3\"]},\"src/modules/auth/SelfAuth.sol\":{\"keccak256\":\"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42\",\"dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W\"]},\"src/modules/interfaces/IAuth.sol\":{\"keccak256\":\"0xf6fa30af2ec91d5fbeac17c9b1f2aa73b7883c9ac98745605007e57666394b91\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://6e90a87978519462f9612f4a17e38fddc1c7bcf700ff834a1de7dce326f30353\",\"dweb:/ipfs/QmXmWAsRRK6t4jPs4VcXrouyokxdALM28D3odX7ub48WEp\"]},\"src/modules/interfaces/ICheckpointer.sol\":{\"keccak256\":\"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1\",\"dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t\"]},\"src/modules/interfaces/IDelegatedExtension.sol\":{\"keccak256\":\"0xa2ae897e90fd70dd4a9e172bc04d019ba9c512e72c2df65fcb6daf87dd5ceb90\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://cdf4b7c3dfb0aef6c9dbe8b2a0542018dc756ef2252d7101bcb3186192da0a11\",\"dweb:/ipfs/QmPHCVu1DJ7fBrPBYA5y3hoF3a3XFEBwYCZ1ErGaxPhcYL\"]},\"src/modules/interfaces/IERC1271.sol\":{\"keccak256\":\"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b\",\"dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF\"]},\"src/modules/interfaces/IPartialAuth.sol\":{\"keccak256\":\"0x0d1aa021615d8e90696e71a9468331457a1babfa2ffe169654b7456e5bcb7a73\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://bbacd149a6358ab0d4b9c588d2e3a55fc71ed4723269150d7b91ca70092f6519\",\"dweb:/ipfs/QmUSwtrYCrRcRFsy5rCzdMPrw1FCU7ZoeXdsW6kK9yc8FK\"]},\"src/modules/interfaces/ISapient.sol\":{\"keccak256\":\"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489\",\"dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"src/utils/LibOptim.sol\":{\"keccak256\":\"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81\",\"dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint256","name":"_space","type":"uint256"},{"internalType":"uint256","name":"_provided","type":"uint256"},{"internalType":"uint256","name":"_current","type":"uint256"}],"type":"error","name":"BadNonce"},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32"},{"internalType":"address","name":"_signer","type":"address"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"type":"error","name":"InvalidERC1271Signature"},{"inputs":[{"internalType":"uint8","name":"kind","type":"uint8"}],"type":"error","name":"InvalidKind"},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"type":"error","name":"InvalidSapientSignature"},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"type":"error","name":"InvalidSignature"},{"inputs":[{"internalType":"uint256","name":"_flag","type":"uint256"}],"type":"error","name":"InvalidSignatureFlag"},{"inputs":[{"internalType":"uint256","name":"_threshold","type":"uint256"},{"internalType":"uint256","name":"_weight","type":"uint256"}],"type":"error","name":"InvalidSignatureWeight"},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32"},{"internalType":"uint256","name":"_expires","type":"uint256"}],"type":"error","name":"InvalidStaticSignatureExpired"},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32"},{"internalType":"address","name":"_caller","type":"address"},{"internalType":"address","name":"_expectedCaller","type":"address"}],"type":"error","name":"InvalidStaticSignatureWrongCaller"},{"inputs":[{"internalType":"bytes","name":"_signature","type":"bytes"},{"internalType":"uint256","name":"_threshold","type":"uint256"},{"internalType":"uint256","name":"_weight","type":"uint256"}],"type":"error","name":"LowWeightChainedSignature"},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_gasLeft","type":"uint256"}],"type":"error","name":"NotEnoughGas"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"}],"type":"error","name":"OnlySelf"},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"bytes","name":"_returnData","type":"bytes"}],"type":"error","name":"Reverted"},{"inputs":[{"internalType":"struct Snapshot","name":"_snapshot","type":"tuple","components":[{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"uint256","name":"checkpoint","type":"uint256"}]}],"type":"error","name":"UnusedSnapshot"},{"inputs":[{"internalType":"uint256","name":"_nextCheckpoint","type":"uint256"},{"internalType":"uint256","name":"_checkpoint","type":"uint256"}],"type":"error","name":"WrongChainedCheckpointOrder"},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_index","type":"uint256","indexed":false},{"internalType":"bytes","name":"_returnData","type":"bytes","indexed":false}],"type":"event","name":"CallAborted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_index","type":"uint256","indexed":false},{"internalType":"bytes","name":"_returnData","type":"bytes","indexed":false}],"type":"event","name":"CallFailed","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_index","type":"uint256","indexed":false}],"type":"event","name":"CallSkipped","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_index","type":"uint256","indexed":false}],"type":"event","name":"CallSucceeded","anonymous":false},{"inputs":[{"internalType":"uint256","name":"_space","type":"uint256","indexed":false},{"internalType":"uint256","name":"_newNonce","type":"uint256","indexed":false}],"type":"event","name":"NonceChange","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32","indexed":false},{"internalType":"address","name":"_address","type":"address","indexed":false},{"internalType":"uint96","name":"_timestamp","type":"uint96","indexed":false}],"type":"event","name":"StaticSignatureSet","anonymous":false},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"payable","type":"function","name":"execute"},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getStaticSignature","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"view","type":"function","name":"isValidSignature","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"uint256","name":"_space","type":"uint256"}],"stateMutability":"view","type":"function","name":"readNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"view","type":"function","name":"recoverPartialSignature","outputs":[{"internalType":"uint256","name":"threshold","type":"uint256"},{"internalType":"uint256","name":"weight","type":"uint256"},{"internalType":"bool","name":"isValidImage","type":"bool"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"uint256","name":"checkpoint","type":"uint256"},{"internalType":"bytes32","name":"opHash","type":"bytes32"}]},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"view","type":"function","name":"recoverSapientSignature","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"}],"stateMutability":"payable","type":"function","name":"selfExecute"},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint96","name":"_timestamp","type":"uint96"}],"stateMutability":"nonpayable","type":"function","name":"setStaticSignature"},{"inputs":[{"internalType":"bytes32","name":"_imageHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"updateImageHash"}],"devdoc":{"kind":"dev","methods":{"execute(bytes,bytes)":{"params":{"_payload":"The payload","_signature":"The signature"}},"getStaticSignature(bytes32)":{"params":{"_hash":"The hash to get the static signature for"},"returns":{"_0":"address The address associated with the static signature","_1":"timestamp The timestamp of the static signature"}},"isValidSignature(bytes32,bytes)":{"details":"MUST return the correct magic value if the signature provided is valid for the provided hash > The bytes4 magic value to return when signature is valid is 0x1626ba7e : bytes4(keccak256(\"isValidSignature(bytes32,bytes)\") > This function MAY modify Ethereum's state","params":{"_hash":"keccak256 hash that was signed","_signature":"Signature byte array associated with _data"},"returns":{"_0":"Magic value 0x1626ba7e if the signature is valid and 0x0 otherwise"}},"readNonce(uint256)":{"params":{"_space":"The space"},"returns":{"_0":"nonce The nonce"}},"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"params":{"_payload":"The payload","_signature":"The signature to recover"},"returns":{"checkpoint":"The checkpoint identifier","imageHash":"The derived image hash","isValidImage":"Whether the image hash is valid","opHash":"The hash of the payload","threshold":"The signature threshold","weight":"The derived weight"}},"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"params":{"payload":"The payload to recover the signature from","signature":"The signature to recover the image hash from"},"returns":{"_0":"The recovered image hash"}},"selfExecute(bytes)":{"details":"Callable only by the contract itself","params":{"_payload":"The payload"}},"setStaticSignature(bytes32,address,uint96)":{"details":"Only callable by the wallet itself","params":{"_address":"The address to associate with the static signature","_hash":"The hash to set the static signature for","_timestamp":"The timestamp of the static signature"}},"updateImageHash(bytes32)":{"details":"Only callable by the wallet itself","params":{"_imageHash":"The new image hash"}}},"version":1},"userdoc":{"kind":"user","methods":{"execute(bytes,bytes)":{"notice":"Execute a call"},"getStaticSignature(bytes32)":{"notice":"Get the static signature for a specific hash"},"isValidSignature(bytes32,bytes)":{"notice":"Verifies whether the provided signature is valid with respect to the provided hash"},"readNonce(uint256)":{"notice":"Read the nonce"},"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"notice":"Recover the partial signature"},"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"notice":"Recovers the image hash of a given signature"},"selfExecute(bytes)":{"notice":"Execute a call"},"setStaticSignature(bytes32,address,uint96)":{"notice":"Set the static signature for a specific hash"},"updateImageHash(bytes32)":{"notice":"Update the image hash"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/modules/Calls.sol":"Calls"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/modules/Calls.sol":{"keccak256":"0xcd0d38d0fd248e4443032dede2b8892ea0ca7e55538cd54082830f6b98d8edb1","urls":["bzz-raw://617bb6d0724b18f3d77347cc454a57c1c916a0818a592552bd7fa226aa41a306","dweb:/ipfs/Qmeet85Ux6cKq9JmC25JnTzFnRrgDpkyRik2svZLWt4fov"],"license":"Apache-2.0"},"src/modules/Nonce.sol":{"keccak256":"0x56fbf6dc9b34ab60ae8a32ffb6f583c003bb8f4a5223ce704e982400fa403fab","urls":["bzz-raw://492f53628633b862702cf8f9b726067a722c94028133a8a4c4fcf3d0e73ad803","dweb:/ipfs/QmTHNy4XbH47YZaqKDpknb5aApjRH9HVAREHN7N5vEFWEV"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/Storage.sol":{"keccak256":"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f","urls":["bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da","dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn"],"license":"Apache-2.0"},"src/modules/auth/BaseAuth.sol":{"keccak256":"0xbf2e40def03fcb5f4a5129b2f5803e21951325b92e00126cbe1427b7c25cfefd","urls":["bzz-raw://b560905fcc4b957d27c2abed78a1e82529c89fa472e91b3d108fbfd91aa7c3f7","dweb:/ipfs/QmRjLLtTWE6dFX2kBQCgLz7ossfMxhAFgDC8Jx9XuGL6Wy"],"license":"Apache-2.0"},"src/modules/auth/BaseSig.sol":{"keccak256":"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa","urls":["bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8","dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3"],"license":"Apache-2.0"},"src/modules/auth/SelfAuth.sol":{"keccak256":"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c","urls":["bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42","dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W"],"license":"Apache-2.0"},"src/modules/interfaces/IAuth.sol":{"keccak256":"0xf6fa30af2ec91d5fbeac17c9b1f2aa73b7883c9ac98745605007e57666394b91","urls":["bzz-raw://6e90a87978519462f9612f4a17e38fddc1c7bcf700ff834a1de7dce326f30353","dweb:/ipfs/QmXmWAsRRK6t4jPs4VcXrouyokxdALM28D3odX7ub48WEp"],"license":"Apache-2.0"},"src/modules/interfaces/ICheckpointer.sol":{"keccak256":"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513","urls":["bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1","dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t"],"license":"Apache-2.0"},"src/modules/interfaces/IDelegatedExtension.sol":{"keccak256":"0xa2ae897e90fd70dd4a9e172bc04d019ba9c512e72c2df65fcb6daf87dd5ceb90","urls":["bzz-raw://cdf4b7c3dfb0aef6c9dbe8b2a0542018dc756ef2252d7101bcb3186192da0a11","dweb:/ipfs/QmPHCVu1DJ7fBrPBYA5y3hoF3a3XFEBwYCZ1ErGaxPhcYL"],"license":"Apache-2.0"},"src/modules/interfaces/IERC1271.sol":{"keccak256":"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9","urls":["bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b","dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF"],"license":"Apache-2.0"},"src/modules/interfaces/IPartialAuth.sol":{"keccak256":"0x0d1aa021615d8e90696e71a9468331457a1babfa2ffe169654b7456e5bcb7a73","urls":["bzz-raw://bbacd149a6358ab0d4b9c588d2e3a55fc71ed4723269150d7b91ca70092f6519","dweb:/ipfs/QmUSwtrYCrRcRFsy5rCzdMPrw1FCU7ZoeXdsW6kK9yc8FK"],"license":"Apache-2.0"},"src/modules/interfaces/ISapient.sol":{"keccak256":"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359","urls":["bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489","dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"src/utils/LibOptim.sol":{"keccak256":"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde","urls":["bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81","dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x"],"license":"Apache-2.0"}},"version":1},"id":43} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Calls.t.sol/CallsImp.json b/contracts/artifacts/wallet-contracts-v3/Calls.t.sol/CallsImp.json new file mode 100644 index 00000000..5d6fc015 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Calls.t.sol/CallsImp.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"execute","inputs":[{"name":"_payload","type":"bytes","internalType":"bytes"},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"expectedOpHash","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"expectedSignature","inputs":[],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"getStaticSignature","inputs":[{"name":"_hash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"isValidSignature","inputs":[{"name":"_hash","type":"bytes32","internalType":"bytes32"},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"view"},{"type":"function","name":"readNonce","inputs":[{"name":"_space","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"recoverPartialSignature","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"threshold","type":"uint256","internalType":"uint256"},{"name":"weight","type":"uint256","internalType":"uint256"},{"name":"isValidImage","type":"bool","internalType":"bool"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"checkpoint","type":"uint256","internalType":"uint256"},{"name":"opHash","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"recoverSapientSignature","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"selfExecute","inputs":[{"name":"_payload","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"setExpectedOpHash","inputs":[{"name":"_opHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setExpectedSignature","inputs":[{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setStaticSignature","inputs":[{"name":"_hash","type":"bytes32","internalType":"bytes32"},{"name":"_address","type":"address","internalType":"address"},{"name":"_timestamp","type":"uint96","internalType":"uint96"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateImageHash","inputs":[{"name":"_imageHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"writeNonce","inputs":[{"name":"_space","type":"uint256","internalType":"uint256"},{"name":"_nonce","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"CallAborted","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"_returnData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"CallFailed","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"_returnData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"CallSkipped","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"CallSucceeded","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"NonceChange","inputs":[{"name":"_space","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"_newNonce","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"StaticSignatureSet","inputs":[{"name":"_hash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_address","type":"address","indexed":false,"internalType":"address"},{"name":"_timestamp","type":"uint96","indexed":false,"internalType":"uint96"}],"anonymous":false},{"type":"error","name":"BadNonce","inputs":[{"name":"_space","type":"uint256","internalType":"uint256"},{"name":"_provided","type":"uint256","internalType":"uint256"},{"name":"_current","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidERC1271Signature","inputs":[{"name":"_opHash","type":"bytes32","internalType":"bytes32"},{"name":"_signer","type":"address","internalType":"address"},{"name":"_signature","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"InvalidKind","inputs":[{"name":"kind","type":"uint8","internalType":"uint8"}]},{"type":"error","name":"InvalidSapientSignature","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"InvalidSignature","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"InvalidSignatureFlag","inputs":[{"name":"_flag","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidSignatureWeight","inputs":[{"name":"_threshold","type":"uint256","internalType":"uint256"},{"name":"_weight","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidStaticSignatureExpired","inputs":[{"name":"_opHash","type":"bytes32","internalType":"bytes32"},{"name":"_expires","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidStaticSignatureWrongCaller","inputs":[{"name":"_opHash","type":"bytes32","internalType":"bytes32"},{"name":"_caller","type":"address","internalType":"address"},{"name":"_expectedCaller","type":"address","internalType":"address"}]},{"type":"error","name":"LowWeightChainedSignature","inputs":[{"name":"_signature","type":"bytes","internalType":"bytes"},{"name":"_threshold","type":"uint256","internalType":"uint256"},{"name":"_weight","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"NotEnoughGas","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_index","type":"uint256","internalType":"uint256"},{"name":"_gasLeft","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"OnlySelf","inputs":[{"name":"_sender","type":"address","internalType":"address"}]},{"type":"error","name":"Reverted","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_index","type":"uint256","internalType":"uint256"},{"name":"_returnData","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"UnusedSnapshot","inputs":[{"name":"_snapshot","type":"tuple","internalType":"struct Snapshot","components":[{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"checkpoint","type":"uint256","internalType":"uint256"}]}]},{"type":"error","name":"WrongChainedCheckpointOrder","inputs":[{"name":"_nextCheckpoint","type":"uint256","internalType":"uint256"},{"name":"_checkpoint","type":"uint256","internalType":"uint256"}]}],"bytecode":{"object":"0x60808060405234601557613188908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c806313792a4a146100f75780631626ba7e146100f25780631f6a1eb9146100ed5780632761e20a146100e857806329561426146100e357806336fd922d146100de578063650fb676146100d95780636ea44577146100d45780638c3f5563146100cf578063920316f6146100ca57806392dcb3fc146100c5578063ad55366b146100c0578063d7c4dd5a146100bb5763f727ef1c146100b657600080fd5b610e63565b610e15565b610c6c565b610bda565b610ba3565b610b5f565b610b30565b610af3565b6109ac565b6108fe565b6108c2565b610763565b6106db565b6105d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff82111761014757604052565b6100fc565b6040810190811067ffffffffffffffff82111761014757604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761014757604052565b604051906101b860e083610168565b565b604051906101b861012083610168565b359060ff821682036101d857565b600080fd5b359081151582036101d857565b67ffffffffffffffff81116101475760051b60200190565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101d857565b359073ffffffffffffffffffffffffffffffffffffffff821682036101d857565b92919267ffffffffffffffff8211610147576040519161028e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160184610168565b8294818452818301116101d8578281602093846000960137010152565b9080601f830112156101d8578160206102c693359101610246565b90565b81601f820112156101d8578035906102e0826101ea565b926102ee6040519485610168565b82845260208085019360051b830101918183116101d85760208101935b83851061031a57505050505090565b843567ffffffffffffffff81116101d857820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082860301126101d8576103616101a9565b9161036e60208301610225565b83526040820135602084015260608201359267ffffffffffffffff84116101d85760e0836103a38860208098819801016102ab565b6040840152608081013560608401526103be60a082016101dd565b60808401526103cf60c082016101dd565b60a0840152013560c082015281520194019361030b565b9080601f830112156101d85781356103fd816101ea565b9261040b6040519485610168565b81845260208085019260051b8201019283116101d857602001905b8282106104335750505090565b6020809161044084610225565b815201910190610426565b9181601f840112156101d85782359167ffffffffffffffff83116101d857602083818601950101116101d857565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126101d85760043567ffffffffffffffff81116101d8576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82850301126101d8576104eb6101ba565b906104f8816004016101ca565b8252610506602482016101dd565b6020830152604481013567ffffffffffffffff81116101d85784600461052e928401016102c9565b6040830152606481013560608301526084810135608083015260a481013567ffffffffffffffff81116101d85784600461056a928401016102ab565b60a083015260c481013560c083015260e481013560e083015261010481013567ffffffffffffffff81116101d857600485916105a79301016103e6565b610100820152916024359067ffffffffffffffff82116101d8576105cd9160040161044b565b9091565b346101d8576105df36610479565b9091610100810192835151600181018091116106d6576105fe90610f86565b9160005b85518051821015610665579061065f61063a61062083600195610fd5565b5173ffffffffffffffffffffffffffffffffffffffff1690565b6106448388610fd5565b9073ffffffffffffffffffffffffffffffffffffffff169052565b01610602565b505083838661067a3361064483515185610fd5565b5261068581846112d2565b501561069c576040516001815280602081015b0390f35b6106d2906040519384937ff58cc8b5000000000000000000000000000000000000000000000000000000008552600485016111fb565b0390fd5b610f3c565b346101d85760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d85760043560243567ffffffffffffffff81116101d85760209161073361073992369060040161044b565b91611220565b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d85760043567ffffffffffffffff81116101d8576107ad90369060040161044b565b9060243567ffffffffffffffff81116101d8576107d16107db91369060040161044b565b9190935a9361140c565b91606083015160808401516107ef82611b7b565b81810361088e57509060017f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f8819201906108288282611f8d565b604080519182526020820192909252a161084282856112d2565b92901561085657506108549350611765565b005b836106d286926040519384937fa2b6d61b000000000000000000000000000000000000000000000000000000008552600485016111fb565b917f9b6514f40000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b346101d85760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d8576020600154604051908152f35b346101d85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d857333014611a89575b7fa19dbf00000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101d8576004359067ffffffffffffffff82116101d8576105cd9160040161044b565b346101d8576109ba36610963565b67ffffffffffffffff8111610147576109dd816109d8600054610c90565b611280565b6000601f8211600114610a3a578190610a2a93600092610a2f575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b600055005b0135905038806109f8565b600080527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216927f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56391805b858110610adb57508360019510610aa3575b505050811b01600055005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88560031b161c19910135169055388080610a98565b90926020600181928686013581550194019101610a86565b346101d85760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d857610854602435600435611f8d565b610b3936610963565b9030330361093557610b4f610854925a9261140c565b90610b5982611ae7565b90611765565b346101d85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d8576020610b9b600435611b7b565b604051908152f35b346101d85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d857600435600155005b346101d85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d8576040600435815160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e86835283820152828152610c4a606082610168565b519020546bffffffffffffffffffffffff8251918060601c8352166020820152f35b346101d857610c86600080610c8036610479565b91611c3b565b5050505050611a89565b90600182811c92168015610cd9575b6020831014610caa57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f1691610c9f565b6040519060008260005491610cf783610c90565b8083529260018116908115610d795750600114610d1b575b6101b892500383610168565b50600080805290917f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b818310610d5d5750509060206101b892820101610d0f565b6020919350806001915483858901015201910190918492610d45565b602092506101b89491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b820101610d0f565b919082519283825260005b848110610e005750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201610dc1565b346101d85760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d857610698610e4f610ce3565b604051918291602083526020830190610db6565b346101d85760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d857600435610e9d610202565b604435916bffffffffffffffffffffffff83168093036101d857303303610935578273ffffffffffffffffffffffffffffffffffffffff83610f287febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1967fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606097881b161785611fd2565b6040519384521660208301526040820152a1005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90600182018092116106d657565b919082018092116106d657565b90610f90826101ea565b610f9d6040519182610168565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610fcb82946101ea565b0190602036910137565b8051821015610fe95760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9080602083519182815201916020808360051b8301019401926000915b83831061104457505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c0806110b7604085015160e0604086015260e0850190610db6565b936060810151606085015260808101511515608085015260a0810151151560a0850152015191015297019301930191939290611035565b906020808351928381520192019060005b81811061110c5750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016110ff565b805160ff1682526102c69160208281015115159082015261010061119661117060408501516101206040860152610120850190611018565b606085015160608501526080850151608085015260a085015184820360a0860152610db6565b9260c081015160c084015260e081015160e08401520151906101008184039101526110ee565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b916112126102c69492604085526040850190611138565b9260208185039101526111bc565b9161123c9260e061122f6112fb565b6003815201523691610246565b6020815191012061124b610ce3565b602081519101200361127b577f1626ba7e0000000000000000000000000000000000000000000000000000000090565b600090565b601f811161128c575050565b600080526020600020906020601f840160051c830193106112c8575b601f0160051c01905b8181106112bc575050565b600081556001016112b1565b90915081906112a8565b6112dd913691610246565b602081519101206112ec610ce3565b60208151910120149060015490565b60405190610120820182811067ffffffffffffffff821117610147576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b90611360826101ea565b61136d6040519182610168565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061139b82946101ea565b019060005b8281106113ac57505050565b6020906040516113bb8161012b565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c0820152828285010152016113a0565b909392938483116101d85784116101d8578101920390565b9190916114176112fb565b6000815292600190823560f81c827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818316016116b95750600060608701525b600761146660ff831660011c90565b1680611668575b5060108181160361163357506001925b61148684611356565b92604087019384526000905b8582106114a157505050505050565b8281013560f81c9060010190918160018085160361161157506114e5306114c9838951610fd5565b519073ffffffffffffffffffffffffffffffffffffffff169052565b6002808416146115f1575b6004808416146115a3575b600880841614611570575b61155961155360c0856115328a60806115298860108060019c9d16149351610fd5565b51019015159052565b6115498a60a0611529886020808716149351610fd5565b1660061c60031690565b60ff1690565b60c0611566838951610fd5565b5101520190611492565b600191611559906115539060c090878101359060200196906060611595878d51610fd5565b510152959450505050611506565b906115eb908481013560e81c906003016115e46115cb6115c38484610f79565b838a8a6113f4565b919060406115da888d51610fd5565b5101923691610246565b9052610f79565b906114fb565b90838101359060200191906020611609838951610fd5565b5101526114f0565b61162e92508481013560601c9060140192906114c9838951610fd5565b6114e5565b6020908116036116555761ffff918381013560f01c906002015b92169261147d565b60ff918381013560f81c9060010161164d565b6116ac919385929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b929060808701523861146d565b80850135606090811c908801526014019250611457565b6116e860409295949395606083526060830190611138565b9460208201520152565b926102c696959260c09592855260208501526040840152606083015260808201528160a08201520190610db6565b6102c69392606092825260208201528160408201520190610db6565b6117526102c69492606083526060830190611138565b9260208201526040818403910152610db6565b916000604082019384515190825b828110611784575b50505050505050565b61178f818851610fd5565b519361179e60a0860151151590565b80611a81575b611a41575060009360608101518015801580611a38575b611a005784906117ce6080850151151590565b156119ba57611879926117f5855173ffffffffffffffffffffffffffffffffffffffff1690565b91156119b457505a905b6118748b61184860608d01516040890151908c8b604051998a967f4c4e814c000000000000000000000000000000000000000000000000000000006020890152602488016116f2565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101855284610168565b611f60565b156118bc575b506040805187815260208101839052600192917f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a91a15b01611773565b60c00180511561196b57600181511461192c57516002146118dd573861187f565b9493505050507fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b925061191d611911611f72565b60405193849384611720565b0390a13880808080808061177b565b50846106d2611939611f72565b6040519384937f7f6b0bb10000000000000000000000000000000000000000000000000000000085526004850161173c565b509250600180937f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d6119ac61199e611f72565b604051918291858c84611720565b0390a16118b6565b906117ff565b83516119f593925073ffffffffffffffffffffffffffffffffffffffff16916020850151916000146119fa57505a905b604085015192611f4e565b611879565b906119ea565b83886106d25a6040519384937f21395274000000000000000000000000000000000000000000000000000000008552600485016116d0565b50815a106117bb565b6040805188815260208101849052919550600192917f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b91819081016119ac565b5080156117a4565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4e6f7420757365640000000000000000000000000000000000000000000000006044820152fd5b611b49611b75611b07611b01602085015115153090612011565b9361210c565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610168565b51902090565b60405160208101917f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8352604082015260408152611bba606082610168565b5190205490565b60405190611bce8261014c565b60006020838281520152565b908160409103126101d857602060405191611bf48361014c565b805183520151602082015290565b60409073ffffffffffffffffffffffffffffffffffffffff6102c694931681528160208201520190610db6565b6040513d6000823e3d90fd5b909491939291853560f81c60019093819087611c55611bc1565b9360408089161480611f30575b611e2e575b505050600180861614611e085760028581161460208501526007600286901c1688820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101908096918196602016611cd79060051c90565b611ce090610f6b565b8a820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101959098899a81611d2c84611ae7565b988993611d38936113f4565b91611d4293612572565b9098611d5691600052602052604060002090565b90611d6991600052602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff16611d9291600052602052604060002090565b94815190868215159283611dfd575b505081611dee575b50611db15750565b6040517fccbb534f000000000000000000000000000000000000000000000000000000008152815160048201526020909101516024820152604490fd5b90506020820151101538611da9565b141591508638611da1565b86611e239792949550611e1b93986113f4565b939092612301565b919394909293929190565b8a81013560601c985060140192509087908a90849015611e52575b50829150611c67565b60038101955073ffffffffffffffffffffffffffffffffffffffff945081013560e81c92604092611ed5929091611ea091611e99918990611e938983610f79565b926113f4565b3691610246565b83519586809481937fccce3bc80000000000000000000000000000000000000000000000000000000083523060048401611c02565b0392165afa8015611f2b57611ef392600091611efc575b5092610f79565b86388981611e49565b611f1e915060403d604011611f24575b611f168183610168565b810190611bda565b38611eec565b503d611f0c565b611c2f565b5073ffffffffffffffffffffffffffffffffffffffff891615611c62565b9160009391849360208451940192f190565b9160009291839260208351930191f490565b3d90604051916020818401016040528083526000602084013e565b60405160208101917f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8352604082015260408152611fcc606082610168565b51902055565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e868352604082015260408152611fcc606082610168565b156120c1576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a08152611b7560c082610168565b469061201a565b805160209091019060005b8181106120e05750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016120d3565b61010081015160405161212781611b496020820180956120c8565b51902090612136815160ff1690565b60ff8116806121af57505090611b756121526040840151612e16565b92611b4960806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b6001810361220d57505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46693810193845290810191909152606081019290925290611b758160808101611b49565b6002810361226357505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e460208201908152918101929092526060820192909252611b758160808101611b49565b6003036122b7575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46660208201908152918101929092526060820192909252611b758160808101611b49565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b906116e890604093969594966060845260608401916111bc565b919492909260009560009560009560009560009561231d6112fb565b60028152937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9460005b82811061237457505050505050508051151580612366575b611db15750565b50602081015184111561235f565b600381019d50959b5093995091975092909190612398908b9085013560e81c610f79565b958a60008489036124dc575089915b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c036124ac57509060016123e1896123e89487896113f4565b908b611c3b565b9c939c9b929b9a919a99909a9b9d8e9d9e8f905b106124665750928b88511461245d575b808b101561242b57508a60c08501528992959295949194939093612347565b7f37daf62b0000000000000000000000000000000000000000000000000000000060005260048b905260245260446000fd5b6000885261240c565b8d8f6106d261247785858c8e6113f4565b9390926040519485947fb006aba0000000000000000000000000000000000000000000000000000000008652600486016122e7565b9798999a9160016124c28b6124c994888a6113f4565b9086611c3b565b50929d919c909b929a9092918e8e6123fc565b916123a7565b908160209103126101d857517fffffffff00000000000000000000000000000000000000000000000000000000811681036101d85790565b6040906102c69492815281602082015201916111bc565b73ffffffffffffffffffffffffffffffffffffffff6102c69593606093835216602082015281604082015201916111bc565b908160209103126101d8575190565b9391909360009460009460005b81811061258d575050505050565b8481013560f881901c9860019092019788979692909160fc1c988915612d81575060018914612d415760028914612b745760038914612b455760048914612ac45760068914612a2457600589146129d6576007891461290f57600889146128b9576009891461279057600a891461262d577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b9091929394959697506003891697881561277f575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190810190816126a59187876113f4565b6040517f898bd921000000000000000000000000000000000000000000000000000000008152939184916126dd918a6004850161251a565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa918215611f2b576127209360009361274c575b5060ff909a168091019a6130e2565b908015612746579061273a91600052602052604060002090565b955b939291909361257f565b5061273a565b60ff9193506127719060203d8111612778575b6127698183610168565b810190612563565b9290612711565b503d61275f565b8084013560f81c9850600101612642565b909192939495969750600389169788156128a8575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190810190816128089187876113f4565b6040517f13792a4a00000000000000000000000000000000000000000000000000000000815293918491612840918b600485016111fb565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa918215611f2b576128829360009361274c575060ff909a168091019a6130e2565b9080156128a2579061289c91600052602052604060002090565b9561273c565b5061289c565b8084013560f81c98506001016127a5565b9850602087019750949593949293919290918201356128d786613089565b81146128e7575b612882906130a3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506128de565b975090919293949597600f169687156129c4575b602060006129356129a29a9b86612f51565b9c9092918a60405161297881611b498a82019485603c917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008252601c8201520190565b51902092604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa15611f2b576128829060ff6000519a1680910199612f94565b600189019883013560f81c9750612923565b9850602087019750949593949293919290918201358085146129fc575b6128829061304a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506129f3565b989091929394959662ffffff9850612a46611553600c8416603f9060021c1690565b918215612ab0575b6003168015612a9f575b908190612a8390612a7b908781013560e81c906003019c168c01809c89896113f4565b90898b612572565b911115612a96575b906128829291612fff565b99820199612a8b565b50600281019084013560f01c612a58565b8482013560f81c9250600190910190612a4e565b975097612b1a612b27929394959697600f612b2f93169085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b92908301809386866113f4565b908688612572565b9061289c92980198600052602052604060002090565b9850965093949293919290919080820135906020019680156128a2579061289c91600052602052604060002090565b90919293949596975060038916978815612d30575b8084013560601c99612be89160140190612ba89060021c600316611553565b9085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b90810190612c4c60208c612bfe85858b8b6113f4565b919073ffffffffffffffffffffffffffffffffffffffff8c604051968795869485937f1626ba7e0000000000000000000000000000000000000000000000000000000085526004850161251a565b0392165afa908115611f2b577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091612d02575b501603612cbe57509060ff61288292991680910199612f94565b6106d2612ccf8c93899389896113f4565b906040519485947fb2fed7ae00000000000000000000000000000000000000000000000000000000865260048601612531565b612d23915060203d8111612d29575b612d1b8183610168565b8101906124e2565b38612ca4565b503d612d11565b8381013560f81c9850600101612b89565b98600f91929394959697985016968715612d70575b60148101976128829160ff9091169084013560601c612f94565b8281013560f81c9750600101612d56565b98509091929394959698600f16978815612dd3575b5060206000612da96129a29a9b86612f51565b9c90916040519384938c859094939260ff6060936080840197845216602083015260408201520152565b60018101995083013560f81c97506020612d96565b805160209091019060005b818110612e005750505090565b8251845260209384019390920191600101612df3565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0612e5c612e46836101ea565b92612e546040519485610168565b8084526101ea565b0136602083013760005b8351811015612f385780612e7c60019286610fd5565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152612f2461012082610168565b519020612f318285610fd5565b5201612e66565b50909150604051611b7581611b49602082018095612de8565b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff81116106d65791565b90604051907fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208301937f53657175656e6365207369676e65723a0a000000000000000000000000000000855260601b166031830152604582015260458152611b75606582610168565b916040519160208301937f53657175656e6365206e657374656420636f6e6669673a0a0000000000000000855260388401526058830152607882015260788152611b75609882610168565b60405160208101917f53657175656e636520737461746963206469676573743a0a00000000000000008352603882015260388152611b75605882610168565b611b49611b75611b07611b01600060208601511515612011565b60405160208101917f53657175656e636520616e792061646472657373207375626469676573743a0a8352604082015260408152611b75606082610168565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e63652073617069656e7420636f6e6669673a0a00000000000000865260601b166039840152604d830152606d820152606d8152611b75608d8261016856fea26469706673582212202eb966cb9ee1d2eedd7192ceb4cefa00faf5ba9930e425d9d7ca928dd6578cbd64736f6c634300081c0033","sourceMap":"438:878:89:-:0;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436101561001257600080fd5b60003560e01c806313792a4a146100f75780631626ba7e146100f25780631f6a1eb9146100ed5780632761e20a146100e857806329561426146100e357806336fd922d146100de578063650fb676146100d95780636ea44577146100d45780638c3f5563146100cf578063920316f6146100ca57806392dcb3fc146100c5578063ad55366b146100c0578063d7c4dd5a146100bb5763f727ef1c146100b657600080fd5b610e63565b610e15565b610c6c565b610bda565b610ba3565b610b5f565b610b30565b610af3565b6109ac565b6108fe565b6108c2565b610763565b6106db565b6105d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff82111761014757604052565b6100fc565b6040810190811067ffffffffffffffff82111761014757604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761014757604052565b604051906101b860e083610168565b565b604051906101b861012083610168565b359060ff821682036101d857565b600080fd5b359081151582036101d857565b67ffffffffffffffff81116101475760051b60200190565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101d857565b359073ffffffffffffffffffffffffffffffffffffffff821682036101d857565b92919267ffffffffffffffff8211610147576040519161028e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160184610168565b8294818452818301116101d8578281602093846000960137010152565b9080601f830112156101d8578160206102c693359101610246565b90565b81601f820112156101d8578035906102e0826101ea565b926102ee6040519485610168565b82845260208085019360051b830101918183116101d85760208101935b83851061031a57505050505090565b843567ffffffffffffffff81116101d857820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082860301126101d8576103616101a9565b9161036e60208301610225565b83526040820135602084015260608201359267ffffffffffffffff84116101d85760e0836103a38860208098819801016102ab565b6040840152608081013560608401526103be60a082016101dd565b60808401526103cf60c082016101dd565b60a0840152013560c082015281520194019361030b565b9080601f830112156101d85781356103fd816101ea565b9261040b6040519485610168565b81845260208085019260051b8201019283116101d857602001905b8282106104335750505090565b6020809161044084610225565b815201910190610426565b9181601f840112156101d85782359167ffffffffffffffff83116101d857602083818601950101116101d857565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126101d85760043567ffffffffffffffff81116101d8576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82850301126101d8576104eb6101ba565b906104f8816004016101ca565b8252610506602482016101dd565b6020830152604481013567ffffffffffffffff81116101d85784600461052e928401016102c9565b6040830152606481013560608301526084810135608083015260a481013567ffffffffffffffff81116101d85784600461056a928401016102ab565b60a083015260c481013560c083015260e481013560e083015261010481013567ffffffffffffffff81116101d857600485916105a79301016103e6565b610100820152916024359067ffffffffffffffff82116101d8576105cd9160040161044b565b9091565b346101d8576105df36610479565b9091610100810192835151600181018091116106d6576105fe90610f86565b9160005b85518051821015610665579061065f61063a61062083600195610fd5565b5173ffffffffffffffffffffffffffffffffffffffff1690565b6106448388610fd5565b9073ffffffffffffffffffffffffffffffffffffffff169052565b01610602565b505083838661067a3361064483515185610fd5565b5261068581846112d2565b501561069c576040516001815280602081015b0390f35b6106d2906040519384937ff58cc8b5000000000000000000000000000000000000000000000000000000008552600485016111fb565b0390fd5b610f3c565b346101d85760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d85760043560243567ffffffffffffffff81116101d85760209161073361073992369060040161044b565b91611220565b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d85760043567ffffffffffffffff81116101d8576107ad90369060040161044b565b9060243567ffffffffffffffff81116101d8576107d16107db91369060040161044b565b9190935a9361140c565b91606083015160808401516107ef82611b7b565b81810361088e57509060017f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f8819201906108288282611f8d565b604080519182526020820192909252a161084282856112d2565b92901561085657506108549350611765565b005b836106d286926040519384937fa2b6d61b000000000000000000000000000000000000000000000000000000008552600485016111fb565b917f9b6514f40000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b346101d85760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d8576020600154604051908152f35b346101d85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d857333014611a89575b7fa19dbf00000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101d8576004359067ffffffffffffffff82116101d8576105cd9160040161044b565b346101d8576109ba36610963565b67ffffffffffffffff8111610147576109dd816109d8600054610c90565b611280565b6000601f8211600114610a3a578190610a2a93600092610a2f575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b600055005b0135905038806109f8565b600080527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216927f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56391805b858110610adb57508360019510610aa3575b505050811b01600055005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88560031b161c19910135169055388080610a98565b90926020600181928686013581550194019101610a86565b346101d85760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d857610854602435600435611f8d565b610b3936610963565b9030330361093557610b4f610854925a9261140c565b90610b5982611ae7565b90611765565b346101d85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d8576020610b9b600435611b7b565b604051908152f35b346101d85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d857600435600155005b346101d85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d8576040600435815160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e86835283820152828152610c4a606082610168565b519020546bffffffffffffffffffffffff8251918060601c8352166020820152f35b346101d857610c86600080610c8036610479565b91611c3b565b5050505050611a89565b90600182811c92168015610cd9575b6020831014610caa57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f1691610c9f565b6040519060008260005491610cf783610c90565b8083529260018116908115610d795750600114610d1b575b6101b892500383610168565b50600080805290917f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b818310610d5d5750509060206101b892820101610d0f565b6020919350806001915483858901015201910190918492610d45565b602092506101b89491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b820101610d0f565b919082519283825260005b848110610e005750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201610dc1565b346101d85760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d857610698610e4f610ce3565b604051918291602083526020830190610db6565b346101d85760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d857600435610e9d610202565b604435916bffffffffffffffffffffffff83168093036101d857303303610935578273ffffffffffffffffffffffffffffffffffffffff83610f287febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1967fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606097881b161785611fd2565b6040519384521660208301526040820152a1005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90600182018092116106d657565b919082018092116106d657565b90610f90826101ea565b610f9d6040519182610168565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610fcb82946101ea565b0190602036910137565b8051821015610fe95760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9080602083519182815201916020808360051b8301019401926000915b83831061104457505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c0806110b7604085015160e0604086015260e0850190610db6565b936060810151606085015260808101511515608085015260a0810151151560a0850152015191015297019301930191939290611035565b906020808351928381520192019060005b81811061110c5750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016110ff565b805160ff1682526102c69160208281015115159082015261010061119661117060408501516101206040860152610120850190611018565b606085015160608501526080850151608085015260a085015184820360a0860152610db6565b9260c081015160c084015260e081015160e08401520151906101008184039101526110ee565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b916112126102c69492604085526040850190611138565b9260208185039101526111bc565b9161123c9260e061122f6112fb565b6003815201523691610246565b6020815191012061124b610ce3565b602081519101200361127b577f1626ba7e0000000000000000000000000000000000000000000000000000000090565b600090565b601f811161128c575050565b600080526020600020906020601f840160051c830193106112c8575b601f0160051c01905b8181106112bc575050565b600081556001016112b1565b90915081906112a8565b6112dd913691610246565b602081519101206112ec610ce3565b60208151910120149060015490565b60405190610120820182811067ffffffffffffffff821117610147576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b90611360826101ea565b61136d6040519182610168565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061139b82946101ea565b019060005b8281106113ac57505050565b6020906040516113bb8161012b565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c0820152828285010152016113a0565b909392938483116101d85784116101d8578101920390565b9190916114176112fb565b6000815292600190823560f81c827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818316016116b95750600060608701525b600761146660ff831660011c90565b1680611668575b5060108181160361163357506001925b61148684611356565b92604087019384526000905b8582106114a157505050505050565b8281013560f81c9060010190918160018085160361161157506114e5306114c9838951610fd5565b519073ffffffffffffffffffffffffffffffffffffffff169052565b6002808416146115f1575b6004808416146115a3575b600880841614611570575b61155961155360c0856115328a60806115298860108060019c9d16149351610fd5565b51019015159052565b6115498a60a0611529886020808716149351610fd5565b1660061c60031690565b60ff1690565b60c0611566838951610fd5565b5101520190611492565b600191611559906115539060c090878101359060200196906060611595878d51610fd5565b510152959450505050611506565b906115eb908481013560e81c906003016115e46115cb6115c38484610f79565b838a8a6113f4565b919060406115da888d51610fd5565b5101923691610246565b9052610f79565b906114fb565b90838101359060200191906020611609838951610fd5565b5101526114f0565b61162e92508481013560601c9060140192906114c9838951610fd5565b6114e5565b6020908116036116555761ffff918381013560f01c906002015b92169261147d565b60ff918381013560f81c9060010161164d565b6116ac919385929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b929060808701523861146d565b80850135606090811c908801526014019250611457565b6116e860409295949395606083526060830190611138565b9460208201520152565b926102c696959260c09592855260208501526040840152606083015260808201528160a08201520190610db6565b6102c69392606092825260208201528160408201520190610db6565b6117526102c69492606083526060830190611138565b9260208201526040818403910152610db6565b916000604082019384515190825b828110611784575b50505050505050565b61178f818851610fd5565b519361179e60a0860151151590565b80611a81575b611a41575060009360608101518015801580611a38575b611a005784906117ce6080850151151590565b156119ba57611879926117f5855173ffffffffffffffffffffffffffffffffffffffff1690565b91156119b457505a905b6118748b61184860608d01516040890151908c8b604051998a967f4c4e814c000000000000000000000000000000000000000000000000000000006020890152602488016116f2565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101855284610168565b611f60565b156118bc575b506040805187815260208101839052600192917f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a91a15b01611773565b60c00180511561196b57600181511461192c57516002146118dd573861187f565b9493505050507fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b925061191d611911611f72565b60405193849384611720565b0390a13880808080808061177b565b50846106d2611939611f72565b6040519384937f7f6b0bb10000000000000000000000000000000000000000000000000000000085526004850161173c565b509250600180937f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d6119ac61199e611f72565b604051918291858c84611720565b0390a16118b6565b906117ff565b83516119f593925073ffffffffffffffffffffffffffffffffffffffff16916020850151916000146119fa57505a905b604085015192611f4e565b611879565b906119ea565b83886106d25a6040519384937f21395274000000000000000000000000000000000000000000000000000000008552600485016116d0565b50815a106117bb565b6040805188815260208101849052919550600192917f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b91819081016119ac565b5080156117a4565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4e6f7420757365640000000000000000000000000000000000000000000000006044820152fd5b611b49611b75611b07611b01602085015115153090612011565b9361210c565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610168565b51902090565b60405160208101917f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8352604082015260408152611bba606082610168565b5190205490565b60405190611bce8261014c565b60006020838281520152565b908160409103126101d857602060405191611bf48361014c565b805183520151602082015290565b60409073ffffffffffffffffffffffffffffffffffffffff6102c694931681528160208201520190610db6565b6040513d6000823e3d90fd5b909491939291853560f81c60019093819087611c55611bc1565b9360408089161480611f30575b611e2e575b505050600180861614611e085760028581161460208501526007600286901c1688820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101908096918196602016611cd79060051c90565b611ce090610f6b565b8a820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101959098899a81611d2c84611ae7565b988993611d38936113f4565b91611d4293612572565b9098611d5691600052602052604060002090565b90611d6991600052602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff16611d9291600052602052604060002090565b94815190868215159283611dfd575b505081611dee575b50611db15750565b6040517fccbb534f000000000000000000000000000000000000000000000000000000008152815160048201526020909101516024820152604490fd5b90506020820151101538611da9565b141591508638611da1565b86611e239792949550611e1b93986113f4565b939092612301565b919394909293929190565b8a81013560601c985060140192509087908a90849015611e52575b50829150611c67565b60038101955073ffffffffffffffffffffffffffffffffffffffff945081013560e81c92604092611ed5929091611ea091611e99918990611e938983610f79565b926113f4565b3691610246565b83519586809481937fccce3bc80000000000000000000000000000000000000000000000000000000083523060048401611c02565b0392165afa8015611f2b57611ef392600091611efc575b5092610f79565b86388981611e49565b611f1e915060403d604011611f24575b611f168183610168565b810190611bda565b38611eec565b503d611f0c565b611c2f565b5073ffffffffffffffffffffffffffffffffffffffff891615611c62565b9160009391849360208451940192f190565b9160009291839260208351930191f490565b3d90604051916020818401016040528083526000602084013e565b60405160208101917f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8352604082015260408152611fcc606082610168565b51902055565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e868352604082015260408152611fcc606082610168565b156120c1576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a08152611b7560c082610168565b469061201a565b805160209091019060005b8181106120e05750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016120d3565b61010081015160405161212781611b496020820180956120c8565b51902090612136815160ff1690565b60ff8116806121af57505090611b756121526040840151612e16565b92611b4960806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b6001810361220d57505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46693810193845290810191909152606081019290925290611b758160808101611b49565b6002810361226357505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e460208201908152918101929092526060820192909252611b758160808101611b49565b6003036122b7575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46660208201908152918101929092526060820192909252611b758160808101611b49565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b906116e890604093969594966060845260608401916111bc565b919492909260009560009560009560009560009561231d6112fb565b60028152937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9460005b82811061237457505050505050508051151580612366575b611db15750565b50602081015184111561235f565b600381019d50959b5093995091975092909190612398908b9085013560e81c610f79565b958a60008489036124dc575089915b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c036124ac57509060016123e1896123e89487896113f4565b908b611c3b565b9c939c9b929b9a919a99909a9b9d8e9d9e8f905b106124665750928b88511461245d575b808b101561242b57508a60c08501528992959295949194939093612347565b7f37daf62b0000000000000000000000000000000000000000000000000000000060005260048b905260245260446000fd5b6000885261240c565b8d8f6106d261247785858c8e6113f4565b9390926040519485947fb006aba0000000000000000000000000000000000000000000000000000000008652600486016122e7565b9798999a9160016124c28b6124c994888a6113f4565b9086611c3b565b50929d919c909b929a9092918e8e6123fc565b916123a7565b908160209103126101d857517fffffffff00000000000000000000000000000000000000000000000000000000811681036101d85790565b6040906102c69492815281602082015201916111bc565b73ffffffffffffffffffffffffffffffffffffffff6102c69593606093835216602082015281604082015201916111bc565b908160209103126101d8575190565b9391909360009460009460005b81811061258d575050505050565b8481013560f881901c9860019092019788979692909160fc1c988915612d81575060018914612d415760028914612b745760038914612b455760048914612ac45760068914612a2457600589146129d6576007891461290f57600889146128b9576009891461279057600a891461262d577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b9091929394959697506003891697881561277f575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190810190816126a59187876113f4565b6040517f898bd921000000000000000000000000000000000000000000000000000000008152939184916126dd918a6004850161251a565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa918215611f2b576127209360009361274c575b5060ff909a168091019a6130e2565b908015612746579061273a91600052602052604060002090565b955b939291909361257f565b5061273a565b60ff9193506127719060203d8111612778575b6127698183610168565b810190612563565b9290612711565b503d61275f565b8084013560f81c9850600101612642565b909192939495969750600389169788156128a8575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190810190816128089187876113f4565b6040517f13792a4a00000000000000000000000000000000000000000000000000000000815293918491612840918b600485016111fb565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa918215611f2b576128829360009361274c575060ff909a168091019a6130e2565b9080156128a2579061289c91600052602052604060002090565b9561273c565b5061289c565b8084013560f81c98506001016127a5565b9850602087019750949593949293919290918201356128d786613089565b81146128e7575b612882906130a3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506128de565b975090919293949597600f169687156129c4575b602060006129356129a29a9b86612f51565b9c9092918a60405161297881611b498a82019485603c917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008252601c8201520190565b51902092604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa15611f2b576128829060ff6000519a1680910199612f94565b600189019883013560f81c9750612923565b9850602087019750949593949293919290918201358085146129fc575b6128829061304a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506129f3565b989091929394959662ffffff9850612a46611553600c8416603f9060021c1690565b918215612ab0575b6003168015612a9f575b908190612a8390612a7b908781013560e81c906003019c168c01809c89896113f4565b90898b612572565b911115612a96575b906128829291612fff565b99820199612a8b565b50600281019084013560f01c612a58565b8482013560f81c9250600190910190612a4e565b975097612b1a612b27929394959697600f612b2f93169085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b92908301809386866113f4565b908688612572565b9061289c92980198600052602052604060002090565b9850965093949293919290919080820135906020019680156128a2579061289c91600052602052604060002090565b90919293949596975060038916978815612d30575b8084013560601c99612be89160140190612ba89060021c600316611553565b9085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b90810190612c4c60208c612bfe85858b8b6113f4565b919073ffffffffffffffffffffffffffffffffffffffff8c604051968795869485937f1626ba7e0000000000000000000000000000000000000000000000000000000085526004850161251a565b0392165afa908115611f2b577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091612d02575b501603612cbe57509060ff61288292991680910199612f94565b6106d2612ccf8c93899389896113f4565b906040519485947fb2fed7ae00000000000000000000000000000000000000000000000000000000865260048601612531565b612d23915060203d8111612d29575b612d1b8183610168565b8101906124e2565b38612ca4565b503d612d11565b8381013560f81c9850600101612b89565b98600f91929394959697985016968715612d70575b60148101976128829160ff9091169084013560601c612f94565b8281013560f81c9750600101612d56565b98509091929394959698600f16978815612dd3575b5060206000612da96129a29a9b86612f51565b9c90916040519384938c859094939260ff6060936080840197845216602083015260408201520152565b60018101995083013560f81c97506020612d96565b805160209091019060005b818110612e005750505090565b8251845260209384019390920191600101612df3565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0612e5c612e46836101ea565b92612e546040519485610168565b8084526101ea565b0136602083013760005b8351811015612f385780612e7c60019286610fd5565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152612f2461012082610168565b519020612f318285610fd5565b5201612e66565b50909150604051611b7581611b49602082018095612de8565b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff81116106d65791565b90604051907fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208301937f53657175656e6365207369676e65723a0a000000000000000000000000000000855260601b166031830152604582015260458152611b75606582610168565b916040519160208301937f53657175656e6365206e657374656420636f6e6669673a0a0000000000000000855260388401526058830152607882015260788152611b75609882610168565b60405160208101917f53657175656e636520737461746963206469676573743a0a00000000000000008352603882015260388152611b75605882610168565b611b49611b75611b07611b01600060208601511515612011565b60405160208101917f53657175656e636520616e792061646472657373207375626469676573743a0a8352604082015260408152611b75606082610168565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e63652073617069656e7420636f6e6669673a0a00000000000000865260601b166039840152604d830152606d820152606d8152611b75608d8261016856fea26469706673582212202eb966cb9ee1d2eedd7192ceb4cefa00faf5ba9930e425d9d7ca928dd6578cbd64736f6c634300081c0033","sourceMap":"438:878:89:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;;;;;;;;;;2321:4:48;438:878:89;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;438:878:89;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;4682:22:50;;;;;;;;438:878:89;4714:1:50;438:878:89;;;;;;;4668:48:50;;;:::i;:::-;4728:13;-1:-1:-1;4778:3:50;4747:22;;438:878:89;;4743:33:50;;;;;4810:25;4791:44;4810:25;;;4714:1;4810:25;;:::i;:::-;438:878:89;;;;;4810:25:50;4791:44;;;;:::i;:::-;438:878:89;;;;;;4791:44:50;438:878:89;4728:13:50;;4743:33;;;;;;4848:57;4895:10;4848:57;4862:22;;438:878:89;4848:57:50;;:::i;:::-;4911:38;860:243:89;;;;:::i;:::-;5025:8:50;;5021:81;;438:878:89;;4714:1:50;438:878:89;;;;;;;;;;5021:81:50;5050:45;438:878:89;;;5050:45:50;;;;;;438:878:89;5050:45:50;;;:::i;:::-;;;;438:878:89;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1572:33:43;438:878:89;;;;;;:::i;:::-;1524:9:43;;;;1572:33;;:::i;:::-;1626:13;;;;438:878:89;1641:13:43;;;438:878:89;806:50:47;;;:::i;:::-;1131:22;;;1127:88;;438:878:89;;1267:1:47;1319:29;438:878:89;;986:15:47;;;;;:::i;:::-;438:878:89;;;;;;;;;;;;;1319:29:47;860:243:89;;;;:::i;:::-;1745:8:43;;;1741:73;;1850:7;;;;;:::i;:::-;438:878:89;1741:73:43;438:878:89;1770:37:43;438:878:89;;;;1770:37:43;;;;;;438:878:89;1770:37:43;;;:::i;1127:88:47:-;1170:38;;-1:-1:-1;1170:38:47;438:878:89;;;;;;;-1:-1:-1;1170:38:47;438:878:89;;;;;;;;;;;;504:29;438:878;;;;;;;;;;;;;;;;;;379:10:52;401:4;375:75;438:878:89;375:75:52;;423:20;-1:-1:-1;423:20:52;379:10;438:878:89;;;-1:-1:-1;423:20:52;438:878:89;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;618:30;438:878;;:::i;:::-;;:::i;:::-;618:30;438:878;;;;;;;;;;;618:30;438:878;;;;;;;;;;;;;;;;;;;;618:30;438:878;;;;;;-1:-1:-1;438:878:89;;;;;618:30;438:878;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;438:878:89;;;618:30;438:878;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;986:15:47;438:878:89;;;;986:15:47;:::i;438:878:89:-;;;;:::i;:::-;401:4:52;;379:10;:27;375:75;;2142:33:43;2255:7;2094:9;;2142:33;;:::i;:::-;2198:21;;;;:::i;:::-;2255:7;;:::i;438:878:89:-;;;;;;;;;;;;806:50:47;438:878:89;;806:50:47;:::i;:::-;438:878:89;;;;;;;;;;;;;;;;;;;724:24;438:878;;;;;;;;;;;;;;;;;;;753:25:49;;;834:66:50;438:878:89;;;;;;753:25:49;;;;;;;:::i;:::-;438:878:89;743:36:49;;785:40;438:878:89;;;;;753:25:49;438:878:89;;;;;;;;;;;;;5879:56:50;-1:-1:-1;438:878:89;;;;:::i;:::-;5879:56:50;;:::i;:::-;-1:-1:-1;;;;;;:::i;438:878:89:-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;438:878:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;401:4:52;379:10;:27;375:75;;438:878:89;;;2043:85:50;2998:47;438:878:89;;;;;;;2051:76:50;2043:85;;:::i;:::-;438:878:89;;;;;;;;;;;;;;2998:47:50;438:878:89;;;;;;;;;;;;;4790:4:51;438:878:89;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;438:878:89;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;438:878:89;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;438:878:89;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;5170:322:50:-;;438:878:89;5170:322:50;4826:15:48;438:878:89;;:::i;:::-;2556:4:48;;;4826:15;2556:4;438:878:89;;;:::i;:::-;;;;;;1028:21;438:878;;:::i;:::-;;;;;;1053:28;1028:53;5404:45:50;;438:878:89;5170:322:50;:::o;5404:45::-;438:878:89;5426:16:50;:::o;438:878:89:-;;;;;;;;:::o;:::-;618:30;438:878;;;618:30;438:878;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;618:30;438:878;;;;;;;;;-1:-1:-1;438:878:89;;;;860:243;438:878;860:243;438:878;;;:::i;:::-;;;;;;1028:21;438:878;;:::i;:::-;;;;;;1053:28;1028:53;438:878;1083:14;438:878;860:243;:::o;438:878::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;438:878:89;;-1:-1:-1;438:878:89;;;;;;;;;-1:-1:-1;438:878:89;;;;-1:-1:-1;438:878:89;;;;;;;;;-1:-1:-1;438:878:89;;;;-1:-1:-1;438:878:89;;;;;;:::o;2321:4:48:-;;438:878:89;;;:::i;:::-;;;;;;;:::i;:::-;;;;2321:4:48;;;;;:::i;:::-;;;-1:-1:-1;2321:4:48;;;;;;;;;:::o;:::-;;438:878:89;;;;;;:::i;:::-;-1:-1:-1;2321:4:48;;-1:-1:-1;2321:4:48;;;;438:878:89;;2321:4:48;;;-1:-1:-1;438:878:89;2321:4:48;;;-1:-1:-1;2321:4:48;;;;-1:-1:-1;2321:4:48;;;;-1:-1:-1;2321:4:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4859:2701::-;;;;438:878:89;;:::i;:::-;;2556:4:48;;;566:109:68;;;;;;;5163:25:48;:17;;;:25;5176:4;;5198:14;2321:4;5198:14;;;2556:4;5159:140;5396:4;5377:15;438:878:89;;;;;2321:4:48;;5377:15;5376:24;5411:13;5407:122;;5159:140;-1:-1:-1;5635:4:48;5622:17;;;:25;5635:4;;5657:12;5176:4;5618:320;;5983:20;;;:::i;:::-;5966:14;;;;:37;;;2321:4;6010:1546;6030:12;;;;;;4859:2701;;;;;;:::o;6044:3::-;798:135:68;;;;;;;;;6076:44:48;;;5176:4;6227:12;;;:20;5176:4;;6314;6283:36;6314:4;6283:17;:14;;;:17;:::i;:::-;;438:878:89;;;;;;6283:36:48;6529:4;6521:12;;;:20;6517:109;;6223:226;6704:4;6696:12;;;:20;6692:287;;6223:226;7065:4;7057:12;;;:20;7053:112;;6223:226;7494:55;7530:19;7539:4;7275:12;7241:55;7275:12;7241:30;:17;7275:12;5635:4;7275:12;5176:4;7275:12;;;:20;7241:14;;:17;:::i;:::-;;:30;2321:4;438:878:89;;2321:4:48;;;7241:55;7364;7398:12;7364:30;:17;7398:12;7406:4;7398:12;;;:20;7364:14;;:17;:::i;:55::-;7531:12;438:878:89;;;;;2321:4:48;7530:19;438:878:89;;;;7494:55:48;7539:4;7494:17;:14;;;:17;:::i;:::-;;:33;2556:4;438:878:89;6015:13:48;;;7053:112;5176:4;;7494:55;;7530:19;;7539:4;;2102:103:68;;;;;;;7090:14:48;;:26;:17;:14;;;:17;:::i;:::-;;:26;2556:4;7053:112;;;;;;;;6692:287;1201:256:68;6947:23:48;;1318:135:68;;;;;;;;;438:878:89;6899:38:48;6914:22;1318:135:68;;6914:22:48;:::i;:::-;6899:38;;;;:::i;:::-;6874:14;;5966;6874:17;:14;;;:17;:::i;:::-;;:22;438:878:89;;;;:::i;:::-;6874:63:48;;6947:23;:::i;:::-;6692:287;;;6517:109;1983:226:68;2102:103;;;;;;;6554:14:48;;7406:4;6554:17;:14;;;:17;:::i;:::-;;:23;2556:4;6517:109;;6223:226;6379:61;;-1:-1:-1;1840:135:68;;;;;;;;;6380:14:48;;:17;:14;;;:17;:::i;6379:61::-;6223:226;;5618:320;5779:4;5766:17;;;:25;5779:4;;2321;;1058:135:68;;;;;;;;;941:256;5803:48:48;2321:4;5762:170;5618:320;;5762:170;438:878:89;;798:135:68;;;;;;;;;683:254;;5407:122:48;2213:380:68;;;;;;;;2363:226;;;;;;;;;;;;;;;;;;;2213:380;;;5458:64:48;;5459:14;;;2556:4;5407:122;;;5159:140;1840:135:68;;;;;;;;5238:14:48;;;2556:4;1840:135:68;;;-1:-1:-1;5159:140:48;;438:878:89;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2657:4:48:-;;;;;;438:878:89;;2657:4:48;;;438:878:89;2657:4:48;;;;;;;;:::i;2763:::-;;;;;;;;;;;;;:::i;:::-;;;;;438:878:89;2763:4:48;;;;;;;;:::i;2272:1859:43:-;;2393:5;2424:14;;;;;;438:878:89;2456:13:43;;2471:12;;;;;;2451:1676;2272:1859;;;;;;;:::o;2485:3::-;2525:17;:14;;;:17;:::i;:::-;;2609;438:878:89;2609:17:43;;;438:878:89;;;;;;2609:31:43;;;2485:3;2605:102;;2833:17;2393:5;2878:13;;;;438:878:89;2903:13:43;;;;:37;;;2485:3;2899:105;;3012:12;;438:878:89;3036:17:43;;;438:878:89;;;;;;3036:17:43;;;3077:348;438:878:89;;;;;;;;;3129:36:43;;;;3145:9;;3129:36;;3177:238;3366:14;3177:238;2878:13;3366:14;;438:878:89;2424:14:43;3394:9;;;438:878:89;;;2424:14:43;438:878:89;3177:238:43;;;3213:55;3177:238;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;3077:348;:::i;:::-;3566:8;3562:520;;3032:522;-1:-1:-1;2424:14:43;438:878:89;;;;;;;;;;;;;;4095:25:43;;;2456:13;438:878:89;2456:13:43;;3562:520;3590:20;;438:878:89;;3590:53:43;3586:180;;438:878:89;;;3780:56:43;3776:136;;438:878:89;2867:4:48;3926:55:43;3922:152;;3562:520;;;3922:152;4024:21;;;;;;4000:46;4024:21;;4000:46;4024:21;;:::i;:::-;2424:14;438:878:89;4000:46:43;;;;;:::i;:::-;;;;4058:5;;;;;;;;;3776:136;3879:21;;3857:44;3879:21;;:::i;:::-;2424:14;438:878:89;3857:44:43;;;;;;;;;;:::i;3586:180::-;3657:16;;;438:878:89;3657:16:43;3713:21;3690:45;;3713:21;;:::i;:::-;2424:14;438:878:89;3690:45:43;;;;;;;:::i;:::-;;;;3747:8;;3129:36;;;;3032:522;438:878:89;;3462:83:43;;438:878:89;-1:-1:-1;438:878:89;;3485:10:43;;;;438:878:89;3497:36:43;;;;;3513:9;;3497:36;;2424:14;3535:9;;;3462:83;;:::i;:::-;3032:522;;3497:36;;;;2899:105;2985:9;;2959:36;2985:9;2424:14;438:878:89;2959:36:43;;;;;;;;;;:::i;2903:37::-;2920:9;;;:20;2903:37;;2605:102;2424:14;438:878:89;;;;;;;;;;;;;-1:-1:-1;438:878:89;;;2657:23:43;;438:878:89;;;;2657:23:43;438:878:89;2609:31:43;2630:10;;;2609:31;;1218:95:89;1290:18;438:878;;1290:18;;;438:878;1290:18;;;438:878;;;;;;;;;;;1290:18;9564:274:48;9784:48;;9743:18;9666:50;9682:18;;;438:878:89;;;9710:4:48;9666:50;;:::i;:::-;9743:18;;:::i;:::-;438:878:89;;9784:48:48;;;9682:18;9784:48;;;;438:878:89;;;;;;;;;;;;;;;;;;9784:48:48;;;;;;;;;:::i;:::-;438:878:89;9774:59:48;;9564:274;:::o;632:197:49:-;438:878:89;;753:25:49;;;;543:66:47;438:878:89;;;;;;;753:25:49;;;;;;:::i;:::-;438:878:89;743:36:49;;785:40;632:197;:::o;438:878:89:-;;;;;;;:::i;:::-;-1:-1:-1;438:878:89;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2963:3141:51;;;;;;;566:109:68;;;;;3268:69:51;;;3762:24;438:878:89;;;:::i;:::-;3963:20:51;3979:4;3963:20;;;:28;:59;;;2963:3141;3959:742;;2963:3141;4774:20;;;4790:4;4774:20;;;:28;4770:126;;5004:4;4988:20;;;:28;4967:18;;;2321:4:48;438:878:89;;;;;;2363:226:68;;;;;;;;;;;;;;;;;;;;;;;;;5158:67:51;;;;;5330:20;4967:18;5330:20;5329:27;;438:878:89;;2321:4:48;;5329:27:51;5328:33;;;:::i;:::-;2363:226:68;;;;;;;;;;;;;;;;;;;;;;;;;5369:65:51;;;;5480:15;;;;;:::i;:::-;5555:19;;;;;;:::i;:::-;5523:52;;;;:::i;:::-;5501:74;5594:50;;;545:85:69;;;;;;;461:173;;5594:50:51;5662:51;;;545:85:69;;;;;;;461:173;;5662:51:51;438:878:89;;;5731:72:51;;545:85:69;;;;;;;461:173;;5731:72:51;438:878:89;;;5948:32:51;;;;;:67;;;;2963:3141;5948:104;;;;;2963:3141;5944:156;;;2963:3141;:::o;5944:156::-;3979:4;438:878:89;6069:24:51;;;438:878:89;;6069:24:51;;;438:878:89;;;;;;;;;;;;5050:45:50;5948:104:51;6033:19;;4967:18;6033:19;;438:878:89;-1:-1:-1;6019:33:51;5948:104;;;:67;5984:31;;;-1:-1:-1;5948:67:51;;;;4770:126;4869:19;4819:70;4869:19;;;;;;;;;:::i;:::-;4819:70;;;;:::i;:::-;4812:77;;;;;;;;;:::o;3959:742::-;1840:135:68;;;;;;;-1:-1:-1;1840:135:68;;;-1:-1:-1;3162:307:68;1840:135;;;;;;4197:20:51;4193:502;;3959:742;;;;;;;4193:502;1318:135:68;;;;-1:-1:-1;438:878:89;;-1:-1:-1;1318:135:68;;;;;;3979:4:51;;4572:73;;3979:4;;438:878:89;;4471:48:51;;1318:135:68;;4489:29:51;1318:135:68;;4489:29:51;:::i;:::-;4471:48;;:::i;:::-;438:878:89;;;:::i;:::-;;;4572:73:51;;;;;;438:878:89;4572:73:51;;4621:4;4572:73;;;;:::i;:::-;;438:878:89;;4572:73:51;;;;;;4656:30;4572:73;-1:-1:-1;4572:73:51;;;4193:502;4561:84;4656:30;;:::i;:::-;4193:502;;;;;;4572:73;;;;3979:4;4572:73;3979:4;4572:73;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;:::i;3963:59::-;438:878:89;;;;3995:27:51;3963:59;;1431:196:69;;1538:85;1431:196;;;;1538:85;;;;;;;1431:196;:::o;1997:192::-;;2098:87;1997:192;;;;2098:87;;;;;;;1997:192;:::o;758:271::-;825:200;;;;;;;;;;;;;;;;;;;;758:271::o;443:185:49:-;438:878:89;;552:25:49;;;;543:66:47;438:878:89;;;;;;;552:25:49;;;;;;:::i;:::-;438:878:89;542:36:49;;584:40;443:185::o;:::-;438:878:89;;552:25:49;;;;834:66:50;438:878:89;;;;;;;552:25:49;;;;;;:::i;939:351:48:-;1206:48;;;-1:-1:-1;1206:48:48;;438:878:89;;;1077:202:48;;;;438:878:89;539:66:48;438:878:89;;709:66:48;438:878:89;868:66:48;;438:878:89;868:66:48;;;;438:878:89;868:66:48;;;438:878:89;;868:66:48;;;438:878:89;868:66:48;1077:202;;;;;;:::i;1206:48::-;1240:13;1206:48;;;438:878:89;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;8278:1282:48;8416:22;;;;438:878:89;;8399:40:48;;438:878:89;8399:40:48;;;438:878:89;;;:::i;8399:40:48:-;438:878:89;8389:51:48;;438:878:89;;;;;;;;;;;;8451:34:48;438:878:89;;8525:14:48;;;8712:82;8515:25;438:878:89;8525:14:48;;;8515:25;:::i;:::-;8750:14;8712:82;8766:14;8750;;;438:878:89;8766:14:48;;438:878:89;;;;8712:82:48;;;8399:40;8712:82;;;;1799:66;;;;;;;;;438:878:89;1799:66:48;438:878:89;;1799:66:48;;;438:878:89;1799:66:48;;;438:878:89;1799:66:48;;;438:878:89;1799:66:48;438:878:89;1799:66:48;8447:1109;2763:4;8812:29;;2763:4;;-1:-1:-1;;8998:16:48;;;438:878:89;;8399:40:48;438:878:89;;;8988:27:48;438:878:89;;;1979:66:48;8959:70;;;438:878:89;;;1979:66:48;;;438:878:89;;;;1979:66:48;;;438:878:89;;;;8959:70:48;;438:878:89;1979:66:48;;;8959:70;1979:66;8808:748;2867:4;9047:35;;2867:4;;-1:-1:-1;;9216:18:48;;438:878:89;;;;2174:66:48;8399:40;9181:67;;438:878:89;;;1979:66:48;;;438:878:89;;;;1979:66:48;;;438:878:89;;;;9181:67:48;438:878:89;1979:66:48;;;9181:67;1979:66;9043:513;2556:4;9266:28;2556:4;;-1:-1:-1;9443:15:48;;438:878:89;;;;1979:66:48;8399:40;9414:58;;438:878:89;;;1979:66:48;;;438:878:89;;;;1979:66:48;;;438:878:89;;;;9414:58:48;438:878:89;1979:66:48;;;9414:58;1979:66;9262:294;9523:26;438:878:89;9523:26:48;438:878:89;;9523:26:48;438:878:89;2482:4:48;438:878:89;9523:26:48;438:878:89;;;;;;;;;;;;;;;;;;:::i;6108:1663:51:-;;;;;;438:878:89;6304:14:51;438:878:89;6320:17:51;438:878:89;6339:18:51;438:878:89;6359:14:51;438:878:89;;;;:::i;:::-;;2556:4:48;;6423:47:51;6522:17;;438:878:89;6553:26:51;;;;;;438:878:89;;;;;;;;;7647:33:51;;:71;;;6546:1091;7643:124;;6108:1663;:::o;7647:71::-;7698:20;;;;438:878:89;7684:34:51;;;7647:71;;6546:1091;1318:135:68;;;;-1:-1:-1;1201:256:68;;-1:-1:-1;1201:256:68;;-1:-1:-1;1201:256:68;;-1:-1:-1;1201:256:68;;;;6717:16:51;;1318:135:68;;;;;;;6717:16:51;:::i;:::-;6773:57;;438:878:89;6773:28:51;;;;;:57;;;;6522:17;6843:35;;6522:17;;6971:26;;6999:4;6971:26;;6953:65;6971:26;;;;:::i;:::-;6953:65;;;:::i;:::-;6890:128;;;;;;;;;;;;;;;;6839:339;;;;7190:18;7186:122;;7315:16;438:878:89;;;;7344:32:51;7340:89;;6839:339;7441:28;;;;7437:115;;7560:23;;;;;2556:4:48;7603:27:51;6546:1091;;;;;;;;;;;;7437:115;7488:55;438:878:89;7488:55:51;;438:878:89;;;;;;;9523:26:48;7340:89:51;438:878:89;2556:4:48;;7340:89:51;;7186:122;7253:26;;7227:72;7253:26;;;;;;:::i;:::-;438:878:89;;;;;7227:72:51;;;;;;;;;;:::i;6839:339::-;7122:26;;;;;7150:4;7122:26;;7099:70;7122:26;;;;:::i;:::-;7099:70;;;:::i;:::-;-1:-1:-1;7043:126:51;;;;;;;;;;;;;6839:339;;6773:57;;;;842:1;;;;;;;;;;438:878:89;;;842:1:51;;;;;:::o;:::-;;;;;;438:878:89;;842:1:51;;;;;;;;:::i;:::-;438:878:89;842:1:51;;;;;438:878:89;;;842:1:51;;;438:878:89;842:1:51;;;;;;;;:::i;1206:::-;;;;;;;;;438:878:89;1206:1:51;:::o;7775:11084::-;;;;;438:878:89;7930:12:51;438:878:89;7968:14:51;438:878:89;8044:26:51;;;;;;7775:11084;;;;;:::o;8037:10812::-;798:135:68;;;;;;;;;;;;;;;;683:254;;;;438:878:89;;8454:27:51;;;8450:864;;9374:20;786:1;9374:20;;9370:676;;842:1;10096:30;;10092:1383;;885:1;11512:17;;11508:279;;8405:1;11826:19;;11822:656;;1023:1;12517:19;;12513:1278;;978:1;13833:22;;13829:518;;1080:1;14398:31;;14394:933;;1150:1;15464:44;;15460:617;;1206:1;16127:30;;16123:1308;;1270:2;17489:38;;17485:1312;;18814:26;438:878:89;18814:26:51;8405:1;438:878:89;;;;;9523:26:48;17485:1312:51;17799:16;;;;;;;;;885:1;17799:16;;17832:15;;;17828:99;;17485:1312;1840:135:68;;;;;;;;;18081:16:51;;438:878:89;;;;;;2363:226:68;;;;;;;;;;;;;;;;;;;;;;;;;438:878:89;;;18467:26:51;;;;;;;:::i;:::-;438:878:89;;;18405:89:51;;438:878:89;;;;18405:89:51;;438:878:89;8405:1:51;18405:89;;;:::i;:::-;;438:878:89;;;;18405:89:51;;;;;;;;;;;;18637:51;18405:89;438:878:89;18405:89:51;;;17485:1312;18506:16;438:878:89;18506:16:51;438:878:89;;;;;18637:51:51;;:::i;:::-;18707:59;:18;;;;18728:31;;;545:85:69;;;;;;;461:173;;18728:31:51;18778:8;8037:10812;;;;;;;;18707:59;;;;18405:89;438:878:89;18405:89:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;17828:99;798:135:68;;;;;;;-1:-1:-1;798:135:68;;17828:99:51;;16123:1308;16429:16;;;;;;;;;885:1;16429:16;;16462:15;;;16458:99;;16123:1308;1840:135:68;;;;;;;;;16749:16:51;;438:878:89;;;;;;2363:226:68;;;;;;;;;;;;;;;;;;;;;;;;;438:878:89;;;17100:26:51;;;;;;;:::i;:::-;438:878:89;;;17051:76:51;;438:878:89;;;;17051:76:51;;438:878:89;8405:1:51;17051:76;;;:::i;:::-;;438:878:89;;;;17051:76:51;;;;;;;;;;;;17271:51;17051:76;438:878:89;17051:76:51;;;17139:16;438:878:89;17139:16:51;438:878:89;;;;;17271:51:51;;:::i;:::-;17341:59;:18;;;;17362:31;;;545:85:69;;;;;;;461:173;;17362:31:51;17412:8;;;17341:59;;;;16458:99;798:135:68;;;;;;;-1:-1:-1;798:135:68;;16458:99:51;;15460:617;2926:232:68;-1:-1:-1;2102:103:68;;;;-1:-1:-1;2926:232:68;;;;;;;;;;2102:103;;;15775:28:51;2926:232:68;15775:28:51;:::i;:::-;15819:29;;15815:88;;15460:617;15930:38;;;:::i;15815:88::-;15873:17;;-1:-1:-1;15815:88:51;;14394:933;14742:16;;;;;;;;;14754:4;14742:16;14775:15;;;14771:99;;14394:933;15044:61;438:878:89;3511:494:68;15024:92:51;3511:494:68;;;;:::i;:::-;14943:53:51;;;;438:878:89;;;15044:61:51;;;;;;;;1080:1;;;;;;;;438:878:89;1080:1:51;;;15044:61;438:878:89;15034:72:51;;438:878:89;;;15024:92:51;;;;740:1;;;;438:878:89;740:1:51;;;;;438:878:89;;;;740:1:51;;;438:878:89;740:1:51;;;438:878:89;740:1:51;438:878:89;740:1:51;15024:92;;;;;;786:1;15024:92;;;;;15176:42;15024:92;438:878:89;;15024:92:51;438:878:89;;;;;15176:42:51;;:::i;14771:99::-;798:135:68;;;;;;;;;;-1:-1:-1;14771:99:51;;13829:518;2926:232:68;-1:-1:-1;2102:103:68;;;;-1:-1:-1;2926:232:68;;;;;;;;;;2102:103;;;14099:20:51;;;14095:79;;13829:518;14201:37;;;:::i;14095:79::-;14144:17;;-1:-1:-1;14095:79:51;;12513:1278;12882:16;;;;;;;;2321:4:48;12882:16:51;;12851:53;12876:28;12894:4;12882:16;;438:878:89;2321:4:48;438:878:89;;;2321:4:48;;12851:53:51;12920:19;;;12916:107;;12513:1278;885:1;13069:16;13102:22;;13098:114;;12513:1278;1201:256:68;;;13399:60:51;;13432:26;;1318:135:68;;;;;;;;;2321:4:48;;438:878:89;;13432:26:51;;;;;:::i;:::-;13399:60;;;;:::i;:::-;13471:16;-1:-1:-1;13504:35:51;13500:92;;12513:1278;13619:63;;;;;:::i;13500:92::-;438:878:89;;;;13500:92:51;;13098:114;-1:-1:-1;1058:135:68;;;;;;;;;13098:114:51;;12916:107;798:135:68;;;;;;;-1:-1:-1;798:135:68;;;;;12916:107:51;;11822:656;12023:16;;;2213:380:68;12312:26:51;12023:16;;;;;;12035:4;12279:60;12023:16;;2213:380:68;;;;;;2363:226;;;;;;;;;;;;;;;;;;;2213:380;;;438:878:89;;;;12312:26:51;;;;;:::i;:::-;12279:60;;;;:::i;:::-;;12416:31;12279:60;438:878:89;;12416:31:51;545:85:69;;;;;;;461:173;;11508:279:51;2926:232:68;-1:-1:-1;2926:232:68;-1:-1:-1;2926:232:68;;;;;;;;;2102:103;;;;;;;11697:59:51;:18;;;;11718:31;;;545:85:69;;;;;;;461:173;;10092:1383:51;10387:16;;;;;;;;;885:1;10387:16;;10420:15;;;10416:99;;10092:1383;1840:135:68;;;;;;;2213:380;;1840:135;;;10669:47:51;;438:878:89;;;;10688:28:51;2321:4:48;10669:47:51;2213:380:68;;;;;;2363:226;;;;;;;;;;;;;;;;;;;2213:380;;;438:878:89;;;11024:26:51;10983:68;;11024:26;;;;;;;:::i;:::-;438:878:89;;;;;;10983:68:51;;;;;;;438:878:89;10983:68:51;;8405:1;10983:68;;;:::i;:::-;;438:878:89;;10983:68:51;;;;;;;438:878:89;10983:68:51;438:878:89;10983:68:51;438:878:89;10983:68:51;;;10092:1383;438:878:89;;10983:97:51;10979:203;;11193:16;;438:878:89;11324:42:51;11193:16;438:878:89;;;;;11324:42:51;;:::i;10979:203::-;11103:66;11142:26;;;;;;;;:::i;:::-;438:878:89;;;11103:66:51;;;;;;8405:1;11103:66;;;:::i;10983:68::-;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;10416:99;798:135:68;;;;;;;-1:-1:-1;798:135:68;;10416:99:51;;9370:676;9567:16;9579:4;9567:16;;;;;;;;;;9600:15;;;9596:99;;9370:676;1840:135:68;;;;9895:42:51;;438:878:89;;;;;1840:135:68;;;;;9895:42:51;:::i;9596:99::-;798:135:68;;;;;;;-1:-1:-1;798:135:68;;9596:99:51;;8450:864;8794:16;;;;;;;;;;8806:4;8794:16;8827:15;;;8823:99;;8450:864;3511:494:68;9076:27:51;438:878:89;3511:494:68;9076:27:51;3511:494:68;;;;:::i;:::-;8995:53:51;;;438:878:89;;9076:27:51;;;;;740:1;;;;438:878:89;740:1:51;;;;;438:878:89;;;;740:1:51;;;438:878:89;740:1:51;;;438:878:89;740:1:51;438:878:89;740:1:51;8823:99;798:135:68;;;;-1:-1:-1;798:135:68;;;;;;-1:-1:-1;9076:27:51;8823:99;;438:878:89;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;7820:454:48;;438:878:89;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;-1:-1:-1;8164:3:48;438:878:89;;8146:16:48;;;;;8202:8;;438:878:89;8202:8:48;;;:::i;:::-;;438:878:89;;;;7708:7:48;438:878:89;7708:7:48;;438:878:89;7727:6:48;438:878:89;7727:6:48;;;438:878:89;;;;;7717:17:48;7736:10;;;;438:878:89;7748:14:48;;;438:878:89;;;7764:14:48;7780:17;7764:14;;;438:878:89;;;7780:17:48;;438:878:89;;;;7667:138:48;438:878:89;7667:138:48;;438:878:89;1478:66:48;438:878:89;;;1478:66:48;;438:878:89;7736:10:48;1478:66;;438:878:89;7748:14:48;1478:66;;438:878:89;7764:14:48;1478:66;;438:878:89;7780:17:48;1478:66;;438:878:89;1478:66:48;;;438:878:89;1478:66:48;;;438:878:89;1478:66:48;7667:138;;;;;;:::i;:::-;438:878:89;7650:161:48;;8177:34;;;;:::i;:::-;2556:4;438:878:89;8131:13:48;;8146:16;;;;;438:878:89;;8240:28:48;;438:878:89;;8240:28:48;;438:878:89;;;:::i;3511:494:68:-;3690:173;;;;;;;;;;;;3998:2;3955:14;3931:39;;438:878:89;;;;;;;;;3511:494:68;:::o;1947:181:51:-;;438:878:89;;2068:54:51;438:878:89;2068:54:51;;;438:878:89;;;;;;;;;;;;;;;;2068:54:51;;;;;;:::i;2132:210::-;;438:878:89;;2263:73:51;;;;438:878:89;;;;;;;;;;;;;;;;;2263:73:51;;;;;;:::i;2562:182::-;438:878:89;;2681:57:51;;;438:878:89;;;;;;;;;2681:57:51;;;;;;:::i;9842:280:48:-;10068:48;;10027:18;9956:44;438:878:89;9972:18:48;;;438:878:89;;;9956:44:48;:::i;2748:211:51:-;438:878:89;;2878:75:51;;;438:878:89;;;;;;;;;2878:75:51;;;;;;:::i;2346:212::-;;438:878:89;;2478:74:51;438:878:89;2478:74:51;;;438:878:89;;;;;;;;;;;;;;;;;;;;2478:74:51;;;;;;:::i","linkReferences":{}},"methodIdentifiers":{"execute(bytes,bytes)":"1f6a1eb9","expectedOpHash()":"2761e20a","expectedSignature()":"d7c4dd5a","getStaticSignature(bytes32)":"92dcb3fc","isValidSignature(bytes32,bytes)":"1626ba7e","readNonce(uint256)":"8c3f5563","recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":"ad55366b","recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":"13792a4a","selfExecute(bytes)":"6ea44577","setExpectedOpHash(bytes32)":"920316f6","setExpectedSignature(bytes)":"36fd922d","setStaticSignature(bytes32,address,uint96)":"f727ef1c","updateImageHash(bytes32)":"29561426","writeNonce(uint256,uint256)":"650fb676"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_provided\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_current\",\"type\":\"uint256\"}],\"name\":\"BadNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_signer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"InvalidERC1271Signature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"}],\"name\":\"InvalidKind\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"InvalidSapientSignature\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"InvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_flag\",\"type\":\"uint256\"}],\"name\":\"InvalidSignatureFlag\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_weight\",\"type\":\"uint256\"}],\"name\":\"InvalidSignatureWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_expires\",\"type\":\"uint256\"}],\"name\":\"InvalidStaticSignatureExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_expectedCaller\",\"type\":\"address\"}],\"name\":\"InvalidStaticSignatureWrongCaller\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_weight\",\"type\":\"uint256\"}],\"name\":\"LowWeightChainedSignature\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_gasLeft\",\"type\":\"uint256\"}],\"name\":\"NotEnoughGas\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_returnData\",\"type\":\"bytes\"}],\"name\":\"Reverted\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"checkpoint\",\"type\":\"uint256\"}],\"internalType\":\"struct Snapshot\",\"name\":\"_snapshot\",\"type\":\"tuple\"}],\"name\":\"UnusedSnapshot\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nextCheckpoint\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_checkpoint\",\"type\":\"uint256\"}],\"name\":\"WrongChainedCheckpointOrder\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_returnData\",\"type\":\"bytes\"}],\"name\":\"CallAborted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_returnData\",\"type\":\"bytes\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"CallSkipped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"CallSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_space\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_newNonce\",\"type\":\"uint256\"}],\"name\":\"NonceChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"_timestamp\",\"type\":\"uint96\"}],\"name\":\"StaticSignatureSet\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"expectedOpHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"expectedSignature\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"getStaticSignature\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_space\",\"type\":\"uint256\"}],\"name\":\"readNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"recoverPartialSignature\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isValidImage\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"checkpoint\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"opHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"recoverSapientSignature\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"}],\"name\":\"selfExecute\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"}],\"name\":\"setExpectedOpHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"setExpectedSignature\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"_timestamp\",\"type\":\"uint96\"}],\"name\":\"setStaticSignature\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_imageHash\",\"type\":\"bytes32\"}],\"name\":\"updateImageHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"}],\"name\":\"writeNonce\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"execute(bytes,bytes)\":{\"params\":{\"_payload\":\"The payload\",\"_signature\":\"The signature\"}},\"getStaticSignature(bytes32)\":{\"params\":{\"_hash\":\"The hash to get the static signature for\"},\"returns\":{\"_0\":\"address The address associated with the static signature\",\"_1\":\"timestamp The timestamp of the static signature\"}},\"isValidSignature(bytes32,bytes)\":{\"details\":\"MUST return the correct magic value if the signature provided is valid for the provided hash > The bytes4 magic value to return when signature is valid is 0x1626ba7e : bytes4(keccak256(\\\"isValidSignature(bytes32,bytes)\\\") > This function MAY modify Ethereum's state\",\"params\":{\"_hash\":\"keccak256 hash that was signed\",\"_signature\":\"Signature byte array associated with _data\"},\"returns\":{\"_0\":\"Magic value 0x1626ba7e if the signature is valid and 0x0 otherwise\"}},\"readNonce(uint256)\":{\"params\":{\"_space\":\"The space\"},\"returns\":{\"_0\":\"nonce The nonce\"}},\"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"params\":{\"_payload\":\"The payload\",\"_signature\":\"The signature to recover\"},\"returns\":{\"checkpoint\":\"The checkpoint identifier\",\"imageHash\":\"The derived image hash\",\"isValidImage\":\"Whether the image hash is valid\",\"opHash\":\"The hash of the payload\",\"threshold\":\"The signature threshold\",\"weight\":\"The derived weight\"}},\"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"params\":{\"payload\":\"The payload to recover the signature from\",\"signature\":\"The signature to recover the image hash from\"},\"returns\":{\"_0\":\"The recovered image hash\"}},\"selfExecute(bytes)\":{\"details\":\"Callable only by the contract itself\",\"params\":{\"_payload\":\"The payload\"}},\"setStaticSignature(bytes32,address,uint96)\":{\"details\":\"Only callable by the wallet itself\",\"params\":{\"_address\":\"The address to associate with the static signature\",\"_hash\":\"The hash to set the static signature for\",\"_timestamp\":\"The timestamp of the static signature\"}},\"updateImageHash(bytes32)\":{\"details\":\"Only callable by the wallet itself\",\"params\":{\"_imageHash\":\"The new image hash\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"BadNonce(uint256,uint256,uint256)\":[{\"notice\":\"Error thrown when the nonce is bad\"}],\"InvalidERC1271Signature(bytes32,address,bytes)\":[{\"notice\":\"Error thrown when the ERC1271 signature is invalid\"}],\"InvalidKind(uint8)\":[{\"notice\":\"Error thrown when the kind is invalid\"}],\"InvalidSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":[{\"notice\":\"Error thrown when the sapient signature is invalid\"}],\"InvalidSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":[{\"notice\":\"Error thrown when a signature is invalid\"}],\"InvalidSignatureFlag(uint256)\":[{\"notice\":\"Error thrown when the signature flag is invalid\"}],\"InvalidSignatureWeight(uint256,uint256)\":[{\"notice\":\"Error thrown when the signature weight is invalid\"}],\"InvalidStaticSignatureExpired(bytes32,uint256)\":[{\"notice\":\"Error thrown when the static signature has expired\"}],\"InvalidStaticSignatureWrongCaller(bytes32,address,address)\":[{\"notice\":\"Error thrown when the static signature has the wrong caller\"}],\"LowWeightChainedSignature(bytes,uint256,uint256)\":[{\"notice\":\"Error thrown when the weight is too low for a chained signature\"}],\"NotEnoughGas((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint256,uint256)\":[{\"notice\":\"Error thrown when there is not enough gas\"}],\"OnlySelf(address)\":[{\"notice\":\"Error thrown when the caller is not the same as the contract\"}],\"Reverted((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint256,bytes)\":[{\"notice\":\"Error thrown when a call reverts\"}],\"UnusedSnapshot((bytes32,uint256))\":[{\"notice\":\"Error thrown when the snapshot is unused\"}],\"WrongChainedCheckpointOrder(uint256,uint256)\":[{\"notice\":\"Error thrown when the checkpoint order is wrong\"}]},\"events\":{\"CallAborted(bytes32,uint256,bytes)\":{\"notice\":\"Emitted when a call is aborted\"},\"CallFailed(bytes32,uint256,bytes)\":{\"notice\":\"Emitted when a call fails\"},\"CallSkipped(bytes32,uint256)\":{\"notice\":\"Emitted when a call is skipped\"},\"CallSucceeded(bytes32,uint256)\":{\"notice\":\"Emitted when a call succeeds\"},\"NonceChange(uint256,uint256)\":{\"notice\":\"Emitted when the nonce is changed\"},\"StaticSignatureSet(bytes32,address,uint96)\":{\"notice\":\"Event emitted when a static signature is set\"}},\"kind\":\"user\",\"methods\":{\"execute(bytes,bytes)\":{\"notice\":\"Execute a call\"},\"getStaticSignature(bytes32)\":{\"notice\":\"Get the static signature for a specific hash\"},\"isValidSignature(bytes32,bytes)\":{\"notice\":\"Verifies whether the provided signature is valid with respect to the provided hash\"},\"readNonce(uint256)\":{\"notice\":\"Read the nonce\"},\"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"notice\":\"Recover the partial signature\"},\"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"notice\":\"Recovers the image hash of a given signature\"},\"selfExecute(bytes)\":{\"notice\":\"Execute a call\"},\"setStaticSignature(bytes32,address,uint96)\":{\"notice\":\"Set the static signature for a specific hash\"},\"updateImageHash(bytes32)\":{\"notice\":\"Update the image hash\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/modules/Calls.t.sol\":\"CallsImp\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/modules/Calls.sol\":{\"keccak256\":\"0xcd0d38d0fd248e4443032dede2b8892ea0ca7e55538cd54082830f6b98d8edb1\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://617bb6d0724b18f3d77347cc454a57c1c916a0818a592552bd7fa226aa41a306\",\"dweb:/ipfs/Qmeet85Ux6cKq9JmC25JnTzFnRrgDpkyRik2svZLWt4fov\"]},\"src/modules/Nonce.sol\":{\"keccak256\":\"0x56fbf6dc9b34ab60ae8a32ffb6f583c003bb8f4a5223ce704e982400fa403fab\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://492f53628633b862702cf8f9b726067a722c94028133a8a4c4fcf3d0e73ad803\",\"dweb:/ipfs/QmTHNy4XbH47YZaqKDpknb5aApjRH9HVAREHN7N5vEFWEV\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/Storage.sol\":{\"keccak256\":\"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da\",\"dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn\"]},\"src/modules/auth/BaseAuth.sol\":{\"keccak256\":\"0xbf2e40def03fcb5f4a5129b2f5803e21951325b92e00126cbe1427b7c25cfefd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://b560905fcc4b957d27c2abed78a1e82529c89fa472e91b3d108fbfd91aa7c3f7\",\"dweb:/ipfs/QmRjLLtTWE6dFX2kBQCgLz7ossfMxhAFgDC8Jx9XuGL6Wy\"]},\"src/modules/auth/BaseSig.sol\":{\"keccak256\":\"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8\",\"dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3\"]},\"src/modules/auth/SelfAuth.sol\":{\"keccak256\":\"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42\",\"dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W\"]},\"src/modules/interfaces/IAuth.sol\":{\"keccak256\":\"0xf6fa30af2ec91d5fbeac17c9b1f2aa73b7883c9ac98745605007e57666394b91\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://6e90a87978519462f9612f4a17e38fddc1c7bcf700ff834a1de7dce326f30353\",\"dweb:/ipfs/QmXmWAsRRK6t4jPs4VcXrouyokxdALM28D3odX7ub48WEp\"]},\"src/modules/interfaces/ICheckpointer.sol\":{\"keccak256\":\"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1\",\"dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t\"]},\"src/modules/interfaces/IDelegatedExtension.sol\":{\"keccak256\":\"0xa2ae897e90fd70dd4a9e172bc04d019ba9c512e72c2df65fcb6daf87dd5ceb90\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://cdf4b7c3dfb0aef6c9dbe8b2a0542018dc756ef2252d7101bcb3186192da0a11\",\"dweb:/ipfs/QmPHCVu1DJ7fBrPBYA5y3hoF3a3XFEBwYCZ1ErGaxPhcYL\"]},\"src/modules/interfaces/IERC1271.sol\":{\"keccak256\":\"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b\",\"dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF\"]},\"src/modules/interfaces/IPartialAuth.sol\":{\"keccak256\":\"0x0d1aa021615d8e90696e71a9468331457a1babfa2ffe169654b7456e5bcb7a73\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://bbacd149a6358ab0d4b9c588d2e3a55fc71ed4723269150d7b91ca70092f6519\",\"dweb:/ipfs/QmUSwtrYCrRcRFsy5rCzdMPrw1FCU7ZoeXdsW6kK9yc8FK\"]},\"src/modules/interfaces/ISapient.sol\":{\"keccak256\":\"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489\",\"dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"src/utils/LibOptim.sol\":{\"keccak256\":\"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81\",\"dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x\"]},\"test/modules/Calls.t.sol\":{\"keccak256\":\"0xcfab8da4dd95a1b60092a312c97f0c395db5f454ab1c0c6410dea4d1078fc7ad\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e816c49b42e85c1fd80e62ea06a646b4ffe648ae061125303bfdbf4f4e7f79fe\",\"dweb:/ipfs/Qmbjj8coE44jpJd6cE1hq35JciEu9cq1hgxAgxYHBWXDXV\"]},\"test/utils/PrimitivesRPC.sol\":{\"keccak256\":\"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe\",\"dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv\"]},\"test/utils/TestUtils.sol\":{\"keccak256\":\"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad\",\"dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint256","name":"_space","type":"uint256"},{"internalType":"uint256","name":"_provided","type":"uint256"},{"internalType":"uint256","name":"_current","type":"uint256"}],"type":"error","name":"BadNonce"},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32"},{"internalType":"address","name":"_signer","type":"address"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"type":"error","name":"InvalidERC1271Signature"},{"inputs":[{"internalType":"uint8","name":"kind","type":"uint8"}],"type":"error","name":"InvalidKind"},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"type":"error","name":"InvalidSapientSignature"},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"type":"error","name":"InvalidSignature"},{"inputs":[{"internalType":"uint256","name":"_flag","type":"uint256"}],"type":"error","name":"InvalidSignatureFlag"},{"inputs":[{"internalType":"uint256","name":"_threshold","type":"uint256"},{"internalType":"uint256","name":"_weight","type":"uint256"}],"type":"error","name":"InvalidSignatureWeight"},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32"},{"internalType":"uint256","name":"_expires","type":"uint256"}],"type":"error","name":"InvalidStaticSignatureExpired"},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32"},{"internalType":"address","name":"_caller","type":"address"},{"internalType":"address","name":"_expectedCaller","type":"address"}],"type":"error","name":"InvalidStaticSignatureWrongCaller"},{"inputs":[{"internalType":"bytes","name":"_signature","type":"bytes"},{"internalType":"uint256","name":"_threshold","type":"uint256"},{"internalType":"uint256","name":"_weight","type":"uint256"}],"type":"error","name":"LowWeightChainedSignature"},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_gasLeft","type":"uint256"}],"type":"error","name":"NotEnoughGas"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"}],"type":"error","name":"OnlySelf"},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"bytes","name":"_returnData","type":"bytes"}],"type":"error","name":"Reverted"},{"inputs":[{"internalType":"struct Snapshot","name":"_snapshot","type":"tuple","components":[{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"uint256","name":"checkpoint","type":"uint256"}]}],"type":"error","name":"UnusedSnapshot"},{"inputs":[{"internalType":"uint256","name":"_nextCheckpoint","type":"uint256"},{"internalType":"uint256","name":"_checkpoint","type":"uint256"}],"type":"error","name":"WrongChainedCheckpointOrder"},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_index","type":"uint256","indexed":false},{"internalType":"bytes","name":"_returnData","type":"bytes","indexed":false}],"type":"event","name":"CallAborted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_index","type":"uint256","indexed":false},{"internalType":"bytes","name":"_returnData","type":"bytes","indexed":false}],"type":"event","name":"CallFailed","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_index","type":"uint256","indexed":false}],"type":"event","name":"CallSkipped","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_index","type":"uint256","indexed":false}],"type":"event","name":"CallSucceeded","anonymous":false},{"inputs":[{"internalType":"uint256","name":"_space","type":"uint256","indexed":false},{"internalType":"uint256","name":"_newNonce","type":"uint256","indexed":false}],"type":"event","name":"NonceChange","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32","indexed":false},{"internalType":"address","name":"_address","type":"address","indexed":false},{"internalType":"uint96","name":"_timestamp","type":"uint96","indexed":false}],"type":"event","name":"StaticSignatureSet","anonymous":false},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"payable","type":"function","name":"execute"},{"inputs":[],"stateMutability":"view","type":"function","name":"expectedOpHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"expectedSignature","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getStaticSignature","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"view","type":"function","name":"isValidSignature","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"uint256","name":"_space","type":"uint256"}],"stateMutability":"view","type":"function","name":"readNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"view","type":"function","name":"recoverPartialSignature","outputs":[{"internalType":"uint256","name":"threshold","type":"uint256"},{"internalType":"uint256","name":"weight","type":"uint256"},{"internalType":"bool","name":"isValidImage","type":"bool"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"uint256","name":"checkpoint","type":"uint256"},{"internalType":"bytes32","name":"opHash","type":"bytes32"}]},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"view","type":"function","name":"recoverSapientSignature","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"}],"stateMutability":"payable","type":"function","name":"selfExecute"},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"setExpectedOpHash"},{"inputs":[{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"setExpectedSignature"},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint96","name":"_timestamp","type":"uint96"}],"stateMutability":"nonpayable","type":"function","name":"setStaticSignature"},{"inputs":[{"internalType":"bytes32","name":"_imageHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"updateImageHash"},{"inputs":[{"internalType":"uint256","name":"_space","type":"uint256"},{"internalType":"uint256","name":"_nonce","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"writeNonce"}],"devdoc":{"kind":"dev","methods":{"execute(bytes,bytes)":{"params":{"_payload":"The payload","_signature":"The signature"}},"getStaticSignature(bytes32)":{"params":{"_hash":"The hash to get the static signature for"},"returns":{"_0":"address The address associated with the static signature","_1":"timestamp The timestamp of the static signature"}},"isValidSignature(bytes32,bytes)":{"details":"MUST return the correct magic value if the signature provided is valid for the provided hash > The bytes4 magic value to return when signature is valid is 0x1626ba7e : bytes4(keccak256(\"isValidSignature(bytes32,bytes)\") > This function MAY modify Ethereum's state","params":{"_hash":"keccak256 hash that was signed","_signature":"Signature byte array associated with _data"},"returns":{"_0":"Magic value 0x1626ba7e if the signature is valid and 0x0 otherwise"}},"readNonce(uint256)":{"params":{"_space":"The space"},"returns":{"_0":"nonce The nonce"}},"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"params":{"_payload":"The payload","_signature":"The signature to recover"},"returns":{"checkpoint":"The checkpoint identifier","imageHash":"The derived image hash","isValidImage":"Whether the image hash is valid","opHash":"The hash of the payload","threshold":"The signature threshold","weight":"The derived weight"}},"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"params":{"payload":"The payload to recover the signature from","signature":"The signature to recover the image hash from"},"returns":{"_0":"The recovered image hash"}},"selfExecute(bytes)":{"details":"Callable only by the contract itself","params":{"_payload":"The payload"}},"setStaticSignature(bytes32,address,uint96)":{"details":"Only callable by the wallet itself","params":{"_address":"The address to associate with the static signature","_hash":"The hash to set the static signature for","_timestamp":"The timestamp of the static signature"}},"updateImageHash(bytes32)":{"details":"Only callable by the wallet itself","params":{"_imageHash":"The new image hash"}}},"version":1},"userdoc":{"kind":"user","methods":{"execute(bytes,bytes)":{"notice":"Execute a call"},"getStaticSignature(bytes32)":{"notice":"Get the static signature for a specific hash"},"isValidSignature(bytes32,bytes)":{"notice":"Verifies whether the provided signature is valid with respect to the provided hash"},"readNonce(uint256)":{"notice":"Read the nonce"},"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"notice":"Recover the partial signature"},"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"notice":"Recovers the image hash of a given signature"},"selfExecute(bytes)":{"notice":"Execute a call"},"setStaticSignature(bytes32,address,uint96)":{"notice":"Set the static signature for a specific hash"},"updateImageHash(bytes32)":{"notice":"Update the image hash"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/modules/Calls.t.sol":"CallsImp"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/modules/Calls.sol":{"keccak256":"0xcd0d38d0fd248e4443032dede2b8892ea0ca7e55538cd54082830f6b98d8edb1","urls":["bzz-raw://617bb6d0724b18f3d77347cc454a57c1c916a0818a592552bd7fa226aa41a306","dweb:/ipfs/Qmeet85Ux6cKq9JmC25JnTzFnRrgDpkyRik2svZLWt4fov"],"license":"Apache-2.0"},"src/modules/Nonce.sol":{"keccak256":"0x56fbf6dc9b34ab60ae8a32ffb6f583c003bb8f4a5223ce704e982400fa403fab","urls":["bzz-raw://492f53628633b862702cf8f9b726067a722c94028133a8a4c4fcf3d0e73ad803","dweb:/ipfs/QmTHNy4XbH47YZaqKDpknb5aApjRH9HVAREHN7N5vEFWEV"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/Storage.sol":{"keccak256":"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f","urls":["bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da","dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn"],"license":"Apache-2.0"},"src/modules/auth/BaseAuth.sol":{"keccak256":"0xbf2e40def03fcb5f4a5129b2f5803e21951325b92e00126cbe1427b7c25cfefd","urls":["bzz-raw://b560905fcc4b957d27c2abed78a1e82529c89fa472e91b3d108fbfd91aa7c3f7","dweb:/ipfs/QmRjLLtTWE6dFX2kBQCgLz7ossfMxhAFgDC8Jx9XuGL6Wy"],"license":"Apache-2.0"},"src/modules/auth/BaseSig.sol":{"keccak256":"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa","urls":["bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8","dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3"],"license":"Apache-2.0"},"src/modules/auth/SelfAuth.sol":{"keccak256":"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c","urls":["bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42","dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W"],"license":"Apache-2.0"},"src/modules/interfaces/IAuth.sol":{"keccak256":"0xf6fa30af2ec91d5fbeac17c9b1f2aa73b7883c9ac98745605007e57666394b91","urls":["bzz-raw://6e90a87978519462f9612f4a17e38fddc1c7bcf700ff834a1de7dce326f30353","dweb:/ipfs/QmXmWAsRRK6t4jPs4VcXrouyokxdALM28D3odX7ub48WEp"],"license":"Apache-2.0"},"src/modules/interfaces/ICheckpointer.sol":{"keccak256":"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513","urls":["bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1","dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t"],"license":"Apache-2.0"},"src/modules/interfaces/IDelegatedExtension.sol":{"keccak256":"0xa2ae897e90fd70dd4a9e172bc04d019ba9c512e72c2df65fcb6daf87dd5ceb90","urls":["bzz-raw://cdf4b7c3dfb0aef6c9dbe8b2a0542018dc756ef2252d7101bcb3186192da0a11","dweb:/ipfs/QmPHCVu1DJ7fBrPBYA5y3hoF3a3XFEBwYCZ1ErGaxPhcYL"],"license":"Apache-2.0"},"src/modules/interfaces/IERC1271.sol":{"keccak256":"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9","urls":["bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b","dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF"],"license":"Apache-2.0"},"src/modules/interfaces/IPartialAuth.sol":{"keccak256":"0x0d1aa021615d8e90696e71a9468331457a1babfa2ffe169654b7456e5bcb7a73","urls":["bzz-raw://bbacd149a6358ab0d4b9c588d2e3a55fc71ed4723269150d7b91ca70092f6519","dweb:/ipfs/QmUSwtrYCrRcRFsy5rCzdMPrw1FCU7ZoeXdsW6kK9yc8FK"],"license":"Apache-2.0"},"src/modules/interfaces/ISapient.sol":{"keccak256":"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359","urls":["bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489","dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"src/utils/LibOptim.sol":{"keccak256":"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde","urls":["bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81","dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x"],"license":"Apache-2.0"},"test/modules/Calls.t.sol":{"keccak256":"0xcfab8da4dd95a1b60092a312c97f0c395db5f454ab1c0c6410dea4d1078fc7ad","urls":["bzz-raw://e816c49b42e85c1fd80e62ea06a646b4ffe648ae061125303bfdbf4f4e7f79fe","dweb:/ipfs/Qmbjj8coE44jpJd6cE1hq35JciEu9cq1hgxAgxYHBWXDXV"],"license":"Apache-2.0"},"test/utils/PrimitivesRPC.sol":{"keccak256":"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe","urls":["bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe","dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv"],"license":"Apache-2.0"},"test/utils/TestUtils.sol":{"keccak256":"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79","urls":["bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad","dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa"],"license":"Apache-2.0"}},"version":1},"id":89} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Calls.t.sol/CallsTest.json b/contracts/artifacts/wallet-contracts-v3/Calls.t.sol/CallsTest.json new file mode 100644 index 00000000..732d8071 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Calls.t.sol/CallsTest.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"calls","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract CallsImp"}],"stateMutability":"view"},{"type":"function","name":"excludeArtifacts","inputs":[],"outputs":[{"name":"excludedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"excludeContracts","inputs":[],"outputs":[{"name":"excludedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"excludeSelectors","inputs":[],"outputs":[{"name":"excludedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"excludeSenders","inputs":[],"outputs":[{"name":"excludedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"targetArtifactSelectors","inputs":[],"outputs":[{"name":"targetedArtifactSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzArtifactSelector[]","components":[{"name":"artifact","type":"string","internalType":"string"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetArtifacts","inputs":[],"outputs":[{"name":"targetedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"targetContracts","inputs":[],"outputs":[{"name":"targetedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"targetInterfaces","inputs":[],"outputs":[{"name":"targetedInterfaces_","type":"tuple[]","internalType":"struct StdInvariant.FuzzInterface[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"artifacts","type":"string[]","internalType":"string[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSelectors","inputs":[],"outputs":[{"name":"targetedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSenders","inputs":[],"outputs":[{"name":"targetedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"test_abort_on_error","inputs":[{"name":"call","type":"tuple","internalType":"struct Payload.Call","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_error_flag_behavior","inputs":[{"name":"call1","type":"tuple","internalType":"struct Payload.Call","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"call2","type":"tuple","internalType":"struct Payload.Call","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_execute","inputs":[{"name":"_opHash","type":"bytes32","internalType":"bytes32"},{"name":"_payload","type":"tuple","internalType":"struct CallsPayload","components":[{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint160","internalType":"uint160"},{"name":"nonce","type":"uint56","internalType":"uint56"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_invalid_signature","inputs":[{"name":"_payload","type":"tuple","internalType":"struct CallsPayload","components":[{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint160","internalType":"uint160"},{"name":"nonce","type":"uint56","internalType":"uint56"}]},{"name":"_signature","type":"bytes","internalType":"bytes"},{"name":"_wrongSignature","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_not_enough_gas","inputs":[{"name":"call","type":"tuple","internalType":"struct Payload.Call","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"txGasLimit","type":"uint256","internalType":"uint256"},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_revert_on_error","inputs":[{"name":"call","type":"tuple","internalType":"struct Payload.Call","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_self_execute","inputs":[{"name":"_payload","type":"tuple","internalType":"struct CallsPayload","components":[{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint160","internalType":"uint160"},{"name":"nonce","type":"uint56","internalType":"uint56"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"CallAborted","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"_returnData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"CallFailed","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"_returnData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"CallSkipped","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"CallSucceeded","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Data","inputs":[{"name":"_data","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"Index","inputs":[{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"NumCalls","inputs":[{"name":"_numCalls","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"OpHash","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"Space","inputs":[{"name":"_space","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"error","name":"InvalidKind","inputs":[{"name":"kind","type":"uint8","internalType":"uint8"}]}],"bytecode":{"object":"0x6080806040523460a057600160ff19600c541617600c55600160ff19601f541617601f556131a380820182811060018060401b03821117608a578291616e9c833903906000f08015607e57601f8054610100600160a81b03191660089290921b610100600160a81b0316919091179055604051616df690816100a68239f35b6040513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b600080fdfe6080604052600436101561001257600080fd5b6000803560e01c8063173c6f3d146137975780631ed7831c146136ee5780632ade3880146135315780632cf8dd4d14612fb9578063305f72b714612f645780633e5e3c2314612ebb5780633f7286f414612e12578063648a8e6a1461298a57806366d9a9a01461282f57806385226c811461277f578063916a17c6146126aa578063aaf796f51461206c578063b0464fdc14611f97578063b5508aa914611ee7578063ba2bd2ee1461106b578063ba414fa614611028578063c5e9cca014610ace578063d7332e28146101f5578063e20c9f711461013c5763fa7626d4146100f957600080fd5b3461013957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013957602060ff601f54166040519015158152f35b80fd5b503461013957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101395760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b8181106101c9576101c5856101b9818703826145e5565b60405191829182614878565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016101a2565b50346101395760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610139576004359067ffffffffffffffff82116101395760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8336030112610139576024359167ffffffffffffffff8311610aca5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8436030112610aca5760443567ffffffffffffffff8111610ac6576102c39036906004016149a5565b6102ce929192614d58565b6040519560606102de81896145e5565b600288527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001865b818110610a55575050906103906103a79261034088996103316020860198828a5236906004016146c1565b61033a82614b5e565b52614b5e565b508760a061034e8851614b5e565b51015287608061035e8851614b5e565b5101528760c061036e8851614b5e565b51015261038186519136906004016146c1565b61038a82614b9a565b52614b9a565b50600160a061039f8651614b9a565b5101526153d2565b6103b081615465565b6103b9816158ee565b6103e36040820160206103da816103d08451614b5e565b5101519251614b9a565b51015190614c15565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109d5576040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9190911660048201526024810191909152858160448183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156109a6578691610a40575b505061049c81615d46565b9273ffffffffffffffffffffffffffffffffffffffff601f5460081c16916104c48382615bc4565b92803b15610a27578760405180927f36fd922d0000000000000000000000000000000000000000000000000000000082526020600483015281838161050e8d8c6024840191614e0d565b03925af1908115610a1c578891610a2b575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b15610a27578780916024604051809481937f920316f60000000000000000000000000000000000000000000000000000000083528960048401525af1908115610a1c578891610a07575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c169060806060820151910151823b156109ee57604489928360405195869485937f650fb676000000000000000000000000000000000000000000000000000000008552600485015260248401525af19081156109ca5787916109f2575b5050604051907f7da3c3ab0000000000000000000000000000000000000000000000000000000060208301526004825261063f6024836145e5565b73ffffffffffffffffffffffffffffffffffffffff61065e8251614b5e565b515116604061067c60206106728551614b5e565b5101519351614b5e565b51015191737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109ee5788916106d58560405195869485947fd23cd03700000000000000000000000000000000000000000000000000000000865260048601614e4c565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156109ca5787916109d9575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109d5576040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff919091166084820152868160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156109ca5787916109b5575b50506108087f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d916040519182918583528960208401526060604084015260608301906148eb565b0390a173ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109b1576040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff919091166084820152858160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156109a6578691610991575b505060407f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a91815190815260016020820152a173ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b1561098d5761096093858094604051968795869485937f1f6a1eb900000000000000000000000000000000000000000000000000000000855260048501614e92565b03925af18015610982576109715750f35b8161097b916145e5565b6101395780f35b6040513d84823e3d90fd5b8480fd5b8161099b916145e5565b61098d5784386108cd565b6040513d88823e3d90fd5b8580fd5b816109bf916145e5565b6109b15785386107c1565b6040513d89823e3d90fd5b8680fd5b816109e3916145e5565b6109b15785386106fd565b8880fd5b816109fc916145e5565b6109b1578538610604565b81610a11916145e5565b6109d557863861058a565b6040513d8a823e3d90fd5b8780fd5b81610a35916145e5565b6109d5578638610520565b81610a4a916145e5565b61098d578438610491565b602090604051610a64816145ad565b8981528983820152606060408201528960608201528960808201528960a08201528960c082015282828c01015201610306565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8280fd5b5080fd5b50346101395760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610139578060043567ffffffffffffffff811161102557610b1f903690600401614776565b60243567ffffffffffffffff811161102357610b3f9036906004016149a5565b9060443567ffffffffffffffff811161098d57610b609036906004016149a5565b9190938315158061101a575b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109d557604051907f4c63e562000000000000000000000000000000000000000000000000000000008252151560048201528681602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156109ca578791611005575b5050610bec36858461468a565b60208151910120610bfe36858861468a565b602081519101201415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109d557604051907f4c63e56200000000000000000000000000000000000000000000000000000000825260048201528681602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156109ca578791610ff0575b5050610c83906153d2565b90610c8d826158ee565b610c9682615d46565b9373ffffffffffffffffffffffffffffffffffffffff601f5460081c1690610cbe8285615bc4565b92823b156109ee57610d0a928992836040518096819582947f36fd922d000000000000000000000000000000000000000000000000000000008452602060048501526024840191614e0d565b03925af19081156109ca578791610fdb575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c1690813b156109d55786916024839260405194859384927f920316f600000000000000000000000000000000000000000000000000000000845260048401525af19081156109a6578691610fc6575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c1660608201516080830151823b15610a2757604488928360405195869485937f650fb676000000000000000000000000000000000000000000000000000000008552600485015260248401525af19081156109a6578691610fb1575b5050610ea7610e4a91610e7b6040519384927fa2b6d61b000000000000000000000000000000000000000000000000000000006020850152604060248501526064840190614eb7565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc8382030160448401528588614e0d565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826145e5565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561098d5784610f0291604051809381927ff28dceb30000000000000000000000000000000000000000000000000000000083526020600484015260248301906148eb565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115610fa6578591610f8c575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b1561098d5761096093858094604051968795869485937f1f6a1eb900000000000000000000000000000000000000000000000000000000855260048501614e92565b81610f96916145e5565b610fa1578338610f2a565b505050fd5b6040513d87823e3d90fd5b81610fbb916145e5565b61098d578438610e01565b81610fd0916145e5565b61098d578438610d88565b81610fe5916145e5565b6109b1578538610d1c565b81610ffa916145e5565b6109b1578538610c78565b8161100f916145e5565b6109b1578538610bdf565b50821515610b6c565b505b50fd5b503461013957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101395760206110616152ec565b6040519015158152f35b50346101395760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610139576004359060243567ffffffffffffffff8111610aca576110bf903690600401614776565b9060443567ffffffffffffffff8111610aca576110e09036906004016149a5565b9190600360208501515110737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610ac657604051907f4c63e56200000000000000000000000000000000000000000000000000000000825260048201528281602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015611edc57908391611ec7575b50506040516102328082019082821067ffffffffffffffff831117611e9a57908291616b8f8339039083f080156109825773ffffffffffffffffffffffffffffffffffffffff6111ad9116946153d2565b936111b785615465565b6111c0856158ee565b6111c985615d46565b9373ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b1561098d578460405180927f36fd922d0000000000000000000000000000000000000000000000000000000082526020600483015281838161122e60248201898c614e0d565b03925af18015610fa657908591611e85575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b1561098d578480916024604051809481937f920316f60000000000000000000000000000000000000000000000000000000083528d60048401525af18015610fa657908591611e6c575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c169260608701938451608089015190823b15610a275790604488928360405195869485937f650fb676000000000000000000000000000000000000000000000000000000008552600485015260248401525af180156109a657908691611e57575b509596604001955b86518051821015611c26576113478260a092614baa565b510151156114615773ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109d5576040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff919091166084820152868160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156109ca5790879161144c575b50506001907f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b604080518c8152836020820152a15b01611330565b81611456916145e5565b6109b1578538611411565b73ffffffffffffffffffffffffffffffffffffffff611481828951614baa565b515116737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109d557604051907fc88a5e6d0000000000000000000000000000000000000000000000000000000082526004820152866024820152868160448183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156109ca57908791611c11575b5050608061150b828951614baa565b51015115611b415773ffffffffffffffffffffffffffffffffffffffff611533828951614baa565b51511661153f85614bee565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610a275761159591889160405193849283927fb4d6c78200000000000000000000000000000000000000000000000000000000845260048401614bbe565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156109ca57908791611b2c575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109d5576040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff919091166084820152868160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156109ca57908791611b17575b50507f1d075b933dc9f19186b1ae7fc385d64fd8845afa07eeb056a7ebdacdfb7f2fc860206040518b8152a173ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109d5576040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff919091166084820152868160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156109ca57908791611b02575b50507fbc4bc9c81963cfbf61c958448f1c4b4b382b0a997a2fb0d1fd153818bb2aa27b6020604051838152a173ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109d5576040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff919091166084820152868160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156109ca57908791611aed575b50507fbb7a447ad156f8002134a11ad706b80728a2f1ceb0322f1e3494861fa0ad096c6020885151604051908152a173ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109d5576040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff919091166084820152868160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156109ca57908791611ad8575b50507f6840f59e591bc40085b0cabf11c3e75123624c13f13d90fc58859e310d15b02e60208651604051908152a173ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109d5576040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff919091166084820152868160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156109ca57908791611ac3575b5050807f0b76c48be4e2908f4c9d4eabaf7538e91577fd9ae26db46693fa8d861c6a42fb611a8b6040611a746001958c51614baa565b5101516040519182916020835260208301906148eb565b0390a15b7f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a604080518c8152836020820152a1611446565b81611acd916145e5565b6109b1578538611a3e565b81611ae2916145e5565b6109b157853861194e565b81611af7916145e5565b6109b157853861185d565b81611b0c916145e5565b6109b157853861176f565b81611b21916145e5565b6109b1578538611681565b81611b36916145e5565b6109b15785386115bd565b73ffffffffffffffffffffffffffffffffffffffff611b61828951614baa565b5151166040611b71838a51614baa565b51015190737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610a2757611bca91889160405193849283927fbd6af43400000000000000000000000000000000000000000000000000000000845260048401614bbe565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156109ca57908791611bfc575b5050600190611a8f565b81611c06916145e5565b6109b1578538611bf2565b81611c1b916145e5565b6109b15785386114fc565b868881858c8873ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b1561098d57611c8c93858094604051968795869485937f1f6a1eb900000000000000000000000000000000000000000000000000000000855260048501614e92565b03925af1801561098257611e42575b5050611cc273ffffffffffffffffffffffffffffffffffffffff601f5460081c16316164b2565b815b81518051821015611e3e57611cdb82608092614baa565b5101511580611e02575b80611deb575b611cf8575b600101611cc4565b9082835b82518051821015611db057611d1382608092614baa565b5101511580611d63575b80611d4c575b611d30575b600101611cfc565b90611d4460019160206103da858751614baa565b919050611d28565b5060a0611d5a828551614baa565b51015115611d23565b5073ffffffffffffffffffffffffffffffffffffffff611d84828551614baa565b51511673ffffffffffffffffffffffffffffffffffffffff611da7868651614baa565b51511614611d1d565b505091611de46001929373ffffffffffffffffffffffffffffffffffffffff611dda848751614baa565b5151163190616539565b9050611cf0565b5060a0611df9828451614baa565b51015115611ceb565b5073ffffffffffffffffffffffffffffffffffffffff611e23828451614baa565b515116316020611e34838551614baa565b5101511415611ce5565b8380f35b81611e4c916145e5565b610aca578183611c9b565b81611e61916145e5565b61098d578438611328565b81611e76916145e5565b611e815783386112aa565b8380fd5b81611e8f916145e5565b611e81578338611240565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b81611ed1916145e5565b610aca57813861115c565b6040513d85823e3d90fd5b503461013957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013957601954611f2281614638565b91611f3060405193846145e5565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b838310611f7a57604051602080825281906101c59082018861492e565b600160208192611f8985614c51565b815201920192019190611f5d565b503461013957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013957601c54611fd281614638565b91611fe060405193846145e5565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b83831061202257604051806101c58782614ab9565b6002602060019260405161203581614591565b73ffffffffffffffffffffffffffffffffffffffff865416815261205a858701615045565b8382015281520192019201919061200d565b50346101395760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610139578060043567ffffffffffffffff81116110255760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126110255760443567ffffffffffffffff8111611023576064916122d0612102859336906004016149a5565b91909261210d614d58565b90606061039f61223d633b9aca00612123614d7d565b946020870195865261213f633b9ac9ff620f42406024356169af565b9b8c918c8060409e8f6121bf6121f1825161215a84826145e5565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152835192839160208301957fb60e72cc00000000000000000000000000000000000000000000000000000000875260248401528a8301906148eb565b8a6044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826145e5565b51906a636f6e736f6c652e6c6f675afa50612214895161033136856004016146c1565b508060a06122228b51614b5e565b5101528060806122328b51614b5e565b5101525001356169af565b928a808a6121bf6122b9825161225384826145e5565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152835192839160208301957fb60e72cc000000000000000000000000000000000000000000000000000000008752602484015260648301906148eb565b51906a636f6e736f6c652e6c6f675afa5051614b5e565b936122da85615465565b6122e3856158ee565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c16602061230d86880151614b5e565b51015190737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610a275785517fc88a5e6d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9190911660048201526024810191909152868160448183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561263857908791612695575b50506123ad85615d46565b9473ffffffffffffffffffffffffffffffffffffffff601f5460081c166123d48183615bc4565b90803b156109ee5788875180927f36fd922d0000000000000000000000000000000000000000000000000000000082526020600483015281838161241d8c8c6024840191614e0d565b03925af1801561268b57908991612676575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c1690813b156109ee57889160248392895194859384927f920316f600000000000000000000000000000000000000000000000000000000845260048401525af1801561266c57908891612657575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c169060806060820151910151823b156109ee576044899283895195869485937f650fb676000000000000000000000000000000000000000000000000000000008552600485015260248401525af1801561263857908791612642575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109b15783517f11fb5b9c0000000000000000000000000000000000000000000000000000000081527f21395274000000000000000000000000000000000000000000000000000000006004820152868160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561263857908791612623575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c1692833b156109d557868094612608978751988996879586937f1f6a1eb900000000000000000000000000000000000000000000000000000000855260048501614e92565b0393f190811561261a57506109715750f35b513d84823e3d90fd5b8161262d916145e5565b6109b15785386125a6565b85513d89823e3d90fd5b8161264c916145e5565b6109b1578538612513565b81612661916145e5565b6109d557863861249a565b86513d8a823e3d90fd5b81612680916145e5565b610a2757873861242f565b87513d8b823e3d90fd5b8161269f916145e5565b6109b15785386123a2565b503461013957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013957601d546126e581614638565b916126f360405193846145e5565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b83831061273557604051806101c58782614ab9565b6002602060019260405161274881614591565b73ffffffffffffffffffffffffffffffffffffffff865416815261276d858701615045565b83820152815201920192019190612720565b503461013957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013957601a546127ba81614638565b916127c860405193846145e5565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b83831061281257604051602080825281906101c59082018861492e565b60016020819261282185614c51565b8152019201920191906127f5565b503461013957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013957601b5461286a81614638565b61287760405191826145e5565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b83831061294f57868587604051928392602084019060208552518091526040840160408260051b8601019392905b8282106128e457505050500390f35b9193602061293f827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc060019597998495030186528851908361292f83516040845260408401906148eb565b9201519084818403910152614a63565b96019201920185949391926128d5565b6002602060019260405161296281614591565b61296b86614c51565b8152612978858701615045565b838201528152019201920191906128a7565b5034610139578061299a366149d3565b6129f46129a8939293614d58565b6129c56129b3614d7d565b610331602084019682885236906146c1565b508560a06129d38651614b5e565b5101528560806129e38651614b5e565b510152600160c061039f8651614b5e565b6129fd81615465565b612a06816158ee565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c166020612a316040840151614b5e565b51015190737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109d5576040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9190911660048201526024810191909152858160448183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156109a6578691612dfd575b5050612ad281615d46565b9273ffffffffffffffffffffffffffffffffffffffff601f5460081c16612af98184615bc4565b90803b15610a27578760405180927f36fd922d00000000000000000000000000000000000000000000000000000000825260206004830152818381612b438d8c6024840191614e0d565b03925af1908115610a1c578891612de8575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c1690813b15610a275787916024839260405194859384927f920316f600000000000000000000000000000000000000000000000000000000845260048401525af19081156109ca578791612dd3575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c1660608301516080840151823b156109ee57604489928360405195869485937f650fb676000000000000000000000000000000000000000000000000000000008552600485015260248401525af19081156109ca578791612dbe575b5050604051907f7da3c3ab00000000000000000000000000000000000000000000000000000000602083015260048252612c756024836145e5565b73ffffffffffffffffffffffffffffffffffffffff612c948251614b5e565b5151166040612ca860206106728551614b5e565b51015191737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109ee578891612d018560405195869485947fd23cd03700000000000000000000000000000000000000000000000000000000865260048601614e4c565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156109ca578791612da9575b5050612d7391610e7b610ea7926040519485937f7f6b0bb1000000000000000000000000000000000000000000000000000000006020860152606060248601526084850190614eb7565b908960448501527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc8483030160648501526148eb565b81612db3916145e5565b6109b1578538612d29565b81612dc8916145e5565b6109b1578538612c3a565b81612ddd916145e5565b6109b1578538612bc1565b81612df2916145e5565b6109d5578638612b55565b81612e07916145e5565b61098d578438612ac7565b503461013957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101395760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b818110612e8f576101c5856101b9818703826145e5565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201612e78565b503461013957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101395760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b818110612f38576101c5856101b9818703826145e5565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201612f21565b503461013957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013957602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051908152f35b50346101395780612fc9366149d3565b613011612fd7939293614d58565b612fe26129b3614d7d565b508560a0612ff08651614b5e565b5101528560806130008651614b5e565b510152600260c061039f8651614b5e565b61301a81615465565b613023816158ee565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c16602061304e6040840151614b5e565b51015190737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109d5576040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9190911660048201526024810191909152858160448183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156109a657869161351c575b50506130ef81615d46565b9273ffffffffffffffffffffffffffffffffffffffff601f5460081c16916131178382615bc4565b92803b15610a27578760405180927f36fd922d000000000000000000000000000000000000000000000000000000008252602060048301528183816131618d8c6024840191614e0d565b03925af1908115610a1c578891613507575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b15610a27578780916024604051809481937f920316f60000000000000000000000000000000000000000000000000000000083528960048401525af1908115610a1c5788916134f2575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c169060806060820151910151823b156109ee57604489928360405195869485937f650fb676000000000000000000000000000000000000000000000000000000008552600485015260248401525af19081156109ca5787916134dd575b5050604051907f7da3c3ab000000000000000000000000000000000000000000000000000000006020830152600482526132926024836145e5565b73ffffffffffffffffffffffffffffffffffffffff6132b18251614b5e565b51511660406132c560206106728551614b5e565b51015191737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109ee57889161331e8560405195869485947fd23cd03700000000000000000000000000000000000000000000000000000000865260048601614e4c565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156109ca5787916134c8575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109d5576040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff919091166084820152868160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156109ca5787916134b3575b50507fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b9161345060405192839283528860208401526060604084015260608301906148eb565b0390a173ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b1561098d5761096093858094604051968795869485937f1f6a1eb900000000000000000000000000000000000000000000000000000000855260048501614e92565b816134bd916145e5565b6109b157853861340a565b816134d2916145e5565b6109b1578538613346565b816134e7916145e5565b6109b1578538613257565b816134fc916145e5565b6109d55786386131dd565b81613511916145e5565b6109d5578638613173565b81613526916145e5565b61098d5784386130e4565b503461013957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013957601e5461356c81614638565b61357960405191826145e5565b818152601e83526020810191837f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350845b83831061365857868587604051928392602084019060208552518091526040840160408260051b8601019392905b8282106135e657505050500390f35b91936020613648827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc060019597998495030186526040838a5173ffffffffffffffffffffffffffffffffffffffff81511684520151918185820152019061492e565b96019201920185949391926135d7565b60405161366481614591565b73ffffffffffffffffffffffffffffffffffffffff835416815260018301805461368d81614638565b9161369b60405193846145e5565b8183528a526020808b20908b9084015b8382106136d15750505050600192826020928360029501528152019201920191906135a9565b6001602081926136e086614c51565b8152019301910190916136ab565b503461013957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101395760405180916020601654928381520191601682527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289915b81811061376b576101c5856101b9818703826145e5565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201613754565b50346101395760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101395760043567ffffffffffffffff8111610aca576137e7903690600401614776565b90600360208301515110737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610aca57604051907f4c63e56200000000000000000000000000000000000000000000000000000000825260048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561098257614581575b50906040516102328082019082821067ffffffffffffffff831117611e9a57908291616b8f8339039083f08015610982576138b173ffffffffffffffffffffffffffffffffffffffff849216926153d2565b906138bb82615465565b6138c4826158ee565b6138e973ffffffffffffffffffffffffffffffffffffffff601f5460081c1683615bc4565b926138f383615d46565b926040810191835b835180518210156142b3576139128260a092614baa565b51015115613a2c5773ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109b1576040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff919091166084820152858160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156109a657908691613a17575b50506001907f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b604080518a8152836020820152a15b016138fb565b81613a21916145e5565b61098d5784886139dc565b73ffffffffffffffffffffffffffffffffffffffff613a4c828651614baa565b515116737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109b157604051907fc88a5e6d0000000000000000000000000000000000000000000000000000000082526004820152856024820152858160448183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156109a65790869161429e575b50506080613ad6828651614baa565b510151156141d15773ffffffffffffffffffffffffffffffffffffffff613afe828651614baa565b515116613b0a83614bee565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109d557613b6091879160405193849283927fb4d6c78200000000000000000000000000000000000000000000000000000000845260048401614bbe565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156109a6579086916141bc575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109b1576040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff919091166084820152858160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156109a6579086916141a7575b50507f1d075b933dc9f19186b1ae7fc385d64fd8845afa07eeb056a7ebdacdfb7f2fc86020604051898152a173ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109b1576040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff919091166084820152858160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156109a657908691614192575b50507fbc4bc9c81963cfbf61c958448f1c4b4b382b0a997a2fb0d1fd153818bb2aa27b6020604051838152a173ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109b1576040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff919091166084820152858160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156109a65790869161417d575b50507fbb7a447ad156f8002134a11ad706b80728a2f1ceb0322f1e3494861fa0ad096c6020855151604051908152a173ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109b1576040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff919091166084820152858160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156109a657908691614168575b50507f6840f59e591bc40085b0cabf11c3e75123624c13f13d90fc58859e310d15b02e60206060850151604051908152a173ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109b1576040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff919091166084820152858160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156109a657908691614153575b50507f0b76c48be4e2908f4c9d4eabaf7538e91577fd9ae26db46693fa8d861c6a42fb61403f6040611a74848851614baa565b0390a15b73ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109b1576040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff919091166084820152858160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156109a65790869161413e575b50506001907f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a604080518a8152836020820152a1613a11565b81614148916145e5565b61098d578488614105565b8161415d916145e5565b61098d57848861400c565b81614172916145e5565b61098d578488613f19565b81614187916145e5565b61098d578488613e28565b8161419c916145e5565b61098d578488613d3a565b816141b1916145e5565b61098d578488613c4c565b816141c6916145e5565b61098d578488613b88565b73ffffffffffffffffffffffffffffffffffffffff6141f1828651614baa565b5151166040614201838751614baa565b51015190737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109d55761425a91879160405193849283927fbd6af43400000000000000000000000000000000000000000000000000000000845260048401614bbe565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156109a657908691614289575b5050614043565b81614293916145e5565b61098d578488614282565b816142a8916145e5565b61098d578488613ac7565b8585818973ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610ac657604051907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152828160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115611edc57839161456c575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b15610ac6576143af83929183926040519485809481937f6ea445770000000000000000000000000000000000000000000000000000000083526020600484015260248301906148eb565b03925af1801561098257614557575b50506143e573ffffffffffffffffffffffffffffffffffffffff601f5460081c16316164b2565b815b81518051821015611e3e576143fe82608092614baa565b510151158061451b575b80614504575b61441b575b6001016143e7565b9082835b825180518210156144d35761443682608092614baa565b5101511580614486575b8061446f575b614453575b60010161441f565b9061446760019160206103da858751614baa565b91905061444b565b5060a061447d828551614baa565b51015115614446565b5073ffffffffffffffffffffffffffffffffffffffff6144a7828551614baa565b51511673ffffffffffffffffffffffffffffffffffffffff6144ca868651614baa565b51511614614440565b5050916144fd6001929373ffffffffffffffffffffffffffffffffffffffff611dda848751614baa565b9050614413565b5060a0614512828451614baa565b5101511561440e565b5073ffffffffffffffffffffffffffffffffffffffff61453c828451614baa565b51511631602061454d838551614baa565b5101511415614408565b81614561916145e5565b610aca5781836143be565b81614576916145e5565b610aca578185614345565b8161458b916145e5565b3861385f565b6040810190811067ffffffffffffffff821117610a9757604052565b60e0810190811067ffffffffffffffff821117610a9757604052565b6080810190811067ffffffffffffffff821117610a9757604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610a9757604052565b3590811515820361463357565b600080fd5b67ffffffffffffffff8111610a975760051b60200190565b67ffffffffffffffff8111610a9757601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b92919261469682614650565b916146a460405193846145e5565b829481845281830111614633578281602093846000960137010152565b91909160e08184031261463357604051906146db826145ad565b8193813573ffffffffffffffffffffffffffffffffffffffff8116810361463357835260208201356020840152604082013567ffffffffffffffff81116146335782019181601f840112156146335761473e60c09392836020869535910161468a565b60408501526060810135606085015261475960808201614626565b608085015261476a60a08201614626565b60a08501520135910152565b9190916080818403126146335760405190614790826145c9565b819361479b82614626565b8352602082013567ffffffffffffffff81116146335782019080601f830112156146335781356147ca81614638565b926147d860405194856145e5565b81845260208085019260051b820101918383116146335760208201905b83821061484a575050505050602083015260408101359073ffffffffffffffffffffffffffffffffffffffff8216820361463357606091604084015201359066ffffffffffffff821682036146335760600152565b813567ffffffffffffffff81116146335760209161486d878480948801016146c1565b8152019101906147f5565b602060408183019282815284518094520192019060005b81811061489c5750505090565b825173ffffffffffffffffffffffffffffffffffffffff1684526020938401939092019160010161488f565b60005b8381106148db5750506000910152565b81810151838201526020016148cb565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093614927815180928187528780880191016148c8565b0116010190565b9080602083519182815201916020808360051b8301019401926000915b83831061495a57505050505090565b9091929394602080614996837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0866001960301875289516148eb565b9701930193019193929061494b565b9181601f840112156146335782359167ffffffffffffffff8311614633576020838186019501011161463357565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126146335760043567ffffffffffffffff81116146335760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc828503011261463357600401916024359067ffffffffffffffff821161463357614a5f916004016149a5565b9091565b906020808351928381520192019060005b818110614a815750505090565b82517fffffffff0000000000000000000000000000000000000000000000000000000016845260209384019390920191600101614a74565b602081016020825282518091526040820191602060408360051b8301019401926000915b838310614aec57505050505090565b9091929394602080614b4f837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190614a63565b97019301930191939290614add565b805115614b6b5760200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805160011015614b6b5760400190565b8051821015614b6b5760209160051b010190565b60409073ffffffffffffffffffffffffffffffffffffffff614beb949316815281602082015201906148eb565b90565b90813b6000614bfc82614650565b93614c0a60405195866145e5565b82855260208501903c565b91908201809211614c2257565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b906040519160008154918260011c92600181168015614d4e575b602085108114614d2157848752869392918115614ce15750600114614c9a575b50614c98925003836145e5565b565b90506000929192526020600020906000915b818310614cc5575050906020614c989282010138614c8b565b6020919350806001915483858901015201910190918492614cac565b60209350614c989592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b82010138614c8b565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f1693614c6b565b60405190614d65826145c9565b60006060838281528160208201528260408201520152565b60408051909190614d8e83826145e5565b60018152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018260005b828110614dc557505050565b602090604051614dd4816145ad565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c082015282828501015201614db9565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b92614beb949273ffffffffffffffffffffffffffffffffffffffff614e849316855260208501526080604085015260808401906148eb565b9160608184039101526148eb565b91614ea9614beb94926040855260408501906148eb565b926020818503910152614e0d565b610120820160ff82511683526020820151151560208401526040820151906101206040850152815180915261014084019060206101408260051b8701019301916000905b828210614f9d5750505050614f3361010091606084015160608601526080840151608086015260a084015185820360a08701526148eb565b9160c081015160c085015260e081015160e08501520151916101008183039101526020808351928381520192019060005b818110614f715750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101614f64565b90919293602080827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec08a6001950301855287519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c08061500f604085015160e0604086015260e08501906148eb565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152960192019201909291614efb565b90604051918281549182825260208201906000526020600020926000905b80600783011061525f57614c98945491818110615229575b8181106151f3575b8181106151bd575b818110615187575b818110615151575b81811061511b575b8181106150e6575b106150b9575b5003836145e5565b7fffffffff00000000000000000000000000000000000000000000000000000000168152602001386150b1565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b1681520193016150ab565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b1681520193016150a3565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b16815201930161509b565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b168152019301615093565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b16815201930161508b565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b168152019301615083565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b16815201930161507b565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e0820152019401920185929391615063565b60085460ff1680156152fb5790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156153c657600091615394575b50151590565b90506020813d6020116153be575b816153af602093836145e5565b8101031261463357513861538e565b3d91506153a2565b6040513d6000823e3d90fd5b9060405191610120830183811067ffffffffffffffff821117610a97576040526000602084015266ffffffffffffff60606040850192818452818601600081526080870194600086528360a0890152600060c0890152600060e089015283610100890152600088526020830151905273ffffffffffffffffffffffffffffffffffffffff60408301511690520151169052565b60009060009073ffffffffffffffffffffffffffffffffffffffff601f5460081c16906040945b8582019182518051861015615840576154ba8673ffffffffffffffffffffffffffffffffffffffff92614baa565b5151165b73ffffffffffffffffffffffffffffffffffffffff811690600182101580615835575b8015615821575b8015615804575b80156157fa575b15615532575073ffffffffffffffffffffffffffffffffffffffff90885160208101918252602081526155298a826145e5565b519020166154be565b9050949192909473ffffffffffffffffffffffffffffffffffffffff615559848451614baa565b51911690526155886d04ee2d6d415b85acef8100000000602061557d858551614baa565b5101516000906169af565b6000808961559e6155d0825161225384826145e5565b876044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826145e5565b51906a636f6e736f6c652e6c6f675afa5060206155ee848451614baa565b510152615606633b9aca00606061557d858551614baa565b6000808961559e61561c825161225384826145e5565b51906a636f6e736f6c652e6c6f675afa50606061563a848451614baa565b510152608061564a838351614baa565b51015115806157e3575b6157ac575b73ffffffffffffffffffffffffffffffffffffffff61569783836080615681838a9751614baa565b510151151580615794575b615737575b51614baa565b5151161415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156146335786918251917f4c63e5620000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821561572c5760019261571b575b50019391905061548c565b6000615726916145e5565b38615710565b83513d6000823e3d90fd5b615758633b9aca00620186a06060615750868651614baa565b5101516169af565b6000808d61559e61576e825161225384826145e5565b51906a636f6e736f6c652e6c6f675afa50606061578c848451614baa565b510152615691565b5060606157a2838351614baa565b510151151561568c565b9473ffffffffffffffffffffffffffffffffffffffff615697836157d8879460206103da848d51614baa565b989350505050615659565b5060a06157f1838351614baa565b51015115615654565b50803b15156154f6565b50734e59b44847b379578588920ca78fbf26c0b4956c82146154ef565b506a636f6e736f6c652e6c6f6782146154e8565b5060ff8211156154e1565b505094925050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156146335781517fc88a5e6d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff919091166004820152602481019290925260008260448183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156158e457506158d95750565b6000614c98916145e5565b513d6000823e3d90fd5b6158ff6003600060ff8451166169af565b60ff604091600080845161591386826145e5565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152855161597e8161559e60208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528a602484015260648301906148eb565b51906a636f6e736f6c652e6c6f675afa50168083521561599c575050565b606082016159c173ffffffffffffffffffffffffffffffffffffffff600083516169af565b9060008084516159d186826145e5565b600c81527f426f756e6420726573756c74000000000000000000000000000000000000000060208201528551615a6e81615a3c60208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528a602484015260648301906148eb565b886044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826145e5565b51906a636f6e736f6c652e6c6f675afa505260808201615a9866ffffffffffffff600083516169af565b906000808451615aa886826145e5565b600c81527f426f756e6420726573756c74000000000000000000000000000000000000000060208201528551615b1381615a3c60208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528a602484015260648301906148eb565b51906a636f6e736f6c652e6c6f675afa505260005b818301908151908151811015615bbd57839260c0615bb283615b5260028461557d8460019a614baa565b9360008089615b69615b9b825161225384826145e5565b8b6044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826145e5565b51906a636f6e736f6c652e6c6f675afa5051614baa565b510152019050615b28565b5050505050565b60208101519091615c889115615cd3576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a08152615c7f60c0826145e5565b519020916165b0565b6040519060208201927f190100000000000000000000000000000000000000000000000000000000000084526022830152604282015260428152615ccd6062826145e5565b51902090565b4690615bd8565b90929192615ce781614650565b91615cf560405193846145e5565b829482845282820111614633576020614c989301906148c8565b6020818303126146335780519067ffffffffffffffff821161463357019080601f83011215614633578151614beb92602001615cda565b906000610e7b615d69615da4946040519283916020808401526040830190614eb7565b604051809481927f71aad10d0000000000000000000000000000000000000000000000000000000083526020600484015260248301906148eb565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156153c657600092616495575b50615e676002602c60405180957f7b227061796c6f6164223a2200000000000000000000000000000000000000006020830152615e1281518092602086860191016148c8565b81017f227d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe28101855201836145e5565b6040517fc1978d1f00000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5345515f53444b5f5250435f4d494e5f504f52540000000000000000000000006044820152602081606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156153c657600091616463575b50604051907fc1978d1f00000000000000000000000000000000000000000000000000000000825260206004830152601460248301527f5345515f53444b5f5250435f4d41585f504f52540000000000000000000000006044830152602082606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156153c65760009261642f575b508082106163d1577fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a654801561637f575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114614c2257816001615ffe920193847fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a655616969565b9160018301809311614c225761601d9261601791616976565b90614c15565b604051907ff877cb1900000000000000000000000000000000000000000000000000000000825260206004830152601660248301527f5345515f53444b5f5250435f55524c5f505245464958000000000000000000006044830152600082606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156153c657600092616362575b506040517ff877cb1900000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5345515f53444b5f5250435f55524c5f535546464958000000000000000000006044820152600081606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156153c657600091616347575b50604051917f6900a3ae0000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156153c65760409560009461623e948693616318575b506162039060206162a294956161d6828c5198856161b38b9751809285808b0191016148c8565b86016161c7825180938580850191016148c8565b010191828151948592016148c8565b01037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018552846145e5565b865196879485947f0199a2200000000000000000000000000000000000000000000000000000000086526060600487015260648601906148eb565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152601083527f7061796c6f61645f746f5061636b656400000000000000000000000000000000602084015201604486015201906148eb565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19182156153c6576000926162cd5750565b3d8084833e6162dc81836145e5565b810190602081830312611e815780519067ffffffffffffffff821161098d570181601f82011215611e8157614beb929350602081519101615cda565b6162a2935090602061633e616203933d808b833e61633681836145e5565b810190615d0f565b9450509061618c565b61635c91503d806000833e61633681836145e5565b3861612b565b6163789192503d806000833e61633681836145e5565b90386160a4565b50604051602081019036600083376163c960208236810160008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826145e5565b519020615fa6565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e76616c696420706f72742072616e676500000000000000000000000000006044820152fd5b90916020823d60201161645b575b8161644a602093836145e5565b810103126101395750519038615f75565b3d915061643d565b906020823d60201161648d575b8161647d602093836145e5565b8101031261013957505138615eed565b3d9150616470565b6164ab9192503d806000833e61633681836145e5565b9038615dcc565b600090737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610aca57604051907f98296c5400000000000000000000000000000000000000000000000000000000825260048201528160248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156109825761652c575050565b81616536916145e5565b50565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561463357604051917f98296c5400000000000000000000000000000000000000000000000000000000835260048301526024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156153c6576158d95750565b61010081015160405160208101818193602081519391019260005b81811061693a5750506166059250037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826145e5565b5190209060ff815116801560001461680d57509060408201519283519161664461662e84614638565b9361663c60405195866145e5565b808552614638565b937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe060208501950136863760005b8651811015616744578061668860019289614baa565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152616730610120826145e5565b51902061673d8288614baa565b5201616672565b5092919450926040519081602081019182945192909260005b8181106167f45750506167979250037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826145e5565b51902091608060608301519201516040519260208401947f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a2865260408501526060840152608083015260a082015260a08152615ccd60c0826145e5565b845183526020948501948694509092019160010161675d565b60018103616867575060a0015160208151910120906040519060208201927fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46684526040830152606082015260608152615ccd6080826145e5565b600281036168ba575060c00151906040519060208201927f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e484526040830152606082015260608152615ccd6080826145e5565b6003810361690d575060e00151906040519060208201927fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46684526040830152606082015260608152615ccd6080826145e5565b7f048183200000000000000000000000000000000000000000000000000000000060005260045260246000fd5b845173ffffffffffffffffffffffffffffffffffffffff168352602094850194869450909201916001016165cb565b91908203918211614c2257565b8115616980570690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600090838311616b0a5782811091821580616b00575b616af8576169d38486616969565b9260018401809411614c2257600383111580616aef575b616ae0577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83101580616ad6575b616ac55785831115616a7c57505090616a3484616a3993616969565b616976565b908115616a7757616a4a9250614c15565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111614c225790565b505090565b959492919095616a8d575b50505050565b83949550616a3490616a9f9394616969565b908115616a7757616ab09250616969565b60018101809111614c22579038808080616a87565b50509050614beb9291501990616969565b5082198411616a18565b5050919050614beb9250614c15565b508284116169ea565b509250505090565b50848211156169c5565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374645574696c7320626f756e642875696e743235362c75696e743235362c7560448201527f696e74323536293a204d6178206973206c657373207468616e206d696e2e00006064820152fdfe60808060405234601557610217908161001b8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c634c4e814c1461002857600080fd5b346101dc5760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101dc5760a4359067ffffffffffffffff82116101dc57366023830112156101dc5781600401359067ffffffffffffffff82116101dc5736602483850101116101dc577f0b76c48be4e2908f4c9d4eabaf7538e91577fd9ae26db46693fa8d861c6a42fb927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6024947f1d075b933dc9f19186b1ae7fc385d64fd8845afa07eeb056a7ebdacdfb7f2fc860206040966004358152a17f9fcc36893cf52b97e3d02576f1025eb7a27c30635672de751e2ef9a6f0ccb08b6020865188358152a17fbc4bc9c81963cfbf61c958448f1c4b4b382b0a997a2fb0d1fd153818bb2aa27b602086516044358152a17fbb7a447ad156f8002134a11ad706b80728a2f1ceb0322f1e3494861fa0ad096c602086516064358152a17f6840f59e591bc40085b0cabf11c3e75123624c13f13d90fc58859e310d15b02e602086516084358152a1808551968795602087528260208801520186860137600085828601015201168101030190a1005b600080fdfea264697066735822122099af5207b02b9a8ddc7dd740e8ccd256649f5ef019b55951af1893b0e581e2cf64736f6c634300081c0033a2646970667358221220ae7c82fe11e1af8d62c5d70b67a500995fa5cf46c4c044eec102fa5b6e68e14364736f6c634300081c003360808060405234601557613188908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c806313792a4a146100f75780631626ba7e146100f25780631f6a1eb9146100ed5780632761e20a146100e857806329561426146100e357806336fd922d146100de578063650fb676146100d95780636ea44577146100d45780638c3f5563146100cf578063920316f6146100ca57806392dcb3fc146100c5578063ad55366b146100c0578063d7c4dd5a146100bb5763f727ef1c146100b657600080fd5b610e63565b610e15565b610c6c565b610bda565b610ba3565b610b5f565b610b30565b610af3565b6109ac565b6108fe565b6108c2565b610763565b6106db565b6105d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff82111761014757604052565b6100fc565b6040810190811067ffffffffffffffff82111761014757604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761014757604052565b604051906101b860e083610168565b565b604051906101b861012083610168565b359060ff821682036101d857565b600080fd5b359081151582036101d857565b67ffffffffffffffff81116101475760051b60200190565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101d857565b359073ffffffffffffffffffffffffffffffffffffffff821682036101d857565b92919267ffffffffffffffff8211610147576040519161028e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160184610168565b8294818452818301116101d8578281602093846000960137010152565b9080601f830112156101d8578160206102c693359101610246565b90565b81601f820112156101d8578035906102e0826101ea565b926102ee6040519485610168565b82845260208085019360051b830101918183116101d85760208101935b83851061031a57505050505090565b843567ffffffffffffffff81116101d857820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082860301126101d8576103616101a9565b9161036e60208301610225565b83526040820135602084015260608201359267ffffffffffffffff84116101d85760e0836103a38860208098819801016102ab565b6040840152608081013560608401526103be60a082016101dd565b60808401526103cf60c082016101dd565b60a0840152013560c082015281520194019361030b565b9080601f830112156101d85781356103fd816101ea565b9261040b6040519485610168565b81845260208085019260051b8201019283116101d857602001905b8282106104335750505090565b6020809161044084610225565b815201910190610426565b9181601f840112156101d85782359167ffffffffffffffff83116101d857602083818601950101116101d857565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126101d85760043567ffffffffffffffff81116101d8576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82850301126101d8576104eb6101ba565b906104f8816004016101ca565b8252610506602482016101dd565b6020830152604481013567ffffffffffffffff81116101d85784600461052e928401016102c9565b6040830152606481013560608301526084810135608083015260a481013567ffffffffffffffff81116101d85784600461056a928401016102ab565b60a083015260c481013560c083015260e481013560e083015261010481013567ffffffffffffffff81116101d857600485916105a79301016103e6565b610100820152916024359067ffffffffffffffff82116101d8576105cd9160040161044b565b9091565b346101d8576105df36610479565b9091610100810192835151600181018091116106d6576105fe90610f86565b9160005b85518051821015610665579061065f61063a61062083600195610fd5565b5173ffffffffffffffffffffffffffffffffffffffff1690565b6106448388610fd5565b9073ffffffffffffffffffffffffffffffffffffffff169052565b01610602565b505083838661067a3361064483515185610fd5565b5261068581846112d2565b501561069c576040516001815280602081015b0390f35b6106d2906040519384937ff58cc8b5000000000000000000000000000000000000000000000000000000008552600485016111fb565b0390fd5b610f3c565b346101d85760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d85760043560243567ffffffffffffffff81116101d85760209161073361073992369060040161044b565b91611220565b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d85760043567ffffffffffffffff81116101d8576107ad90369060040161044b565b9060243567ffffffffffffffff81116101d8576107d16107db91369060040161044b565b9190935a9361140c565b91606083015160808401516107ef82611b7b565b81810361088e57509060017f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f8819201906108288282611f8d565b604080519182526020820192909252a161084282856112d2565b92901561085657506108549350611765565b005b836106d286926040519384937fa2b6d61b000000000000000000000000000000000000000000000000000000008552600485016111fb565b917f9b6514f40000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b346101d85760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d8576020600154604051908152f35b346101d85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d857333014611a89575b7fa19dbf00000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101d8576004359067ffffffffffffffff82116101d8576105cd9160040161044b565b346101d8576109ba36610963565b67ffffffffffffffff8111610147576109dd816109d8600054610c90565b611280565b6000601f8211600114610a3a578190610a2a93600092610a2f575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b600055005b0135905038806109f8565b600080527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216927f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56391805b858110610adb57508360019510610aa3575b505050811b01600055005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88560031b161c19910135169055388080610a98565b90926020600181928686013581550194019101610a86565b346101d85760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d857610854602435600435611f8d565b610b3936610963565b9030330361093557610b4f610854925a9261140c565b90610b5982611ae7565b90611765565b346101d85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d8576020610b9b600435611b7b565b604051908152f35b346101d85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d857600435600155005b346101d85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d8576040600435815160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e86835283820152828152610c4a606082610168565b519020546bffffffffffffffffffffffff8251918060601c8352166020820152f35b346101d857610c86600080610c8036610479565b91611c3b565b5050505050611a89565b90600182811c92168015610cd9575b6020831014610caa57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f1691610c9f565b6040519060008260005491610cf783610c90565b8083529260018116908115610d795750600114610d1b575b6101b892500383610168565b50600080805290917f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b818310610d5d5750509060206101b892820101610d0f565b6020919350806001915483858901015201910190918492610d45565b602092506101b89491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b820101610d0f565b919082519283825260005b848110610e005750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201610dc1565b346101d85760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d857610698610e4f610ce3565b604051918291602083526020830190610db6565b346101d85760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d857600435610e9d610202565b604435916bffffffffffffffffffffffff83168093036101d857303303610935578273ffffffffffffffffffffffffffffffffffffffff83610f287febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1967fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606097881b161785611fd2565b6040519384521660208301526040820152a1005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90600182018092116106d657565b919082018092116106d657565b90610f90826101ea565b610f9d6040519182610168565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610fcb82946101ea565b0190602036910137565b8051821015610fe95760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9080602083519182815201916020808360051b8301019401926000915b83831061104457505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c0806110b7604085015160e0604086015260e0850190610db6565b936060810151606085015260808101511515608085015260a0810151151560a0850152015191015297019301930191939290611035565b906020808351928381520192019060005b81811061110c5750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016110ff565b805160ff1682526102c69160208281015115159082015261010061119661117060408501516101206040860152610120850190611018565b606085015160608501526080850151608085015260a085015184820360a0860152610db6565b9260c081015160c084015260e081015160e08401520151906101008184039101526110ee565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b916112126102c69492604085526040850190611138565b9260208185039101526111bc565b9161123c9260e061122f6112fb565b6003815201523691610246565b6020815191012061124b610ce3565b602081519101200361127b577f1626ba7e0000000000000000000000000000000000000000000000000000000090565b600090565b601f811161128c575050565b600080526020600020906020601f840160051c830193106112c8575b601f0160051c01905b8181106112bc575050565b600081556001016112b1565b90915081906112a8565b6112dd913691610246565b602081519101206112ec610ce3565b60208151910120149060015490565b60405190610120820182811067ffffffffffffffff821117610147576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b90611360826101ea565b61136d6040519182610168565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061139b82946101ea565b019060005b8281106113ac57505050565b6020906040516113bb8161012b565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c0820152828285010152016113a0565b909392938483116101d85784116101d8578101920390565b9190916114176112fb565b6000815292600190823560f81c827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818316016116b95750600060608701525b600761146660ff831660011c90565b1680611668575b5060108181160361163357506001925b61148684611356565b92604087019384526000905b8582106114a157505050505050565b8281013560f81c9060010190918160018085160361161157506114e5306114c9838951610fd5565b519073ffffffffffffffffffffffffffffffffffffffff169052565b6002808416146115f1575b6004808416146115a3575b600880841614611570575b61155961155360c0856115328a60806115298860108060019c9d16149351610fd5565b51019015159052565b6115498a60a0611529886020808716149351610fd5565b1660061c60031690565b60ff1690565b60c0611566838951610fd5565b5101520190611492565b600191611559906115539060c090878101359060200196906060611595878d51610fd5565b510152959450505050611506565b906115eb908481013560e81c906003016115e46115cb6115c38484610f79565b838a8a6113f4565b919060406115da888d51610fd5565b5101923691610246565b9052610f79565b906114fb565b90838101359060200191906020611609838951610fd5565b5101526114f0565b61162e92508481013560601c9060140192906114c9838951610fd5565b6114e5565b6020908116036116555761ffff918381013560f01c906002015b92169261147d565b60ff918381013560f81c9060010161164d565b6116ac919385929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b929060808701523861146d565b80850135606090811c908801526014019250611457565b6116e860409295949395606083526060830190611138565b9460208201520152565b926102c696959260c09592855260208501526040840152606083015260808201528160a08201520190610db6565b6102c69392606092825260208201528160408201520190610db6565b6117526102c69492606083526060830190611138565b9260208201526040818403910152610db6565b916000604082019384515190825b828110611784575b50505050505050565b61178f818851610fd5565b519361179e60a0860151151590565b80611a81575b611a41575060009360608101518015801580611a38575b611a005784906117ce6080850151151590565b156119ba57611879926117f5855173ffffffffffffffffffffffffffffffffffffffff1690565b91156119b457505a905b6118748b61184860608d01516040890151908c8b604051998a967f4c4e814c000000000000000000000000000000000000000000000000000000006020890152602488016116f2565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101855284610168565b611f60565b156118bc575b506040805187815260208101839052600192917f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a91a15b01611773565b60c00180511561196b57600181511461192c57516002146118dd573861187f565b9493505050507fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b925061191d611911611f72565b60405193849384611720565b0390a13880808080808061177b565b50846106d2611939611f72565b6040519384937f7f6b0bb10000000000000000000000000000000000000000000000000000000085526004850161173c565b509250600180937f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d6119ac61199e611f72565b604051918291858c84611720565b0390a16118b6565b906117ff565b83516119f593925073ffffffffffffffffffffffffffffffffffffffff16916020850151916000146119fa57505a905b604085015192611f4e565b611879565b906119ea565b83886106d25a6040519384937f21395274000000000000000000000000000000000000000000000000000000008552600485016116d0565b50815a106117bb565b6040805188815260208101849052919550600192917f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b91819081016119ac565b5080156117a4565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f4e6f7420757365640000000000000000000000000000000000000000000000006044820152fd5b611b49611b75611b07611b01602085015115153090612011565b9361210c565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610168565b51902090565b60405160208101917f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8352604082015260408152611bba606082610168565b5190205490565b60405190611bce8261014c565b60006020838281520152565b908160409103126101d857602060405191611bf48361014c565b805183520151602082015290565b60409073ffffffffffffffffffffffffffffffffffffffff6102c694931681528160208201520190610db6565b6040513d6000823e3d90fd5b909491939291853560f81c60019093819087611c55611bc1565b9360408089161480611f30575b611e2e575b505050600180861614611e085760028581161460208501526007600286901c1688820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101908096918196602016611cd79060051c90565b611ce090610f6b565b8a820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101959098899a81611d2c84611ae7565b988993611d38936113f4565b91611d4293612572565b9098611d5691600052602052604060002090565b90611d6991600052602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff16611d9291600052602052604060002090565b94815190868215159283611dfd575b505081611dee575b50611db15750565b6040517fccbb534f000000000000000000000000000000000000000000000000000000008152815160048201526020909101516024820152604490fd5b90506020820151101538611da9565b141591508638611da1565b86611e239792949550611e1b93986113f4565b939092612301565b919394909293929190565b8a81013560601c985060140192509087908a90849015611e52575b50829150611c67565b60038101955073ffffffffffffffffffffffffffffffffffffffff945081013560e81c92604092611ed5929091611ea091611e99918990611e938983610f79565b926113f4565b3691610246565b83519586809481937fccce3bc80000000000000000000000000000000000000000000000000000000083523060048401611c02565b0392165afa8015611f2b57611ef392600091611efc575b5092610f79565b86388981611e49565b611f1e915060403d604011611f24575b611f168183610168565b810190611bda565b38611eec565b503d611f0c565b611c2f565b5073ffffffffffffffffffffffffffffffffffffffff891615611c62565b9160009391849360208451940192f190565b9160009291839260208351930191f490565b3d90604051916020818401016040528083526000602084013e565b60405160208101917f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8352604082015260408152611fcc606082610168565b51902055565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e868352604082015260408152611fcc606082610168565b156120c1576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a08152611b7560c082610168565b469061201a565b805160209091019060005b8181106120e05750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016120d3565b61010081015160405161212781611b496020820180956120c8565b51902090612136815160ff1690565b60ff8116806121af57505090611b756121526040840151612e16565b92611b4960806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b6001810361220d57505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46693810193845290810191909152606081019290925290611b758160808101611b49565b6002810361226357505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e460208201908152918101929092526060820192909252611b758160808101611b49565b6003036122b7575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46660208201908152918101929092526060820192909252611b758160808101611b49565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b906116e890604093969594966060845260608401916111bc565b919492909260009560009560009560009560009561231d6112fb565b60028152937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9460005b82811061237457505050505050508051151580612366575b611db15750565b50602081015184111561235f565b600381019d50959b5093995091975092909190612398908b9085013560e81c610f79565b958a60008489036124dc575089915b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c036124ac57509060016123e1896123e89487896113f4565b908b611c3b565b9c939c9b929b9a919a99909a9b9d8e9d9e8f905b106124665750928b88511461245d575b808b101561242b57508a60c08501528992959295949194939093612347565b7f37daf62b0000000000000000000000000000000000000000000000000000000060005260048b905260245260446000fd5b6000885261240c565b8d8f6106d261247785858c8e6113f4565b9390926040519485947fb006aba0000000000000000000000000000000000000000000000000000000008652600486016122e7565b9798999a9160016124c28b6124c994888a6113f4565b9086611c3b565b50929d919c909b929a9092918e8e6123fc565b916123a7565b908160209103126101d857517fffffffff00000000000000000000000000000000000000000000000000000000811681036101d85790565b6040906102c69492815281602082015201916111bc565b73ffffffffffffffffffffffffffffffffffffffff6102c69593606093835216602082015281604082015201916111bc565b908160209103126101d8575190565b9391909360009460009460005b81811061258d575050505050565b8481013560f881901c9860019092019788979692909160fc1c988915612d81575060018914612d415760028914612b745760038914612b455760048914612ac45760068914612a2457600589146129d6576007891461290f57600889146128b9576009891461279057600a891461262d577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b9091929394959697506003891697881561277f575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190810190816126a59187876113f4565b6040517f898bd921000000000000000000000000000000000000000000000000000000008152939184916126dd918a6004850161251a565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa918215611f2b576127209360009361274c575b5060ff909a168091019a6130e2565b908015612746579061273a91600052602052604060002090565b955b939291909361257f565b5061273a565b60ff9193506127719060203d8111612778575b6127698183610168565b810190612563565b9290612711565b503d61275f565b8084013560f81c9850600101612642565b909192939495969750600389169788156128a8575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190810190816128089187876113f4565b6040517f13792a4a00000000000000000000000000000000000000000000000000000000815293918491612840918b600485016111fb565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa918215611f2b576128829360009361274c575060ff909a168091019a6130e2565b9080156128a2579061289c91600052602052604060002090565b9561273c565b5061289c565b8084013560f81c98506001016127a5565b9850602087019750949593949293919290918201356128d786613089565b81146128e7575b612882906130a3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506128de565b975090919293949597600f169687156129c4575b602060006129356129a29a9b86612f51565b9c9092918a60405161297881611b498a82019485603c917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008252601c8201520190565b51902092604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa15611f2b576128829060ff6000519a1680910199612f94565b600189019883013560f81c9750612923565b9850602087019750949593949293919290918201358085146129fc575b6128829061304a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506129f3565b989091929394959662ffffff9850612a46611553600c8416603f9060021c1690565b918215612ab0575b6003168015612a9f575b908190612a8390612a7b908781013560e81c906003019c168c01809c89896113f4565b90898b612572565b911115612a96575b906128829291612fff565b99820199612a8b565b50600281019084013560f01c612a58565b8482013560f81c9250600190910190612a4e565b975097612b1a612b27929394959697600f612b2f93169085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b92908301809386866113f4565b908688612572565b9061289c92980198600052602052604060002090565b9850965093949293919290919080820135906020019680156128a2579061289c91600052602052604060002090565b90919293949596975060038916978815612d30575b8084013560601c99612be89160140190612ba89060021c600316611553565b9085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b90810190612c4c60208c612bfe85858b8b6113f4565b919073ffffffffffffffffffffffffffffffffffffffff8c604051968795869485937f1626ba7e0000000000000000000000000000000000000000000000000000000085526004850161251a565b0392165afa908115611f2b577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091612d02575b501603612cbe57509060ff61288292991680910199612f94565b6106d2612ccf8c93899389896113f4565b906040519485947fb2fed7ae00000000000000000000000000000000000000000000000000000000865260048601612531565b612d23915060203d8111612d29575b612d1b8183610168565b8101906124e2565b38612ca4565b503d612d11565b8381013560f81c9850600101612b89565b98600f91929394959697985016968715612d70575b60148101976128829160ff9091169084013560601c612f94565b8281013560f81c9750600101612d56565b98509091929394959698600f16978815612dd3575b5060206000612da96129a29a9b86612f51565b9c90916040519384938c859094939260ff6060936080840197845216602083015260408201520152565b60018101995083013560f81c97506020612d96565b805160209091019060005b818110612e005750505090565b8251845260209384019390920191600101612df3565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0612e5c612e46836101ea565b92612e546040519485610168565b8084526101ea565b0136602083013760005b8351811015612f385780612e7c60019286610fd5565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152612f2461012082610168565b519020612f318285610fd5565b5201612e66565b50909150604051611b7581611b49602082018095612de8565b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff81116106d65791565b90604051907fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208301937f53657175656e6365207369676e65723a0a000000000000000000000000000000855260601b166031830152604582015260458152611b75606582610168565b916040519160208301937f53657175656e6365206e657374656420636f6e6669673a0a0000000000000000855260388401526058830152607882015260788152611b75609882610168565b60405160208101917f53657175656e636520737461746963206469676573743a0a00000000000000008352603882015260388152611b75605882610168565b611b49611b75611b07611b01600060208601511515612011565b60405160208101917f53657175656e636520616e792061646472657373207375626469676573743a0a8352604082015260408152611b75606082610168565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e63652073617069656e7420636f6e6669673a0a00000000000000865260601b166039840152604d830152606d820152606d8152611b75608d8261016856fea26469706673582212202eb966cb9ee1d2eedd7192ceb4cefa00faf5ba9930e425d9d7ca928dd6578cbd64736f6c634300081c0033","sourceMap":"2294:12771:89:-:0;;;;;;;3166:4:5;2294:12771:89;;3166:4:5;2294:12771:89;;;3166:4:5;2294:12771:89;3166:4:5;2294:12771:89;;1087:4:16;2294:12771:89;;;1087:4:16;2294:12771:89;2353:14;;;;;;;;;;;;;;;;;;;;;;;;2294:12771;2353:14;;;;;1087:4:16;2294:12771:89;;-1:-1:-1;;;;;;2294:12771:89;;;;;;-1:-1:-1;;;;;2294:12771:89;;;;;;;;;;;;;;;;2353:14;2294:12771;;;;;;;;;2353:14;2294:12771;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436101561001257600080fd5b6000803560e01c8063173c6f3d146137975780631ed7831c146136ee5780632ade3880146135315780632cf8dd4d14612fb9578063305f72b714612f645780633e5e3c2314612ebb5780633f7286f414612e12578063648a8e6a1461298a57806366d9a9a01461282f57806385226c811461277f578063916a17c6146126aa578063aaf796f51461206c578063b0464fdc14611f97578063b5508aa914611ee7578063ba2bd2ee1461106b578063ba414fa614611028578063c5e9cca014610ace578063d7332e28146101f5578063e20c9f711461013c5763fa7626d4146100f957600080fd5b3461013957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013957602060ff601f54166040519015158152f35b80fd5b503461013957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101395760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b8181106101c9576101c5856101b9818703826145e5565b60405191829182614878565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016101a2565b50346101395760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610139576004359067ffffffffffffffff82116101395760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8336030112610139576024359167ffffffffffffffff8311610aca5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8436030112610aca5760443567ffffffffffffffff8111610ac6576102c39036906004016149a5565b6102ce929192614d58565b6040519560606102de81896145e5565b600288527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001865b818110610a55575050906103906103a79261034088996103316020860198828a5236906004016146c1565b61033a82614b5e565b52614b5e565b508760a061034e8851614b5e565b51015287608061035e8851614b5e565b5101528760c061036e8851614b5e565b51015261038186519136906004016146c1565b61038a82614b9a565b52614b9a565b50600160a061039f8651614b9a565b5101526153d2565b6103b081615465565b6103b9816158ee565b6103e36040820160206103da816103d08451614b5e565b5101519251614b9a565b51015190614c15565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109d5576040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9190911660048201526024810191909152858160448183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156109a6578691610a40575b505061049c81615d46565b9273ffffffffffffffffffffffffffffffffffffffff601f5460081c16916104c48382615bc4565b92803b15610a27578760405180927f36fd922d0000000000000000000000000000000000000000000000000000000082526020600483015281838161050e8d8c6024840191614e0d565b03925af1908115610a1c578891610a2b575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b15610a27578780916024604051809481937f920316f60000000000000000000000000000000000000000000000000000000083528960048401525af1908115610a1c578891610a07575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c169060806060820151910151823b156109ee57604489928360405195869485937f650fb676000000000000000000000000000000000000000000000000000000008552600485015260248401525af19081156109ca5787916109f2575b5050604051907f7da3c3ab0000000000000000000000000000000000000000000000000000000060208301526004825261063f6024836145e5565b73ffffffffffffffffffffffffffffffffffffffff61065e8251614b5e565b515116604061067c60206106728551614b5e565b5101519351614b5e565b51015191737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109ee5788916106d58560405195869485947fd23cd03700000000000000000000000000000000000000000000000000000000865260048601614e4c565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156109ca5787916109d9575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109d5576040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff919091166084820152868160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156109ca5787916109b5575b50506108087f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d916040519182918583528960208401526060604084015260608301906148eb565b0390a173ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109b1576040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff919091166084820152858160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156109a6578691610991575b505060407f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a91815190815260016020820152a173ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b1561098d5761096093858094604051968795869485937f1f6a1eb900000000000000000000000000000000000000000000000000000000855260048501614e92565b03925af18015610982576109715750f35b8161097b916145e5565b6101395780f35b6040513d84823e3d90fd5b8480fd5b8161099b916145e5565b61098d5784386108cd565b6040513d88823e3d90fd5b8580fd5b816109bf916145e5565b6109b15785386107c1565b6040513d89823e3d90fd5b8680fd5b816109e3916145e5565b6109b15785386106fd565b8880fd5b816109fc916145e5565b6109b1578538610604565b81610a11916145e5565b6109d557863861058a565b6040513d8a823e3d90fd5b8780fd5b81610a35916145e5565b6109d5578638610520565b81610a4a916145e5565b61098d578438610491565b602090604051610a64816145ad565b8981528983820152606060408201528960608201528960808201528960a08201528960c082015282828c01015201610306565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8280fd5b5080fd5b50346101395760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610139578060043567ffffffffffffffff811161102557610b1f903690600401614776565b60243567ffffffffffffffff811161102357610b3f9036906004016149a5565b9060443567ffffffffffffffff811161098d57610b609036906004016149a5565b9190938315158061101a575b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109d557604051907f4c63e562000000000000000000000000000000000000000000000000000000008252151560048201528681602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156109ca578791611005575b5050610bec36858461468a565b60208151910120610bfe36858861468a565b602081519101201415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109d557604051907f4c63e56200000000000000000000000000000000000000000000000000000000825260048201528681602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156109ca578791610ff0575b5050610c83906153d2565b90610c8d826158ee565b610c9682615d46565b9373ffffffffffffffffffffffffffffffffffffffff601f5460081c1690610cbe8285615bc4565b92823b156109ee57610d0a928992836040518096819582947f36fd922d000000000000000000000000000000000000000000000000000000008452602060048501526024840191614e0d565b03925af19081156109ca578791610fdb575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c1690813b156109d55786916024839260405194859384927f920316f600000000000000000000000000000000000000000000000000000000845260048401525af19081156109a6578691610fc6575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c1660608201516080830151823b15610a2757604488928360405195869485937f650fb676000000000000000000000000000000000000000000000000000000008552600485015260248401525af19081156109a6578691610fb1575b5050610ea7610e4a91610e7b6040519384927fa2b6d61b000000000000000000000000000000000000000000000000000000006020850152604060248501526064840190614eb7565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc8382030160448401528588614e0d565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826145e5565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561098d5784610f0291604051809381927ff28dceb30000000000000000000000000000000000000000000000000000000083526020600484015260248301906148eb565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115610fa6578591610f8c575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b1561098d5761096093858094604051968795869485937f1f6a1eb900000000000000000000000000000000000000000000000000000000855260048501614e92565b81610f96916145e5565b610fa1578338610f2a565b505050fd5b6040513d87823e3d90fd5b81610fbb916145e5565b61098d578438610e01565b81610fd0916145e5565b61098d578438610d88565b81610fe5916145e5565b6109b1578538610d1c565b81610ffa916145e5565b6109b1578538610c78565b8161100f916145e5565b6109b1578538610bdf565b50821515610b6c565b505b50fd5b503461013957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101395760206110616152ec565b6040519015158152f35b50346101395760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610139576004359060243567ffffffffffffffff8111610aca576110bf903690600401614776565b9060443567ffffffffffffffff8111610aca576110e09036906004016149a5565b9190600360208501515110737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610ac657604051907f4c63e56200000000000000000000000000000000000000000000000000000000825260048201528281602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015611edc57908391611ec7575b50506040516102328082019082821067ffffffffffffffff831117611e9a57908291616b8f8339039083f080156109825773ffffffffffffffffffffffffffffffffffffffff6111ad9116946153d2565b936111b785615465565b6111c0856158ee565b6111c985615d46565b9373ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b1561098d578460405180927f36fd922d0000000000000000000000000000000000000000000000000000000082526020600483015281838161122e60248201898c614e0d565b03925af18015610fa657908591611e85575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b1561098d578480916024604051809481937f920316f60000000000000000000000000000000000000000000000000000000083528d60048401525af18015610fa657908591611e6c575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c169260608701938451608089015190823b15610a275790604488928360405195869485937f650fb676000000000000000000000000000000000000000000000000000000008552600485015260248401525af180156109a657908691611e57575b509596604001955b86518051821015611c26576113478260a092614baa565b510151156114615773ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109d5576040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff919091166084820152868160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156109ca5790879161144c575b50506001907f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b604080518c8152836020820152a15b01611330565b81611456916145e5565b6109b1578538611411565b73ffffffffffffffffffffffffffffffffffffffff611481828951614baa565b515116737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109d557604051907fc88a5e6d0000000000000000000000000000000000000000000000000000000082526004820152866024820152868160448183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156109ca57908791611c11575b5050608061150b828951614baa565b51015115611b415773ffffffffffffffffffffffffffffffffffffffff611533828951614baa565b51511661153f85614bee565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610a275761159591889160405193849283927fb4d6c78200000000000000000000000000000000000000000000000000000000845260048401614bbe565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156109ca57908791611b2c575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109d5576040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff919091166084820152868160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156109ca57908791611b17575b50507f1d075b933dc9f19186b1ae7fc385d64fd8845afa07eeb056a7ebdacdfb7f2fc860206040518b8152a173ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109d5576040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff919091166084820152868160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156109ca57908791611b02575b50507fbc4bc9c81963cfbf61c958448f1c4b4b382b0a997a2fb0d1fd153818bb2aa27b6020604051838152a173ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109d5576040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff919091166084820152868160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156109ca57908791611aed575b50507fbb7a447ad156f8002134a11ad706b80728a2f1ceb0322f1e3494861fa0ad096c6020885151604051908152a173ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109d5576040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff919091166084820152868160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156109ca57908791611ad8575b50507f6840f59e591bc40085b0cabf11c3e75123624c13f13d90fc58859e310d15b02e60208651604051908152a173ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109d5576040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff919091166084820152868160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156109ca57908791611ac3575b5050807f0b76c48be4e2908f4c9d4eabaf7538e91577fd9ae26db46693fa8d861c6a42fb611a8b6040611a746001958c51614baa565b5101516040519182916020835260208301906148eb565b0390a15b7f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a604080518c8152836020820152a1611446565b81611acd916145e5565b6109b1578538611a3e565b81611ae2916145e5565b6109b157853861194e565b81611af7916145e5565b6109b157853861185d565b81611b0c916145e5565b6109b157853861176f565b81611b21916145e5565b6109b1578538611681565b81611b36916145e5565b6109b15785386115bd565b73ffffffffffffffffffffffffffffffffffffffff611b61828951614baa565b5151166040611b71838a51614baa565b51015190737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610a2757611bca91889160405193849283927fbd6af43400000000000000000000000000000000000000000000000000000000845260048401614bbe565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156109ca57908791611bfc575b5050600190611a8f565b81611c06916145e5565b6109b1578538611bf2565b81611c1b916145e5565b6109b15785386114fc565b868881858c8873ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b1561098d57611c8c93858094604051968795869485937f1f6a1eb900000000000000000000000000000000000000000000000000000000855260048501614e92565b03925af1801561098257611e42575b5050611cc273ffffffffffffffffffffffffffffffffffffffff601f5460081c16316164b2565b815b81518051821015611e3e57611cdb82608092614baa565b5101511580611e02575b80611deb575b611cf8575b600101611cc4565b9082835b82518051821015611db057611d1382608092614baa565b5101511580611d63575b80611d4c575b611d30575b600101611cfc565b90611d4460019160206103da858751614baa565b919050611d28565b5060a0611d5a828551614baa565b51015115611d23565b5073ffffffffffffffffffffffffffffffffffffffff611d84828551614baa565b51511673ffffffffffffffffffffffffffffffffffffffff611da7868651614baa565b51511614611d1d565b505091611de46001929373ffffffffffffffffffffffffffffffffffffffff611dda848751614baa565b5151163190616539565b9050611cf0565b5060a0611df9828451614baa565b51015115611ceb565b5073ffffffffffffffffffffffffffffffffffffffff611e23828451614baa565b515116316020611e34838551614baa565b5101511415611ce5565b8380f35b81611e4c916145e5565b610aca578183611c9b565b81611e61916145e5565b61098d578438611328565b81611e76916145e5565b611e815783386112aa565b8380fd5b81611e8f916145e5565b611e81578338611240565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b81611ed1916145e5565b610aca57813861115c565b6040513d85823e3d90fd5b503461013957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013957601954611f2281614638565b91611f3060405193846145e5565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b838310611f7a57604051602080825281906101c59082018861492e565b600160208192611f8985614c51565b815201920192019190611f5d565b503461013957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013957601c54611fd281614638565b91611fe060405193846145e5565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b83831061202257604051806101c58782614ab9565b6002602060019260405161203581614591565b73ffffffffffffffffffffffffffffffffffffffff865416815261205a858701615045565b8382015281520192019201919061200d565b50346101395760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610139578060043567ffffffffffffffff81116110255760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126110255760443567ffffffffffffffff8111611023576064916122d0612102859336906004016149a5565b91909261210d614d58565b90606061039f61223d633b9aca00612123614d7d565b946020870195865261213f633b9ac9ff620f42406024356169af565b9b8c918c8060409e8f6121bf6121f1825161215a84826145e5565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152835192839160208301957fb60e72cc00000000000000000000000000000000000000000000000000000000875260248401528a8301906148eb565b8a6044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826145e5565b51906a636f6e736f6c652e6c6f675afa50612214895161033136856004016146c1565b508060a06122228b51614b5e565b5101528060806122328b51614b5e565b5101525001356169af565b928a808a6121bf6122b9825161225384826145e5565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152835192839160208301957fb60e72cc000000000000000000000000000000000000000000000000000000008752602484015260648301906148eb565b51906a636f6e736f6c652e6c6f675afa5051614b5e565b936122da85615465565b6122e3856158ee565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c16602061230d86880151614b5e565b51015190737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610a275785517fc88a5e6d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9190911660048201526024810191909152868160448183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561263857908791612695575b50506123ad85615d46565b9473ffffffffffffffffffffffffffffffffffffffff601f5460081c166123d48183615bc4565b90803b156109ee5788875180927f36fd922d0000000000000000000000000000000000000000000000000000000082526020600483015281838161241d8c8c6024840191614e0d565b03925af1801561268b57908991612676575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c1690813b156109ee57889160248392895194859384927f920316f600000000000000000000000000000000000000000000000000000000845260048401525af1801561266c57908891612657575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c169060806060820151910151823b156109ee576044899283895195869485937f650fb676000000000000000000000000000000000000000000000000000000008552600485015260248401525af1801561263857908791612642575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109b15783517f11fb5b9c0000000000000000000000000000000000000000000000000000000081527f21395274000000000000000000000000000000000000000000000000000000006004820152868160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561263857908791612623575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c1692833b156109d557868094612608978751988996879586937f1f6a1eb900000000000000000000000000000000000000000000000000000000855260048501614e92565b0393f190811561261a57506109715750f35b513d84823e3d90fd5b8161262d916145e5565b6109b15785386125a6565b85513d89823e3d90fd5b8161264c916145e5565b6109b1578538612513565b81612661916145e5565b6109d557863861249a565b86513d8a823e3d90fd5b81612680916145e5565b610a2757873861242f565b87513d8b823e3d90fd5b8161269f916145e5565b6109b15785386123a2565b503461013957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013957601d546126e581614638565b916126f360405193846145e5565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b83831061273557604051806101c58782614ab9565b6002602060019260405161274881614591565b73ffffffffffffffffffffffffffffffffffffffff865416815261276d858701615045565b83820152815201920192019190612720565b503461013957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013957601a546127ba81614638565b916127c860405193846145e5565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b83831061281257604051602080825281906101c59082018861492e565b60016020819261282185614c51565b8152019201920191906127f5565b503461013957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013957601b5461286a81614638565b61287760405191826145e5565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b83831061294f57868587604051928392602084019060208552518091526040840160408260051b8601019392905b8282106128e457505050500390f35b9193602061293f827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc060019597998495030186528851908361292f83516040845260408401906148eb565b9201519084818403910152614a63565b96019201920185949391926128d5565b6002602060019260405161296281614591565b61296b86614c51565b8152612978858701615045565b838201528152019201920191906128a7565b5034610139578061299a366149d3565b6129f46129a8939293614d58565b6129c56129b3614d7d565b610331602084019682885236906146c1565b508560a06129d38651614b5e565b5101528560806129e38651614b5e565b510152600160c061039f8651614b5e565b6129fd81615465565b612a06816158ee565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c166020612a316040840151614b5e565b51015190737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109d5576040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9190911660048201526024810191909152858160448183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156109a6578691612dfd575b5050612ad281615d46565b9273ffffffffffffffffffffffffffffffffffffffff601f5460081c16612af98184615bc4565b90803b15610a27578760405180927f36fd922d00000000000000000000000000000000000000000000000000000000825260206004830152818381612b438d8c6024840191614e0d565b03925af1908115610a1c578891612de8575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c1690813b15610a275787916024839260405194859384927f920316f600000000000000000000000000000000000000000000000000000000845260048401525af19081156109ca578791612dd3575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c1660608301516080840151823b156109ee57604489928360405195869485937f650fb676000000000000000000000000000000000000000000000000000000008552600485015260248401525af19081156109ca578791612dbe575b5050604051907f7da3c3ab00000000000000000000000000000000000000000000000000000000602083015260048252612c756024836145e5565b73ffffffffffffffffffffffffffffffffffffffff612c948251614b5e565b5151166040612ca860206106728551614b5e565b51015191737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109ee578891612d018560405195869485947fd23cd03700000000000000000000000000000000000000000000000000000000865260048601614e4c565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156109ca578791612da9575b5050612d7391610e7b610ea7926040519485937f7f6b0bb1000000000000000000000000000000000000000000000000000000006020860152606060248601526084850190614eb7565b908960448501527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc8483030160648501526148eb565b81612db3916145e5565b6109b1578538612d29565b81612dc8916145e5565b6109b1578538612c3a565b81612ddd916145e5565b6109b1578538612bc1565b81612df2916145e5565b6109d5578638612b55565b81612e07916145e5565b61098d578438612ac7565b503461013957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101395760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b818110612e8f576101c5856101b9818703826145e5565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201612e78565b503461013957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101395760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b818110612f38576101c5856101b9818703826145e5565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201612f21565b503461013957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013957602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051908152f35b50346101395780612fc9366149d3565b613011612fd7939293614d58565b612fe26129b3614d7d565b508560a0612ff08651614b5e565b5101528560806130008651614b5e565b510152600260c061039f8651614b5e565b61301a81615465565b613023816158ee565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c16602061304e6040840151614b5e565b51015190737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109d5576040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9190911660048201526024810191909152858160448183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156109a657869161351c575b50506130ef81615d46565b9273ffffffffffffffffffffffffffffffffffffffff601f5460081c16916131178382615bc4565b92803b15610a27578760405180927f36fd922d000000000000000000000000000000000000000000000000000000008252602060048301528183816131618d8c6024840191614e0d565b03925af1908115610a1c578891613507575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b15610a27578780916024604051809481937f920316f60000000000000000000000000000000000000000000000000000000083528960048401525af1908115610a1c5788916134f2575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c169060806060820151910151823b156109ee57604489928360405195869485937f650fb676000000000000000000000000000000000000000000000000000000008552600485015260248401525af19081156109ca5787916134dd575b5050604051907f7da3c3ab000000000000000000000000000000000000000000000000000000006020830152600482526132926024836145e5565b73ffffffffffffffffffffffffffffffffffffffff6132b18251614b5e565b51511660406132c560206106728551614b5e565b51015191737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109ee57889161331e8560405195869485947fd23cd03700000000000000000000000000000000000000000000000000000000865260048601614e4c565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156109ca5787916134c8575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109d5576040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff919091166084820152868160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156109ca5787916134b3575b50507fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b9161345060405192839283528860208401526060604084015260608301906148eb565b0390a173ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b1561098d5761096093858094604051968795869485937f1f6a1eb900000000000000000000000000000000000000000000000000000000855260048501614e92565b816134bd916145e5565b6109b157853861340a565b816134d2916145e5565b6109b1578538613346565b816134e7916145e5565b6109b1578538613257565b816134fc916145e5565b6109d55786386131dd565b81613511916145e5565b6109d5578638613173565b81613526916145e5565b61098d5784386130e4565b503461013957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013957601e5461356c81614638565b61357960405191826145e5565b818152601e83526020810191837f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350845b83831061365857868587604051928392602084019060208552518091526040840160408260051b8601019392905b8282106135e657505050500390f35b91936020613648827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc060019597998495030186526040838a5173ffffffffffffffffffffffffffffffffffffffff81511684520151918185820152019061492e565b96019201920185949391926135d7565b60405161366481614591565b73ffffffffffffffffffffffffffffffffffffffff835416815260018301805461368d81614638565b9161369b60405193846145e5565b8183528a526020808b20908b9084015b8382106136d15750505050600192826020928360029501528152019201920191906135a9565b6001602081926136e086614c51565b8152019301910190916136ab565b503461013957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101395760405180916020601654928381520191601682527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289915b81811061376b576101c5856101b9818703826145e5565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201613754565b50346101395760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101395760043567ffffffffffffffff8111610aca576137e7903690600401614776565b90600360208301515110737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610aca57604051907f4c63e56200000000000000000000000000000000000000000000000000000000825260048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561098257614581575b50906040516102328082019082821067ffffffffffffffff831117611e9a57908291616b8f8339039083f08015610982576138b173ffffffffffffffffffffffffffffffffffffffff849216926153d2565b906138bb82615465565b6138c4826158ee565b6138e973ffffffffffffffffffffffffffffffffffffffff601f5460081c1683615bc4565b926138f383615d46565b926040810191835b835180518210156142b3576139128260a092614baa565b51015115613a2c5773ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109b1576040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff919091166084820152858160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156109a657908691613a17575b50506001907f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b604080518a8152836020820152a15b016138fb565b81613a21916145e5565b61098d5784886139dc565b73ffffffffffffffffffffffffffffffffffffffff613a4c828651614baa565b515116737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109b157604051907fc88a5e6d0000000000000000000000000000000000000000000000000000000082526004820152856024820152858160448183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156109a65790869161429e575b50506080613ad6828651614baa565b510151156141d15773ffffffffffffffffffffffffffffffffffffffff613afe828651614baa565b515116613b0a83614bee565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109d557613b6091879160405193849283927fb4d6c78200000000000000000000000000000000000000000000000000000000845260048401614bbe565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156109a6579086916141bc575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109b1576040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff919091166084820152858160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156109a6579086916141a7575b50507f1d075b933dc9f19186b1ae7fc385d64fd8845afa07eeb056a7ebdacdfb7f2fc86020604051898152a173ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109b1576040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff919091166084820152858160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156109a657908691614192575b50507fbc4bc9c81963cfbf61c958448f1c4b4b382b0a997a2fb0d1fd153818bb2aa27b6020604051838152a173ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109b1576040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff919091166084820152858160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156109a65790869161417d575b50507fbb7a447ad156f8002134a11ad706b80728a2f1ceb0322f1e3494861fa0ad096c6020855151604051908152a173ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109b1576040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff919091166084820152858160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156109a657908691614168575b50507f6840f59e591bc40085b0cabf11c3e75123624c13f13d90fc58859e310d15b02e60206060850151604051908152a173ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109b1576040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff919091166084820152858160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156109a657908691614153575b50507f0b76c48be4e2908f4c9d4eabaf7538e91577fd9ae26db46693fa8d861c6a42fb61403f6040611a74848851614baa565b0390a15b73ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109b1576040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff919091166084820152858160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156109a65790869161413e575b50506001907f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a604080518a8152836020820152a1613a11565b81614148916145e5565b61098d578488614105565b8161415d916145e5565b61098d57848861400c565b81614172916145e5565b61098d578488613f19565b81614187916145e5565b61098d578488613e28565b8161419c916145e5565b61098d578488613d3a565b816141b1916145e5565b61098d578488613c4c565b816141c6916145e5565b61098d578488613b88565b73ffffffffffffffffffffffffffffffffffffffff6141f1828651614baa565b5151166040614201838751614baa565b51015190737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156109d55761425a91879160405193849283927fbd6af43400000000000000000000000000000000000000000000000000000000845260048401614bbe565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156109a657908691614289575b5050614043565b81614293916145e5565b61098d578488614282565b816142a8916145e5565b61098d578488613ac7565b8585818973ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610ac657604051907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152828160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115611edc57839161456c575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b15610ac6576143af83929183926040519485809481937f6ea445770000000000000000000000000000000000000000000000000000000083526020600484015260248301906148eb565b03925af1801561098257614557575b50506143e573ffffffffffffffffffffffffffffffffffffffff601f5460081c16316164b2565b815b81518051821015611e3e576143fe82608092614baa565b510151158061451b575b80614504575b61441b575b6001016143e7565b9082835b825180518210156144d35761443682608092614baa565b5101511580614486575b8061446f575b614453575b60010161441f565b9061446760019160206103da858751614baa565b91905061444b565b5060a061447d828551614baa565b51015115614446565b5073ffffffffffffffffffffffffffffffffffffffff6144a7828551614baa565b51511673ffffffffffffffffffffffffffffffffffffffff6144ca868651614baa565b51511614614440565b5050916144fd6001929373ffffffffffffffffffffffffffffffffffffffff611dda848751614baa565b9050614413565b5060a0614512828451614baa565b5101511561440e565b5073ffffffffffffffffffffffffffffffffffffffff61453c828451614baa565b51511631602061454d838551614baa565b5101511415614408565b81614561916145e5565b610aca5781836143be565b81614576916145e5565b610aca578185614345565b8161458b916145e5565b3861385f565b6040810190811067ffffffffffffffff821117610a9757604052565b60e0810190811067ffffffffffffffff821117610a9757604052565b6080810190811067ffffffffffffffff821117610a9757604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610a9757604052565b3590811515820361463357565b600080fd5b67ffffffffffffffff8111610a975760051b60200190565b67ffffffffffffffff8111610a9757601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b92919261469682614650565b916146a460405193846145e5565b829481845281830111614633578281602093846000960137010152565b91909160e08184031261463357604051906146db826145ad565b8193813573ffffffffffffffffffffffffffffffffffffffff8116810361463357835260208201356020840152604082013567ffffffffffffffff81116146335782019181601f840112156146335761473e60c09392836020869535910161468a565b60408501526060810135606085015261475960808201614626565b608085015261476a60a08201614626565b60a08501520135910152565b9190916080818403126146335760405190614790826145c9565b819361479b82614626565b8352602082013567ffffffffffffffff81116146335782019080601f830112156146335781356147ca81614638565b926147d860405194856145e5565b81845260208085019260051b820101918383116146335760208201905b83821061484a575050505050602083015260408101359073ffffffffffffffffffffffffffffffffffffffff8216820361463357606091604084015201359066ffffffffffffff821682036146335760600152565b813567ffffffffffffffff81116146335760209161486d878480948801016146c1565b8152019101906147f5565b602060408183019282815284518094520192019060005b81811061489c5750505090565b825173ffffffffffffffffffffffffffffffffffffffff1684526020938401939092019160010161488f565b60005b8381106148db5750506000910152565b81810151838201526020016148cb565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093614927815180928187528780880191016148c8565b0116010190565b9080602083519182815201916020808360051b8301019401926000915b83831061495a57505050505090565b9091929394602080614996837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0866001960301875289516148eb565b9701930193019193929061494b565b9181601f840112156146335782359167ffffffffffffffff8311614633576020838186019501011161463357565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126146335760043567ffffffffffffffff81116146335760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc828503011261463357600401916024359067ffffffffffffffff821161463357614a5f916004016149a5565b9091565b906020808351928381520192019060005b818110614a815750505090565b82517fffffffff0000000000000000000000000000000000000000000000000000000016845260209384019390920191600101614a74565b602081016020825282518091526040820191602060408360051b8301019401926000915b838310614aec57505050505090565b9091929394602080614b4f837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190614a63565b97019301930191939290614add565b805115614b6b5760200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805160011015614b6b5760400190565b8051821015614b6b5760209160051b010190565b60409073ffffffffffffffffffffffffffffffffffffffff614beb949316815281602082015201906148eb565b90565b90813b6000614bfc82614650565b93614c0a60405195866145e5565b82855260208501903c565b91908201809211614c2257565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b906040519160008154918260011c92600181168015614d4e575b602085108114614d2157848752869392918115614ce15750600114614c9a575b50614c98925003836145e5565b565b90506000929192526020600020906000915b818310614cc5575050906020614c989282010138614c8b565b6020919350806001915483858901015201910190918492614cac565b60209350614c989592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b82010138614c8b565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f1693614c6b565b60405190614d65826145c9565b60006060838281528160208201528260408201520152565b60408051909190614d8e83826145e5565b60018152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018260005b828110614dc557505050565b602090604051614dd4816145ad565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c082015282828501015201614db9565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b92614beb949273ffffffffffffffffffffffffffffffffffffffff614e849316855260208501526080604085015260808401906148eb565b9160608184039101526148eb565b91614ea9614beb94926040855260408501906148eb565b926020818503910152614e0d565b610120820160ff82511683526020820151151560208401526040820151906101206040850152815180915261014084019060206101408260051b8701019301916000905b828210614f9d5750505050614f3361010091606084015160608601526080840151608086015260a084015185820360a08701526148eb565b9160c081015160c085015260e081015160e08501520151916101008183039101526020808351928381520192019060005b818110614f715750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101614f64565b90919293602080827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec08a6001950301855287519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c08061500f604085015160e0604086015260e08501906148eb565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152960192019201909291614efb565b90604051918281549182825260208201906000526020600020926000905b80600783011061525f57614c98945491818110615229575b8181106151f3575b8181106151bd575b818110615187575b818110615151575b81811061511b575b8181106150e6575b106150b9575b5003836145e5565b7fffffffff00000000000000000000000000000000000000000000000000000000168152602001386150b1565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b1681520193016150ab565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b1681520193016150a3565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b16815201930161509b565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b168152019301615093565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b16815201930161508b565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b168152019301615083565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b16815201930161507b565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e0820152019401920185929391615063565b60085460ff1680156152fb5790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156153c657600091615394575b50151590565b90506020813d6020116153be575b816153af602093836145e5565b8101031261463357513861538e565b3d91506153a2565b6040513d6000823e3d90fd5b9060405191610120830183811067ffffffffffffffff821117610a97576040526000602084015266ffffffffffffff60606040850192818452818601600081526080870194600086528360a0890152600060c0890152600060e089015283610100890152600088526020830151905273ffffffffffffffffffffffffffffffffffffffff60408301511690520151169052565b60009060009073ffffffffffffffffffffffffffffffffffffffff601f5460081c16906040945b8582019182518051861015615840576154ba8673ffffffffffffffffffffffffffffffffffffffff92614baa565b5151165b73ffffffffffffffffffffffffffffffffffffffff811690600182101580615835575b8015615821575b8015615804575b80156157fa575b15615532575073ffffffffffffffffffffffffffffffffffffffff90885160208101918252602081526155298a826145e5565b519020166154be565b9050949192909473ffffffffffffffffffffffffffffffffffffffff615559848451614baa565b51911690526155886d04ee2d6d415b85acef8100000000602061557d858551614baa565b5101516000906169af565b6000808961559e6155d0825161225384826145e5565b876044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826145e5565b51906a636f6e736f6c652e6c6f675afa5060206155ee848451614baa565b510152615606633b9aca00606061557d858551614baa565b6000808961559e61561c825161225384826145e5565b51906a636f6e736f6c652e6c6f675afa50606061563a848451614baa565b510152608061564a838351614baa565b51015115806157e3575b6157ac575b73ffffffffffffffffffffffffffffffffffffffff61569783836080615681838a9751614baa565b510151151580615794575b615737575b51614baa565b5151161415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156146335786918251917f4c63e5620000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821561572c5760019261571b575b50019391905061548c565b6000615726916145e5565b38615710565b83513d6000823e3d90fd5b615758633b9aca00620186a06060615750868651614baa565b5101516169af565b6000808d61559e61576e825161225384826145e5565b51906a636f6e736f6c652e6c6f675afa50606061578c848451614baa565b510152615691565b5060606157a2838351614baa565b510151151561568c565b9473ffffffffffffffffffffffffffffffffffffffff615697836157d8879460206103da848d51614baa565b989350505050615659565b5060a06157f1838351614baa565b51015115615654565b50803b15156154f6565b50734e59b44847b379578588920ca78fbf26c0b4956c82146154ef565b506a636f6e736f6c652e6c6f6782146154e8565b5060ff8211156154e1565b505094925050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156146335781517fc88a5e6d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff919091166004820152602481019290925260008260448183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156158e457506158d95750565b6000614c98916145e5565b513d6000823e3d90fd5b6158ff6003600060ff8451166169af565b60ff604091600080845161591386826145e5565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152855161597e8161559e60208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528a602484015260648301906148eb565b51906a636f6e736f6c652e6c6f675afa50168083521561599c575050565b606082016159c173ffffffffffffffffffffffffffffffffffffffff600083516169af565b9060008084516159d186826145e5565b600c81527f426f756e6420726573756c74000000000000000000000000000000000000000060208201528551615a6e81615a3c60208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528a602484015260648301906148eb565b886044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826145e5565b51906a636f6e736f6c652e6c6f675afa505260808201615a9866ffffffffffffff600083516169af565b906000808451615aa886826145e5565b600c81527f426f756e6420726573756c74000000000000000000000000000000000000000060208201528551615b1381615a3c60208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528a602484015260648301906148eb565b51906a636f6e736f6c652e6c6f675afa505260005b818301908151908151811015615bbd57839260c0615bb283615b5260028461557d8460019a614baa565b9360008089615b69615b9b825161225384826145e5565b8b6044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826145e5565b51906a636f6e736f6c652e6c6f675afa5051614baa565b510152019050615b28565b5050505050565b60208101519091615c889115615cd3576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a08152615c7f60c0826145e5565b519020916165b0565b6040519060208201927f190100000000000000000000000000000000000000000000000000000000000084526022830152604282015260428152615ccd6062826145e5565b51902090565b4690615bd8565b90929192615ce781614650565b91615cf560405193846145e5565b829482845282820111614633576020614c989301906148c8565b6020818303126146335780519067ffffffffffffffff821161463357019080601f83011215614633578151614beb92602001615cda565b906000610e7b615d69615da4946040519283916020808401526040830190614eb7565b604051809481927f71aad10d0000000000000000000000000000000000000000000000000000000083526020600484015260248301906148eb565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156153c657600092616495575b50615e676002602c60405180957f7b227061796c6f6164223a2200000000000000000000000000000000000000006020830152615e1281518092602086860191016148c8565b81017f227d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe28101855201836145e5565b6040517fc1978d1f00000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5345515f53444b5f5250435f4d494e5f504f52540000000000000000000000006044820152602081606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156153c657600091616463575b50604051907fc1978d1f00000000000000000000000000000000000000000000000000000000825260206004830152601460248301527f5345515f53444b5f5250435f4d41585f504f52540000000000000000000000006044830152602082606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156153c65760009261642f575b508082106163d1577fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a654801561637f575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114614c2257816001615ffe920193847fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a655616969565b9160018301809311614c225761601d9261601791616976565b90614c15565b604051907ff877cb1900000000000000000000000000000000000000000000000000000000825260206004830152601660248301527f5345515f53444b5f5250435f55524c5f505245464958000000000000000000006044830152600082606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156153c657600092616362575b506040517ff877cb1900000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5345515f53444b5f5250435f55524c5f535546464958000000000000000000006044820152600081606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156153c657600091616347575b50604051917f6900a3ae0000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156153c65760409560009461623e948693616318575b506162039060206162a294956161d6828c5198856161b38b9751809285808b0191016148c8565b86016161c7825180938580850191016148c8565b010191828151948592016148c8565b01037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018552846145e5565b865196879485947f0199a2200000000000000000000000000000000000000000000000000000000086526060600487015260648601906148eb565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152601083527f7061796c6f61645f746f5061636b656400000000000000000000000000000000602084015201604486015201906148eb565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19182156153c6576000926162cd5750565b3d8084833e6162dc81836145e5565b810190602081830312611e815780519067ffffffffffffffff821161098d570181601f82011215611e8157614beb929350602081519101615cda565b6162a2935090602061633e616203933d808b833e61633681836145e5565b810190615d0f565b9450509061618c565b61635c91503d806000833e61633681836145e5565b3861612b565b6163789192503d806000833e61633681836145e5565b90386160a4565b50604051602081019036600083376163c960208236810160008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826145e5565b519020615fa6565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e76616c696420706f72742072616e676500000000000000000000000000006044820152fd5b90916020823d60201161645b575b8161644a602093836145e5565b810103126101395750519038615f75565b3d915061643d565b906020823d60201161648d575b8161647d602093836145e5565b8101031261013957505138615eed565b3d9150616470565b6164ab9192503d806000833e61633681836145e5565b9038615dcc565b600090737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610aca57604051907f98296c5400000000000000000000000000000000000000000000000000000000825260048201528160248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156109825761652c575050565b81616536916145e5565b50565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561463357604051917f98296c5400000000000000000000000000000000000000000000000000000000835260048301526024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156153c6576158d95750565b61010081015160405160208101818193602081519391019260005b81811061693a5750506166059250037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826145e5565b5190209060ff815116801560001461680d57509060408201519283519161664461662e84614638565b9361663c60405195866145e5565b808552614638565b937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe060208501950136863760005b8651811015616744578061668860019289614baa565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152616730610120826145e5565b51902061673d8288614baa565b5201616672565b5092919450926040519081602081019182945192909260005b8181106167f45750506167979250037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826145e5565b51902091608060608301519201516040519260208401947f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a2865260408501526060840152608083015260a082015260a08152615ccd60c0826145e5565b845183526020948501948694509092019160010161675d565b60018103616867575060a0015160208151910120906040519060208201927fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46684526040830152606082015260608152615ccd6080826145e5565b600281036168ba575060c00151906040519060208201927f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e484526040830152606082015260608152615ccd6080826145e5565b6003810361690d575060e00151906040519060208201927fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46684526040830152606082015260608152615ccd6080826145e5565b7f048183200000000000000000000000000000000000000000000000000000000060005260045260246000fd5b845173ffffffffffffffffffffffffffffffffffffffff168352602094850194869450909201916001016165cb565b91908203918211614c2257565b8115616980570690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600090838311616b0a5782811091821580616b00575b616af8576169d38486616969565b9260018401809411614c2257600383111580616aef575b616ae0577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83101580616ad6575b616ac55785831115616a7c57505090616a3484616a3993616969565b616976565b908115616a7757616a4a9250614c15565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111614c225790565b505090565b959492919095616a8d575b50505050565b83949550616a3490616a9f9394616969565b908115616a7757616ab09250616969565b60018101809111614c22579038808080616a87565b50509050614beb9291501990616969565b5082198411616a18565b5050919050614beb9250614c15565b508284116169ea565b509250505090565b50848211156169c5565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374645574696c7320626f756e642875696e743235362c75696e743235362c7560448201527f696e74323536293a204d6178206973206c657373207468616e206d696e2e00006064820152fdfe60808060405234601557610217908161001b8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c634c4e814c1461002857600080fd5b346101dc5760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101dc5760a4359067ffffffffffffffff82116101dc57366023830112156101dc5781600401359067ffffffffffffffff82116101dc5736602483850101116101dc577f0b76c48be4e2908f4c9d4eabaf7538e91577fd9ae26db46693fa8d861c6a42fb927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6024947f1d075b933dc9f19186b1ae7fc385d64fd8845afa07eeb056a7ebdacdfb7f2fc860206040966004358152a17f9fcc36893cf52b97e3d02576f1025eb7a27c30635672de751e2ef9a6f0ccb08b6020865188358152a17fbc4bc9c81963cfbf61c958448f1c4b4b382b0a997a2fb0d1fd153818bb2aa27b602086516044358152a17fbb7a447ad156f8002134a11ad706b80728a2f1ceb0322f1e3494861fa0ad096c602086516064358152a17f6840f59e591bc40085b0cabf11c3e75123624c13f13d90fc58859e310d15b02e602086516084358152a1808551968795602087528260208801520186860137600085828601015201168101030190a1005b600080fdfea264697066735822122099af5207b02b9a8ddc7dd740e8ccd256649f5ef019b55951af1893b0e581e2cf64736f6c634300081c0033a2646970667358221220ae7c82fe11e1af8d62c5d70b67a500995fa5cf46c4c044eec102fa5b6e68e14364736f6c634300081c0033","sourceMap":"2294:12771:89:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1065:26:16;2294:12771:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2723:18:9;2294:12771:89;;;;;;;2723:18:9;2294:12771:89;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;9624:1;2294:12771;;;;;;;;;;;9588:14;;;9913:25;10021:26;9588:14;9670:25;9588:14;;2294:12771;;9588:14;;:38;;;;2294:12771;;;;;:::i;:::-;9670:25;;;:::i;:::-;;;:::i;:::-;;9701:14;2294:12771;9701:17;:14;;:17;:::i;:::-;;:30;2294:12771;9745:14;2294:12771;9745:17;:14;;:17;:::i;:::-;;:30;2294:12771;9789:14;2294:12771;9789:17;:14;;:17;:::i;:::-;;:33;2294:12771;;9913:14;;2294:12771;;;;;;:::i;:::-;9913:25;;;:::i;:::-;;;:::i;:::-;;2294:12771;;9944:17;:14;;:17;:::i;:::-;;:30;2294:12771;10021:26;:::i;:::-;10068:7;;;:::i;:::-;10102;;;:::i;:::-;10232:47;2294:12771;10232:13;;2294:12771;10257:16;10232:13;:16;:13;;:16;:::i;:::-;;:22;2024:14:2;10257:13:89;;:16;:::i;:::-;;:22;2024:14:2;10232:47:89;;:::i;:::-;2294:12771;10301:5;2024:14:2;;;2294:12771:89;336:42:2;10285:35:89;;;;2294:12771;;2024:14:2;10285:35:89;;2294:12771;;;;;;10285:35;;2294:12771;2867:4:48;;;2024:14:2;;;;2294:12771:89;;2867:4:48;2294:12771:89;;336:42:2;10285:35:89;;;;;;;;;;;2294:12771;10349:42;;;;;:::i;:::-;2024:14:2;2294:12771:89;10301:5;2024:14:2;;;2294:12771:89;10414:40;;;;;:::i;:::-;10461:38;;;;;;2294:12771;;;10461:38;;2024:14:2;10461:38:89;;2294:12771;;10461:38;;2867:4:48;;;;;;;2294:12771:89;2867:4:48;;;;:::i;:::-;10461:38:89;;;;;;;;;;;;;2294:12771;2024:14:2;;2294:12771:89;10301:5;2024:14:2;;;2294:12771:89;10505:31;;;;;2294:12771;;;;;;10505:31;;;;2024:14:2;10505:31:89;;;2294:12771;10505:31;;2024:14:2;10505:31:89;;;;;;;;;;;2294:12771;2024:14:2;;2294:12771:89;10301:5;2024:14:2;;;2294:12771:89;10559:13;2294:12771;;10559:13;;2024:14:2;10574:13:89;;2024:14:2;10542:46:89;;;;;2294:12771;;;;;;10542:46;;;;;2024:14:2;10542:46:89;;2294:12771;10542:46;;2024:14:2;2294:12771:89;2867:4:48;;2024:14:2;10542:46:89;;;;;;;;;;;2294:12771;;;;;10621:53;2294:12771;;10621:53;;;2294:12771;10621:53;;;2294:12771;10621:53;;:::i;:::-;2294:12771;10755:17;:14;;:17;:::i;:::-;;2024:14:2;2294:12771:89;;10802:17;2294:12771;10777:17;:14;;:17;:::i;:::-;;:23;2024:14:2;10802::89;;:17;:::i;:::-;;:22;;10737:100;336:42:2;10737:100:89;;;;2294:12771;;10737:100;2294:12771;;;10737:100;;;;;2024:14:2;10737:100:89;;2294:12771;10737:100;;;:::i;:::-;;;;336:42:2;10737:100:89;;;;;;;;;;;2294:12771;2024:14:2;;2294:12771:89;10301:5;2024:14:2;;;2294:12771:89;336:42:2;10894:53:89;;;;2294:12771;;2024:14:2;10894:53:89;;2024:14:2;2294:12771:89;10894:53;;2294:12771;;;2024:14:2;;;2294:12771:89;;;2024:14:2;;;2294:12771:89;;;2024:14:2;;;2294:12771:89;;;;;;2024:14:2;;;2294:12771:89;;;2024:14:2;2294:12771:89;;336:42:2;10894:53:89;;;;;;;;;;;2294:12771;;;2867:4:48;10958:33:89;2294:12771;;;2024:14:2;;;;;;2867:4:48;2294:12771:89;2867:4:48;;2024:14:2;2294:12771:89;;2867:4:48;;;2294:12771:89;2867:4:48;;;;:::i;:::-;10958:33:89;;;2294:12771;10301:5;2024:14:2;;;2294:12771:89;336:42:2;11081:53:89;;;;2294:12771;;2024:14:2;11081:53:89;;2024:14:2;2294:12771:89;11081:53;;2294:12771;;;2024:14:2;;;2294:12771:89;;;2024:14:2;;;2294:12771:89;;;2024:14:2;;;2294:12771:89;;;;;;2024:14:2;;;2294:12771:89;;;2024:14:2;2294:12771:89;;336:42:2;11081:53:89;;;;;;;;;;;2294:12771;;;;11145:24;2294:12771;;;2024:14:2;;;2294:12771:89;;2657:4:48;;2024:14:2;11145:24:89;2294:12771;10301:5;2024:14:2;;;2294:12771:89;11176:33;;;;;;2294:12771;;;;;;11176:33;;;;;;;2024:14:2;11176:33:89;;2294:12771;11176:33;;;:::i;:::-;;;;;;;;;;;2294:12771;;11176:33;;;;;:::i;:::-;2294:12771;;11176:33;2294:12771;11176:33;2294:12771;;2024:14:2;2294:12771:89;;2024:14:2;;;;11176:33:89;2294:12771;;;11081:53;;;;;:::i;:::-;2294:12771;;11081:53;;;;;2294:12771;;2024:14:2;2294:12771:89;;2024:14:2;;;;11081:53:89;2294:12771;;;10894:53;;;;;:::i;:::-;2294:12771;;10894:53;;;;;2294:12771;;2024:14:2;2294:12771:89;;2024:14:2;;;;10894:53:89;2294:12771;;;10737:100;;;;;:::i;:::-;2294:12771;;10737:100;;;;;2294:12771;;;10542:46;;;;;:::i;:::-;2294:12771;;10542:46;;;;10505:31;;;;;:::i;:::-;2294:12771;;10505:31;;;;;2294:12771;;2024:14:2;2294:12771:89;;2024:14:2;;;;10505:31:89;2294:12771;;;10461:38;;;;;:::i;:::-;2294:12771;;10461:38;;;;10285:35;;;;;:::i;:::-;2294:12771;;10285:35;;;;2294:12771;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2294:12771:89;;;;;-1:-1:-1;2294:12771:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;8758:21;;;;;;:51;;;2294:12771;336:42:2;8748:62:89;;;;2294:12771;;8748:62;2024:14:2;8748:62:89;;2294:12771;;;8748:62;;2294:12771;8748:62;;2294:12771;8748:62;336:42:2;8748:62:89;;;;;;;;;;;2294:12771;;;;;;;;:::i;:::-;;;;;;8826:21;2294:12771;;;;;:::i;:::-;;;;;;8851:26;8826:51;;336:42:2;8816:62:89;;;;2294:12771;;8816:62;2024:14:2;8816:62:89;;2294:12771;8816:62;;2294:12771;8816:62;;2294:12771;8816:62;336:42:2;8816:62:89;;;;;;;;;;;2294:12771;8918:26;;;;;:::i;:::-;8970:7;;;;:::i;:::-;9007:42;;;:::i;:::-;2024:14:2;2294:12771:89;9105:5;2024:14:2;;;2294:12771:89;9072:40;;;;;:::i;:::-;9119:38;;;;;;2867:4:48;2294:12771:89;;;;;;9119:38;;;;;;2024:14:2;9119:38:89;;2294:12771;;9119:38;;2867:4:48;2294:12771:89;2867:4:48;;;;:::i;:::-;9119:38:89;;;;;;;;;;;;;2294:12771;2024:14:2;;2294:12771:89;9105:5;2024:14:2;;;2294:12771:89;9163:31;;;;;;2294:12771;;;;;;;9163:31;;;;;2024:14:2;9163:31:89;;2294:12771;9163:31;;2024:14:2;9163:31:89;;;;;;;;;;;2294:12771;2024:14:2;;2294:12771:89;9105:5;2024:14:2;;;2294:12771:89;;9217:13;;2024:14:2;9232:13:89;;;2024:14:2;9200:46:89;;;;;2294:12771;;;;;;9200:46;;;;;2024:14:2;9200:46:89;;2294:12771;9200:46;;2024:14:2;2294:12771:89;2867:4:48;;2024:14:2;9200:46:89;;;;;;;;;;;2294:12771;;;9269:81;2294:12771;;;;;9269:81;;;9292:31;2294:12771;9269:81;;;2294:12771;;9269:81;;2294:12771;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;9269:81;;;;;;;;:::i;:::-;336:42:2;9253:98:89;;;;2294:12771;2024:14:2;2294:12771:89;;;9253:98;;;;2024:14:2;9253:98:89;;2294:12771;;9253:98;;2024:14:2;2294:12771:89;2024:14:2;;;;:::i;:::-;9253:98:89;;;336:42:2;9253:98:89;;;;;;;;;;;2294:12771;2024:14:2;;2294:12771:89;9105:5;2024:14:2;;;2294:12771:89;9357:38;;;;;;2294:12771;;;;;;9357:38;;;;;;;2024:14:2;9357:38:89;;2294:12771;9357:38;;;:::i;9253:98::-;;;;;:::i;:::-;2294:12771;;9253:98;;;;2294:12771;;;;;9253:98;2294:12771;;2024:14:2;2294:12771:89;;2024:14:2;;;;9200:46:89;;;;;:::i;:::-;2294:12771;;9200:46;;;;9163:31;;;;;:::i;:::-;2294:12771;;9163:31;;;;9119:38;;;;;:::i;:::-;2294:12771;;9119:38;;;;8816:62;;;;;:::i;:::-;2294:12771;;8816:62;;;;8748;;;;;:::i;:::-;2294:12771;;8748:62;;;;8758:51;8783:26;;;;8758:51;;2294:12771;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;3577:14;;3601:1;2294:12771;3577:14;;;2294:12771;3577:25;336:42:2;3567:36:89;;;;2294:12771;;3567:36;2024:14:2;3567:36:89;;2294:12771;3567:36;;2294:12771;3567:36;;2294:12771;3567:36;336:42:2;3567:36:89;;;;;;;;;;;2294:12771;;;;;3644:22;;;;;;;;2294:12771;3644:22;;;;;;;;;;;;;;;;;;;2294:12771;3706:26;2294:12771;;3706:26;;:::i;:::-;3754:7;;;;:::i;:::-;3788;;;:::i;:::-;3825:42;;;:::i;:::-;2024:14:2;2294:12771:89;3873:5;2024:14:2;;;2294:12771:89;3873:38;;;;;2294:12771;;;3873:38;;2024:14:2;3873:38:89;;2294:12771;;3873:38;;2867:4:48;;;;;2294:12771:89;2867:4:48;;;;;:::i;:::-;3873:38:89;;;;;;;;;;;;;2294:12771;2024:14:2;;2294:12771:89;3873:5;2024:14:2;;;2294:12771:89;3917:32;;;;;2294:12771;;;;;;3917:32;;;;2024:14:2;3917:32:89;;;2294:12771;3917:32;;2024:14:2;3917:32:89;;;;;;;;;;;2294:12771;2024:14:2;;2294:12771:89;3873:5;2024:14:2;;;2294:12771:89;3972:13;2294:12771;3972:13;;2024:14:2;;;3987:13:89;;;2024:14:2;3955:46:89;;;;;;2294:12771;;;;;;;3955:46;;;;;2024:14:2;3955:46:89;;2294:12771;3955:46;;2024:14:2;2294:12771:89;2867:4:48;;2024:14:2;3955:46:89;;;;;;;;;;;2294:12771;-1:-1:-1;4013:13:89;;2294:12771;4032:13;;4054:3;4032:13;;2294:12771;;4028:24;;;;;4071:16;;:29;:16;;:::i;:::-;;:29;2024:14:2;2294:12771:89;4071:29;;2294:12771;3873:5;2024:14:2;;;2294:12771:89;336:42:2;4112:53:89;;;;2294:12771;;2024:14:2;4112:53:89;;2024:14:2;2294:12771:89;4112:53;;2294:12771;;;2024:14:2;;;2294:12771:89;;;2024:14:2;;;2294:12771:89;;;2024:14:2;;;2294:12771:89;;;;;;2024:14:2;;;2294:12771:89;;;2024:14:2;2294:12771:89;;336:42:2;4112:53:89;;;;;;;;;;;4067:1185;2294:12771;;;;4180:23;2294:12771;;;2024:14:2;;;;2294:12771:89;2024:14:2;;;4180:23:89;4067:1185;2024:14:2;4013:13:89;;4112:53;;;;;:::i;:::-;2294:12771;;4112:53;;;;4067:1185;2294:12771;4236:16;:13;;;:16;:::i;:::-;;2024:14:2;2294:12771:89;336:42:2;4228:31:89;;;;2294:12771;;4228:31;2024:14:2;4228:31:89;;2294:12771;4228:31;;2294:12771;2024:14:2;2294:12771:89;2024:14:2;;;4228:31:89;;2294:12771;4228:31;;336:42:2;4228:31:89;;;;;;;;;;;4067:1185;4274:13;;3987;4274:16;:13;;;:16;:::i;:::-;;:29;2024:14:2;2294:12771:89;3987:13;;2294:12771;4325:16;:13;;;:16;:::i;:::-;;2024:14:2;2294:12771:89;4346:21;;;:::i;:::-;4317:51;336:42:2;4317:51:89;;;;;2294:12771;;;;;4317:51;;;;;2024:14:2;4317:51:89;;2294:12771;4317:51;;;:::i;:::-;;;;336:42:2;4317:51:89;;;;;;;;;;;4270:933;2024:14:2;;2294:12771:89;3873:5;2024:14:2;;;2294:12771:89;336:42:2;4380:53:89;;;;2294:12771;;2024:14:2;4380:53:89;;2024:14:2;2294:12771:89;4380:53;;2294:12771;;;2024:14:2;;;2294:12771:89;;;2024:14:2;;;2294:12771:89;;;2024:14:2;;;2294:12771:89;;;;;;2024:14:2;;;2294:12771:89;;;2024:14:2;2294:12771:89;;336:42:2;4380:53:89;;;;;;;;;;;4270:933;2294:12771;;4450:32;2294:12771;;;2024:14:2;;;4450:32:89;2294:12771;3873:5;2024:14:2;;;2294:12771:89;336:42:2;4637:53:89;;;;2294:12771;;2024:14:2;4637:53:89;;2024:14:2;2294:12771:89;4637:53;;2294:12771;;;2024:14:2;;;2294:12771:89;;;2024:14:2;;;2294:12771:89;;;2024:14:2;;;2294:12771:89;;;;;;2024:14:2;;;2294:12771:89;;;2024:14:2;2294:12771:89;;336:42:2;4637:53:89;;;;;;;;;;;4270:933;2294:12771;;4707:25;2294:12771;;;2024:14:2;;;4707:25:89;2294:12771;3873:5;2024:14:2;;;2294:12771:89;336:42:2;4744:53:89;;;;2294:12771;;2024:14:2;4744:53:89;;2024:14:2;2294:12771:89;4744:53;;2294:12771;;;2024:14:2;;;2294:12771:89;;;2024:14:2;;;2294:12771:89;;;2024:14:2;;;2294:12771:89;;;;;;2024:14:2;;;2294:12771:89;;;2024:14:2;2294:12771:89;;336:42:2;4744:53:89;;;;;;;;;;;4270:933;4840:13;;4814:47;2294:12771;4840:13;;2294:12771;;;2024:14:2;;;4814:47:89;2294:12771;3873:5;2024:14:2;;;2294:12771:89;336:42:2;4873:53:89;;;;2294:12771;;2024:14:2;4873:53:89;;2024:14:2;2294:12771:89;4873:53;;2294:12771;;;2024:14:2;;;2294:12771:89;;;2024:14:2;;;2294:12771:89;;;2024:14:2;;;2294:12771:89;;;;;;2024:14:2;;;2294:12771:89;;;2024:14:2;2294:12771:89;;336:42:2;4873:53:89;;;;;;;;;;;4270:933;2024:14:2;;4943:37:89;2294:12771;2024:14:2;;2294:12771:89;;2024:14:2;;;4943:37:89;2294:12771;3873:5;2024:14:2;;;2294:12771:89;336:42:2;4992:53:89;;;;2294:12771;;2024:14:2;4992:53:89;;2024:14:2;2294:12771:89;4992:53;;2294:12771;;;2024:14:2;;;2294:12771:89;;;2024:14:2;;;2294:12771:89;;;2024:14:2;;;2294:12771:89;;;;;;2024:14:2;;;2294:12771:89;;;2024:14:2;2294:12771:89;;336:42:2;4992:53:89;;;;;;;;;;;4270:933;5084:13;;;5062:44;2024:14:2;2294:12771:89;5084:16;2294:12771;5084:13;;;:16;:::i;:::-;;:21;;2294:12771;;2024:14:2;;;2294:12771:89;2024:14:2;;2294:12771:89;2024:14:2;;;;:::i;:::-;5062:44:89;;;4270:933;5218:25;2294:12771;;;2024:14:2;;;;2294:12771:89;2024:14:2;;;5218:25:89;4067:1185;;4992:53;;;;;:::i;:::-;2294:12771;;4992:53;;;;4873;;;;;:::i;:::-;2294:12771;;4873:53;;;;4744;;;;;:::i;:::-;2294:12771;;4744:53;;;;4637;;;;;:::i;:::-;2294:12771;;4637:53;;;;4380;;;;;:::i;:::-;2294:12771;;4380:53;;;;4317:51;;;;;:::i;:::-;2294:12771;;4317:51;;;;4270:933;2294:12771;5149:16;:13;;;:16;:::i;:::-;;2024:14:2;2294:12771:89;;5170:16;:13;;;:16;:::i;:::-;;:21;;5135:57;336:42:2;5135:57:89;;;;;2294:12771;;;;;5135:57;;;;;2024:14:2;5135:57:89;;2294:12771;5135:57;;;:::i;:::-;;;;336:42:2;5135:57:89;;;;;;;;;;;4270:933;;;2294:12771;4270:933;;;5135:57;;;;;:::i;:::-;2294:12771;;5135:57;;;;4228:31;;;;;:::i;:::-;2294:12771;;4228:31;;;;4028:24;;;;;;;2294:12771;3873:5;2024:14:2;;;2294:12771:89;5264:33;;;;;;2294:12771;;;;;;5264:33;;;;;;;2024:14:2;5264:33:89;;2294:12771;5264:33;;;:::i;:::-;;;;;;;;;;;4008:1250;2024:14:2;;5304:35:89;2294:12771;3873:5;2024:14:2;;;2294:12771:89;5313:22;5304:35;:::i;:::-;5402:13;5443:3;5421:13;;2294:12771;;5417:24;;;;;5470:16;;3987:13;5470:16;;:::i;:::-;;:29;2024:14:2;2294:12771:89;5469:87;;;5443:3;5469:131;;;5443:3;5456:682;;5443:3;2294:12771;2024:14:2;5402:13:89;;5456:682;5731:28;;5774:13;5815:3;5793:13;;2294:12771;;5789:24;;;;;5850:16;;3987:13;5850:16;;:::i;:::-;;:29;2024:14:2;2294:12771:89;5849:76;;;5815:3;5849:124;;;5815:3;5832:223;;5815:3;2294:12771;2024:14:2;5774:13:89;;5832:223;6020:13;6000:42;2294:12771;6020:13;2294:12771;6020:16;:13;;;:16;:::i;6000:42::-;5832:223;;;;;5849:124;5944:13;4071:29;5944:16;:13;;;:16;:::i;:::-;;:29;2024:14:2;2294:12771:89;5849:124;;:76;5883:13;2294:12771;5883:16;:13;;;:16;:::i;:::-;;2024:14:2;2294:12771:89;;5906:16;:13;;;:16;:::i;:::-;;2024:14:2;2294:12771:89;5883:42;5849:76;;5789:24;;;;6101:27;2294:12771;5789:24;;2294:12771;6101:16;:13;;;:16;:::i;:::-;;2024:14:2;2294:12771:89;6101:27;;;:::i;:::-;5456:682;;;;5469:131;5571:13;4071:29;5571:16;:13;;;:16;:::i;:::-;;:29;2024:14:2;2294:12771:89;5469:131;;:87;5503:13;2294:12771;5503:16;:13;;;:16;:::i;:::-;;2024:14:2;2294:12771:89;5503:27;2294:12771;5534:16;:13;;;:16;:::i;:::-;;:22;2024:14:2;5503:53:89;;5469:87;;5417:24;;2294:12771;;5264:33;;;;;:::i;:::-;2294:12771;;5264:33;;;;3955:46;;;;;:::i;:::-;2294:12771;;3955:46;;;;3917:32;;;;;:::i;:::-;2294:12771;;3917:32;;;;2294:12771;;;;3873:38;;;;;:::i;:::-;2294:12771;;3873:38;;;;3644:22;2294:12771;;;;;;;;;3567:36;;;;;:::i;:::-;2294:12771;;3567:36;;;;;2294:12771;;2024:14:2;2294:12771:89;;2024:14:2;;;;2294:12771:89;;;;;;;;;;;;2575:18:9;2294:12771:89;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;2575:18:9;2294:12771:89;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;2876:18:9;2294:12771:89;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;2876:18:9;2294:12771:89;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14400:26;2294:12771;;;;;;;;:::i;:::-;;;;;;:::i;:::-;14032:21;2294:12771;14284:17;2933:19:15;14346:13:89;14032:21;;:::i;:::-;14015:14;2294:12771;14015:14;;:38;;;2933:19:15;14102:11:89;14091:9;2294:12771;;2933:19:15;:::i;:::-;2024:14:2;;;2294:12771:89;;;;;;9786:54:15;2294:12771:89;;;;;;:::i;:::-;;2024:14:2;;2294:12771:89;;;;;;;9786:54:15;;;2294:12771:89;9786:54:15;;;;;;2294:12771:89;9786:54:15;;2294:12771:89;;;;;;:::i;:::-;;;;;2024:14:2;9786:54:15;;;;;;;;:::i;:::-;2294:12771:89;9371:159:15;679:42;9371:159;;;14166:24:89;:14;;2294:12771;;;;;;:::i;14166:24::-;;14196:14;:30;:17;:14;;:17;:::i;:::-;;:30;2294:12771;14240:14;:30;:17;:14;;:17;:::i;:::-;;:30;2294:12771;14319:13;;2294:12771;2933:19:15;:::i;:::-;2294:12771:89;;;;;9786:54:15;2294:12771:89;;;;;;:::i;:::-;;2024:14:2;;2294:12771:89;;;;;;;9786:54:15;;;2294:12771:89;9786:54:15;;;;;;2294:12771:89;9786:54:15;;2294:12771:89;;;;;;:::i;9786:54:15:-;2294:12771:89;9371:159:15;679:42;9371:159;;;14284:14:89;:17;:::i;14400:26::-;14447:7;;;;:::i;:::-;14481;;;:::i;:::-;2294:12771;14547:5;2024:14:2;;;2294:12771:89;;14555:16;:13;;;;:16;:::i;:::-;;:22;2024:14:2;14531:47:89;336:42:2;14531:47:89;;;;2294:12771;;2024:14:2;14531:47:89;;2294:12771;;;;;;14531:47;;2294:12771;2867:4:48;;;2024:14:2;;;;2294:12771:89;;2867:4:48;2294:12771:89;;336:42:2;14531:47:89;;;;;;;;;;;2294:12771;14607:42;;;;;:::i;:::-;2024:14:2;2294:12771:89;14547:5;2024:14:2;;;2294:12771:89;14672:40;;;;:::i;:::-;14719:38;;;;;;2294:12771;;;14719:38;;2024:14:2;14719:38:89;;2294:12771;;14719:38;;2867:4:48;;;;;;;2294:12771:89;2867:4:48;;;;:::i;:::-;14719:38:89;;;;;;;;;;;;;2294:12771;2024:14:2;;2294:12771:89;14547:5;2024:14:2;;;2294:12771:89;14763:31;;;;;;2294:12771;;;;;;;14763:31;;;;;2024:14:2;14763:31:89;;2294:12771;14763:31;;2024:14:2;14763:31:89;;;;;;;;;;;2294:12771;2024:14:2;;2294:12771:89;14547:5;2024:14:2;;;2294:12771:89;14817:13;14240:30;2294:12771;14817:13;;2024:14:2;14832:13:89;;2024:14:2;14800:46:89;;;;;2294:12771;;;;;;14800:46;;;;;2024:14:2;14800:46:89;;2294:12771;14800:46;;2024:14:2;2294:12771:89;2867:4:48;;2024:14:2;14800:46:89;;;;;;;;;;;2294:12771;14947:51;;336:42:2;14947:51:89;;;;2294:12771;;2024:14:2;14947:51:89;;14970:27;2294:12771;14947:51;;2294:12771;14947:51;;2294:12771;14947:51;;336:42:2;14947:51:89;;;;;;;;;;;2294:12771;2024:14:2;;2294:12771:89;14547:5;2024:14:2;;;2294:12771:89;15005:52;;;;;;2294:12771;;;15005:52;2294:12771;;;15005:52;;;;;;;2024:14:2;15005:52:89;;2294:12771;15005:52;;;:::i;:::-;;;;;;;;;;;;2294:12771;;15005:52;2294:12771;2024:14:2;2294:12771:89;;2024:14:2;;;;14947:51:89;;;;;:::i;:::-;2294:12771;;14947:51;;;;;2294:12771;;2024:14:2;2294:12771:89;;2024:14:2;;;;14800:46:89;;;;;:::i;:::-;2294:12771;;14800:46;;;;14763:31;;;;;:::i;:::-;2294:12771;;14763:31;;;;;2294:12771;;2024:14:2;2294:12771:89;;2024:14:2;;;;14719:38:89;;;;;:::i;:::-;2294:12771;;14719:38;;;;;2294:12771;;2024:14:2;2294:12771:89;;2024:14:2;;;;14531:47:89;;;;;:::i;:::-;2294:12771;;14531:47;;;;2294:12771;;;;;;;;;;;;3653:18:9;2294:12771:89;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;3653:18:9;2294:12771:89;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;3162:18:9;2294:12771:89;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;3162:18:9;2294:12771:89;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;3346:26:9;2294:12771:89;;;;:::i;:::-;;;;;;;:::i;:::-;;;;3346:26:9;2294:12771:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11654:26;2294:12771;;;;;:::i;:::-;11428:24;11369:21;;:::i;:::-;2294:12771;11352:14;;;:38;;;;2294:12771;;;:::i;11428:24::-;;11458:14;:30;:17;:14;;:17;:::i;:::-;;:30;2294:12771;11502:14;:30;:17;:14;;:17;:::i;:::-;;:30;2294:12771;11388:1;11546:33;:17;:14;;:17;:::i;11654:26::-;11701:7;;;:::i;:::-;11735;;;:::i;:::-;2294:12771;11801:5;2024:14:2;;;2294:12771:89;11352:14;11809:16;2294:12771;11809:13;;;:16;:::i;:::-;;:22;2024:14:2;11785:47:89;336:42:2;11785:47:89;;;;2294:12771;;2024:14:2;11785:47:89;;2294:12771;;;;;;11785:47;;2294:12771;2867:4:48;;;2024:14:2;;;;2294:12771:89;;2867:4:48;2294:12771:89;;336:42:2;11785:47:89;;;;;;;;;;;2294:12771;11861:42;;;;;:::i;:::-;2024:14:2;2294:12771:89;11801:5;2024:14:2;;;2294:12771:89;11926:40;;;;:::i;:::-;11973:38;;;;;;2294:12771;;;11973:38;;2024:14:2;11973:38:89;;11352:14;2294:12771;11973:38;;2867:4:48;;;;;;;;;;;;:::i;:::-;11973:38:89;;;;;;;;;;;;;2294:12771;2024:14:2;;2294:12771:89;11801:5;2024:14:2;;;2294:12771:89;12017:31;;;;;;2294:12771;;2867:4:48;2294:12771:89;;;;12017:31;;;;;2024:14:2;12017:31:89;;2294:12771;12017:31;;2024:14:2;12017:31:89;;;;;;;;;;;2294:12771;2024:14:2;;2294:12771:89;11801:5;2024:14:2;;;2294:12771:89;12071:13;;;2024:14:2;11502:30:89;12086:13;;2024:14:2;12054:46:89;;;;;;2294:12771;;;;;12054:46;;;;;2024:14:2;12054:46:89;;2294:12771;12054:46;;2024:14:2;2867:4:48;;;2024:14:2;12054:46:89;;;;;;;;;;;2294:12771;;;;;12133:53;2294:12771;11352:14;12133:53;;;2294:12771;12133:53;;;2867:4:48;12133:53:89;;:::i;:::-;2294:12771;12261:17;:14;;:17;:::i;:::-;;2024:14:2;2294:12771:89;;12308:17;11352:14;12283:17;:14;;:17;:::i;12308:::-;;:22;;12243:100;336:42:2;12243:100:89;;;;2294:12771;;12243:100;2294:12771;;;12243:100;;;;;2024:14:2;12243:100:89;;2294:12771;12243:100;;;:::i;:::-;;;;336:42:2;12243:100:89;;;;;;;;;;;2294:12771;;;2763:4:48;2294:12771:89;2763:4:48;12419:71:89;2294:12771;;;12419:71;;;12442:23;11352:14;12419:71;;;12071:13;2867:4:48;12419:71:89;;2763:4:48;;;;;;:::i;:::-;;;12054:46:89;2763:4:48;;;;;;;;;;;;;:::i;12243:100:89:-;;;;;:::i;:::-;2294:12771;;12243:100;;;;12054:46;;;;;:::i;:::-;2294:12771;;12054:46;;;;12017:31;;;;;:::i;:::-;2294:12771;;12017:31;;;;11973:38;;;;;:::i;:::-;2294:12771;;11973:38;;;;11785:47;;;;;:::i;:::-;2294:12771;;11785:47;;;;2294:12771;;;;;;;;;;;;;;;;;3501:18:9;2294:12771:89;;;;;;;3501:18:9;2294:12771:89;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3794:16:9;2294:12771:89;;;;;;;3794:16:9;2294:12771:89;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2329:38;2294:12771;;;;;;;;;;;;;;;;;;;:::i;:::-;12974:26;2294:12771;;;;;:::i;:::-;12749:24;12690:21;;:::i;12749:24::-;;12779:14;:30;:17;:14;;:17;:::i;:::-;;:30;2294:12771;12823:14;:30;:17;:14;;:17;:::i;:::-;;:30;2294:12771;2867:4:48;12867:33:89;:17;:14;;:17;:::i;12974:26::-;13021:7;;;:::i;:::-;13055;;;:::i;:::-;2294:12771;13121:5;2024:14:2;;;2294:12771:89;12673:14;13129:16;2294:12771;13129:13;;;:16;:::i;:::-;;:22;2024:14:2;13105:47:89;336:42:2;13105:47:89;;;;2294:12771;;2024:14:2;13105:47:89;;2294:12771;;;;;;13105:47;;2294:12771;2867:4:48;;;2024:14:2;;;;2294:12771:89;;2867:4:48;2294:12771:89;;336:42:2;13105:47:89;;;;;;;;;;;2294:12771;13181:42;;;;;:::i;:::-;2024:14:2;2294:12771:89;13121:5;2024:14:2;;;2294:12771:89;13246:40;;;;;:::i;:::-;13293:38;;;;;;2294:12771;;;13293:38;;2024:14:2;13293:38:89;;12673:14;2294:12771;13293:38;;2867:4:48;;;;;;;;;;;;:::i;:::-;13293:38:89;;;;;;;;;;;;;2294:12771;2024:14:2;;2294:12771:89;13121:5;2024:14:2;;;2294:12771:89;13337:31;;;;;2294:12771;;;2867:4:48;2294:12771:89;;13337:31;;;;2024:14:2;13337:31:89;;;2294:12771;13337:31;;2024:14:2;13337:31:89;;;;;;;;;;;2294:12771;2024:14:2;;2294:12771:89;13121:5;2024:14:2;;;2294:12771:89;13391:13;12823:30;13391:13;;;2024:14:2;13406:13:89;;2024:14:2;13374:46:89;;;;;;2294:12771;;;;;13374:46;;;;;2024:14:2;13374:46:89;;2294:12771;13374:46;;2024:14:2;2867:4:48;;;2024:14:2;13374:46:89;;;;;;;;;;;2294:12771;;;;;13453:53;2294:12771;12673:14;13453:53;;;2294:12771;13453:53;;;2867:4:48;13453:53:89;;:::i;:::-;2294:12771;13581:17;:14;;:17;:::i;:::-;;2024:14:2;2294:12771:89;;13628:17;12673:14;13603:17;:14;;:17;:::i;13628:::-;;:22;;13563:100;336:42:2;13563:100:89;;;;2294:12771;;13563:100;2294:12771;;;13563:100;;;;;2024:14:2;13563:100:89;;2294:12771;13563:100;;;:::i;:::-;;;;336:42:2;13563:100:89;;;;;;;;;;;2294:12771;2024:14:2;;2294:12771:89;13121:5;2024:14:2;;;2294:12771:89;336:42:2;13715:53:89;;;;2294:12771;;2024:14:2;13715:53:89;;2024:14:2;2294:12771:89;13715:53;;2294:12771;;;2024:14:2;;;2294:12771:89;;;2024:14:2;;;2294:12771:89;;;2024:14:2;;;2294:12771:89;;;;;;2024:14:2;;;2294:12771:89;;;2024:14:2;2294:12771:89;;336:42:2;13715:53:89;;;;;;;;;;;2294:12771;;;13779:34;2294:12771;2867:4:48;2294:12771:89;;2024:14:2;;;;;2867:4:48;12673:14:89;2867:4:48;;2024:14:2;13391:13:89;2294:12771;2867:4:48;;;13391:13:89;2867:4:48;;;;:::i;:::-;13779:34:89;;;2294:12771;13121:5;2024:14:2;;;2294:12771:89;13820:33;;;;;;2294:12771;;;;;;13820:33;;;;;;;2024:14:2;13820:33:89;;2294:12771;13820:33;;;:::i;13715:53::-;;;;;:::i;:::-;2294:12771;;13715:53;;;;13563:100;;;;;:::i;:::-;2294:12771;;13563:100;;;;13374:46;;;;;:::i;:::-;2294:12771;;13374:46;;;;13337:31;;;;;:::i;:::-;2294:12771;;13337:31;;;;13293:38;;;;;:::i;:::-;2294:12771;;13293:38;;;;13105:47;;;;;:::i;:::-;2294:12771;;13105:47;;;;2294:12771;;;;;;;;;;;;3948:19:9;2294:12771:89;;;;:::i;:::-;;;;;;;:::i;:::-;;;;3948:19:9;2294:12771:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3018:16:9;2294:12771:89;;;;;;;3018:16:9;2294:12771:89;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6242:14;6266:1;2294:12771;6242:14;;;2294:12771;6242:25;336:42:2;6232:36:89;;;;2294:12771;;6232:36;2024:14:2;6232:36:89;;2294:12771;6232:36;;2294:12771;6232:36;;;;336:42:2;6232:36:89;;;;;;;;2294:12771;;;;;6309:22;;;;;;;;2294:12771;6309:22;;;;;;;;;;;;;;;;;;;6372:26;2294:12771;;;;6372:26;;:::i;:::-;6420:7;;;;:::i;:::-;6454;;;:::i;:::-;6486:40;2294:12771;6519:5;2024:14:2;;;2294:12771:89;6486:40;;:::i;:::-;6554:42;;;;:::i;:::-;6608:13;2294:12771;6627:13;;;6608;6649:3;6627:13;;2294:12771;;6623:24;;;;;6666:16;;:29;:16;;:::i;:::-;;:29;2024:14:2;2294:12771:89;6666:29;;2294:12771;6519:5;2024:14:2;;;2294:12771:89;336:42:2;6707:53:89;;;;2294:12771;;2024:14:2;6707:53:89;;2024:14:2;2294:12771:89;6707:53;;2294:12771;;;2024:14:2;;;2294:12771:89;;;2024:14:2;;;2294:12771:89;;;2024:14:2;;;2294:12771:89;;;;;;2024:14:2;;;2294:12771:89;;;2024:14:2;2294:12771:89;;336:42:2;6707:53:89;;;;;;;;;;;6662:1175;2294:12771;;2024:14:2;2294:12771:89;6775:22;2294:12771;;;2024:14:2;;;;2294:12771:89;2024:14:2;;;6775:22:89;6662:1175;2024:14:2;6608:13:89;;6707:53;;;;;:::i;:::-;2294:12771;;6707:53;;;;6662:1175;2294:12771;6830:16;:13;;;:16;:::i;:::-;;2024:14:2;2294:12771:89;336:42:2;6822:31:89;;;;2294:12771;;6822:31;2024:14:2;6822:31:89;;2294:12771;6822:31;;2294:12771;2024:14:2;6232:36:89;2024:14:2;;;6822:31:89;;;;;336:42:2;6822:31:89;;;;;;;;;;;6662:1175;6867:13;;:29;:16;:13;;;:16;:::i;:::-;;:29;2024:14:2;2294:12771:89;6867:29;;2294:12771;6918:16;:13;;;:16;:::i;:::-;;2024:14:2;2294:12771:89;6939:21;;;:::i;:::-;6910:51;336:42:2;6910:51:89;;;;;2294:12771;;;;;6910:51;;;;;2024:14:2;6910:51:89;;2294:12771;6910:51;;;:::i;:::-;;;;336:42:2;6910:51:89;;;;;;;;;;;6863:864;2024:14:2;;2294:12771:89;6519:5;2024:14:2;;;2294:12771:89;336:42:2;6973:53:89;;;;2294:12771;;2024:14:2;6973:53:89;;2024:14:2;2294:12771:89;6973:53;;2294:12771;;;2024:14:2;;;2294:12771:89;;;2024:14:2;;;2294:12771:89;;;2024:14:2;;;2294:12771:89;;;;;;2024:14:2;;;2294:12771:89;;;2024:14:2;2294:12771:89;;336:42:2;6973:53:89;;;;;;;;;;;6863:864;2294:12771;;7043:31;2294:12771;;;2024:14:2;;;7043:31:89;2294:12771;6519:5;2024:14:2;;;2294:12771:89;336:42:2;7161:53:89;;;;2294:12771;;2024:14:2;7161:53:89;;2024:14:2;2294:12771:89;7161:53;;2294:12771;;;2024:14:2;;;2294:12771:89;;;2024:14:2;;;2294:12771:89;;;2024:14:2;;;2294:12771:89;;;;;;2024:14:2;;;2294:12771:89;;;2024:14:2;2294:12771:89;;336:42:2;7161:53:89;;;;;;;;;;;6863:864;2294:12771;;7231:25;2294:12771;;;2024:14:2;;;7231:25:89;2294:12771;6519:5;2024:14:2;;;2294:12771:89;336:42:2;7268:53:89;;;;2294:12771;;2024:14:2;7268:53:89;;2024:14:2;2294:12771:89;7268:53;;2294:12771;;;2024:14:2;;;2294:12771:89;;;2024:14:2;;;2294:12771:89;;;2024:14:2;;;2294:12771:89;;;;;;2024:14:2;;;2294:12771:89;;;2024:14:2;2294:12771:89;;336:42:2;7268:53:89;;;;;;;;;;;6863:864;7364:13;;7338:47;2294:12771;7364:13;;2294:12771;;;2024:14:2;;;7338:47:89;2294:12771;6519:5;2024:14:2;;;2294:12771:89;336:42:2;7397:53:89;;;;2294:12771;;2024:14:2;7397:53:89;;2024:14:2;2294:12771:89;7397:53;;2294:12771;;;2024:14:2;;;2294:12771:89;;;2024:14:2;;;2294:12771:89;;;2024:14:2;;;2294:12771:89;;;;;;2024:14:2;;;2294:12771:89;;;2024:14:2;2294:12771:89;;336:42:2;7397:53:89;;;;;;;;;;;6863:864;7490:13;;7467:37;2294:12771;7490:13;;;2024:14:2;2294:12771:89;;2024:14:2;;;7467:37:89;2294:12771;6519:5;2024:14:2;;;2294:12771:89;336:42:2;7516:53:89;;;;2294:12771;;2024:14:2;7516:53:89;;2024:14:2;2294:12771:89;7516:53;;2294:12771;;;2024:14:2;;;2294:12771:89;;;2024:14:2;;;2294:12771:89;;;2024:14:2;;;2294:12771:89;;;;;;2024:14:2;;;2294:12771:89;;;2024:14:2;2294:12771:89;;336:42:2;7516:53:89;;;;;;;;;;;6863:864;7608:13;;7586:44;2024:14:2;2294:12771:89;7608:16;:13;;;:16;:::i;2024:14:2:-;7586:44:89;;;6863:864;2294:12771;6519:5;2024:14:2;;;2294:12771:89;336:42:2;7736:53:89;;;;2294:12771;;2024:14:2;7736:53:89;;2024:14:2;2294:12771:89;7736:53;;2294:12771;;;2024:14:2;;;2294:12771:89;;;2024:14:2;;;2294:12771:89;;;2024:14:2;;;2294:12771:89;;;;;;2024:14:2;;;2294:12771:89;;;2024:14:2;2294:12771:89;;336:42:2;7736:53:89;;;;;;;;;;;6863:864;2294:12771;;2024:14:2;2294:12771:89;7804:24;2294:12771;;;2024:14:2;;;;2294:12771:89;2024:14:2;;;7804:24:89;6662:1175;;7736:53;;;;;:::i;:::-;2294:12771;;7736:53;;;;7516;;;;;:::i;:::-;2294:12771;;7516:53;;;;7397;;;;;:::i;:::-;2294:12771;;7397:53;;;;7268;;;;;:::i;:::-;2294:12771;;7268:53;;;;7161;;;;;:::i;:::-;2294:12771;;7161:53;;;;6973;;;;;:::i;:::-;2294:12771;;6973:53;;;;6910:51;;;;;:::i;:::-;2294:12771;;6910:51;;;;6863:864;2294:12771;7673:16;:13;;;:16;:::i;:::-;;2024:14:2;2294:12771:89;;7694:16;:13;;;:16;:::i;:::-;;:21;;7659:57;336:42:2;7659:57:89;;;;;2294:12771;;;;;7659:57;;;;;2024:14:2;7659:57:89;;2294:12771;7659:57;;;:::i;:::-;;;;336:42:2;7659:57:89;;;;;;;;;;;6863:864;;;;;7659:57;;;;;:::i;:::-;2294:12771;;7659:57;;;;6822:31;;;;;:::i;:::-;2294:12771;;6822:31;;;;6623:24;;;;;2294:12771;6519:5;2024:14:2;;;2294:12771:89;336:42:2;7849:24:89;;;;2294:12771;;7849:24;2024:14:2;7849:24:89;;2294:12771;7849:24;;2294:12771;7849:24;;6232:36;7849:24;;336:42:2;7849:24:89;;;;;;;;;;;6603:1240;2024:14:2;;2294:12771:89;6519:5;2024:14:2;;;2294:12771:89;7879:25;;;;;2024:14:2;2294:12771:89;;;;;;;7879:25;;;;;;2024:14:2;7879:25:89;;2294:12771;;7879:25;;2024:14:2;6232:36:89;2024:14:2;;;;:::i;:::-;7879:25:89;;;;;;;;;;6603:1240;2024:14:2;;7911:35:89;2294:12771;6519:5;2024:14:2;;;2294:12771:89;7920:22;7911:35;:::i;:::-;7958:13;7999:3;7977:13;;2294:12771;;7973:24;;;;;8026:16;;:29;:16;;:::i;:::-;;:29;2024:14:2;2294:12771:89;8025:87;;;7999:3;8025:131;;;7999:3;8012:570;;7999:3;2024:14:2;;7958:13:89;;8012:570;8175:28;;8218:13;8259:3;8237:13;;2294:12771;;8233:24;;;;;8294:16;;8026:29;8294:16;;:::i;:::-;;:29;2024:14:2;2294:12771:89;8293:76;;;8259:3;8293:124;;;8259:3;8276:223;;8259:3;2024:14:2;;8218:13:89;;8276:223;8464:13;8444:42;2024:14:2;8464:13:89;2294:12771;8464:16;:13;;;:16;:::i;8444:42::-;8276:223;;;;;8293:124;8388:13;6666:29;8388:16;:13;;;:16;:::i;:::-;;:29;2024:14:2;2294:12771:89;8293:124;;:76;8327:13;2294:12771;8327:16;:13;;;:16;:::i;:::-;;2024:14:2;2294:12771:89;;8350:16;:13;;;:16;:::i;:::-;;2024:14:2;2294:12771:89;8327:42;8293:76;;8233:24;;;;8545:27;2024:14:2;8233:24:89;;2294:12771;8545:16;:13;;;:16;:::i;:27::-;8012:570;;;;8025:131;8127:13;6666:29;8127:16;:13;;;:16;:::i;:::-;;:29;2024:14:2;2294:12771:89;8025:131;;:87;8059:13;2294:12771;8059:16;:13;;;:16;:::i;:::-;;2024:14:2;2294:12771:89;8059:27;2294:12771;8090:16;:13;;;:16;:::i;:::-;;:22;2024:14:2;8059:53:89;;8025:87;;7879:25;;;;;:::i;:::-;2294:12771;;7879:25;;;;7849:24;;;;;:::i;:::-;2294:12771;;7849:24;;;;6232:36;;;;;:::i;:::-;;;;2294:12771;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;2294:12771:89;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2294:12771:89;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2294:12771:89;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;-1:-1:-1;2294:12771:89;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2024:14:2;2294:12771:89;;2024:14:2;;;;;;:::o;:::-;;2294:12771:89;2024:14:2;;;;;2294:12771:89;2024:14:2;;2294:12771:89;;9928:1;2024:14:2;;;;;;;:::o;:::-;2294:12771:89;;2024:14:2;;;;;;;;;;;;:::o;:::-;;;2294:12771:89;2024:14:2;;;2294:12771:89;;;2024:14:2;;;;;;;;:::i;:::-;;:::o;:::-;;;;-1:-1:-1;2024:14:2;;;:::i;:::-;2294:12771:89;;;;;;;:::i;:::-;2024:14:2;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;2294:12771:89;;;;;-1:-1:-1;2294:12771:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;;;-1:-1:-1;2294:12771:89;;;;;-1:-1:-1;2294:12771:89;;-1:-1:-1;2294:12771:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2294:12771:89;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::i;:::-;12709:1;2294:12771;;;;;;-1:-1:-1;2294:12771:89;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;-1:-1:-1;2294:12771:89;;-1:-1:-1;2294:12771:89;;;;;;;;;-1:-1:-1;2294:12771:89;;;;-1:-1:-1;2294:12771:89;;;;-1:-1:-1;2294:12771:89;;;;-1:-1:-1;2294:12771:89;;;;;;;;;;;;;2867:4:48;2294:12771:89;2867:4:48;2294:12771:89;2867:4:48;;2294:12771:89;2867:4:48;2294:12771:89;;;;;;;-1:-1:-1;2294:12771:89;;;;;;;;2867:4:48;;;:::o;:::-;;;;;2294:12771:89;2867:4:48;;2294:12771:89;;;2867:4:48;;;2024:14:2;2867:4:48;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;2763:::-;;;;2294:12771:89;2763:4:48;;2294:12771:89;2763:4:48;;;;;;2294:12771:89;;2763:4:48;;;2294:12771:89;2763:4:48;;;;;;;;;;2294:12771:89;;;;;;;;2763:4:48;;2294:12771:89;2763:4:48;;;;;;2294:12771:89;;2763:4:48;;;;;;;;;;;;;;;;;;;;;;;2024:14:2;2763:4:48;;;;;;;2024:14:2;2763:4:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;2024:14:2;2763:4:48;;;;;;;2024:14:2;2763:4:48;;;;;;;;;;;2294:12771:89;;;;;;;;;;2763:4:48;;;;;;;;;;;;:::o;:::-;;;2294:12771:89;;;;2763:4:48;2294:12771:89;;;;;;;;2763:4:48;;;;;;;;;;;;;;;;;;;;;;;2294:12771:89;2763:4:48;;2294:12771:89;;;2763:4:48;;;;;;;2024:14:2;2763:4:48;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;2024:14:2;2763:4:48;;;;2294:12771:89;;2763:4:48;;;2294:12771:89;2763:4:48;;;;2294:12771:89;;2763:4:48;;;2294:12771:89;2763:4:48;;;;2024:14:2;2294:12771:89;;2763:4:48;;;;;;;;;2294:12771:89;;;;;;;;;;;;;;;;-1:-1:-1;2294:12771:89;;-1:-1:-1;2294:12771:89;;-1:-1:-1;2294:12771:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2024:14:2;2294:12771:89;;;;;;;;2024:14:2;2294:12771:89;;2024:14:2;2294:12771:89;2024:14:2;;;;2294:12771:89;;;;;;;;2024:14:2;2294:12771:89;;2024:14:2;2294:12771:89;2024:14:2;2294:12771:89;2024:14:2;;2294:12771:89;;;;;;;;2024:14:2;2294:12771:89;;2024:14:2;2294:12771:89;2024:14:2;2294:12771:89;2024:14:2;;2294:12771:89;;;;;;;;2024:14:2;2294:12771:89;;2024:14:2;2294:12771:89;2024:14:2;2294:12771:89;2024:14:2;;2294:12771:89;;;;;;;;2024:14:2;2294:12771:89;;2024:14:2;2294:12771:89;2024:14:2;2294:12771:89;2024:14:2;;2294:12771:89;;;;;;;;2024:14:2;2294:12771:89;;2024:14:2;2294:12771:89;2024:14:2;2294:12771:89;2024:14:2;;2294:12771:89;;;;;;;;2024:14:2;2294:12771:89;;2024:14:2;2294:12771:89;2024:14:2;;;2294:12771:89;;;;;;;;;;;;;;;;;;;;2024:14:2;;;;2294:12771:89;;;2024:14:2;;2294:12771:89;2024:14:2;;2294:12771:89;;;;2024:14:2;;2294:12771:89;2024:14:2;;2294:12771:89;;;;2024:14:2;;2294:12771:89;2024:14:2;;2294:12771:89;;;;2024:14:2;;2294:12771:89;2024:14:2;;2294:12771:89;;;;2024:14:2;;2294:12771:89;2024:14:2;;2294:12771:89;;;;2024:14:2;;2294:12771:89;2024:14:2;;2294:12771:89;;;;2024:14:2;;2294:12771:89;;;;;;;;;;;;;;1243:204:4;1302:7;2294:12771:89;;;;;;;1325:14:4;:::o;1298:143::-;2294:12771:89;;;2024:14:2;1377:39:4;;2294:12771:89;1377:39:4;;;2294:12771:89;192:59:4;;;;2024:14:2;192:59:4;1377:39;;;2294:12771:89;1377:39:4;;;;;;;2294:12771:89;1377:39:4;;;1298:143;1377:53;;;1370:60;:::o;1377:39::-;;;192:59;1377:39;;192:59;1377:39;;;;;;192:59;1377:39;;;:::i;:::-;;;192:59;;;;;1377:39;;;;;;-1:-1:-1;1377:39:4;;;2294:12771:89;;2024:14:2;2294:12771:89;2024:14:2;;;;;2032:260:89;;2294:12771;;;;;;;;;;;;;;;;;-1:-1:-1;2294:12771:89;;;;;;;;;;;;;;;;-1:-1:-1;2294:12771:89;;;;;;-1:-1:-1;2294:12771:89;;;;;;;-1:-1:-1;2294:12771:89;;;;-1:-1:-1;2294:12771:89;;;;;;;;;-1:-1:-1;2106:31:89;2321:4:48;2294:12771:89;2205:14;;;2188:31;;2294:12771;;2240:14;;2321:4:48;2294:12771:89;;;2275:14;2321:4:48;2294:12771:89;;;2032:260::o;2628:824::-;-1:-1:-1;2737:13:89;-1:-1:-1;2024:14:2;2294:12771:89;3392:5;2024:14:2;;;2294:12771:89;2024:14:2;2294:12771:89;2732:674;2778:3;2756:13;;;;;;2294:12771;;2752:24;;;;;2831:16;;2294:12771;2831:16;;:::i;:::-;;2024:14:2;2294:12771:89;1798:249:98;2294:12771:89;;;1813:23:98;2024:14:2;1813:23:98;;;:53;;;1798:249;1812:80;;;;1798:249;1812:105;;;;1798:249;1812:142;;;;1798:249;1812:142;;;2294:12771:89;;;;;2015:21:98;;;2294:12771:89;;;2015:21:98;;;;;;;:::i;:::-;2294:12771:89;2005:32:98;;2294:12771:89;1798:249:98;;1812:142;;;;;;;;2294:12771:89;2791:16;:13;;;:16;:::i;:::-;;2294:12771;;;;2933:19:15;2917:25:89;2015:21:98;2890:16:89;:13;;;:16;:::i;:::-;;:22;2024:14:2;-1:-1:-1;2933:19:15;;:::i;:::-;-1:-1:-1;2294:12771:89;;;9786:54:15;2294:12771:89;;;;;;:::i;:::-;;;;;2024:14:2;9786:54:15;2015:21:98;9786:54:15;;;;;;:::i;:::-;2294:12771:89;9371:159:15;679:42;9371:159;;;2015:21:98;2859:16:89;:13;;;:16;:::i;:::-;;:22;2294:12771;2933:19:15;3015:13:89;2985:25;:16;:13;;;:16;:::i;2933:19:15:-;-1:-1:-1;2294:12771:89;;;9786:54:15;2294:12771:89;;;;;;:::i;9786:54:15:-;2294:12771:89;9371:159:15;679:42;9371:159;;;2985:25:89;2951:16;:13;;;:16;:::i;:::-;;:25;2294:12771;3043:29;:16;:13;;;:16;:::i;:::-;;:29;2024:14:2;2294:12771:89;3042:64;;;1798:249:98;3038:125:89;;1798:249:98;2294:12771:89;3361:16;3175:13;;3043:29;3175:16;:13;;;;:16;:::i;:::-;;:29;2024:14:2;2294:12771:89;;3175:63;;;1798:249:98;3171:172:89;;1798:249:98;3361:13:89;:16;:::i;:::-;;2024:14:2;2294:12771:89;3361:37;;336:42:2;3351:48:89;;;;2294:12771;;;;3351:48;2024:14:2;3351:48:89;;;;;2294:12771;-1:-1:-1;3351:48:89;9786:54:15;3351:48:89;336:42:2;3351:48:89;;;;;;;2024:14:2;3351:48:89;;;1798:249:98;2778:3:89;2024:14:2;2737:13:89;;;;;;3351:48;-1:-1:-1;3351:48:89;;;:::i;:::-;;;;;2294:12771;;2024:14:2;-1:-1:-1;2024:14:2;;;;;3171:172:89;2933:19:15;3015:13:89;3311:7;2985:25;3284:16;:13;;;:16;:::i;:::-;;:25;2024:14:2;2933:19:15;:::i;:::-;-1:-1:-1;2294:12771:89;;;9786:54:15;2294:12771:89;;;;;;:::i;9786:54:15:-;2294:12771:89;9371:159:15;679:42;9371:159;;;2985:25:89;3250:16;:13;;;:16;:::i;:::-;;:25;2294:12771;3171:172;;3175:63;3208:13;2985:25;3208:16;:13;;;:16;:::i;:::-;;:25;2024:14:2;3208:30:89;;3175:63;;3038:125;3132:13;2294:12771;3361:16;3132:13;3118:36;3132:13;;2015:21:98;3132:16:89;:13;;;:16;:::i;3118:36::-;3038:125;;;;;;;;3042:64;3077:13;:29;:16;:13;;;:16;:::i;:::-;;:29;2024:14:2;2294:12771:89;3042:64;;1812:142:98;1929:21;;;:25;;1812:142;;:105;1896:21;1748:42;1896:21;;1812:105;;:80;1871:21;679:42:15;1871:21:98;;1812:80;;1813:53;1840:26;1862:4;1840:26;;;1813:53;;2752:24:89;;;;;;;336:42:2;3412:35:89;;;;2294:12771;;2024:14:2;3412:35:89;;2294:12771;;;;;3351:48;3412:35;;2294:12771;2867:4:48;;;2024:14:2;;;;-1:-1:-1;2294:12771:89;2867:4:48;2294:12771:89;-1:-1:-1;336:42:2;3412:35:89;;;;;;;;;;2628:824;:::o;3412:35::-;-1:-1:-1;3412:35:89;;;:::i;:::-;2294:12771;2024:14:2;-1:-1:-1;2024:14:2;;;;;398:649:98;2933:19:15;2294:12771:89;-1:-1:-1;2294:12771:89;;;;2933:19:15;:::i;:::-;2294:12771:89;;;-1:-1:-1;2294:12771:89;;;;;;;:::i;:::-;;2024:14:2;;2294:12771:89;;;;;;;9786:54:15;;2294:12771:89;;9786:54:15;;;;;;;;;;2294:12771:89;;;;;;:::i;9786:54:15:-;2294:12771:89;9371:159:15;679:42;9371:159;;;2294:12771:89;2321:4:48;;;580:42:98;576:467;;398:649;;:::o;576:467::-;655:14;;;2933:19:15;2294:12771:89;-1:-1:-1;2024:14:2;;2933:19:15;:::i;:::-;2294:12771:89;-1:-1:-1;2294:12771:89;;;;;;;:::i;:::-;;2024:14:2;;2294:12771:89;;;;;;;9786:54:15;;2294:12771:89;;9786:54:15;;;;;;;;;;2294:12771:89;;;;;;:::i;:::-;;;;;2024:14:2;9786:54:15;;;;;;;;:::i;:::-;2294:12771:89;9371:159:15;679:42;9371:159;;;2294:12771:89;723:14:98;;;2933:19:15;2294:12771:89;-1:-1:-1;2024:14:2;;2933:19:15;:::i;:::-;2294:12771:89;-1:-1:-1;2294:12771:89;;;;;;;:::i;:::-;;2024:14:2;;2294:12771:89;;;;;;;9786:54:15;;2294:12771:89;;9786:54:15;;;;;;;;;;2294:12771:89;;;;;;:::i;9786:54:15:-;2294:12771:89;9371:159:15;679:42;9371:159;;;2294:12771:89;-1:-1:-1;815:3:98;792:14;;;;;;2294:12771:89;;;788:25:98;;;;;883:17;;:33;830:17;883;2933:19:15;2294:12771:89;883:17:98;;;2024:14:2;883:17:98;;:::i;2933:19:15:-;2294:12771:89;-1:-1:-1;2294:12771:89;;;9786:54:15;2294:12771:89;;;;;;:::i;:::-;;;;;2024:14:2;9786:54:15;;;;;;;;:::i;:::-;2294:12771:89;9371:159:15;679:42;9371:159;;;830:14:98;:17;:::i;:::-;;:33;2294:12771:89;2024:14:2;773:13:98;;;;788:25;;;;;;398:649::o;9842:280:48:-;9972:18;;;2024:14:2;9842:280:48;;10027:18;;2294:12771:89;1206:48:48;;-1:-1:-1;1206:48:48;;2294:12771:89;;;1077:202:48;9972:18;1077:202;;2024:14:2;539:66:48;2024:14:2;;709:66:48;2294:12771:89;868:66:48;;2024:14:2;868:66:48;;;;2024:14:2;868:66:48;;;2024:14:2;2294:12771:89;868:66:48;;;2294:12771:89;868:66:48;1077:202;;;;;;:::i;:::-;2294:12771:89;1060:225:48;;10027:18;;:::i;:::-;2294:12771:89;;10068:48:48;9972:18;10068:48;;2294:12771:89;;;;;;;2024:14:2;2294:12771:89;;;2024:14:2;2294:12771:89;10068:48:48;;;;;;:::i;:::-;2294:12771:89;10058:59:48;;9842:280;:::o;1206:48::-;1240:13;1206:48;;;2294:12771:89;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3035:310:97:-;;-1:-1:-1;2294:12771:89;3205:20:97;2024:14:2;3035:310:97;2294:12771:89;;3205:20:97;;;;;;;2294:12771:89;;;;;;:::i;3205:20:97:-;2294:12771:89;;3192:34:97;;;;2024:14:2;3192:34:97;;3205:20;3192:34;;;2024:14:2;;;;;;:::i;:::-;3192:34:97;;2294:12771:89;3192:34:97;;;;;;;-1:-1:-1;3192:34:97;;;3035:310;2294:12771:89;;;;;;;;;3205:20:97;2294:12771:89;;;;;;;;3205:20:97;2294:12771:89;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;2024:14:2;798:35:97;;3205:20;3192:34;798:35;;2294:12771:89;;2024:14:2;2294:12771:89;;;;;;;;3205:20:97;798:35;;;2294:12771:89;798:35:97;;;;;;;-1:-1:-1;798:35:97;;;3035:310;2294:12771:89;;;866:35:97;2024:14:2;866:35:97;;3205:20;3192:34;866:35;;2294:12771:89;;2024:14:2;2294:12771:89;;;;;;;;3205:20:97;866:35;798;866;2294:12771:89;866:35:97;;;;;;;-1:-1:-1;866:35:97;;;3035:310;916:18;;;;2294:12771:89;;285:44:97;462:50;1037:32;;1033:109;;3035:310;232:1;;;;;;;1278:17;232:1;;644:49;;285:44;644:49;1278:17;:::i;:::-;2024:14:2;232:1:97;2024:14:2;;;;;;;1326:27:97;1337:15;;;;:::i;:::-;1326:27;;:::i;:::-;2294:12771:89;;1383:39:97;2024:14:2;1383:39:97;;3205:20;3192:34;1383:39;;232:1;;2024:14:2;232:1:97;;2294:12771:89;232:1:97;2294:12771:89;;;232:1:97;-1:-1:-1;1383:39:97;798:35;1383:39;2294:12771:89;1383:39:97;;;;;;;-1:-1:-1;1383:39:97;;;3035:310;2294:12771:89;;;2024:14:2;1451:39:97;;3205:20;3192:34;1451:39;;232:1;;2024:14:2;232:1:97;;2294:12771:89;232:1:97;2294:12771:89;;;232:1:97;-1:-1:-1;1451:39:97;798:35;1451:39;2294:12771:89;1451:39:97;;;;;;;-1:-1:-1;1451:39:97;;;3035:310;2294:12771:89;;;1526:24:97;2024:14:2;1526:24:97;;3192:34;1526:24;;2024:14:2;-1:-1:-1;1526:24:97;2024:14:2;1526:24:97;2294:12771:89;1526:24:97;;;;;;2294:12771:89;1526:24:97;-1:-1:-1;1526:24:97;2294:12771:89;1526:24:97;;;;;3035:310;2294:12771:89;232:1:97;2294:12771:89;3205:20:97;2294:12771:89;;;;;;;;;;;;;232:1:97;;;;;;2294:12771:89;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;232:1:97;3205:20;232:1;;;;;;:::i;:::-;2294:12771:89;;3266:48:97;;;;;2024:14:2;3266:48:97;;2294:12771:89;3192:34:97;3266:48;;2294:12771:89;798:35:97;2294:12771:89;;;;:::i;:::-;;;;;;;;2024:14:2;2294:12771:89;;;;;;;3205:20:97;2294:12771:89;;;;;;;;;;;:::i;:::-;3266:48:97;;;2294:12771:89;3266:48:97;;;;;;;-1:-1:-1;3266:48:97;;;3320:20;3035:310::o;3266:48::-;;;;;;;;;;:::i;:::-;;;2294:12771:89;3205:20:97;2294:12771:89;;;;;;;;;;;;;;;;;;;;;;;;;;;3205:20:97;2294:12771:89;;;;;:::i;1526:24:97:-;2294:12771:89;1526:24:97;;;3205:20;1526:24;232:1;1526:24;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;1451:39;;;;;;-1:-1:-1;1451:39:97;;;;;;:::i;:::-;;;;1383;;;;;;;-1:-1:-1;1383:39:97;;;;;;:::i;:::-;;;;;1033:109;2294:12771:89;;;3205:20:97;1107:26;;1124:8;;-1:-1:-1;2294:12771:89;;1107:26:97;3205:20;1124:8;;2294:12771:89;;-1:-1:-1;2294:12771:89;;;;1107:26:97;;3205:20;1107:26;;;;;;:::i;:::-;2294:12771:89;1097:37:97;;1033:109;;2294:12771:89;798:35:97;2294:12771:89;;;;;3205:20:97;3192:34;2294:12771:89;;;;2024:14:2;2294:12771:89;;;;;;;;;866:35:97;;;3205:20;866:35;;3205:20;866:35;;;;;;2294:12771:89;866:35:97;;;:::i;:::-;;;2294:12771:89;;;;;;866:35:97;;;;;;;-1:-1:-1;866:35:97;;798;;3205:20;798:35;;3205:20;798:35;;;;;;2294:12771:89;798:35:97;;;:::i;:::-;;;2294:12771:89;;;;;;798:35:97;;;;;;-1:-1:-1;798:35:97;;3192:34;;;;;;;-1:-1:-1;3192:34:97;;;;;;:::i;:::-;;;;;2270:110:4;2294:12771:89;2349:24:4;2294:12771:89;2349:24:4;;;;2294:12771:89;;2349:24:4;2024:14:2;2349:24:4;;;;;2024:14:2;2867:4:48;;;;2024:14:2;2349:24:4;;;;2294:12771:89;2349:24:4;;;;;;;;2270:110;;:::o;2349:24::-;;;;;:::i;:::-;2270:110;:::o;:::-;;2294:12771:89;2349:24:4;;;;2294:12771:89;;2349:24:4;2024:14:2;2349:24:4;;;;;2024:14:2;2867:4:48;;;2024:14:2;-1:-1:-1;2349:24:4;;;2294:12771:89;2349:24:4;;;;;;;;2270:110;:::o;8278:1282:48:-;8416:22;;;;2294:12771:89;;8399:40:48;;;;;2294:12771:89;8399:40:48;2294:12771:89;;;;;;;;;;;;;8399:40:48;;;;;;;;;;;;;:::i;:::-;2294:12771:89;8389:51:48;;2294:12771:89;;;;;8451:34:48;;8447:1109;2294:12771:89;;;8525:14:48;;2294:12771:89;8525:14:48;;;2294:12771:89;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;:::i;:::-;;8399:40:48;;2294:12771:89;;;;;;;;8164:3:48;2294:12771:89;;8146:16:48;;;;;8202:8;;2294:12771:89;8202:8:48;;;:::i;:::-;;2294:12771:89;2024:14:2;;2294:12771:89;7708:7:48;8399:40;7708:7;;2024:14:2;7727:6:48;2294:12771:89;7727:6:48;;;8399:40;2294:12771:89;;;;7717:17:48;7736:10;;;;2024:14:2;7748::48;;;2024::2;2294:12771:89;;7764:14:48;7780:17;7764:14;;;2024::2;2294:12771:89;;7780:17:48;;2024:14:2;2294:12771:89;;;7667:138:48;8399:40;7667:138;;2024:14:2;1478:66:48;2024:14:2;;2294:12771:89;1478:66:48;;2294:12771:89;7736:10:48;1478:66;;2024:14:2;7748::48;1478:66;;2024:14:2;7764::48;1478:66;;2024:14:2;7780:17:48;1478:66;;2294:12771:89;1478:66:48;;;2294:12771:89;8416:22:48;1478:66;;2024:14:2;8416:22:48;7667:138;;;;;;:::i;:::-;2294:12771:89;7650:161:48;;8177:34;;;;:::i;:::-;2294:12771:89;2024:14:2;8131:13:48;;8146:16;;;;;;;2294:12771:89;;8240:28:48;;8399:40;8240:28;;;;2294:12771:89;;;;;;;;;;;;8240:28:48;;;;;;8399:40;8240:28;;;;;;:::i;:::-;2294:12771:89;8230:39:48;;8750:14;7748;7736:10;8750:14;;2024::2;8766::48;;2024::2;2294:12771:89;;8712:82:48;8399:40;8712:82;;2024:14:2;1799:66:48;2024:14:2;;2294:12771:89;1799:66:48;;2024:14:2;7736:10:48;1799:66;;2024:14:2;7748::48;1799:66;;2024:14:2;7764::48;1799:66;;2024:14:2;7764::48;8712:82;;;7780:17;8712:82;;:::i;2294:12771:89:-;;;2024:14:2;;8399:40:48;2294:12771:89;;;;;;-1:-1:-1;2294:12771:89;;;;;;;;8447:1109:48;2294:12771:89;8812:29:48;;2294:12771:89;;8998:16:48;;;;8399:40;2294:12771:89;;;;8988:27:48;2294:12771:89;;;8959:70:48;8399:40;8959:70;;2024:14:2;1979:66:48;2024:14:2;;2294:12771:89;1979:66:48;;2024:14:2;1979:66:48;;;2024:14:2;1979:66:48;8959:70;;;;;;:::i;8808:748::-;2867:4;9047:35;;2867:4;;9216:18;;;1979:66;2294:12771:89;;;9181:67:48;8399:40;9181:67;;2024:14:2;2174:66:48;2024:14:2;;2294:12771:89;1979:66:48;;2024:14:2;1979:66:48;;;2024:14:2;1979:66:48;9181:67;;;;;;:::i;9043:513::-;2556:4;9266:28;;2556:4;;9443:15;;;1979:66;2294:12771:89;;;9414:58:48;8399:40;9414:58;;2024:14:2;1979:66:48;2024:14:2;;2294:12771:89;1979:66:48;;2024:14:2;1979:66:48;;;2024:14:2;1979:66:48;9414:58;;;;;;:::i;9262:294::-;9523:26;2294:12771:89;9523:26:48;;2763:4;2482;2294:12771:89;9523:26:48;2294:12771:89;;;;;;;8399:40:48;2294:12771:89;;;;;;-1:-1:-1;2294:12771:89;;;;;;;;232:1:97;;;;;;;;;;:::o;:::-;;;;;;;:::o;:::-;;;;;;;;;;1546:1263:15;2294:12771:89;1664:10:15;;;;2294:12771:89;;1970:8:15;;;;;;:20;;;1546:1263;1966:34;;2026:9;;;;:::i;:::-;2024:14:2;2038:1:15;2024:14:2;;;;;;;2234:1:15;2229:6;;;:18;;;1546:1263;2225:38;;232:1:97;2277:20:15;;;:46;;;1546:1263;2273:82;;2455:7;;;;;;2493;;;;;2528:11;2493:7;;:::i;:::-;2528:11;:::i;:::-;2557:8;;;2553:24;;2600:9;;;;:::i;:::-;1042:78;232:1:97;;;;;;;2451:352:15;1546:1263::o;2553:24::-;2567:10;;;:::o;2451:352::-;2630:173;;;;;;;;2451:352;;;;;1546:1263::o;2630:173::-;2672:7;;;;;;2707:11;2672:7;;;:::i;2707:11::-;2736:8;;;2732:24;;2779:9;;;;:::i;:::-;2038:1;2024:14:2;;;;;;;2630:173:15;;;;;;;2273:82;232:1:97;;;;2332:23:15;232:1:97;;;;2332:23:15;;:::i;2277:46::-;232:1:97;;;2301:22:15;;2277:46;;2225:38;2256:7;;;;;;;;;:::i;2229:18::-;2239:8;;;;2229:18;;1966:34;1992:8;;;;;;:::o;1970:20::-;1982:8;;;;;1970:20;;2294:12771:89;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"methodIdentifiers":{"IS_TEST()":"fa7626d4","calls()":"305f72b7","excludeArtifacts()":"b5508aa9","excludeContracts()":"e20c9f71","excludeSelectors()":"b0464fdc","excludeSenders()":"1ed7831c","failed()":"ba414fa6","targetArtifactSelectors()":"66d9a9a0","targetArtifacts()":"85226c81","targetContracts()":"3f7286f4","targetInterfaces()":"2ade3880","targetSelectors()":"916a17c6","targetSenders()":"3e5e3c23","test_abort_on_error((address,uint256,bytes,uint256,bool,bool,uint256),bytes)":"2cf8dd4d","test_error_flag_behavior((address,uint256,bytes,uint256,bool,bool,uint256),(address,uint256,bytes,uint256,bool,bool,uint256),bytes)":"d7332e28","test_execute(bytes32,(bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint160,uint56),bytes)":"ba2bd2ee","test_invalid_signature((bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint160,uint56),bytes,bytes)":"c5e9cca0","test_not_enough_gas((address,uint256,bytes,uint256,bool,bool,uint256),uint256,bytes)":"aaf796f5","test_revert_on_error((address,uint256,bytes,uint256,bool,bool,uint256),bytes)":"648a8e6a","test_self_execute((bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint160,uint56))":"173c6f3d"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"}],\"name\":\"InvalidKind\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_returnData\",\"type\":\"bytes\"}],\"name\":\"CallAborted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_returnData\",\"type\":\"bytes\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"CallSkipped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"CallSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"Data\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"Index\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_numCalls\",\"type\":\"uint256\"}],\"name\":\"NumCalls\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"}],\"name\":\"OpHash\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_space\",\"type\":\"uint256\"}],\"name\":\"Space\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"IS_TEST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"calls\",\"outputs\":[{\"internalType\":\"contract CallsImp\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"excludedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifactSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"artifact\",\"type\":\"string\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzArtifactSelector[]\",\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"targetedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetInterfaces\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"artifacts\",\"type\":\"string[]\"}],\"internalType\":\"struct StdInvariant.FuzzInterface[]\",\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call\",\"name\":\"call\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"test_abort_on_error\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call\",\"name\":\"call1\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call\",\"name\":\"call2\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"test_error_flag_behavior\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint160\",\"name\":\"space\",\"type\":\"uint160\"},{\"internalType\":\"uint56\",\"name\":\"nonce\",\"type\":\"uint56\"}],\"internalType\":\"struct CallsPayload\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"test_execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint160\",\"name\":\"space\",\"type\":\"uint160\"},{\"internalType\":\"uint56\",\"name\":\"nonce\",\"type\":\"uint56\"}],\"internalType\":\"struct CallsPayload\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_wrongSignature\",\"type\":\"bytes\"}],\"name\":\"test_invalid_signature\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call\",\"name\":\"call\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"txGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"test_not_enough_gas\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call\",\"name\":\"call\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"test_revert_on_error\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint160\",\"name\":\"space\",\"type\":\"uint160\"},{\"internalType\":\"uint56\",\"name\":\"nonce\",\"type\":\"uint56\"}],\"internalType\":\"struct CallsPayload\",\"name\":\"_payload\",\"type\":\"tuple\"}],\"name\":\"test_self_execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"InvalidKind(uint8)\":[{\"notice\":\"Error thrown when the kind is invalid\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/modules/Calls.t.sol\":\"CallsTest\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/modules/Calls.sol\":{\"keccak256\":\"0xcd0d38d0fd248e4443032dede2b8892ea0ca7e55538cd54082830f6b98d8edb1\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://617bb6d0724b18f3d77347cc454a57c1c916a0818a592552bd7fa226aa41a306\",\"dweb:/ipfs/Qmeet85Ux6cKq9JmC25JnTzFnRrgDpkyRik2svZLWt4fov\"]},\"src/modules/Nonce.sol\":{\"keccak256\":\"0x56fbf6dc9b34ab60ae8a32ffb6f583c003bb8f4a5223ce704e982400fa403fab\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://492f53628633b862702cf8f9b726067a722c94028133a8a4c4fcf3d0e73ad803\",\"dweb:/ipfs/QmTHNy4XbH47YZaqKDpknb5aApjRH9HVAREHN7N5vEFWEV\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/Storage.sol\":{\"keccak256\":\"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da\",\"dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn\"]},\"src/modules/auth/BaseAuth.sol\":{\"keccak256\":\"0xbf2e40def03fcb5f4a5129b2f5803e21951325b92e00126cbe1427b7c25cfefd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://b560905fcc4b957d27c2abed78a1e82529c89fa472e91b3d108fbfd91aa7c3f7\",\"dweb:/ipfs/QmRjLLtTWE6dFX2kBQCgLz7ossfMxhAFgDC8Jx9XuGL6Wy\"]},\"src/modules/auth/BaseSig.sol\":{\"keccak256\":\"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8\",\"dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3\"]},\"src/modules/auth/SelfAuth.sol\":{\"keccak256\":\"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42\",\"dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W\"]},\"src/modules/interfaces/IAuth.sol\":{\"keccak256\":\"0xf6fa30af2ec91d5fbeac17c9b1f2aa73b7883c9ac98745605007e57666394b91\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://6e90a87978519462f9612f4a17e38fddc1c7bcf700ff834a1de7dce326f30353\",\"dweb:/ipfs/QmXmWAsRRK6t4jPs4VcXrouyokxdALM28D3odX7ub48WEp\"]},\"src/modules/interfaces/ICheckpointer.sol\":{\"keccak256\":\"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1\",\"dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t\"]},\"src/modules/interfaces/IDelegatedExtension.sol\":{\"keccak256\":\"0xa2ae897e90fd70dd4a9e172bc04d019ba9c512e72c2df65fcb6daf87dd5ceb90\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://cdf4b7c3dfb0aef6c9dbe8b2a0542018dc756ef2252d7101bcb3186192da0a11\",\"dweb:/ipfs/QmPHCVu1DJ7fBrPBYA5y3hoF3a3XFEBwYCZ1ErGaxPhcYL\"]},\"src/modules/interfaces/IERC1271.sol\":{\"keccak256\":\"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b\",\"dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF\"]},\"src/modules/interfaces/IPartialAuth.sol\":{\"keccak256\":\"0x0d1aa021615d8e90696e71a9468331457a1babfa2ffe169654b7456e5bcb7a73\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://bbacd149a6358ab0d4b9c588d2e3a55fc71ed4723269150d7b91ca70092f6519\",\"dweb:/ipfs/QmUSwtrYCrRcRFsy5rCzdMPrw1FCU7ZoeXdsW6kK9yc8FK\"]},\"src/modules/interfaces/ISapient.sol\":{\"keccak256\":\"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489\",\"dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"src/utils/LibOptim.sol\":{\"keccak256\":\"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81\",\"dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x\"]},\"test/modules/Calls.t.sol\":{\"keccak256\":\"0xcfab8da4dd95a1b60092a312c97f0c395db5f454ab1c0c6410dea4d1078fc7ad\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e816c49b42e85c1fd80e62ea06a646b4ffe648ae061125303bfdbf4f4e7f79fe\",\"dweb:/ipfs/Qmbjj8coE44jpJd6cE1hq35JciEu9cq1hgxAgxYHBWXDXV\"]},\"test/utils/PrimitivesRPC.sol\":{\"keccak256\":\"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe\",\"dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv\"]},\"test/utils/TestUtils.sol\":{\"keccak256\":\"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad\",\"dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint8","name":"kind","type":"uint8"}],"type":"error","name":"InvalidKind"},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_index","type":"uint256","indexed":false},{"internalType":"bytes","name":"_returnData","type":"bytes","indexed":false}],"type":"event","name":"CallAborted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_index","type":"uint256","indexed":false},{"internalType":"bytes","name":"_returnData","type":"bytes","indexed":false}],"type":"event","name":"CallFailed","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_index","type":"uint256","indexed":false}],"type":"event","name":"CallSkipped","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_index","type":"uint256","indexed":false}],"type":"event","name":"CallSucceeded","anonymous":false},{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes","indexed":false}],"type":"event","name":"Data","anonymous":false},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256","indexed":false}],"type":"event","name":"Index","anonymous":false},{"inputs":[{"internalType":"uint256","name":"_numCalls","type":"uint256","indexed":false}],"type":"event","name":"NumCalls","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false}],"type":"event","name":"OpHash","anonymous":false},{"inputs":[{"internalType":"uint256","name":"_space","type":"uint256","indexed":false}],"type":"event","name":"Space","anonymous":false},{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log","anonymous":false},{"inputs":[{"internalType":"address","name":"","type":"address","indexed":false}],"type":"event","name":"log_address","anonymous":false},{"inputs":[{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"log_bytes","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32","indexed":false}],"type":"event","name":"log_bytes32","anonymous":false},{"inputs":[{"internalType":"int256","name":"","type":"int256","indexed":false}],"type":"event","name":"log_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address","name":"val","type":"address","indexed":false}],"type":"event","name":"log_named_address","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes","name":"val","type":"bytes","indexed":false}],"type":"event","name":"log_named_bytes","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes32","name":"val","type":"bytes32","indexed":false}],"type":"event","name":"log_named_bytes32","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false}],"type":"event","name":"log_named_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"string","name":"val","type":"string","indexed":false}],"type":"event","name":"log_named_string","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false}],"type":"event","name":"log_named_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log_string","anonymous":false},{"inputs":[{"internalType":"uint256","name":"","type":"uint256","indexed":false}],"type":"event","name":"log_uint","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"logs","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"IS_TEST","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"calls","outputs":[{"internalType":"contract CallsImp","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeArtifacts","outputs":[{"internalType":"string[]","name":"excludedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeContracts","outputs":[{"internalType":"address[]","name":"excludedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"excludedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSenders","outputs":[{"internalType":"address[]","name":"excludedSenders_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"failed","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifactSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzArtifactSelector[]","name":"targetedArtifactSelectors_","type":"tuple[]","components":[{"internalType":"string","name":"artifact","type":"string"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifacts","outputs":[{"internalType":"string[]","name":"targetedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetContracts","outputs":[{"internalType":"address[]","name":"targetedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetInterfaces","outputs":[{"internalType":"struct StdInvariant.FuzzInterface[]","name":"targetedInterfaces_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"string[]","name":"artifacts","type":"string[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"targetedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSenders","outputs":[{"internalType":"address[]","name":"targetedSenders_","type":"address[]"}]},{"inputs":[{"internalType":"struct Payload.Call","name":"call","type":"tuple","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"test_abort_on_error"},{"inputs":[{"internalType":"struct Payload.Call","name":"call1","type":"tuple","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"struct Payload.Call","name":"call2","type":"tuple","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"test_error_flag_behavior"},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32"},{"internalType":"struct CallsPayload","name":"_payload","type":"tuple","components":[{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint160","name":"space","type":"uint160"},{"internalType":"uint56","name":"nonce","type":"uint56"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"test_execute"},{"inputs":[{"internalType":"struct CallsPayload","name":"_payload","type":"tuple","components":[{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint160","name":"space","type":"uint160"},{"internalType":"uint56","name":"nonce","type":"uint56"}]},{"internalType":"bytes","name":"_signature","type":"bytes"},{"internalType":"bytes","name":"_wrongSignature","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"test_invalid_signature"},{"inputs":[{"internalType":"struct Payload.Call","name":"call","type":"tuple","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"txGasLimit","type":"uint256"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"test_not_enough_gas"},{"inputs":[{"internalType":"struct Payload.Call","name":"call","type":"tuple","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"test_revert_on_error"},{"inputs":[{"internalType":"struct CallsPayload","name":"_payload","type":"tuple","components":[{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint160","name":"space","type":"uint160"},{"internalType":"uint56","name":"nonce","type":"uint56"}]}],"stateMutability":"nonpayable","type":"function","name":"test_self_execute"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/modules/Calls.t.sol":"CallsTest"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/modules/Calls.sol":{"keccak256":"0xcd0d38d0fd248e4443032dede2b8892ea0ca7e55538cd54082830f6b98d8edb1","urls":["bzz-raw://617bb6d0724b18f3d77347cc454a57c1c916a0818a592552bd7fa226aa41a306","dweb:/ipfs/Qmeet85Ux6cKq9JmC25JnTzFnRrgDpkyRik2svZLWt4fov"],"license":"Apache-2.0"},"src/modules/Nonce.sol":{"keccak256":"0x56fbf6dc9b34ab60ae8a32ffb6f583c003bb8f4a5223ce704e982400fa403fab","urls":["bzz-raw://492f53628633b862702cf8f9b726067a722c94028133a8a4c4fcf3d0e73ad803","dweb:/ipfs/QmTHNy4XbH47YZaqKDpknb5aApjRH9HVAREHN7N5vEFWEV"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/Storage.sol":{"keccak256":"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f","urls":["bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da","dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn"],"license":"Apache-2.0"},"src/modules/auth/BaseAuth.sol":{"keccak256":"0xbf2e40def03fcb5f4a5129b2f5803e21951325b92e00126cbe1427b7c25cfefd","urls":["bzz-raw://b560905fcc4b957d27c2abed78a1e82529c89fa472e91b3d108fbfd91aa7c3f7","dweb:/ipfs/QmRjLLtTWE6dFX2kBQCgLz7ossfMxhAFgDC8Jx9XuGL6Wy"],"license":"Apache-2.0"},"src/modules/auth/BaseSig.sol":{"keccak256":"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa","urls":["bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8","dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3"],"license":"Apache-2.0"},"src/modules/auth/SelfAuth.sol":{"keccak256":"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c","urls":["bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42","dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W"],"license":"Apache-2.0"},"src/modules/interfaces/IAuth.sol":{"keccak256":"0xf6fa30af2ec91d5fbeac17c9b1f2aa73b7883c9ac98745605007e57666394b91","urls":["bzz-raw://6e90a87978519462f9612f4a17e38fddc1c7bcf700ff834a1de7dce326f30353","dweb:/ipfs/QmXmWAsRRK6t4jPs4VcXrouyokxdALM28D3odX7ub48WEp"],"license":"Apache-2.0"},"src/modules/interfaces/ICheckpointer.sol":{"keccak256":"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513","urls":["bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1","dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t"],"license":"Apache-2.0"},"src/modules/interfaces/IDelegatedExtension.sol":{"keccak256":"0xa2ae897e90fd70dd4a9e172bc04d019ba9c512e72c2df65fcb6daf87dd5ceb90","urls":["bzz-raw://cdf4b7c3dfb0aef6c9dbe8b2a0542018dc756ef2252d7101bcb3186192da0a11","dweb:/ipfs/QmPHCVu1DJ7fBrPBYA5y3hoF3a3XFEBwYCZ1ErGaxPhcYL"],"license":"Apache-2.0"},"src/modules/interfaces/IERC1271.sol":{"keccak256":"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9","urls":["bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b","dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF"],"license":"Apache-2.0"},"src/modules/interfaces/IPartialAuth.sol":{"keccak256":"0x0d1aa021615d8e90696e71a9468331457a1babfa2ffe169654b7456e5bcb7a73","urls":["bzz-raw://bbacd149a6358ab0d4b9c588d2e3a55fc71ed4723269150d7b91ca70092f6519","dweb:/ipfs/QmUSwtrYCrRcRFsy5rCzdMPrw1FCU7ZoeXdsW6kK9yc8FK"],"license":"Apache-2.0"},"src/modules/interfaces/ISapient.sol":{"keccak256":"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359","urls":["bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489","dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"src/utils/LibOptim.sol":{"keccak256":"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde","urls":["bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81","dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x"],"license":"Apache-2.0"},"test/modules/Calls.t.sol":{"keccak256":"0xcfab8da4dd95a1b60092a312c97f0c395db5f454ab1c0c6410dea4d1078fc7ad","urls":["bzz-raw://e816c49b42e85c1fd80e62ea06a646b4ffe648ae061125303bfdbf4f4e7f79fe","dweb:/ipfs/Qmbjj8coE44jpJd6cE1hq35JciEu9cq1hgxAgxYHBWXDXV"],"license":"Apache-2.0"},"test/utils/PrimitivesRPC.sol":{"keccak256":"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe","urls":["bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe","dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv"],"license":"Apache-2.0"},"test/utils/TestUtils.sol":{"keccak256":"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79","urls":["bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad","dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa"],"license":"Apache-2.0"}},"version":1},"id":89} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Calls.t.sol/MockDelegatecall.json b/contracts/artifacts/wallet-contracts-v3/Calls.t.sol/MockDelegatecall.json new file mode 100644 index 00000000..cd3ca316 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Calls.t.sol/MockDelegatecall.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"handleSequenceDelegateCall","inputs":[{"name":"_opHash","type":"bytes32","internalType":"bytes32"},{"name":"_startingGas","type":"uint256","internalType":"uint256"},{"name":"_index","type":"uint256","internalType":"uint256"},{"name":"_numCalls","type":"uint256","internalType":"uint256"},{"name":"_space","type":"uint256","internalType":"uint256"},{"name":"_data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"Data","inputs":[{"name":"_data","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"Index","inputs":[{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"NumCalls","inputs":[{"name":"_numCalls","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"OpHash","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"Space","inputs":[{"name":"_space","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"StartingGas","inputs":[{"name":"_startingGas","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false}],"bytecode":{"object":"0x60808060405234601557610217908161001b8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c634c4e814c1461002857600080fd5b346101dc5760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101dc5760a4359067ffffffffffffffff82116101dc57366023830112156101dc5781600401359067ffffffffffffffff82116101dc5736602483850101116101dc577f0b76c48be4e2908f4c9d4eabaf7538e91577fd9ae26db46693fa8d861c6a42fb927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6024947f1d075b933dc9f19186b1ae7fc385d64fd8845afa07eeb056a7ebdacdfb7f2fc860206040966004358152a17f9fcc36893cf52b97e3d02576f1025eb7a27c30635672de751e2ef9a6f0ccb08b6020865188358152a17fbc4bc9c81963cfbf61c958448f1c4b4b382b0a997a2fb0d1fd153818bb2aa27b602086516044358152a17fbb7a447ad156f8002134a11ad706b80728a2f1ceb0322f1e3494861fa0ad096c602086516064358152a17f6840f59e591bc40085b0cabf11c3e75123624c13f13d90fc58859e310d15b02e602086516084358152a1808551968795602087528260208801520186860137600085828601015201168101030190a1005b600080fdfea264697066735822122099af5207b02b9a8ddc7dd740e8ccd256649f5ef019b55951af1893b0e581e2cf64736f6c634300081c0033","sourceMap":"1318:612:89:-:0;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608080604052600436101561001357600080fd5b60003560e01c634c4e814c1461002857600080fd5b346101dc5760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101dc5760a4359067ffffffffffffffff82116101dc57366023830112156101dc5781600401359067ffffffffffffffff82116101dc5736602483850101116101dc577f0b76c48be4e2908f4c9d4eabaf7538e91577fd9ae26db46693fa8d861c6a42fb927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6024947f1d075b933dc9f19186b1ae7fc385d64fd8845afa07eeb056a7ebdacdfb7f2fc860206040966004358152a17f9fcc36893cf52b97e3d02576f1025eb7a27c30635672de751e2ef9a6f0ccb08b6020865188358152a17fbc4bc9c81963cfbf61c958448f1c4b4b382b0a997a2fb0d1fd153818bb2aa27b602086516044358152a17fbb7a447ad156f8002134a11ad706b80728a2f1ceb0322f1e3494861fa0ad096c602086516064358152a17f6840f59e591bc40085b0cabf11c3e75123624c13f13d90fc58859e310d15b02e602086516084358152a1808551968795602087528260208801520186860137600085828601015201168101030190a1005b600080fdfea264697066735822122099af5207b02b9a8ddc7dd740e8ccd256649f5ef019b55951af1893b0e581e2cf64736f6c634300081c0033","sourceMap":"1318:612:89:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1911:11;1318:612;;;;;1771:15;1318:612;;;;;;;1771:15;1797:25;1318:612;;;;;;;1797:25;1833:13;1318:612;;;;;;;1833:13;1857:19;1318:612;;;;;;;1857:19;1887:13;1318:612;;;;;;;1887:13;1318:612;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1911:11;;;;1318:612;;;;","linkReferences":{}},"methodIdentifiers":{"handleSequenceDelegateCall(bytes32,uint256,uint256,uint256,uint256,bytes)":"4c4e814c"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"Data\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"Index\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_numCalls\",\"type\":\"uint256\"}],\"name\":\"NumCalls\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"}],\"name\":\"OpHash\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_space\",\"type\":\"uint256\"}],\"name\":\"Space\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_startingGas\",\"type\":\"uint256\"}],\"name\":\"StartingGas\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_startingGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_numCalls\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_space\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"handleSequenceDelegateCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"handleSequenceDelegateCall(bytes32,uint256,uint256,uint256,uint256,bytes)\":{\"params\":{\"_data\":\"The data\",\"_index\":\"The index\",\"_numCalls\":\"The number of calls\",\"_opHash\":\"The operation hash\",\"_space\":\"The space\",\"_startingGas\":\"The starting gas\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"handleSequenceDelegateCall(bytes32,uint256,uint256,uint256,uint256,bytes)\":{\"notice\":\"Handle a sequence delegate call\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/modules/Calls.t.sol\":\"MockDelegatecall\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/modules/Calls.sol\":{\"keccak256\":\"0xcd0d38d0fd248e4443032dede2b8892ea0ca7e55538cd54082830f6b98d8edb1\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://617bb6d0724b18f3d77347cc454a57c1c916a0818a592552bd7fa226aa41a306\",\"dweb:/ipfs/Qmeet85Ux6cKq9JmC25JnTzFnRrgDpkyRik2svZLWt4fov\"]},\"src/modules/Nonce.sol\":{\"keccak256\":\"0x56fbf6dc9b34ab60ae8a32ffb6f583c003bb8f4a5223ce704e982400fa403fab\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://492f53628633b862702cf8f9b726067a722c94028133a8a4c4fcf3d0e73ad803\",\"dweb:/ipfs/QmTHNy4XbH47YZaqKDpknb5aApjRH9HVAREHN7N5vEFWEV\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/Storage.sol\":{\"keccak256\":\"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da\",\"dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn\"]},\"src/modules/auth/BaseAuth.sol\":{\"keccak256\":\"0xbf2e40def03fcb5f4a5129b2f5803e21951325b92e00126cbe1427b7c25cfefd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://b560905fcc4b957d27c2abed78a1e82529c89fa472e91b3d108fbfd91aa7c3f7\",\"dweb:/ipfs/QmRjLLtTWE6dFX2kBQCgLz7ossfMxhAFgDC8Jx9XuGL6Wy\"]},\"src/modules/auth/BaseSig.sol\":{\"keccak256\":\"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8\",\"dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3\"]},\"src/modules/auth/SelfAuth.sol\":{\"keccak256\":\"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42\",\"dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W\"]},\"src/modules/interfaces/IAuth.sol\":{\"keccak256\":\"0xf6fa30af2ec91d5fbeac17c9b1f2aa73b7883c9ac98745605007e57666394b91\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://6e90a87978519462f9612f4a17e38fddc1c7bcf700ff834a1de7dce326f30353\",\"dweb:/ipfs/QmXmWAsRRK6t4jPs4VcXrouyokxdALM28D3odX7ub48WEp\"]},\"src/modules/interfaces/ICheckpointer.sol\":{\"keccak256\":\"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1\",\"dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t\"]},\"src/modules/interfaces/IDelegatedExtension.sol\":{\"keccak256\":\"0xa2ae897e90fd70dd4a9e172bc04d019ba9c512e72c2df65fcb6daf87dd5ceb90\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://cdf4b7c3dfb0aef6c9dbe8b2a0542018dc756ef2252d7101bcb3186192da0a11\",\"dweb:/ipfs/QmPHCVu1DJ7fBrPBYA5y3hoF3a3XFEBwYCZ1ErGaxPhcYL\"]},\"src/modules/interfaces/IERC1271.sol\":{\"keccak256\":\"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b\",\"dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF\"]},\"src/modules/interfaces/IPartialAuth.sol\":{\"keccak256\":\"0x0d1aa021615d8e90696e71a9468331457a1babfa2ffe169654b7456e5bcb7a73\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://bbacd149a6358ab0d4b9c588d2e3a55fc71ed4723269150d7b91ca70092f6519\",\"dweb:/ipfs/QmUSwtrYCrRcRFsy5rCzdMPrw1FCU7ZoeXdsW6kK9yc8FK\"]},\"src/modules/interfaces/ISapient.sol\":{\"keccak256\":\"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489\",\"dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"src/utils/LibOptim.sol\":{\"keccak256\":\"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81\",\"dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x\"]},\"test/modules/Calls.t.sol\":{\"keccak256\":\"0xcfab8da4dd95a1b60092a312c97f0c395db5f454ab1c0c6410dea4d1078fc7ad\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e816c49b42e85c1fd80e62ea06a646b4ffe648ae061125303bfdbf4f4e7f79fe\",\"dweb:/ipfs/Qmbjj8coE44jpJd6cE1hq35JciEu9cq1hgxAgxYHBWXDXV\"]},\"test/utils/PrimitivesRPC.sol\":{\"keccak256\":\"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe\",\"dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv\"]},\"test/utils/TestUtils.sol\":{\"keccak256\":\"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad\",\"dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes","indexed":false}],"type":"event","name":"Data","anonymous":false},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256","indexed":false}],"type":"event","name":"Index","anonymous":false},{"inputs":[{"internalType":"uint256","name":"_numCalls","type":"uint256","indexed":false}],"type":"event","name":"NumCalls","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false}],"type":"event","name":"OpHash","anonymous":false},{"inputs":[{"internalType":"uint256","name":"_space","type":"uint256","indexed":false}],"type":"event","name":"Space","anonymous":false},{"inputs":[{"internalType":"uint256","name":"_startingGas","type":"uint256","indexed":false}],"type":"event","name":"StartingGas","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32"},{"internalType":"uint256","name":"_startingGas","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_numCalls","type":"uint256"},{"internalType":"uint256","name":"_space","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"handleSequenceDelegateCall"}],"devdoc":{"kind":"dev","methods":{"handleSequenceDelegateCall(bytes32,uint256,uint256,uint256,uint256,bytes)":{"params":{"_data":"The data","_index":"The index","_numCalls":"The number of calls","_opHash":"The operation hash","_space":"The space","_startingGas":"The starting gas"}}},"version":1},"userdoc":{"kind":"user","methods":{"handleSequenceDelegateCall(bytes32,uint256,uint256,uint256,uint256,bytes)":{"notice":"Handle a sequence delegate call"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/modules/Calls.t.sol":"MockDelegatecall"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/modules/Calls.sol":{"keccak256":"0xcd0d38d0fd248e4443032dede2b8892ea0ca7e55538cd54082830f6b98d8edb1","urls":["bzz-raw://617bb6d0724b18f3d77347cc454a57c1c916a0818a592552bd7fa226aa41a306","dweb:/ipfs/Qmeet85Ux6cKq9JmC25JnTzFnRrgDpkyRik2svZLWt4fov"],"license":"Apache-2.0"},"src/modules/Nonce.sol":{"keccak256":"0x56fbf6dc9b34ab60ae8a32ffb6f583c003bb8f4a5223ce704e982400fa403fab","urls":["bzz-raw://492f53628633b862702cf8f9b726067a722c94028133a8a4c4fcf3d0e73ad803","dweb:/ipfs/QmTHNy4XbH47YZaqKDpknb5aApjRH9HVAREHN7N5vEFWEV"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/Storage.sol":{"keccak256":"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f","urls":["bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da","dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn"],"license":"Apache-2.0"},"src/modules/auth/BaseAuth.sol":{"keccak256":"0xbf2e40def03fcb5f4a5129b2f5803e21951325b92e00126cbe1427b7c25cfefd","urls":["bzz-raw://b560905fcc4b957d27c2abed78a1e82529c89fa472e91b3d108fbfd91aa7c3f7","dweb:/ipfs/QmRjLLtTWE6dFX2kBQCgLz7ossfMxhAFgDC8Jx9XuGL6Wy"],"license":"Apache-2.0"},"src/modules/auth/BaseSig.sol":{"keccak256":"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa","urls":["bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8","dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3"],"license":"Apache-2.0"},"src/modules/auth/SelfAuth.sol":{"keccak256":"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c","urls":["bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42","dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W"],"license":"Apache-2.0"},"src/modules/interfaces/IAuth.sol":{"keccak256":"0xf6fa30af2ec91d5fbeac17c9b1f2aa73b7883c9ac98745605007e57666394b91","urls":["bzz-raw://6e90a87978519462f9612f4a17e38fddc1c7bcf700ff834a1de7dce326f30353","dweb:/ipfs/QmXmWAsRRK6t4jPs4VcXrouyokxdALM28D3odX7ub48WEp"],"license":"Apache-2.0"},"src/modules/interfaces/ICheckpointer.sol":{"keccak256":"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513","urls":["bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1","dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t"],"license":"Apache-2.0"},"src/modules/interfaces/IDelegatedExtension.sol":{"keccak256":"0xa2ae897e90fd70dd4a9e172bc04d019ba9c512e72c2df65fcb6daf87dd5ceb90","urls":["bzz-raw://cdf4b7c3dfb0aef6c9dbe8b2a0542018dc756ef2252d7101bcb3186192da0a11","dweb:/ipfs/QmPHCVu1DJ7fBrPBYA5y3hoF3a3XFEBwYCZ1ErGaxPhcYL"],"license":"Apache-2.0"},"src/modules/interfaces/IERC1271.sol":{"keccak256":"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9","urls":["bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b","dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF"],"license":"Apache-2.0"},"src/modules/interfaces/IPartialAuth.sol":{"keccak256":"0x0d1aa021615d8e90696e71a9468331457a1babfa2ffe169654b7456e5bcb7a73","urls":["bzz-raw://bbacd149a6358ab0d4b9c588d2e3a55fc71ed4723269150d7b91ca70092f6519","dweb:/ipfs/QmUSwtrYCrRcRFsy5rCzdMPrw1FCU7ZoeXdsW6kK9yc8FK"],"license":"Apache-2.0"},"src/modules/interfaces/ISapient.sol":{"keccak256":"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359","urls":["bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489","dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"src/utils/LibOptim.sol":{"keccak256":"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde","urls":["bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81","dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x"],"license":"Apache-2.0"},"test/modules/Calls.t.sol":{"keccak256":"0xcfab8da4dd95a1b60092a312c97f0c395db5f454ab1c0c6410dea4d1078fc7ad","urls":["bzz-raw://e816c49b42e85c1fd80e62ea06a646b4ffe648ae061125303bfdbf4f4e7f79fe","dweb:/ipfs/Qmbjj8coE44jpJd6cE1hq35JciEu9cq1hgxAgxYHBWXDXV"],"license":"Apache-2.0"},"test/utils/PrimitivesRPC.sol":{"keccak256":"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe","urls":["bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe","dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv"],"license":"Apache-2.0"},"test/utils/TestUtils.sol":{"keccak256":"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79","urls":["bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad","dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa"],"license":"Apache-2.0"}},"version":1},"id":89} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Deploy.s.sol/Deploy.json b/contracts/artifacts/wallet-contracts-v3/Deploy.s.sol/Deploy.json new file mode 100644 index 00000000..3b3bb306 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Deploy.s.sol/Deploy.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"IS_SCRIPT","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"run","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"error","name":"DeploymentFailed","inputs":[{"name":"reason","type":"string","internalType":"string"}]}],"bytecode":{"object":"0x608080604052346026576201000162ff00ff19600c541617600c5561d78f908161002c8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c908163c04062261461007e575063f8ccbf471461003557600080fd5b346100795760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261007957602060ff600c5460101c166040519015158152f35b600080fd5b346100795760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610079577fc1978d1f00000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f505249564154455f4b45590000000000000000000000000000000000000000006044820152602081606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561052c57600091610538575b5080602073ffffffffffffffffffffffffffffffffffffffff6102c58361024c6102896101fc6004986101916101c0896102b6604051906101738382018361056f565b8082528282019061111f8239604051948592518092858501906105df565b810103017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261056f565b6040516101ce60408261056f565b600781527f466163746f7279000000000000000000000000000000000000000000000000008a820152610645565b86617f1f91604051926102118382018561056f565b808452828401906113d5823961025b604051918a8584019416845284835261023a60408461056f565b604051978896518092878901906105df565b850191518093858401906105df565b0101037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261056f565b60405161029760408261056f565b600c81527f5374616765314d6f64756c65000000000000000000000000000000000000000086820152610645565b16604051938480927f9f69ef540000000000000000000000000000000000000000000000000000000082525afa91821561052c576000926104d5575b5060008061039a6103cd6104d3956040519061031e60408361056f565b602082527f5374616765324d6f64756c6520666f72205374616765314d6f64756c65206973602083015273ffffffffffffffffffffffffffffffffffffffff6040519485937f319af333000000000000000000000000000000000000000000000000000000006020860152604060248601526064850190610602565b91166044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261056f565b6020815191016a636f6e736f6c652e6c6f675afa5061045c8161019161041f6020610f88604051906104018382018361056f565b808252828201906192f48239604051948592518092858501906105df565b60405161042d60408261056f565b600581527f47756573740000000000000000000000000000000000000000000000000000006020820152610645565b5061019161049660206134de604051906104788382018361056f565b8082528282019061a27c8239604051948592518092858501906105df565b6040516104a460408261056f565b600e81527f53657373696f6e4d616e616765720000000000000000000000000000000000006020820152610645565b005b6020813d602011610524575b816104ee6020938361056f565b8101031261052057519173ffffffffffffffffffffffffffffffffffffffff8316830361051d57506000610301565b80fd5b8280fd5b3d91506104e1565b6040513d6000823e3d90fd5b6020813d602011610567575b816105516020938361056f565b81010312610563575190506004610130565b5080fd5b3d9150610544565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176105b057604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60005b8381106105f25750506000910152565b81810151838201526020016105e2565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361063e815180928187528780880191016105df565b0116010190565b9190600091600273ce0042b868300000d44a59004da54a005ffdcf9f3b1115610a5c575b73ffffffffffffffffffffffffffffffffffffffff8251602084012060405160208101917fff0000000000000000000000000000000000000000000000000000000000000083527fce0042b868300000d44a59004da54a005ffdcf9f00000000000000000000000060218301528660358301526055820152605581526106f060758261056f565b519020169384906002823b11610a125790610743916040519061071460408361056f565b600c82527f6465706c6f79696e6720746f00000000000000000000000000000000000000006020830152611043565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561052057604051907fce817d470000000000000000000000000000000000000000000000000000000082526004820152828160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015610a07576109f2575b509060206107f592604051809481927f4af63f02000000000000000000000000000000000000000000000000000000008352604060048401526044830190610602565b84602483015203818473ce0042b868300000d44a59004da54a005ffdcf9f5af19182156109e5578192610994575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561051d576040517f76eadd36000000000000000000000000000000000000000000000000000000008152818160048183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561098957610974575b505073ffffffffffffffffffffffffffffffffffffffff168103610916576002813b11156108b85790565b60646040517f20631f9100000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4465706c6f796d656e74206661696c65640000000000000000000000000000006044820152fd5b60646040517f20631f9100000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4465706c6f7965642061646472657373206d69736d61746368000000000000006044820152fd5b61097f82809261056f565b61051d578061088d565b6040513d84823e3d90fd5b9091506020813d6020116109dd575b816109b06020938361056f565b81010312610563575173ffffffffffffffffffffffffffffffffffffffff81168103610563579038610823565b3d91506109a3565b50604051903d90823e3d90fd5b6109fd83809261056f565b61056357386107b2565b6040513d85823e3d90fd5b91509150610a59925060405190610a2a60408361056f565b601382527f616c7265616479206465706c6f79656420746f000000000000000000000000006020830152611043565b90565b6657c084e5f3c00073bb6e024b9cffacb947a71991e386681b1cd1477d3110610de2575b600080610afe610b44604051610a9760408261056f565b601e81527f4465706c6f79696e672053696e676c65746f6e20466163746f727920746f000060208201526040519283917f319af333000000000000000000000000000000000000000000000000000000006020840152604060248401526064830190610602565b73ce0042b868300000d44a59004da54a005ffdcf9f6044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261056f565b6020815191016a636f6e736f6c652e6c6f675afa50604051610b686101a08261056f565b61016f81527ff9016c8085174876e8008303c4d88080b901546080604052348015610010576060208201527e80fd5b50610134806100206000396000f3fe6080604052348015600f57600060408201527f80fd5b506004361060285760003560e01c80634af63f0214602d575b600080fd60608201527f5b60cf60048036036040811015604157600080fd5b810190602081018135640160808201527b811115605b57600080fd5b820183602082011115606c57600080fd5b60a08201527f80359060200191846001830284011164010000000083111715608d57600080fd60c08201527f5b91908080601f0160208091040260200160405190810160405280939291908160e08201527f8152602001838380828437600092019190915250929550509135925060eb91506101008201527f50565b604080516001600160a01b039092168252519081900360200190f35b606101208201527e818351602085016000f5939250505056fea26469706673582212206b44f8a86101408201527f2cb6b156bfcc3dc6aadd6df4eefd204bc928a4397fd15dacf6d5320564736f6c6101608201527f634300060200331b832470008224700000000000000000000000000000000000610180820152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610dde5783610d8f91604051809381927f8c0c72e0000000000000000000000000000000000000000000000000000000008352602060048401526024830190610602565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015610dd357908491610dbe575b5050610669565b81610dc89161056f565b610520578238610db7565b6040513d86823e3d90fd5b8380fd5b8280610e5f610e8b604051610df860408261056f565b601d81527f46756e64696e672053696e676c65746f6e20466163746f727920454f4100000060208201526040519283917f41304fac000000000000000000000000000000000000000000000000000000006020840152602060248401526044830190610602565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261056f565b6020815191016a636f6e736f6c652e6c6f675afa50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610520576040517fce817d47000000000000000000000000000000000000000000000000000000008152816004820152838160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015610dd35761102f575b5073bb6e024b9cffacb947a71991e386681b1cd1477d31806657c084e5f3c00003906657c084e5f3c00082116110025784808093819382906657c084e5f3c00014610ff9575b73bb6e024b9cffacb947a71991e386681b1cd1477d90f11561098957737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610520576040517f76eadd36000000000000000000000000000000000000000000000000000000008152838160048183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015610dd357908491610fe4575b5050610a80565b81610fee9161056f565b610520578238610fdd565b506108fc610f55565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b8361103c9194929461056f565b9138610f0f565b6111076110a49160009473ffffffffffffffffffffffffffffffffffffffff6110d487966040519687957f95ed0195000000000000000000000000000000000000000000000000000000006020880152606060248801526084870190610602565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc868303016044870152610602565b91166064830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261056f565b6020815191016a636f6e736f6c652e6c6f675afa5056fe6080806040523460155761029b908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c6332c02a141461002757600080fd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019f5760043573ffffffffffffffffffffffffffffffffffffffff811680820361019f5760243580916100eb6101176040519261008a846101d3565b602f84527f6041600e3d396021805130553df33d3d36153402601f57363d3d373d363d305460208501527f5af43d82803e903d91601f57fd5bf300000000000000000000000000000000006040850152604051928391602083019586610235565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826101f4565b519034f59173ffffffffffffffffffffffffffffffffffffffff8316156101595760405173ffffffffffffffffffffffffffffffffffffffff84168152602090f35b7f8caac8050000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff1660045260245260446000fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6060810190811067ffffffffffffffff8211176101ef57604052565b6101a4565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176101ef57604052565b9291909283519060005b8281106102525750019081526020019150565b806020809288010151818401520161023f56fea2646970667358221220be04d6b1fea99f8da63c42ae89d7f45bd43865e722cddb9cb70f1713011e9fe264736f6c634300081c003361010080604052346101ae57604081617f1f803803809161002082856101b3565b8339810103126101ae5761003f6020610038836101d6565b92016101d6565b604051909190613dff808201906001600160401b0382118383101761018c57602091839161412083396001600160a01b03861681520301906000f09081156101a257604051606081016001600160401b0381118282101761018c576040908152602f82527f6041600e3d396021805130553df33d3d36153402601f57363d3d373d363d305460208301526e5af43d82803e903d91601f57fd5bf360881b82820152519060005b602f811061017757505030604f820152604f8152610104606f826101b3565b805160209091012060805260a0526001600160a01b031660c05260e052604051613f3590816101eb8239608051818181610c210152613b59015260a051818181610d6f0152613b2a015260c051818181610cd6015261119d015260e0518181816110600152818161120c0152611aa00152f35b806020809284010151828286010152016100e5565b634e487b7160e01b600052604160045260246000fd5b6040513d6000823e3d90fd5b600080fd5b601f909101601f19168101906001600160401b0382119082101761018c57604052565b51906001600160a01b03821682036101ae5756fe6080604052600436101561001e575b361561001c5761001c611c68565b005b60003560e01c806223de29146101ad578063025b22bc146101a857806313792a4a146101a3578063150b7a021461019e5780631626ba7e1461019957806319822f7c146101945780631a9b23371461018f5780631f6a1eb91461018a578063257671f51461018557806329561426146101805780632dd310001461017b5780634fcf3eca146101765780636ea44577146101715780638943ec021461016c5780638c3f55631461016757806392dcb3fc146101625780639c145aed1461015d5780639f69ef5414610158578063a65d69d414610153578063aaf10f421461014e578063ad55366b14610149578063b93ea7ad14610144578063bc197c811461013f578063f23a6e611461013a5763f727ef1c0361000e5761158b565b6114fe565b61142c565b6112cd565b611281565b611230565b6111c1565b611152565b61103a565b610fdc565b610fa0565b610f1c565b610eed565b610d93565b610d24565b610c44565b610beb565b610aff565b610a9c565b6109e7565b61095f565b6108d2565b6107d5565b6102fb565b61026f565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101d557565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101d557565b6044359073ffffffffffffffffffffffffffffffffffffffff821682036101d557565b359073ffffffffffffffffffffffffffffffffffffffff821682036101d557565b9181601f840112156101d55782359167ffffffffffffffff83116101d557602083818601950101116101d557565b346101d55760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576102a66101b2565b506102af6101da565b506102b86101fd565b5060843567ffffffffffffffff81116101d5576102d9903690600401610241565b505060a43567ffffffffffffffff81116101d55761001c903690600401610241565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55761032d6101b2565b30330361033d5761001c90611d31565b7fa19dbf00000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff8211176103b657604052565b61036b565b6040810190811067ffffffffffffffff8211176103b657604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176103b657604052565b6040519061042760e0836103d7565b565b60405190610427610120836103d7565b359060ff821682036101d557565b359081151582036101d557565b67ffffffffffffffff81116103b65760051b60200190565b67ffffffffffffffff81116103b657601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926104b28261046c565b916104c060405193846103d7565b8294818452818301116101d5578281602093846000960137010152565b9080601f830112156101d5578160206104f8933591016104a6565b90565b81601f820112156101d55780359061051282610454565b9261052060405194856103d7565b82845260208085019360051b830101918183116101d55760208101935b83851061054c57505050505090565b843567ffffffffffffffff81116101d557820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082860301126101d557610593610418565b916105a060208301610220565b83526040820135602084015260608201359267ffffffffffffffff84116101d55760e0836105d58860208098819801016104dd565b6040840152608081013560608401526105f060a08201610447565b608084015261060160c08201610447565b60a0840152013560c082015281520194019361053d565b9080601f830112156101d557813561062f81610454565b9261063d60405194856103d7565b81845260208085019260051b8201019283116101d557602001905b8282106106655750505090565b6020809161067284610220565b815201910190610658565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126101d55760043567ffffffffffffffff81116101d5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82850301126101d5576106ef610429565b906106fc81600401610439565b825261070a60248201610447565b6020830152604481013567ffffffffffffffff81116101d557846004610732928401016104fb565b6040830152606481013560608301526084810135608083015260a481013567ffffffffffffffff81116101d55784600461076e928401016104dd565b60a083015260c481013560c083015260e481013560e083015261010481013567ffffffffffffffff81116101d557600485916107ab930101610618565b610100820152916024359067ffffffffffffffff82116101d5576107d191600401610241565b9091565b346101d5576107e33661067d565b90916101008101926107fe6107f9855151611693565b6116b3565b9160005b85518051821015610865579061085f61083a61082083600195611731565b5173ffffffffffffffffffffffffffffffffffffffff1690565b6108448388611731565b9073ffffffffffffffffffffffffffffffffffffffff169052565b01610802565b505083838661087a3361084483515185611731565b52610886818484611d80565b50156108985760405160018152602090f35b6108ce906040519384937ff58cc8b50000000000000000000000000000000000000000000000000000000085526004850161198c565b0390fd5b346101d55760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576109096101b2565b506109126101da565b5060643567ffffffffffffffff81116101d557610933903690600401610241565b505060206040517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b346101d55760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760043560243567ffffffffffffffff81116101d5576020916109b76109bd923690600401610241565b916119b1565b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b346101d55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760043567ffffffffffffffff81116101d5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126101d557610a6a60209160243560443591600401611a86565b604051908152f35b7fffffffff000000000000000000000000000000000000000000000000000000008116036101d557565b346101d55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576020610ae1600435610adc81610a72565b611f65565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760043567ffffffffffffffff81116101d557610b49903690600401610241565b9060243567ffffffffffffffff81116101d557610b6d610b77913690600401610241565b9190935a9361209a565b91610b8b606084015160808501519061235e565b610b96828585611d80565b929015610ba8575061001c93506124b7565b836108ce86926040519384937fa2b6d61b0000000000000000000000000000000000000000000000000000000085526004850161198c565b60009103126101d557565b346101d55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346101d55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760043530330361033d578015610cfa576020817f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf855604051908152a161001c7f0000000000000000000000000000000000000000000000000000000000000000611d31565b7f4294d1270000000000000000000000000000000000000000000000000000000060005260046000fd5b346101d55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d557600435610dc981610a72565b30330361033d5773ffffffffffffffffffffffffffffffffffffffff610dee82611f65565b1615610e545760407fffffffff000000000000000000000000000000000000000000000000000000007f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19216610e45600082612d0f565b815190815260006020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f1c3812cc000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101d5576004359067ffffffffffffffff82116101d5576107d191600401610241565b610ef636610ea4565b9030330361033d57610f0c61001c925a9261209a565b90610f16826127db565b906124b7565b346101d55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d557610f536101b2565b5060443567ffffffffffffffff81116101d557610f74903690600401610241565b505060206040517f8943ec02000000000000000000000000000000000000000000000000000000008152f35b346101d55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576020610a6a60043561286f565b346101d55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760406110186004356128b5565b73ffffffffffffffffffffffffffffffffffffffff8351921682526020820152f35b346101d55761104836610ea4565b9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001680156111285733036110fa57303b156101d5576110ce9160009160405193849283927f6ea4457700000000000000000000000000000000000000000000000000000000845260048401611c27565b038183305af180156110f5576110e057005b806110ef600061001c936103d7565b80610be0565b6119fd565b7f1d6ddbf4000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7fd13d78350000000000000000000000000000000000000000000000000000000060005260046000fd5b346101d55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101d55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101d55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576020305473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346101d55760c061129d6000806112973661067d565b9161297d565b926112a9839293613ac6565b906040519586526020860152151560408501526060840152608083015260a0820152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760043561130381610a72565b61130b6101da565b9030330361033d5773ffffffffffffffffffffffffffffffffffffffff61133182611f65565b166113ab577f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19173ffffffffffffffffffffffffffffffffffffffff7fffffffff0000000000000000000000000000000000000000000000000000000060409316911661139e8183612d0f565b82519182526020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f5b4d6d6a000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b9181601f840112156101d55782359167ffffffffffffffff83116101d5576020808501948460051b0101116101d557565b346101d55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576114636101b2565b5061146c6101da565b5060443567ffffffffffffffff81116101d55761148d9036906004016113fb565b505060643567ffffffffffffffff81116101d5576114af9036906004016113fb565b505060843567ffffffffffffffff81116101d5576114d1903690600401610241565b50506040517fbc197c81000000000000000000000000000000000000000000000000000000008152602090f35b346101d55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576115356101b2565b5061153e6101da565b5060843567ffffffffffffffff81116101d55761155f903690600401610241565b505060206040517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b346101d55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576004356115c56101da565b604435916bffffffffffffffffffffffff83168093036101d55730330361033d578273ffffffffffffffffffffffffffffffffffffffff836116507febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1967fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606097881b161785612cca565b6040519384521660208301526040820152a1005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90600182018092116116a157565b611664565b919082018092116116a157565b906116bd82610454565b6116ca60405191826103d7565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06116f88294610454565b0190602036910137565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518210156117455760209160051b010190565b611702565b919082519283825260005b8481106117945750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201611755565b9080602083519182815201916020808360051b8301019401926000915b8383106117d557505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080611848604085015160e0604086015260e085019061174a565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152970193019301919392906117c6565b906020808351928381520192019060005b81811061189d5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101611890565b805160ff1682526104f891602082810151151590820152610100611927611901604085015161012060408601526101208501906117a9565b606085015160608501526080850151608085015260a085015184820360a086015261174a565b9260c081015160c084015260e081015160e084015201519061010081840391015261187f565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b916119a36104f894926040855260408501906118c9565b92602081850391015261194d565b906119ce92916119bf611f0a565b906003825260e0820152611d80565b50156119f8577f1626ba7e0000000000000000000000000000000000000000000000000000000090565b600090565b6040513d6000823e3d90fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101d5570180359067ffffffffffffffff82116101d5576020019181360383136101d557565b908160209103126101d557516104f881610a72565b6040906104f894928152816020820152019161194d565b91909173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016918215611128578233036110fa5780611bb8575b506020915080610100611ae8920190611a09565b92611b2060405194859384937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611a6f565b0381305afa9081156110f5577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091611b89575b501603611b8457600090565b600190565b611bab915060203d602011611bb1575b611ba381836103d7565b810190611a5a565b38611b78565b503d611b99565b823b156101d5576040517fb760faf900000000000000000000000000000000000000000000000000000000815230600482015292600091849160249183915af19081156110f557602092611ae892611c12575b5090611ad4565b806110ef6000611c21936103d7565b38611c0b565b9160206104f893818152019161194d565b3d15611c63573d90611c498261046c565b91611c5760405193846103d7565b82523d6000602084013e565b606090565b600436108015611c755750565b611cab906000357fffffffff00000000000000000000000000000000000000000000000000000000811691611cfd575b50611f65565b73ffffffffffffffffffffffffffffffffffffffff8116611cc95750565b60008091604051368382378036810184815203915af4611ce7611c38565b9015611cf557602081519101f35b602081519101fd5b7fffffffff000000000000000000000000000000000000000000000000000000008092503660040360031b1b161638611ca5565b60207f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca039180305573ffffffffffffffffffffffffffffffffffffffff60405191168152a1565b90156117455790565b91907f800000000000000000000000000000000000000000000000000000000000000080611dd7611db18585611d77565b357fff000000000000000000000000000000000000000000000000000000000000001690565b1614611e36576000918291611deb9461297d565b905091909192808210611e06575050611e0390613ac6565b91565b7ffd41fcba0000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b5050611e41906127db565b90611e4b826128b5565b42811115611ed8575073ffffffffffffffffffffffffffffffffffffffff81168015159081611ecd575b50611e81575060019190565b7f8945c3130000000000000000000000000000000000000000000000000000000060005260048390523360245273ffffffffffffffffffffffffffffffffffffffff1660445260646000fd5b905033141538611e75565b7ff95b6ab700000000000000000000000000000000000000000000000000000000600052600484905260245260446000fd5b60405190610120820182811067ffffffffffffffff8211176103b6576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b73ffffffffffffffffffffffffffffffffffffffff906040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a120845216604082015260408152611fdc6060826103d7565b519020541690565b90611fee82610454565b611ffb60405191826103d7565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06120298294610454565b019060005b82811061203a57505050565b6020906040516120498161039a565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c08201528282850101520161202e565b909392938483116101d55784116101d5578101920390565b9190916120a5611f0a565b6000815292600190823560f81c827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818316016123475750600060608701525b60076120f460ff831660011c90565b16806122f6575b506010818116036122c157506001925b61211484611fe4565b92604087019384526000905b85821061212f57505050505050565b8281013560f81c9060010190918160018085160361229f575061217330612157838951611731565b519073ffffffffffffffffffffffffffffffffffffffff169052565b60028084161461227f575b600480841614612231575b6008808416146121fe575b6121e76121e160c0856121c08a60806121b78860108060019c9d16149351611731565b51019015159052565b6121d78a60a06121b7886020808716149351611731565b1660061c60031690565b60ff1690565b60c06121f4838951611731565b5101520190612120565b6001916121e7906121e19060c090878101359060200196906060612223878d51611731565b510152959450505050612194565b90612279908481013560e81c9060030161227261225961225184846116a6565b838a8a612082565b91906040612268888d51611731565b51019236916104a6565b90526116a6565b90612189565b90838101359060200191906020612297838951611731565b51015261217e565b6122bc92508481013560601c906014019290612157838951611731565b612173565b6020908116036122e35761ffff918381013560f01c906002015b92169261210b565b60ff918381013560f81c906001016122db565b61233a919385929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b92906080870152386120fb565b80850135606090811c9088015260140192506120e5565b906123688261286f565b8181036123ee57509060017f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f8819201908160405160208101907f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8252836040820152604081526123d86060826103d7565b51902055604080519182526020820192909252a1565b917f9b6514f40000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b61243a604092959493956060835260608301906118c9565b9460208201520152565b926104f896959260c09592855260208501526040840152606083015260808201528160a0820152019061174a565b6104f8939260609282526020820152816040820152019061174a565b6124a46104f894926060835260608301906118c9565b926020820152604081840391015261174a565b916000604082019384515190825b8281106124d6575b50505050505050565b6124e1818851611731565b51936124f060a0860151151590565b806127d3575b61279357506000936060810151801580158061278a575b6127525784906125206080850151151590565b1561270c576125cb92612547855173ffffffffffffffffffffffffffffffffffffffff1690565b911561270657505a905b6125c68b61259a60608d01516040890151908c8b604051998a967f4c4e814c00000000000000000000000000000000000000000000000000000000602089015260248801612444565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018552846103d7565b612c9d565b1561260e575b506040805187815260208101839052600192917f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a91a15b016124c5565b60c0018051156126bd57600181511461267e575160021461262f57386125d1565b9493505050507fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b925061266f612663612caf565b60405193849384612472565b0390a1388080808080806124cd565b50846108ce61268b612caf565b6040519384937f7f6b0bb10000000000000000000000000000000000000000000000000000000085526004850161248e565b509250600180937f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d6126fe6126f0612caf565b604051918291858c84612472565b0390a1612608565b90612551565b835161274793925073ffffffffffffffffffffffffffffffffffffffff169160208501519160001461274c57505a905b604085015192612c8b565b6125cb565b9061273c565b83886108ce5a6040519384937f2139527400000000000000000000000000000000000000000000000000000000855260048501612422565b50815a1061250d565b6040805188815260208101849052919550600192917f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b91819081016126fe565b5080156124f6565b61283d6128696127fb6127f5602085015115153090612d4e565b93612e49565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826103d7565b51902090565b60405160208101917f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83526040820152604081526128ae6060826103d7565b5190205490565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e8683526040820152604081526128f46060826103d7565b51902054906bffffffffffffffffffffffff8260601c921690565b6040519061291c826103bb565b60006020838281520152565b908160409103126101d557602060405191612942836103bb565b805183520151602082015290565b60409073ffffffffffffffffffffffffffffffffffffffff6104f89493168152816020820152019061174a565b909491939291853560f81c6001909381908761299761290f565b9360408089161480612c6d575b612b70575b505050600180861614612b4a5760028581161460208501526007600286901c1688820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101908096918196602016612a199060051c90565b612a2290611693565b8a820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101959098899a81612a6e846127db565b988993612a7a93612082565b91612a8493613260565b9098612a9891600052602052604060002090565b90612aab91600052602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff16612ad491600052602052604060002090565b94815190868215159283612b3f575b505081612b30575b50612af35750565b6040517fccbb534f000000000000000000000000000000000000000000000000000000008152815160048201526020909101516024820152604490fd5b90506020820151101538612aeb565b141591508638612ae3565b86612b659792949550612b5d9398612082565b93909261303e565b919394909293929190565b8a81013560601c985060140192509087908a90849015612b94575b508291506129a9565b60038101955073ffffffffffffffffffffffffffffffffffffffff945081013560e81c92604092612c17929091612be291612bdb918990612bd589836116a6565b92612082565b36916104a6565b83519586809481937fccce3bc80000000000000000000000000000000000000000000000000000000083523060048401612950565b0392165afa80156110f557612c3592600091612c3e575b50926116a6565b86388981612b8b565b612c60915060403d604011612c66575b612c5881836103d7565b810190612928565b38612c2e565b503d612c4e565b5073ffffffffffffffffffffffffffffffffffffffff8916156129a4565b9160009391849360208451940192f190565b9160009291839260208351930191f490565b3d90604051916020818401016040528083526000602084013e565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e868352604082015260408152612d096060826103d7565b51902055565b60405160208101917fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1208352604082015260408152612d096060826103d7565b15612dfe576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a0815261286960c0826103d7565b4690612d57565b805160209091019060005b818110612e1d5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101612e10565b610100810151604051612e648161283d602082018095612e05565b51902090612e73815160ff1690565b60ff811680612eec57505090612869612e8f6040840151613bc3565b9261283d60806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b60018103612f4a57505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46693810193845290810191909152606081019290925290612869816080810161283d565b60028103612fa057505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e460208201908152918101929092526060820192909252612869816080810161283d565b600303612ff4575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46660208201908152918101929092526060820192909252612869816080810161283d565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b9061243a906040939695949660608452606084019161194d565b919492909260009560009560009560009560009561305a611f0a565b60028152937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9460005b8281106130b1575050505050505080511515806130a3575b612af35750565b50602081015184111561309c565b600381019d50959b50939950919750929091906130d5908b9085013560e81c6116a6565b958a6000848903613219575089915b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c036131e9575090600161311e89613125948789612082565b908b61297d565b9c939c9b929b9a919a99909a9b9d8e9d9e8f905b106131a35750928b88511461319a575b808b101561316857508a60c08501528992959295949194939093613084565b7f37daf62b0000000000000000000000000000000000000000000000000000000060005260048b905260245260446000fd5b60008852613149565b8d8f6108ce6131b485858c8e612082565b9390926040519485947fb006aba000000000000000000000000000000000000000000000000000000000865260048601613024565b9798999a9160016131ff8b61320694888a612082565b908661297d565b50929d919c909b929a9092918e8e613139565b916130e4565b73ffffffffffffffffffffffffffffffffffffffff6104f895936060938352166020820152816040820152019161194d565b908160209103126101d5575190565b9391909360009460009460005b81811061327b575050505050565b8481013560f881901c9860019092019788979692909160fc1c988915613a5f575060018914613a1f5760028914613862576003891461383357600489146137b2576006891461371257600589146136c457600789146135fd57600889146135a7576009891461347e57600a891461331b577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b9091929394959697506003891697881561346d575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691019081019081613393918787612082565b6040517f898bd921000000000000000000000000000000000000000000000000000000008152939184916133cb918a60048501611a6f565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa9182156110f55761340e9360009361343a575b5060ff909a168091019a613e8f565b908015613434579061342891600052602052604060002090565b955b939291909361326d565b50613428565b60ff91935061345f9060203d8111613466575b61345781836103d7565b810190613251565b92906133ff565b503d61344d565b8084013560f81c9850600101613330565b90919293949596975060038916978815613596575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190810190816134f6918787612082565b6040517f13792a4a0000000000000000000000000000000000000000000000000000000081529391849161352e918b6004850161198c565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa9182156110f5576135709360009361343a575060ff909a168091019a613e8f565b908015613590579061358a91600052602052604060002090565b9561342a565b5061358a565b8084013560f81c9850600101613493565b9850602087019750949593949293919290918201356135c586613e36565b81146135d5575b61357090613e50565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506135cc565b975090919293949597600f169687156136b2575b602060006136236136909a9b86613cfe565b9c9092918a6040516136668161283d8a82019485603c917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008252601c8201520190565b51902092604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa156110f5576135709060ff6000519a1680910199613d41565b600189019883013560f81c9750613611565b9850602087019750949593949293919290918201358085146136ea575b61357090613df7565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506136e1565b989091929394959662ffffff98506137346121e1600c8416603f9060021c1690565b91821561379e575b600316801561378d575b90819061377190613769908781013560e81c906003019c168c01809c8989612082565b90898b613260565b911115613784575b906135709291613dac565b99820199613779565b50600281019084013560f01c613746565b8482013560f81c925060019091019061373c565b975097613808613815929394959697600f61381d93169085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290830180938686612082565b908688613260565b9061358a92980198600052602052604060002090565b985096509394929391929091908082013590602001968015613590579061358a91600052602052604060002090565b90919293949596975060038916978815613a0e575b8084013560601c996138d691601401906138969060021c6003166121e1565b9085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9081019061393a60208c6138ec85858b8b612082565b919073ffffffffffffffffffffffffffffffffffffffff8c604051968795869485937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611a6f565b0392165afa9081156110f5577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000916000916139f0575b5016036139ac57509060ff61357092991680910199613d41565b6108ce6139bd8c9389938989612082565b906040519485947fb2fed7ae0000000000000000000000000000000000000000000000000000000086526004860161321f565b613a08915060203d8111611bb157611ba381836103d7565b38613992565b8381013560f81c9850600101613877565b98600f91929394959697985016968715613a4e575b60148101976135709160ff9091169084013560601c613d41565b8281013560f81c9750600101613a34565b98509091929394959698600f16978815613ab1575b5060206000613a876136909a9b86613cfe565b9c90916040519384938c859094939260ff6060936080840197845216602083015260408201520152565b60018101995083013560f81c97506020613a74565b73ffffffffffffffffffffffffffffffffffffffff9060405160208101917fff0000000000000000000000000000000000000000000000000000000000000083527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060601b16602183015260358201527f0000000000000000000000000000000000000000000000000000000000000000605582015260558152613b8c6075826103d7565b51902016301490565b805160209091019060005b818110613bad5750505090565b8251845260209384019390920191600101613ba0565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0613c09613bf383610454565b92613c0160405194856103d7565b808452610454565b0136602083013760005b8351811015613ce55780613c2960019286611731565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152613cd1610120826103d7565b519020613cde8285611731565b5201613c13565b509091506040516128698161283d602082018095613b95565b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff81116116a15791565b90604051907fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208301937f53657175656e6365207369676e65723a0a000000000000000000000000000000855260601b1660318301526045820152604581526128696065826103d7565b916040519160208301937f53657175656e6365206e657374656420636f6e6669673a0a00000000000000008552603884015260588301526078820152607881526128696098826103d7565b60405160208101917f53657175656e636520737461746963206469676573743a0a000000000000000083526038820152603881526128696058826103d7565b61283d6128696127fb6127f5600060208601511515612d4e565b60405160208101917f53657175656e636520616e792061646472657373207375626469676573743a0a83526040820152604081526128696060826103d7565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e63652073617069656e7420636f6e6669673a0a00000000000000865260601b166039840152604d830152606d820152606d8152612869608d826103d756fea2646970667358221220825b940dd691f79f4782ba8dca1eaa7ff741f07679c4faf28637d8117499069a64736f6c634300081c003360a034607457601f613dff38819003918201601f19168301916001600160401b03831184841017607957808492602094604052833981010312607457516001600160a01b0381168103607457608052604051613d6f90816100908239608051818181610fe90152818161112601526119ba0152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6080604052600436101561001e575b361561001c5761001c611b82565b005b60003560e01c806223de291461018d578063025b22bc1461018857806313792a4a14610183578063150b7a021461017e5780631626ba7e1461017957806319822f7c146101745780631a9b23371461016f5780631f6a1eb91461016a57806329561426146101655780634fcf3eca1461016057806351605d801461015b5780636ea44577146101565780638943ec02146101515780638c3f55631461014c57806392dcb3fc146101475780639c145aed14610142578063a65d69d41461013d578063aaf10f4214610138578063ad55366b14610133578063b93ea7ad1461012e578063bc197c8114610129578063f23a6e61146101245763f727ef1c0361000e576114a5565b611418565b611346565b6111e7565b61119b565b61114a565b6110db565b610fc3565b610f65565b610f29565b610ea5565b610e76565b610dd2565b610cb6565b610bfd565b610b1c565b610ab9565b610a04565b61097c565b6108ef565b6107f2565b6102db565b61024f565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101b557565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101b557565b6044359073ffffffffffffffffffffffffffffffffffffffff821682036101b557565b359073ffffffffffffffffffffffffffffffffffffffff821682036101b557565b9181601f840112156101b55782359167ffffffffffffffff83116101b557602083818601950101116101b557565b346101b55760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557610286610192565b5061028f6101ba565b506102986101dd565b5060843567ffffffffffffffff81116101b5576102b9903690600401610221565b505060a43567ffffffffffffffff81116101b55761001c903690600401610221565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55761030d610192565b30330361035a576020817f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca0392305573ffffffffffffffffffffffffffffffffffffffff60405191168152a1005b7fa19dbf00000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff8211176103d357604052565b610388565b6040810190811067ffffffffffffffff8211176103d357604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176103d357604052565b6040519061044460e0836103f4565b565b60405190610444610120836103f4565b359060ff821682036101b557565b359081151582036101b557565b67ffffffffffffffff81116103d35760051b60200190565b67ffffffffffffffff81116103d357601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926104cf82610489565b916104dd60405193846103f4565b8294818452818301116101b5578281602093846000960137010152565b9080601f830112156101b557816020610515933591016104c3565b90565b81601f820112156101b55780359061052f82610471565b9261053d60405194856103f4565b82845260208085019360051b830101918183116101b55760208101935b83851061056957505050505090565b843567ffffffffffffffff81116101b557820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082860301126101b5576105b0610435565b916105bd60208301610200565b83526040820135602084015260608201359267ffffffffffffffff84116101b55760e0836105f28860208098819801016104fa565b60408401526080810135606084015261060d60a08201610464565b608084015261061e60c08201610464565b60a0840152013560c082015281520194019361055a565b9080601f830112156101b557813561064c81610471565b9261065a60405194856103f4565b81845260208085019260051b8201019283116101b557602001905b8282106106825750505090565b6020809161068f84610200565b815201910190610675565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126101b55760043567ffffffffffffffff81116101b5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82850301126101b55761070c610446565b9061071981600401610456565b825261072760248201610464565b6020830152604481013567ffffffffffffffff81116101b55784600461074f92840101610518565b6040830152606481013560608301526084810135608083015260a481013567ffffffffffffffff81116101b55784600461078b928401016104fa565b60a083015260c481013560c083015260e481013560e083015261010481013567ffffffffffffffff81116101b557600485916107c8930101610635565b610100820152916024359067ffffffffffffffff82116101b5576107ee91600401610221565b9091565b346101b5576108003661069a565b909161010081019261081b6108168551516115ad565b6115cd565b9160005b85518051821015610882579061087c61085761083d8360019561164b565b5173ffffffffffffffffffffffffffffffffffffffff1690565b610861838861164b565b9073ffffffffffffffffffffffffffffffffffffffff169052565b0161081f565b5050838386610897336108618351518561164b565b526108a3818484611c54565b50156108b55760405160018152602090f35b6108eb906040519384937ff58cc8b5000000000000000000000000000000000000000000000000000000008552600485016118a6565b0390fd5b346101b55760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557610926610192565b5061092f6101ba565b5060643567ffffffffffffffff81116101b557610950903690600401610221565b505060206040517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b346101b55760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043560243567ffffffffffffffff81116101b5576020916109d46109da923690600401610221565b916118cb565b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b346101b55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043567ffffffffffffffff81116101b5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126101b557610a87602091602435604435916004016119a0565b604051908152f35b7fffffffff000000000000000000000000000000000000000000000000000000008116036101b557565b346101b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576020610afe600435610af981610a8f565b611e39565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043567ffffffffffffffff81116101b557610b66903690600401610221565b9060243567ffffffffffffffff81116101b557610b8a610b94913690600401610221565b9190935a93611f6e565b91610ba86060840151608085015190612232565b610bb3828585611c54565b929015610bc5575061001c935061238b565b836108eb86926040519384937fa2b6d61b000000000000000000000000000000000000000000000000000000008552600485016118a6565b346101b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043530330361035a578015610c8c576020817f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf855604051908152a1005b7f4294d1270000000000000000000000000000000000000000000000000000000060005260046000fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557600435610cec81610a8f565b30330361035a5773ffffffffffffffffffffffffffffffffffffffff610d1182611e39565b1615610d775760407fffffffff000000000000000000000000000000000000000000000000000000007f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19216610d68600082612be3565b815190815260006020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f1c3812cc000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b60009103126101b557565b346101b55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760207fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf854604051908152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101b5576004359067ffffffffffffffff82116101b5576107ee91600401610221565b610e7f36610e2d565b9030330361035a57610e9561001c925a92611f6e565b90610e9f826126af565b9061238b565b346101b55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557610edc610192565b5060443567ffffffffffffffff81116101b557610efd903690600401610221565b505060206040517f8943ec02000000000000000000000000000000000000000000000000000000008152f35b346101b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576020610a87600435612743565b346101b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576040610fa1600435612789565b73ffffffffffffffffffffffffffffffffffffffff8351921682526020820152f35b346101b557610fd136610e2d565b9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001680156110b157330361108357303b156101b5576110579160009160405193849283927f6ea4457700000000000000000000000000000000000000000000000000000000845260048401611b41565b038183305af1801561107e5761106957005b80611078600061001c936103f4565b80610dc7565b611917565b7f1d6ddbf4000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7fd13d78350000000000000000000000000000000000000000000000000000000060005260046000fd5b346101b55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101b55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576020305473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346101b55760c06111b76000806111b13661069a565b91612851565b926111c383929361399a565b906040519586526020860152151560408501526060840152608083015260a0820152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043561121d81610a8f565b6112256101ba565b9030330361035a5773ffffffffffffffffffffffffffffffffffffffff61124b82611e39565b166112c5577f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19173ffffffffffffffffffffffffffffffffffffffff7fffffffff000000000000000000000000000000000000000000000000000000006040931691166112b88183612be3565b82519182526020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f5b4d6d6a000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b9181601f840112156101b55782359167ffffffffffffffff83116101b5576020808501948460051b0101116101b557565b346101b55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55761137d610192565b506113866101ba565b5060443567ffffffffffffffff81116101b5576113a7903690600401611315565b505060643567ffffffffffffffff81116101b5576113c9903690600401611315565b505060843567ffffffffffffffff81116101b5576113eb903690600401610221565b50506040517fbc197c81000000000000000000000000000000000000000000000000000000008152602090f35b346101b55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55761144f610192565b506114586101ba565b5060843567ffffffffffffffff81116101b557611479903690600401610221565b505060206040517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b346101b55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576004356114df6101ba565b604435916bffffffffffffffffffffffff83168093036101b55730330361035a578273ffffffffffffffffffffffffffffffffffffffff8361156a7febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1967fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606097881b161785612b9e565b6040519384521660208301526040820152a1005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90600182018092116115bb57565b61157e565b919082018092116115bb57565b906115d782610471565b6115e460405191826103f4565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06116128294610471565b0190602036910137565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805182101561165f5760209160051b010190565b61161c565b919082519283825260005b8481106116ae5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b8060208092840101518282860101520161166f565b9080602083519182815201916020808360051b8301019401926000915b8383106116ef57505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080611762604085015160e0604086015260e0850190611664565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152970193019301919392906116e0565b906020808351928381520192019060005b8181106117b75750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016117aa565b805160ff1682526105159160208281015115159082015261010061184161181b604085015161012060408601526101208501906116c3565b606085015160608501526080850151608085015260a085015184820360a0860152611664565b9260c081015160c084015260e081015160e0840152015190610100818403910152611799565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b916118bd61051594926040855260408501906117e3565b926020818503910152611867565b906118e892916118d9611dde565b906003825260e0820152611c54565b5015611912577f1626ba7e0000000000000000000000000000000000000000000000000000000090565b600090565b6040513d6000823e3d90fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101b5570180359067ffffffffffffffff82116101b5576020019181360383136101b557565b908160209103126101b5575161051581610a8f565b604090610515949281528160208201520191611867565b91909173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169182156110b1578233036110835780611ad2575b506020915080610100611a02920190611923565b92611a3a60405194859384937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611989565b0381305afa90811561107e577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091611aa3575b501603611a9e57600090565b600190565b611ac5915060203d602011611acb575b611abd81836103f4565b810190611974565b38611a92565b503d611ab3565b823b156101b5576040517fb760faf900000000000000000000000000000000000000000000000000000000815230600482015292600091849160249183915af190811561107e57602092611a0292611b2c575b50906119ee565b806110786000611b3b936103f4565b38611b25565b916020610515938181520191611867565b3d15611b7d573d90611b6382610489565b91611b7160405193846103f4565b82523d6000602084013e565b606090565b600436108015611b8f5750565b611bc5906000357fffffffff00000000000000000000000000000000000000000000000000000000811691611c17575b50611e39565b73ffffffffffffffffffffffffffffffffffffffff8116611be35750565b60008091604051368382378036810184815203915af4611c01611b52565b9015611c0f57602081519101f35b602081519101fd5b7fffffffff000000000000000000000000000000000000000000000000000000008092503660040360031b1b161638611bbf565b901561165f5790565b91907f800000000000000000000000000000000000000000000000000000000000000080611cab611c858585611c4b565b357fff000000000000000000000000000000000000000000000000000000000000001690565b1614611d0a576000918291611cbf94612851565b905091909192808210611cda575050611cd79061399a565b91565b7ffd41fcba0000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b5050611d15906126af565b90611d1f82612789565b42811115611dac575073ffffffffffffffffffffffffffffffffffffffff81168015159081611da1575b50611d55575060019190565b7f8945c3130000000000000000000000000000000000000000000000000000000060005260048390523360245273ffffffffffffffffffffffffffffffffffffffff1660445260646000fd5b905033141538611d49565b7ff95b6ab700000000000000000000000000000000000000000000000000000000600052600484905260245260446000fd5b60405190610120820182811067ffffffffffffffff8211176103d3576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b73ffffffffffffffffffffffffffffffffffffffff906040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a120845216604082015260408152611eb06060826103f4565b519020541690565b90611ec282610471565b611ecf60405191826103f4565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611efd8294610471565b019060005b828110611f0e57505050565b602090604051611f1d816103b7565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c082015282828501015201611f02565b909392938483116101b55784116101b5578101920390565b919091611f79611dde565b6000815292600190823560f81c827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8183160161221b5750600060608701525b6007611fc860ff831660011c90565b16806121ca575b5060108181160361219557506001925b611fe884611eb8565b92604087019384526000905b85821061200357505050505050565b8281013560f81c9060010190918160018085160361217357506120473061202b83895161164b565b519073ffffffffffffffffffffffffffffffffffffffff169052565b600280841614612153575b600480841614612105575b6008808416146120d2575b6120bb6120b560c0856120948a608061208b8860108060019c9d1614935161164b565b51019015159052565b6120ab8a60a061208b88602080871614935161164b565b1660061c60031690565b60ff1690565b60c06120c883895161164b565b5101520190611ff4565b6001916120bb906120b59060c0908781013590602001969060606120f7878d5161164b565b510152959450505050612068565b9061214d908481013560e81c9060030161214661212d61212584846115c0565b838a8a611f56565b9190604061213c888d5161164b565b51019236916104c3565b90526115c0565b9061205d565b9083810135906020019190602061216b83895161164b565b510152612052565b61219092508481013560601c90601401929061202b83895161164b565b612047565b6020908116036121b75761ffff918381013560f01c906002015b921692611fdf565b60ff918381013560f81c906001016121af565b61220e919385929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290608087015238611fcf565b80850135606090811c908801526014019250611fb9565b9061223c82612743565b8181036122c257509060017f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f8819201908160405160208101907f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8252836040820152604081526122ac6060826103f4565b51902055604080519182526020820192909252a1565b917f9b6514f40000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b61230e604092959493956060835260608301906117e3565b9460208201520152565b9261051596959260c09592855260208501526040840152606083015260808201528160a08201520190611664565b6105159392606092825260208201528160408201520190611664565b61237861051594926060835260608301906117e3565b9260208201526040818403910152611664565b916000604082019384515190825b8281106123aa575b50505050505050565b6123b581885161164b565b51936123c460a0860151151590565b806126a7575b61266757506000936060810151801580158061265e575b6126265784906123f46080850151151590565b156125e05761249f9261241b855173ffffffffffffffffffffffffffffffffffffffff1690565b91156125da57505a905b61249a8b61246e60608d01516040890151908c8b604051998a967f4c4e814c00000000000000000000000000000000000000000000000000000000602089015260248801612318565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018552846103f4565b612b71565b156124e2575b506040805187815260208101839052600192917f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a91a15b01612399565b60c001805115612591576001815114612552575160021461250357386124a5565b9493505050507fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b9250612543612537612b83565b60405193849384612346565b0390a1388080808080806123a1565b50846108eb61255f612b83565b6040519384937f7f6b0bb100000000000000000000000000000000000000000000000000000000855260048501612362565b509250600180937f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d6125d26125c4612b83565b604051918291858c84612346565b0390a16124dc565b90612425565b835161261b93925073ffffffffffffffffffffffffffffffffffffffff169160208501519160001461262057505a905b604085015192612b5f565b61249f565b90612610565b83886108eb5a6040519384937f21395274000000000000000000000000000000000000000000000000000000008552600485016122f6565b50815a106123e1565b6040805188815260208101849052919550600192917f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b91819081016125d2565b5080156123ca565b61271161273d6126cf6126c9602085015115153090612c22565b93612d1d565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826103f4565b51902090565b60405160208101917f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83526040820152604081526127826060826103f4565b5190205490565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e8683526040820152604081526127c86060826103f4565b51902054906bffffffffffffffffffffffff8260601c921690565b604051906127f0826103d8565b60006020838281520152565b908160409103126101b557602060405191612816836103d8565b805183520151602082015290565b60409073ffffffffffffffffffffffffffffffffffffffff61051594931681528160208201520190611664565b909491939291853560f81c6001909381908761286b6127e3565b9360408089161480612b41575b612a44575b505050600180861614612a1e5760028581161460208501526007600286901c1688820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691019080969181966020166128ed9060051c90565b6128f6906115ad565b8a820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101959098899a81612942846126af565b98899361294e93611f56565b9161295893613134565b909861296c91600052602052604060002090565b9061297f91600052602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff166129a891600052602052604060002090565b94815190868215159283612a13575b505081612a04575b506129c75750565b6040517fccbb534f000000000000000000000000000000000000000000000000000000008152815160048201526020909101516024820152604490fd5b905060208201511015386129bf565b1415915086386129b7565b86612a399792949550612a319398611f56565b939092612f12565b919394909293929190565b8a81013560601c985060140192509087908a90849015612a68575b5082915061287d565b60038101955073ffffffffffffffffffffffffffffffffffffffff945081013560e81c92604092612aeb929091612ab691612aaf918990612aa989836115c0565b92611f56565b36916104c3565b83519586809481937fccce3bc80000000000000000000000000000000000000000000000000000000083523060048401612824565b0392165afa801561107e57612b0992600091612b12575b50926115c0565b86388981612a5f565b612b34915060403d604011612b3a575b612b2c81836103f4565b8101906127fc565b38612b02565b503d612b22565b5073ffffffffffffffffffffffffffffffffffffffff891615612878565b9160009391849360208451940192f190565b9160009291839260208351930191f490565b3d90604051916020818401016040528083526000602084013e565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e868352604082015260408152612bdd6060826103f4565b51902055565b60405160208101917fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1208352604082015260408152612bdd6060826103f4565b15612cd2576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a0815261273d60c0826103f4565b4690612c2b565b805160209091019060005b818110612cf15750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101612ce4565b610100810151604051612d3881612711602082018095612cd9565b51902090612d47815160ff1690565b60ff811680612dc05750509061273d612d6360408401516139fd565b9261271160806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b60018103612e1e57505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4669381019384529081019190915260608101929092529061273d8160808101612711565b60028103612e7457505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e46020820190815291810192909252606082019290925261273d8160808101612711565b600303612ec8575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4666020820190815291810192909252606082019290925261273d8160808101612711565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b9061230e9060409396959496606084526060840191611867565b9194929092600095600095600095600095600095612f2e611dde565b60028152937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9460005b828110612f8557505050505050508051151580612f77575b6129c75750565b506020810151841115612f70565b600381019d50959b5093995091975092909190612fa9908b9085013560e81c6115c0565b958a60008489036130ed575089915b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c036130bd5750906001612ff289612ff9948789611f56565b908b612851565b9c939c9b929b9a919a99909a9b9d8e9d9e8f905b106130775750928b88511461306e575b808b101561303c57508a60c08501528992959295949194939093612f58565b7f37daf62b0000000000000000000000000000000000000000000000000000000060005260048b905260245260446000fd5b6000885261301d565b8d8f6108eb61308885858c8e611f56565b9390926040519485947fb006aba000000000000000000000000000000000000000000000000000000000865260048601612ef8565b9798999a9160016130d38b6130da94888a611f56565b9086612851565b50929d919c909b929a9092918e8e61300d565b91612fb8565b73ffffffffffffffffffffffffffffffffffffffff610515959360609383521660208201528160408201520191611867565b908160209103126101b5575190565b9391909360009460009460005b81811061314f575050505050565b8481013560f881901c9860019092019788979692909160fc1c9889156139335750600189146138f357600289146137365760038914613707576004891461368657600689146135e6576005891461359857600789146134d1576008891461347b576009891461335257600a89146131ef577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b90919293949596975060038916978815613341575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691019081019081613267918787611f56565b6040517f898bd9210000000000000000000000000000000000000000000000000000000081529391849161329f918a60048501611989565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa91821561107e576132e29360009361330e575b5060ff909a168091019a613cc9565b90801561330857906132fc91600052602052604060002090565b955b9392919093613141565b506132fc565b60ff9193506133339060203d811161333a575b61332b81836103f4565b810190613125565b92906132d3565b503d613321565b8084013560f81c9850600101613204565b9091929394959697506003891697881561346a575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190810190816133ca918787611f56565b6040517f13792a4a00000000000000000000000000000000000000000000000000000000815293918491613402918b600485016118a6565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa91821561107e576134449360009361330e575060ff909a168091019a613cc9565b908015613464579061345e91600052602052604060002090565b956132fe565b5061345e565b8084013560f81c9850600101613367565b98506020870197509495939492939192909182013561349986613c70565b81146134a9575b61344490613c8a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506134a0565b975090919293949597600f16968715613586575b602060006134f76135649a9b86613b38565b9c9092918a60405161353a816127118a82019485603c917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008252601c8201520190565b51902092604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa1561107e576134449060ff6000519a1680910199613b7b565b600189019883013560f81c97506134e5565b9850602087019750949593949293919290918201358085146135be575b61344490613c31565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506135b5565b989091929394959662ffffff98506136086120b5600c8416603f9060021c1690565b918215613672575b6003168015613661575b9081906136459061363d908781013560e81c906003019c168c01809c8989611f56565b90898b613134565b911115613658575b906134449291613be6565b9982019961364d565b50600281019084013560f01c61361a565b8482013560f81c9250600190910190613610565b9750976136dc6136e9929394959697600f6136f193169085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290830180938686611f56565b908688613134565b9061345e92980198600052602052604060002090565b985096509394929391929091908082013590602001968015613464579061345e91600052602052604060002090565b909192939495969750600389169788156138e2575b8084013560601c996137aa916014019061376a9060021c6003166120b5565b9085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9081019061380e60208c6137c085858b8b611f56565b919073ffffffffffffffffffffffffffffffffffffffff8c604051968795869485937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611989565b0392165afa90811561107e577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000916000916138c4575b50160361388057509060ff61344492991680910199613b7b565b6108eb6138918c9389938989611f56565b906040519485947fb2fed7ae000000000000000000000000000000000000000000000000000000008652600486016130f3565b6138dc915060203d8111611acb57611abd81836103f4565b38613866565b8381013560f81c985060010161374b565b98600f91929394959697985016968715613922575b60148101976134449160ff9091169084013560601c613b7b565b8281013560f81c9750600101613908565b98509091929394959698600f16978815613985575b506020600061395b6135649a9b86613b38565b9c90916040519384938c859094939260ff6060936080840197845216602083015260408201520152565b60018101995083013560f81c97506020613948565b80151590816139a7575090565b90507fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8541490565b805160209091019060005b8181106139e75750505090565b82518452602093840193909201916001016139da565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0613a43613a2d83610471565b92613a3b60405194856103f4565b808452610471565b0136602083013760005b8351811015613b1f5780613a636001928661164b565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152613b0b610120826103f4565b519020613b18828561164b565b5201613a4d565b5090915060405161273d816127116020820180956139cf565b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff81116115bb5791565b90604051907fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208301937f53657175656e6365207369676e65723a0a000000000000000000000000000000855260601b16603183015260458201526045815261273d6065826103f4565b916040519160208301937f53657175656e6365206e657374656420636f6e6669673a0a000000000000000085526038840152605883015260788201526078815261273d6098826103f4565b60405160208101917f53657175656e636520737461746963206469676573743a0a0000000000000000835260388201526038815261273d6058826103f4565b61271161273d6126cf6126c9600060208601511515612c22565b60405160208101917f53657175656e636520616e792061646472657373207375626469676573743a0a835260408201526040815261273d6060826103f4565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e63652073617069656e7420636f6e6669673a0a00000000000000865260601b166039840152604d830152606d820152606d815261273d608d826103f456fea264697066735822122071c846bfb3a07ed1d03bb0cecee955d8b864be4c4d91b0f9a960528ecc060e8964736f6c634300081c003360808060405234601557610f6d908161001b8239f35b600080fdfe608060405261000c610330565b60008082523560f81c6001908160018083160361028a5750600060608401525b600761003b60ff831660011c90565b168061023d575b5060108181160361020c57506001905b61005b826103a3565b90604084019182526000905b838210610083576100818561007b81610540565b906108e0565b005b803560f81c906001019091816001808516036101ec57506100c5306100a9838751610441565b519073ffffffffffffffffffffffffffffffffffffffff169052565b6002808416146101ce575b600480841614610183575b60088084161461014e575b61013761013160c0856101116010806001989916146080610108888c51610441565b51019015159052565b61012760208083161460a0610108888c51610441565b1660061c60031690565b60ff1690565b60c0610144838751610441565b5101520190610067565b61013761013160c06101666001959060208235920190565b96906060610175878b51610441565b5101529594505050506100e6565b906101c890803560e81c906003016101c16101a86101a18484610484565b83366104c0565b919060406101b7888b51610441565b51019236916104db565b9052610484565b906100db565b90803590602001919060206101e4838751610441565b5101526100d0565b6102079250803560601c9060140192906100a9838751610441565b6100c5565b60209081160361022c5761ffff90803560f01c906002015b911690610052565b60ff90803560f81c90600101610224565b61027d919291908060031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b0190843590610100031c16920190565b9190608084015238610042565b8035606090811c90850152601401915061002c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff8211176102ea57604052565b61029f565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176102ea57604052565b60405190610120820182811067ffffffffffffffff8211176102ea576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b67ffffffffffffffff81116102ea5760051b60200190565b906103ad8261038b565b6103ba60405191826102ef565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06103e8829461038b565b019060005b8281106103f957505050565b602090604051610408816102ce565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c0820152828285010152016103ed565b80518210156104555760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9190820180921161049157565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9291928382116104d65783116104d65780920390565b600080fd5b92919267ffffffffffffffff82116102ea576040519161052360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601846102ef565b8294818452818301116104d6578281602093846000960137010152565b6020810151156106645761063261065e6105f060005b60405160208101917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408301527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606083015260808201523060a082015260a081526105e760c0826102ef565b51902093610bc6565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826102ef565b51902090565b61063261065e6105f046610556565b919082519283825260005b8481106106bd5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b8060208092840101518282860101520161067e565b9080602083519182815201916020808360051b8301019401926000915b8383106106fe57505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080610771604085015160e0604086015260e0850190610673565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152970193019301919392906106ef565b906020808351928381520192019060005b8181106107c65750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016107b9565b805160ff1682526108769160208281015115159082015261010061085061082a604085015161012060408601526101208501906106d2565b606085015160608501526080850151608085015260a085015184820360a0860152610673565b9260c081015160c084015260e081015160e08401520151906101008184039101526107a8565b90565b610891604092959493956060835260608301906107f2565b9460208201520152565b6108769392606092825260208201528160408201520190610673565b6108cd61087694926060835260608301906107f2565b9260208201526040818403910152610673565b90600091604081019283515193815b8581106108ff575b505050505050565b61090a818351610441565b519261091960a0850151151590565b80610b7a575b610b3a575060009260608101518015801580610b31575b610af9576080830151610acc5761098a9161098691610969855173ffffffffffffffffffffffffffffffffffffffff1690565b91602086015191600014610ac657505a905b604086015192610da1565b1590565b6109cc575b506040805186815260208101839052600192917f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a91a15b016108ef565b60c001805115610a7d576001815114610a3a57516002146109ed573861098f565b93925050507fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b9250610a2c610a20610db3565b6040519384938461089b565b0390a13880808080806108f7565b5083610a79610a47610db3565b6040519384937f7f6b0bb1000000000000000000000000000000000000000000000000000000008552600485016108b7565b0390fd5b509150600180927f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d610abe610ab0610db3565b604051918291858b8461089b565b0390a16109c6565b9061097b565b7f230d1ccc0000000000000000000000000000000000000000000000000000000086526004849052602486fd5b8387610a795a6040519384937f2139527400000000000000000000000000000000000000000000000000000000855260048501610879565b50815a10610936565b6040805187815260208101849052919450600192917f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b9181908101610abe565b50801561091f565b805160209091019060005b818110610b9a5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101610b8d565b610100810151604051610be181610632602082018095610b82565b51902090610bf0815160ff1690565b60ff811680610c695750509061065e610c0c6040840151610dfc565b9261063260806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b60018103610cc757505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4669381019384529081019190915260608101929092529061065e8160808101610632565b60028103610d1d57505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e46020820190815291810192909252606082019290925261065e8160808101610632565b600303610d71575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4666020820190815291810192909252606082019290925261065e8160808101610632565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b9160009391849360208451940192f190565b3d90604051916020818401016040528083526000602084013e565b805160209091019060005b818110610de65750505090565b8251845260209384019390920191600101610dd9565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610e42610e2c8361038b565b92610e3a60405194856102ef565b80845261038b565b0136602083013760005b8351811015610f1e5780610e6260019286610441565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152610f0a610120826102ef565b519020610f178285610441565b5201610e4c565b5090915060405161065e81610632602082018095610dce56fea2646970667358221220baf48a03c446c575132553e62013c6320b5d90a1ba275593a31ee1589046bd1464736f6c634300081c0033608080604052346015576134c3908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c806313792a4a1461006757806323b3713e14610062578063313dade71461005d57806342de1418146100585763f916f3b21461005357600080fd5b610623565b6105a6565b6103df565b610184565b3461013a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013a5760043567ffffffffffffffff811161013a576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011261013a5760243567ffffffffffffffff811161013a573660238201121561013a57806004013567ffffffffffffffff811161013a57366024828401011161013a57610136926024610126930190600401610950565b6040519081529081906020820190565b0390f35b600080fd5b73ffffffffffffffffffffffffffffffffffffffff81160361013a57565b6044359061016a8261013f565b565b6064359061016a8261013f565b359061016a8261013f565b3461013a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013a576004356101bf8161013f565b73ffffffffffffffffffffffffffffffffffffffff602435911660005260006020526040600020906000526020526020604060002054604051908152f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff82111761024857604052565b6101fd565b60a0810190811067ffffffffffffffff82111761024857604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761024857604052565b6040519061016a604083610269565b6040519061016a60e083610269565b67ffffffffffffffff81116102485760051b60200190565b8015150361013a57565b359061016a826102e0565b908160e091031261013a5790565b81601f8201121561013a5780359061031a826102c8565b926103286040519485610269565b82845260208085019360061b8301019181831161013a57602001925b828410610352575050505090565b60408483031261013a576020604091825161036c8161022c565b863581528287013583820152815201930192610344565b906020808351928381520192019060005b8181106103a15750505090565b8251805185526020908101518186015260409094019390920191600101610394565b6040906103dc9392151581528160208201520190610383565b90565b3461013a5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013a5760043567ffffffffffffffff811161013a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011261013a57604051906104598261022c565b80600401356104678161013f565b825260248101359067ffffffffffffffff821161013a57013660238201121561013a576004810135610498816102c8565b916104a66040519384610269565b8183526020600460a08286019402830101019036821161013a57602401915b81831061054057505050602082015260243567ffffffffffffffff811161013a576104f49036906004016102f5565b906104fd61015d565b61050561016c565b906084359367ffffffffffffffff851161013a5761052a610530953690600401610303565b93610f74565b90610136604051928392836103c3565b60a08336031261013a57604051906105578261024d565b8335610562816102e0565b8252602084013590600482101561013a57826020928360a09501526040860135604082015260608601356060820152608086013560808201528152019201916104c5565b3461013a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013a5760043567ffffffffffffffff811161013a573660238201121561013a57806004013567ffffffffffffffff811161013a573660248260061b8401011161013a57602461062192016112bd565b005b3461013a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013a57602060405173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8152f35b3560ff8116810361013a5790565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561013a570180359067ffffffffffffffff821161013a57602001918160051b3603831361013a57565b604051906060820182811067ffffffffffffffff821117610248576040526000604083828152606060208201520152565b9061070d826102c8565b61071a6040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061074882946102c8565b019060005b82811061075957505050565b6020906107646106d2565b8282850101520161074d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b91908110156107df5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff218136030182121561013a570190565b610770565b356103dc816102e0565b80518210156107df5760209160051b010190565b6040519061080f8261022c565b60006020838281520152565b6040519061082a602083610269565b600080835282815b82811061083e57505050565b602090610849610802565b82828501015201610832565b9061085f826102c8565b61086c6040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061089a82946102c8565b019060005b8281106108ab57505050565b6020906108b6610802565b8282850101520161089f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461091e5760010190565b6108c2565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821161091e57565b919060ff61095d84610670565b16610dd7576040830191610971838561067e565b905015610dad57610985918495939561159c565b9161099a610993858361067e565b9050610703565b9060009460808501955b6109ae828461067e565b9050811015610cde576109cb816109c5848661067e565b9061079f565b6109d7608082016107e4565b610cb4576109e68289516107ee565b51805115610a305760019291816060610a196020610a2a95015173ffffffffffffffffffffffffffffffffffffffff1690565b9101519060408b0151923390611fe2565b016109a4565b91959392969050610a3f6106d2565b96602083019460005b8751811015610c9357610a95610a7c610a61838b6107ee565b515173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b15610b5c57610aa7610a61828a6107ee565b73ffffffffffffffffffffffffffffffffffffffff610add610a7c8a5173ffffffffffffffffffffffffffffffffffffffff1690565b911614610aec57600101610a48565b9097929850610b45610b569295968a600196610b3c60406060610b30610b138f8a906107ee565b51965b5173ffffffffffffffffffffffffffffffffffffffff1690565b94015192015160ff1690565b9133888c6119c6565b610b4f82896107ee565b52866107ee565b50610a2a565b90979298610b45908a600196610b3c60406060610b308d610bb4610b569b9e9f610b9a905173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff168952565b610bbc61081b565b6020890152610c8a610be2825173ffffffffffffffffffffffffffffffffffffffff1690565b855173ffffffffffffffffffffffffffffffffffffffff9091166020820190815273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee604083015290610c5381606081015b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610269565b5190203373ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000209060005260205260406000205490565b84890152610b16565b90979298610b45908a600196610b3c60406060610b30610b56999c9d610b16565b7faa25f2ad0000000000000000000000000000000000000000000000000000000060005260046000fd5b509392945090610cee8151610703565b9260009260005b8351811015610d70576020610d0a82866107ee565b5101515115801590610d59575b610d24575b600101610cf5565b93610d51600191610d3587876107ee565b51610d40828a6107ee565b52610d4b81896107ee565b506108f1565b949050610d1c565b506040610d6682866107ee565b5101511515610d17565b509094610da49250610da994938452610d9e610d97610d8f838561067e565b93909461067e565b9050610923565b9161079f565b612278565b5190565b7f542f0af50000000000000000000000000000000000000000000000000000000060005260046000fd5b7f720521200000000000000000000000000000000000000000000000000000000060005260046000fd5b356103dc8161013f565b906001820180921161091e57565b9190820180921161091e57565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561013a570180359067ffffffffffffffff821161013a5760200191813603831361013a57565b60041115610e8157565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9392919073ffffffffffffffffffffffffffffffffffffffff16845260606020850152602060a085019173ffffffffffffffffffffffffffffffffffffffff81511660608701520151604060808601528051809252602060c0860191019160005b818110610f2357505060409150930152565b909183518051151582526020810151906004821015610e815782608060a092602094856001970152604081015160408401526060810151606084015201516080820152019401910192919092610f11565b949091929394610f98815173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff610fb9610a7c86610e01565b9116036112a257855192610fdc610fd7602084019586515190610e19565b610855565b9460005b88518110156110135780610ff66001928b6107ee565b51611001828a6107ee565b5261100c81896107ee565b5001610fe0565b50909294919395875160005b885180518210156112915781611034916107ee565b516110586110456040890189610e26565b5060608301519081013591602090910190565b506080820151169061106a8151151590565b61113d575b60208101805161107e81610e77565b61108781610e77565b6110ad5750604001510361109f576001905b0161101f565b506000989750505050505050565b600381516110ba81610e77565b6110c381610e77565b036110da5750604001511061109f57600190611099565b600181516110e781610e77565b6110f081610e77565b036111075750604001511461109f57600190611099565b6002905161111481610e77565b61111d81610e77565b1461112d575b5050600190611099565b604001511161109f573880611123565b9691989795929093998a610c276111608c6040519283918c602084019687610eb0565b5190209660009361116f610802565b9c60005b87518110156112795761118681896107ee565b51511561122c578a611198828a6107ee565b5151146111a757600101611173565b6020949e50879a9198939c9d96506111c5906111da939c96986107ee565b519284840151915b82156111e5575b50610e19565b91829101529061106f565b6112249192506112158b73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b90600052602052604060002090565b5490386111d4565b6020949e506111da929b95509761127389899c99959e9f98939a61126d906112526102aa565b978c895260008a8a01528861126783836107ee565b526107ee565b50610e0b565b976111cd565b5096946020939d929b9c956111da929b95979a6111cd565b505083525060019650909450505050565b509250505060009190565b91908110156107df5760061b0190565b60005b8281106112cc57505050565b60206112d98285856112ad565b013561131e6112e98386866112ad565b353373ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000209060005260205260406000205490565b1161139857807f42063b8d32ac0a88f94053143bb30a789b3d5dfabb27d6c8a54e23d4fef30851606061135460019487876112ad565b3560206113628589896112ad565b0135336000526000602052604060002082600052602052806040600020556040519133835260208301526040820152a1016112c0565b7e2a700a0000000000000000000000000000000000000000000000000000000060005260046000fd5b604051906113ce8261024d565b6060608083600081526000602082015282604082015282808201520152565b9060041161013a5790600490565b9093929384831161013a57841161013a578101920390565b604051906114208261022c565b6000602083606081520152565b6040519060c0820182811067ffffffffffffffff8211176102485760405281600081526000602082015260006040820152600060608201526060608082015260a0611476611413565b910152565b90611485826102c8565b6114926040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06114c082946102c8565b019060005b8281106114d157505050565b6020906114dc61142d565b828285010152016114c5565b6040513d6000823e3d90fd5b604051906080820182811067ffffffffffffffff8211176102485760405281600081526000602082015260006040820152606061147661142d565b90611539826102c8565b6115466040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061157482946102c8565b019060005b82811061158557505050565b6020906115906114f4565b82828501015201611579565b909162ffffff926115ab6113c1565b50600091813560e81c60039516906115e26115da6115d46115cc858a610e19565b8985886113fb565b90612579565b939097610e19565b602087019473ffffffffffffffffffffffffffffffffffffffff61161a875173ffffffffffffffffffffffffffffffffffffffff1690565b161561190a5750600181019392919083013560f81c906116398261147b565b9560005b83811061183e5750505015159081611835575b5061180b576040840193611664858261067e565b9490506116708561152f565b95608088019687526000945b86861061168e57505050505050505090565b6116aa6116996114f4565b918681013560f81c91600190910190565b608082161515835296908251156117eb57607f1684518110156117c15760006116e961172b996116dc602094896107ee565b5160608701525b89612ab4565b9b9092916117048b6116ff896109c58d8461067e565b612c3b565b92604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa156117bc57611766610a7c600051610b166020860191829073ffffffffffffffffffffffffffffffffffffffff169052565b156117875761177f816001938b519061126783836107ee565b50019461167c565b7fc1e84ed6000000000000000000000000000000000000000000000000000000006000526117b86024906000600452565b6000fd5b6114e8565b7fbd8ba84d0000000000000000000000000000000000000000000000000000000060005260046000fd5b60006116e961172b99611806602094604088019060ff169052565b6116e3565b7feb6252040000000000000000000000000000000000000000000000000000000060005260046000fd5b90501538611650565b611866906020600061185d6118739a61185561142d565b50878b6129fe565b8a959195612ab4565b9c90929161170488612af7565b838052039060015afa156117bc5760005173ffffffffffffffffffffffffffffffffffffffff6118ba610a7c865173ffffffffffffffffffffffffffffffffffffffff1690565b9116036118e0576001916118ce828b6107ee565b526118d9818a6107ee565b500161163d565b7f9e5c658b0000000000000000000000000000000000000000000000000000000060005260046000fd5b807f9e5c658b0000000000000000000000000000000000000000000000000000000060049252fd5b6040519061193f8261024d565b60606080836000815260006020820152600060408201526000838201520152565b919091357fffffffff0000000000000000000000000000000000000000000000000000000081169260048110611994575050565b7fffffffff00000000000000000000000000000000000000000000000000000000929350829060040360031b1b161690565b939594909291926119d56106d2565b506119de611932565b9660005b8151811015611d45576119f8610a6182846107ee565b73ffffffffffffffffffffffffffffffffffffffff808716911614611a1f576001016119e2565b90611a3092939495969798506107ee565b51945b73ffffffffffffffffffffffffffffffffffffffff611a66875173ffffffffffffffffffffffffffffffffffffffff1690565b1615611d0157602086015180151580611cf7575b611cca5750606086015167ffffffffffffffff1680151580611cb7575b611c805750906109c5826040611aae94019061067e565b91611abb608084016107e4565b610cb457611ac883610e01565b73ffffffffffffffffffffffffffffffffffffffff163014611bce576080850160ff815151931692831015611ba457611b1592611b0591516107ee565b5190602087019484865193610f74565b9015611b7a5760209252013580611b63575b5060408083015191015110611b395790565b7faa7feadc0000000000000000000000000000000000000000000000000000000060005260046000fd5b611b7260408401918251610e19565b905238611b27565b7f868a64de0000000000000000000000000000000000000000000000000000000060005260046000fd5b7f3f904dc00000000000000000000000000000000000000000000000000000000060005260046000fd5b50509150506020611bf4611bee611be86040850185610e26565b906113ed565b90611960565b9101351590811591611c33575b50611c095790565b7f540733ea0000000000000000000000000000000000000000000000000000000060005260046000fd5b7f42de14180000000000000000000000000000000000000000000000000000000091507fffffffff0000000000000000000000000000000000000000000000000000000016141538611c01565b7fb1bbfdd50000000000000000000000000000000000000000000000000000000060005267ffffffffffffffff1660045260246000fd5b5067ffffffffffffffff81164211611a97565b7f331003b30000000000000000000000000000000000000000000000000000000060005260045260246000fd5b5046811415611a7a565b7fc1e84ed60000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff841660045260246000fd5b505090919293959495611a33565b9081602091031261013a575190565b60005b838110611d755750506000910152565b8181015183820152602001611d65565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093611dc181518092818752878088019101611d62565b0116010190565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b9073ffffffffffffffffffffffffffffffffffffffff8235611e288161013f565b1681526020820135602082015260408201357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18336030181121561013a57820160208135910167ffffffffffffffff821161013a57813603811361013a57611ea060c09291839260e0604087015260e0860191611dc8565b9360608101356060850152611ec3611eba608083016102ea565b15156080860152565b611edb611ed260a083016102ea565b151560a0860152565b013591015290565b73ffffffffffffffffffffffffffffffffffffffff6103dc94921681526060602082015273ffffffffffffffffffffffffffffffffffffffff83511660608201527fffffffff000000000000000000000000000000000000000000000000000000006020840151166080820152604083015160a0820152606083015160c082015260a0611f80608085015160c060e0850152610120840190611d85565b930151927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa082820301610100830152602067ffffffffffffffff81611fce8751604086526040860190611d85565b960151169101526040818403910152611e07565b92939091612007610a7c865173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff8216036121bf5761202f608085016107e4565b610cb45761203d8282612d8a565b61217c57506120549061204f84610e01565b612d8a565b61212e576020820135611b3957602082612076610a7c610a7c6120ac96610e01565b60405180809681947f9d043a66000000000000000000000000000000000000000000000000000000008352898860048501611ee3565b03915afa9182156117bc576000926120fb575b506120ca9192612e55565b036120d157565b7f0881ad5d0000000000000000000000000000000000000000000000000000000060005260046000fd5b6120ca92506121219060203d602011612127575b6121198183610269565b810190611d53565b916120bf565b503d61210f565b6117b861213a83610e01565b7fd33f19e70000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff16600452602490565b7fd33f19e70000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff1660045260246000fd5b7fc1e84ed60000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff1660045260246000fd5b9060206103dc928181520190610383565b92919267ffffffffffffffff8211610248576040519161225b601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200184610269565b82948184528183011161013a578281602093846000960137010152565b908051612283575050565b61228c82610e01565b73ffffffffffffffffffffffffffffffffffffffff1630148015906124ae575b61139857600092835b825185101561230a576122d89060206122ce87866107ee565b5101515190610e19565b9360406122e582856107ee565b5101516122f6575b600101936122b5565b936123026001916108f1565b9490506122ed565b61231691939450610855565b60009081935b83518510156124435760005b602061233487876107ee565b51015151811015612381578061237a61235d60019360206123558b8b6107ee565b5101516107ee565b5195612368816108f1565b9661237382886107ee565b52856107ee565b5001612328565b509493600190604061239382876107ee565b5101516123a3575b01939461231c565b61243d6123b3610a6183886107ee565b6040516123ff81610c27602082019485602073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee9193929373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b51902094604061240f84896107ee565b51015161241a6102aa565b968752602087015261242b816108f1565b9561243682876107ee565b52846107ee565b5061239b565b9493506124a09250612499915060405161248b81610c2760208201947f42de141800000000000000000000000000000000000000000000000000000000865260248301612202565b519020926040810190610e26565b3691612213565b602081519101200361139857565b50600160c083013514156122ac565b906124c7826102c8565b6124d46040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061250282946102c8565b019060005b82811061251357505050565b60209061251e611932565b82828501015201612507565b90612534826102c8565b6125416040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061256f82946102c8565b0190602036910137565b916125826113c1565b60009384908190612595605e87046124bd565b91606085019283525b8681106125ae5750505152929150565b8181013560fc81901c97916001019060f81c81891561294f57506001891461291d576002891461277857600389146126ad575060048814612618577f0ad9979000000000000000000000000000000000000000000000000000000000600052600488905260246000fd5b90919293949596506020860173ffffffffffffffffffffffffffffffffffffffff612657825173ffffffffffffffffffffffffffffffffffffffff1690565b166118e0578382013560601c815260149091019061267d9061267890610b16565b613086565b865180156126a7579061269891600052602052604060002090565b86525b9594939291909561259e565b50612698565b9890919293949596975061180b57600f60019816600f8114612767575b81906126d58161252a565b604089019081528a60005b83811061272857505050506126fa826127009285876113fb565b90613012565b86518015612722579061271b91600052602052604060002090565b865261269b565b5061271b565b61275f958881013560601c9060140196906127448386516107ee565b9073ffffffffffffffffffffffffffffffffffffffff169052565b018b906126e0565b50600281019083013560f01c6126ca565b6127db9698506127d36127e492600f6115d4939c96979a95989c169087929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b979088610e19565b809787876113fb565b93909593612906575b6020860173ffffffffffffffffffffffffffffffffffffffff612824825173ffffffffffffffffffffffffffffffffffffffff1690565b1661289c575b5060005b6060870151805182101561286b579061286461284c826001946107ee565b519b8a51612859826108f1565b9d61126783836107ee565b500161282e565b5050929096959391979486518015156000146128955761271b915190600052602052604060002090565b505161271b565b602089016128c1610a7c825173ffffffffffffffffffffffffffffffffffffffff1690565b6118e0576128e6612900925173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff169052565b3861282a565b9161180b57600191604086015160408901526127ed565b508551969750949593949293919290916020820191840135908015612722579061271b91600052602052604060002090565b92939495969798505050612961611932565b8184018035606090811c8352601482013560208401526034820135604084015260549091013560c01c908201529461299d605c83018486612f07565b80939160808901526129b09185876113fb565b6129b991612fbd565b87516129f292919080156129f857906129da91600052602052604060002090565b885285516129e7826108f1565b9761126783836107ee565b5061269b565b506129da565b612aa991939293612aa362ffffff612a7e6018612a1961142d565b987fffffffff000000000000000000000000000000000000000000000000000000006014888301803560601c8d5201351660208b01520160208682013591019060408a015260208682013591019060608a01528560039092919283013560e81c920190565b911690612a99612499612a918484610e19565b8387896113fb565b6080890152610e19565b916130ea565b929060a08201529190565b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff811161091e5791565b73ffffffffffffffffffffffffffffffffffffffff81511690612c1a7fffffffff00000000000000000000000000000000000000000000000000000000602083015116610c277fffffff0000000000000000000000000000000000000000000000000000000000604085015194606081015190608081015191612c096008602360a062ffffff87511695015180517fffffffffffffffff00000000000000000000000000000000000000000000000060208251930151916040519a8b9460e81b166020850152612bd08151809260208888019101611d62565b83019160c01b168382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8810187520185610269565b604051978896602088019a8b613135565b51902090565b9080601f8301121561013a578160206103dc93359101612213565b906020810135612c4a816102e0565b15612d1a576000915b608060608301359201359160e08236031261013a57612c706102b9565b91612c7a81610179565b83526020810135602084015260408101359067ffffffffffffffff821161013a57612c1a9360c0612cf292612cb5610c279536908301612c20565b604084015260608101356060840152612cd0608082016102ea565b6080840152612ce160a082016102ea565b60a0840152013560c08201526131ed565b6040519485936020850197889290916080949284526020840152604083015260608201520190565b4691612c53565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821360011661091e57565b906001820191600060018412911290801582169115161761091e57565b9190916000838201938412911290801582169115161761091e57565b600082517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811360011661091e57905b81811315612dce5750505050600090565b808203600082128382128116908483139015161761091e57612df4906002900582612d6e565b90612e02610b1683876107ee565b73ffffffffffffffffffffffffffffffffffffffff8581169116808203612e2f5750505050505050600190565b1015612e445750612e3f90612d51565b612dbd565b9150612e4f90612d21565b90612dbd565b9060405160208101907f616363657074496d706c69636974526571756573740000000000000000000000825260158152612e90603582610269565b5190209160406060820151910151907fffffffffffffffffffffffffffffffffffffffff000000000000000000000000604051936020850195865260601b1660408401526054830152607482015260748152612c1a609482610269565b60405190612efa8261022c565b6060602083600081520152565b60018301939281013560f81c612f1c816102c8565b92612f2a6040519485610269565b8184527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0612f57836102c8565b0160005b818110612f9e5750506000925b828410612f7757505050509190565b90919295612f88600191848461333f565b9790612f9482886107ee565b5201929190612f68565b602090612fad95939495612eed565b8282890101520193929193612f5b565b90612c1a60016020926040519381859282840197600089526021850137820101828101600081525003017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610269565b90612c1a600160209260405193818592828401977f030000000000000000000000000000000000000000000000000000000000000089526021850137820101828101600081525003017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610269565b6040517fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208201927f0400000000000000000000000000000000000000000000000000000000000000845260601b16602182015260158152612c1a603582610269565b92916130f4611413565b9060038101908581013560e81c0194600386019182811161091e5761249960039361312292600b97856113fb565b83528501013560c01c6020820152920190565b9390927fffffffff00000000000000000000000000000000000000000000000000000000605b989796937fffffffffffffffffffffffffffffffffffffffff0000000000000000000000007fffffff00000000000000000000000000000000000000000000000000000000009660601b1687521660148601526018850152603884015260e81b1660588201526131d48251809360208785019101611d62565b016131e88251809360208685019101611d62565b010190565b73ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152612c1a61012082610269565b9061329e826102c8565b6132ab6040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06132d982946102c8565b019060005b8281106132ea57505050565b6020906040516132f98161024d565b60008152600083820152600060408201526000606082015260006080820152828285010152016132de565b60ff166004811015610e815790565b6004821015610e815752565b60ff93929150613394613384613367613356612eed565b948481013560601c91601490910190565b73ffffffffffffffffffffffffffffffffffffffff909116855290565b8281013560f81c91600190910190565b941661339f81613294565b602084019081526000925b8284106133b957505050509190565b9091929561347261345461343661340c6134298b602061342261341a6134158c6133f160019c8e60019092919283013560f81c920190565b989091613404888f8516151592516107ee565b519015159052565b60011c607f1690565b613324565b928b516107ee565b5101613333565b8581013591602090910190565b9060406134448c89516107ee565b5101528481013591602090910190565b9060606134628b88516107ee565b5101528381013591602090910190565b979060806134818387516107ee565b510152019291906133aa56fea2646970667358221220fbec8fcf4e138324c4467036ee1507b2f8aa2752bfcb89890b736efe2f2497c664736f6c634300081c0033a264697066735822122005c040e14ac7d7159058277d643fac6e228b8cf00f4ce19ce5e0ab7534f9ebb564736f6c634300081c0033","sourceMap":"372:833:22:-:0;;;;;;;;;;3166:4:5;372:833:22;;;3166:4:5;372:833:22;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608080604052600436101561001357600080fd5b60003560e01c908163c04062261461007e575063f8ccbf471461003557600080fd5b346100795760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261007957602060ff600c5460101c166040519015158152f35b600080fd5b346100795760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610079577fc1978d1f00000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f505249564154455f4b45590000000000000000000000000000000000000000006044820152602081606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561052c57600091610538575b5080602073ffffffffffffffffffffffffffffffffffffffff6102c58361024c6102896101fc6004986101916101c0896102b6604051906101738382018361056f565b8082528282019061111f8239604051948592518092858501906105df565b810103017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261056f565b6040516101ce60408261056f565b600781527f466163746f7279000000000000000000000000000000000000000000000000008a820152610645565b86617f1f91604051926102118382018561056f565b808452828401906113d5823961025b604051918a8584019416845284835261023a60408461056f565b604051978896518092878901906105df565b850191518093858401906105df565b0101037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261056f565b60405161029760408261056f565b600c81527f5374616765314d6f64756c65000000000000000000000000000000000000000086820152610645565b16604051938480927f9f69ef540000000000000000000000000000000000000000000000000000000082525afa91821561052c576000926104d5575b5060008061039a6103cd6104d3956040519061031e60408361056f565b602082527f5374616765324d6f64756c6520666f72205374616765314d6f64756c65206973602083015273ffffffffffffffffffffffffffffffffffffffff6040519485937f319af333000000000000000000000000000000000000000000000000000000006020860152604060248601526064850190610602565b91166044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261056f565b6020815191016a636f6e736f6c652e6c6f675afa5061045c8161019161041f6020610f88604051906104018382018361056f565b808252828201906192f48239604051948592518092858501906105df565b60405161042d60408261056f565b600581527f47756573740000000000000000000000000000000000000000000000000000006020820152610645565b5061019161049660206134de604051906104788382018361056f565b8082528282019061a27c8239604051948592518092858501906105df565b6040516104a460408261056f565b600e81527f53657373696f6e4d616e616765720000000000000000000000000000000000006020820152610645565b005b6020813d602011610524575b816104ee6020938361056f565b8101031261052057519173ffffffffffffffffffffffffffffffffffffffff8316830361051d57506000610301565b80fd5b8280fd5b3d91506104e1565b6040513d6000823e3d90fd5b6020813d602011610567575b816105516020938361056f565b81010312610563575190506004610130565b5080fd5b3d9150610544565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176105b057604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60005b8381106105f25750506000910152565b81810151838201526020016105e2565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361063e815180928187528780880191016105df565b0116010190565b9190600091600273ce0042b868300000d44a59004da54a005ffdcf9f3b1115610a5c575b73ffffffffffffffffffffffffffffffffffffffff8251602084012060405160208101917fff0000000000000000000000000000000000000000000000000000000000000083527fce0042b868300000d44a59004da54a005ffdcf9f00000000000000000000000060218301528660358301526055820152605581526106f060758261056f565b519020169384906002823b11610a125790610743916040519061071460408361056f565b600c82527f6465706c6f79696e6720746f00000000000000000000000000000000000000006020830152611043565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561052057604051907fce817d470000000000000000000000000000000000000000000000000000000082526004820152828160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015610a07576109f2575b509060206107f592604051809481927f4af63f02000000000000000000000000000000000000000000000000000000008352604060048401526044830190610602565b84602483015203818473ce0042b868300000d44a59004da54a005ffdcf9f5af19182156109e5578192610994575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561051d576040517f76eadd36000000000000000000000000000000000000000000000000000000008152818160048183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561098957610974575b505073ffffffffffffffffffffffffffffffffffffffff168103610916576002813b11156108b85790565b60646040517f20631f9100000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4465706c6f796d656e74206661696c65640000000000000000000000000000006044820152fd5b60646040517f20631f9100000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4465706c6f7965642061646472657373206d69736d61746368000000000000006044820152fd5b61097f82809261056f565b61051d578061088d565b6040513d84823e3d90fd5b9091506020813d6020116109dd575b816109b06020938361056f565b81010312610563575173ffffffffffffffffffffffffffffffffffffffff81168103610563579038610823565b3d91506109a3565b50604051903d90823e3d90fd5b6109fd83809261056f565b61056357386107b2565b6040513d85823e3d90fd5b91509150610a59925060405190610a2a60408361056f565b601382527f616c7265616479206465706c6f79656420746f000000000000000000000000006020830152611043565b90565b6657c084e5f3c00073bb6e024b9cffacb947a71991e386681b1cd1477d3110610de2575b600080610afe610b44604051610a9760408261056f565b601e81527f4465706c6f79696e672053696e676c65746f6e20466163746f727920746f000060208201526040519283917f319af333000000000000000000000000000000000000000000000000000000006020840152604060248401526064830190610602565b73ce0042b868300000d44a59004da54a005ffdcf9f6044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261056f565b6020815191016a636f6e736f6c652e6c6f675afa50604051610b686101a08261056f565b61016f81527ff9016c8085174876e8008303c4d88080b901546080604052348015610010576060208201527e80fd5b50610134806100206000396000f3fe6080604052348015600f57600060408201527f80fd5b506004361060285760003560e01c80634af63f0214602d575b600080fd60608201527f5b60cf60048036036040811015604157600080fd5b810190602081018135640160808201527b811115605b57600080fd5b820183602082011115606c57600080fd5b60a08201527f80359060200191846001830284011164010000000083111715608d57600080fd60c08201527f5b91908080601f0160208091040260200160405190810160405280939291908160e08201527f8152602001838380828437600092019190915250929550509135925060eb91506101008201527f50565b604080516001600160a01b039092168252519081900360200190f35b606101208201527e818351602085016000f5939250505056fea26469706673582212206b44f8a86101408201527f2cb6b156bfcc3dc6aadd6df4eefd204bc928a4397fd15dacf6d5320564736f6c6101608201527f634300060200331b832470008224700000000000000000000000000000000000610180820152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610dde5783610d8f91604051809381927f8c0c72e0000000000000000000000000000000000000000000000000000000008352602060048401526024830190610602565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015610dd357908491610dbe575b5050610669565b81610dc89161056f565b610520578238610db7565b6040513d86823e3d90fd5b8380fd5b8280610e5f610e8b604051610df860408261056f565b601d81527f46756e64696e672053696e676c65746f6e20466163746f727920454f4100000060208201526040519283917f41304fac000000000000000000000000000000000000000000000000000000006020840152602060248401526044830190610602565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261056f565b6020815191016a636f6e736f6c652e6c6f675afa50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610520576040517fce817d47000000000000000000000000000000000000000000000000000000008152816004820152838160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015610dd35761102f575b5073bb6e024b9cffacb947a71991e386681b1cd1477d31806657c084e5f3c00003906657c084e5f3c00082116110025784808093819382906657c084e5f3c00014610ff9575b73bb6e024b9cffacb947a71991e386681b1cd1477d90f11561098957737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610520576040517f76eadd36000000000000000000000000000000000000000000000000000000008152838160048183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015610dd357908491610fe4575b5050610a80565b81610fee9161056f565b610520578238610fdd565b506108fc610f55565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b8361103c9194929461056f565b9138610f0f565b6111076110a49160009473ffffffffffffffffffffffffffffffffffffffff6110d487966040519687957f95ed0195000000000000000000000000000000000000000000000000000000006020880152606060248801526084870190610602565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc868303016044870152610602565b91166064830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261056f565b6020815191016a636f6e736f6c652e6c6f675afa5056fe6080806040523460155761029b908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c6332c02a141461002757600080fd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019f5760043573ffffffffffffffffffffffffffffffffffffffff811680820361019f5760243580916100eb6101176040519261008a846101d3565b602f84527f6041600e3d396021805130553df33d3d36153402601f57363d3d373d363d305460208501527f5af43d82803e903d91601f57fd5bf300000000000000000000000000000000006040850152604051928391602083019586610235565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826101f4565b519034f59173ffffffffffffffffffffffffffffffffffffffff8316156101595760405173ffffffffffffffffffffffffffffffffffffffff84168152602090f35b7f8caac8050000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff1660045260245260446000fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6060810190811067ffffffffffffffff8211176101ef57604052565b6101a4565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176101ef57604052565b9291909283519060005b8281106102525750019081526020019150565b806020809288010151818401520161023f56fea2646970667358221220be04d6b1fea99f8da63c42ae89d7f45bd43865e722cddb9cb70f1713011e9fe264736f6c634300081c003361010080604052346101ae57604081617f1f803803809161002082856101b3565b8339810103126101ae5761003f6020610038836101d6565b92016101d6565b604051909190613dff808201906001600160401b0382118383101761018c57602091839161412083396001600160a01b03861681520301906000f09081156101a257604051606081016001600160401b0381118282101761018c576040908152602f82527f6041600e3d396021805130553df33d3d36153402601f57363d3d373d363d305460208301526e5af43d82803e903d91601f57fd5bf360881b82820152519060005b602f811061017757505030604f820152604f8152610104606f826101b3565b805160209091012060805260a0526001600160a01b031660c05260e052604051613f3590816101eb8239608051818181610c210152613b59015260a051818181610d6f0152613b2a015260c051818181610cd6015261119d015260e0518181816110600152818161120c0152611aa00152f35b806020809284010151828286010152016100e5565b634e487b7160e01b600052604160045260246000fd5b6040513d6000823e3d90fd5b600080fd5b601f909101601f19168101906001600160401b0382119082101761018c57604052565b51906001600160a01b03821682036101ae5756fe6080604052600436101561001e575b361561001c5761001c611c68565b005b60003560e01c806223de29146101ad578063025b22bc146101a857806313792a4a146101a3578063150b7a021461019e5780631626ba7e1461019957806319822f7c146101945780631a9b23371461018f5780631f6a1eb91461018a578063257671f51461018557806329561426146101805780632dd310001461017b5780634fcf3eca146101765780636ea44577146101715780638943ec021461016c5780638c3f55631461016757806392dcb3fc146101625780639c145aed1461015d5780639f69ef5414610158578063a65d69d414610153578063aaf10f421461014e578063ad55366b14610149578063b93ea7ad14610144578063bc197c811461013f578063f23a6e611461013a5763f727ef1c0361000e5761158b565b6114fe565b61142c565b6112cd565b611281565b611230565b6111c1565b611152565b61103a565b610fdc565b610fa0565b610f1c565b610eed565b610d93565b610d24565b610c44565b610beb565b610aff565b610a9c565b6109e7565b61095f565b6108d2565b6107d5565b6102fb565b61026f565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101d557565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101d557565b6044359073ffffffffffffffffffffffffffffffffffffffff821682036101d557565b359073ffffffffffffffffffffffffffffffffffffffff821682036101d557565b9181601f840112156101d55782359167ffffffffffffffff83116101d557602083818601950101116101d557565b346101d55760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576102a66101b2565b506102af6101da565b506102b86101fd565b5060843567ffffffffffffffff81116101d5576102d9903690600401610241565b505060a43567ffffffffffffffff81116101d55761001c903690600401610241565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55761032d6101b2565b30330361033d5761001c90611d31565b7fa19dbf00000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff8211176103b657604052565b61036b565b6040810190811067ffffffffffffffff8211176103b657604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176103b657604052565b6040519061042760e0836103d7565b565b60405190610427610120836103d7565b359060ff821682036101d557565b359081151582036101d557565b67ffffffffffffffff81116103b65760051b60200190565b67ffffffffffffffff81116103b657601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926104b28261046c565b916104c060405193846103d7565b8294818452818301116101d5578281602093846000960137010152565b9080601f830112156101d5578160206104f8933591016104a6565b90565b81601f820112156101d55780359061051282610454565b9261052060405194856103d7565b82845260208085019360051b830101918183116101d55760208101935b83851061054c57505050505090565b843567ffffffffffffffff81116101d557820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082860301126101d557610593610418565b916105a060208301610220565b83526040820135602084015260608201359267ffffffffffffffff84116101d55760e0836105d58860208098819801016104dd565b6040840152608081013560608401526105f060a08201610447565b608084015261060160c08201610447565b60a0840152013560c082015281520194019361053d565b9080601f830112156101d557813561062f81610454565b9261063d60405194856103d7565b81845260208085019260051b8201019283116101d557602001905b8282106106655750505090565b6020809161067284610220565b815201910190610658565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126101d55760043567ffffffffffffffff81116101d5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82850301126101d5576106ef610429565b906106fc81600401610439565b825261070a60248201610447565b6020830152604481013567ffffffffffffffff81116101d557846004610732928401016104fb565b6040830152606481013560608301526084810135608083015260a481013567ffffffffffffffff81116101d55784600461076e928401016104dd565b60a083015260c481013560c083015260e481013560e083015261010481013567ffffffffffffffff81116101d557600485916107ab930101610618565b610100820152916024359067ffffffffffffffff82116101d5576107d191600401610241565b9091565b346101d5576107e33661067d565b90916101008101926107fe6107f9855151611693565b6116b3565b9160005b85518051821015610865579061085f61083a61082083600195611731565b5173ffffffffffffffffffffffffffffffffffffffff1690565b6108448388611731565b9073ffffffffffffffffffffffffffffffffffffffff169052565b01610802565b505083838661087a3361084483515185611731565b52610886818484611d80565b50156108985760405160018152602090f35b6108ce906040519384937ff58cc8b50000000000000000000000000000000000000000000000000000000085526004850161198c565b0390fd5b346101d55760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576109096101b2565b506109126101da565b5060643567ffffffffffffffff81116101d557610933903690600401610241565b505060206040517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b346101d55760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760043560243567ffffffffffffffff81116101d5576020916109b76109bd923690600401610241565b916119b1565b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b346101d55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760043567ffffffffffffffff81116101d5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126101d557610a6a60209160243560443591600401611a86565b604051908152f35b7fffffffff000000000000000000000000000000000000000000000000000000008116036101d557565b346101d55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576020610ae1600435610adc81610a72565b611f65565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760043567ffffffffffffffff81116101d557610b49903690600401610241565b9060243567ffffffffffffffff81116101d557610b6d610b77913690600401610241565b9190935a9361209a565b91610b8b606084015160808501519061235e565b610b96828585611d80565b929015610ba8575061001c93506124b7565b836108ce86926040519384937fa2b6d61b0000000000000000000000000000000000000000000000000000000085526004850161198c565b60009103126101d557565b346101d55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346101d55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760043530330361033d578015610cfa576020817f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf855604051908152a161001c7f0000000000000000000000000000000000000000000000000000000000000000611d31565b7f4294d1270000000000000000000000000000000000000000000000000000000060005260046000fd5b346101d55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d557600435610dc981610a72565b30330361033d5773ffffffffffffffffffffffffffffffffffffffff610dee82611f65565b1615610e545760407fffffffff000000000000000000000000000000000000000000000000000000007f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19216610e45600082612d0f565b815190815260006020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f1c3812cc000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101d5576004359067ffffffffffffffff82116101d5576107d191600401610241565b610ef636610ea4565b9030330361033d57610f0c61001c925a9261209a565b90610f16826127db565b906124b7565b346101d55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d557610f536101b2565b5060443567ffffffffffffffff81116101d557610f74903690600401610241565b505060206040517f8943ec02000000000000000000000000000000000000000000000000000000008152f35b346101d55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576020610a6a60043561286f565b346101d55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760406110186004356128b5565b73ffffffffffffffffffffffffffffffffffffffff8351921682526020820152f35b346101d55761104836610ea4565b9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001680156111285733036110fa57303b156101d5576110ce9160009160405193849283927f6ea4457700000000000000000000000000000000000000000000000000000000845260048401611c27565b038183305af180156110f5576110e057005b806110ef600061001c936103d7565b80610be0565b6119fd565b7f1d6ddbf4000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7fd13d78350000000000000000000000000000000000000000000000000000000060005260046000fd5b346101d55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101d55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101d55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576020305473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346101d55760c061129d6000806112973661067d565b9161297d565b926112a9839293613ac6565b906040519586526020860152151560408501526060840152608083015260a0820152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760043561130381610a72565b61130b6101da565b9030330361033d5773ffffffffffffffffffffffffffffffffffffffff61133182611f65565b166113ab577f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19173ffffffffffffffffffffffffffffffffffffffff7fffffffff0000000000000000000000000000000000000000000000000000000060409316911661139e8183612d0f565b82519182526020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f5b4d6d6a000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b9181601f840112156101d55782359167ffffffffffffffff83116101d5576020808501948460051b0101116101d557565b346101d55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576114636101b2565b5061146c6101da565b5060443567ffffffffffffffff81116101d55761148d9036906004016113fb565b505060643567ffffffffffffffff81116101d5576114af9036906004016113fb565b505060843567ffffffffffffffff81116101d5576114d1903690600401610241565b50506040517fbc197c81000000000000000000000000000000000000000000000000000000008152602090f35b346101d55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576115356101b2565b5061153e6101da565b5060843567ffffffffffffffff81116101d55761155f903690600401610241565b505060206040517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b346101d55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576004356115c56101da565b604435916bffffffffffffffffffffffff83168093036101d55730330361033d578273ffffffffffffffffffffffffffffffffffffffff836116507febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1967fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606097881b161785612cca565b6040519384521660208301526040820152a1005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90600182018092116116a157565b611664565b919082018092116116a157565b906116bd82610454565b6116ca60405191826103d7565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06116f88294610454565b0190602036910137565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518210156117455760209160051b010190565b611702565b919082519283825260005b8481106117945750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201611755565b9080602083519182815201916020808360051b8301019401926000915b8383106117d557505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080611848604085015160e0604086015260e085019061174a565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152970193019301919392906117c6565b906020808351928381520192019060005b81811061189d5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101611890565b805160ff1682526104f891602082810151151590820152610100611927611901604085015161012060408601526101208501906117a9565b606085015160608501526080850151608085015260a085015184820360a086015261174a565b9260c081015160c084015260e081015160e084015201519061010081840391015261187f565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b916119a36104f894926040855260408501906118c9565b92602081850391015261194d565b906119ce92916119bf611f0a565b906003825260e0820152611d80565b50156119f8577f1626ba7e0000000000000000000000000000000000000000000000000000000090565b600090565b6040513d6000823e3d90fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101d5570180359067ffffffffffffffff82116101d5576020019181360383136101d557565b908160209103126101d557516104f881610a72565b6040906104f894928152816020820152019161194d565b91909173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016918215611128578233036110fa5780611bb8575b506020915080610100611ae8920190611a09565b92611b2060405194859384937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611a6f565b0381305afa9081156110f5577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091611b89575b501603611b8457600090565b600190565b611bab915060203d602011611bb1575b611ba381836103d7565b810190611a5a565b38611b78565b503d611b99565b823b156101d5576040517fb760faf900000000000000000000000000000000000000000000000000000000815230600482015292600091849160249183915af19081156110f557602092611ae892611c12575b5090611ad4565b806110ef6000611c21936103d7565b38611c0b565b9160206104f893818152019161194d565b3d15611c63573d90611c498261046c565b91611c5760405193846103d7565b82523d6000602084013e565b606090565b600436108015611c755750565b611cab906000357fffffffff00000000000000000000000000000000000000000000000000000000811691611cfd575b50611f65565b73ffffffffffffffffffffffffffffffffffffffff8116611cc95750565b60008091604051368382378036810184815203915af4611ce7611c38565b9015611cf557602081519101f35b602081519101fd5b7fffffffff000000000000000000000000000000000000000000000000000000008092503660040360031b1b161638611ca5565b60207f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca039180305573ffffffffffffffffffffffffffffffffffffffff60405191168152a1565b90156117455790565b91907f800000000000000000000000000000000000000000000000000000000000000080611dd7611db18585611d77565b357fff000000000000000000000000000000000000000000000000000000000000001690565b1614611e36576000918291611deb9461297d565b905091909192808210611e06575050611e0390613ac6565b91565b7ffd41fcba0000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b5050611e41906127db565b90611e4b826128b5565b42811115611ed8575073ffffffffffffffffffffffffffffffffffffffff81168015159081611ecd575b50611e81575060019190565b7f8945c3130000000000000000000000000000000000000000000000000000000060005260048390523360245273ffffffffffffffffffffffffffffffffffffffff1660445260646000fd5b905033141538611e75565b7ff95b6ab700000000000000000000000000000000000000000000000000000000600052600484905260245260446000fd5b60405190610120820182811067ffffffffffffffff8211176103b6576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b73ffffffffffffffffffffffffffffffffffffffff906040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a120845216604082015260408152611fdc6060826103d7565b519020541690565b90611fee82610454565b611ffb60405191826103d7565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06120298294610454565b019060005b82811061203a57505050565b6020906040516120498161039a565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c08201528282850101520161202e565b909392938483116101d55784116101d5578101920390565b9190916120a5611f0a565b6000815292600190823560f81c827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818316016123475750600060608701525b60076120f460ff831660011c90565b16806122f6575b506010818116036122c157506001925b61211484611fe4565b92604087019384526000905b85821061212f57505050505050565b8281013560f81c9060010190918160018085160361229f575061217330612157838951611731565b519073ffffffffffffffffffffffffffffffffffffffff169052565b60028084161461227f575b600480841614612231575b6008808416146121fe575b6121e76121e160c0856121c08a60806121b78860108060019c9d16149351611731565b51019015159052565b6121d78a60a06121b7886020808716149351611731565b1660061c60031690565b60ff1690565b60c06121f4838951611731565b5101520190612120565b6001916121e7906121e19060c090878101359060200196906060612223878d51611731565b510152959450505050612194565b90612279908481013560e81c9060030161227261225961225184846116a6565b838a8a612082565b91906040612268888d51611731565b51019236916104a6565b90526116a6565b90612189565b90838101359060200191906020612297838951611731565b51015261217e565b6122bc92508481013560601c906014019290612157838951611731565b612173565b6020908116036122e35761ffff918381013560f01c906002015b92169261210b565b60ff918381013560f81c906001016122db565b61233a919385929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b92906080870152386120fb565b80850135606090811c9088015260140192506120e5565b906123688261286f565b8181036123ee57509060017f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f8819201908160405160208101907f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8252836040820152604081526123d86060826103d7565b51902055604080519182526020820192909252a1565b917f9b6514f40000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b61243a604092959493956060835260608301906118c9565b9460208201520152565b926104f896959260c09592855260208501526040840152606083015260808201528160a0820152019061174a565b6104f8939260609282526020820152816040820152019061174a565b6124a46104f894926060835260608301906118c9565b926020820152604081840391015261174a565b916000604082019384515190825b8281106124d6575b50505050505050565b6124e1818851611731565b51936124f060a0860151151590565b806127d3575b61279357506000936060810151801580158061278a575b6127525784906125206080850151151590565b1561270c576125cb92612547855173ffffffffffffffffffffffffffffffffffffffff1690565b911561270657505a905b6125c68b61259a60608d01516040890151908c8b604051998a967f4c4e814c00000000000000000000000000000000000000000000000000000000602089015260248801612444565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018552846103d7565b612c9d565b1561260e575b506040805187815260208101839052600192917f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a91a15b016124c5565b60c0018051156126bd57600181511461267e575160021461262f57386125d1565b9493505050507fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b925061266f612663612caf565b60405193849384612472565b0390a1388080808080806124cd565b50846108ce61268b612caf565b6040519384937f7f6b0bb10000000000000000000000000000000000000000000000000000000085526004850161248e565b509250600180937f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d6126fe6126f0612caf565b604051918291858c84612472565b0390a1612608565b90612551565b835161274793925073ffffffffffffffffffffffffffffffffffffffff169160208501519160001461274c57505a905b604085015192612c8b565b6125cb565b9061273c565b83886108ce5a6040519384937f2139527400000000000000000000000000000000000000000000000000000000855260048501612422565b50815a1061250d565b6040805188815260208101849052919550600192917f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b91819081016126fe565b5080156124f6565b61283d6128696127fb6127f5602085015115153090612d4e565b93612e49565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826103d7565b51902090565b60405160208101917f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83526040820152604081526128ae6060826103d7565b5190205490565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e8683526040820152604081526128f46060826103d7565b51902054906bffffffffffffffffffffffff8260601c921690565b6040519061291c826103bb565b60006020838281520152565b908160409103126101d557602060405191612942836103bb565b805183520151602082015290565b60409073ffffffffffffffffffffffffffffffffffffffff6104f89493168152816020820152019061174a565b909491939291853560f81c6001909381908761299761290f565b9360408089161480612c6d575b612b70575b505050600180861614612b4a5760028581161460208501526007600286901c1688820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101908096918196602016612a199060051c90565b612a2290611693565b8a820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101959098899a81612a6e846127db565b988993612a7a93612082565b91612a8493613260565b9098612a9891600052602052604060002090565b90612aab91600052602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff16612ad491600052602052604060002090565b94815190868215159283612b3f575b505081612b30575b50612af35750565b6040517fccbb534f000000000000000000000000000000000000000000000000000000008152815160048201526020909101516024820152604490fd5b90506020820151101538612aeb565b141591508638612ae3565b86612b659792949550612b5d9398612082565b93909261303e565b919394909293929190565b8a81013560601c985060140192509087908a90849015612b94575b508291506129a9565b60038101955073ffffffffffffffffffffffffffffffffffffffff945081013560e81c92604092612c17929091612be291612bdb918990612bd589836116a6565b92612082565b36916104a6565b83519586809481937fccce3bc80000000000000000000000000000000000000000000000000000000083523060048401612950565b0392165afa80156110f557612c3592600091612c3e575b50926116a6565b86388981612b8b565b612c60915060403d604011612c66575b612c5881836103d7565b810190612928565b38612c2e565b503d612c4e565b5073ffffffffffffffffffffffffffffffffffffffff8916156129a4565b9160009391849360208451940192f190565b9160009291839260208351930191f490565b3d90604051916020818401016040528083526000602084013e565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e868352604082015260408152612d096060826103d7565b51902055565b60405160208101917fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1208352604082015260408152612d096060826103d7565b15612dfe576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a0815261286960c0826103d7565b4690612d57565b805160209091019060005b818110612e1d5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101612e10565b610100810151604051612e648161283d602082018095612e05565b51902090612e73815160ff1690565b60ff811680612eec57505090612869612e8f6040840151613bc3565b9261283d60806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b60018103612f4a57505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46693810193845290810191909152606081019290925290612869816080810161283d565b60028103612fa057505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e460208201908152918101929092526060820192909252612869816080810161283d565b600303612ff4575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46660208201908152918101929092526060820192909252612869816080810161283d565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b9061243a906040939695949660608452606084019161194d565b919492909260009560009560009560009560009561305a611f0a565b60028152937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9460005b8281106130b1575050505050505080511515806130a3575b612af35750565b50602081015184111561309c565b600381019d50959b50939950919750929091906130d5908b9085013560e81c6116a6565b958a6000848903613219575089915b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c036131e9575090600161311e89613125948789612082565b908b61297d565b9c939c9b929b9a919a99909a9b9d8e9d9e8f905b106131a35750928b88511461319a575b808b101561316857508a60c08501528992959295949194939093613084565b7f37daf62b0000000000000000000000000000000000000000000000000000000060005260048b905260245260446000fd5b60008852613149565b8d8f6108ce6131b485858c8e612082565b9390926040519485947fb006aba000000000000000000000000000000000000000000000000000000000865260048601613024565b9798999a9160016131ff8b61320694888a612082565b908661297d565b50929d919c909b929a9092918e8e613139565b916130e4565b73ffffffffffffffffffffffffffffffffffffffff6104f895936060938352166020820152816040820152019161194d565b908160209103126101d5575190565b9391909360009460009460005b81811061327b575050505050565b8481013560f881901c9860019092019788979692909160fc1c988915613a5f575060018914613a1f5760028914613862576003891461383357600489146137b2576006891461371257600589146136c457600789146135fd57600889146135a7576009891461347e57600a891461331b577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b9091929394959697506003891697881561346d575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691019081019081613393918787612082565b6040517f898bd921000000000000000000000000000000000000000000000000000000008152939184916133cb918a60048501611a6f565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa9182156110f55761340e9360009361343a575b5060ff909a168091019a613e8f565b908015613434579061342891600052602052604060002090565b955b939291909361326d565b50613428565b60ff91935061345f9060203d8111613466575b61345781836103d7565b810190613251565b92906133ff565b503d61344d565b8084013560f81c9850600101613330565b90919293949596975060038916978815613596575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190810190816134f6918787612082565b6040517f13792a4a0000000000000000000000000000000000000000000000000000000081529391849161352e918b6004850161198c565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa9182156110f5576135709360009361343a575060ff909a168091019a613e8f565b908015613590579061358a91600052602052604060002090565b9561342a565b5061358a565b8084013560f81c9850600101613493565b9850602087019750949593949293919290918201356135c586613e36565b81146135d5575b61357090613e50565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506135cc565b975090919293949597600f169687156136b2575b602060006136236136909a9b86613cfe565b9c9092918a6040516136668161283d8a82019485603c917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008252601c8201520190565b51902092604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa156110f5576135709060ff6000519a1680910199613d41565b600189019883013560f81c9750613611565b9850602087019750949593949293919290918201358085146136ea575b61357090613df7565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506136e1565b989091929394959662ffffff98506137346121e1600c8416603f9060021c1690565b91821561379e575b600316801561378d575b90819061377190613769908781013560e81c906003019c168c01809c8989612082565b90898b613260565b911115613784575b906135709291613dac565b99820199613779565b50600281019084013560f01c613746565b8482013560f81c925060019091019061373c565b975097613808613815929394959697600f61381d93169085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290830180938686612082565b908688613260565b9061358a92980198600052602052604060002090565b985096509394929391929091908082013590602001968015613590579061358a91600052602052604060002090565b90919293949596975060038916978815613a0e575b8084013560601c996138d691601401906138969060021c6003166121e1565b9085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9081019061393a60208c6138ec85858b8b612082565b919073ffffffffffffffffffffffffffffffffffffffff8c604051968795869485937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611a6f565b0392165afa9081156110f5577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000916000916139f0575b5016036139ac57509060ff61357092991680910199613d41565b6108ce6139bd8c9389938989612082565b906040519485947fb2fed7ae0000000000000000000000000000000000000000000000000000000086526004860161321f565b613a08915060203d8111611bb157611ba381836103d7565b38613992565b8381013560f81c9850600101613877565b98600f91929394959697985016968715613a4e575b60148101976135709160ff9091169084013560601c613d41565b8281013560f81c9750600101613a34565b98509091929394959698600f16978815613ab1575b5060206000613a876136909a9b86613cfe565b9c90916040519384938c859094939260ff6060936080840197845216602083015260408201520152565b60018101995083013560f81c97506020613a74565b73ffffffffffffffffffffffffffffffffffffffff9060405160208101917fff0000000000000000000000000000000000000000000000000000000000000083527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060601b16602183015260358201527f0000000000000000000000000000000000000000000000000000000000000000605582015260558152613b8c6075826103d7565b51902016301490565b805160209091019060005b818110613bad5750505090565b8251845260209384019390920191600101613ba0565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0613c09613bf383610454565b92613c0160405194856103d7565b808452610454565b0136602083013760005b8351811015613ce55780613c2960019286611731565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152613cd1610120826103d7565b519020613cde8285611731565b5201613c13565b509091506040516128698161283d602082018095613b95565b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff81116116a15791565b90604051907fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208301937f53657175656e6365207369676e65723a0a000000000000000000000000000000855260601b1660318301526045820152604581526128696065826103d7565b916040519160208301937f53657175656e6365206e657374656420636f6e6669673a0a00000000000000008552603884015260588301526078820152607881526128696098826103d7565b60405160208101917f53657175656e636520737461746963206469676573743a0a000000000000000083526038820152603881526128696058826103d7565b61283d6128696127fb6127f5600060208601511515612d4e565b60405160208101917f53657175656e636520616e792061646472657373207375626469676573743a0a83526040820152604081526128696060826103d7565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e63652073617069656e7420636f6e6669673a0a00000000000000865260601b166039840152604d830152606d820152606d8152612869608d826103d756fea2646970667358221220825b940dd691f79f4782ba8dca1eaa7ff741f07679c4faf28637d8117499069a64736f6c634300081c003360a034607457601f613dff38819003918201601f19168301916001600160401b03831184841017607957808492602094604052833981010312607457516001600160a01b0381168103607457608052604051613d6f90816100908239608051818181610fe90152818161112601526119ba0152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6080604052600436101561001e575b361561001c5761001c611b82565b005b60003560e01c806223de291461018d578063025b22bc1461018857806313792a4a14610183578063150b7a021461017e5780631626ba7e1461017957806319822f7c146101745780631a9b23371461016f5780631f6a1eb91461016a57806329561426146101655780634fcf3eca1461016057806351605d801461015b5780636ea44577146101565780638943ec02146101515780638c3f55631461014c57806392dcb3fc146101475780639c145aed14610142578063a65d69d41461013d578063aaf10f4214610138578063ad55366b14610133578063b93ea7ad1461012e578063bc197c8114610129578063f23a6e61146101245763f727ef1c0361000e576114a5565b611418565b611346565b6111e7565b61119b565b61114a565b6110db565b610fc3565b610f65565b610f29565b610ea5565b610e76565b610dd2565b610cb6565b610bfd565b610b1c565b610ab9565b610a04565b61097c565b6108ef565b6107f2565b6102db565b61024f565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101b557565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101b557565b6044359073ffffffffffffffffffffffffffffffffffffffff821682036101b557565b359073ffffffffffffffffffffffffffffffffffffffff821682036101b557565b9181601f840112156101b55782359167ffffffffffffffff83116101b557602083818601950101116101b557565b346101b55760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557610286610192565b5061028f6101ba565b506102986101dd565b5060843567ffffffffffffffff81116101b5576102b9903690600401610221565b505060a43567ffffffffffffffff81116101b55761001c903690600401610221565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55761030d610192565b30330361035a576020817f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca0392305573ffffffffffffffffffffffffffffffffffffffff60405191168152a1005b7fa19dbf00000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff8211176103d357604052565b610388565b6040810190811067ffffffffffffffff8211176103d357604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176103d357604052565b6040519061044460e0836103f4565b565b60405190610444610120836103f4565b359060ff821682036101b557565b359081151582036101b557565b67ffffffffffffffff81116103d35760051b60200190565b67ffffffffffffffff81116103d357601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926104cf82610489565b916104dd60405193846103f4565b8294818452818301116101b5578281602093846000960137010152565b9080601f830112156101b557816020610515933591016104c3565b90565b81601f820112156101b55780359061052f82610471565b9261053d60405194856103f4565b82845260208085019360051b830101918183116101b55760208101935b83851061056957505050505090565b843567ffffffffffffffff81116101b557820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082860301126101b5576105b0610435565b916105bd60208301610200565b83526040820135602084015260608201359267ffffffffffffffff84116101b55760e0836105f28860208098819801016104fa565b60408401526080810135606084015261060d60a08201610464565b608084015261061e60c08201610464565b60a0840152013560c082015281520194019361055a565b9080601f830112156101b557813561064c81610471565b9261065a60405194856103f4565b81845260208085019260051b8201019283116101b557602001905b8282106106825750505090565b6020809161068f84610200565b815201910190610675565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126101b55760043567ffffffffffffffff81116101b5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82850301126101b55761070c610446565b9061071981600401610456565b825261072760248201610464565b6020830152604481013567ffffffffffffffff81116101b55784600461074f92840101610518565b6040830152606481013560608301526084810135608083015260a481013567ffffffffffffffff81116101b55784600461078b928401016104fa565b60a083015260c481013560c083015260e481013560e083015261010481013567ffffffffffffffff81116101b557600485916107c8930101610635565b610100820152916024359067ffffffffffffffff82116101b5576107ee91600401610221565b9091565b346101b5576108003661069a565b909161010081019261081b6108168551516115ad565b6115cd565b9160005b85518051821015610882579061087c61085761083d8360019561164b565b5173ffffffffffffffffffffffffffffffffffffffff1690565b610861838861164b565b9073ffffffffffffffffffffffffffffffffffffffff169052565b0161081f565b5050838386610897336108618351518561164b565b526108a3818484611c54565b50156108b55760405160018152602090f35b6108eb906040519384937ff58cc8b5000000000000000000000000000000000000000000000000000000008552600485016118a6565b0390fd5b346101b55760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557610926610192565b5061092f6101ba565b5060643567ffffffffffffffff81116101b557610950903690600401610221565b505060206040517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b346101b55760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043560243567ffffffffffffffff81116101b5576020916109d46109da923690600401610221565b916118cb565b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b346101b55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043567ffffffffffffffff81116101b5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126101b557610a87602091602435604435916004016119a0565b604051908152f35b7fffffffff000000000000000000000000000000000000000000000000000000008116036101b557565b346101b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576020610afe600435610af981610a8f565b611e39565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043567ffffffffffffffff81116101b557610b66903690600401610221565b9060243567ffffffffffffffff81116101b557610b8a610b94913690600401610221565b9190935a93611f6e565b91610ba86060840151608085015190612232565b610bb3828585611c54565b929015610bc5575061001c935061238b565b836108eb86926040519384937fa2b6d61b000000000000000000000000000000000000000000000000000000008552600485016118a6565b346101b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043530330361035a578015610c8c576020817f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf855604051908152a1005b7f4294d1270000000000000000000000000000000000000000000000000000000060005260046000fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557600435610cec81610a8f565b30330361035a5773ffffffffffffffffffffffffffffffffffffffff610d1182611e39565b1615610d775760407fffffffff000000000000000000000000000000000000000000000000000000007f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19216610d68600082612be3565b815190815260006020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f1c3812cc000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b60009103126101b557565b346101b55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760207fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf854604051908152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101b5576004359067ffffffffffffffff82116101b5576107ee91600401610221565b610e7f36610e2d565b9030330361035a57610e9561001c925a92611f6e565b90610e9f826126af565b9061238b565b346101b55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557610edc610192565b5060443567ffffffffffffffff81116101b557610efd903690600401610221565b505060206040517f8943ec02000000000000000000000000000000000000000000000000000000008152f35b346101b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576020610a87600435612743565b346101b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576040610fa1600435612789565b73ffffffffffffffffffffffffffffffffffffffff8351921682526020820152f35b346101b557610fd136610e2d565b9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001680156110b157330361108357303b156101b5576110579160009160405193849283927f6ea4457700000000000000000000000000000000000000000000000000000000845260048401611b41565b038183305af1801561107e5761106957005b80611078600061001c936103f4565b80610dc7565b611917565b7f1d6ddbf4000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7fd13d78350000000000000000000000000000000000000000000000000000000060005260046000fd5b346101b55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101b55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576020305473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346101b55760c06111b76000806111b13661069a565b91612851565b926111c383929361399a565b906040519586526020860152151560408501526060840152608083015260a0820152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043561121d81610a8f565b6112256101ba565b9030330361035a5773ffffffffffffffffffffffffffffffffffffffff61124b82611e39565b166112c5577f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19173ffffffffffffffffffffffffffffffffffffffff7fffffffff000000000000000000000000000000000000000000000000000000006040931691166112b88183612be3565b82519182526020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f5b4d6d6a000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b9181601f840112156101b55782359167ffffffffffffffff83116101b5576020808501948460051b0101116101b557565b346101b55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55761137d610192565b506113866101ba565b5060443567ffffffffffffffff81116101b5576113a7903690600401611315565b505060643567ffffffffffffffff81116101b5576113c9903690600401611315565b505060843567ffffffffffffffff81116101b5576113eb903690600401610221565b50506040517fbc197c81000000000000000000000000000000000000000000000000000000008152602090f35b346101b55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55761144f610192565b506114586101ba565b5060843567ffffffffffffffff81116101b557611479903690600401610221565b505060206040517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b346101b55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576004356114df6101ba565b604435916bffffffffffffffffffffffff83168093036101b55730330361035a578273ffffffffffffffffffffffffffffffffffffffff8361156a7febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1967fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606097881b161785612b9e565b6040519384521660208301526040820152a1005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90600182018092116115bb57565b61157e565b919082018092116115bb57565b906115d782610471565b6115e460405191826103f4565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06116128294610471565b0190602036910137565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805182101561165f5760209160051b010190565b61161c565b919082519283825260005b8481106116ae5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b8060208092840101518282860101520161166f565b9080602083519182815201916020808360051b8301019401926000915b8383106116ef57505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080611762604085015160e0604086015260e0850190611664565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152970193019301919392906116e0565b906020808351928381520192019060005b8181106117b75750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016117aa565b805160ff1682526105159160208281015115159082015261010061184161181b604085015161012060408601526101208501906116c3565b606085015160608501526080850151608085015260a085015184820360a0860152611664565b9260c081015160c084015260e081015160e0840152015190610100818403910152611799565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b916118bd61051594926040855260408501906117e3565b926020818503910152611867565b906118e892916118d9611dde565b906003825260e0820152611c54565b5015611912577f1626ba7e0000000000000000000000000000000000000000000000000000000090565b600090565b6040513d6000823e3d90fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101b5570180359067ffffffffffffffff82116101b5576020019181360383136101b557565b908160209103126101b5575161051581610a8f565b604090610515949281528160208201520191611867565b91909173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169182156110b1578233036110835780611ad2575b506020915080610100611a02920190611923565b92611a3a60405194859384937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611989565b0381305afa90811561107e577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091611aa3575b501603611a9e57600090565b600190565b611ac5915060203d602011611acb575b611abd81836103f4565b810190611974565b38611a92565b503d611ab3565b823b156101b5576040517fb760faf900000000000000000000000000000000000000000000000000000000815230600482015292600091849160249183915af190811561107e57602092611a0292611b2c575b50906119ee565b806110786000611b3b936103f4565b38611b25565b916020610515938181520191611867565b3d15611b7d573d90611b6382610489565b91611b7160405193846103f4565b82523d6000602084013e565b606090565b600436108015611b8f5750565b611bc5906000357fffffffff00000000000000000000000000000000000000000000000000000000811691611c17575b50611e39565b73ffffffffffffffffffffffffffffffffffffffff8116611be35750565b60008091604051368382378036810184815203915af4611c01611b52565b9015611c0f57602081519101f35b602081519101fd5b7fffffffff000000000000000000000000000000000000000000000000000000008092503660040360031b1b161638611bbf565b901561165f5790565b91907f800000000000000000000000000000000000000000000000000000000000000080611cab611c858585611c4b565b357fff000000000000000000000000000000000000000000000000000000000000001690565b1614611d0a576000918291611cbf94612851565b905091909192808210611cda575050611cd79061399a565b91565b7ffd41fcba0000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b5050611d15906126af565b90611d1f82612789565b42811115611dac575073ffffffffffffffffffffffffffffffffffffffff81168015159081611da1575b50611d55575060019190565b7f8945c3130000000000000000000000000000000000000000000000000000000060005260048390523360245273ffffffffffffffffffffffffffffffffffffffff1660445260646000fd5b905033141538611d49565b7ff95b6ab700000000000000000000000000000000000000000000000000000000600052600484905260245260446000fd5b60405190610120820182811067ffffffffffffffff8211176103d3576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b73ffffffffffffffffffffffffffffffffffffffff906040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a120845216604082015260408152611eb06060826103f4565b519020541690565b90611ec282610471565b611ecf60405191826103f4565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611efd8294610471565b019060005b828110611f0e57505050565b602090604051611f1d816103b7565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c082015282828501015201611f02565b909392938483116101b55784116101b5578101920390565b919091611f79611dde565b6000815292600190823560f81c827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8183160161221b5750600060608701525b6007611fc860ff831660011c90565b16806121ca575b5060108181160361219557506001925b611fe884611eb8565b92604087019384526000905b85821061200357505050505050565b8281013560f81c9060010190918160018085160361217357506120473061202b83895161164b565b519073ffffffffffffffffffffffffffffffffffffffff169052565b600280841614612153575b600480841614612105575b6008808416146120d2575b6120bb6120b560c0856120948a608061208b8860108060019c9d1614935161164b565b51019015159052565b6120ab8a60a061208b88602080871614935161164b565b1660061c60031690565b60ff1690565b60c06120c883895161164b565b5101520190611ff4565b6001916120bb906120b59060c0908781013590602001969060606120f7878d5161164b565b510152959450505050612068565b9061214d908481013560e81c9060030161214661212d61212584846115c0565b838a8a611f56565b9190604061213c888d5161164b565b51019236916104c3565b90526115c0565b9061205d565b9083810135906020019190602061216b83895161164b565b510152612052565b61219092508481013560601c90601401929061202b83895161164b565b612047565b6020908116036121b75761ffff918381013560f01c906002015b921692611fdf565b60ff918381013560f81c906001016121af565b61220e919385929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290608087015238611fcf565b80850135606090811c908801526014019250611fb9565b9061223c82612743565b8181036122c257509060017f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f8819201908160405160208101907f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8252836040820152604081526122ac6060826103f4565b51902055604080519182526020820192909252a1565b917f9b6514f40000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b61230e604092959493956060835260608301906117e3565b9460208201520152565b9261051596959260c09592855260208501526040840152606083015260808201528160a08201520190611664565b6105159392606092825260208201528160408201520190611664565b61237861051594926060835260608301906117e3565b9260208201526040818403910152611664565b916000604082019384515190825b8281106123aa575b50505050505050565b6123b581885161164b565b51936123c460a0860151151590565b806126a7575b61266757506000936060810151801580158061265e575b6126265784906123f46080850151151590565b156125e05761249f9261241b855173ffffffffffffffffffffffffffffffffffffffff1690565b91156125da57505a905b61249a8b61246e60608d01516040890151908c8b604051998a967f4c4e814c00000000000000000000000000000000000000000000000000000000602089015260248801612318565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018552846103f4565b612b71565b156124e2575b506040805187815260208101839052600192917f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a91a15b01612399565b60c001805115612591576001815114612552575160021461250357386124a5565b9493505050507fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b9250612543612537612b83565b60405193849384612346565b0390a1388080808080806123a1565b50846108eb61255f612b83565b6040519384937f7f6b0bb100000000000000000000000000000000000000000000000000000000855260048501612362565b509250600180937f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d6125d26125c4612b83565b604051918291858c84612346565b0390a16124dc565b90612425565b835161261b93925073ffffffffffffffffffffffffffffffffffffffff169160208501519160001461262057505a905b604085015192612b5f565b61249f565b90612610565b83886108eb5a6040519384937f21395274000000000000000000000000000000000000000000000000000000008552600485016122f6565b50815a106123e1565b6040805188815260208101849052919550600192917f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b91819081016125d2565b5080156123ca565b61271161273d6126cf6126c9602085015115153090612c22565b93612d1d565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826103f4565b51902090565b60405160208101917f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83526040820152604081526127826060826103f4565b5190205490565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e8683526040820152604081526127c86060826103f4565b51902054906bffffffffffffffffffffffff8260601c921690565b604051906127f0826103d8565b60006020838281520152565b908160409103126101b557602060405191612816836103d8565b805183520151602082015290565b60409073ffffffffffffffffffffffffffffffffffffffff61051594931681528160208201520190611664565b909491939291853560f81c6001909381908761286b6127e3565b9360408089161480612b41575b612a44575b505050600180861614612a1e5760028581161460208501526007600286901c1688820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691019080969181966020166128ed9060051c90565b6128f6906115ad565b8a820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101959098899a81612942846126af565b98899361294e93611f56565b9161295893613134565b909861296c91600052602052604060002090565b9061297f91600052602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff166129a891600052602052604060002090565b94815190868215159283612a13575b505081612a04575b506129c75750565b6040517fccbb534f000000000000000000000000000000000000000000000000000000008152815160048201526020909101516024820152604490fd5b905060208201511015386129bf565b1415915086386129b7565b86612a399792949550612a319398611f56565b939092612f12565b919394909293929190565b8a81013560601c985060140192509087908a90849015612a68575b5082915061287d565b60038101955073ffffffffffffffffffffffffffffffffffffffff945081013560e81c92604092612aeb929091612ab691612aaf918990612aa989836115c0565b92611f56565b36916104c3565b83519586809481937fccce3bc80000000000000000000000000000000000000000000000000000000083523060048401612824565b0392165afa801561107e57612b0992600091612b12575b50926115c0565b86388981612a5f565b612b34915060403d604011612b3a575b612b2c81836103f4565b8101906127fc565b38612b02565b503d612b22565b5073ffffffffffffffffffffffffffffffffffffffff891615612878565b9160009391849360208451940192f190565b9160009291839260208351930191f490565b3d90604051916020818401016040528083526000602084013e565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e868352604082015260408152612bdd6060826103f4565b51902055565b60405160208101917fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1208352604082015260408152612bdd6060826103f4565b15612cd2576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a0815261273d60c0826103f4565b4690612c2b565b805160209091019060005b818110612cf15750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101612ce4565b610100810151604051612d3881612711602082018095612cd9565b51902090612d47815160ff1690565b60ff811680612dc05750509061273d612d6360408401516139fd565b9261271160806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b60018103612e1e57505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4669381019384529081019190915260608101929092529061273d8160808101612711565b60028103612e7457505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e46020820190815291810192909252606082019290925261273d8160808101612711565b600303612ec8575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4666020820190815291810192909252606082019290925261273d8160808101612711565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b9061230e9060409396959496606084526060840191611867565b9194929092600095600095600095600095600095612f2e611dde565b60028152937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9460005b828110612f8557505050505050508051151580612f77575b6129c75750565b506020810151841115612f70565b600381019d50959b5093995091975092909190612fa9908b9085013560e81c6115c0565b958a60008489036130ed575089915b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c036130bd5750906001612ff289612ff9948789611f56565b908b612851565b9c939c9b929b9a919a99909a9b9d8e9d9e8f905b106130775750928b88511461306e575b808b101561303c57508a60c08501528992959295949194939093612f58565b7f37daf62b0000000000000000000000000000000000000000000000000000000060005260048b905260245260446000fd5b6000885261301d565b8d8f6108eb61308885858c8e611f56565b9390926040519485947fb006aba000000000000000000000000000000000000000000000000000000000865260048601612ef8565b9798999a9160016130d38b6130da94888a611f56565b9086612851565b50929d919c909b929a9092918e8e61300d565b91612fb8565b73ffffffffffffffffffffffffffffffffffffffff610515959360609383521660208201528160408201520191611867565b908160209103126101b5575190565b9391909360009460009460005b81811061314f575050505050565b8481013560f881901c9860019092019788979692909160fc1c9889156139335750600189146138f357600289146137365760038914613707576004891461368657600689146135e6576005891461359857600789146134d1576008891461347b576009891461335257600a89146131ef577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b90919293949596975060038916978815613341575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691019081019081613267918787611f56565b6040517f898bd9210000000000000000000000000000000000000000000000000000000081529391849161329f918a60048501611989565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa91821561107e576132e29360009361330e575b5060ff909a168091019a613cc9565b90801561330857906132fc91600052602052604060002090565b955b9392919093613141565b506132fc565b60ff9193506133339060203d811161333a575b61332b81836103f4565b810190613125565b92906132d3565b503d613321565b8084013560f81c9850600101613204565b9091929394959697506003891697881561346a575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190810190816133ca918787611f56565b6040517f13792a4a00000000000000000000000000000000000000000000000000000000815293918491613402918b600485016118a6565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa91821561107e576134449360009361330e575060ff909a168091019a613cc9565b908015613464579061345e91600052602052604060002090565b956132fe565b5061345e565b8084013560f81c9850600101613367565b98506020870197509495939492939192909182013561349986613c70565b81146134a9575b61344490613c8a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506134a0565b975090919293949597600f16968715613586575b602060006134f76135649a9b86613b38565b9c9092918a60405161353a816127118a82019485603c917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008252601c8201520190565b51902092604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa1561107e576134449060ff6000519a1680910199613b7b565b600189019883013560f81c97506134e5565b9850602087019750949593949293919290918201358085146135be575b61344490613c31565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506135b5565b989091929394959662ffffff98506136086120b5600c8416603f9060021c1690565b918215613672575b6003168015613661575b9081906136459061363d908781013560e81c906003019c168c01809c8989611f56565b90898b613134565b911115613658575b906134449291613be6565b9982019961364d565b50600281019084013560f01c61361a565b8482013560f81c9250600190910190613610565b9750976136dc6136e9929394959697600f6136f193169085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290830180938686611f56565b908688613134565b9061345e92980198600052602052604060002090565b985096509394929391929091908082013590602001968015613464579061345e91600052602052604060002090565b909192939495969750600389169788156138e2575b8084013560601c996137aa916014019061376a9060021c6003166120b5565b9085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9081019061380e60208c6137c085858b8b611f56565b919073ffffffffffffffffffffffffffffffffffffffff8c604051968795869485937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611989565b0392165afa90811561107e577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000916000916138c4575b50160361388057509060ff61344492991680910199613b7b565b6108eb6138918c9389938989611f56565b906040519485947fb2fed7ae000000000000000000000000000000000000000000000000000000008652600486016130f3565b6138dc915060203d8111611acb57611abd81836103f4565b38613866565b8381013560f81c985060010161374b565b98600f91929394959697985016968715613922575b60148101976134449160ff9091169084013560601c613b7b565b8281013560f81c9750600101613908565b98509091929394959698600f16978815613985575b506020600061395b6135649a9b86613b38565b9c90916040519384938c859094939260ff6060936080840197845216602083015260408201520152565b60018101995083013560f81c97506020613948565b80151590816139a7575090565b90507fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8541490565b805160209091019060005b8181106139e75750505090565b82518452602093840193909201916001016139da565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0613a43613a2d83610471565b92613a3b60405194856103f4565b808452610471565b0136602083013760005b8351811015613b1f5780613a636001928661164b565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152613b0b610120826103f4565b519020613b18828561164b565b5201613a4d565b5090915060405161273d816127116020820180956139cf565b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff81116115bb5791565b90604051907fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208301937f53657175656e6365207369676e65723a0a000000000000000000000000000000855260601b16603183015260458201526045815261273d6065826103f4565b916040519160208301937f53657175656e6365206e657374656420636f6e6669673a0a000000000000000085526038840152605883015260788201526078815261273d6098826103f4565b60405160208101917f53657175656e636520737461746963206469676573743a0a0000000000000000835260388201526038815261273d6058826103f4565b61271161273d6126cf6126c9600060208601511515612c22565b60405160208101917f53657175656e636520616e792061646472657373207375626469676573743a0a835260408201526040815261273d6060826103f4565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e63652073617069656e7420636f6e6669673a0a00000000000000865260601b166039840152604d830152606d820152606d815261273d608d826103f456fea264697066735822122071c846bfb3a07ed1d03bb0cecee955d8b864be4c4d91b0f9a960528ecc060e8964736f6c634300081c003360808060405234601557610f6d908161001b8239f35b600080fdfe608060405261000c610330565b60008082523560f81c6001908160018083160361028a5750600060608401525b600761003b60ff831660011c90565b168061023d575b5060108181160361020c57506001905b61005b826103a3565b90604084019182526000905b838210610083576100818561007b81610540565b906108e0565b005b803560f81c906001019091816001808516036101ec57506100c5306100a9838751610441565b519073ffffffffffffffffffffffffffffffffffffffff169052565b6002808416146101ce575b600480841614610183575b60088084161461014e575b61013761013160c0856101116010806001989916146080610108888c51610441565b51019015159052565b61012760208083161460a0610108888c51610441565b1660061c60031690565b60ff1690565b60c0610144838751610441565b5101520190610067565b61013761013160c06101666001959060208235920190565b96906060610175878b51610441565b5101529594505050506100e6565b906101c890803560e81c906003016101c16101a86101a18484610484565b83366104c0565b919060406101b7888b51610441565b51019236916104db565b9052610484565b906100db565b90803590602001919060206101e4838751610441565b5101526100d0565b6102079250803560601c9060140192906100a9838751610441565b6100c5565b60209081160361022c5761ffff90803560f01c906002015b911690610052565b60ff90803560f81c90600101610224565b61027d919291908060031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b0190843590610100031c16920190565b9190608084015238610042565b8035606090811c90850152601401915061002c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff8211176102ea57604052565b61029f565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176102ea57604052565b60405190610120820182811067ffffffffffffffff8211176102ea576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b67ffffffffffffffff81116102ea5760051b60200190565b906103ad8261038b565b6103ba60405191826102ef565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06103e8829461038b565b019060005b8281106103f957505050565b602090604051610408816102ce565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c0820152828285010152016103ed565b80518210156104555760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9190820180921161049157565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9291928382116104d65783116104d65780920390565b600080fd5b92919267ffffffffffffffff82116102ea576040519161052360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601846102ef565b8294818452818301116104d6578281602093846000960137010152565b6020810151156106645761063261065e6105f060005b60405160208101917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408301527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606083015260808201523060a082015260a081526105e760c0826102ef565b51902093610bc6565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826102ef565b51902090565b61063261065e6105f046610556565b919082519283825260005b8481106106bd5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b8060208092840101518282860101520161067e565b9080602083519182815201916020808360051b8301019401926000915b8383106106fe57505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080610771604085015160e0604086015260e0850190610673565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152970193019301919392906106ef565b906020808351928381520192019060005b8181106107c65750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016107b9565b805160ff1682526108769160208281015115159082015261010061085061082a604085015161012060408601526101208501906106d2565b606085015160608501526080850151608085015260a085015184820360a0860152610673565b9260c081015160c084015260e081015160e08401520151906101008184039101526107a8565b90565b610891604092959493956060835260608301906107f2565b9460208201520152565b6108769392606092825260208201528160408201520190610673565b6108cd61087694926060835260608301906107f2565b9260208201526040818403910152610673565b90600091604081019283515193815b8581106108ff575b505050505050565b61090a818351610441565b519261091960a0850151151590565b80610b7a575b610b3a575060009260608101518015801580610b31575b610af9576080830151610acc5761098a9161098691610969855173ffffffffffffffffffffffffffffffffffffffff1690565b91602086015191600014610ac657505a905b604086015192610da1565b1590565b6109cc575b506040805186815260208101839052600192917f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a91a15b016108ef565b60c001805115610a7d576001815114610a3a57516002146109ed573861098f565b93925050507fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b9250610a2c610a20610db3565b6040519384938461089b565b0390a13880808080806108f7565b5083610a79610a47610db3565b6040519384937f7f6b0bb1000000000000000000000000000000000000000000000000000000008552600485016108b7565b0390fd5b509150600180927f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d610abe610ab0610db3565b604051918291858b8461089b565b0390a16109c6565b9061097b565b7f230d1ccc0000000000000000000000000000000000000000000000000000000086526004849052602486fd5b8387610a795a6040519384937f2139527400000000000000000000000000000000000000000000000000000000855260048501610879565b50815a10610936565b6040805187815260208101849052919450600192917f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b9181908101610abe565b50801561091f565b805160209091019060005b818110610b9a5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101610b8d565b610100810151604051610be181610632602082018095610b82565b51902090610bf0815160ff1690565b60ff811680610c695750509061065e610c0c6040840151610dfc565b9261063260806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b60018103610cc757505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4669381019384529081019190915260608101929092529061065e8160808101610632565b60028103610d1d57505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e46020820190815291810192909252606082019290925261065e8160808101610632565b600303610d71575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4666020820190815291810192909252606082019290925261065e8160808101610632565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b9160009391849360208451940192f190565b3d90604051916020818401016040528083526000602084013e565b805160209091019060005b818110610de65750505090565b8251845260209384019390920191600101610dd9565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610e42610e2c8361038b565b92610e3a60405194856102ef565b80845261038b565b0136602083013760005b8351811015610f1e5780610e6260019286610441565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152610f0a610120826102ef565b519020610f178285610441565b5201610e4c565b5090915060405161065e81610632602082018095610dce56fea2646970667358221220baf48a03c446c575132553e62013c6320b5d90a1ba275593a31ee1589046bd1464736f6c634300081c0033608080604052346015576134c3908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c806313792a4a1461006757806323b3713e14610062578063313dade71461005d57806342de1418146100585763f916f3b21461005357600080fd5b610623565b6105a6565b6103df565b610184565b3461013a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013a5760043567ffffffffffffffff811161013a576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011261013a5760243567ffffffffffffffff811161013a573660238201121561013a57806004013567ffffffffffffffff811161013a57366024828401011161013a57610136926024610126930190600401610950565b6040519081529081906020820190565b0390f35b600080fd5b73ffffffffffffffffffffffffffffffffffffffff81160361013a57565b6044359061016a8261013f565b565b6064359061016a8261013f565b359061016a8261013f565b3461013a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013a576004356101bf8161013f565b73ffffffffffffffffffffffffffffffffffffffff602435911660005260006020526040600020906000526020526020604060002054604051908152f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff82111761024857604052565b6101fd565b60a0810190811067ffffffffffffffff82111761024857604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761024857604052565b6040519061016a604083610269565b6040519061016a60e083610269565b67ffffffffffffffff81116102485760051b60200190565b8015150361013a57565b359061016a826102e0565b908160e091031261013a5790565b81601f8201121561013a5780359061031a826102c8565b926103286040519485610269565b82845260208085019360061b8301019181831161013a57602001925b828410610352575050505090565b60408483031261013a576020604091825161036c8161022c565b863581528287013583820152815201930192610344565b906020808351928381520192019060005b8181106103a15750505090565b8251805185526020908101518186015260409094019390920191600101610394565b6040906103dc9392151581528160208201520190610383565b90565b3461013a5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013a5760043567ffffffffffffffff811161013a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011261013a57604051906104598261022c565b80600401356104678161013f565b825260248101359067ffffffffffffffff821161013a57013660238201121561013a576004810135610498816102c8565b916104a66040519384610269565b8183526020600460a08286019402830101019036821161013a57602401915b81831061054057505050602082015260243567ffffffffffffffff811161013a576104f49036906004016102f5565b906104fd61015d565b61050561016c565b906084359367ffffffffffffffff851161013a5761052a610530953690600401610303565b93610f74565b90610136604051928392836103c3565b60a08336031261013a57604051906105578261024d565b8335610562816102e0565b8252602084013590600482101561013a57826020928360a09501526040860135604082015260608601356060820152608086013560808201528152019201916104c5565b3461013a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013a5760043567ffffffffffffffff811161013a573660238201121561013a57806004013567ffffffffffffffff811161013a573660248260061b8401011161013a57602461062192016112bd565b005b3461013a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013a57602060405173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8152f35b3560ff8116810361013a5790565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561013a570180359067ffffffffffffffff821161013a57602001918160051b3603831361013a57565b604051906060820182811067ffffffffffffffff821117610248576040526000604083828152606060208201520152565b9061070d826102c8565b61071a6040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061074882946102c8565b019060005b82811061075957505050565b6020906107646106d2565b8282850101520161074d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b91908110156107df5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff218136030182121561013a570190565b610770565b356103dc816102e0565b80518210156107df5760209160051b010190565b6040519061080f8261022c565b60006020838281520152565b6040519061082a602083610269565b600080835282815b82811061083e57505050565b602090610849610802565b82828501015201610832565b9061085f826102c8565b61086c6040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061089a82946102c8565b019060005b8281106108ab57505050565b6020906108b6610802565b8282850101520161089f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461091e5760010190565b6108c2565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821161091e57565b919060ff61095d84610670565b16610dd7576040830191610971838561067e565b905015610dad57610985918495939561159c565b9161099a610993858361067e565b9050610703565b9060009460808501955b6109ae828461067e565b9050811015610cde576109cb816109c5848661067e565b9061079f565b6109d7608082016107e4565b610cb4576109e68289516107ee565b51805115610a305760019291816060610a196020610a2a95015173ffffffffffffffffffffffffffffffffffffffff1690565b9101519060408b0151923390611fe2565b016109a4565b91959392969050610a3f6106d2565b96602083019460005b8751811015610c9357610a95610a7c610a61838b6107ee565b515173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b15610b5c57610aa7610a61828a6107ee565b73ffffffffffffffffffffffffffffffffffffffff610add610a7c8a5173ffffffffffffffffffffffffffffffffffffffff1690565b911614610aec57600101610a48565b9097929850610b45610b569295968a600196610b3c60406060610b30610b138f8a906107ee565b51965b5173ffffffffffffffffffffffffffffffffffffffff1690565b94015192015160ff1690565b9133888c6119c6565b610b4f82896107ee565b52866107ee565b50610a2a565b90979298610b45908a600196610b3c60406060610b308d610bb4610b569b9e9f610b9a905173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff168952565b610bbc61081b565b6020890152610c8a610be2825173ffffffffffffffffffffffffffffffffffffffff1690565b855173ffffffffffffffffffffffffffffffffffffffff9091166020820190815273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee604083015290610c5381606081015b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610269565b5190203373ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000209060005260205260406000205490565b84890152610b16565b90979298610b45908a600196610b3c60406060610b30610b56999c9d610b16565b7faa25f2ad0000000000000000000000000000000000000000000000000000000060005260046000fd5b509392945090610cee8151610703565b9260009260005b8351811015610d70576020610d0a82866107ee565b5101515115801590610d59575b610d24575b600101610cf5565b93610d51600191610d3587876107ee565b51610d40828a6107ee565b52610d4b81896107ee565b506108f1565b949050610d1c565b506040610d6682866107ee565b5101511515610d17565b509094610da49250610da994938452610d9e610d97610d8f838561067e565b93909461067e565b9050610923565b9161079f565b612278565b5190565b7f542f0af50000000000000000000000000000000000000000000000000000000060005260046000fd5b7f720521200000000000000000000000000000000000000000000000000000000060005260046000fd5b356103dc8161013f565b906001820180921161091e57565b9190820180921161091e57565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561013a570180359067ffffffffffffffff821161013a5760200191813603831361013a57565b60041115610e8157565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9392919073ffffffffffffffffffffffffffffffffffffffff16845260606020850152602060a085019173ffffffffffffffffffffffffffffffffffffffff81511660608701520151604060808601528051809252602060c0860191019160005b818110610f2357505060409150930152565b909183518051151582526020810151906004821015610e815782608060a092602094856001970152604081015160408401526060810151606084015201516080820152019401910192919092610f11565b949091929394610f98815173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff610fb9610a7c86610e01565b9116036112a257855192610fdc610fd7602084019586515190610e19565b610855565b9460005b88518110156110135780610ff66001928b6107ee565b51611001828a6107ee565b5261100c81896107ee565b5001610fe0565b50909294919395875160005b885180518210156112915781611034916107ee565b516110586110456040890189610e26565b5060608301519081013591602090910190565b506080820151169061106a8151151590565b61113d575b60208101805161107e81610e77565b61108781610e77565b6110ad5750604001510361109f576001905b0161101f565b506000989750505050505050565b600381516110ba81610e77565b6110c381610e77565b036110da5750604001511061109f57600190611099565b600181516110e781610e77565b6110f081610e77565b036111075750604001511461109f57600190611099565b6002905161111481610e77565b61111d81610e77565b1461112d575b5050600190611099565b604001511161109f573880611123565b9691989795929093998a610c276111608c6040519283918c602084019687610eb0565b5190209660009361116f610802565b9c60005b87518110156112795761118681896107ee565b51511561122c578a611198828a6107ee565b5151146111a757600101611173565b6020949e50879a9198939c9d96506111c5906111da939c96986107ee565b519284840151915b82156111e5575b50610e19565b91829101529061106f565b6112249192506112158b73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b90600052602052604060002090565b5490386111d4565b6020949e506111da929b95509761127389899c99959e9f98939a61126d906112526102aa565b978c895260008a8a01528861126783836107ee565b526107ee565b50610e0b565b976111cd565b5096946020939d929b9c956111da929b95979a6111cd565b505083525060019650909450505050565b509250505060009190565b91908110156107df5760061b0190565b60005b8281106112cc57505050565b60206112d98285856112ad565b013561131e6112e98386866112ad565b353373ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000209060005260205260406000205490565b1161139857807f42063b8d32ac0a88f94053143bb30a789b3d5dfabb27d6c8a54e23d4fef30851606061135460019487876112ad565b3560206113628589896112ad565b0135336000526000602052604060002082600052602052806040600020556040519133835260208301526040820152a1016112c0565b7e2a700a0000000000000000000000000000000000000000000000000000000060005260046000fd5b604051906113ce8261024d565b6060608083600081526000602082015282604082015282808201520152565b9060041161013a5790600490565b9093929384831161013a57841161013a578101920390565b604051906114208261022c565b6000602083606081520152565b6040519060c0820182811067ffffffffffffffff8211176102485760405281600081526000602082015260006040820152600060608201526060608082015260a0611476611413565b910152565b90611485826102c8565b6114926040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06114c082946102c8565b019060005b8281106114d157505050565b6020906114dc61142d565b828285010152016114c5565b6040513d6000823e3d90fd5b604051906080820182811067ffffffffffffffff8211176102485760405281600081526000602082015260006040820152606061147661142d565b90611539826102c8565b6115466040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061157482946102c8565b019060005b82811061158557505050565b6020906115906114f4565b82828501015201611579565b909162ffffff926115ab6113c1565b50600091813560e81c60039516906115e26115da6115d46115cc858a610e19565b8985886113fb565b90612579565b939097610e19565b602087019473ffffffffffffffffffffffffffffffffffffffff61161a875173ffffffffffffffffffffffffffffffffffffffff1690565b161561190a5750600181019392919083013560f81c906116398261147b565b9560005b83811061183e5750505015159081611835575b5061180b576040840193611664858261067e565b9490506116708561152f565b95608088019687526000945b86861061168e57505050505050505090565b6116aa6116996114f4565b918681013560f81c91600190910190565b608082161515835296908251156117eb57607f1684518110156117c15760006116e961172b996116dc602094896107ee565b5160608701525b89612ab4565b9b9092916117048b6116ff896109c58d8461067e565b612c3b565b92604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa156117bc57611766610a7c600051610b166020860191829073ffffffffffffffffffffffffffffffffffffffff169052565b156117875761177f816001938b519061126783836107ee565b50019461167c565b7fc1e84ed6000000000000000000000000000000000000000000000000000000006000526117b86024906000600452565b6000fd5b6114e8565b7fbd8ba84d0000000000000000000000000000000000000000000000000000000060005260046000fd5b60006116e961172b99611806602094604088019060ff169052565b6116e3565b7feb6252040000000000000000000000000000000000000000000000000000000060005260046000fd5b90501538611650565b611866906020600061185d6118739a61185561142d565b50878b6129fe565b8a959195612ab4565b9c90929161170488612af7565b838052039060015afa156117bc5760005173ffffffffffffffffffffffffffffffffffffffff6118ba610a7c865173ffffffffffffffffffffffffffffffffffffffff1690565b9116036118e0576001916118ce828b6107ee565b526118d9818a6107ee565b500161163d565b7f9e5c658b0000000000000000000000000000000000000000000000000000000060005260046000fd5b807f9e5c658b0000000000000000000000000000000000000000000000000000000060049252fd5b6040519061193f8261024d565b60606080836000815260006020820152600060408201526000838201520152565b919091357fffffffff0000000000000000000000000000000000000000000000000000000081169260048110611994575050565b7fffffffff00000000000000000000000000000000000000000000000000000000929350829060040360031b1b161690565b939594909291926119d56106d2565b506119de611932565b9660005b8151811015611d45576119f8610a6182846107ee565b73ffffffffffffffffffffffffffffffffffffffff808716911614611a1f576001016119e2565b90611a3092939495969798506107ee565b51945b73ffffffffffffffffffffffffffffffffffffffff611a66875173ffffffffffffffffffffffffffffffffffffffff1690565b1615611d0157602086015180151580611cf7575b611cca5750606086015167ffffffffffffffff1680151580611cb7575b611c805750906109c5826040611aae94019061067e565b91611abb608084016107e4565b610cb457611ac883610e01565b73ffffffffffffffffffffffffffffffffffffffff163014611bce576080850160ff815151931692831015611ba457611b1592611b0591516107ee565b5190602087019484865193610f74565b9015611b7a5760209252013580611b63575b5060408083015191015110611b395790565b7faa7feadc0000000000000000000000000000000000000000000000000000000060005260046000fd5b611b7260408401918251610e19565b905238611b27565b7f868a64de0000000000000000000000000000000000000000000000000000000060005260046000fd5b7f3f904dc00000000000000000000000000000000000000000000000000000000060005260046000fd5b50509150506020611bf4611bee611be86040850185610e26565b906113ed565b90611960565b9101351590811591611c33575b50611c095790565b7f540733ea0000000000000000000000000000000000000000000000000000000060005260046000fd5b7f42de14180000000000000000000000000000000000000000000000000000000091507fffffffff0000000000000000000000000000000000000000000000000000000016141538611c01565b7fb1bbfdd50000000000000000000000000000000000000000000000000000000060005267ffffffffffffffff1660045260246000fd5b5067ffffffffffffffff81164211611a97565b7f331003b30000000000000000000000000000000000000000000000000000000060005260045260246000fd5b5046811415611a7a565b7fc1e84ed60000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff841660045260246000fd5b505090919293959495611a33565b9081602091031261013a575190565b60005b838110611d755750506000910152565b8181015183820152602001611d65565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093611dc181518092818752878088019101611d62565b0116010190565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b9073ffffffffffffffffffffffffffffffffffffffff8235611e288161013f565b1681526020820135602082015260408201357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18336030181121561013a57820160208135910167ffffffffffffffff821161013a57813603811361013a57611ea060c09291839260e0604087015260e0860191611dc8565b9360608101356060850152611ec3611eba608083016102ea565b15156080860152565b611edb611ed260a083016102ea565b151560a0860152565b013591015290565b73ffffffffffffffffffffffffffffffffffffffff6103dc94921681526060602082015273ffffffffffffffffffffffffffffffffffffffff83511660608201527fffffffff000000000000000000000000000000000000000000000000000000006020840151166080820152604083015160a0820152606083015160c082015260a0611f80608085015160c060e0850152610120840190611d85565b930151927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa082820301610100830152602067ffffffffffffffff81611fce8751604086526040860190611d85565b960151169101526040818403910152611e07565b92939091612007610a7c865173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff8216036121bf5761202f608085016107e4565b610cb45761203d8282612d8a565b61217c57506120549061204f84610e01565b612d8a565b61212e576020820135611b3957602082612076610a7c610a7c6120ac96610e01565b60405180809681947f9d043a66000000000000000000000000000000000000000000000000000000008352898860048501611ee3565b03915afa9182156117bc576000926120fb575b506120ca9192612e55565b036120d157565b7f0881ad5d0000000000000000000000000000000000000000000000000000000060005260046000fd5b6120ca92506121219060203d602011612127575b6121198183610269565b810190611d53565b916120bf565b503d61210f565b6117b861213a83610e01565b7fd33f19e70000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff16600452602490565b7fd33f19e70000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff1660045260246000fd5b7fc1e84ed60000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff1660045260246000fd5b9060206103dc928181520190610383565b92919267ffffffffffffffff8211610248576040519161225b601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200184610269565b82948184528183011161013a578281602093846000960137010152565b908051612283575050565b61228c82610e01565b73ffffffffffffffffffffffffffffffffffffffff1630148015906124ae575b61139857600092835b825185101561230a576122d89060206122ce87866107ee565b5101515190610e19565b9360406122e582856107ee565b5101516122f6575b600101936122b5565b936123026001916108f1565b9490506122ed565b61231691939450610855565b60009081935b83518510156124435760005b602061233487876107ee565b51015151811015612381578061237a61235d60019360206123558b8b6107ee565b5101516107ee565b5195612368816108f1565b9661237382886107ee565b52856107ee565b5001612328565b509493600190604061239382876107ee565b5101516123a3575b01939461231c565b61243d6123b3610a6183886107ee565b6040516123ff81610c27602082019485602073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee9193929373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b51902094604061240f84896107ee565b51015161241a6102aa565b968752602087015261242b816108f1565b9561243682876107ee565b52846107ee565b5061239b565b9493506124a09250612499915060405161248b81610c2760208201947f42de141800000000000000000000000000000000000000000000000000000000865260248301612202565b519020926040810190610e26565b3691612213565b602081519101200361139857565b50600160c083013514156122ac565b906124c7826102c8565b6124d46040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061250282946102c8565b019060005b82811061251357505050565b60209061251e611932565b82828501015201612507565b90612534826102c8565b6125416040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061256f82946102c8565b0190602036910137565b916125826113c1565b60009384908190612595605e87046124bd565b91606085019283525b8681106125ae5750505152929150565b8181013560fc81901c97916001019060f81c81891561294f57506001891461291d576002891461277857600389146126ad575060048814612618577f0ad9979000000000000000000000000000000000000000000000000000000000600052600488905260246000fd5b90919293949596506020860173ffffffffffffffffffffffffffffffffffffffff612657825173ffffffffffffffffffffffffffffffffffffffff1690565b166118e0578382013560601c815260149091019061267d9061267890610b16565b613086565b865180156126a7579061269891600052602052604060002090565b86525b9594939291909561259e565b50612698565b9890919293949596975061180b57600f60019816600f8114612767575b81906126d58161252a565b604089019081528a60005b83811061272857505050506126fa826127009285876113fb565b90613012565b86518015612722579061271b91600052602052604060002090565b865261269b565b5061271b565b61275f958881013560601c9060140196906127448386516107ee565b9073ffffffffffffffffffffffffffffffffffffffff169052565b018b906126e0565b50600281019083013560f01c6126ca565b6127db9698506127d36127e492600f6115d4939c96979a95989c169087929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b979088610e19565b809787876113fb565b93909593612906575b6020860173ffffffffffffffffffffffffffffffffffffffff612824825173ffffffffffffffffffffffffffffffffffffffff1690565b1661289c575b5060005b6060870151805182101561286b579061286461284c826001946107ee565b519b8a51612859826108f1565b9d61126783836107ee565b500161282e565b5050929096959391979486518015156000146128955761271b915190600052602052604060002090565b505161271b565b602089016128c1610a7c825173ffffffffffffffffffffffffffffffffffffffff1690565b6118e0576128e6612900925173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff169052565b3861282a565b9161180b57600191604086015160408901526127ed565b508551969750949593949293919290916020820191840135908015612722579061271b91600052602052604060002090565b92939495969798505050612961611932565b8184018035606090811c8352601482013560208401526034820135604084015260549091013560c01c908201529461299d605c83018486612f07565b80939160808901526129b09185876113fb565b6129b991612fbd565b87516129f292919080156129f857906129da91600052602052604060002090565b885285516129e7826108f1565b9761126783836107ee565b5061269b565b506129da565b612aa991939293612aa362ffffff612a7e6018612a1961142d565b987fffffffff000000000000000000000000000000000000000000000000000000006014888301803560601c8d5201351660208b01520160208682013591019060408a015260208682013591019060608a01528560039092919283013560e81c920190565b911690612a99612499612a918484610e19565b8387896113fb565b6080890152610e19565b916130ea565b929060a08201529190565b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff811161091e5791565b73ffffffffffffffffffffffffffffffffffffffff81511690612c1a7fffffffff00000000000000000000000000000000000000000000000000000000602083015116610c277fffffff0000000000000000000000000000000000000000000000000000000000604085015194606081015190608081015191612c096008602360a062ffffff87511695015180517fffffffffffffffff00000000000000000000000000000000000000000000000060208251930151916040519a8b9460e81b166020850152612bd08151809260208888019101611d62565b83019160c01b168382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8810187520185610269565b604051978896602088019a8b613135565b51902090565b9080601f8301121561013a578160206103dc93359101612213565b906020810135612c4a816102e0565b15612d1a576000915b608060608301359201359160e08236031261013a57612c706102b9565b91612c7a81610179565b83526020810135602084015260408101359067ffffffffffffffff821161013a57612c1a9360c0612cf292612cb5610c279536908301612c20565b604084015260608101356060840152612cd0608082016102ea565b6080840152612ce160a082016102ea565b60a0840152013560c08201526131ed565b6040519485936020850197889290916080949284526020840152604083015260608201520190565b4691612c53565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821360011661091e57565b906001820191600060018412911290801582169115161761091e57565b9190916000838201938412911290801582169115161761091e57565b600082517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811360011661091e57905b81811315612dce5750505050600090565b808203600082128382128116908483139015161761091e57612df4906002900582612d6e565b90612e02610b1683876107ee565b73ffffffffffffffffffffffffffffffffffffffff8581169116808203612e2f5750505050505050600190565b1015612e445750612e3f90612d51565b612dbd565b9150612e4f90612d21565b90612dbd565b9060405160208101907f616363657074496d706c69636974526571756573740000000000000000000000825260158152612e90603582610269565b5190209160406060820151910151907fffffffffffffffffffffffffffffffffffffffff000000000000000000000000604051936020850195865260601b1660408401526054830152607482015260748152612c1a609482610269565b60405190612efa8261022c565b6060602083600081520152565b60018301939281013560f81c612f1c816102c8565b92612f2a6040519485610269565b8184527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0612f57836102c8565b0160005b818110612f9e5750506000925b828410612f7757505050509190565b90919295612f88600191848461333f565b9790612f9482886107ee565b5201929190612f68565b602090612fad95939495612eed565b8282890101520193929193612f5b565b90612c1a60016020926040519381859282840197600089526021850137820101828101600081525003017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610269565b90612c1a600160209260405193818592828401977f030000000000000000000000000000000000000000000000000000000000000089526021850137820101828101600081525003017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610269565b6040517fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208201927f0400000000000000000000000000000000000000000000000000000000000000845260601b16602182015260158152612c1a603582610269565b92916130f4611413565b9060038101908581013560e81c0194600386019182811161091e5761249960039361312292600b97856113fb565b83528501013560c01c6020820152920190565b9390927fffffffff00000000000000000000000000000000000000000000000000000000605b989796937fffffffffffffffffffffffffffffffffffffffff0000000000000000000000007fffffff00000000000000000000000000000000000000000000000000000000009660601b1687521660148601526018850152603884015260e81b1660588201526131d48251809360208785019101611d62565b016131e88251809360208685019101611d62565b010190565b73ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152612c1a61012082610269565b9061329e826102c8565b6132ab6040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06132d982946102c8565b019060005b8281106132ea57505050565b6020906040516132f98161024d565b60008152600083820152600060408201526000606082015260006080820152828285010152016132de565b60ff166004811015610e815790565b6004821015610e815752565b60ff93929150613394613384613367613356612eed565b948481013560601c91601490910190565b73ffffffffffffffffffffffffffffffffffffffff909116855290565b8281013560f81c91600190910190565b941661339f81613294565b602084019081526000925b8284106133b957505050509190565b9091929561347261345461343661340c6134298b602061342261341a6134158c6133f160019c8e60019092919283013560f81c920190565b989091613404888f8516151592516107ee565b519015159052565b60011c607f1690565b613324565b928b516107ee565b5101613333565b8581013591602090910190565b9060406134448c89516107ee565b5101528481013591602090910190565b9060606134628b88516107ee565b5101528381013591602090910190565b979060806134818387516107ee565b510152019291906133aa56fea2646970667358221220fbec8fcf4e138324c4467036ee1507b2f8aa2752bfcb89890b736efe2f2497c664736f6c634300081c0033a264697066735822122005c040e14ac7d7159058277d643fac6e228b8cf00f4ce19ce5e0ab7534f9ebb564736f6c634300081c0033","sourceMap":"372:833:22:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;849:28:3;372:833:22;;;;;;;;;;;;;;;;;;;;;;;;;;;2024:14:2;457:25:22;;2024:14:2;372:833:22;457:25;;2024:14:2;;;;;;;;;;;;457:25:22;;;336:42:2;457:25:22;;;;;;;372:833;457:25;;;372:833;562:26;;2024:14:2;336:42;780:55:22;562:26;2024:14:2;681:70:22;613:50;372:833;562:26;2024:14:2;545:44:22;562:26;;372:833;;562:26;2024:14:2;562:26:22;;;2024:14:2;;:::i;:::-;562:26:22;;;;;;;;;;372:833;;2024:14:2;;;;545:44:22;;;;;2024:14:2;;:::i;:::-;;;545:44:22;;;;;;;;;:::i;:::-;372:833;;2024:14:2;372:833:22;2024:14:2;;:::i;:::-;;;;;;;;;613:50:22;:::i;:::-;698:31;;372:833;;;698:31;2024:14:2;698:31:22;;;2024:14:2;;:::i;:::-;698:31:22;;;;;;;;;;2024:14:2;372:833:22;;731:19;;;;;336:42:2;;2024:14;;731:19:22;;;;372:833;731:19;;:::i;:::-;372:833;;2024:14:2;;;;681:70:22;;;;;2024:14:2;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;681:70:22;545:44;681:70;;;;;;:::i;:::-;2024:14:2;372:833:22;2024:14:2;;;;:::i;:::-;;;;;;;;;780:55:22;:::i;:::-;336:42:2;372:833:22;;890:60;;;;2024:14:2;890:60:22;;;;;;;;;372:833;890:60;;;372:833;2024:14:2;358:279:18;2024:14:2;372:833:22;7823:54:18;1140:57:22;2024:14:2;372:833:22;;2024:14:2;;372:833:22;2024:14:2;;:::i;:::-;;;;;;;;;336:42;372:833:22;;7823:54:18;;;;2024:14:2;7823:54:18;;;372:833:22;2024:14:2;7823:54:18;;372:833:22;457:25;372:833;;;;:::i;:::-;336:42:2;;2024:14;372:833:22;;2024:14:2;7823:54:18;545:44:22;7823:54:18;;;;;;:::i;:::-;358:279;;;;;131:42;358:279;;;1017:48:22;986:24;2024:14:2;969:42:22;2024:14:2;986:24:22;372:833;;986:24;2024:14:2;986:24:22;;;2024:14:2;;:::i;:::-;986:24:22;;;;;;;;;;372:833;;2024:14:2;;;;969:42:22;;;;;2024:14:2;;:::i;969:42:22:-;372:833;;2024:14:2;372:833:22;2024:14:2;;:::i;:::-;;;;;;;;;1017:48:22;:::i;:::-;;2024:14:2;1083:51:22;2024:14:2;1100:33:22;372:833;;1100:33;2024:14:2;1100:33:22;;;2024:14:2;;:::i;:::-;1100:33:22;;;;;;;;;;372:833;;2024:14:2;;;;1083:51:22;;;;;2024:14:2;;:::i;1083:51:22:-;372:833;;2024:14:2;372:833:22;2024:14:2;;:::i;:::-;;;;;;;;;1140:57:22;:::i;:::-;372:833;890:60;2024:14:2;890:60:22;;2024:14:2;890:60:22;;;;;;2024:14:2;890:60:22;;;:::i;:::-;;;2024:14:2;;;;;336:42;;;;2024:14;;;;890:60:22;358:279:18;890:60:22;;2024:14:2;;;;372:833:22;;;890:60;;;-1:-1:-1;890:60:22;;;372:833;;2024:14:2;372:833:22;2024:14:2;;;;;457:25:22;2024:14:2;457:25:22;;2024:14:2;457:25:22;;;;;;2024:14:2;457:25:22;;;:::i;:::-;;;2024:14:2;;;;;;-1:-1:-1;372:833:22;457:25;;2024:14:2;372:833:22;;;457:25;;;-1:-1:-1;457:25:22;;2024:14:2;;;;;;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;2024:14:2;;;;;-1:-1:-1;2024:14:2;;;;;;;;;-1:-1:-1;;2024:14:2;;;;:::o;:::-;;;;;;;;;;;;;442:41:0;;2024:14:2;;;442:41:0;;2024:14:2;;;;;;;;;;;442:41:0;;;:::i;:::-;2024:14:2;;442:41:0;;;:::o;1191:843::-;;;372:833:22;570:34:0;608:1;107:42:1;570:34:0;:39;;566:613;;1191:843;336:42:2;2024:14;;372:833:22;;;2313:20:0;372:833:22;;;2247:87:0;;372:833:22;;;;;;;;;;;;;;;;;;;2247:87:0;;;;;;:::i;:::-;2024:14:2;2237:98:0;;336:42:2;;;;608:1:0;1460:16;;:21;608:1;;372:833:22;1497:39:0;372:833:22;2024:14:2;372:833:22;2024:14:2;;;;;:::i;:::-;;;;372:833:22;;;;;1497:39:0;:::i;:::-;336:42:2;1550:21:0;;;;372:833:22;;1550:21:0;2024:14:2;1550:21:0;;;;;372:833:22;1550:21:0;;;;;336:42:2;1550:21:0;;;;;;;;1456:551;372:833:22;;;442:41:0;372:833:22;;;1606:42:0;;;;2024:14:2;1606:42:0;;372:833:22;1550:21:0;1606:42;;442:41;;;;;;:::i;:::-;;1550:21;442:41;;372:833:22;1606:42:0;;;107::1;1606::0;;;;;;;;;;;1456:551;1662:18;336:42:2;1662:18:0;;;;372:833:22;;2024:14:2;1662:18:0;;;;1550:21;1662:18;;336:42:2;1662:18:0;;;;;;;;1456:551;336:42:2;;;;1698:18:0;;1694:109;;608:1;1820:16;;:21;;1816:104;;1191:843;:::o;1816:104::-;1868:37;372:833:22;;1868:37:0;;;372:833:22;1550:21:0;1868:37;;442:41;;1550:21;442:41;;2024:14:2;442:41:0;;2024:14:2;;442:41:0;1868:37;1694:109;1743:45;372:833:22;;1743:45:0;;;372:833:22;1550:21:0;1743:45;;442:41;;1550:21;442:41;;2024:14:2;442:41:0;;2024:14:2;;442:41:0;1743:45;1662:18;;;;;;:::i;:::-;372:833:22;;1662:18:0;;;;372:833:22;;2024:14:2;372:833:22;;2024:14:2;;;;1606:42:0;;;;372:833:22;1606:42:0;;372:833:22;1606:42:0;;;;;;372:833:22;1606:42:0;;;:::i;:::-;;;442:41;;;;;336:42:2;;;2024:14;;;;1606:42:0;;;;;;;-1:-1:-1;1606:42:0;;;372:833:22;;;2024:14:2;;;;;;;;1550:21:0;;;;;;:::i;:::-;372:833:22;;1550:21:0;;;;372:833:22;;2024:14:2;372:833:22;;2024:14:2;;;;1456:551:0;372:833:22;;;;1950:46:0;372:833:22;;2024:14:2;372:833:22;2024:14:2;;;;;:::i;:::-;372:833:22;2024:14:2;;372:833:22;;;;;1950:46:0;:::i;:::-;1191:843;:::o;566:613::-;274:12:1;189:42;629:26:0;:50;625:360;;566:613;358:279:18;372:833:22;;7823:54:18;2024:14:2;372:833:22;2024:14:2;;;;:::i;:::-;274:12:1;2024:14:2;;274:12:1;;;;;372:833:22;;7823:54:18;;;;;;;;372:833:22;7823:54:18;;;372:833:22;;;;;;:::i;:::-;107:42:1;372:833:22;;;2024:14:2;7823:54:18;;;;;;;;:::i;:::-;358:279;;;;;131:42;358:279;;;372:833:22;;2024:14:2;;;;:::i;:::-;274:12:1;2024:14:2;;274:12:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;336:42:2;1121:47:0;;;;372:833:22;329:739:1;372:833:22;274:12:1;372:833:22;1121:47:0;;;;2024:14:2;1121:47:0;;274:12:1;1121:47:0;;;329:739:1;;;;;;:::i;:::-;1121:47:0;;;336:42:2;1121:47:0;;;;;;;;;;;566:613;;;;;1121:47;;;;;:::i;:::-;372:833:22;;1121:47:0;;;;;274:12:1;372:833:22;2024:14:2;372:833:22;;2024:14:2;;;;1121:47:0;372:833:22;;;625:360:0;372:833:22;;;6262:42:18;2024:14:2;372:833:22;2024:14:2;;;;:::i;:::-;274:12:1;2024:14:2;;274:12:1;;;;;372:833:22;;6262:42:18;;;;274:12:1;6262:42:18;;;274:12:1;6262:42:18;;;372:833:22;;;;;;:::i;:::-;6262:42:18;;;;;;;;:::i;:::-;358:279;;;;;131:42;358:279;;;336:42:2;807:21:0;;;;372:833:22;;2024:14:2;807:21:0;;;;;;372:833:22;807:21:0;;6262:42:18;807:21:0;;336:42:2;807:21:0;;;;;;;;625:360;907:26;189:42:1;907:26:0;274:12:1;;;;;;;;;846:88:0;;;;;;;;274:12:1;846:88:0;;;625:360;189:42:1;846:88:0;;;;;336:42:2;952:18:0;;;;372:833:22;;2024:14:2;952:18:0;;;;807:21;952:18;;336:42:2;952:18:0;;;;;;;;;;;625:360;;;;;952:18;;;;;:::i;:::-;372:833:22;;952:18:0;;;;846:88;-1:-1:-1;846:88:0;;;274:12:1;6262:42:18;274:12:1;;;;;807:21:0;274:12:1;;807:21:0;;;;;;;;:::i;:::-;;;;;12983:174:18;13084:65;372:833:22;12983:174:18;358:279;12983:174;336:42:2;372:833:22;12983:174:18;;372:833:22;;13084:65:18;;;;;;;;372:833:22;13084:65:18;;;372:833:22;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;336:42:2;;372:833:22;;;2024:14:2;13084:65:18;;;;;;;;:::i;:::-;358:279;;;;;131:42;358:279;;;12983:174::o","linkReferences":{}},"methodIdentifiers":{"IS_SCRIPT()":"f8ccbf47","run()":"c0406226"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"DeploymentFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IS_SCRIPT\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"run\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"script/Deploy.s.sol\":\"Deploy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/erc2470-libs/script/SingletonDeployer.s.sol\":{\"keccak256\":\"0x3fdec03d51d77fcda6d6c681e26e7c8d4b85f1457eac91e0ec15411a7ab1e1f6\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://a690bf4481a37f3f77acdeecac089462db83f0437307610981b24c04b5202f6e\",\"dweb:/ipfs/QmUA9TSjAkqefNBW8BiRqg8XDJiJxJPxSsZHQwJJAbrYQg\"]},\"lib/erc2470-libs/src/ISingletonFactory.sol\":{\"keccak256\":\"0x0a17871e1017f36a664b877f5b0db297dc998fdf8b0ab82d00ca50d5bdde88f7\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://160bc0d890492792f85dfea939160290d90562b27154f64c39c2a615243518a6\",\"dweb:/ipfs/QmbxmqPpTAH7X45G75UjmLh3RSTDj7trMtmkGU6RXmRyEJ\"]},\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/Script.sol\":{\"keccak256\":\"0xc942e27c7baae499beb01afbbae99f24d42af9a6e4aae675bc6901b704aa8e9b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0456008adf68947247f358b62863af4a8e349549d2260f2ff9569ff0e3cf5c98\",\"dweb:/ipfs/QmdviSUj2i7o3TPN5vd2xocqGMFVqjUzaiJTZRYyPxyHPx\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"script/Deploy.s.sol\":{\"keccak256\":\"0xa5abf6a88da48391155754aee32e501361d9dbd13db0af2b6dd677299c84fa6a\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://73f827884406cf06bc0b5d37640c2c18f96d49eb0855d21c113b3adc085a834c\",\"dweb:/ipfs/QmU9MUtvzqNbMFxi9AtQiR6oHEJNWyNc2W7DKx1ToxRTZh\"]},\"src/Factory.sol\":{\"keccak256\":\"0x5924fe583809e9c148d47c871866f6094599bb07a4d1fc2d60c814fda9c37f46\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e24d3575bf2606cd5f0f6da093e420118e018549eeb3a4ccb94f57c0e285e123\",\"dweb:/ipfs/QmRvWQt91YLJEgk5hgnRkPjDdB39tUHLYtxijYyXKdCm5J\"]},\"src/Guest.sol\":{\"keccak256\":\"0xfd8c9d325f3593965dbc65b7a6fb1fea452d65aeecaf06a328481694876bc60c\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://92180762cdd69f516afc3bebef61fc16273a670ab6a9e9deaa25a9f51e39bcad\",\"dweb:/ipfs/QmXD5iSjnBWdDGH8WcZVzkgaHZKiAg9QgR4raSQ5uRDa5i\"]},\"src/Stage1Module.sol\":{\"keccak256\":\"0x3e3be2778ac65aded03c15a73b4382a6a7dde0bcc69d1268255fd734e320d084\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c4d8846d35267bf7bc895c04e3d91b525274ae0677ec3b5529cba02577a2bb67\",\"dweb:/ipfs/QmaZq74rdyLUwRGCfacFXVS7kAL2FhTm3u356kHLtggfiW\"]},\"src/Stage2Module.sol\":{\"keccak256\":\"0xd0b2c2fead81d32a3f83f95bd1dd2d90677fdd1e0a7194a25710ffd0fdaee428\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://8489e75346dbf462b0567da30c2e020cdde3975c38bdfee055284642a3bd2d19\",\"dweb:/ipfs/QmTDM2AkG8qLVjfn35UcXN89CdQS8p3Cm888EadYrMAYAR\"]},\"src/Wallet.sol\":{\"keccak256\":\"0xe01e9e937dd8d7572976ccc8ec3ec87e4a557069dafb05f85977a7b71f5c58d5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2e9ab78d33655f8e822258dff3f2d5ad01e84f6dc90174840d5a283b8e6413c1\",\"dweb:/ipfs/QmNMyYe3C1fs3cxKmUZ3S9VU5EE4WVWPVcwiGbgvbS1vrH\"]},\"src/extensions/sessions/SessionErrors.sol\":{\"keccak256\":\"0xa7642b4ef1d2ac8e41bd6dca88c5a644cac21b3ebe79deb5013e21fb4aaab405\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ef80768f6c509a54ea5d3fb92cbf46363f945f071cc3664710770c09b3d2a978\",\"dweb:/ipfs/QmbRpicAiPSYQbKpjoDbanap9q5hYsqEMS1u7w7sqKEYTY\"]},\"src/extensions/sessions/SessionManager.sol\":{\"keccak256\":\"0x796e8db3b2dc58842aca5c7fe76897527dd60279a8146ee107f651d876fccbd9\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2ee4d968a8bd5d007cccc67108509470677f4f5ce59dce7005b1da7d9b243609\",\"dweb:/ipfs/QmVUz8Q4BwNsbeLZdsWHg87MCVF6aAJL6UYzWWWAoxjvS7\"]},\"src/extensions/sessions/SessionSig.sol\":{\"keccak256\":\"0x7c44eabacfd2b4758fa8f54574f7479d8ef0209551ad824b3fc497c215a9609a\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://845b301783b1f069fa0b01d47ca2de1a79b0d4c3e14881973421a718c4d823df\",\"dweb:/ipfs/QmcDgiqjENAL3L7MjQ7HgitmsJ2PVNUm3ibnL2DZRU1VAL\"]},\"src/extensions/sessions/explicit/ExplicitSessionManager.sol\":{\"keccak256\":\"0x08405cc3def78d4172267a2e607e303b5f222d8cb85ba009deab58e0110088b0\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e2e073fdb5794f59ee6d7eb5e04074b1452e5d0824e4117259835071199f3d32\",\"dweb:/ipfs/Qmbi56yfELF88ezZ2tczegLmeB6Gb3HxDX11bzx3rpDgJZ\"]},\"src/extensions/sessions/explicit/IExplicitSessionManager.sol\":{\"keccak256\":\"0xae940e96cf0677c9b0df0daee07db0293c55a21cec0b893d82eefd122815602b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://62ee98f92121ad54f78d375ec3003aab73719adec852b0d12518fe99fc6f66c6\",\"dweb:/ipfs/QmPuAX7tdga5Su1xua6LS6jR9DsV7GyCwyZLeRC8upPTKY\"]},\"src/extensions/sessions/explicit/Permission.sol\":{\"keccak256\":\"0x0bc35a04da3830c64ec13c32b57f88be6b980228f6b387e800cf70919cdcfb16\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://fcb304612f894699f8e1e40cf134abebe8f7135795bea479b04e967551c59948\",\"dweb:/ipfs/Qme4mD8dh3xU9wbscQwvL4cQcZ2Wv8Fobo2fmU29B3DirV\"]},\"src/extensions/sessions/explicit/PermissionValidator.sol\":{\"keccak256\":\"0xe970e1ce931ef3779e3ddc9525b40820b7f63746828a440306ff9c984da42234\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://9154a986b7a5565119b2c0993dd9bc9e6e9b3e07eede034c8fde1c9f39a56a30\",\"dweb:/ipfs/QmXbgsr6kYYK5gmge6sosgwbHnFnQW5ntCZCyeNTQqTndD\"]},\"src/extensions/sessions/implicit/Attestation.sol\":{\"keccak256\":\"0xcaa44022b5eb4bc7ab487b3b1a0125da67e2e891cee983ef6cdb6814f045efc8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://94829782b6dcb482d7c002511c590d1ad8de3b21e5e72575df18be73565b3638\",\"dweb:/ipfs/QmZ4u9FxALzMzKR7auW8FmFkhGVw8kRDeDRJ1PKwKaWNWF\"]},\"src/extensions/sessions/implicit/ISignalsImplicitMode.sol\":{\"keccak256\":\"0x6cb48f50c49bcb3c7071306fe9fac6c102bc9eabf73d9909e19ab3b9a835d0a8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://15297e969f64fc1152654d1cefbe276c15a0ecfc11f86b4c276bb0b454fe700a\",\"dweb:/ipfs/QmeehNFYBPPtJePwUcqiYCgiuFotur4VVVCV1KvegdCCZ4\"]},\"src/extensions/sessions/implicit/ImplicitSessionManager.sol\":{\"keccak256\":\"0xe0d4f9f9c242e1e5781ba3a2eb4c4485b16de53769dacf7f448be01649d9997b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://f6f28cfeca83fffc74e63440243fcb0a7f9a7d5ac5efae21fa8e96926c1d0fae\",\"dweb:/ipfs/Qmdnw9PrjjpUjWij9VDxBRe6besuJvpwiGaPewVcR2G9C1\"]},\"src/modules/Calls.sol\":{\"keccak256\":\"0xcd0d38d0fd248e4443032dede2b8892ea0ca7e55538cd54082830f6b98d8edb1\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://617bb6d0724b18f3d77347cc454a57c1c916a0818a592552bd7fa226aa41a306\",\"dweb:/ipfs/Qmeet85Ux6cKq9JmC25JnTzFnRrgDpkyRik2svZLWt4fov\"]},\"src/modules/ERC4337v07.sol\":{\"keccak256\":\"0xbee11ed2498b892b16f72984c848fea85b58d15313fffa78c1e48ca7208f9189\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2d9296803bd52f5e2ae84011593f686802f1cadf6c68a4ee9f97e6455463ae0f\",\"dweb:/ipfs/QmXmWwUiV2eshxxdY5zCyJ7rxcH7bztxcAoh1scw2MPuhP\"]},\"src/modules/Hooks.sol\":{\"keccak256\":\"0xd1f9de45b83ae5f9f32a4d1c709d7a2b6543b1cddd09bf69d401dcdf1d154ab7\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://bf3161edf37479825588e07039752b79792666455cc0beb1ca0e873b3be31ad4\",\"dweb:/ipfs/QmYYpJeSsRgRx2oHcpvhqsNs7ZtDhVnxLmFpXz5eYcS8g4\"]},\"src/modules/Implementation.sol\":{\"keccak256\":\"0x16546d4be07865808890308750916b0a9a55e7a994a458c01edde4618f29b4e6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1b1f9785b08c9f29d6849ba2d3dee89fa3ea5f3c2feec4a59a6d1040e3fbe040\",\"dweb:/ipfs/QmU2Pm5C3Ztky7RQdCZggavyq7Eh1eS1HFqVz9jZKiMUML\"]},\"src/modules/Nonce.sol\":{\"keccak256\":\"0x56fbf6dc9b34ab60ae8a32ffb6f583c003bb8f4a5223ce704e982400fa403fab\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://492f53628633b862702cf8f9b726067a722c94028133a8a4c4fcf3d0e73ad803\",\"dweb:/ipfs/QmTHNy4XbH47YZaqKDpknb5aApjRH9HVAREHN7N5vEFWEV\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/Storage.sol\":{\"keccak256\":\"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da\",\"dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn\"]},\"src/modules/auth/BaseAuth.sol\":{\"keccak256\":\"0xbf2e40def03fcb5f4a5129b2f5803e21951325b92e00126cbe1427b7c25cfefd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://b560905fcc4b957d27c2abed78a1e82529c89fa472e91b3d108fbfd91aa7c3f7\",\"dweb:/ipfs/QmRjLLtTWE6dFX2kBQCgLz7ossfMxhAFgDC8Jx9XuGL6Wy\"]},\"src/modules/auth/BaseSig.sol\":{\"keccak256\":\"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8\",\"dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3\"]},\"src/modules/auth/SelfAuth.sol\":{\"keccak256\":\"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42\",\"dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W\"]},\"src/modules/auth/Stage1Auth.sol\":{\"keccak256\":\"0x399e21aad2b30bf80a21766bd3442d676a26eb66c02423617b2772df7204cb0a\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://25c698dee10c6fbb8b63adb4023f1886669b8e9c54dcd98871f0bd6a2b6acf03\",\"dweb:/ipfs/QmNzUFWCoymaoV7CFgJvbAWRsJAZkqBhSpgff26JVAr9hf\"]},\"src/modules/auth/Stage2Auth.sol\":{\"keccak256\":\"0x5b23b530522ba1c02248d1f7470352c57fbc91c245c7c577044f93f6bb560a59\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c30b8e13edc7e18e4ea7bc7f4b8deaf16301a8f2bb23e7697e6f6b74882a39dc\",\"dweb:/ipfs/QmW69XvfeJepuPBrHb1Vpkikg43P4juEGdRkUWt8GrrAfL\"]},\"src/modules/interfaces/IAccount.sol\":{\"keccak256\":\"0x64ca3bb59ec4fc0a60d80402802365e2d5226afe7e7aabe3b21df936c84f2bcb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ccfd2381e1874cdec2f473a9a17799a3b57360c0593d68ee66fcea9c16eb39b4\",\"dweb:/ipfs/QmcjbJpGz3Exmu4fsj953Y2bG8rtQaVMEFUgT6W2dUXomr\"]},\"src/modules/interfaces/IAuth.sol\":{\"keccak256\":\"0xf6fa30af2ec91d5fbeac17c9b1f2aa73b7883c9ac98745605007e57666394b91\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://6e90a87978519462f9612f4a17e38fddc1c7bcf700ff834a1de7dce326f30353\",\"dweb:/ipfs/QmXmWAsRRK6t4jPs4VcXrouyokxdALM28D3odX7ub48WEp\"]},\"src/modules/interfaces/ICheckpointer.sol\":{\"keccak256\":\"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1\",\"dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t\"]},\"src/modules/interfaces/IDelegatedExtension.sol\":{\"keccak256\":\"0xa2ae897e90fd70dd4a9e172bc04d019ba9c512e72c2df65fcb6daf87dd5ceb90\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://cdf4b7c3dfb0aef6c9dbe8b2a0542018dc756ef2252d7101bcb3186192da0a11\",\"dweb:/ipfs/QmPHCVu1DJ7fBrPBYA5y3hoF3a3XFEBwYCZ1ErGaxPhcYL\"]},\"src/modules/interfaces/IERC1155Receiver.sol\":{\"keccak256\":\"0xa23d0bc29233a91085922ea8a7e2cbe8b5f3358d3f2c3cdc58adade9a171d9c1\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2f06b8f3ae7a45441cc26da5b2ddd15ba76d1664178958f63f536e6c5e4fd0fb\",\"dweb:/ipfs/QmR1Rnk8ciSn5s5wNLGvpE1QNRDsBVDfDT1ZXhei2brmFj\"]},\"src/modules/interfaces/IERC1271.sol\":{\"keccak256\":\"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b\",\"dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF\"]},\"src/modules/interfaces/IERC223Receiver.sol\":{\"keccak256\":\"0x426221c0d48b651ed692edfa5388d6e5304e94f48598a71748134b2659e3890d\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://9e1ed2fd5e390b5b943dc07c2e0ea9e524eb37263dc72c482365c159fc3659e5\",\"dweb:/ipfs/QmWRDBvb1cthVPm4BSzKX3J5GpGGSBuDokkpRK9x5aA7JR\"]},\"src/modules/interfaces/IERC721Receiver.sol\":{\"keccak256\":\"0xbe14c3b727f283a467dc2f2221d3322c5a69cd64a3aacad85acab05e94438f35\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://43ef086c509b8b88cae78f67c4bd979fd427736972cfe56f7423371ccc154e63\",\"dweb:/ipfs/Qmc7Yp7Z1dQ925gzEZYVNUXnWr3YomvWkXfaGYLZpoy8J3\"]},\"src/modules/interfaces/IERC777Receiver.sol\":{\"keccak256\":\"0xd9144d439a96b0c6439cd9a186701aa530f4f782ff09fdbf6c3ef16b78b0d4e5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d1f17484eda7184db4a00106b4952f15c1517872cbfe19663d6fce4e042729b2\",\"dweb:/ipfs/QmWdhYmLNkUpgvPpSyGHstxrFwMfhRTVmxDpe4frkUu1Qh\"]},\"src/modules/interfaces/IEntryPoint.sol\":{\"keccak256\":\"0xd19922ea7a8ae09072a721138dc93e175fa77ecaa3ac6f2d759d5e5e944fb665\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://20ecea69ddd4d8787c0bdc4487dea03e90f63f4296674a12728e331a78e62620\",\"dweb:/ipfs/QmZUrX8zEqfHZEJQjNtDUXGS47bj2UuRCLfbkLPrXsot1c\"]},\"src/modules/interfaces/IPartialAuth.sol\":{\"keccak256\":\"0x0d1aa021615d8e90696e71a9468331457a1babfa2ffe169654b7456e5bcb7a73\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://bbacd149a6358ab0d4b9c588d2e3a55fc71ed4723269150d7b91ca70092f6519\",\"dweb:/ipfs/QmUSwtrYCrRcRFsy5rCzdMPrw1FCU7ZoeXdsW6kK9yc8FK\"]},\"src/modules/interfaces/ISapient.sol\":{\"keccak256\":\"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489\",\"dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"src/utils/LibOptim.sol\":{\"keccak256\":\"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81\",\"dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"type":"error","name":"DeploymentFailed"},{"inputs":[],"stateMutability":"view","type":"function","name":"IS_SCRIPT","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"run"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"script/Deploy.s.sol":"Deploy"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/erc2470-libs/script/SingletonDeployer.s.sol":{"keccak256":"0x3fdec03d51d77fcda6d6c681e26e7c8d4b85f1457eac91e0ec15411a7ab1e1f6","urls":["bzz-raw://a690bf4481a37f3f77acdeecac089462db83f0437307610981b24c04b5202f6e","dweb:/ipfs/QmUA9TSjAkqefNBW8BiRqg8XDJiJxJPxSsZHQwJJAbrYQg"],"license":"UNLICENSED"},"lib/erc2470-libs/src/ISingletonFactory.sol":{"keccak256":"0x0a17871e1017f36a664b877f5b0db297dc998fdf8b0ab82d00ca50d5bdde88f7","urls":["bzz-raw://160bc0d890492792f85dfea939160290d90562b27154f64c39c2a615243518a6","dweb:/ipfs/QmbxmqPpTAH7X45G75UjmLh3RSTDj7trMtmkGU6RXmRyEJ"],"license":"UNLICENSED"},"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/Script.sol":{"keccak256":"0xc942e27c7baae499beb01afbbae99f24d42af9a6e4aae675bc6901b704aa8e9b","urls":["bzz-raw://0456008adf68947247f358b62863af4a8e349549d2260f2ff9569ff0e3cf5c98","dweb:/ipfs/QmdviSUj2i7o3TPN5vd2xocqGMFVqjUzaiJTZRYyPxyHPx"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"script/Deploy.s.sol":{"keccak256":"0xa5abf6a88da48391155754aee32e501361d9dbd13db0af2b6dd677299c84fa6a","urls":["bzz-raw://73f827884406cf06bc0b5d37640c2c18f96d49eb0855d21c113b3adc085a834c","dweb:/ipfs/QmU9MUtvzqNbMFxi9AtQiR6oHEJNWyNc2W7DKx1ToxRTZh"],"license":"Apache-2.0"},"src/Factory.sol":{"keccak256":"0x5924fe583809e9c148d47c871866f6094599bb07a4d1fc2d60c814fda9c37f46","urls":["bzz-raw://e24d3575bf2606cd5f0f6da093e420118e018549eeb3a4ccb94f57c0e285e123","dweb:/ipfs/QmRvWQt91YLJEgk5hgnRkPjDdB39tUHLYtxijYyXKdCm5J"],"license":"Apache-2.0"},"src/Guest.sol":{"keccak256":"0xfd8c9d325f3593965dbc65b7a6fb1fea452d65aeecaf06a328481694876bc60c","urls":["bzz-raw://92180762cdd69f516afc3bebef61fc16273a670ab6a9e9deaa25a9f51e39bcad","dweb:/ipfs/QmXD5iSjnBWdDGH8WcZVzkgaHZKiAg9QgR4raSQ5uRDa5i"],"license":"Apache-2.0"},"src/Stage1Module.sol":{"keccak256":"0x3e3be2778ac65aded03c15a73b4382a6a7dde0bcc69d1268255fd734e320d084","urls":["bzz-raw://c4d8846d35267bf7bc895c04e3d91b525274ae0677ec3b5529cba02577a2bb67","dweb:/ipfs/QmaZq74rdyLUwRGCfacFXVS7kAL2FhTm3u356kHLtggfiW"],"license":"Apache-2.0"},"src/Stage2Module.sol":{"keccak256":"0xd0b2c2fead81d32a3f83f95bd1dd2d90677fdd1e0a7194a25710ffd0fdaee428","urls":["bzz-raw://8489e75346dbf462b0567da30c2e020cdde3975c38bdfee055284642a3bd2d19","dweb:/ipfs/QmTDM2AkG8qLVjfn35UcXN89CdQS8p3Cm888EadYrMAYAR"],"license":"Apache-2.0"},"src/Wallet.sol":{"keccak256":"0xe01e9e937dd8d7572976ccc8ec3ec87e4a557069dafb05f85977a7b71f5c58d5","urls":["bzz-raw://2e9ab78d33655f8e822258dff3f2d5ad01e84f6dc90174840d5a283b8e6413c1","dweb:/ipfs/QmNMyYe3C1fs3cxKmUZ3S9VU5EE4WVWPVcwiGbgvbS1vrH"],"license":"Apache-2.0"},"src/extensions/sessions/SessionErrors.sol":{"keccak256":"0xa7642b4ef1d2ac8e41bd6dca88c5a644cac21b3ebe79deb5013e21fb4aaab405","urls":["bzz-raw://ef80768f6c509a54ea5d3fb92cbf46363f945f071cc3664710770c09b3d2a978","dweb:/ipfs/QmbRpicAiPSYQbKpjoDbanap9q5hYsqEMS1u7w7sqKEYTY"],"license":"Apache-2.0"},"src/extensions/sessions/SessionManager.sol":{"keccak256":"0x796e8db3b2dc58842aca5c7fe76897527dd60279a8146ee107f651d876fccbd9","urls":["bzz-raw://2ee4d968a8bd5d007cccc67108509470677f4f5ce59dce7005b1da7d9b243609","dweb:/ipfs/QmVUz8Q4BwNsbeLZdsWHg87MCVF6aAJL6UYzWWWAoxjvS7"],"license":"Apache-2.0"},"src/extensions/sessions/SessionSig.sol":{"keccak256":"0x7c44eabacfd2b4758fa8f54574f7479d8ef0209551ad824b3fc497c215a9609a","urls":["bzz-raw://845b301783b1f069fa0b01d47ca2de1a79b0d4c3e14881973421a718c4d823df","dweb:/ipfs/QmcDgiqjENAL3L7MjQ7HgitmsJ2PVNUm3ibnL2DZRU1VAL"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/ExplicitSessionManager.sol":{"keccak256":"0x08405cc3def78d4172267a2e607e303b5f222d8cb85ba009deab58e0110088b0","urls":["bzz-raw://e2e073fdb5794f59ee6d7eb5e04074b1452e5d0824e4117259835071199f3d32","dweb:/ipfs/Qmbi56yfELF88ezZ2tczegLmeB6Gb3HxDX11bzx3rpDgJZ"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/IExplicitSessionManager.sol":{"keccak256":"0xae940e96cf0677c9b0df0daee07db0293c55a21cec0b893d82eefd122815602b","urls":["bzz-raw://62ee98f92121ad54f78d375ec3003aab73719adec852b0d12518fe99fc6f66c6","dweb:/ipfs/QmPuAX7tdga5Su1xua6LS6jR9DsV7GyCwyZLeRC8upPTKY"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/Permission.sol":{"keccak256":"0x0bc35a04da3830c64ec13c32b57f88be6b980228f6b387e800cf70919cdcfb16","urls":["bzz-raw://fcb304612f894699f8e1e40cf134abebe8f7135795bea479b04e967551c59948","dweb:/ipfs/Qme4mD8dh3xU9wbscQwvL4cQcZ2Wv8Fobo2fmU29B3DirV"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/PermissionValidator.sol":{"keccak256":"0xe970e1ce931ef3779e3ddc9525b40820b7f63746828a440306ff9c984da42234","urls":["bzz-raw://9154a986b7a5565119b2c0993dd9bc9e6e9b3e07eede034c8fde1c9f39a56a30","dweb:/ipfs/QmXbgsr6kYYK5gmge6sosgwbHnFnQW5ntCZCyeNTQqTndD"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/Attestation.sol":{"keccak256":"0xcaa44022b5eb4bc7ab487b3b1a0125da67e2e891cee983ef6cdb6814f045efc8","urls":["bzz-raw://94829782b6dcb482d7c002511c590d1ad8de3b21e5e72575df18be73565b3638","dweb:/ipfs/QmZ4u9FxALzMzKR7auW8FmFkhGVw8kRDeDRJ1PKwKaWNWF"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/ISignalsImplicitMode.sol":{"keccak256":"0x6cb48f50c49bcb3c7071306fe9fac6c102bc9eabf73d9909e19ab3b9a835d0a8","urls":["bzz-raw://15297e969f64fc1152654d1cefbe276c15a0ecfc11f86b4c276bb0b454fe700a","dweb:/ipfs/QmeehNFYBPPtJePwUcqiYCgiuFotur4VVVCV1KvegdCCZ4"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/ImplicitSessionManager.sol":{"keccak256":"0xe0d4f9f9c242e1e5781ba3a2eb4c4485b16de53769dacf7f448be01649d9997b","urls":["bzz-raw://f6f28cfeca83fffc74e63440243fcb0a7f9a7d5ac5efae21fa8e96926c1d0fae","dweb:/ipfs/Qmdnw9PrjjpUjWij9VDxBRe6besuJvpwiGaPewVcR2G9C1"],"license":"Apache-2.0"},"src/modules/Calls.sol":{"keccak256":"0xcd0d38d0fd248e4443032dede2b8892ea0ca7e55538cd54082830f6b98d8edb1","urls":["bzz-raw://617bb6d0724b18f3d77347cc454a57c1c916a0818a592552bd7fa226aa41a306","dweb:/ipfs/Qmeet85Ux6cKq9JmC25JnTzFnRrgDpkyRik2svZLWt4fov"],"license":"Apache-2.0"},"src/modules/ERC4337v07.sol":{"keccak256":"0xbee11ed2498b892b16f72984c848fea85b58d15313fffa78c1e48ca7208f9189","urls":["bzz-raw://2d9296803bd52f5e2ae84011593f686802f1cadf6c68a4ee9f97e6455463ae0f","dweb:/ipfs/QmXmWwUiV2eshxxdY5zCyJ7rxcH7bztxcAoh1scw2MPuhP"],"license":"Apache-2.0"},"src/modules/Hooks.sol":{"keccak256":"0xd1f9de45b83ae5f9f32a4d1c709d7a2b6543b1cddd09bf69d401dcdf1d154ab7","urls":["bzz-raw://bf3161edf37479825588e07039752b79792666455cc0beb1ca0e873b3be31ad4","dweb:/ipfs/QmYYpJeSsRgRx2oHcpvhqsNs7ZtDhVnxLmFpXz5eYcS8g4"],"license":"Apache-2.0"},"src/modules/Implementation.sol":{"keccak256":"0x16546d4be07865808890308750916b0a9a55e7a994a458c01edde4618f29b4e6","urls":["bzz-raw://1b1f9785b08c9f29d6849ba2d3dee89fa3ea5f3c2feec4a59a6d1040e3fbe040","dweb:/ipfs/QmU2Pm5C3Ztky7RQdCZggavyq7Eh1eS1HFqVz9jZKiMUML"],"license":"Apache-2.0"},"src/modules/Nonce.sol":{"keccak256":"0x56fbf6dc9b34ab60ae8a32ffb6f583c003bb8f4a5223ce704e982400fa403fab","urls":["bzz-raw://492f53628633b862702cf8f9b726067a722c94028133a8a4c4fcf3d0e73ad803","dweb:/ipfs/QmTHNy4XbH47YZaqKDpknb5aApjRH9HVAREHN7N5vEFWEV"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/Storage.sol":{"keccak256":"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f","urls":["bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da","dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn"],"license":"Apache-2.0"},"src/modules/auth/BaseAuth.sol":{"keccak256":"0xbf2e40def03fcb5f4a5129b2f5803e21951325b92e00126cbe1427b7c25cfefd","urls":["bzz-raw://b560905fcc4b957d27c2abed78a1e82529c89fa472e91b3d108fbfd91aa7c3f7","dweb:/ipfs/QmRjLLtTWE6dFX2kBQCgLz7ossfMxhAFgDC8Jx9XuGL6Wy"],"license":"Apache-2.0"},"src/modules/auth/BaseSig.sol":{"keccak256":"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa","urls":["bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8","dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3"],"license":"Apache-2.0"},"src/modules/auth/SelfAuth.sol":{"keccak256":"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c","urls":["bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42","dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W"],"license":"Apache-2.0"},"src/modules/auth/Stage1Auth.sol":{"keccak256":"0x399e21aad2b30bf80a21766bd3442d676a26eb66c02423617b2772df7204cb0a","urls":["bzz-raw://25c698dee10c6fbb8b63adb4023f1886669b8e9c54dcd98871f0bd6a2b6acf03","dweb:/ipfs/QmNzUFWCoymaoV7CFgJvbAWRsJAZkqBhSpgff26JVAr9hf"],"license":"Apache-2.0"},"src/modules/auth/Stage2Auth.sol":{"keccak256":"0x5b23b530522ba1c02248d1f7470352c57fbc91c245c7c577044f93f6bb560a59","urls":["bzz-raw://c30b8e13edc7e18e4ea7bc7f4b8deaf16301a8f2bb23e7697e6f6b74882a39dc","dweb:/ipfs/QmW69XvfeJepuPBrHb1Vpkikg43P4juEGdRkUWt8GrrAfL"],"license":"Apache-2.0"},"src/modules/interfaces/IAccount.sol":{"keccak256":"0x64ca3bb59ec4fc0a60d80402802365e2d5226afe7e7aabe3b21df936c84f2bcb","urls":["bzz-raw://ccfd2381e1874cdec2f473a9a17799a3b57360c0593d68ee66fcea9c16eb39b4","dweb:/ipfs/QmcjbJpGz3Exmu4fsj953Y2bG8rtQaVMEFUgT6W2dUXomr"],"license":"MIT"},"src/modules/interfaces/IAuth.sol":{"keccak256":"0xf6fa30af2ec91d5fbeac17c9b1f2aa73b7883c9ac98745605007e57666394b91","urls":["bzz-raw://6e90a87978519462f9612f4a17e38fddc1c7bcf700ff834a1de7dce326f30353","dweb:/ipfs/QmXmWAsRRK6t4jPs4VcXrouyokxdALM28D3odX7ub48WEp"],"license":"Apache-2.0"},"src/modules/interfaces/ICheckpointer.sol":{"keccak256":"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513","urls":["bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1","dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t"],"license":"Apache-2.0"},"src/modules/interfaces/IDelegatedExtension.sol":{"keccak256":"0xa2ae897e90fd70dd4a9e172bc04d019ba9c512e72c2df65fcb6daf87dd5ceb90","urls":["bzz-raw://cdf4b7c3dfb0aef6c9dbe8b2a0542018dc756ef2252d7101bcb3186192da0a11","dweb:/ipfs/QmPHCVu1DJ7fBrPBYA5y3hoF3a3XFEBwYCZ1ErGaxPhcYL"],"license":"Apache-2.0"},"src/modules/interfaces/IERC1155Receiver.sol":{"keccak256":"0xa23d0bc29233a91085922ea8a7e2cbe8b5f3358d3f2c3cdc58adade9a171d9c1","urls":["bzz-raw://2f06b8f3ae7a45441cc26da5b2ddd15ba76d1664178958f63f536e6c5e4fd0fb","dweb:/ipfs/QmR1Rnk8ciSn5s5wNLGvpE1QNRDsBVDfDT1ZXhei2brmFj"],"license":"Apache-2.0"},"src/modules/interfaces/IERC1271.sol":{"keccak256":"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9","urls":["bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b","dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF"],"license":"Apache-2.0"},"src/modules/interfaces/IERC223Receiver.sol":{"keccak256":"0x426221c0d48b651ed692edfa5388d6e5304e94f48598a71748134b2659e3890d","urls":["bzz-raw://9e1ed2fd5e390b5b943dc07c2e0ea9e524eb37263dc72c482365c159fc3659e5","dweb:/ipfs/QmWRDBvb1cthVPm4BSzKX3J5GpGGSBuDokkpRK9x5aA7JR"],"license":"Apache-2.0"},"src/modules/interfaces/IERC721Receiver.sol":{"keccak256":"0xbe14c3b727f283a467dc2f2221d3322c5a69cd64a3aacad85acab05e94438f35","urls":["bzz-raw://43ef086c509b8b88cae78f67c4bd979fd427736972cfe56f7423371ccc154e63","dweb:/ipfs/Qmc7Yp7Z1dQ925gzEZYVNUXnWr3YomvWkXfaGYLZpoy8J3"],"license":"Apache-2.0"},"src/modules/interfaces/IERC777Receiver.sol":{"keccak256":"0xd9144d439a96b0c6439cd9a186701aa530f4f782ff09fdbf6c3ef16b78b0d4e5","urls":["bzz-raw://d1f17484eda7184db4a00106b4952f15c1517872cbfe19663d6fce4e042729b2","dweb:/ipfs/QmWdhYmLNkUpgvPpSyGHstxrFwMfhRTVmxDpe4frkUu1Qh"],"license":"Apache-2.0"},"src/modules/interfaces/IEntryPoint.sol":{"keccak256":"0xd19922ea7a8ae09072a721138dc93e175fa77ecaa3ac6f2d759d5e5e944fb665","urls":["bzz-raw://20ecea69ddd4d8787c0bdc4487dea03e90f63f4296674a12728e331a78e62620","dweb:/ipfs/QmZUrX8zEqfHZEJQjNtDUXGS47bj2UuRCLfbkLPrXsot1c"],"license":"MIT"},"src/modules/interfaces/IPartialAuth.sol":{"keccak256":"0x0d1aa021615d8e90696e71a9468331457a1babfa2ffe169654b7456e5bcb7a73","urls":["bzz-raw://bbacd149a6358ab0d4b9c588d2e3a55fc71ed4723269150d7b91ca70092f6519","dweb:/ipfs/QmUSwtrYCrRcRFsy5rCzdMPrw1FCU7ZoeXdsW6kK9yc8FK"],"license":"Apache-2.0"},"src/modules/interfaces/ISapient.sol":{"keccak256":"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359","urls":["bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489","dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"src/utils/LibOptim.sol":{"keccak256":"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde","urls":["bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81","dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x"],"license":"Apache-2.0"}},"version":1},"id":22} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/DeployMocks.s.sol/DeployMocks.json b/contracts/artifacts/wallet-contracts-v3/DeployMocks.s.sol/DeployMocks.json new file mode 100644 index 00000000..880312bc --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/DeployMocks.s.sol/DeployMocks.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"IS_SCRIPT","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"run","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"error","name":"DeploymentFailed","inputs":[{"name":"reason","type":"string","internalType":"string"}]}],"bytecode":{"object":"0x608080604052346026576201000162ff00ff19600c541617600c556113c6908161002c8239f35b600080fdfe608080604052600436101561001357600080fd5b600090813560e01c908163c04062261461007d575063f8ccbf471461003757600080fd5b3461007a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261007a57602060ff600c5460101c166040519015158152f35b80fd5b90503461059157817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610591577fc1978d1f00000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f505249564154455f4b45590000000000000000000000000000000000000000006044820152602081606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115610517578291610bdc575b506105d19082604051916101466020850184610c0e565b8383526020830193610dc0853961019e6020604051809561016f83830198899251928391610c7e565b810103017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101855284610c0e565b604051936101ad604086610c0e565b600785527f456d6974746572000000000000000000000000000000000000000000000000006020860152600273ce0042b868300000d44a59004da54a005ffdcf9f3b11156105e0575b73ffffffffffffffffffffffffffffffffffffffff908451902060405160208101917fff0000000000000000000000000000000000000000000000000000000000000083527fce0042b868300000d44a59004da54a005ffdcf9f000000000000000000000000602183015285603583015260558201526055815261027b607582610c0e565b51902016936002853b1161059557846102cc916040519061029d604083610c0e565b600c82527f6465706c6f79696e6720746f00000000000000000000000000000000000000006020830152610ce4565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561059157604051907fce817d470000000000000000000000000000000000000000000000000000000082526004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156105175761057c575b5050602061037e91604051809381927f4af63f02000000000000000000000000000000000000000000000000000000008352604060048401526044830190610ca1565b86602483015203818673ce0042b868300000d44a59004da54a005ffdcf9f5af1908115610571578391610522575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561051357826040517f76eadd36000000000000000000000000000000000000000000000000000000008152818160048183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015610517576104fe575b505073ffffffffffffffffffffffffffffffffffffffff1681036104a0576002903b11156104425780f35b60646040517f20631f9100000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4465706c6f796d656e74206661696c65640000000000000000000000000000006044820152fd5b60646040517f20631f9100000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4465706c6f7965642061646472657373206d69736d61746368000000000000006044820152fd5b8161050891610c0e565b610513578238610417565b8280fd5b6040513d84823e3d90fd5b90506020813d602011610569575b8161053d60209383610c0e565b81010312610513575173ffffffffffffffffffffffffffffffffffffffff8116810361051357386103ac565b3d9150610530565b6040513d85823e3d90fd5b8161058691610c0e565b61051357823861033b565b5080fd5b9190506105dd93925050604051906105ae604083610c0e565b601382527f616c7265616479206465706c6f79656420746f000000000000000000000000006020830152610ce4565b80f35b6657c084e5f3c00073bb6e024b9cffacb947a71991e386681b1cd1477d3110610966575b6000806106826106c860405161061b604082610c0e565b601e81527f4465706c6f79696e672053696e676c65746f6e20466163746f727920746f000060208201526040519283917f319af333000000000000000000000000000000000000000000000000000000006020840152604060248401526064830190610ca1565b73ce0042b868300000d44a59004da54a005ffdcf9f6044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610c0e565b6020815191016a636f6e736f6c652e6c6f675afa506040516106ec6101a082610c0e565b61016f81527ff9016c8085174876e8008303c4d88080b901546080604052348015610010576060208201527e80fd5b50610134806100206000396000f3fe6080604052348015600f57600060408201527f80fd5b506004361060285760003560e01c80634af63f0214602d575b600080fd60608201527f5b60cf60048036036040811015604157600080fd5b810190602081018135640160808201527b811115605b57600080fd5b820183602082011115606c57600080fd5b60a08201527f80359060200191846001830284011164010000000083111715608d57600080fd60c08201527f5b91908080601f0160208091040260200160405190810160405280939291908160e08201527f8152602001838380828437600092019190915250929550509135925060eb91506101008201527f50565b604080516001600160a01b039092168252519081900360200190f35b606101208201527e818351602085016000f5939250505056fea26469706673582212206b44f8a86101408201527f2cb6b156bfcc3dc6aadd6df4eefd204bc928a4397fd15dacf6d5320564736f6c6101608201527f634300060200331b832470008224700000000000000000000000000000000000610180820152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610962578361091391604051809381927f8c0c72e0000000000000000000000000000000000000000000000000000000008352602060048401526024830190610ca1565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115610957578491610942575b50506101f6565b8161094c91610c0e565b61051357823861093b565b6040513d86823e3d90fd5b8380fd5b90915084806109e6610a1260405161097f604082610c0e565b601d81527f46756e64696e672053696e676c65746f6e20466163746f727920454f4100000060208201526040519283917f41304fac000000000000000000000000000000000000000000000000000000006020840152602060248401526044830190610ca1565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610c0e565b6020815191016a636f6e736f6c652e6c6f675afa50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610bd8576040517fce817d47000000000000000000000000000000000000000000000000000000008152826004820152858160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015610bcd57610bb9575b5073bb6e024b9cffacb947a71991e386681b1cd1477d31806657c084e5f3c00003906657c084e5f3c0008211610b8c5786808080969594819482906657c084e5f3c00014610b83575b73bb6e024b9cffacb947a71991e386681b1cd1477d90f11561051757737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610513576040517f76eadd36000000000000000000000000000000000000000000000000000000008152838160048183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115610957578491610b6e575b5050610604565b81610b7891610c0e565b610513578238610b67565b506108fc610adf565b6024877f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b85610bc691969296610c0e565b9338610a96565b6040513d88823e3d90fd5b8480fd5b90506020813d602011610c06575b81610bf760209383610c0e565b8101031261059157513861012f565b3d9150610bea565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610c4f57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60005b838110610c915750506000910152565b8181015183820152602001610c81565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093610cdd81518092818752878088019101610c7e565b0116010190565b610da8610d459160009473ffffffffffffffffffffffffffffffffffffffff610d7587966040519687957f95ed0195000000000000000000000000000000000000000000000000000000006020880152606060248801526084870190610ca1565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc868303016044870152610ca1565b91166064830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610c0e565b6020815191016a636f6e736f6c652e6c6f675afa5056fe608080604052346015576105b6908161001b8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c9081630c0340fc14610188575080639d043a66146100a05763eca9b31a1461004057600080fd5b3461009b5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009b577f721b5e17196ee8f054e1c6084536bdfe64f23e747e9bb98627db351b3286f7bf6020604051338152a1005b600080fd5b3461009b5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009b5760043573ffffffffffffffffffffffffffffffffffffffff8116810361009b5760243567ffffffffffffffff811161009b5760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011261009b576044359067ffffffffffffffff821161009b5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc833603011261009b57602092610180926004019160040190610307565b604051908152f35b3461009b5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009b5760207fed94f157df493252d8e5700fc6b9bf2466c66387b3c1a19816847dfa9f31005791338152a1005b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561009b570180359067ffffffffffffffff821161009b5760200191813603831361009b57565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761027357604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b92919267ffffffffffffffff821161027357604051916102ea601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200184610232565b82948184528183011161009b578281602093846000960137010152565b909160408101600461031982846101e1565b90501491821592610522575b505061051b5760c08236031261009b5760405160c0810181811067ffffffffffffffff82111761027357604052823573ffffffffffffffffffffffffffffffffffffffff8116810361009b57815260208301357fffffffff000000000000000000000000000000000000000000000000000000008116810361009b576020820152604081019060408401358252606081019360608101358552608081013567ffffffffffffffff811161009b57810136601f8201121561009b576103f09036906020813591016102a2565b608083015260a08101359067ffffffffffffffff821161009b57019060408236031261009b57604051916040830183811067ffffffffffffffff82111761027357604052803567ffffffffffffffff811161009b5781019036601f8301121561009b57610465602092369084813591016102a2565b845201359067ffffffffffffffff8216820361009b5760a0916020840152015260405160208101907f616363657074496d706c696369745265717565737400000000000000000000008252601581526104bf603582610232565b51902092519051907fffffffffffffffffffffffffffffffffffffffff000000000000000000000000604051936020850195865260601b1660408401526054830152607482015260748152610515609482610232565b51902090565b5050600090565b61052c92506101e1565b60041161009b57357fffffffff00000000000000000000000000000000000000000000000000000000167feca9b31a000000000000000000000000000000000000000000000000000000001415388061032556fea2646970667358221220b244c0331517bebc589a2a51667c56df4245db1deb284e6da3f0e5a41bbd9d1664736f6c634300081c0033a264697066735822122016ce748909382cd5cba1bb1571bc93643a4469fbc749973beb49ac451892bee264736f6c634300081c0033","sourceMap":"211:286:23:-:0;;;;;;;;;;3166:4:5;211:286:23;;;3166:4:5;211:286:23;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608080604052600436101561001357600080fd5b600090813560e01c908163c04062261461007d575063f8ccbf471461003757600080fd5b3461007a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261007a57602060ff600c5460101c166040519015158152f35b80fd5b90503461059157817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610591577fc1978d1f00000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f505249564154455f4b45590000000000000000000000000000000000000000006044820152602081606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115610517578291610bdc575b506105d19082604051916101466020850184610c0e565b8383526020830193610dc0853961019e6020604051809561016f83830198899251928391610c7e565b810103017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101855284610c0e565b604051936101ad604086610c0e565b600785527f456d6974746572000000000000000000000000000000000000000000000000006020860152600273ce0042b868300000d44a59004da54a005ffdcf9f3b11156105e0575b73ffffffffffffffffffffffffffffffffffffffff908451902060405160208101917fff0000000000000000000000000000000000000000000000000000000000000083527fce0042b868300000d44a59004da54a005ffdcf9f000000000000000000000000602183015285603583015260558201526055815261027b607582610c0e565b51902016936002853b1161059557846102cc916040519061029d604083610c0e565b600c82527f6465706c6f79696e6720746f00000000000000000000000000000000000000006020830152610ce4565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561059157604051907fce817d470000000000000000000000000000000000000000000000000000000082526004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156105175761057c575b5050602061037e91604051809381927f4af63f02000000000000000000000000000000000000000000000000000000008352604060048401526044830190610ca1565b86602483015203818673ce0042b868300000d44a59004da54a005ffdcf9f5af1908115610571578391610522575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561051357826040517f76eadd36000000000000000000000000000000000000000000000000000000008152818160048183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015610517576104fe575b505073ffffffffffffffffffffffffffffffffffffffff1681036104a0576002903b11156104425780f35b60646040517f20631f9100000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4465706c6f796d656e74206661696c65640000000000000000000000000000006044820152fd5b60646040517f20631f9100000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4465706c6f7965642061646472657373206d69736d61746368000000000000006044820152fd5b8161050891610c0e565b610513578238610417565b8280fd5b6040513d84823e3d90fd5b90506020813d602011610569575b8161053d60209383610c0e565b81010312610513575173ffffffffffffffffffffffffffffffffffffffff8116810361051357386103ac565b3d9150610530565b6040513d85823e3d90fd5b8161058691610c0e565b61051357823861033b565b5080fd5b9190506105dd93925050604051906105ae604083610c0e565b601382527f616c7265616479206465706c6f79656420746f000000000000000000000000006020830152610ce4565b80f35b6657c084e5f3c00073bb6e024b9cffacb947a71991e386681b1cd1477d3110610966575b6000806106826106c860405161061b604082610c0e565b601e81527f4465706c6f79696e672053696e676c65746f6e20466163746f727920746f000060208201526040519283917f319af333000000000000000000000000000000000000000000000000000000006020840152604060248401526064830190610ca1565b73ce0042b868300000d44a59004da54a005ffdcf9f6044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610c0e565b6020815191016a636f6e736f6c652e6c6f675afa506040516106ec6101a082610c0e565b61016f81527ff9016c8085174876e8008303c4d88080b901546080604052348015610010576060208201527e80fd5b50610134806100206000396000f3fe6080604052348015600f57600060408201527f80fd5b506004361060285760003560e01c80634af63f0214602d575b600080fd60608201527f5b60cf60048036036040811015604157600080fd5b810190602081018135640160808201527b811115605b57600080fd5b820183602082011115606c57600080fd5b60a08201527f80359060200191846001830284011164010000000083111715608d57600080fd60c08201527f5b91908080601f0160208091040260200160405190810160405280939291908160e08201527f8152602001838380828437600092019190915250929550509135925060eb91506101008201527f50565b604080516001600160a01b039092168252519081900360200190f35b606101208201527e818351602085016000f5939250505056fea26469706673582212206b44f8a86101408201527f2cb6b156bfcc3dc6aadd6df4eefd204bc928a4397fd15dacf6d5320564736f6c6101608201527f634300060200331b832470008224700000000000000000000000000000000000610180820152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610962578361091391604051809381927f8c0c72e0000000000000000000000000000000000000000000000000000000008352602060048401526024830190610ca1565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115610957578491610942575b50506101f6565b8161094c91610c0e565b61051357823861093b565b6040513d86823e3d90fd5b8380fd5b90915084806109e6610a1260405161097f604082610c0e565b601d81527f46756e64696e672053696e676c65746f6e20466163746f727920454f4100000060208201526040519283917f41304fac000000000000000000000000000000000000000000000000000000006020840152602060248401526044830190610ca1565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610c0e565b6020815191016a636f6e736f6c652e6c6f675afa50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610bd8576040517fce817d47000000000000000000000000000000000000000000000000000000008152826004820152858160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015610bcd57610bb9575b5073bb6e024b9cffacb947a71991e386681b1cd1477d31806657c084e5f3c00003906657c084e5f3c0008211610b8c5786808080969594819482906657c084e5f3c00014610b83575b73bb6e024b9cffacb947a71991e386681b1cd1477d90f11561051757737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610513576040517f76eadd36000000000000000000000000000000000000000000000000000000008152838160048183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115610957578491610b6e575b5050610604565b81610b7891610c0e565b610513578238610b67565b506108fc610adf565b6024877f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b85610bc691969296610c0e565b9338610a96565b6040513d88823e3d90fd5b8480fd5b90506020813d602011610c06575b81610bf760209383610c0e565b8101031261059157513861012f565b3d9150610bea565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610c4f57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60005b838110610c915750506000910152565b8181015183820152602001610c81565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093610cdd81518092818752878088019101610c7e565b0116010190565b610da8610d459160009473ffffffffffffffffffffffffffffffffffffffff610d7587966040519687957f95ed0195000000000000000000000000000000000000000000000000000000006020880152606060248801526084870190610ca1565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc868303016044870152610ca1565b91166064830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610c0e565b6020815191016a636f6e736f6c652e6c6f675afa5056fe608080604052346015576105b6908161001b8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c9081630c0340fc14610188575080639d043a66146100a05763eca9b31a1461004057600080fd5b3461009b5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009b577f721b5e17196ee8f054e1c6084536bdfe64f23e747e9bb98627db351b3286f7bf6020604051338152a1005b600080fd5b3461009b5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009b5760043573ffffffffffffffffffffffffffffffffffffffff8116810361009b5760243567ffffffffffffffff811161009b5760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011261009b576044359067ffffffffffffffff821161009b5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc833603011261009b57602092610180926004019160040190610307565b604051908152f35b3461009b5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009b5760207fed94f157df493252d8e5700fc6b9bf2466c66387b3c1a19816847dfa9f31005791338152a1005b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561009b570180359067ffffffffffffffff821161009b5760200191813603831361009b57565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761027357604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b92919267ffffffffffffffff821161027357604051916102ea601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200184610232565b82948184528183011161009b578281602093846000960137010152565b909160408101600461031982846101e1565b90501491821592610522575b505061051b5760c08236031261009b5760405160c0810181811067ffffffffffffffff82111761027357604052823573ffffffffffffffffffffffffffffffffffffffff8116810361009b57815260208301357fffffffff000000000000000000000000000000000000000000000000000000008116810361009b576020820152604081019060408401358252606081019360608101358552608081013567ffffffffffffffff811161009b57810136601f8201121561009b576103f09036906020813591016102a2565b608083015260a08101359067ffffffffffffffff821161009b57019060408236031261009b57604051916040830183811067ffffffffffffffff82111761027357604052803567ffffffffffffffff811161009b5781019036601f8301121561009b57610465602092369084813591016102a2565b845201359067ffffffffffffffff8216820361009b5760a0916020840152015260405160208101907f616363657074496d706c696369745265717565737400000000000000000000008252601581526104bf603582610232565b51902092519051907fffffffffffffffffffffffffffffffffffffffff000000000000000000000000604051936020850195865260601b1660408401526054830152607482015260748152610515609482610232565b51902090565b5050600090565b61052c92506101e1565b60041161009b57357fffffffff00000000000000000000000000000000000000000000000000000000167feca9b31a000000000000000000000000000000000000000000000000000000001415388061032556fea2646970667358221220b244c0331517bebc589a2a51667c56df4245db1deb284e6da3f0e5a41bbd9d1664736f6c634300081c0033a264697066735822122016ce748909382cd5cba1bb1571bc93643a4469fbc749973beb49ac451892bee264736f6c634300081c0033","sourceMap":"211:286:23:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;849:28:3;211:286:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;2024:14:2;301:25:23;;2024:14:2;211:286:23;301:25;;2024:14:2;;;;;;;;;;;;301:25:23;;;336:42:2;301:25:23;;;;;;;;;;;211:286;406:26;;211:286;;;;406:26;2024:14:2;;406:26:23;;2024:14:2;;:::i;:::-;406:26:23;;;2024:14:2;406:26:23;;;;;;389:44;2024:14:2;211:286:23;;389:44;;2024:14:2;389:44:23;;;2024:14:2;;;;;;;;:::i;:::-;;;389:44:23;;;;;;;;;:::i;:::-;211:286;;2024:14:2;;211:286:23;2024:14:2;;:::i;:::-;;;;;;;;;608:1:0;107:42:1;570:34:0;:39;;566:613;;211:286:23;336:42:2;2024:14;;;2313:20:0;;211:286:23;;2024:14:2;2247:87:0;;211:286:23;;;;;;;;;;;;;;;;;;;2247:87:0;;;;;;:::i;:::-;2024:14:2;2237:98:0;;336:42:2;;608:1:0;1460:16;;:21;608:1;;211:286:23;1497:39:0;211:286:23;;;2024:14:2;;211:286:23;2024:14:2;;:::i;:::-;211:286:23;2024:14:2;;211:286:23;2024:14:2;211:286:23;;;1497:39:0;:::i;:::-;336:42:2;1550:21:0;;;;211:286:23;;1550:21:0;2024:14:2;1550:21:0;;211:286:23;1550:21:0;;211:286:23;1550:21:0;;2024:14:2;1550:21:0;;336:42:2;1550:21:0;;;;;;;;1456:551;211:286:23;;2024:14:2;442:41:0;211:286:23;;;1606:42:0;;;;2024:14:2;1606:42:0;;211:286:23;;1606:42:0;;442:41;2024:14:2;442:41:0;;;;:::i;:::-;;2024:14:2;442:41:0;;211:286:23;1606:42:0;;;107::1;1606::0;;;;;;;;;;;1456:551;1662:18;336:42:2;1662:18:0;;;;211:286:23;;;2024:14:2;1662:18:0;;;;211:286:23;1662:18:0;;336:42:2;1662:18:0;;;;;;;;1456:551;336:42:2;;;;1698:18:0;;1694:109;;608:1;1820:16;;:21;;1816:104;;211:286:23;;1816:104:0;301:25:23;211:286;;1868:37:0;;;2024:14:2;211:286:23;1868:37:0;;442:41;;2024:14:2;442:41:0;;2024:14:2;442:41:0;2024:14:2;;;442:41:0;1868:37;1694:109;301:25:23;211:286;;1743:45:0;;;2024:14:2;211:286:23;1743:45:0;;442:41;;2024:14:2;442:41:0;;2024:14:2;442:41:0;2024:14:2;;;442:41:0;1743:45;1662:18;;;;;:::i;:::-;211:286:23;;1662:18:0;;;;211:286:23;;;;1662:18:0;211:286:23;;2024:14:2;211:286:23;;2024:14:2;;;;1606:42:0;;;2024:14:2;1606:42:0;;2024:14:2;1606:42:0;;;;;;2024:14:2;1606:42:0;;;:::i;:::-;;;442:41;;;;;336:42:2;;;442:41:0;;;;1606:42;;;;;;-1:-1:-1;1606:42:0;;;211:286:23;;2024:14:2;211:286:23;;2024:14:2;;;;1550:21:0;;;;;:::i;:::-;211:286:23;;1550:21:0;;;;;211:286:23;;;1456:551:0;211:286:23;;;1950:46:0;211:286:23;;;2024:14:2;211:286:23;;2024:14:2;;211:286:23;2024:14:2;;:::i;:::-;211:286:23;2024:14:2;;211:286:23;2024:14:2;211:286:23;;;1950:46:0;:::i;:::-;211:286:23;;566:613:0;274:12:1;189:42;629:26:0;:50;625:360;;566:613;358:279:18;211:286:23;;7823:54:18;211:286:23;;2024:14:2;211:286:23;2024:14:2;;:::i;:::-;274:12:1;2024:14:2;;274:12:1;2024:14:2;274:12:1;;;211:286:23;;7823:54:18;;;;2024:14:2;7823:54:18;;;211:286:23;2024:14:2;7823:54:18;;211:286:23;301:25;211:286;;;;:::i;:::-;107:42:1;2024:14:2;211:286:23;;;7823:54:18;389:44:23;7823:54:18;;;;;;:::i;:::-;358:279;;;;;131:42;358:279;;;211:286:23;;2024:14:2;;;;:::i;:::-;274:12:1;2024:14:2;;274:12:1;2024:14:2;274:12:1;;;;211:286:23;274:12:1;;;;;;;;;;;;;;;;;;;;;;;;211:286:23;274:12:1;;;;;;;;;;;;;;;;;;;;;;;;2024:14:2;274:12:1;;;336:42:2;1121:47:0;;;;211:286:23;329:739:1;211:286:23;;;1121:47:0;;;;2024:14:2;1121:47:0;;2024:14:2;211:286:23;1121:47:0;;329:739:1;2024:14:2;329:739:1;;;;:::i;:::-;1121:47:0;;;336:42:2;1121:47:0;;;;;;;;;;;566:613;;;;;1121:47;;;;;:::i;:::-;211:286:23;;1121:47:0;;;;;211:286:23;;2024:14:2;211:286:23;;2024:14:2;;;;1121:47:0;211:286:23;;;625:360:0;274:12:1;;2024:14:2;211:286:23;;;6262:42:18;211:286:23;;2024:14:2;211:286:23;2024:14:2;;:::i;:::-;274:12:1;2024:14:2;;274:12:1;2024:14:2;274:12:1;;;211:286:23;;6262:42:18;;;;2024:14:2;6262:42:18;;;2024:14:2;;6262:42:18;;211:286:23;2024:14:2;211:286:23;;;;:::i;:::-;6262:42:18;389:44:23;6262:42:18;;;;;;:::i;:::-;358:279;;;;;131:42;358:279;;;336:42:2;807:21:0;;;;211:286:23;;2024:14:2;807:21:0;;;211:286:23;807:21:0;;211:286:23;807:21:0;;2024:14:2;807:21:0;;336:42:2;807:21:0;;;;;;;;625:360;907:26;189:42:1;907:26:0;274:12:1;;;;;;;;;846:88:0;;;;;;;;;;;274:12:1;846:88:0;;;625:360;189:42:1;846:88:0;;;;;336:42:2;952:18:0;;;;211:286:23;;2024:14:2;952:18:0;;;;211:286:23;952:18:0;;336:42:2;952:18:0;;;;;;;;;;;625:360;;;;;952:18;;;;;:::i;:::-;211:286:23;;952:18:0;;;;846:88;-1:-1:-1;846:88:0;;;274:12:1;2024:14:2;274:12:1;;;;;211:286:23;274:12:1;;807:21:0;;;;;;;;:::i;:::-;;;;;;211:286:23;;2024:14:2;211:286:23;;2024:14:2;;;;807:21:0;211:286:23;;;301:25;;;2024:14:2;301:25:23;;2024:14:2;301:25:23;;;;;;2024:14:2;301:25:23;;;:::i;:::-;;;2024:14:2;;;;;301:25:23;;;;;;-1:-1:-1;301:25:23;;2024:14:2;;;;;;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;2024:14:2;;;;;-1:-1:-1;2024:14:2;;;;;;;;;-1:-1:-1;;2024:14:2;;;;:::o;:::-;;;;;;;;;;;;;442:41:0;;2024:14:2;;;442:41:0;;2024:14:2;;;;;;;;;;;442:41:0;;;:::i;:::-;2024:14:2;;442:41:0;;;:::o;12983:174:18:-;13084:65;211:286:23;12983:174:18;358:279;12983:174;336:42:2;211:286:23;12983:174:18;;211:286:23;;13084:65:18;;;;;;;;211:286:23;13084:65:18;;;211:286:23;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;336:42:2;;211:286:23;;;;13084:65:18;;;;;;;;:::i;:::-;358:279;;;;;131:42;358:279;;;12983:174::o","linkReferences":{}},"methodIdentifiers":{"IS_SCRIPT()":"f8ccbf47","run()":"c0406226"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"DeploymentFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IS_SCRIPT\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"run\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"script/DeployMocks.s.sol\":\"DeployMocks\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/erc2470-libs/script/SingletonDeployer.s.sol\":{\"keccak256\":\"0x3fdec03d51d77fcda6d6c681e26e7c8d4b85f1457eac91e0ec15411a7ab1e1f6\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://a690bf4481a37f3f77acdeecac089462db83f0437307610981b24c04b5202f6e\",\"dweb:/ipfs/QmUA9TSjAkqefNBW8BiRqg8XDJiJxJPxSsZHQwJJAbrYQg\"]},\"lib/erc2470-libs/src/ISingletonFactory.sol\":{\"keccak256\":\"0x0a17871e1017f36a664b877f5b0db297dc998fdf8b0ab82d00ca50d5bdde88f7\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://160bc0d890492792f85dfea939160290d90562b27154f64c39c2a615243518a6\",\"dweb:/ipfs/QmbxmqPpTAH7X45G75UjmLh3RSTDj7trMtmkGU6RXmRyEJ\"]},\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/Script.sol\":{\"keccak256\":\"0xc942e27c7baae499beb01afbbae99f24d42af9a6e4aae675bc6901b704aa8e9b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0456008adf68947247f358b62863af4a8e349549d2260f2ff9569ff0e3cf5c98\",\"dweb:/ipfs/QmdviSUj2i7o3TPN5vd2xocqGMFVqjUzaiJTZRYyPxyHPx\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"script/DeployMocks.s.sol\":{\"keccak256\":\"0x8067feab43b13105e10f30cd9433baa797b28bd09bb44596566c8c9d778dbe90\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://3caf3b22d2af186451f379b7431aaafd1d239ba84b729cdac03caca2acb3da43\",\"dweb:/ipfs/QmPaeHZt9W5TDpf5zWiKNs6m6ULo6MAyzr2PV36k6QMGEq\"]},\"src/extensions/sessions/implicit/Attestation.sol\":{\"keccak256\":\"0xcaa44022b5eb4bc7ab487b3b1a0125da67e2e891cee983ef6cdb6814f045efc8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://94829782b6dcb482d7c002511c590d1ad8de3b21e5e72575df18be73565b3638\",\"dweb:/ipfs/QmZ4u9FxALzMzKR7auW8FmFkhGVw8kRDeDRJ1PKwKaWNWF\"]},\"src/extensions/sessions/implicit/ISignalsImplicitMode.sol\":{\"keccak256\":\"0x6cb48f50c49bcb3c7071306fe9fac6c102bc9eabf73d9909e19ab3b9a835d0a8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://15297e969f64fc1152654d1cefbe276c15a0ecfc11f86b4c276bb0b454fe700a\",\"dweb:/ipfs/QmeehNFYBPPtJePwUcqiYCgiuFotur4VVVCV1KvegdCCZ4\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/interfaces/ISapient.sol\":{\"keccak256\":\"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489\",\"dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"test/mocks/Emitter.sol\":{\"keccak256\":\"0xb3fe3585f667c0af3e9deaaf6f7e68b16067014c9363367b4548c91abf367b27\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e6985271645ec1df625995837c2afb23f7042d7a4c18c992f5f1c9ff1c89b160\",\"dweb:/ipfs/QmTwQRRY95Z73vDP5EuamAQxTaSprwGy3piLRrWDf9FnoU\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"type":"error","name":"DeploymentFailed"},{"inputs":[],"stateMutability":"view","type":"function","name":"IS_SCRIPT","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"run"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"script/DeployMocks.s.sol":"DeployMocks"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/erc2470-libs/script/SingletonDeployer.s.sol":{"keccak256":"0x3fdec03d51d77fcda6d6c681e26e7c8d4b85f1457eac91e0ec15411a7ab1e1f6","urls":["bzz-raw://a690bf4481a37f3f77acdeecac089462db83f0437307610981b24c04b5202f6e","dweb:/ipfs/QmUA9TSjAkqefNBW8BiRqg8XDJiJxJPxSsZHQwJJAbrYQg"],"license":"UNLICENSED"},"lib/erc2470-libs/src/ISingletonFactory.sol":{"keccak256":"0x0a17871e1017f36a664b877f5b0db297dc998fdf8b0ab82d00ca50d5bdde88f7","urls":["bzz-raw://160bc0d890492792f85dfea939160290d90562b27154f64c39c2a615243518a6","dweb:/ipfs/QmbxmqPpTAH7X45G75UjmLh3RSTDj7trMtmkGU6RXmRyEJ"],"license":"UNLICENSED"},"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/Script.sol":{"keccak256":"0xc942e27c7baae499beb01afbbae99f24d42af9a6e4aae675bc6901b704aa8e9b","urls":["bzz-raw://0456008adf68947247f358b62863af4a8e349549d2260f2ff9569ff0e3cf5c98","dweb:/ipfs/QmdviSUj2i7o3TPN5vd2xocqGMFVqjUzaiJTZRYyPxyHPx"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"script/DeployMocks.s.sol":{"keccak256":"0x8067feab43b13105e10f30cd9433baa797b28bd09bb44596566c8c9d778dbe90","urls":["bzz-raw://3caf3b22d2af186451f379b7431aaafd1d239ba84b729cdac03caca2acb3da43","dweb:/ipfs/QmPaeHZt9W5TDpf5zWiKNs6m6ULo6MAyzr2PV36k6QMGEq"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/Attestation.sol":{"keccak256":"0xcaa44022b5eb4bc7ab487b3b1a0125da67e2e891cee983ef6cdb6814f045efc8","urls":["bzz-raw://94829782b6dcb482d7c002511c590d1ad8de3b21e5e72575df18be73565b3638","dweb:/ipfs/QmZ4u9FxALzMzKR7auW8FmFkhGVw8kRDeDRJ1PKwKaWNWF"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/ISignalsImplicitMode.sol":{"keccak256":"0x6cb48f50c49bcb3c7071306fe9fac6c102bc9eabf73d9909e19ab3b9a835d0a8","urls":["bzz-raw://15297e969f64fc1152654d1cefbe276c15a0ecfc11f86b4c276bb0b454fe700a","dweb:/ipfs/QmeehNFYBPPtJePwUcqiYCgiuFotur4VVVCV1KvegdCCZ4"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/interfaces/ISapient.sol":{"keccak256":"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359","urls":["bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489","dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"test/mocks/Emitter.sol":{"keccak256":"0xb3fe3585f667c0af3e9deaaf6f7e68b16067014c9363367b4548c91abf367b27","urls":["bzz-raw://e6985271645ec1df625995837c2afb23f7042d7a4c18c992f5f1c9ff1c89b160","dweb:/ipfs/QmTwQRRY95Z73vDP5EuamAQxTaSprwGy3piLRrWDf9FnoU"],"license":"Apache-2.0"}},"version":1},"id":23} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/ERC4337v07.sol/ERC4337v07.json b/contracts/artifacts/wallet-contracts-v3/ERC4337v07.sol/ERC4337v07.json new file mode 100644 index 00000000..0249fda3 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/ERC4337v07.sol/ERC4337v07.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"entrypoint","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"execute","inputs":[{"name":"_payload","type":"bytes","internalType":"bytes"},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"executeUserOp","inputs":[{"name":"_payload","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getStaticSignature","inputs":[{"name":"_hash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"isValidSignature","inputs":[{"name":"_hash","type":"bytes32","internalType":"bytes32"},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"view"},{"type":"function","name":"readNonce","inputs":[{"name":"_space","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"recoverPartialSignature","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"threshold","type":"uint256","internalType":"uint256"},{"name":"weight","type":"uint256","internalType":"uint256"},{"name":"isValidImage","type":"bool","internalType":"bool"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"checkpoint","type":"uint256","internalType":"uint256"},{"name":"opHash","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"recoverSapientSignature","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"selfExecute","inputs":[{"name":"_payload","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"setStaticSignature","inputs":[{"name":"_hash","type":"bytes32","internalType":"bytes32"},{"name":"_address","type":"address","internalType":"address"},{"name":"_timestamp","type":"uint96","internalType":"uint96"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateImageHash","inputs":[{"name":"_imageHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"validateUserOp","inputs":[{"name":"userOp","type":"tuple","internalType":"struct PackedUserOperation","components":[{"name":"sender","type":"address","internalType":"address"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"initCode","type":"bytes","internalType":"bytes"},{"name":"callData","type":"bytes","internalType":"bytes"},{"name":"accountGasLimits","type":"bytes32","internalType":"bytes32"},{"name":"preVerificationGas","type":"uint256","internalType":"uint256"},{"name":"gasFees","type":"bytes32","internalType":"bytes32"},{"name":"paymasterAndData","type":"bytes","internalType":"bytes"},{"name":"signature","type":"bytes","internalType":"bytes"}]},{"name":"userOpHash","type":"bytes32","internalType":"bytes32"},{"name":"missingAccountFunds","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"validationData","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"event","name":"CallAborted","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"_returnData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"CallFailed","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"_returnData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"CallSkipped","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"CallSucceeded","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"NonceChange","inputs":[{"name":"_space","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"_newNonce","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"StaticSignatureSet","inputs":[{"name":"_hash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_address","type":"address","indexed":false,"internalType":"address"},{"name":"_timestamp","type":"uint96","indexed":false,"internalType":"uint96"}],"anonymous":false},{"type":"error","name":"BadNonce","inputs":[{"name":"_space","type":"uint256","internalType":"uint256"},{"name":"_provided","type":"uint256","internalType":"uint256"},{"name":"_current","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC4337Disabled","inputs":[]},{"type":"error","name":"InvalidERC1271Signature","inputs":[{"name":"_opHash","type":"bytes32","internalType":"bytes32"},{"name":"_signer","type":"address","internalType":"address"},{"name":"_signature","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"InvalidEntryPoint","inputs":[{"name":"_entrypoint","type":"address","internalType":"address"}]},{"type":"error","name":"InvalidKind","inputs":[{"name":"kind","type":"uint8","internalType":"uint8"}]},{"type":"error","name":"InvalidSapientSignature","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"InvalidSignature","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"InvalidSignatureFlag","inputs":[{"name":"_flag","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidSignatureWeight","inputs":[{"name":"_threshold","type":"uint256","internalType":"uint256"},{"name":"_weight","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidStaticSignatureExpired","inputs":[{"name":"_opHash","type":"bytes32","internalType":"bytes32"},{"name":"_expires","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidStaticSignatureWrongCaller","inputs":[{"name":"_opHash","type":"bytes32","internalType":"bytes32"},{"name":"_caller","type":"address","internalType":"address"},{"name":"_expectedCaller","type":"address","internalType":"address"}]},{"type":"error","name":"LowWeightChainedSignature","inputs":[{"name":"_signature","type":"bytes","internalType":"bytes"},{"name":"_threshold","type":"uint256","internalType":"uint256"},{"name":"_weight","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"NotEnoughGas","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_index","type":"uint256","internalType":"uint256"},{"name":"_gasLeft","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"OnlySelf","inputs":[{"name":"_sender","type":"address","internalType":"address"}]},{"type":"error","name":"Reverted","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_index","type":"uint256","internalType":"uint256"},{"name":"_returnData","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"UnusedSnapshot","inputs":[{"name":"_snapshot","type":"tuple","internalType":"struct Snapshot","components":[{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"checkpoint","type":"uint256","internalType":"uint256"}]}]},{"type":"error","name":"WrongChainedCheckpointOrder","inputs":[{"name":"_nextCheckpoint","type":"uint256","internalType":"uint256"},{"name":"_checkpoint","type":"uint256","internalType":"uint256"}]}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"entrypoint()":"a65d69d4","execute(bytes,bytes)":"1f6a1eb9","executeUserOp(bytes)":"9c145aed","getStaticSignature(bytes32)":"92dcb3fc","isValidSignature(bytes32,bytes)":"1626ba7e","readNonce(uint256)":"8c3f5563","recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":"ad55366b","recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":"13792a4a","selfExecute(bytes)":"6ea44577","setStaticSignature(bytes32,address,uint96)":"f727ef1c","updateImageHash(bytes32)":"29561426","validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)":"19822f7c"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_provided\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_current\",\"type\":\"uint256\"}],\"name\":\"BadNonce\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC4337Disabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_signer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"InvalidERC1271Signature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_entrypoint\",\"type\":\"address\"}],\"name\":\"InvalidEntryPoint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"}],\"name\":\"InvalidKind\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"InvalidSapientSignature\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"InvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_flag\",\"type\":\"uint256\"}],\"name\":\"InvalidSignatureFlag\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_weight\",\"type\":\"uint256\"}],\"name\":\"InvalidSignatureWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_expires\",\"type\":\"uint256\"}],\"name\":\"InvalidStaticSignatureExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_expectedCaller\",\"type\":\"address\"}],\"name\":\"InvalidStaticSignatureWrongCaller\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_weight\",\"type\":\"uint256\"}],\"name\":\"LowWeightChainedSignature\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_gasLeft\",\"type\":\"uint256\"}],\"name\":\"NotEnoughGas\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_returnData\",\"type\":\"bytes\"}],\"name\":\"Reverted\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"checkpoint\",\"type\":\"uint256\"}],\"internalType\":\"struct Snapshot\",\"name\":\"_snapshot\",\"type\":\"tuple\"}],\"name\":\"UnusedSnapshot\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nextCheckpoint\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_checkpoint\",\"type\":\"uint256\"}],\"name\":\"WrongChainedCheckpointOrder\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_returnData\",\"type\":\"bytes\"}],\"name\":\"CallAborted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_returnData\",\"type\":\"bytes\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"CallSkipped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"CallSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_space\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_newNonce\",\"type\":\"uint256\"}],\"name\":\"NonceChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"_timestamp\",\"type\":\"uint96\"}],\"name\":\"StaticSignatureSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"entrypoint\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"}],\"name\":\"executeUserOp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"getStaticSignature\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_space\",\"type\":\"uint256\"}],\"name\":\"readNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"recoverPartialSignature\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isValidImage\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"checkpoint\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"opHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"recoverSapientSignature\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"}],\"name\":\"selfExecute\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"_timestamp\",\"type\":\"uint96\"}],\"name\":\"setStaticSignature\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_imageHash\",\"type\":\"bytes32\"}],\"name\":\"updateImageHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"accountGasLimits\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"gasFees\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct PackedUserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"userOpHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"missingAccountFunds\",\"type\":\"uint256\"}],\"name\":\"validateUserOp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"validationData\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"execute(bytes,bytes)\":{\"params\":{\"_payload\":\"The payload\",\"_signature\":\"The signature\"}},\"getStaticSignature(bytes32)\":{\"params\":{\"_hash\":\"The hash to get the static signature for\"},\"returns\":{\"_0\":\"address The address associated with the static signature\",\"_1\":\"timestamp The timestamp of the static signature\"}},\"isValidSignature(bytes32,bytes)\":{\"details\":\"MUST return the correct magic value if the signature provided is valid for the provided hash > The bytes4 magic value to return when signature is valid is 0x1626ba7e : bytes4(keccak256(\\\"isValidSignature(bytes32,bytes)\\\") > This function MAY modify Ethereum's state\",\"params\":{\"_hash\":\"keccak256 hash that was signed\",\"_signature\":\"Signature byte array associated with _data\"},\"returns\":{\"_0\":\"Magic value 0x1626ba7e if the signature is valid and 0x0 otherwise\"}},\"readNonce(uint256)\":{\"params\":{\"_space\":\"The space\"},\"returns\":{\"_0\":\"nonce The nonce\"}},\"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"params\":{\"_payload\":\"The payload\",\"_signature\":\"The signature to recover\"},\"returns\":{\"checkpoint\":\"The checkpoint identifier\",\"imageHash\":\"The derived image hash\",\"isValidImage\":\"Whether the image hash is valid\",\"opHash\":\"The hash of the payload\",\"threshold\":\"The signature threshold\",\"weight\":\"The derived weight\"}},\"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"params\":{\"payload\":\"The payload to recover the signature from\",\"signature\":\"The signature to recover the image hash from\"},\"returns\":{\"_0\":\"The recovered image hash\"}},\"selfExecute(bytes)\":{\"details\":\"Callable only by the contract itself\",\"params\":{\"_payload\":\"The payload\"}},\"setStaticSignature(bytes32,address,uint96)\":{\"details\":\"Only callable by the wallet itself\",\"params\":{\"_address\":\"The address to associate with the static signature\",\"_hash\":\"The hash to set the static signature for\",\"_timestamp\":\"The timestamp of the static signature\"}},\"updateImageHash(bytes32)\":{\"details\":\"Only callable by the wallet itself\",\"params\":{\"_imageHash\":\"The new image hash\"}},\"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)\":{\"details\":\"Must validate caller is the entryPoint. Must validate the signature and nonce\",\"params\":{\"missingAccountFunds\":\"- Missing funds on the account's deposit in the entrypoint. This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call. The excess is left as a deposit in the entrypoint for future calls. Can be withdrawn anytime using \\\"entryPoint.withdrawTo()\\\". In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.\",\"userOp\":\"- The operation that is about to be executed.\",\"userOpHash\":\"- Hash of the user's request data. can be used as the basis for signature.\"},\"returns\":{\"validationData\":\" - Packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode. <20-byte> aggregatorOrSigFail - 0 for valid signature, 1 to mark signature failure, otherwise, an address of an \\\"aggregator\\\" contract. <6-byte> validUntil - Last timestamp this operation is valid at, or 0 for \\\"indefinitely\\\" <6-byte> validAfter - First timestamp this operation is valid If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure. Note that the validation code cannot use block.timestamp (or block.number) directly.\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"BadNonce(uint256,uint256,uint256)\":[{\"notice\":\"Error thrown when the nonce is bad\"}],\"InvalidERC1271Signature(bytes32,address,bytes)\":[{\"notice\":\"Error thrown when the ERC1271 signature is invalid\"}],\"InvalidKind(uint8)\":[{\"notice\":\"Error thrown when the kind is invalid\"}],\"InvalidSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":[{\"notice\":\"Error thrown when the sapient signature is invalid\"}],\"InvalidSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":[{\"notice\":\"Error thrown when a signature is invalid\"}],\"InvalidSignatureFlag(uint256)\":[{\"notice\":\"Error thrown when the signature flag is invalid\"}],\"InvalidSignatureWeight(uint256,uint256)\":[{\"notice\":\"Error thrown when the signature weight is invalid\"}],\"InvalidStaticSignatureExpired(bytes32,uint256)\":[{\"notice\":\"Error thrown when the static signature has expired\"}],\"InvalidStaticSignatureWrongCaller(bytes32,address,address)\":[{\"notice\":\"Error thrown when the static signature has the wrong caller\"}],\"LowWeightChainedSignature(bytes,uint256,uint256)\":[{\"notice\":\"Error thrown when the weight is too low for a chained signature\"}],\"NotEnoughGas((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint256,uint256)\":[{\"notice\":\"Error thrown when there is not enough gas\"}],\"OnlySelf(address)\":[{\"notice\":\"Error thrown when the caller is not the same as the contract\"}],\"Reverted((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint256,bytes)\":[{\"notice\":\"Error thrown when a call reverts\"}],\"UnusedSnapshot((bytes32,uint256))\":[{\"notice\":\"Error thrown when the snapshot is unused\"}],\"WrongChainedCheckpointOrder(uint256,uint256)\":[{\"notice\":\"Error thrown when the checkpoint order is wrong\"}]},\"events\":{\"CallAborted(bytes32,uint256,bytes)\":{\"notice\":\"Emitted when a call is aborted\"},\"CallFailed(bytes32,uint256,bytes)\":{\"notice\":\"Emitted when a call fails\"},\"CallSkipped(bytes32,uint256)\":{\"notice\":\"Emitted when a call is skipped\"},\"CallSucceeded(bytes32,uint256)\":{\"notice\":\"Emitted when a call succeeds\"},\"NonceChange(uint256,uint256)\":{\"notice\":\"Emitted when the nonce is changed\"},\"StaticSignatureSet(bytes32,address,uint96)\":{\"notice\":\"Event emitted when a static signature is set\"}},\"kind\":\"user\",\"methods\":{\"execute(bytes,bytes)\":{\"notice\":\"Execute a call\"},\"getStaticSignature(bytes32)\":{\"notice\":\"Get the static signature for a specific hash\"},\"isValidSignature(bytes32,bytes)\":{\"notice\":\"Verifies whether the provided signature is valid with respect to the provided hash\"},\"readNonce(uint256)\":{\"notice\":\"Read the nonce\"},\"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"notice\":\"Recover the partial signature\"},\"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"notice\":\"Recovers the image hash of a given signature\"},\"selfExecute(bytes)\":{\"notice\":\"Execute a call\"},\"setStaticSignature(bytes32,address,uint96)\":{\"notice\":\"Set the static signature for a specific hash\"},\"updateImageHash(bytes32)\":{\"notice\":\"Update the image hash\"},\"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)\":{\"notice\":\"Validate user's signature and nonce the entryPoint will make the call to the recipient only if this validation call returns successfully. signature failure should be reported by returning SIG_VALIDATION_FAILED (1). This allows making a \\\"simulation call\\\" without a valid signature Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/modules/ERC4337v07.sol\":\"ERC4337v07\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/modules/Calls.sol\":{\"keccak256\":\"0xcd0d38d0fd248e4443032dede2b8892ea0ca7e55538cd54082830f6b98d8edb1\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://617bb6d0724b18f3d77347cc454a57c1c916a0818a592552bd7fa226aa41a306\",\"dweb:/ipfs/Qmeet85Ux6cKq9JmC25JnTzFnRrgDpkyRik2svZLWt4fov\"]},\"src/modules/ERC4337v07.sol\":{\"keccak256\":\"0xbee11ed2498b892b16f72984c848fea85b58d15313fffa78c1e48ca7208f9189\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2d9296803bd52f5e2ae84011593f686802f1cadf6c68a4ee9f97e6455463ae0f\",\"dweb:/ipfs/QmXmWwUiV2eshxxdY5zCyJ7rxcH7bztxcAoh1scw2MPuhP\"]},\"src/modules/Nonce.sol\":{\"keccak256\":\"0x56fbf6dc9b34ab60ae8a32ffb6f583c003bb8f4a5223ce704e982400fa403fab\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://492f53628633b862702cf8f9b726067a722c94028133a8a4c4fcf3d0e73ad803\",\"dweb:/ipfs/QmTHNy4XbH47YZaqKDpknb5aApjRH9HVAREHN7N5vEFWEV\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/Storage.sol\":{\"keccak256\":\"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da\",\"dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn\"]},\"src/modules/auth/BaseAuth.sol\":{\"keccak256\":\"0xbf2e40def03fcb5f4a5129b2f5803e21951325b92e00126cbe1427b7c25cfefd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://b560905fcc4b957d27c2abed78a1e82529c89fa472e91b3d108fbfd91aa7c3f7\",\"dweb:/ipfs/QmRjLLtTWE6dFX2kBQCgLz7ossfMxhAFgDC8Jx9XuGL6Wy\"]},\"src/modules/auth/BaseSig.sol\":{\"keccak256\":\"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8\",\"dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3\"]},\"src/modules/auth/SelfAuth.sol\":{\"keccak256\":\"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42\",\"dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W\"]},\"src/modules/interfaces/IAccount.sol\":{\"keccak256\":\"0x64ca3bb59ec4fc0a60d80402802365e2d5226afe7e7aabe3b21df936c84f2bcb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ccfd2381e1874cdec2f473a9a17799a3b57360c0593d68ee66fcea9c16eb39b4\",\"dweb:/ipfs/QmcjbJpGz3Exmu4fsj953Y2bG8rtQaVMEFUgT6W2dUXomr\"]},\"src/modules/interfaces/IAuth.sol\":{\"keccak256\":\"0xf6fa30af2ec91d5fbeac17c9b1f2aa73b7883c9ac98745605007e57666394b91\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://6e90a87978519462f9612f4a17e38fddc1c7bcf700ff834a1de7dce326f30353\",\"dweb:/ipfs/QmXmWAsRRK6t4jPs4VcXrouyokxdALM28D3odX7ub48WEp\"]},\"src/modules/interfaces/ICheckpointer.sol\":{\"keccak256\":\"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1\",\"dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t\"]},\"src/modules/interfaces/IDelegatedExtension.sol\":{\"keccak256\":\"0xa2ae897e90fd70dd4a9e172bc04d019ba9c512e72c2df65fcb6daf87dd5ceb90\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://cdf4b7c3dfb0aef6c9dbe8b2a0542018dc756ef2252d7101bcb3186192da0a11\",\"dweb:/ipfs/QmPHCVu1DJ7fBrPBYA5y3hoF3a3XFEBwYCZ1ErGaxPhcYL\"]},\"src/modules/interfaces/IERC1271.sol\":{\"keccak256\":\"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b\",\"dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF\"]},\"src/modules/interfaces/IEntryPoint.sol\":{\"keccak256\":\"0xd19922ea7a8ae09072a721138dc93e175fa77ecaa3ac6f2d759d5e5e944fb665\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://20ecea69ddd4d8787c0bdc4487dea03e90f63f4296674a12728e331a78e62620\",\"dweb:/ipfs/QmZUrX8zEqfHZEJQjNtDUXGS47bj2UuRCLfbkLPrXsot1c\"]},\"src/modules/interfaces/IPartialAuth.sol\":{\"keccak256\":\"0x0d1aa021615d8e90696e71a9468331457a1babfa2ffe169654b7456e5bcb7a73\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://bbacd149a6358ab0d4b9c588d2e3a55fc71ed4723269150d7b91ca70092f6519\",\"dweb:/ipfs/QmUSwtrYCrRcRFsy5rCzdMPrw1FCU7ZoeXdsW6kK9yc8FK\"]},\"src/modules/interfaces/ISapient.sol\":{\"keccak256\":\"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489\",\"dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"src/utils/LibOptim.sol\":{\"keccak256\":\"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81\",\"dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint256","name":"_space","type":"uint256"},{"internalType":"uint256","name":"_provided","type":"uint256"},{"internalType":"uint256","name":"_current","type":"uint256"}],"type":"error","name":"BadNonce"},{"inputs":[],"type":"error","name":"ERC4337Disabled"},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32"},{"internalType":"address","name":"_signer","type":"address"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"type":"error","name":"InvalidERC1271Signature"},{"inputs":[{"internalType":"address","name":"_entrypoint","type":"address"}],"type":"error","name":"InvalidEntryPoint"},{"inputs":[{"internalType":"uint8","name":"kind","type":"uint8"}],"type":"error","name":"InvalidKind"},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"type":"error","name":"InvalidSapientSignature"},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"type":"error","name":"InvalidSignature"},{"inputs":[{"internalType":"uint256","name":"_flag","type":"uint256"}],"type":"error","name":"InvalidSignatureFlag"},{"inputs":[{"internalType":"uint256","name":"_threshold","type":"uint256"},{"internalType":"uint256","name":"_weight","type":"uint256"}],"type":"error","name":"InvalidSignatureWeight"},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32"},{"internalType":"uint256","name":"_expires","type":"uint256"}],"type":"error","name":"InvalidStaticSignatureExpired"},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32"},{"internalType":"address","name":"_caller","type":"address"},{"internalType":"address","name":"_expectedCaller","type":"address"}],"type":"error","name":"InvalidStaticSignatureWrongCaller"},{"inputs":[{"internalType":"bytes","name":"_signature","type":"bytes"},{"internalType":"uint256","name":"_threshold","type":"uint256"},{"internalType":"uint256","name":"_weight","type":"uint256"}],"type":"error","name":"LowWeightChainedSignature"},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_gasLeft","type":"uint256"}],"type":"error","name":"NotEnoughGas"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"}],"type":"error","name":"OnlySelf"},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"bytes","name":"_returnData","type":"bytes"}],"type":"error","name":"Reverted"},{"inputs":[{"internalType":"struct Snapshot","name":"_snapshot","type":"tuple","components":[{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"uint256","name":"checkpoint","type":"uint256"}]}],"type":"error","name":"UnusedSnapshot"},{"inputs":[{"internalType":"uint256","name":"_nextCheckpoint","type":"uint256"},{"internalType":"uint256","name":"_checkpoint","type":"uint256"}],"type":"error","name":"WrongChainedCheckpointOrder"},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_index","type":"uint256","indexed":false},{"internalType":"bytes","name":"_returnData","type":"bytes","indexed":false}],"type":"event","name":"CallAborted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_index","type":"uint256","indexed":false},{"internalType":"bytes","name":"_returnData","type":"bytes","indexed":false}],"type":"event","name":"CallFailed","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_index","type":"uint256","indexed":false}],"type":"event","name":"CallSkipped","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_index","type":"uint256","indexed":false}],"type":"event","name":"CallSucceeded","anonymous":false},{"inputs":[{"internalType":"uint256","name":"_space","type":"uint256","indexed":false},{"internalType":"uint256","name":"_newNonce","type":"uint256","indexed":false}],"type":"event","name":"NonceChange","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32","indexed":false},{"internalType":"address","name":"_address","type":"address","indexed":false},{"internalType":"uint96","name":"_timestamp","type":"uint96","indexed":false}],"type":"event","name":"StaticSignatureSet","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"entrypoint","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"payable","type":"function","name":"execute"},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"executeUserOp"},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getStaticSignature","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"view","type":"function","name":"isValidSignature","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"uint256","name":"_space","type":"uint256"}],"stateMutability":"view","type":"function","name":"readNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"view","type":"function","name":"recoverPartialSignature","outputs":[{"internalType":"uint256","name":"threshold","type":"uint256"},{"internalType":"uint256","name":"weight","type":"uint256"},{"internalType":"bool","name":"isValidImage","type":"bool"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"uint256","name":"checkpoint","type":"uint256"},{"internalType":"bytes32","name":"opHash","type":"bytes32"}]},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"view","type":"function","name":"recoverSapientSignature","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"}],"stateMutability":"payable","type":"function","name":"selfExecute"},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint96","name":"_timestamp","type":"uint96"}],"stateMutability":"nonpayable","type":"function","name":"setStaticSignature"},{"inputs":[{"internalType":"bytes32","name":"_imageHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"updateImageHash"},{"inputs":[{"internalType":"struct PackedUserOperation","name":"userOp","type":"tuple","components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"initCode","type":"bytes"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"bytes32","name":"accountGasLimits","type":"bytes32"},{"internalType":"uint256","name":"preVerificationGas","type":"uint256"},{"internalType":"bytes32","name":"gasFees","type":"bytes32"},{"internalType":"bytes","name":"paymasterAndData","type":"bytes"},{"internalType":"bytes","name":"signature","type":"bytes"}]},{"internalType":"bytes32","name":"userOpHash","type":"bytes32"},{"internalType":"uint256","name":"missingAccountFunds","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"validateUserOp","outputs":[{"internalType":"uint256","name":"validationData","type":"uint256"}]}],"devdoc":{"kind":"dev","methods":{"execute(bytes,bytes)":{"params":{"_payload":"The payload","_signature":"The signature"}},"getStaticSignature(bytes32)":{"params":{"_hash":"The hash to get the static signature for"},"returns":{"_0":"address The address associated with the static signature","_1":"timestamp The timestamp of the static signature"}},"isValidSignature(bytes32,bytes)":{"details":"MUST return the correct magic value if the signature provided is valid for the provided hash > The bytes4 magic value to return when signature is valid is 0x1626ba7e : bytes4(keccak256(\"isValidSignature(bytes32,bytes)\") > This function MAY modify Ethereum's state","params":{"_hash":"keccak256 hash that was signed","_signature":"Signature byte array associated with _data"},"returns":{"_0":"Magic value 0x1626ba7e if the signature is valid and 0x0 otherwise"}},"readNonce(uint256)":{"params":{"_space":"The space"},"returns":{"_0":"nonce The nonce"}},"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"params":{"_payload":"The payload","_signature":"The signature to recover"},"returns":{"checkpoint":"The checkpoint identifier","imageHash":"The derived image hash","isValidImage":"Whether the image hash is valid","opHash":"The hash of the payload","threshold":"The signature threshold","weight":"The derived weight"}},"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"params":{"payload":"The payload to recover the signature from","signature":"The signature to recover the image hash from"},"returns":{"_0":"The recovered image hash"}},"selfExecute(bytes)":{"details":"Callable only by the contract itself","params":{"_payload":"The payload"}},"setStaticSignature(bytes32,address,uint96)":{"details":"Only callable by the wallet itself","params":{"_address":"The address to associate with the static signature","_hash":"The hash to set the static signature for","_timestamp":"The timestamp of the static signature"}},"updateImageHash(bytes32)":{"details":"Only callable by the wallet itself","params":{"_imageHash":"The new image hash"}},"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)":{"details":"Must validate caller is the entryPoint. Must validate the signature and nonce","params":{"missingAccountFunds":"- Missing funds on the account's deposit in the entrypoint. This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call. The excess is left as a deposit in the entrypoint for future calls. Can be withdrawn anytime using \"entryPoint.withdrawTo()\". In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.","userOp":"- The operation that is about to be executed.","userOpHash":"- Hash of the user's request data. can be used as the basis for signature."},"returns":{"validationData":" - Packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode. <20-byte> aggregatorOrSigFail - 0 for valid signature, 1 to mark signature failure, otherwise, an address of an \"aggregator\" contract. <6-byte> validUntil - Last timestamp this operation is valid at, or 0 for \"indefinitely\" <6-byte> validAfter - First timestamp this operation is valid If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure. Note that the validation code cannot use block.timestamp (or block.number) directly."}}},"version":1},"userdoc":{"kind":"user","methods":{"execute(bytes,bytes)":{"notice":"Execute a call"},"getStaticSignature(bytes32)":{"notice":"Get the static signature for a specific hash"},"isValidSignature(bytes32,bytes)":{"notice":"Verifies whether the provided signature is valid with respect to the provided hash"},"readNonce(uint256)":{"notice":"Read the nonce"},"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"notice":"Recover the partial signature"},"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"notice":"Recovers the image hash of a given signature"},"selfExecute(bytes)":{"notice":"Execute a call"},"setStaticSignature(bytes32,address,uint96)":{"notice":"Set the static signature for a specific hash"},"updateImageHash(bytes32)":{"notice":"Update the image hash"},"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)":{"notice":"Validate user's signature and nonce the entryPoint will make the call to the recipient only if this validation call returns successfully. signature failure should be reported by returning SIG_VALIDATION_FAILED (1). This allows making a \"simulation call\" without a valid signature Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure."}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/modules/ERC4337v07.sol":"ERC4337v07"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/modules/Calls.sol":{"keccak256":"0xcd0d38d0fd248e4443032dede2b8892ea0ca7e55538cd54082830f6b98d8edb1","urls":["bzz-raw://617bb6d0724b18f3d77347cc454a57c1c916a0818a592552bd7fa226aa41a306","dweb:/ipfs/Qmeet85Ux6cKq9JmC25JnTzFnRrgDpkyRik2svZLWt4fov"],"license":"Apache-2.0"},"src/modules/ERC4337v07.sol":{"keccak256":"0xbee11ed2498b892b16f72984c848fea85b58d15313fffa78c1e48ca7208f9189","urls":["bzz-raw://2d9296803bd52f5e2ae84011593f686802f1cadf6c68a4ee9f97e6455463ae0f","dweb:/ipfs/QmXmWwUiV2eshxxdY5zCyJ7rxcH7bztxcAoh1scw2MPuhP"],"license":"Apache-2.0"},"src/modules/Nonce.sol":{"keccak256":"0x56fbf6dc9b34ab60ae8a32ffb6f583c003bb8f4a5223ce704e982400fa403fab","urls":["bzz-raw://492f53628633b862702cf8f9b726067a722c94028133a8a4c4fcf3d0e73ad803","dweb:/ipfs/QmTHNy4XbH47YZaqKDpknb5aApjRH9HVAREHN7N5vEFWEV"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/Storage.sol":{"keccak256":"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f","urls":["bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da","dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn"],"license":"Apache-2.0"},"src/modules/auth/BaseAuth.sol":{"keccak256":"0xbf2e40def03fcb5f4a5129b2f5803e21951325b92e00126cbe1427b7c25cfefd","urls":["bzz-raw://b560905fcc4b957d27c2abed78a1e82529c89fa472e91b3d108fbfd91aa7c3f7","dweb:/ipfs/QmRjLLtTWE6dFX2kBQCgLz7ossfMxhAFgDC8Jx9XuGL6Wy"],"license":"Apache-2.0"},"src/modules/auth/BaseSig.sol":{"keccak256":"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa","urls":["bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8","dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3"],"license":"Apache-2.0"},"src/modules/auth/SelfAuth.sol":{"keccak256":"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c","urls":["bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42","dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W"],"license":"Apache-2.0"},"src/modules/interfaces/IAccount.sol":{"keccak256":"0x64ca3bb59ec4fc0a60d80402802365e2d5226afe7e7aabe3b21df936c84f2bcb","urls":["bzz-raw://ccfd2381e1874cdec2f473a9a17799a3b57360c0593d68ee66fcea9c16eb39b4","dweb:/ipfs/QmcjbJpGz3Exmu4fsj953Y2bG8rtQaVMEFUgT6W2dUXomr"],"license":"MIT"},"src/modules/interfaces/IAuth.sol":{"keccak256":"0xf6fa30af2ec91d5fbeac17c9b1f2aa73b7883c9ac98745605007e57666394b91","urls":["bzz-raw://6e90a87978519462f9612f4a17e38fddc1c7bcf700ff834a1de7dce326f30353","dweb:/ipfs/QmXmWAsRRK6t4jPs4VcXrouyokxdALM28D3odX7ub48WEp"],"license":"Apache-2.0"},"src/modules/interfaces/ICheckpointer.sol":{"keccak256":"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513","urls":["bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1","dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t"],"license":"Apache-2.0"},"src/modules/interfaces/IDelegatedExtension.sol":{"keccak256":"0xa2ae897e90fd70dd4a9e172bc04d019ba9c512e72c2df65fcb6daf87dd5ceb90","urls":["bzz-raw://cdf4b7c3dfb0aef6c9dbe8b2a0542018dc756ef2252d7101bcb3186192da0a11","dweb:/ipfs/QmPHCVu1DJ7fBrPBYA5y3hoF3a3XFEBwYCZ1ErGaxPhcYL"],"license":"Apache-2.0"},"src/modules/interfaces/IERC1271.sol":{"keccak256":"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9","urls":["bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b","dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF"],"license":"Apache-2.0"},"src/modules/interfaces/IEntryPoint.sol":{"keccak256":"0xd19922ea7a8ae09072a721138dc93e175fa77ecaa3ac6f2d759d5e5e944fb665","urls":["bzz-raw://20ecea69ddd4d8787c0bdc4487dea03e90f63f4296674a12728e331a78e62620","dweb:/ipfs/QmZUrX8zEqfHZEJQjNtDUXGS47bj2UuRCLfbkLPrXsot1c"],"license":"MIT"},"src/modules/interfaces/IPartialAuth.sol":{"keccak256":"0x0d1aa021615d8e90696e71a9468331457a1babfa2ffe169654b7456e5bcb7a73","urls":["bzz-raw://bbacd149a6358ab0d4b9c588d2e3a55fc71ed4723269150d7b91ca70092f6519","dweb:/ipfs/QmUSwtrYCrRcRFsy5rCzdMPrw1FCU7ZoeXdsW6kK9yc8FK"],"license":"Apache-2.0"},"src/modules/interfaces/ISapient.sol":{"keccak256":"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359","urls":["bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489","dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"src/utils/LibOptim.sol":{"keccak256":"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde","urls":["bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81","dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x"],"license":"Apache-2.0"}},"version":1},"id":44} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/ERC4337v07.t.sol/ERC4337v07Test.json b/contracts/artifacts/wallet-contracts-v3/ERC4337v07.t.sol/ERC4337v07Test.json new file mode 100644 index 00000000..a609cb65 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/ERC4337v07.t.sol/ERC4337v07Test.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"entryPoint","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract MockEntryPoint"}],"stateMutability":"view"},{"type":"function","name":"excludeArtifacts","inputs":[],"outputs":[{"name":"excludedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"excludeContracts","inputs":[],"outputs":[{"name":"excludedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"excludeSelectors","inputs":[],"outputs":[{"name":"excludedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"excludeSenders","inputs":[],"outputs":[{"name":"excludedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"factory","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract Factory"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"setUp","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"signer","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"signerPk","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"stage1Module","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract Stage1Module"}],"stateMutability":"view"},{"type":"function","name":"targetArtifactSelectors","inputs":[],"outputs":[{"name":"targetedArtifactSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzArtifactSelector[]","components":[{"name":"artifact","type":"string","internalType":"string"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetArtifacts","inputs":[],"outputs":[{"name":"targetedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"targetContracts","inputs":[],"outputs":[{"name":"targetedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"targetInterfaces","inputs":[],"outputs":[{"name":"targetedInterfaces_","type":"tuple[]","internalType":"struct StdInvariant.FuzzInterface[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"artifacts","type":"string[]","internalType":"string[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSelectors","inputs":[],"outputs":[{"name":"targetedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSenders","inputs":[],"outputs":[{"name":"targetedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"test_executeUserOp_executes_payload","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_executeUserOp_reverts_if_disabled","inputs":[{"name":"payload","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_executeUserOp_reverts_invalidEntryPoint","inputs":[{"name":"payload","type":"bytes","internalType":"bytes"},{"name":"randomCaller","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_validateUserOp_depositsMissingFunds","inputs":[{"name":"userOpHash","type":"bytes32","internalType":"bytes32"},{"name":"missingFunds","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_validateUserOp_returns_one_on_invalidSignature","inputs":[{"name":"userOpHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_validateUserOp_returns_zero_on_validSignature","inputs":[{"name":"userOpHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_validateUserOp_reverts_if_disabled","inputs":[{"name":"userOp","type":"tuple","internalType":"struct PackedUserOperation","components":[{"name":"sender","type":"address","internalType":"address"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"initCode","type":"bytes","internalType":"bytes"},{"name":"callData","type":"bytes","internalType":"bytes"},{"name":"accountGasLimits","type":"bytes32","internalType":"bytes32"},{"name":"preVerificationGas","type":"uint256","internalType":"uint256"},{"name":"gasFees","type":"bytes32","internalType":"bytes32"},{"name":"paymasterAndData","type":"bytes","internalType":"bytes"},{"name":"signature","type":"bytes","internalType":"bytes"}]},{"name":"userOpHash","type":"bytes32","internalType":"bytes32"},{"name":"missingFunds","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_validateUserOp_reverts_invalidEntryPoint","inputs":[{"name":"userOp","type":"tuple","internalType":"struct PackedUserOperation","components":[{"name":"sender","type":"address","internalType":"address"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"initCode","type":"bytes","internalType":"bytes"},{"name":"callData","type":"bytes","internalType":"bytes"},{"name":"accountGasLimits","type":"bytes32","internalType":"bytes32"},{"name":"preVerificationGas","type":"uint256","internalType":"uint256"},{"name":"gasFees","type":"bytes32","internalType":"bytes32"},{"name":"paymasterAndData","type":"bytes","internalType":"bytes"},{"name":"signature","type":"bytes","internalType":"bytes"}]},{"name":"userOpHash","type":"bytes32","internalType":"bytes32"},{"name":"missingFunds","type":"uint256","internalType":"uint256"},{"name":"randomCaller","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"wallet","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address payable"}],"stateMutability":"view"},{"type":"function","name":"walletConfig","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"walletImageHash","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"event","name":"Deposited","inputs":[{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"totalDeposited","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Explicit","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"error","name":"InvalidKind","inputs":[{"name":"kind","type":"uint8","internalType":"uint8"}]}],"bytecode":{"object":"0x60808060405234602f57600160ff19600c541617600c55600160ff19601f541617601f5561e19f90816100358239f35b600080fdfe608080604052600436101561001357600080fd5b600090813560e01c9081630a9254e4146133ef5750806317dbaeee146133b35780631ed7831c1461330a578063238ac933146132b85780632ade38801461308c5780632dcbe49a1461303a5780633e5e3c2314612f915780633f7286f414612ee85780634be6cb0814612bc05780634f4fd5551461287d578063521eb2731461282b57806359ff5db7146125335780635d3951f814611bdc57806366d9a9a014611a81578063772e85341461174a57806385226c81146116a25780638f75543e14610e90578063916a17c614610dbb578063b0464fdc14610ce6578063b0d691fe14610c95578063b4585fd51461065a578063b5508aa9146105b2578063ba414fa61461056f578063c45a01551461051a578063c4df3312146104de578063d34ddc0514610490578063da2521f91461025c578063e20c9f71146101a35763fa7626d41461016057600080fd5b346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a057602060ff601f54166040519015158152f35b80fd5b50346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a05760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b8181106102305761022c856102208187038261435f565b6040519182918261402b565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610209565b50346101a05760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a0578060206102b060405161029f838261435f565b8381526102aa614bd4565b90614cf3565b73ffffffffffffffffffffffffffffffffffffffff82541690737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561048b57604051917fca669fa70000000000000000000000000000000000000000000000000000000083526004830152838260248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156104805783928591610461575b50506103999073ffffffffffffffffffffffffffffffffffffffff60225416906040519586809481937f19822f7c00000000000000000000000000000000000000000000000000000000835260606004840152606483019061483d565b600435602483015282604483015203925af18015610456578390610422575b61041f92507f53686f756c642072657475726e203120285349475f56414c49444154494f4e5f604051926103ed60608561435f565b604084528301527f4641494c45442920666f7220616e20696e76616c6964207369676e61747572656040830152614e5a565b80f35b508082813d831161044f575b610438818361435f565b8101031261044a5761041f91516103b8565b600080fd5b503d61042e565b6040513d85823e3d90fd5b819293509061046f9161435f565b61047c578190833861033c565b5050fd5b6040513d86823e3d90fd5b505050fd5b50346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a05761022c6104ca6143a0565b60405191829160208352602083019061409e565b50346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a0576020602454604051908152f35b50346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a057602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051908152f35b50346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a05760206105a8614c0d565b6040519015158152f35b50346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a0576019546105ed816145f3565b916105fb604051938461435f565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b83831061063d576040518061022c8782614165565b60016020819261064c85614477565b815201920192019190610628565b50346101a05760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a057602435737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610c9157816040517f4c63e56200000000000000000000000000000000000000000000000000000000815282151560048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610bc857610c7c575b505081602061071360405161029f838261435f565b73ffffffffffffffffffffffffffffffffffffffff60225416737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610bc457604051907fc88a5e6d0000000000000000000000000000000000000000000000000000000082526004820152846024820152838160448183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115610480578491610c67575b505073ffffffffffffffffffffffffffffffffffffffff825416737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610bc457604051907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152838160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115610480578491610c52575b505073ffffffffffffffffffffffffffffffffffffffff82541690737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610bc457604051917f81bad6f30000000000000000000000000000000000000000000000000000000083526001600484015260016024840152846044840152600160648401526084830152838260a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156104805783928591610c33575b50506109609073ffffffffffffffffffffffffffffffffffffffff6022541690817f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4856040518a8152a26040519586809481937f19822f7c00000000000000000000000000000000000000000000000000000000835260606004840152606483019061483d565b600435602483015289604483015203925af1918215610480578492610c04575b506109e960609260405190610995858361435f565b602582527f53686f756c642072657475726e203120666f72207369676e6174757265206661848301527f696c7572650000000000000000000000000000000000000000000000000000006040830152614e5a565b8373ffffffffffffffffffffffffffffffffffffffff8254169360248373ffffffffffffffffffffffffffffffffffffffff6022541696604051928380927ffc7e286d0000000000000000000000000000000000000000000000000000000082528a60048301525afa908115610456578391610bd3575b5060405191610a6f868461435f565b602a83527f4d697373696e672066756e64732077657265206e6f74206465706f7369746564858401527f20636f72726563746c79000000000000000000000000000000000000000000006040840152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610bc4578391610b2360405194859384937f88b44c8500000000000000000000000000000000000000000000000000000000855260048501526024840152886044840152606483019061409e565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610bc857610baf575b50507f57616c6c65742073686f756c6420686176652075736564206974732062616c6161041f933191610b7d604051948561435f565b603384528301527f6e636520666f7220746865206465706f736974000000000000000000000000006040830152614dba565b81610bb99161435f565b610bc4578338610b47565b8380fd5b6040513d84823e3d90fd5b809350848092503d8311610bfd575b610bec818361435f565b8101031261044a5785915138610a60565b503d610be2565b9080925081813d8311610c2c575b610c1c818361435f565b8101031261044a57519038610980565b503d610c12565b8192935090610c419161435f565b610c4e57819083386108d9565b8280fd5b81610c5c9161435f565b610c4e578238610830565b81610c719161435f565b610c4e5782386107a4565b81610c869161435f565b610c915781386106fe565b5080fd5b50346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a057602073ffffffffffffffffffffffffffffffffffffffff815416604051908152f35b50346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a057601c54610d21816145f3565b91610d2f604051938461435f565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b838310610d71576040518061022c87826141e3565b60026020600192604051610d84816142db565b73ffffffffffffffffffffffffffffffffffffffff8654168152610da98587016148dd565b83820152815201920192019190610d5c565b50346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a057601d54610df6816145f3565b91610e04604051938461435f565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b838310610e46576040518061022c87826141e3565b60026020600192604051610e59816142db565b73ffffffffffffffffffffffffffffffffffffffff8654168152610e7e8587016148dd565b83820152815201920192019190610e31565b50346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a0576040516105d18082019082821067ffffffffffffffff8311176116755790829161db998339039082f090811561166957610ef76147f4565b91818352604090815190610f0b838361435f565b600182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301845b81811061162957505073ffffffffffffffffffffffffffffffffffffffff908386019283521690610fd983517f0c0340fc00000000000000000000000000000000000000000000000000000000602082015260048152610f9560248261435f565b845190610fa182614326565b848252866020830152858201528560608201528560808201528560a0820152600160c0820152825190610fd382614b84565b52614b84565b5082519060208083015261016082019060ff8751168584015260208701511515606084015251906101206080840152815180915261018083019060206101808260051b86010193019187905b8783831061158257505050505061108161010091606088015160a0850152608088015160c085015260a08801517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08583030160e086015261409e565b9560c08101518284015260e08101516101208401520151947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08282030161014083015260208087519283815201960190855b81811061155657505050838161111461114e938398037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261435f565b8451809381927f71aad10d00000000000000000000000000000000000000000000000000000000835260206004840152602483019061409e565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156115495761125e8493928692839161152f575b506112176002602c875180947f7b227061796c6f6164223a22000000000000000000000000000000000000000060208301526111c2815180926020868601910161407b565b81017f227d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe281018452018261435f565b6112c2611222614ef5565b91865197889485947f0199a22000000000000000000000000000000000000000000000000000000000865260606004870152606486019061409e565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152601083527f7061796c6f61645f746f5061636b6564000000000000000000000000000000006020840152016044860152019061409e565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19283156114ec57849361150b575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561048b578151907f81bad6f300000000000000000000000000000000000000000000000000000000825260016004830152846024830152846044830152600160648301526084820152838160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156114ec579084916114f6575b50507fed94f157df493252d8e5700fc6b9bf2466c66387b3c1a19816847dfa9f310057602073ffffffffffffffffffffffffffffffffffffffff602254168351908152a173ffffffffffffffffffffffffffffffffffffffff60205416737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561048b578151907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152838160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156114ec579084916114d7575b505073ffffffffffffffffffffffffffffffffffffffff60225416803b1561048b576114aa849391849284519586809481937f9c145aed00000000000000000000000000000000000000000000000000000000835260206004840152602483019061409e565b03925af19081156114ce57506114bd5750f35b816114c79161435f565b6101a05780f35b513d84823e3d90fd5b816114e19161435f565b61047c578238611444565b82513d86823e3d90fd5b816115009161435f565b61047c578238611376565b6115289193503d8086833e611520818361435f565b810190614563565b91386112ea565b61154391503d8085833e611520818361435f565b3861117d565b50505051903d90823e3d90fd5b825173ffffffffffffffffffffffffffffffffffffffff168852602097880197909201916001016110d3565b60208091877ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe808a6001969798999a0301865260c0806115f38b519473ffffffffffffffffffffffffffffffffffffffff8651168552868601518786015260e0818701519186015260e085019061409e565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152960192019201909291611025565b602090855161163781614326565b87815287838201526060878201528760608201528760808201528760a08201528760c082015282828701015201610f34565b604051903d90823e3d90fd5b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b50346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a057601a546116dd816145f3565b916116eb604051938461435f565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b83831061172d576040518061022c8782614165565b60016020819261173c85614477565b815201920192019190611718565b50346101a05760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a0578060043567ffffffffffffffff8111611a54576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8236030112611a545760643573ffffffffffffffffffffffffffffffffffffffff811680910361047c5773ffffffffffffffffffffffffffffffffffffffff60205416811415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561048b57604051907f4c63e56200000000000000000000000000000000000000000000000000000000825260048201528381602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115610480578491611a6c575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561047c576040517fca669fa7000000000000000000000000000000000000000000000000000000008152816004820152838160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115610480578491611a57575b5050604051907f1d6ddbf400000000000000000000000000000000000000000000000000000000602083015260248201526024815261191c60448261435f565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561047c578261197791604051809381927ff28dceb300000000000000000000000000000000000000000000000000000000835260206004840152602483019061409e565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115610456578391611a3f575b5050611a0160209173ffffffffffffffffffffffffffffffffffffffff60225416906040519485809481937f19822f7c0000000000000000000000000000000000000000000000000000000083526044359060243590600401600485016146a9565b03925af18015610bc857611a13575080f35b611a349060203d602011611a38575b611a2c818361435f565b81019061460b565b5080f35b503d611a22565b81611a499161435f565b611a5457813861199f565b50fd5b81611a619161435f565b61047c5782386118dc565b81611a769161435f565b61047c578238611868565b50346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a057601b54611abc816145f3565b611ac9604051918261435f565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b838310611ba157868587604051928392602084019060208552518091526040840160408260051b8601019392905b828210611b3657505050500390f35b91936020611b91827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0600195979984950301865288519083611b81835160408452604084019061409e565b920151908481840391015261410f565b9601920192018594939192611b27565b60026020600192604051611bb4816142db565b611bbd86614477565b8152611bca8587016148dd565b83820152815201920192019190611af9565b50346101a05760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a057600435611c176147f4565b600381528160e082015260255490611cec73ffffffffffffffffffffffffffffffffffffffff602254166020830151151560001461252c5785905b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f84527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408401527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de6060840152608083015260a082015260a08152611ce360c08261435f565b5190209161544f565b6040519060208201927f190100000000000000000000000000000000000000000000000000000000000084526022830152604282015260428152611d3160628261435f565b519020604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561045657838092819082936124df575b5073ffffffffffffffffffffffffffffffffffffffff6026541693604051947f56ca623e00000000000000000000000000000000000000000000000000000000865260048601528285602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9485156104565783956124c3575b50604051917fb11a19e800000000000000000000000000000000000000000000000000000000835260048301528282602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156104565783926124a7575b50604051937fb11a19e800000000000000000000000000000000000000000000000000000000855260048501528284602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa93841561045657839461248b575b5060ff604051917f6900a3ae0000000000000000000000000000000000000000000000000000000083521660048201528281602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa948515610456576001600c6020600f6121729461202c856121b9998161211d9e60299e6120b39c8f809361246a575b5050600690604051998a9581611f4d8189019b8c81519384920161407b565b87017f3a686173683a000000000000000000000000000000000000000000000000000083820152611f87825180938560268501910161407b565b01017f3a0000000000000000000000000000000000000000000000000000000000000083820152611fc282518093602060078501910161407b565b01017f3a0000000000000000000000000000000000000000000000000000000000000083820152611ffd82518093602060028501910161407b565b010103017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810185528461435f565b6120346143a0565b9260409b8c9b8c93845193612049868661435f565b600485526120e88360208701977f74727565000000000000000000000000000000000000000000000000000000008952519d8e809b7f7b22696e707574223a000000000000000000000000000000000000000000000060208301526020815194859301910161407b565b8901917f2c227369676e617475726573223a22000000000000000000000000000000000085840152518093603884019061407b565b0101917f222c22636861696e4964223a000000000000000000000000000000000000000085840152518093601b84019061407b565b01017f7d000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181018452018261435f565b61221d61217d614ef5565b91855196879485947f0199a22000000000000000000000000000000000000000000000000000000000865260606004870152606486019061409e565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152601083527f7369676e61747572655f656e636f6465000000000000000000000000000000006020840152016044860152019061409e565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af191821561241b57849261244e575b506122606020928251612258858261435f565b868152614cf3565b8473ffffffffffffffffffffffffffffffffffffffff845416737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610c91578351907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015612444579085939291612425575b50506123499073ffffffffffffffffffffffffffffffffffffffff60225416908785518098819582947f19822f7c00000000000000000000000000000000000000000000000000000000845260606004850152606484019061483d565b90602483015282604483015203925af192831561241b5784936123cc575b50917f617475726500000000000000000000000000000000000000000000000000000061041f937f53686f756c642072657475726e203020666f7220612076616c6964207369676e8151946123bd60608761435f565b60258652850152830152614dba565b92508183813d8311612414575b6123e3818361435f565b8101031261044a579151917f6174757265000000000000000000000000000000000000000000000000000000612367565b503d6123d9565b81513d86823e3d90fd5b81929350906124339161435f565b61244057829085386122ec565b8480fd5b84513d84823e3d90fd5b6124639192503d8086833e611520818361435f565b9038612245565b600692935090612483913d8091833e611520818361435f565b91908f611f2e565b6124a09194503d8085833e611520818361435f565b9238611eb3565b6124bc9192503d8085833e611520818361435f565b9038611e5c565b6124d89195503d8085833e611520818361435f565b9338611e05565b93505050506060813d606011612524575b816124fd6060938361435f565b81010312610c4e57805160ff81168103610bc4578360406020840151930151919238611d94565b3d91506124f0565b4690611c52565b50346101a05760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a0578060043567ffffffffffffffff8111611a54576125849036906004016140e1565b60243573ffffffffffffffffffffffffffffffffffffffff811680910361048b5773ffffffffffffffffffffffffffffffffffffffff60205416811415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561244057604051907f4c63e56200000000000000000000000000000000000000000000000000000000825260048201528481602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561280b578591612816575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561048b576040517fca669fa7000000000000000000000000000000000000000000000000000000008152816004820152848160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811561280b5785916127f6575b5050604051907f1d6ddbf40000000000000000000000000000000000000000000000000000000060208301526024820152602481526126e660448261435f565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561048b578361274191604051809381927ff28dceb300000000000000000000000000000000000000000000000000000000835260206004840152602483019061409e565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156104805784916127e1575b505073ffffffffffffffffffffffffffffffffffffffff6022541691823b1561048b576127d0928492836040518096819582947f9c145aed00000000000000000000000000000000000000000000000000000000845260206004850152602484019161466a565b03925af18015610bc8576114bd5750f35b816127eb9161435f565b61047c578238612769565b816128009161435f565b61048b5783386126a6565b6040513d87823e3d90fd5b816128209161435f565b61048b578338612632565b50346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a057602073ffffffffffffffffffffffffffffffffffffffff60225416604051908152f35b50346101a05760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a05760043567ffffffffffffffff8111610c91576128cd9036906004016140e1565b919073ffffffffffffffffffffffffffffffffffffffff601f5460081c1692604051617f1f8082019082821067ffffffffffffffff831117612b93578596839261293d92615c7a853973ffffffffffffffffffffffffffffffffffffffff90911681526000602082015260400190565b039084f0801561045657601f54602480546040517f32c02a1400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9485166004820152918201529160209183916044918391899160081c165af180156104805773ffffffffffffffffffffffffffffffffffffffff918591612b64575b50169173ffffffffffffffffffffffffffffffffffffffff60205416737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561244057604051907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152848160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811561280b578591612b4f575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561048b576040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd13d7835000000000000000000000000000000000000000000000000000000006004820152848160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811561280b578591612b3a575b5050823b1561048b576127d0928492836040518096819582947f9c145aed00000000000000000000000000000000000000000000000000000000845260206004850152602484019161466a565b81612b449161435f565b61048b578338612aed565b81612b599161435f565b61048b578338612a59565b612b86915060203d602011612b8c575b612b7e818361435f565b810190614537565b386129cb565b503d612b74565b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b50346101a05760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a05760043567ffffffffffffffff8111610c91576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8236030112610c915773ffffffffffffffffffffffffffffffffffffffff601f5460081c1660405190617f1f8083019083821067ffffffffffffffff831117612b935791612c9c918493615c7a853973ffffffffffffffffffffffffffffffffffffffff90911681526000602082015260400190565b039083f08015610bc857601f54602480546040517f32c02a1400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9485166004820152918201529160209183916044918391889160081c165af1908115610456578391612ec9575b5073ffffffffffffffffffffffffffffffffffffffff60205416737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610bc457604051907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152838160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561048057612eb5575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610c4e57826040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd13d7835000000000000000000000000000000000000000000000000000000006004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015610bc857612ea0575b5060209173ffffffffffffffffffffffffffffffffffffffff93612e8d926040519586809581947f19822f7c0000000000000000000000000000000000000000000000000000000083526044359060243590600401600485016146a9565b0393165af18015610bc857611a13575080f35b81612eaa9161435f565b610c4e578238612e2f565b83612ec29194929461435f565b9138612d9e565b612ee2915060203d602011612b8c57612b7e818361435f565b38612d15565b50346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a05760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b818110612f655761022c856102208187038261435f565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201612f4e565b50346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a05760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b81811061300e5761022c856102208187038261435f565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201612ff7565b50346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a057602073ffffffffffffffffffffffffffffffffffffffff60215416604051908152f35b50346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a057601e546130c7816145f3565b6130d4604051918261435f565b818152601e83526020810191837f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350845b8383106132225786858760405192839260208401906020855251809152604084019160408260051b8601019392815b8383106131405786860387f35b9193957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09086929496030183528551906020604082019273ffffffffffffffffffffffffffffffffffffffff81511683520151916040602083015282518091526060820190602060608260051b850101940192855b8281106131d957505050505060208060019297019301930190928695949293613133565b9091929394602080613215837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08760019603018952895161409e565b97019501939291016131b5565b60405161322e816142db565b73ffffffffffffffffffffffffffffffffffffffff8354168152600183018054613257816145f3565b91613265604051938461435f565b8183528a526020808b20908b9084015b83821061329b575050505060019282602092836002950152815201920192019190613104565b6001602081926132aa86614477565b815201930191019091613275565b50346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a057602073ffffffffffffffffffffffffffffffffffffffff60265416604051908152f35b50346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a05760405180916020601654928381520191601682527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289915b8181106133875761022c856102208187038261435f565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201613370565b50346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a0576020602554604051908152f35b905034610c9157817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610c91576102b68082019082821067ffffffffffffffff8311176116755790829161580f8339039082f0801561401e577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00601f549260081b16911617601f556040516101b58082019082821067ffffffffffffffff83111761167557908291615ac58339039082f0801561401e5773ffffffffffffffffffffffffffffffffffffffff16807fffffffffffffffffffffffff0000000000000000000000000000000000000000602054161760205573ffffffffffffffffffffffffffffffffffffffff601f5460081c1660405191617f1f918284019284841067ffffffffffffffff851117612b935791604093918593615c7a85398252602082015203019082f0801561401e5773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000602154161760215561359f607b90565b90604091818084516135b1868261435f565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152855161364e8161361c60208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528a6024840152606483019061409e565b876044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261435f565b51906a636f6e736f6c652e6c6f675afa50806025558251907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115613ff5579073ffffffffffffffffffffffffffffffffffffffff918391613fff575b5016807fffffffffffffffffffffffff000000000000000000000000000000000000000060265416176026558251907f56ca623e00000000000000000000000000000000000000000000000000000000825260048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115613ff5578291613fdb575b508251906137ed600260278460208101947f7369676e65723a000000000000000000000000000000000000000000000000008652613798815180926020868601910161407b565b81017f3a310000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe281018552018361435f565b8351907f6900a3ae000000000000000000000000000000000000000000000000000000008252600160048301528382602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215613fd1578492613fb5575b508451927f6900a3ae0000000000000000000000000000000000000000000000000000000084528460048501528484602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa938415613fab5792613a019287959287958694613f7e575b506139ba926010600293601b93613965602e8c51998a967f7b227468726573686f6c64223a2200000000000000000000000000000000000060208901526138f5815180926020868c01910161407b565b87017f222c22636865636b706f696e74223a220000000000000000000000000000000083820152613930825180936020603e8501910161407b565b0101917f222c2266726f6d223a22666c6174222c22636f6e74656e74223a22000000000085840152518093602b84019061407b565b01017f227d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe281018452018261435f565b613a656139c5614ef5565b91855197889485947f0199a22000000000000000000000000000000000000000000000000000000000865260606004870152606486019061409e565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152600a83527f636f6e6669675f6e6577000000000000000000000000000000000000000000006020840152016044860152019061409e565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1928315613f73578293613f57575b50825167ffffffffffffffff8111613f2a57613aaa602354614288565b601f8111613e89575b506020601f8211600114613dcc57839482939492613dc1575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916176023555b8082613bec613b0c6143a0565b613ba560016029865180947f7b22696e707574223a00000000000000000000000000000000000000000000006020830152613b50815180926020868601910161407b565b81017f7d000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181018452018261435f565b613c50613bb0614ef5565b91855195869485947f0199a22000000000000000000000000000000000000000000000000000000000865260606004870152606486019061409e565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152601083527f636f6e6669675f696d61676548617368000000000000000000000000000000006020840152016044860152019061409e565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115613d9b578391613da7575b5060208151918180820193849201010312610c4e576020613d2591518060245573ffffffffffffffffffffffffffffffffffffffff601f5460081c1673ffffffffffffffffffffffffffffffffffffffff602154168686518096819582947f32c02a14000000000000000000000000000000000000000000000000000000008452600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af1908115613d9b5773ffffffffffffffffffffffffffffffffffffffff92508391613d7c575b50167fffffffffffffffffffffffff0000000000000000000000000000000000000000602254161760225580f35b613d95915060203d602011612b8c57612b7e818361435f565b38613d4e565b505051903d90823e3d90fd5b613dbb91503d8085833e611520818361435f565b38613c78565b015190503880613acc565b602384527fd57b2b5166478fd4318d2acc6cc2c704584312bdd8781b32d5d06abda57f4230907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08316855b818110613e7157509583600195969710613e3a575b505050811b01602355613aff565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080613e2c565b9192602060018192868b015181550194019201613e17565b60238452601f820160051c7fd57b2b5166478fd4318d2acc6cc2c704584312bdd8781b32d5d06abda57f4230019060208310613f02575b601f0160051c7fd57b2b5166478fd4318d2acc6cc2c704584312bdd8781b32d5d06abda57f423001905b818110613ef75750613ab3565b848155600101613eea565b7fd57b2b5166478fd4318d2acc6cc2c704584312bdd8781b32d5d06abda57f42309150613ec0565b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b613f6c9193503d8084833e611520818361435f565b9138613a8d565b5051903d90823e3d90fd5b601b919450926010600293613f9f6139ba963d808c833e611520818361435f565b969350935050926138a5565b86513d87823e3d90fd5b613fca9192503d8086833e611520818361435f565b9038613844565b85513d86823e3d90fd5b613fef91503d8084833e611520818361435f565b38613751565b83513d84823e3d90fd5b614018915060203d602011612b8c57612b7e818361435f565b386136d0565b50604051903d90823e3d90fd5b602060408183019282815284518094520192019060005b81811061404f5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101614042565b60005b83811061408e5750506000910152565b818101518382015260200161407e565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936140da8151809281875287808801910161407b565b0116010190565b9181601f8401121561044a5782359167ffffffffffffffff831161044a576020838186019501011161044a57565b906020808351928381520192019060005b81811061412d5750505090565b82517fffffffff0000000000000000000000000000000000000000000000000000000016845260209384019390920191600101614120565b602081016020825282518091526040820191602060408360051b8301019401926000915b83831061419857505050505090565b90919293946020806141d4837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08660019603018752895161409e565b97019301930191939290614189565b602081016020825282518091526040820191602060408360051b8301019401926000915b83831061421657505050505090565b9091929394602080614279837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff81511684520151918185820152019061410f565b97019301930191939290614207565b90600182811c921680156142d1575b60208310146142a257565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f1691614297565b6040810190811067ffffffffffffffff8211176142f757604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff8211176142f757604052565b610120810190811067ffffffffffffffff8211176142f757604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176142f757604052565b60405190600082602354916143b483614288565b808352926001811690811561443a57506001146143da575b6143d89250038361435f565b565b506023600090815290917fd57b2b5166478fd4318d2acc6cc2c704584312bdd8781b32d5d06abda57f42305b81831061441e5750509060206143d8928201016143cc565b6020919350806001915483858901015201910190918492614406565b602092506143d89491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b8201016143cc565b906040519182600082549261448b84614288565b80845293600181169081156144f757506001146144b0575b506143d89250038361435f565b90506000929192526020600020906000915b8183106144db5750509060206143d892820101386144a3565b60209193508060019154838589010152019101909184926144c2565b602093506143d89592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b820101386144a3565b9081602091031261044a575173ffffffffffffffffffffffffffffffffffffffff8116810361044a5790565b60208183031261044a5780519067ffffffffffffffff821161044a570181601f8201121561044a576020815191019067ffffffffffffffff81116142f757604051926145d7601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0166020018561435f565b8184528183011161044a576145f091602084019061407b565b90565b67ffffffffffffffff81116142f75760051b60200190565b9081602091031261044a575190565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561044a57016020813591019167ffffffffffffffff821161044a57813603831361044a57565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b9392919360608152813573ffffffffffffffffffffffffffffffffffffffff811680910361044a576040926147ea916060840152602081013560808401526147b96147ad61474f6147126146ff8886018661461a565b61012060a08a015261018089019161466a565b61471f606086018661461a565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08984030160c08a015261466a565b608084013560e087015260a084013561010087015260c084013561012087015261477c60e085018561461a565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08884030161014089015261466a565b9161010081019061461a565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08584030161016086015261466a565b9460208201520152565b6040519061480182614342565b6060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b6145f09173ffffffffffffffffffffffffffffffffffffffff8251168152602082015160208201526101006148cb61489b6148896040860151610120604087015261012086019061409e565b6060860151858203606087015261409e565b6080850151608085015260a085015160a085015260c085015160c085015260e085015184820360e086015261409e565b9201519061010081840391015261409e565b90604051918281549182825260208201906000526020600020926000905b806007830110614af7576143d8945491818110614ac1575b818110614a8b575b818110614a55575b818110614a1f575b8181106149e9575b8181106149b3575b81811061497e575b10614951575b50038361435f565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260200138614949565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b168152019301614943565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b16815201930161493b565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b168152019301614933565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b16815201930161492b565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b168152019301614923565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b16815201930161491b565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b168152019301614913565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e08201520194019201859293916148fb565b805115614b915760200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8051821015614b915760209160051b010190565b60405190614be360408361435f565b601882527d1000000000000000000000000000000000000000000000000000000000006020830152565b60085460ff168015614c1c5790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115614ce757600091614cb5575b50151590565b90506020813d602011614cdf575b81614cd06020938361435f565b8101031261044a575138614caf565b3d9150614cc3565b6040513d6000823e3d90fd5b906060610100604051614d0581614342565b6000815260006020820152826040820152828082015260006080820152600060a0820152600060c08201528260e0820152015273ffffffffffffffffffffffffffffffffffffffff602254169160405192614d5f84614342565b835260006020840152604051614d7660208261435f565b60008152604084015260608301526000608083015261520860a0830152600060c0830152604051614da860208261435f565b6000815260e083015261010082015290565b90600091737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610c4e57614e2691839160405193849283927f88b44c85000000000000000000000000000000000000000000000000000000008452600484015284602484015260606044840152606483019061409e565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610bc857614e4d575050565b81614e579161435f565b50565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561044a57614ec49160009160405193849283927f88b44c8500000000000000000000000000000000000000000000000000000000845260048401526001602484015260606044840152606483019061409e565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015614ce757614eea5750565b60006143d89161435f565b6040517fc1978d1f00000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5345515f53444b5f5250435f4d494e5f504f52540000000000000000000000006044820152602081606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115614ce75760009161541d575b506040517fc1978d1f00000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5345515f53444b5f5250435f4d41585f504f52540000000000000000000000006044820152602081606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115614ce7576000916153eb575b5081811061538d577fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a654801561533b575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146152dd57600101807fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a6558282039182116152dd57600182018092116152dd57811561530c570681018091116152dd57604051907ff877cb1900000000000000000000000000000000000000000000000000000000825260206004830152601660248301527f5345515f53444b5f5250435f55524c5f505245464958000000000000000000006044830152600082606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215614ce7576000926152c0575b50604051917ff877cb1900000000000000000000000000000000000000000000000000000000835260206004840152601660248401527f5345515f53444b5f5250435f55524c5f535546464958000000000000000000006044840152600083606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa928315614ce7576000936152a3575b50604051917f6900a3ae0000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215614ce757600092615281575b5060206145f09293615254826040519685615231899751809285808b01910161407b565b86016152458251809385808501910161407b565b0101918281519485920161407b565b01037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261435f565b6145f0925061529c6020913d806000833e611520818361435f565b925061520d565b6152b99193503d806000833e611520818361435f565b91386151b4565b6152d69192503d806000833e611520818361435f565b903861512c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b506040516020810190366000833761538560208236810160008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261435f565b519020615033565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e76616c696420706f72742072616e676500000000000000000000000000006044820152fd5b906020823d602011615415575b816154056020938361435f565b810103126101a057505138615002565b3d91506153f8565b906020823d602011615447575b816154376020938361435f565b810103126101a057505138614f7b565b3d915061542a565b61010081015160405160208101818193602081519391019260005b8181106157df5750506154a49250037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261435f565b5190209060ff81511680156000146156b25750906040820151928351916154e36154cd846145f3565b936154db604051958661435f565b8085526145f3565b937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe060208501950136863760005b86518110156155e3578061552760019289614bc0565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e083015261010082015261010081526155cf6101208261435f565b5190206155dc8288614bc0565b5201615511565b5092919450926040519081602081019182945192909260005b8181106156995750506156369250037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261435f565b51902091608060608301519201516040519260208401947f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a2865260408501526060840152608083015260a082015260a0815261569360c08261435f565b51902090565b84518352602094850194869450909201916001016155fc565b6001810361570c575060a0015160208151910120906040519060208201927fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4668452604083015260608201526060815261569360808261435f565b6002810361575f575060c00151906040519060208201927f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e48452604083015260608201526060815261569360808261435f565b600381036157b2575060e00151906040519060208201927fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4668452604083015260608201526060815261569360808261435f565b7f048183200000000000000000000000000000000000000000000000000000000060005260045260246000fd5b845173ffffffffffffffffffffffffffffffffffffffff1683526020948501948694509092019160010161546a56fe6080806040523460155761029b908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c6332c02a141461002757600080fd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019f5760043573ffffffffffffffffffffffffffffffffffffffff811680820361019f5760243580916100eb6101176040519261008a846101d3565b602f84527f6041600e3d396021805130553df33d3d36153402601f57363d3d373d363d305460208501527f5af43d82803e903d91601f57fd5bf300000000000000000000000000000000006040850152604051928391602083019586610235565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826101f4565b519034f59173ffffffffffffffffffffffffffffffffffffffff8316156101595760405173ffffffffffffffffffffffffffffffffffffffff84168152602090f35b7f8caac8050000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff1660045260245260446000fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6060810190811067ffffffffffffffff8211176101ef57604052565b6101a4565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176101ef57604052565b9291909283519060005b8281106102525750019081526020019150565b806020809288010151818401520161023f56fea2646970667358221220be04d6b1fea99f8da63c42ae89d7f45bd43865e722cddb9cb70f1713011e9fe264736f6c634300081c00336080806040523460155761019a908161001b8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c908163b760faf9146100a2575063fc7e286d1461003557600080fd5b3461009d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009d5760043573ffffffffffffffffffffffffffffffffffffffff811680910361009d5760005260006020526020604060002054604051908152f35b600080fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009d576004359073ffffffffffffffffffffffffffffffffffffffff821680920361009d578160005260006020526040600020805491348301809311610135577f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c49260209255348152a2005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212206a17cc8cad12c58baf45f5e38f066c8f0529382a68e854861bf633ee59e344f464736f6c634300081c003361010080604052346101ae57604081617f1f803803809161002082856101b3565b8339810103126101ae5761003f6020610038836101d6565b92016101d6565b604051909190613dff808201906001600160401b0382118383101761018c57602091839161412083396001600160a01b03861681520301906000f09081156101a257604051606081016001600160401b0381118282101761018c576040908152602f82527f6041600e3d396021805130553df33d3d36153402601f57363d3d373d363d305460208301526e5af43d82803e903d91601f57fd5bf360881b82820152519060005b602f811061017757505030604f820152604f8152610104606f826101b3565b805160209091012060805260a0526001600160a01b031660c05260e052604051613f3590816101eb8239608051818181610c210152613b59015260a051818181610d6f0152613b2a015260c051818181610cd6015261119d015260e0518181816110600152818161120c0152611aa00152f35b806020809284010151828286010152016100e5565b634e487b7160e01b600052604160045260246000fd5b6040513d6000823e3d90fd5b600080fd5b601f909101601f19168101906001600160401b0382119082101761018c57604052565b51906001600160a01b03821682036101ae5756fe6080604052600436101561001e575b361561001c5761001c611c68565b005b60003560e01c806223de29146101ad578063025b22bc146101a857806313792a4a146101a3578063150b7a021461019e5780631626ba7e1461019957806319822f7c146101945780631a9b23371461018f5780631f6a1eb91461018a578063257671f51461018557806329561426146101805780632dd310001461017b5780634fcf3eca146101765780636ea44577146101715780638943ec021461016c5780638c3f55631461016757806392dcb3fc146101625780639c145aed1461015d5780639f69ef5414610158578063a65d69d414610153578063aaf10f421461014e578063ad55366b14610149578063b93ea7ad14610144578063bc197c811461013f578063f23a6e611461013a5763f727ef1c0361000e5761158b565b6114fe565b61142c565b6112cd565b611281565b611230565b6111c1565b611152565b61103a565b610fdc565b610fa0565b610f1c565b610eed565b610d93565b610d24565b610c44565b610beb565b610aff565b610a9c565b6109e7565b61095f565b6108d2565b6107d5565b6102fb565b61026f565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101d557565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101d557565b6044359073ffffffffffffffffffffffffffffffffffffffff821682036101d557565b359073ffffffffffffffffffffffffffffffffffffffff821682036101d557565b9181601f840112156101d55782359167ffffffffffffffff83116101d557602083818601950101116101d557565b346101d55760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576102a66101b2565b506102af6101da565b506102b86101fd565b5060843567ffffffffffffffff81116101d5576102d9903690600401610241565b505060a43567ffffffffffffffff81116101d55761001c903690600401610241565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55761032d6101b2565b30330361033d5761001c90611d31565b7fa19dbf00000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff8211176103b657604052565b61036b565b6040810190811067ffffffffffffffff8211176103b657604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176103b657604052565b6040519061042760e0836103d7565b565b60405190610427610120836103d7565b359060ff821682036101d557565b359081151582036101d557565b67ffffffffffffffff81116103b65760051b60200190565b67ffffffffffffffff81116103b657601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926104b28261046c565b916104c060405193846103d7565b8294818452818301116101d5578281602093846000960137010152565b9080601f830112156101d5578160206104f8933591016104a6565b90565b81601f820112156101d55780359061051282610454565b9261052060405194856103d7565b82845260208085019360051b830101918183116101d55760208101935b83851061054c57505050505090565b843567ffffffffffffffff81116101d557820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082860301126101d557610593610418565b916105a060208301610220565b83526040820135602084015260608201359267ffffffffffffffff84116101d55760e0836105d58860208098819801016104dd565b6040840152608081013560608401526105f060a08201610447565b608084015261060160c08201610447565b60a0840152013560c082015281520194019361053d565b9080601f830112156101d557813561062f81610454565b9261063d60405194856103d7565b81845260208085019260051b8201019283116101d557602001905b8282106106655750505090565b6020809161067284610220565b815201910190610658565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126101d55760043567ffffffffffffffff81116101d5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82850301126101d5576106ef610429565b906106fc81600401610439565b825261070a60248201610447565b6020830152604481013567ffffffffffffffff81116101d557846004610732928401016104fb565b6040830152606481013560608301526084810135608083015260a481013567ffffffffffffffff81116101d55784600461076e928401016104dd565b60a083015260c481013560c083015260e481013560e083015261010481013567ffffffffffffffff81116101d557600485916107ab930101610618565b610100820152916024359067ffffffffffffffff82116101d5576107d191600401610241565b9091565b346101d5576107e33661067d565b90916101008101926107fe6107f9855151611693565b6116b3565b9160005b85518051821015610865579061085f61083a61082083600195611731565b5173ffffffffffffffffffffffffffffffffffffffff1690565b6108448388611731565b9073ffffffffffffffffffffffffffffffffffffffff169052565b01610802565b505083838661087a3361084483515185611731565b52610886818484611d80565b50156108985760405160018152602090f35b6108ce906040519384937ff58cc8b50000000000000000000000000000000000000000000000000000000085526004850161198c565b0390fd5b346101d55760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576109096101b2565b506109126101da565b5060643567ffffffffffffffff81116101d557610933903690600401610241565b505060206040517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b346101d55760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760043560243567ffffffffffffffff81116101d5576020916109b76109bd923690600401610241565b916119b1565b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b346101d55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760043567ffffffffffffffff81116101d5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126101d557610a6a60209160243560443591600401611a86565b604051908152f35b7fffffffff000000000000000000000000000000000000000000000000000000008116036101d557565b346101d55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576020610ae1600435610adc81610a72565b611f65565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760043567ffffffffffffffff81116101d557610b49903690600401610241565b9060243567ffffffffffffffff81116101d557610b6d610b77913690600401610241565b9190935a9361209a565b91610b8b606084015160808501519061235e565b610b96828585611d80565b929015610ba8575061001c93506124b7565b836108ce86926040519384937fa2b6d61b0000000000000000000000000000000000000000000000000000000085526004850161198c565b60009103126101d557565b346101d55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346101d55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760043530330361033d578015610cfa576020817f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf855604051908152a161001c7f0000000000000000000000000000000000000000000000000000000000000000611d31565b7f4294d1270000000000000000000000000000000000000000000000000000000060005260046000fd5b346101d55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d557600435610dc981610a72565b30330361033d5773ffffffffffffffffffffffffffffffffffffffff610dee82611f65565b1615610e545760407fffffffff000000000000000000000000000000000000000000000000000000007f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19216610e45600082612d0f565b815190815260006020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f1c3812cc000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101d5576004359067ffffffffffffffff82116101d5576107d191600401610241565b610ef636610ea4565b9030330361033d57610f0c61001c925a9261209a565b90610f16826127db565b906124b7565b346101d55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d557610f536101b2565b5060443567ffffffffffffffff81116101d557610f74903690600401610241565b505060206040517f8943ec02000000000000000000000000000000000000000000000000000000008152f35b346101d55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576020610a6a60043561286f565b346101d55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760406110186004356128b5565b73ffffffffffffffffffffffffffffffffffffffff8351921682526020820152f35b346101d55761104836610ea4565b9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001680156111285733036110fa57303b156101d5576110ce9160009160405193849283927f6ea4457700000000000000000000000000000000000000000000000000000000845260048401611c27565b038183305af180156110f5576110e057005b806110ef600061001c936103d7565b80610be0565b6119fd565b7f1d6ddbf4000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7fd13d78350000000000000000000000000000000000000000000000000000000060005260046000fd5b346101d55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101d55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101d55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576020305473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346101d55760c061129d6000806112973661067d565b9161297d565b926112a9839293613ac6565b906040519586526020860152151560408501526060840152608083015260a0820152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760043561130381610a72565b61130b6101da565b9030330361033d5773ffffffffffffffffffffffffffffffffffffffff61133182611f65565b166113ab577f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19173ffffffffffffffffffffffffffffffffffffffff7fffffffff0000000000000000000000000000000000000000000000000000000060409316911661139e8183612d0f565b82519182526020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f5b4d6d6a000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b9181601f840112156101d55782359167ffffffffffffffff83116101d5576020808501948460051b0101116101d557565b346101d55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576114636101b2565b5061146c6101da565b5060443567ffffffffffffffff81116101d55761148d9036906004016113fb565b505060643567ffffffffffffffff81116101d5576114af9036906004016113fb565b505060843567ffffffffffffffff81116101d5576114d1903690600401610241565b50506040517fbc197c81000000000000000000000000000000000000000000000000000000008152602090f35b346101d55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576115356101b2565b5061153e6101da565b5060843567ffffffffffffffff81116101d55761155f903690600401610241565b505060206040517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b346101d55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576004356115c56101da565b604435916bffffffffffffffffffffffff83168093036101d55730330361033d578273ffffffffffffffffffffffffffffffffffffffff836116507febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1967fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606097881b161785612cca565b6040519384521660208301526040820152a1005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90600182018092116116a157565b611664565b919082018092116116a157565b906116bd82610454565b6116ca60405191826103d7565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06116f88294610454565b0190602036910137565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518210156117455760209160051b010190565b611702565b919082519283825260005b8481106117945750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201611755565b9080602083519182815201916020808360051b8301019401926000915b8383106117d557505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080611848604085015160e0604086015260e085019061174a565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152970193019301919392906117c6565b906020808351928381520192019060005b81811061189d5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101611890565b805160ff1682526104f891602082810151151590820152610100611927611901604085015161012060408601526101208501906117a9565b606085015160608501526080850151608085015260a085015184820360a086015261174a565b9260c081015160c084015260e081015160e084015201519061010081840391015261187f565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b916119a36104f894926040855260408501906118c9565b92602081850391015261194d565b906119ce92916119bf611f0a565b906003825260e0820152611d80565b50156119f8577f1626ba7e0000000000000000000000000000000000000000000000000000000090565b600090565b6040513d6000823e3d90fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101d5570180359067ffffffffffffffff82116101d5576020019181360383136101d557565b908160209103126101d557516104f881610a72565b6040906104f894928152816020820152019161194d565b91909173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016918215611128578233036110fa5780611bb8575b506020915080610100611ae8920190611a09565b92611b2060405194859384937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611a6f565b0381305afa9081156110f5577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091611b89575b501603611b8457600090565b600190565b611bab915060203d602011611bb1575b611ba381836103d7565b810190611a5a565b38611b78565b503d611b99565b823b156101d5576040517fb760faf900000000000000000000000000000000000000000000000000000000815230600482015292600091849160249183915af19081156110f557602092611ae892611c12575b5090611ad4565b806110ef6000611c21936103d7565b38611c0b565b9160206104f893818152019161194d565b3d15611c63573d90611c498261046c565b91611c5760405193846103d7565b82523d6000602084013e565b606090565b600436108015611c755750565b611cab906000357fffffffff00000000000000000000000000000000000000000000000000000000811691611cfd575b50611f65565b73ffffffffffffffffffffffffffffffffffffffff8116611cc95750565b60008091604051368382378036810184815203915af4611ce7611c38565b9015611cf557602081519101f35b602081519101fd5b7fffffffff000000000000000000000000000000000000000000000000000000008092503660040360031b1b161638611ca5565b60207f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca039180305573ffffffffffffffffffffffffffffffffffffffff60405191168152a1565b90156117455790565b91907f800000000000000000000000000000000000000000000000000000000000000080611dd7611db18585611d77565b357fff000000000000000000000000000000000000000000000000000000000000001690565b1614611e36576000918291611deb9461297d565b905091909192808210611e06575050611e0390613ac6565b91565b7ffd41fcba0000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b5050611e41906127db565b90611e4b826128b5565b42811115611ed8575073ffffffffffffffffffffffffffffffffffffffff81168015159081611ecd575b50611e81575060019190565b7f8945c3130000000000000000000000000000000000000000000000000000000060005260048390523360245273ffffffffffffffffffffffffffffffffffffffff1660445260646000fd5b905033141538611e75565b7ff95b6ab700000000000000000000000000000000000000000000000000000000600052600484905260245260446000fd5b60405190610120820182811067ffffffffffffffff8211176103b6576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b73ffffffffffffffffffffffffffffffffffffffff906040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a120845216604082015260408152611fdc6060826103d7565b519020541690565b90611fee82610454565b611ffb60405191826103d7565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06120298294610454565b019060005b82811061203a57505050565b6020906040516120498161039a565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c08201528282850101520161202e565b909392938483116101d55784116101d5578101920390565b9190916120a5611f0a565b6000815292600190823560f81c827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818316016123475750600060608701525b60076120f460ff831660011c90565b16806122f6575b506010818116036122c157506001925b61211484611fe4565b92604087019384526000905b85821061212f57505050505050565b8281013560f81c9060010190918160018085160361229f575061217330612157838951611731565b519073ffffffffffffffffffffffffffffffffffffffff169052565b60028084161461227f575b600480841614612231575b6008808416146121fe575b6121e76121e160c0856121c08a60806121b78860108060019c9d16149351611731565b51019015159052565b6121d78a60a06121b7886020808716149351611731565b1660061c60031690565b60ff1690565b60c06121f4838951611731565b5101520190612120565b6001916121e7906121e19060c090878101359060200196906060612223878d51611731565b510152959450505050612194565b90612279908481013560e81c9060030161227261225961225184846116a6565b838a8a612082565b91906040612268888d51611731565b51019236916104a6565b90526116a6565b90612189565b90838101359060200191906020612297838951611731565b51015261217e565b6122bc92508481013560601c906014019290612157838951611731565b612173565b6020908116036122e35761ffff918381013560f01c906002015b92169261210b565b60ff918381013560f81c906001016122db565b61233a919385929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b92906080870152386120fb565b80850135606090811c9088015260140192506120e5565b906123688261286f565b8181036123ee57509060017f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f8819201908160405160208101907f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8252836040820152604081526123d86060826103d7565b51902055604080519182526020820192909252a1565b917f9b6514f40000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b61243a604092959493956060835260608301906118c9565b9460208201520152565b926104f896959260c09592855260208501526040840152606083015260808201528160a0820152019061174a565b6104f8939260609282526020820152816040820152019061174a565b6124a46104f894926060835260608301906118c9565b926020820152604081840391015261174a565b916000604082019384515190825b8281106124d6575b50505050505050565b6124e1818851611731565b51936124f060a0860151151590565b806127d3575b61279357506000936060810151801580158061278a575b6127525784906125206080850151151590565b1561270c576125cb92612547855173ffffffffffffffffffffffffffffffffffffffff1690565b911561270657505a905b6125c68b61259a60608d01516040890151908c8b604051998a967f4c4e814c00000000000000000000000000000000000000000000000000000000602089015260248801612444565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018552846103d7565b612c9d565b1561260e575b506040805187815260208101839052600192917f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a91a15b016124c5565b60c0018051156126bd57600181511461267e575160021461262f57386125d1565b9493505050507fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b925061266f612663612caf565b60405193849384612472565b0390a1388080808080806124cd565b50846108ce61268b612caf565b6040519384937f7f6b0bb10000000000000000000000000000000000000000000000000000000085526004850161248e565b509250600180937f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d6126fe6126f0612caf565b604051918291858c84612472565b0390a1612608565b90612551565b835161274793925073ffffffffffffffffffffffffffffffffffffffff169160208501519160001461274c57505a905b604085015192612c8b565b6125cb565b9061273c565b83886108ce5a6040519384937f2139527400000000000000000000000000000000000000000000000000000000855260048501612422565b50815a1061250d565b6040805188815260208101849052919550600192917f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b91819081016126fe565b5080156124f6565b61283d6128696127fb6127f5602085015115153090612d4e565b93612e49565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826103d7565b51902090565b60405160208101917f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83526040820152604081526128ae6060826103d7565b5190205490565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e8683526040820152604081526128f46060826103d7565b51902054906bffffffffffffffffffffffff8260601c921690565b6040519061291c826103bb565b60006020838281520152565b908160409103126101d557602060405191612942836103bb565b805183520151602082015290565b60409073ffffffffffffffffffffffffffffffffffffffff6104f89493168152816020820152019061174a565b909491939291853560f81c6001909381908761299761290f565b9360408089161480612c6d575b612b70575b505050600180861614612b4a5760028581161460208501526007600286901c1688820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101908096918196602016612a199060051c90565b612a2290611693565b8a820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101959098899a81612a6e846127db565b988993612a7a93612082565b91612a8493613260565b9098612a9891600052602052604060002090565b90612aab91600052602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff16612ad491600052602052604060002090565b94815190868215159283612b3f575b505081612b30575b50612af35750565b6040517fccbb534f000000000000000000000000000000000000000000000000000000008152815160048201526020909101516024820152604490fd5b90506020820151101538612aeb565b141591508638612ae3565b86612b659792949550612b5d9398612082565b93909261303e565b919394909293929190565b8a81013560601c985060140192509087908a90849015612b94575b508291506129a9565b60038101955073ffffffffffffffffffffffffffffffffffffffff945081013560e81c92604092612c17929091612be291612bdb918990612bd589836116a6565b92612082565b36916104a6565b83519586809481937fccce3bc80000000000000000000000000000000000000000000000000000000083523060048401612950565b0392165afa80156110f557612c3592600091612c3e575b50926116a6565b86388981612b8b565b612c60915060403d604011612c66575b612c5881836103d7565b810190612928565b38612c2e565b503d612c4e565b5073ffffffffffffffffffffffffffffffffffffffff8916156129a4565b9160009391849360208451940192f190565b9160009291839260208351930191f490565b3d90604051916020818401016040528083526000602084013e565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e868352604082015260408152612d096060826103d7565b51902055565b60405160208101917fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1208352604082015260408152612d096060826103d7565b15612dfe576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a0815261286960c0826103d7565b4690612d57565b805160209091019060005b818110612e1d5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101612e10565b610100810151604051612e648161283d602082018095612e05565b51902090612e73815160ff1690565b60ff811680612eec57505090612869612e8f6040840151613bc3565b9261283d60806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b60018103612f4a57505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46693810193845290810191909152606081019290925290612869816080810161283d565b60028103612fa057505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e460208201908152918101929092526060820192909252612869816080810161283d565b600303612ff4575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46660208201908152918101929092526060820192909252612869816080810161283d565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b9061243a906040939695949660608452606084019161194d565b919492909260009560009560009560009560009561305a611f0a565b60028152937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9460005b8281106130b1575050505050505080511515806130a3575b612af35750565b50602081015184111561309c565b600381019d50959b50939950919750929091906130d5908b9085013560e81c6116a6565b958a6000848903613219575089915b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c036131e9575090600161311e89613125948789612082565b908b61297d565b9c939c9b929b9a919a99909a9b9d8e9d9e8f905b106131a35750928b88511461319a575b808b101561316857508a60c08501528992959295949194939093613084565b7f37daf62b0000000000000000000000000000000000000000000000000000000060005260048b905260245260446000fd5b60008852613149565b8d8f6108ce6131b485858c8e612082565b9390926040519485947fb006aba000000000000000000000000000000000000000000000000000000000865260048601613024565b9798999a9160016131ff8b61320694888a612082565b908661297d565b50929d919c909b929a9092918e8e613139565b916130e4565b73ffffffffffffffffffffffffffffffffffffffff6104f895936060938352166020820152816040820152019161194d565b908160209103126101d5575190565b9391909360009460009460005b81811061327b575050505050565b8481013560f881901c9860019092019788979692909160fc1c988915613a5f575060018914613a1f5760028914613862576003891461383357600489146137b2576006891461371257600589146136c457600789146135fd57600889146135a7576009891461347e57600a891461331b577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b9091929394959697506003891697881561346d575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691019081019081613393918787612082565b6040517f898bd921000000000000000000000000000000000000000000000000000000008152939184916133cb918a60048501611a6f565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa9182156110f55761340e9360009361343a575b5060ff909a168091019a613e8f565b908015613434579061342891600052602052604060002090565b955b939291909361326d565b50613428565b60ff91935061345f9060203d8111613466575b61345781836103d7565b810190613251565b92906133ff565b503d61344d565b8084013560f81c9850600101613330565b90919293949596975060038916978815613596575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190810190816134f6918787612082565b6040517f13792a4a0000000000000000000000000000000000000000000000000000000081529391849161352e918b6004850161198c565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa9182156110f5576135709360009361343a575060ff909a168091019a613e8f565b908015613590579061358a91600052602052604060002090565b9561342a565b5061358a565b8084013560f81c9850600101613493565b9850602087019750949593949293919290918201356135c586613e36565b81146135d5575b61357090613e50565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506135cc565b975090919293949597600f169687156136b2575b602060006136236136909a9b86613cfe565b9c9092918a6040516136668161283d8a82019485603c917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008252601c8201520190565b51902092604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa156110f5576135709060ff6000519a1680910199613d41565b600189019883013560f81c9750613611565b9850602087019750949593949293919290918201358085146136ea575b61357090613df7565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506136e1565b989091929394959662ffffff98506137346121e1600c8416603f9060021c1690565b91821561379e575b600316801561378d575b90819061377190613769908781013560e81c906003019c168c01809c8989612082565b90898b613260565b911115613784575b906135709291613dac565b99820199613779565b50600281019084013560f01c613746565b8482013560f81c925060019091019061373c565b975097613808613815929394959697600f61381d93169085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290830180938686612082565b908688613260565b9061358a92980198600052602052604060002090565b985096509394929391929091908082013590602001968015613590579061358a91600052602052604060002090565b90919293949596975060038916978815613a0e575b8084013560601c996138d691601401906138969060021c6003166121e1565b9085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9081019061393a60208c6138ec85858b8b612082565b919073ffffffffffffffffffffffffffffffffffffffff8c604051968795869485937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611a6f565b0392165afa9081156110f5577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000916000916139f0575b5016036139ac57509060ff61357092991680910199613d41565b6108ce6139bd8c9389938989612082565b906040519485947fb2fed7ae0000000000000000000000000000000000000000000000000000000086526004860161321f565b613a08915060203d8111611bb157611ba381836103d7565b38613992565b8381013560f81c9850600101613877565b98600f91929394959697985016968715613a4e575b60148101976135709160ff9091169084013560601c613d41565b8281013560f81c9750600101613a34565b98509091929394959698600f16978815613ab1575b5060206000613a876136909a9b86613cfe565b9c90916040519384938c859094939260ff6060936080840197845216602083015260408201520152565b60018101995083013560f81c97506020613a74565b73ffffffffffffffffffffffffffffffffffffffff9060405160208101917fff0000000000000000000000000000000000000000000000000000000000000083527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060601b16602183015260358201527f0000000000000000000000000000000000000000000000000000000000000000605582015260558152613b8c6075826103d7565b51902016301490565b805160209091019060005b818110613bad5750505090565b8251845260209384019390920191600101613ba0565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0613c09613bf383610454565b92613c0160405194856103d7565b808452610454565b0136602083013760005b8351811015613ce55780613c2960019286611731565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152613cd1610120826103d7565b519020613cde8285611731565b5201613c13565b509091506040516128698161283d602082018095613b95565b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff81116116a15791565b90604051907fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208301937f53657175656e6365207369676e65723a0a000000000000000000000000000000855260601b1660318301526045820152604581526128696065826103d7565b916040519160208301937f53657175656e6365206e657374656420636f6e6669673a0a00000000000000008552603884015260588301526078820152607881526128696098826103d7565b60405160208101917f53657175656e636520737461746963206469676573743a0a000000000000000083526038820152603881526128696058826103d7565b61283d6128696127fb6127f5600060208601511515612d4e565b60405160208101917f53657175656e636520616e792061646472657373207375626469676573743a0a83526040820152604081526128696060826103d7565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e63652073617069656e7420636f6e6669673a0a00000000000000865260601b166039840152604d830152606d820152606d8152612869608d826103d756fea2646970667358221220825b940dd691f79f4782ba8dca1eaa7ff741f07679c4faf28637d8117499069a64736f6c634300081c003360a034607457601f613dff38819003918201601f19168301916001600160401b03831184841017607957808492602094604052833981010312607457516001600160a01b0381168103607457608052604051613d6f90816100908239608051818181610fe90152818161112601526119ba0152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6080604052600436101561001e575b361561001c5761001c611b82565b005b60003560e01c806223de291461018d578063025b22bc1461018857806313792a4a14610183578063150b7a021461017e5780631626ba7e1461017957806319822f7c146101745780631a9b23371461016f5780631f6a1eb91461016a57806329561426146101655780634fcf3eca1461016057806351605d801461015b5780636ea44577146101565780638943ec02146101515780638c3f55631461014c57806392dcb3fc146101475780639c145aed14610142578063a65d69d41461013d578063aaf10f4214610138578063ad55366b14610133578063b93ea7ad1461012e578063bc197c8114610129578063f23a6e61146101245763f727ef1c0361000e576114a5565b611418565b611346565b6111e7565b61119b565b61114a565b6110db565b610fc3565b610f65565b610f29565b610ea5565b610e76565b610dd2565b610cb6565b610bfd565b610b1c565b610ab9565b610a04565b61097c565b6108ef565b6107f2565b6102db565b61024f565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101b557565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101b557565b6044359073ffffffffffffffffffffffffffffffffffffffff821682036101b557565b359073ffffffffffffffffffffffffffffffffffffffff821682036101b557565b9181601f840112156101b55782359167ffffffffffffffff83116101b557602083818601950101116101b557565b346101b55760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557610286610192565b5061028f6101ba565b506102986101dd565b5060843567ffffffffffffffff81116101b5576102b9903690600401610221565b505060a43567ffffffffffffffff81116101b55761001c903690600401610221565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55761030d610192565b30330361035a576020817f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca0392305573ffffffffffffffffffffffffffffffffffffffff60405191168152a1005b7fa19dbf00000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff8211176103d357604052565b610388565b6040810190811067ffffffffffffffff8211176103d357604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176103d357604052565b6040519061044460e0836103f4565b565b60405190610444610120836103f4565b359060ff821682036101b557565b359081151582036101b557565b67ffffffffffffffff81116103d35760051b60200190565b67ffffffffffffffff81116103d357601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926104cf82610489565b916104dd60405193846103f4565b8294818452818301116101b5578281602093846000960137010152565b9080601f830112156101b557816020610515933591016104c3565b90565b81601f820112156101b55780359061052f82610471565b9261053d60405194856103f4565b82845260208085019360051b830101918183116101b55760208101935b83851061056957505050505090565b843567ffffffffffffffff81116101b557820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082860301126101b5576105b0610435565b916105bd60208301610200565b83526040820135602084015260608201359267ffffffffffffffff84116101b55760e0836105f28860208098819801016104fa565b60408401526080810135606084015261060d60a08201610464565b608084015261061e60c08201610464565b60a0840152013560c082015281520194019361055a565b9080601f830112156101b557813561064c81610471565b9261065a60405194856103f4565b81845260208085019260051b8201019283116101b557602001905b8282106106825750505090565b6020809161068f84610200565b815201910190610675565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126101b55760043567ffffffffffffffff81116101b5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82850301126101b55761070c610446565b9061071981600401610456565b825261072760248201610464565b6020830152604481013567ffffffffffffffff81116101b55784600461074f92840101610518565b6040830152606481013560608301526084810135608083015260a481013567ffffffffffffffff81116101b55784600461078b928401016104fa565b60a083015260c481013560c083015260e481013560e083015261010481013567ffffffffffffffff81116101b557600485916107c8930101610635565b610100820152916024359067ffffffffffffffff82116101b5576107ee91600401610221565b9091565b346101b5576108003661069a565b909161010081019261081b6108168551516115ad565b6115cd565b9160005b85518051821015610882579061087c61085761083d8360019561164b565b5173ffffffffffffffffffffffffffffffffffffffff1690565b610861838861164b565b9073ffffffffffffffffffffffffffffffffffffffff169052565b0161081f565b5050838386610897336108618351518561164b565b526108a3818484611c54565b50156108b55760405160018152602090f35b6108eb906040519384937ff58cc8b5000000000000000000000000000000000000000000000000000000008552600485016118a6565b0390fd5b346101b55760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557610926610192565b5061092f6101ba565b5060643567ffffffffffffffff81116101b557610950903690600401610221565b505060206040517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b346101b55760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043560243567ffffffffffffffff81116101b5576020916109d46109da923690600401610221565b916118cb565b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b346101b55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043567ffffffffffffffff81116101b5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126101b557610a87602091602435604435916004016119a0565b604051908152f35b7fffffffff000000000000000000000000000000000000000000000000000000008116036101b557565b346101b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576020610afe600435610af981610a8f565b611e39565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043567ffffffffffffffff81116101b557610b66903690600401610221565b9060243567ffffffffffffffff81116101b557610b8a610b94913690600401610221565b9190935a93611f6e565b91610ba86060840151608085015190612232565b610bb3828585611c54565b929015610bc5575061001c935061238b565b836108eb86926040519384937fa2b6d61b000000000000000000000000000000000000000000000000000000008552600485016118a6565b346101b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043530330361035a578015610c8c576020817f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf855604051908152a1005b7f4294d1270000000000000000000000000000000000000000000000000000000060005260046000fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557600435610cec81610a8f565b30330361035a5773ffffffffffffffffffffffffffffffffffffffff610d1182611e39565b1615610d775760407fffffffff000000000000000000000000000000000000000000000000000000007f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19216610d68600082612be3565b815190815260006020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f1c3812cc000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b60009103126101b557565b346101b55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760207fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf854604051908152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101b5576004359067ffffffffffffffff82116101b5576107ee91600401610221565b610e7f36610e2d565b9030330361035a57610e9561001c925a92611f6e565b90610e9f826126af565b9061238b565b346101b55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557610edc610192565b5060443567ffffffffffffffff81116101b557610efd903690600401610221565b505060206040517f8943ec02000000000000000000000000000000000000000000000000000000008152f35b346101b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576020610a87600435612743565b346101b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576040610fa1600435612789565b73ffffffffffffffffffffffffffffffffffffffff8351921682526020820152f35b346101b557610fd136610e2d565b9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001680156110b157330361108357303b156101b5576110579160009160405193849283927f6ea4457700000000000000000000000000000000000000000000000000000000845260048401611b41565b038183305af1801561107e5761106957005b80611078600061001c936103f4565b80610dc7565b611917565b7f1d6ddbf4000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7fd13d78350000000000000000000000000000000000000000000000000000000060005260046000fd5b346101b55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101b55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576020305473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346101b55760c06111b76000806111b13661069a565b91612851565b926111c383929361399a565b906040519586526020860152151560408501526060840152608083015260a0820152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043561121d81610a8f565b6112256101ba565b9030330361035a5773ffffffffffffffffffffffffffffffffffffffff61124b82611e39565b166112c5577f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19173ffffffffffffffffffffffffffffffffffffffff7fffffffff000000000000000000000000000000000000000000000000000000006040931691166112b88183612be3565b82519182526020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f5b4d6d6a000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b9181601f840112156101b55782359167ffffffffffffffff83116101b5576020808501948460051b0101116101b557565b346101b55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55761137d610192565b506113866101ba565b5060443567ffffffffffffffff81116101b5576113a7903690600401611315565b505060643567ffffffffffffffff81116101b5576113c9903690600401611315565b505060843567ffffffffffffffff81116101b5576113eb903690600401610221565b50506040517fbc197c81000000000000000000000000000000000000000000000000000000008152602090f35b346101b55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55761144f610192565b506114586101ba565b5060843567ffffffffffffffff81116101b557611479903690600401610221565b505060206040517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b346101b55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576004356114df6101ba565b604435916bffffffffffffffffffffffff83168093036101b55730330361035a578273ffffffffffffffffffffffffffffffffffffffff8361156a7febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1967fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606097881b161785612b9e565b6040519384521660208301526040820152a1005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90600182018092116115bb57565b61157e565b919082018092116115bb57565b906115d782610471565b6115e460405191826103f4565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06116128294610471565b0190602036910137565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805182101561165f5760209160051b010190565b61161c565b919082519283825260005b8481106116ae5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b8060208092840101518282860101520161166f565b9080602083519182815201916020808360051b8301019401926000915b8383106116ef57505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080611762604085015160e0604086015260e0850190611664565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152970193019301919392906116e0565b906020808351928381520192019060005b8181106117b75750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016117aa565b805160ff1682526105159160208281015115159082015261010061184161181b604085015161012060408601526101208501906116c3565b606085015160608501526080850151608085015260a085015184820360a0860152611664565b9260c081015160c084015260e081015160e0840152015190610100818403910152611799565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b916118bd61051594926040855260408501906117e3565b926020818503910152611867565b906118e892916118d9611dde565b906003825260e0820152611c54565b5015611912577f1626ba7e0000000000000000000000000000000000000000000000000000000090565b600090565b6040513d6000823e3d90fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101b5570180359067ffffffffffffffff82116101b5576020019181360383136101b557565b908160209103126101b5575161051581610a8f565b604090610515949281528160208201520191611867565b91909173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169182156110b1578233036110835780611ad2575b506020915080610100611a02920190611923565b92611a3a60405194859384937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611989565b0381305afa90811561107e577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091611aa3575b501603611a9e57600090565b600190565b611ac5915060203d602011611acb575b611abd81836103f4565b810190611974565b38611a92565b503d611ab3565b823b156101b5576040517fb760faf900000000000000000000000000000000000000000000000000000000815230600482015292600091849160249183915af190811561107e57602092611a0292611b2c575b50906119ee565b806110786000611b3b936103f4565b38611b25565b916020610515938181520191611867565b3d15611b7d573d90611b6382610489565b91611b7160405193846103f4565b82523d6000602084013e565b606090565b600436108015611b8f5750565b611bc5906000357fffffffff00000000000000000000000000000000000000000000000000000000811691611c17575b50611e39565b73ffffffffffffffffffffffffffffffffffffffff8116611be35750565b60008091604051368382378036810184815203915af4611c01611b52565b9015611c0f57602081519101f35b602081519101fd5b7fffffffff000000000000000000000000000000000000000000000000000000008092503660040360031b1b161638611bbf565b901561165f5790565b91907f800000000000000000000000000000000000000000000000000000000000000080611cab611c858585611c4b565b357fff000000000000000000000000000000000000000000000000000000000000001690565b1614611d0a576000918291611cbf94612851565b905091909192808210611cda575050611cd79061399a565b91565b7ffd41fcba0000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b5050611d15906126af565b90611d1f82612789565b42811115611dac575073ffffffffffffffffffffffffffffffffffffffff81168015159081611da1575b50611d55575060019190565b7f8945c3130000000000000000000000000000000000000000000000000000000060005260048390523360245273ffffffffffffffffffffffffffffffffffffffff1660445260646000fd5b905033141538611d49565b7ff95b6ab700000000000000000000000000000000000000000000000000000000600052600484905260245260446000fd5b60405190610120820182811067ffffffffffffffff8211176103d3576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b73ffffffffffffffffffffffffffffffffffffffff906040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a120845216604082015260408152611eb06060826103f4565b519020541690565b90611ec282610471565b611ecf60405191826103f4565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611efd8294610471565b019060005b828110611f0e57505050565b602090604051611f1d816103b7565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c082015282828501015201611f02565b909392938483116101b55784116101b5578101920390565b919091611f79611dde565b6000815292600190823560f81c827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8183160161221b5750600060608701525b6007611fc860ff831660011c90565b16806121ca575b5060108181160361219557506001925b611fe884611eb8565b92604087019384526000905b85821061200357505050505050565b8281013560f81c9060010190918160018085160361217357506120473061202b83895161164b565b519073ffffffffffffffffffffffffffffffffffffffff169052565b600280841614612153575b600480841614612105575b6008808416146120d2575b6120bb6120b560c0856120948a608061208b8860108060019c9d1614935161164b565b51019015159052565b6120ab8a60a061208b88602080871614935161164b565b1660061c60031690565b60ff1690565b60c06120c883895161164b565b5101520190611ff4565b6001916120bb906120b59060c0908781013590602001969060606120f7878d5161164b565b510152959450505050612068565b9061214d908481013560e81c9060030161214661212d61212584846115c0565b838a8a611f56565b9190604061213c888d5161164b565b51019236916104c3565b90526115c0565b9061205d565b9083810135906020019190602061216b83895161164b565b510152612052565b61219092508481013560601c90601401929061202b83895161164b565b612047565b6020908116036121b75761ffff918381013560f01c906002015b921692611fdf565b60ff918381013560f81c906001016121af565b61220e919385929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290608087015238611fcf565b80850135606090811c908801526014019250611fb9565b9061223c82612743565b8181036122c257509060017f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f8819201908160405160208101907f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8252836040820152604081526122ac6060826103f4565b51902055604080519182526020820192909252a1565b917f9b6514f40000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b61230e604092959493956060835260608301906117e3565b9460208201520152565b9261051596959260c09592855260208501526040840152606083015260808201528160a08201520190611664565b6105159392606092825260208201528160408201520190611664565b61237861051594926060835260608301906117e3565b9260208201526040818403910152611664565b916000604082019384515190825b8281106123aa575b50505050505050565b6123b581885161164b565b51936123c460a0860151151590565b806126a7575b61266757506000936060810151801580158061265e575b6126265784906123f46080850151151590565b156125e05761249f9261241b855173ffffffffffffffffffffffffffffffffffffffff1690565b91156125da57505a905b61249a8b61246e60608d01516040890151908c8b604051998a967f4c4e814c00000000000000000000000000000000000000000000000000000000602089015260248801612318565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018552846103f4565b612b71565b156124e2575b506040805187815260208101839052600192917f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a91a15b01612399565b60c001805115612591576001815114612552575160021461250357386124a5565b9493505050507fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b9250612543612537612b83565b60405193849384612346565b0390a1388080808080806123a1565b50846108eb61255f612b83565b6040519384937f7f6b0bb100000000000000000000000000000000000000000000000000000000855260048501612362565b509250600180937f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d6125d26125c4612b83565b604051918291858c84612346565b0390a16124dc565b90612425565b835161261b93925073ffffffffffffffffffffffffffffffffffffffff169160208501519160001461262057505a905b604085015192612b5f565b61249f565b90612610565b83886108eb5a6040519384937f21395274000000000000000000000000000000000000000000000000000000008552600485016122f6565b50815a106123e1565b6040805188815260208101849052919550600192917f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b91819081016125d2565b5080156123ca565b61271161273d6126cf6126c9602085015115153090612c22565b93612d1d565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826103f4565b51902090565b60405160208101917f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83526040820152604081526127826060826103f4565b5190205490565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e8683526040820152604081526127c86060826103f4565b51902054906bffffffffffffffffffffffff8260601c921690565b604051906127f0826103d8565b60006020838281520152565b908160409103126101b557602060405191612816836103d8565b805183520151602082015290565b60409073ffffffffffffffffffffffffffffffffffffffff61051594931681528160208201520190611664565b909491939291853560f81c6001909381908761286b6127e3565b9360408089161480612b41575b612a44575b505050600180861614612a1e5760028581161460208501526007600286901c1688820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691019080969181966020166128ed9060051c90565b6128f6906115ad565b8a820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101959098899a81612942846126af565b98899361294e93611f56565b9161295893613134565b909861296c91600052602052604060002090565b9061297f91600052602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff166129a891600052602052604060002090565b94815190868215159283612a13575b505081612a04575b506129c75750565b6040517fccbb534f000000000000000000000000000000000000000000000000000000008152815160048201526020909101516024820152604490fd5b905060208201511015386129bf565b1415915086386129b7565b86612a399792949550612a319398611f56565b939092612f12565b919394909293929190565b8a81013560601c985060140192509087908a90849015612a68575b5082915061287d565b60038101955073ffffffffffffffffffffffffffffffffffffffff945081013560e81c92604092612aeb929091612ab691612aaf918990612aa989836115c0565b92611f56565b36916104c3565b83519586809481937fccce3bc80000000000000000000000000000000000000000000000000000000083523060048401612824565b0392165afa801561107e57612b0992600091612b12575b50926115c0565b86388981612a5f565b612b34915060403d604011612b3a575b612b2c81836103f4565b8101906127fc565b38612b02565b503d612b22565b5073ffffffffffffffffffffffffffffffffffffffff891615612878565b9160009391849360208451940192f190565b9160009291839260208351930191f490565b3d90604051916020818401016040528083526000602084013e565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e868352604082015260408152612bdd6060826103f4565b51902055565b60405160208101917fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1208352604082015260408152612bdd6060826103f4565b15612cd2576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a0815261273d60c0826103f4565b4690612c2b565b805160209091019060005b818110612cf15750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101612ce4565b610100810151604051612d3881612711602082018095612cd9565b51902090612d47815160ff1690565b60ff811680612dc05750509061273d612d6360408401516139fd565b9261271160806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b60018103612e1e57505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4669381019384529081019190915260608101929092529061273d8160808101612711565b60028103612e7457505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e46020820190815291810192909252606082019290925261273d8160808101612711565b600303612ec8575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4666020820190815291810192909252606082019290925261273d8160808101612711565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b9061230e9060409396959496606084526060840191611867565b9194929092600095600095600095600095600095612f2e611dde565b60028152937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9460005b828110612f8557505050505050508051151580612f77575b6129c75750565b506020810151841115612f70565b600381019d50959b5093995091975092909190612fa9908b9085013560e81c6115c0565b958a60008489036130ed575089915b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c036130bd5750906001612ff289612ff9948789611f56565b908b612851565b9c939c9b929b9a919a99909a9b9d8e9d9e8f905b106130775750928b88511461306e575b808b101561303c57508a60c08501528992959295949194939093612f58565b7f37daf62b0000000000000000000000000000000000000000000000000000000060005260048b905260245260446000fd5b6000885261301d565b8d8f6108eb61308885858c8e611f56565b9390926040519485947fb006aba000000000000000000000000000000000000000000000000000000000865260048601612ef8565b9798999a9160016130d38b6130da94888a611f56565b9086612851565b50929d919c909b929a9092918e8e61300d565b91612fb8565b73ffffffffffffffffffffffffffffffffffffffff610515959360609383521660208201528160408201520191611867565b908160209103126101b5575190565b9391909360009460009460005b81811061314f575050505050565b8481013560f881901c9860019092019788979692909160fc1c9889156139335750600189146138f357600289146137365760038914613707576004891461368657600689146135e6576005891461359857600789146134d1576008891461347b576009891461335257600a89146131ef577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b90919293949596975060038916978815613341575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691019081019081613267918787611f56565b6040517f898bd9210000000000000000000000000000000000000000000000000000000081529391849161329f918a60048501611989565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa91821561107e576132e29360009361330e575b5060ff909a168091019a613cc9565b90801561330857906132fc91600052602052604060002090565b955b9392919093613141565b506132fc565b60ff9193506133339060203d811161333a575b61332b81836103f4565b810190613125565b92906132d3565b503d613321565b8084013560f81c9850600101613204565b9091929394959697506003891697881561346a575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190810190816133ca918787611f56565b6040517f13792a4a00000000000000000000000000000000000000000000000000000000815293918491613402918b600485016118a6565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa91821561107e576134449360009361330e575060ff909a168091019a613cc9565b908015613464579061345e91600052602052604060002090565b956132fe565b5061345e565b8084013560f81c9850600101613367565b98506020870197509495939492939192909182013561349986613c70565b81146134a9575b61344490613c8a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506134a0565b975090919293949597600f16968715613586575b602060006134f76135649a9b86613b38565b9c9092918a60405161353a816127118a82019485603c917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008252601c8201520190565b51902092604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa1561107e576134449060ff6000519a1680910199613b7b565b600189019883013560f81c97506134e5565b9850602087019750949593949293919290918201358085146135be575b61344490613c31565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506135b5565b989091929394959662ffffff98506136086120b5600c8416603f9060021c1690565b918215613672575b6003168015613661575b9081906136459061363d908781013560e81c906003019c168c01809c8989611f56565b90898b613134565b911115613658575b906134449291613be6565b9982019961364d565b50600281019084013560f01c61361a565b8482013560f81c9250600190910190613610565b9750976136dc6136e9929394959697600f6136f193169085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290830180938686611f56565b908688613134565b9061345e92980198600052602052604060002090565b985096509394929391929091908082013590602001968015613464579061345e91600052602052604060002090565b909192939495969750600389169788156138e2575b8084013560601c996137aa916014019061376a9060021c6003166120b5565b9085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9081019061380e60208c6137c085858b8b611f56565b919073ffffffffffffffffffffffffffffffffffffffff8c604051968795869485937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611989565b0392165afa90811561107e577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000916000916138c4575b50160361388057509060ff61344492991680910199613b7b565b6108eb6138918c9389938989611f56565b906040519485947fb2fed7ae000000000000000000000000000000000000000000000000000000008652600486016130f3565b6138dc915060203d8111611acb57611abd81836103f4565b38613866565b8381013560f81c985060010161374b565b98600f91929394959697985016968715613922575b60148101976134449160ff9091169084013560601c613b7b565b8281013560f81c9750600101613908565b98509091929394959698600f16978815613985575b506020600061395b6135649a9b86613b38565b9c90916040519384938c859094939260ff6060936080840197845216602083015260408201520152565b60018101995083013560f81c97506020613948565b80151590816139a7575090565b90507fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8541490565b805160209091019060005b8181106139e75750505090565b82518452602093840193909201916001016139da565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0613a43613a2d83610471565b92613a3b60405194856103f4565b808452610471565b0136602083013760005b8351811015613b1f5780613a636001928661164b565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152613b0b610120826103f4565b519020613b18828561164b565b5201613a4d565b5090915060405161273d816127116020820180956139cf565b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff81116115bb5791565b90604051907fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208301937f53657175656e6365207369676e65723a0a000000000000000000000000000000855260601b16603183015260458201526045815261273d6065826103f4565b916040519160208301937f53657175656e6365206e657374656420636f6e6669673a0a000000000000000085526038840152605883015260788201526078815261273d6098826103f4565b60405160208101917f53657175656e636520737461746963206469676573743a0a0000000000000000835260388201526038815261273d6058826103f4565b61271161273d6126cf6126c9600060208601511515612c22565b60405160208101917f53657175656e636520616e792061646472657373207375626469676573743a0a835260408201526040815261273d6060826103f4565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e63652073617069656e7420636f6e6669673a0a00000000000000865260601b166039840152604d830152606d820152606d815261273d608d826103f456fea264697066735822122071c846bfb3a07ed1d03bb0cecee955d8b864be4c4d91b0f9a960528ecc060e8964736f6c634300081c0033608080604052346015576105b6908161001b8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c9081630c0340fc14610188575080639d043a66146100a05763eca9b31a1461004057600080fd5b3461009b5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009b577f721b5e17196ee8f054e1c6084536bdfe64f23e747e9bb98627db351b3286f7bf6020604051338152a1005b600080fd5b3461009b5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009b5760043573ffffffffffffffffffffffffffffffffffffffff8116810361009b5760243567ffffffffffffffff811161009b5760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011261009b576044359067ffffffffffffffff821161009b5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc833603011261009b57602092610180926004019160040190610307565b604051908152f35b3461009b5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009b5760207fed94f157df493252d8e5700fc6b9bf2466c66387b3c1a19816847dfa9f31005791338152a1005b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561009b570180359067ffffffffffffffff821161009b5760200191813603831361009b57565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761027357604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b92919267ffffffffffffffff821161027357604051916102ea601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200184610232565b82948184528183011161009b578281602093846000960137010152565b909160408101600461031982846101e1565b90501491821592610522575b505061051b5760c08236031261009b5760405160c0810181811067ffffffffffffffff82111761027357604052823573ffffffffffffffffffffffffffffffffffffffff8116810361009b57815260208301357fffffffff000000000000000000000000000000000000000000000000000000008116810361009b576020820152604081019060408401358252606081019360608101358552608081013567ffffffffffffffff811161009b57810136601f8201121561009b576103f09036906020813591016102a2565b608083015260a08101359067ffffffffffffffff821161009b57019060408236031261009b57604051916040830183811067ffffffffffffffff82111761027357604052803567ffffffffffffffff811161009b5781019036601f8301121561009b57610465602092369084813591016102a2565b845201359067ffffffffffffffff8216820361009b5760a0916020840152015260405160208101907f616363657074496d706c696369745265717565737400000000000000000000008252601581526104bf603582610232565b51902092519051907fffffffffffffffffffffffffffffffffffffffff000000000000000000000000604051936020850195865260601b1660408401526054830152607482015260748152610515609482610232565b51902090565b5050600090565b61052c92506101e1565b60041161009b57357fffffffff00000000000000000000000000000000000000000000000000000000167feca9b31a000000000000000000000000000000000000000000000000000000001415388061032556fea2646970667358221220b244c0331517bebc589a2a51667c56df4245db1deb284e6da3f0e5a41bbd9d1664736f6c634300081c0033a264697066735822122084914abce02a75885d51abbfb63b150330b564a55a53eb92eaf3e6ad5ef47cc664736f6c634300081c0033","sourceMap":"969:6879:90:-:0;;;;;;;3166:4:5;969:6879:90;;3166:4:5;969:6879:90;;;3166:4:5;969:6879:90;3166:4:5;969:6879:90;;1087:4:16;969:6879:90;;;1087:4:16;969:6879:90;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608080604052600436101561001357600080fd5b600090813560e01c9081630a9254e4146133ef5750806317dbaeee146133b35780631ed7831c1461330a578063238ac933146132b85780632ade38801461308c5780632dcbe49a1461303a5780633e5e3c2314612f915780633f7286f414612ee85780634be6cb0814612bc05780634f4fd5551461287d578063521eb2731461282b57806359ff5db7146125335780635d3951f814611bdc57806366d9a9a014611a81578063772e85341461174a57806385226c81146116a25780638f75543e14610e90578063916a17c614610dbb578063b0464fdc14610ce6578063b0d691fe14610c95578063b4585fd51461065a578063b5508aa9146105b2578063ba414fa61461056f578063c45a01551461051a578063c4df3312146104de578063d34ddc0514610490578063da2521f91461025c578063e20c9f71146101a35763fa7626d41461016057600080fd5b346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a057602060ff601f54166040519015158152f35b80fd5b50346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a05760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b8181106102305761022c856102208187038261435f565b6040519182918261402b565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610209565b50346101a05760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a0578060206102b060405161029f838261435f565b8381526102aa614bd4565b90614cf3565b73ffffffffffffffffffffffffffffffffffffffff82541690737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561048b57604051917fca669fa70000000000000000000000000000000000000000000000000000000083526004830152838260248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156104805783928591610461575b50506103999073ffffffffffffffffffffffffffffffffffffffff60225416906040519586809481937f19822f7c00000000000000000000000000000000000000000000000000000000835260606004840152606483019061483d565b600435602483015282604483015203925af18015610456578390610422575b61041f92507f53686f756c642072657475726e203120285349475f56414c49444154494f4e5f604051926103ed60608561435f565b604084528301527f4641494c45442920666f7220616e20696e76616c6964207369676e61747572656040830152614e5a565b80f35b508082813d831161044f575b610438818361435f565b8101031261044a5761041f91516103b8565b600080fd5b503d61042e565b6040513d85823e3d90fd5b819293509061046f9161435f565b61047c578190833861033c565b5050fd5b6040513d86823e3d90fd5b505050fd5b50346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a05761022c6104ca6143a0565b60405191829160208352602083019061409e565b50346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a0576020602454604051908152f35b50346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a057602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051908152f35b50346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a05760206105a8614c0d565b6040519015158152f35b50346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a0576019546105ed816145f3565b916105fb604051938461435f565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b83831061063d576040518061022c8782614165565b60016020819261064c85614477565b815201920192019190610628565b50346101a05760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a057602435737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610c9157816040517f4c63e56200000000000000000000000000000000000000000000000000000000815282151560048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610bc857610c7c575b505081602061071360405161029f838261435f565b73ffffffffffffffffffffffffffffffffffffffff60225416737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610bc457604051907fc88a5e6d0000000000000000000000000000000000000000000000000000000082526004820152846024820152838160448183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115610480578491610c67575b505073ffffffffffffffffffffffffffffffffffffffff825416737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610bc457604051907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152838160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115610480578491610c52575b505073ffffffffffffffffffffffffffffffffffffffff82541690737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610bc457604051917f81bad6f30000000000000000000000000000000000000000000000000000000083526001600484015260016024840152846044840152600160648401526084830152838260a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156104805783928591610c33575b50506109609073ffffffffffffffffffffffffffffffffffffffff6022541690817f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4856040518a8152a26040519586809481937f19822f7c00000000000000000000000000000000000000000000000000000000835260606004840152606483019061483d565b600435602483015289604483015203925af1918215610480578492610c04575b506109e960609260405190610995858361435f565b602582527f53686f756c642072657475726e203120666f72207369676e6174757265206661848301527f696c7572650000000000000000000000000000000000000000000000000000006040830152614e5a565b8373ffffffffffffffffffffffffffffffffffffffff8254169360248373ffffffffffffffffffffffffffffffffffffffff6022541696604051928380927ffc7e286d0000000000000000000000000000000000000000000000000000000082528a60048301525afa908115610456578391610bd3575b5060405191610a6f868461435f565b602a83527f4d697373696e672066756e64732077657265206e6f74206465706f7369746564858401527f20636f72726563746c79000000000000000000000000000000000000000000006040840152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610bc4578391610b2360405194859384937f88b44c8500000000000000000000000000000000000000000000000000000000855260048501526024840152886044840152606483019061409e565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610bc857610baf575b50507f57616c6c65742073686f756c6420686176652075736564206974732062616c6161041f933191610b7d604051948561435f565b603384528301527f6e636520666f7220746865206465706f736974000000000000000000000000006040830152614dba565b81610bb99161435f565b610bc4578338610b47565b8380fd5b6040513d84823e3d90fd5b809350848092503d8311610bfd575b610bec818361435f565b8101031261044a5785915138610a60565b503d610be2565b9080925081813d8311610c2c575b610c1c818361435f565b8101031261044a57519038610980565b503d610c12565b8192935090610c419161435f565b610c4e57819083386108d9565b8280fd5b81610c5c9161435f565b610c4e578238610830565b81610c719161435f565b610c4e5782386107a4565b81610c869161435f565b610c915781386106fe565b5080fd5b50346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a057602073ffffffffffffffffffffffffffffffffffffffff815416604051908152f35b50346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a057601c54610d21816145f3565b91610d2f604051938461435f565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b838310610d71576040518061022c87826141e3565b60026020600192604051610d84816142db565b73ffffffffffffffffffffffffffffffffffffffff8654168152610da98587016148dd565b83820152815201920192019190610d5c565b50346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a057601d54610df6816145f3565b91610e04604051938461435f565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b838310610e46576040518061022c87826141e3565b60026020600192604051610e59816142db565b73ffffffffffffffffffffffffffffffffffffffff8654168152610e7e8587016148dd565b83820152815201920192019190610e31565b50346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a0576040516105d18082019082821067ffffffffffffffff8311176116755790829161db998339039082f090811561166957610ef76147f4565b91818352604090815190610f0b838361435f565b600182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301845b81811061162957505073ffffffffffffffffffffffffffffffffffffffff908386019283521690610fd983517f0c0340fc00000000000000000000000000000000000000000000000000000000602082015260048152610f9560248261435f565b845190610fa182614326565b848252866020830152858201528560608201528560808201528560a0820152600160c0820152825190610fd382614b84565b52614b84565b5082519060208083015261016082019060ff8751168584015260208701511515606084015251906101206080840152815180915261018083019060206101808260051b86010193019187905b8783831061158257505050505061108161010091606088015160a0850152608088015160c085015260a08801517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08583030160e086015261409e565b9560c08101518284015260e08101516101208401520151947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08282030161014083015260208087519283815201960190855b81811061155657505050838161111461114e938398037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261435f565b8451809381927f71aad10d00000000000000000000000000000000000000000000000000000000835260206004840152602483019061409e565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156115495761125e8493928692839161152f575b506112176002602c875180947f7b227061796c6f6164223a22000000000000000000000000000000000000000060208301526111c2815180926020868601910161407b565b81017f227d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe281018452018261435f565b6112c2611222614ef5565b91865197889485947f0199a22000000000000000000000000000000000000000000000000000000000865260606004870152606486019061409e565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152601083527f7061796c6f61645f746f5061636b6564000000000000000000000000000000006020840152016044860152019061409e565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19283156114ec57849361150b575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561048b578151907f81bad6f300000000000000000000000000000000000000000000000000000000825260016004830152846024830152846044830152600160648301526084820152838160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156114ec579084916114f6575b50507fed94f157df493252d8e5700fc6b9bf2466c66387b3c1a19816847dfa9f310057602073ffffffffffffffffffffffffffffffffffffffff602254168351908152a173ffffffffffffffffffffffffffffffffffffffff60205416737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561048b578151907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152838160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156114ec579084916114d7575b505073ffffffffffffffffffffffffffffffffffffffff60225416803b1561048b576114aa849391849284519586809481937f9c145aed00000000000000000000000000000000000000000000000000000000835260206004840152602483019061409e565b03925af19081156114ce57506114bd5750f35b816114c79161435f565b6101a05780f35b513d84823e3d90fd5b816114e19161435f565b61047c578238611444565b82513d86823e3d90fd5b816115009161435f565b61047c578238611376565b6115289193503d8086833e611520818361435f565b810190614563565b91386112ea565b61154391503d8085833e611520818361435f565b3861117d565b50505051903d90823e3d90fd5b825173ffffffffffffffffffffffffffffffffffffffff168852602097880197909201916001016110d3565b60208091877ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe808a6001969798999a0301865260c0806115f38b519473ffffffffffffffffffffffffffffffffffffffff8651168552868601518786015260e0818701519186015260e085019061409e565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152960192019201909291611025565b602090855161163781614326565b87815287838201526060878201528760608201528760808201528760a08201528760c082015282828701015201610f34565b604051903d90823e3d90fd5b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b50346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a057601a546116dd816145f3565b916116eb604051938461435f565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b83831061172d576040518061022c8782614165565b60016020819261173c85614477565b815201920192019190611718565b50346101a05760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a0578060043567ffffffffffffffff8111611a54576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8236030112611a545760643573ffffffffffffffffffffffffffffffffffffffff811680910361047c5773ffffffffffffffffffffffffffffffffffffffff60205416811415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561048b57604051907f4c63e56200000000000000000000000000000000000000000000000000000000825260048201528381602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115610480578491611a6c575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561047c576040517fca669fa7000000000000000000000000000000000000000000000000000000008152816004820152838160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115610480578491611a57575b5050604051907f1d6ddbf400000000000000000000000000000000000000000000000000000000602083015260248201526024815261191c60448261435f565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561047c578261197791604051809381927ff28dceb300000000000000000000000000000000000000000000000000000000835260206004840152602483019061409e565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115610456578391611a3f575b5050611a0160209173ffffffffffffffffffffffffffffffffffffffff60225416906040519485809481937f19822f7c0000000000000000000000000000000000000000000000000000000083526044359060243590600401600485016146a9565b03925af18015610bc857611a13575080f35b611a349060203d602011611a38575b611a2c818361435f565b81019061460b565b5080f35b503d611a22565b81611a499161435f565b611a5457813861199f565b50fd5b81611a619161435f565b61047c5782386118dc565b81611a769161435f565b61047c578238611868565b50346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a057601b54611abc816145f3565b611ac9604051918261435f565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b838310611ba157868587604051928392602084019060208552518091526040840160408260051b8601019392905b828210611b3657505050500390f35b91936020611b91827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0600195979984950301865288519083611b81835160408452604084019061409e565b920151908481840391015261410f565b9601920192018594939192611b27565b60026020600192604051611bb4816142db565b611bbd86614477565b8152611bca8587016148dd565b83820152815201920192019190611af9565b50346101a05760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a057600435611c176147f4565b600381528160e082015260255490611cec73ffffffffffffffffffffffffffffffffffffffff602254166020830151151560001461252c5785905b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f84527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408401527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de6060840152608083015260a082015260a08152611ce360c08261435f565b5190209161544f565b6040519060208201927f190100000000000000000000000000000000000000000000000000000000000084526022830152604282015260428152611d3160628261435f565b519020604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561045657838092819082936124df575b5073ffffffffffffffffffffffffffffffffffffffff6026541693604051947f56ca623e00000000000000000000000000000000000000000000000000000000865260048601528285602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9485156104565783956124c3575b50604051917fb11a19e800000000000000000000000000000000000000000000000000000000835260048301528282602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156104565783926124a7575b50604051937fb11a19e800000000000000000000000000000000000000000000000000000000855260048501528284602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa93841561045657839461248b575b5060ff604051917f6900a3ae0000000000000000000000000000000000000000000000000000000083521660048201528281602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa948515610456576001600c6020600f6121729461202c856121b9998161211d9e60299e6120b39c8f809361246a575b5050600690604051998a9581611f4d8189019b8c81519384920161407b565b87017f3a686173683a000000000000000000000000000000000000000000000000000083820152611f87825180938560268501910161407b565b01017f3a0000000000000000000000000000000000000000000000000000000000000083820152611fc282518093602060078501910161407b565b01017f3a0000000000000000000000000000000000000000000000000000000000000083820152611ffd82518093602060028501910161407b565b010103017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810185528461435f565b6120346143a0565b9260409b8c9b8c93845193612049868661435f565b600485526120e88360208701977f74727565000000000000000000000000000000000000000000000000000000008952519d8e809b7f7b22696e707574223a000000000000000000000000000000000000000000000060208301526020815194859301910161407b565b8901917f2c227369676e617475726573223a22000000000000000000000000000000000085840152518093603884019061407b565b0101917f222c22636861696e4964223a000000000000000000000000000000000000000085840152518093601b84019061407b565b01017f7d000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181018452018261435f565b61221d61217d614ef5565b91855196879485947f0199a22000000000000000000000000000000000000000000000000000000000865260606004870152606486019061409e565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152601083527f7369676e61747572655f656e636f6465000000000000000000000000000000006020840152016044860152019061409e565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af191821561241b57849261244e575b506122606020928251612258858261435f565b868152614cf3565b8473ffffffffffffffffffffffffffffffffffffffff845416737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610c91578351907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015612444579085939291612425575b50506123499073ffffffffffffffffffffffffffffffffffffffff60225416908785518098819582947f19822f7c00000000000000000000000000000000000000000000000000000000845260606004850152606484019061483d565b90602483015282604483015203925af192831561241b5784936123cc575b50917f617475726500000000000000000000000000000000000000000000000000000061041f937f53686f756c642072657475726e203020666f7220612076616c6964207369676e8151946123bd60608761435f565b60258652850152830152614dba565b92508183813d8311612414575b6123e3818361435f565b8101031261044a579151917f6174757265000000000000000000000000000000000000000000000000000000612367565b503d6123d9565b81513d86823e3d90fd5b81929350906124339161435f565b61244057829085386122ec565b8480fd5b84513d84823e3d90fd5b6124639192503d8086833e611520818361435f565b9038612245565b600692935090612483913d8091833e611520818361435f565b91908f611f2e565b6124a09194503d8085833e611520818361435f565b9238611eb3565b6124bc9192503d8085833e611520818361435f565b9038611e5c565b6124d89195503d8085833e611520818361435f565b9338611e05565b93505050506060813d606011612524575b816124fd6060938361435f565b81010312610c4e57805160ff81168103610bc4578360406020840151930151919238611d94565b3d91506124f0565b4690611c52565b50346101a05760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a0578060043567ffffffffffffffff8111611a54576125849036906004016140e1565b60243573ffffffffffffffffffffffffffffffffffffffff811680910361048b5773ffffffffffffffffffffffffffffffffffffffff60205416811415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561244057604051907f4c63e56200000000000000000000000000000000000000000000000000000000825260048201528481602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561280b578591612816575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561048b576040517fca669fa7000000000000000000000000000000000000000000000000000000008152816004820152848160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811561280b5785916127f6575b5050604051907f1d6ddbf40000000000000000000000000000000000000000000000000000000060208301526024820152602481526126e660448261435f565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561048b578361274191604051809381927ff28dceb300000000000000000000000000000000000000000000000000000000835260206004840152602483019061409e565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156104805784916127e1575b505073ffffffffffffffffffffffffffffffffffffffff6022541691823b1561048b576127d0928492836040518096819582947f9c145aed00000000000000000000000000000000000000000000000000000000845260206004850152602484019161466a565b03925af18015610bc8576114bd5750f35b816127eb9161435f565b61047c578238612769565b816128009161435f565b61048b5783386126a6565b6040513d87823e3d90fd5b816128209161435f565b61048b578338612632565b50346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a057602073ffffffffffffffffffffffffffffffffffffffff60225416604051908152f35b50346101a05760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a05760043567ffffffffffffffff8111610c91576128cd9036906004016140e1565b919073ffffffffffffffffffffffffffffffffffffffff601f5460081c1692604051617f1f8082019082821067ffffffffffffffff831117612b93578596839261293d92615c7a853973ffffffffffffffffffffffffffffffffffffffff90911681526000602082015260400190565b039084f0801561045657601f54602480546040517f32c02a1400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9485166004820152918201529160209183916044918391899160081c165af180156104805773ffffffffffffffffffffffffffffffffffffffff918591612b64575b50169173ffffffffffffffffffffffffffffffffffffffff60205416737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561244057604051907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152848160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811561280b578591612b4f575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561048b576040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd13d7835000000000000000000000000000000000000000000000000000000006004820152848160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811561280b578591612b3a575b5050823b1561048b576127d0928492836040518096819582947f9c145aed00000000000000000000000000000000000000000000000000000000845260206004850152602484019161466a565b81612b449161435f565b61048b578338612aed565b81612b599161435f565b61048b578338612a59565b612b86915060203d602011612b8c575b612b7e818361435f565b810190614537565b386129cb565b503d612b74565b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b50346101a05760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a05760043567ffffffffffffffff8111610c91576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8236030112610c915773ffffffffffffffffffffffffffffffffffffffff601f5460081c1660405190617f1f8083019083821067ffffffffffffffff831117612b935791612c9c918493615c7a853973ffffffffffffffffffffffffffffffffffffffff90911681526000602082015260400190565b039083f08015610bc857601f54602480546040517f32c02a1400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9485166004820152918201529160209183916044918391889160081c165af1908115610456578391612ec9575b5073ffffffffffffffffffffffffffffffffffffffff60205416737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610bc457604051907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152838160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561048057612eb5575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610c4e57826040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fd13d7835000000000000000000000000000000000000000000000000000000006004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015610bc857612ea0575b5060209173ffffffffffffffffffffffffffffffffffffffff93612e8d926040519586809581947f19822f7c0000000000000000000000000000000000000000000000000000000083526044359060243590600401600485016146a9565b0393165af18015610bc857611a13575080f35b81612eaa9161435f565b610c4e578238612e2f565b83612ec29194929461435f565b9138612d9e565b612ee2915060203d602011612b8c57612b7e818361435f565b38612d15565b50346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a05760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b818110612f655761022c856102208187038261435f565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201612f4e565b50346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a05760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b81811061300e5761022c856102208187038261435f565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201612ff7565b50346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a057602073ffffffffffffffffffffffffffffffffffffffff60215416604051908152f35b50346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a057601e546130c7816145f3565b6130d4604051918261435f565b818152601e83526020810191837f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350845b8383106132225786858760405192839260208401906020855251809152604084019160408260051b8601019392815b8383106131405786860387f35b9193957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09086929496030183528551906020604082019273ffffffffffffffffffffffffffffffffffffffff81511683520151916040602083015282518091526060820190602060608260051b850101940192855b8281106131d957505050505060208060019297019301930190928695949293613133565b9091929394602080613215837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08760019603018952895161409e565b97019501939291016131b5565b60405161322e816142db565b73ffffffffffffffffffffffffffffffffffffffff8354168152600183018054613257816145f3565b91613265604051938461435f565b8183528a526020808b20908b9084015b83821061329b575050505060019282602092836002950152815201920192019190613104565b6001602081926132aa86614477565b815201930191019091613275565b50346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a057602073ffffffffffffffffffffffffffffffffffffffff60265416604051908152f35b50346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a05760405180916020601654928381520191601682527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289915b8181106133875761022c856102208187038261435f565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201613370565b50346101a057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a0576020602554604051908152f35b905034610c9157817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610c91576102b68082019082821067ffffffffffffffff8311176116755790829161580f8339039082f0801561401e577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00601f549260081b16911617601f556040516101b58082019082821067ffffffffffffffff83111761167557908291615ac58339039082f0801561401e5773ffffffffffffffffffffffffffffffffffffffff16807fffffffffffffffffffffffff0000000000000000000000000000000000000000602054161760205573ffffffffffffffffffffffffffffffffffffffff601f5460081c1660405191617f1f918284019284841067ffffffffffffffff851117612b935791604093918593615c7a85398252602082015203019082f0801561401e5773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000602154161760215561359f607b90565b90604091818084516135b1868261435f565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152855161364e8161361c60208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528a6024840152606483019061409e565b876044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261435f565b51906a636f6e736f6c652e6c6f675afa50806025558251907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115613ff5579073ffffffffffffffffffffffffffffffffffffffff918391613fff575b5016807fffffffffffffffffffffffff000000000000000000000000000000000000000060265416176026558251907f56ca623e00000000000000000000000000000000000000000000000000000000825260048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115613ff5578291613fdb575b508251906137ed600260278460208101947f7369676e65723a000000000000000000000000000000000000000000000000008652613798815180926020868601910161407b565b81017f3a310000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe281018552018361435f565b8351907f6900a3ae000000000000000000000000000000000000000000000000000000008252600160048301528382602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215613fd1578492613fb5575b508451927f6900a3ae0000000000000000000000000000000000000000000000000000000084528460048501528484602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa938415613fab5792613a019287959287958694613f7e575b506139ba926010600293601b93613965602e8c51998a967f7b227468726573686f6c64223a2200000000000000000000000000000000000060208901526138f5815180926020868c01910161407b565b87017f222c22636865636b706f696e74223a220000000000000000000000000000000083820152613930825180936020603e8501910161407b565b0101917f222c2266726f6d223a22666c6174222c22636f6e74656e74223a22000000000085840152518093602b84019061407b565b01017f227d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe281018452018261435f565b613a656139c5614ef5565b91855197889485947f0199a22000000000000000000000000000000000000000000000000000000000865260606004870152606486019061409e565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152600a83527f636f6e6669675f6e6577000000000000000000000000000000000000000000006020840152016044860152019061409e565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1928315613f73578293613f57575b50825167ffffffffffffffff8111613f2a57613aaa602354614288565b601f8111613e89575b506020601f8211600114613dcc57839482939492613dc1575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916176023555b8082613bec613b0c6143a0565b613ba560016029865180947f7b22696e707574223a00000000000000000000000000000000000000000000006020830152613b50815180926020868601910161407b565b81017f7d000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181018452018261435f565b613c50613bb0614ef5565b91855195869485947f0199a22000000000000000000000000000000000000000000000000000000000865260606004870152606486019061409e565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152601083527f636f6e6669675f696d61676548617368000000000000000000000000000000006020840152016044860152019061409e565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115613d9b578391613da7575b5060208151918180820193849201010312610c4e576020613d2591518060245573ffffffffffffffffffffffffffffffffffffffff601f5460081c1673ffffffffffffffffffffffffffffffffffffffff602154168686518096819582947f32c02a14000000000000000000000000000000000000000000000000000000008452600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af1908115613d9b5773ffffffffffffffffffffffffffffffffffffffff92508391613d7c575b50167fffffffffffffffffffffffff0000000000000000000000000000000000000000602254161760225580f35b613d95915060203d602011612b8c57612b7e818361435f565b38613d4e565b505051903d90823e3d90fd5b613dbb91503d8085833e611520818361435f565b38613c78565b015190503880613acc565b602384527fd57b2b5166478fd4318d2acc6cc2c704584312bdd8781b32d5d06abda57f4230907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08316855b818110613e7157509583600195969710613e3a575b505050811b01602355613aff565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055388080613e2c565b9192602060018192868b015181550194019201613e17565b60238452601f820160051c7fd57b2b5166478fd4318d2acc6cc2c704584312bdd8781b32d5d06abda57f4230019060208310613f02575b601f0160051c7fd57b2b5166478fd4318d2acc6cc2c704584312bdd8781b32d5d06abda57f423001905b818110613ef75750613ab3565b848155600101613eea565b7fd57b2b5166478fd4318d2acc6cc2c704584312bdd8781b32d5d06abda57f42309150613ec0565b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b613f6c9193503d8084833e611520818361435f565b9138613a8d565b5051903d90823e3d90fd5b601b919450926010600293613f9f6139ba963d808c833e611520818361435f565b969350935050926138a5565b86513d87823e3d90fd5b613fca9192503d8086833e611520818361435f565b9038613844565b85513d86823e3d90fd5b613fef91503d8084833e611520818361435f565b38613751565b83513d84823e3d90fd5b614018915060203d602011612b8c57612b7e818361435f565b386136d0565b50604051903d90823e3d90fd5b602060408183019282815284518094520192019060005b81811061404f5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101614042565b60005b83811061408e5750506000910152565b818101518382015260200161407e565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936140da8151809281875287808801910161407b565b0116010190565b9181601f8401121561044a5782359167ffffffffffffffff831161044a576020838186019501011161044a57565b906020808351928381520192019060005b81811061412d5750505090565b82517fffffffff0000000000000000000000000000000000000000000000000000000016845260209384019390920191600101614120565b602081016020825282518091526040820191602060408360051b8301019401926000915b83831061419857505050505090565b90919293946020806141d4837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08660019603018752895161409e565b97019301930191939290614189565b602081016020825282518091526040820191602060408360051b8301019401926000915b83831061421657505050505090565b9091929394602080614279837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff81511684520151918185820152019061410f565b97019301930191939290614207565b90600182811c921680156142d1575b60208310146142a257565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f1691614297565b6040810190811067ffffffffffffffff8211176142f757604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff8211176142f757604052565b610120810190811067ffffffffffffffff8211176142f757604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176142f757604052565b60405190600082602354916143b483614288565b808352926001811690811561443a57506001146143da575b6143d89250038361435f565b565b506023600090815290917fd57b2b5166478fd4318d2acc6cc2c704584312bdd8781b32d5d06abda57f42305b81831061441e5750509060206143d8928201016143cc565b6020919350806001915483858901015201910190918492614406565b602092506143d89491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b8201016143cc565b906040519182600082549261448b84614288565b80845293600181169081156144f757506001146144b0575b506143d89250038361435f565b90506000929192526020600020906000915b8183106144db5750509060206143d892820101386144a3565b60209193508060019154838589010152019101909184926144c2565b602093506143d89592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b820101386144a3565b9081602091031261044a575173ffffffffffffffffffffffffffffffffffffffff8116810361044a5790565b60208183031261044a5780519067ffffffffffffffff821161044a570181601f8201121561044a576020815191019067ffffffffffffffff81116142f757604051926145d7601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0166020018561435f565b8184528183011161044a576145f091602084019061407b565b90565b67ffffffffffffffff81116142f75760051b60200190565b9081602091031261044a575190565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561044a57016020813591019167ffffffffffffffff821161044a57813603831361044a57565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b9392919360608152813573ffffffffffffffffffffffffffffffffffffffff811680910361044a576040926147ea916060840152602081013560808401526147b96147ad61474f6147126146ff8886018661461a565b61012060a08a015261018089019161466a565b61471f606086018661461a565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08984030160c08a015261466a565b608084013560e087015260a084013561010087015260c084013561012087015261477c60e085018561461a565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08884030161014089015261466a565b9161010081019061461a565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08584030161016086015261466a565b9460208201520152565b6040519061480182614342565b6060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b6145f09173ffffffffffffffffffffffffffffffffffffffff8251168152602082015160208201526101006148cb61489b6148896040860151610120604087015261012086019061409e565b6060860151858203606087015261409e565b6080850151608085015260a085015160a085015260c085015160c085015260e085015184820360e086015261409e565b9201519061010081840391015261409e565b90604051918281549182825260208201906000526020600020926000905b806007830110614af7576143d8945491818110614ac1575b818110614a8b575b818110614a55575b818110614a1f575b8181106149e9575b8181106149b3575b81811061497e575b10614951575b50038361435f565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260200138614949565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b168152019301614943565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b16815201930161493b565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b168152019301614933565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b16815201930161492b565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b168152019301614923565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b16815201930161491b565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b168152019301614913565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e08201520194019201859293916148fb565b805115614b915760200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8051821015614b915760209160051b010190565b60405190614be360408361435f565b601882527d1000000000000000000000000000000000000000000000000000000000006020830152565b60085460ff168015614c1c5790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115614ce757600091614cb5575b50151590565b90506020813d602011614cdf575b81614cd06020938361435f565b8101031261044a575138614caf565b3d9150614cc3565b6040513d6000823e3d90fd5b906060610100604051614d0581614342565b6000815260006020820152826040820152828082015260006080820152600060a0820152600060c08201528260e0820152015273ffffffffffffffffffffffffffffffffffffffff602254169160405192614d5f84614342565b835260006020840152604051614d7660208261435f565b60008152604084015260608301526000608083015261520860a0830152600060c0830152604051614da860208261435f565b6000815260e083015261010082015290565b90600091737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610c4e57614e2691839160405193849283927f88b44c85000000000000000000000000000000000000000000000000000000008452600484015284602484015260606044840152606483019061409e565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610bc857614e4d575050565b81614e579161435f565b50565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561044a57614ec49160009160405193849283927f88b44c8500000000000000000000000000000000000000000000000000000000845260048401526001602484015260606044840152606483019061409e565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015614ce757614eea5750565b60006143d89161435f565b6040517fc1978d1f00000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5345515f53444b5f5250435f4d494e5f504f52540000000000000000000000006044820152602081606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115614ce75760009161541d575b506040517fc1978d1f00000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5345515f53444b5f5250435f4d41585f504f52540000000000000000000000006044820152602081606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115614ce7576000916153eb575b5081811061538d577fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a654801561533b575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146152dd57600101807fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a6558282039182116152dd57600182018092116152dd57811561530c570681018091116152dd57604051907ff877cb1900000000000000000000000000000000000000000000000000000000825260206004830152601660248301527f5345515f53444b5f5250435f55524c5f505245464958000000000000000000006044830152600082606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215614ce7576000926152c0575b50604051917ff877cb1900000000000000000000000000000000000000000000000000000000835260206004840152601660248401527f5345515f53444b5f5250435f55524c5f535546464958000000000000000000006044840152600083606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa928315614ce7576000936152a3575b50604051917f6900a3ae0000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215614ce757600092615281575b5060206145f09293615254826040519685615231899751809285808b01910161407b565b86016152458251809385808501910161407b565b0101918281519485920161407b565b01037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261435f565b6145f0925061529c6020913d806000833e611520818361435f565b925061520d565b6152b99193503d806000833e611520818361435f565b91386151b4565b6152d69192503d806000833e611520818361435f565b903861512c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b506040516020810190366000833761538560208236810160008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261435f565b519020615033565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e76616c696420706f72742072616e676500000000000000000000000000006044820152fd5b906020823d602011615415575b816154056020938361435f565b810103126101a057505138615002565b3d91506153f8565b906020823d602011615447575b816154376020938361435f565b810103126101a057505138614f7b565b3d915061542a565b61010081015160405160208101818193602081519391019260005b8181106157df5750506154a49250037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261435f565b5190209060ff81511680156000146156b25750906040820151928351916154e36154cd846145f3565b936154db604051958661435f565b8085526145f3565b937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe060208501950136863760005b86518110156155e3578061552760019289614bc0565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e083015261010082015261010081526155cf6101208261435f565b5190206155dc8288614bc0565b5201615511565b5092919450926040519081602081019182945192909260005b8181106156995750506156369250037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261435f565b51902091608060608301519201516040519260208401947f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a2865260408501526060840152608083015260a082015260a0815261569360c08261435f565b51902090565b84518352602094850194869450909201916001016155fc565b6001810361570c575060a0015160208151910120906040519060208201927fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4668452604083015260608201526060815261569360808261435f565b6002810361575f575060c00151906040519060208201927f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e48452604083015260608201526060815261569360808261435f565b600381036157b2575060e00151906040519060208201927fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4668452604083015260608201526060815261569360808261435f565b7f048183200000000000000000000000000000000000000000000000000000000060005260045260246000fd5b845173ffffffffffffffffffffffffffffffffffffffff1683526020948501948694509092019160010161546a56fe6080806040523460155761029b908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c6332c02a141461002757600080fd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019f5760043573ffffffffffffffffffffffffffffffffffffffff811680820361019f5760243580916100eb6101176040519261008a846101d3565b602f84527f6041600e3d396021805130553df33d3d36153402601f57363d3d373d363d305460208501527f5af43d82803e903d91601f57fd5bf300000000000000000000000000000000006040850152604051928391602083019586610235565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826101f4565b519034f59173ffffffffffffffffffffffffffffffffffffffff8316156101595760405173ffffffffffffffffffffffffffffffffffffffff84168152602090f35b7f8caac8050000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff1660045260245260446000fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6060810190811067ffffffffffffffff8211176101ef57604052565b6101a4565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176101ef57604052565b9291909283519060005b8281106102525750019081526020019150565b806020809288010151818401520161023f56fea2646970667358221220be04d6b1fea99f8da63c42ae89d7f45bd43865e722cddb9cb70f1713011e9fe264736f6c634300081c00336080806040523460155761019a908161001b8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c908163b760faf9146100a2575063fc7e286d1461003557600080fd5b3461009d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009d5760043573ffffffffffffffffffffffffffffffffffffffff811680910361009d5760005260006020526020604060002054604051908152f35b600080fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009d576004359073ffffffffffffffffffffffffffffffffffffffff821680920361009d578160005260006020526040600020805491348301809311610135577f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c49260209255348152a2005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212206a17cc8cad12c58baf45f5e38f066c8f0529382a68e854861bf633ee59e344f464736f6c634300081c003361010080604052346101ae57604081617f1f803803809161002082856101b3565b8339810103126101ae5761003f6020610038836101d6565b92016101d6565b604051909190613dff808201906001600160401b0382118383101761018c57602091839161412083396001600160a01b03861681520301906000f09081156101a257604051606081016001600160401b0381118282101761018c576040908152602f82527f6041600e3d396021805130553df33d3d36153402601f57363d3d373d363d305460208301526e5af43d82803e903d91601f57fd5bf360881b82820152519060005b602f811061017757505030604f820152604f8152610104606f826101b3565b805160209091012060805260a0526001600160a01b031660c05260e052604051613f3590816101eb8239608051818181610c210152613b59015260a051818181610d6f0152613b2a015260c051818181610cd6015261119d015260e0518181816110600152818161120c0152611aa00152f35b806020809284010151828286010152016100e5565b634e487b7160e01b600052604160045260246000fd5b6040513d6000823e3d90fd5b600080fd5b601f909101601f19168101906001600160401b0382119082101761018c57604052565b51906001600160a01b03821682036101ae5756fe6080604052600436101561001e575b361561001c5761001c611c68565b005b60003560e01c806223de29146101ad578063025b22bc146101a857806313792a4a146101a3578063150b7a021461019e5780631626ba7e1461019957806319822f7c146101945780631a9b23371461018f5780631f6a1eb91461018a578063257671f51461018557806329561426146101805780632dd310001461017b5780634fcf3eca146101765780636ea44577146101715780638943ec021461016c5780638c3f55631461016757806392dcb3fc146101625780639c145aed1461015d5780639f69ef5414610158578063a65d69d414610153578063aaf10f421461014e578063ad55366b14610149578063b93ea7ad14610144578063bc197c811461013f578063f23a6e611461013a5763f727ef1c0361000e5761158b565b6114fe565b61142c565b6112cd565b611281565b611230565b6111c1565b611152565b61103a565b610fdc565b610fa0565b610f1c565b610eed565b610d93565b610d24565b610c44565b610beb565b610aff565b610a9c565b6109e7565b61095f565b6108d2565b6107d5565b6102fb565b61026f565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101d557565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101d557565b6044359073ffffffffffffffffffffffffffffffffffffffff821682036101d557565b359073ffffffffffffffffffffffffffffffffffffffff821682036101d557565b9181601f840112156101d55782359167ffffffffffffffff83116101d557602083818601950101116101d557565b346101d55760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576102a66101b2565b506102af6101da565b506102b86101fd565b5060843567ffffffffffffffff81116101d5576102d9903690600401610241565b505060a43567ffffffffffffffff81116101d55761001c903690600401610241565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55761032d6101b2565b30330361033d5761001c90611d31565b7fa19dbf00000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff8211176103b657604052565b61036b565b6040810190811067ffffffffffffffff8211176103b657604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176103b657604052565b6040519061042760e0836103d7565b565b60405190610427610120836103d7565b359060ff821682036101d557565b359081151582036101d557565b67ffffffffffffffff81116103b65760051b60200190565b67ffffffffffffffff81116103b657601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926104b28261046c565b916104c060405193846103d7565b8294818452818301116101d5578281602093846000960137010152565b9080601f830112156101d5578160206104f8933591016104a6565b90565b81601f820112156101d55780359061051282610454565b9261052060405194856103d7565b82845260208085019360051b830101918183116101d55760208101935b83851061054c57505050505090565b843567ffffffffffffffff81116101d557820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082860301126101d557610593610418565b916105a060208301610220565b83526040820135602084015260608201359267ffffffffffffffff84116101d55760e0836105d58860208098819801016104dd565b6040840152608081013560608401526105f060a08201610447565b608084015261060160c08201610447565b60a0840152013560c082015281520194019361053d565b9080601f830112156101d557813561062f81610454565b9261063d60405194856103d7565b81845260208085019260051b8201019283116101d557602001905b8282106106655750505090565b6020809161067284610220565b815201910190610658565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126101d55760043567ffffffffffffffff81116101d5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82850301126101d5576106ef610429565b906106fc81600401610439565b825261070a60248201610447565b6020830152604481013567ffffffffffffffff81116101d557846004610732928401016104fb565b6040830152606481013560608301526084810135608083015260a481013567ffffffffffffffff81116101d55784600461076e928401016104dd565b60a083015260c481013560c083015260e481013560e083015261010481013567ffffffffffffffff81116101d557600485916107ab930101610618565b610100820152916024359067ffffffffffffffff82116101d5576107d191600401610241565b9091565b346101d5576107e33661067d565b90916101008101926107fe6107f9855151611693565b6116b3565b9160005b85518051821015610865579061085f61083a61082083600195611731565b5173ffffffffffffffffffffffffffffffffffffffff1690565b6108448388611731565b9073ffffffffffffffffffffffffffffffffffffffff169052565b01610802565b505083838661087a3361084483515185611731565b52610886818484611d80565b50156108985760405160018152602090f35b6108ce906040519384937ff58cc8b50000000000000000000000000000000000000000000000000000000085526004850161198c565b0390fd5b346101d55760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576109096101b2565b506109126101da565b5060643567ffffffffffffffff81116101d557610933903690600401610241565b505060206040517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b346101d55760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760043560243567ffffffffffffffff81116101d5576020916109b76109bd923690600401610241565b916119b1565b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b346101d55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760043567ffffffffffffffff81116101d5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126101d557610a6a60209160243560443591600401611a86565b604051908152f35b7fffffffff000000000000000000000000000000000000000000000000000000008116036101d557565b346101d55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576020610ae1600435610adc81610a72565b611f65565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760043567ffffffffffffffff81116101d557610b49903690600401610241565b9060243567ffffffffffffffff81116101d557610b6d610b77913690600401610241565b9190935a9361209a565b91610b8b606084015160808501519061235e565b610b96828585611d80565b929015610ba8575061001c93506124b7565b836108ce86926040519384937fa2b6d61b0000000000000000000000000000000000000000000000000000000085526004850161198c565b60009103126101d557565b346101d55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346101d55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760043530330361033d578015610cfa576020817f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf855604051908152a161001c7f0000000000000000000000000000000000000000000000000000000000000000611d31565b7f4294d1270000000000000000000000000000000000000000000000000000000060005260046000fd5b346101d55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d557600435610dc981610a72565b30330361033d5773ffffffffffffffffffffffffffffffffffffffff610dee82611f65565b1615610e545760407fffffffff000000000000000000000000000000000000000000000000000000007f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19216610e45600082612d0f565b815190815260006020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f1c3812cc000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101d5576004359067ffffffffffffffff82116101d5576107d191600401610241565b610ef636610ea4565b9030330361033d57610f0c61001c925a9261209a565b90610f16826127db565b906124b7565b346101d55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d557610f536101b2565b5060443567ffffffffffffffff81116101d557610f74903690600401610241565b505060206040517f8943ec02000000000000000000000000000000000000000000000000000000008152f35b346101d55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576020610a6a60043561286f565b346101d55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760406110186004356128b5565b73ffffffffffffffffffffffffffffffffffffffff8351921682526020820152f35b346101d55761104836610ea4565b9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001680156111285733036110fa57303b156101d5576110ce9160009160405193849283927f6ea4457700000000000000000000000000000000000000000000000000000000845260048401611c27565b038183305af180156110f5576110e057005b806110ef600061001c936103d7565b80610be0565b6119fd565b7f1d6ddbf4000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7fd13d78350000000000000000000000000000000000000000000000000000000060005260046000fd5b346101d55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101d55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101d55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576020305473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346101d55760c061129d6000806112973661067d565b9161297d565b926112a9839293613ac6565b906040519586526020860152151560408501526060840152608083015260a0820152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760043561130381610a72565b61130b6101da565b9030330361033d5773ffffffffffffffffffffffffffffffffffffffff61133182611f65565b166113ab577f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19173ffffffffffffffffffffffffffffffffffffffff7fffffffff0000000000000000000000000000000000000000000000000000000060409316911661139e8183612d0f565b82519182526020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f5b4d6d6a000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b9181601f840112156101d55782359167ffffffffffffffff83116101d5576020808501948460051b0101116101d557565b346101d55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576114636101b2565b5061146c6101da565b5060443567ffffffffffffffff81116101d55761148d9036906004016113fb565b505060643567ffffffffffffffff81116101d5576114af9036906004016113fb565b505060843567ffffffffffffffff81116101d5576114d1903690600401610241565b50506040517fbc197c81000000000000000000000000000000000000000000000000000000008152602090f35b346101d55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576115356101b2565b5061153e6101da565b5060843567ffffffffffffffff81116101d55761155f903690600401610241565b505060206040517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b346101d55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576004356115c56101da565b604435916bffffffffffffffffffffffff83168093036101d55730330361033d578273ffffffffffffffffffffffffffffffffffffffff836116507febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1967fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606097881b161785612cca565b6040519384521660208301526040820152a1005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90600182018092116116a157565b611664565b919082018092116116a157565b906116bd82610454565b6116ca60405191826103d7565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06116f88294610454565b0190602036910137565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518210156117455760209160051b010190565b611702565b919082519283825260005b8481106117945750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201611755565b9080602083519182815201916020808360051b8301019401926000915b8383106117d557505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080611848604085015160e0604086015260e085019061174a565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152970193019301919392906117c6565b906020808351928381520192019060005b81811061189d5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101611890565b805160ff1682526104f891602082810151151590820152610100611927611901604085015161012060408601526101208501906117a9565b606085015160608501526080850151608085015260a085015184820360a086015261174a565b9260c081015160c084015260e081015160e084015201519061010081840391015261187f565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b916119a36104f894926040855260408501906118c9565b92602081850391015261194d565b906119ce92916119bf611f0a565b906003825260e0820152611d80565b50156119f8577f1626ba7e0000000000000000000000000000000000000000000000000000000090565b600090565b6040513d6000823e3d90fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101d5570180359067ffffffffffffffff82116101d5576020019181360383136101d557565b908160209103126101d557516104f881610a72565b6040906104f894928152816020820152019161194d565b91909173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016918215611128578233036110fa5780611bb8575b506020915080610100611ae8920190611a09565b92611b2060405194859384937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611a6f565b0381305afa9081156110f5577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091611b89575b501603611b8457600090565b600190565b611bab915060203d602011611bb1575b611ba381836103d7565b810190611a5a565b38611b78565b503d611b99565b823b156101d5576040517fb760faf900000000000000000000000000000000000000000000000000000000815230600482015292600091849160249183915af19081156110f557602092611ae892611c12575b5090611ad4565b806110ef6000611c21936103d7565b38611c0b565b9160206104f893818152019161194d565b3d15611c63573d90611c498261046c565b91611c5760405193846103d7565b82523d6000602084013e565b606090565b600436108015611c755750565b611cab906000357fffffffff00000000000000000000000000000000000000000000000000000000811691611cfd575b50611f65565b73ffffffffffffffffffffffffffffffffffffffff8116611cc95750565b60008091604051368382378036810184815203915af4611ce7611c38565b9015611cf557602081519101f35b602081519101fd5b7fffffffff000000000000000000000000000000000000000000000000000000008092503660040360031b1b161638611ca5565b60207f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca039180305573ffffffffffffffffffffffffffffffffffffffff60405191168152a1565b90156117455790565b91907f800000000000000000000000000000000000000000000000000000000000000080611dd7611db18585611d77565b357fff000000000000000000000000000000000000000000000000000000000000001690565b1614611e36576000918291611deb9461297d565b905091909192808210611e06575050611e0390613ac6565b91565b7ffd41fcba0000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b5050611e41906127db565b90611e4b826128b5565b42811115611ed8575073ffffffffffffffffffffffffffffffffffffffff81168015159081611ecd575b50611e81575060019190565b7f8945c3130000000000000000000000000000000000000000000000000000000060005260048390523360245273ffffffffffffffffffffffffffffffffffffffff1660445260646000fd5b905033141538611e75565b7ff95b6ab700000000000000000000000000000000000000000000000000000000600052600484905260245260446000fd5b60405190610120820182811067ffffffffffffffff8211176103b6576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b73ffffffffffffffffffffffffffffffffffffffff906040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a120845216604082015260408152611fdc6060826103d7565b519020541690565b90611fee82610454565b611ffb60405191826103d7565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06120298294610454565b019060005b82811061203a57505050565b6020906040516120498161039a565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c08201528282850101520161202e565b909392938483116101d55784116101d5578101920390565b9190916120a5611f0a565b6000815292600190823560f81c827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818316016123475750600060608701525b60076120f460ff831660011c90565b16806122f6575b506010818116036122c157506001925b61211484611fe4565b92604087019384526000905b85821061212f57505050505050565b8281013560f81c9060010190918160018085160361229f575061217330612157838951611731565b519073ffffffffffffffffffffffffffffffffffffffff169052565b60028084161461227f575b600480841614612231575b6008808416146121fe575b6121e76121e160c0856121c08a60806121b78860108060019c9d16149351611731565b51019015159052565b6121d78a60a06121b7886020808716149351611731565b1660061c60031690565b60ff1690565b60c06121f4838951611731565b5101520190612120565b6001916121e7906121e19060c090878101359060200196906060612223878d51611731565b510152959450505050612194565b90612279908481013560e81c9060030161227261225961225184846116a6565b838a8a612082565b91906040612268888d51611731565b51019236916104a6565b90526116a6565b90612189565b90838101359060200191906020612297838951611731565b51015261217e565b6122bc92508481013560601c906014019290612157838951611731565b612173565b6020908116036122e35761ffff918381013560f01c906002015b92169261210b565b60ff918381013560f81c906001016122db565b61233a919385929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b92906080870152386120fb565b80850135606090811c9088015260140192506120e5565b906123688261286f565b8181036123ee57509060017f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f8819201908160405160208101907f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8252836040820152604081526123d86060826103d7565b51902055604080519182526020820192909252a1565b917f9b6514f40000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b61243a604092959493956060835260608301906118c9565b9460208201520152565b926104f896959260c09592855260208501526040840152606083015260808201528160a0820152019061174a565b6104f8939260609282526020820152816040820152019061174a565b6124a46104f894926060835260608301906118c9565b926020820152604081840391015261174a565b916000604082019384515190825b8281106124d6575b50505050505050565b6124e1818851611731565b51936124f060a0860151151590565b806127d3575b61279357506000936060810151801580158061278a575b6127525784906125206080850151151590565b1561270c576125cb92612547855173ffffffffffffffffffffffffffffffffffffffff1690565b911561270657505a905b6125c68b61259a60608d01516040890151908c8b604051998a967f4c4e814c00000000000000000000000000000000000000000000000000000000602089015260248801612444565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018552846103d7565b612c9d565b1561260e575b506040805187815260208101839052600192917f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a91a15b016124c5565b60c0018051156126bd57600181511461267e575160021461262f57386125d1565b9493505050507fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b925061266f612663612caf565b60405193849384612472565b0390a1388080808080806124cd565b50846108ce61268b612caf565b6040519384937f7f6b0bb10000000000000000000000000000000000000000000000000000000085526004850161248e565b509250600180937f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d6126fe6126f0612caf565b604051918291858c84612472565b0390a1612608565b90612551565b835161274793925073ffffffffffffffffffffffffffffffffffffffff169160208501519160001461274c57505a905b604085015192612c8b565b6125cb565b9061273c565b83886108ce5a6040519384937f2139527400000000000000000000000000000000000000000000000000000000855260048501612422565b50815a1061250d565b6040805188815260208101849052919550600192917f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b91819081016126fe565b5080156124f6565b61283d6128696127fb6127f5602085015115153090612d4e565b93612e49565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826103d7565b51902090565b60405160208101917f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83526040820152604081526128ae6060826103d7565b5190205490565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e8683526040820152604081526128f46060826103d7565b51902054906bffffffffffffffffffffffff8260601c921690565b6040519061291c826103bb565b60006020838281520152565b908160409103126101d557602060405191612942836103bb565b805183520151602082015290565b60409073ffffffffffffffffffffffffffffffffffffffff6104f89493168152816020820152019061174a565b909491939291853560f81c6001909381908761299761290f565b9360408089161480612c6d575b612b70575b505050600180861614612b4a5760028581161460208501526007600286901c1688820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101908096918196602016612a199060051c90565b612a2290611693565b8a820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101959098899a81612a6e846127db565b988993612a7a93612082565b91612a8493613260565b9098612a9891600052602052604060002090565b90612aab91600052602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff16612ad491600052602052604060002090565b94815190868215159283612b3f575b505081612b30575b50612af35750565b6040517fccbb534f000000000000000000000000000000000000000000000000000000008152815160048201526020909101516024820152604490fd5b90506020820151101538612aeb565b141591508638612ae3565b86612b659792949550612b5d9398612082565b93909261303e565b919394909293929190565b8a81013560601c985060140192509087908a90849015612b94575b508291506129a9565b60038101955073ffffffffffffffffffffffffffffffffffffffff945081013560e81c92604092612c17929091612be291612bdb918990612bd589836116a6565b92612082565b36916104a6565b83519586809481937fccce3bc80000000000000000000000000000000000000000000000000000000083523060048401612950565b0392165afa80156110f557612c3592600091612c3e575b50926116a6565b86388981612b8b565b612c60915060403d604011612c66575b612c5881836103d7565b810190612928565b38612c2e565b503d612c4e565b5073ffffffffffffffffffffffffffffffffffffffff8916156129a4565b9160009391849360208451940192f190565b9160009291839260208351930191f490565b3d90604051916020818401016040528083526000602084013e565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e868352604082015260408152612d096060826103d7565b51902055565b60405160208101917fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1208352604082015260408152612d096060826103d7565b15612dfe576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a0815261286960c0826103d7565b4690612d57565b805160209091019060005b818110612e1d5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101612e10565b610100810151604051612e648161283d602082018095612e05565b51902090612e73815160ff1690565b60ff811680612eec57505090612869612e8f6040840151613bc3565b9261283d60806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b60018103612f4a57505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46693810193845290810191909152606081019290925290612869816080810161283d565b60028103612fa057505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e460208201908152918101929092526060820192909252612869816080810161283d565b600303612ff4575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46660208201908152918101929092526060820192909252612869816080810161283d565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b9061243a906040939695949660608452606084019161194d565b919492909260009560009560009560009560009561305a611f0a565b60028152937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9460005b8281106130b1575050505050505080511515806130a3575b612af35750565b50602081015184111561309c565b600381019d50959b50939950919750929091906130d5908b9085013560e81c6116a6565b958a6000848903613219575089915b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c036131e9575090600161311e89613125948789612082565b908b61297d565b9c939c9b929b9a919a99909a9b9d8e9d9e8f905b106131a35750928b88511461319a575b808b101561316857508a60c08501528992959295949194939093613084565b7f37daf62b0000000000000000000000000000000000000000000000000000000060005260048b905260245260446000fd5b60008852613149565b8d8f6108ce6131b485858c8e612082565b9390926040519485947fb006aba000000000000000000000000000000000000000000000000000000000865260048601613024565b9798999a9160016131ff8b61320694888a612082565b908661297d565b50929d919c909b929a9092918e8e613139565b916130e4565b73ffffffffffffffffffffffffffffffffffffffff6104f895936060938352166020820152816040820152019161194d565b908160209103126101d5575190565b9391909360009460009460005b81811061327b575050505050565b8481013560f881901c9860019092019788979692909160fc1c988915613a5f575060018914613a1f5760028914613862576003891461383357600489146137b2576006891461371257600589146136c457600789146135fd57600889146135a7576009891461347e57600a891461331b577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b9091929394959697506003891697881561346d575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691019081019081613393918787612082565b6040517f898bd921000000000000000000000000000000000000000000000000000000008152939184916133cb918a60048501611a6f565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa9182156110f55761340e9360009361343a575b5060ff909a168091019a613e8f565b908015613434579061342891600052602052604060002090565b955b939291909361326d565b50613428565b60ff91935061345f9060203d8111613466575b61345781836103d7565b810190613251565b92906133ff565b503d61344d565b8084013560f81c9850600101613330565b90919293949596975060038916978815613596575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190810190816134f6918787612082565b6040517f13792a4a0000000000000000000000000000000000000000000000000000000081529391849161352e918b6004850161198c565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa9182156110f5576135709360009361343a575060ff909a168091019a613e8f565b908015613590579061358a91600052602052604060002090565b9561342a565b5061358a565b8084013560f81c9850600101613493565b9850602087019750949593949293919290918201356135c586613e36565b81146135d5575b61357090613e50565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506135cc565b975090919293949597600f169687156136b2575b602060006136236136909a9b86613cfe565b9c9092918a6040516136668161283d8a82019485603c917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008252601c8201520190565b51902092604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa156110f5576135709060ff6000519a1680910199613d41565b600189019883013560f81c9750613611565b9850602087019750949593949293919290918201358085146136ea575b61357090613df7565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506136e1565b989091929394959662ffffff98506137346121e1600c8416603f9060021c1690565b91821561379e575b600316801561378d575b90819061377190613769908781013560e81c906003019c168c01809c8989612082565b90898b613260565b911115613784575b906135709291613dac565b99820199613779565b50600281019084013560f01c613746565b8482013560f81c925060019091019061373c565b975097613808613815929394959697600f61381d93169085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290830180938686612082565b908688613260565b9061358a92980198600052602052604060002090565b985096509394929391929091908082013590602001968015613590579061358a91600052602052604060002090565b90919293949596975060038916978815613a0e575b8084013560601c996138d691601401906138969060021c6003166121e1565b9085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9081019061393a60208c6138ec85858b8b612082565b919073ffffffffffffffffffffffffffffffffffffffff8c604051968795869485937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611a6f565b0392165afa9081156110f5577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000916000916139f0575b5016036139ac57509060ff61357092991680910199613d41565b6108ce6139bd8c9389938989612082565b906040519485947fb2fed7ae0000000000000000000000000000000000000000000000000000000086526004860161321f565b613a08915060203d8111611bb157611ba381836103d7565b38613992565b8381013560f81c9850600101613877565b98600f91929394959697985016968715613a4e575b60148101976135709160ff9091169084013560601c613d41565b8281013560f81c9750600101613a34565b98509091929394959698600f16978815613ab1575b5060206000613a876136909a9b86613cfe565b9c90916040519384938c859094939260ff6060936080840197845216602083015260408201520152565b60018101995083013560f81c97506020613a74565b73ffffffffffffffffffffffffffffffffffffffff9060405160208101917fff0000000000000000000000000000000000000000000000000000000000000083527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060601b16602183015260358201527f0000000000000000000000000000000000000000000000000000000000000000605582015260558152613b8c6075826103d7565b51902016301490565b805160209091019060005b818110613bad5750505090565b8251845260209384019390920191600101613ba0565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0613c09613bf383610454565b92613c0160405194856103d7565b808452610454565b0136602083013760005b8351811015613ce55780613c2960019286611731565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152613cd1610120826103d7565b519020613cde8285611731565b5201613c13565b509091506040516128698161283d602082018095613b95565b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff81116116a15791565b90604051907fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208301937f53657175656e6365207369676e65723a0a000000000000000000000000000000855260601b1660318301526045820152604581526128696065826103d7565b916040519160208301937f53657175656e6365206e657374656420636f6e6669673a0a00000000000000008552603884015260588301526078820152607881526128696098826103d7565b60405160208101917f53657175656e636520737461746963206469676573743a0a000000000000000083526038820152603881526128696058826103d7565b61283d6128696127fb6127f5600060208601511515612d4e565b60405160208101917f53657175656e636520616e792061646472657373207375626469676573743a0a83526040820152604081526128696060826103d7565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e63652073617069656e7420636f6e6669673a0a00000000000000865260601b166039840152604d830152606d820152606d8152612869608d826103d756fea2646970667358221220825b940dd691f79f4782ba8dca1eaa7ff741f07679c4faf28637d8117499069a64736f6c634300081c003360a034607457601f613dff38819003918201601f19168301916001600160401b03831184841017607957808492602094604052833981010312607457516001600160a01b0381168103607457608052604051613d6f90816100908239608051818181610fe90152818161112601526119ba0152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6080604052600436101561001e575b361561001c5761001c611b82565b005b60003560e01c806223de291461018d578063025b22bc1461018857806313792a4a14610183578063150b7a021461017e5780631626ba7e1461017957806319822f7c146101745780631a9b23371461016f5780631f6a1eb91461016a57806329561426146101655780634fcf3eca1461016057806351605d801461015b5780636ea44577146101565780638943ec02146101515780638c3f55631461014c57806392dcb3fc146101475780639c145aed14610142578063a65d69d41461013d578063aaf10f4214610138578063ad55366b14610133578063b93ea7ad1461012e578063bc197c8114610129578063f23a6e61146101245763f727ef1c0361000e576114a5565b611418565b611346565b6111e7565b61119b565b61114a565b6110db565b610fc3565b610f65565b610f29565b610ea5565b610e76565b610dd2565b610cb6565b610bfd565b610b1c565b610ab9565b610a04565b61097c565b6108ef565b6107f2565b6102db565b61024f565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101b557565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101b557565b6044359073ffffffffffffffffffffffffffffffffffffffff821682036101b557565b359073ffffffffffffffffffffffffffffffffffffffff821682036101b557565b9181601f840112156101b55782359167ffffffffffffffff83116101b557602083818601950101116101b557565b346101b55760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557610286610192565b5061028f6101ba565b506102986101dd565b5060843567ffffffffffffffff81116101b5576102b9903690600401610221565b505060a43567ffffffffffffffff81116101b55761001c903690600401610221565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55761030d610192565b30330361035a576020817f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca0392305573ffffffffffffffffffffffffffffffffffffffff60405191168152a1005b7fa19dbf00000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff8211176103d357604052565b610388565b6040810190811067ffffffffffffffff8211176103d357604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176103d357604052565b6040519061044460e0836103f4565b565b60405190610444610120836103f4565b359060ff821682036101b557565b359081151582036101b557565b67ffffffffffffffff81116103d35760051b60200190565b67ffffffffffffffff81116103d357601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926104cf82610489565b916104dd60405193846103f4565b8294818452818301116101b5578281602093846000960137010152565b9080601f830112156101b557816020610515933591016104c3565b90565b81601f820112156101b55780359061052f82610471565b9261053d60405194856103f4565b82845260208085019360051b830101918183116101b55760208101935b83851061056957505050505090565b843567ffffffffffffffff81116101b557820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082860301126101b5576105b0610435565b916105bd60208301610200565b83526040820135602084015260608201359267ffffffffffffffff84116101b55760e0836105f28860208098819801016104fa565b60408401526080810135606084015261060d60a08201610464565b608084015261061e60c08201610464565b60a0840152013560c082015281520194019361055a565b9080601f830112156101b557813561064c81610471565b9261065a60405194856103f4565b81845260208085019260051b8201019283116101b557602001905b8282106106825750505090565b6020809161068f84610200565b815201910190610675565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126101b55760043567ffffffffffffffff81116101b5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82850301126101b55761070c610446565b9061071981600401610456565b825261072760248201610464565b6020830152604481013567ffffffffffffffff81116101b55784600461074f92840101610518565b6040830152606481013560608301526084810135608083015260a481013567ffffffffffffffff81116101b55784600461078b928401016104fa565b60a083015260c481013560c083015260e481013560e083015261010481013567ffffffffffffffff81116101b557600485916107c8930101610635565b610100820152916024359067ffffffffffffffff82116101b5576107ee91600401610221565b9091565b346101b5576108003661069a565b909161010081019261081b6108168551516115ad565b6115cd565b9160005b85518051821015610882579061087c61085761083d8360019561164b565b5173ffffffffffffffffffffffffffffffffffffffff1690565b610861838861164b565b9073ffffffffffffffffffffffffffffffffffffffff169052565b0161081f565b5050838386610897336108618351518561164b565b526108a3818484611c54565b50156108b55760405160018152602090f35b6108eb906040519384937ff58cc8b5000000000000000000000000000000000000000000000000000000008552600485016118a6565b0390fd5b346101b55760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557610926610192565b5061092f6101ba565b5060643567ffffffffffffffff81116101b557610950903690600401610221565b505060206040517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b346101b55760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043560243567ffffffffffffffff81116101b5576020916109d46109da923690600401610221565b916118cb565b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b346101b55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043567ffffffffffffffff81116101b5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126101b557610a87602091602435604435916004016119a0565b604051908152f35b7fffffffff000000000000000000000000000000000000000000000000000000008116036101b557565b346101b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576020610afe600435610af981610a8f565b611e39565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043567ffffffffffffffff81116101b557610b66903690600401610221565b9060243567ffffffffffffffff81116101b557610b8a610b94913690600401610221565b9190935a93611f6e565b91610ba86060840151608085015190612232565b610bb3828585611c54565b929015610bc5575061001c935061238b565b836108eb86926040519384937fa2b6d61b000000000000000000000000000000000000000000000000000000008552600485016118a6565b346101b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043530330361035a578015610c8c576020817f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf855604051908152a1005b7f4294d1270000000000000000000000000000000000000000000000000000000060005260046000fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557600435610cec81610a8f565b30330361035a5773ffffffffffffffffffffffffffffffffffffffff610d1182611e39565b1615610d775760407fffffffff000000000000000000000000000000000000000000000000000000007f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19216610d68600082612be3565b815190815260006020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f1c3812cc000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b60009103126101b557565b346101b55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760207fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf854604051908152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101b5576004359067ffffffffffffffff82116101b5576107ee91600401610221565b610e7f36610e2d565b9030330361035a57610e9561001c925a92611f6e565b90610e9f826126af565b9061238b565b346101b55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557610edc610192565b5060443567ffffffffffffffff81116101b557610efd903690600401610221565b505060206040517f8943ec02000000000000000000000000000000000000000000000000000000008152f35b346101b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576020610a87600435612743565b346101b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576040610fa1600435612789565b73ffffffffffffffffffffffffffffffffffffffff8351921682526020820152f35b346101b557610fd136610e2d565b9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001680156110b157330361108357303b156101b5576110579160009160405193849283927f6ea4457700000000000000000000000000000000000000000000000000000000845260048401611b41565b038183305af1801561107e5761106957005b80611078600061001c936103f4565b80610dc7565b611917565b7f1d6ddbf4000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7fd13d78350000000000000000000000000000000000000000000000000000000060005260046000fd5b346101b55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101b55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576020305473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346101b55760c06111b76000806111b13661069a565b91612851565b926111c383929361399a565b906040519586526020860152151560408501526060840152608083015260a0820152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043561121d81610a8f565b6112256101ba565b9030330361035a5773ffffffffffffffffffffffffffffffffffffffff61124b82611e39565b166112c5577f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19173ffffffffffffffffffffffffffffffffffffffff7fffffffff000000000000000000000000000000000000000000000000000000006040931691166112b88183612be3565b82519182526020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f5b4d6d6a000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b9181601f840112156101b55782359167ffffffffffffffff83116101b5576020808501948460051b0101116101b557565b346101b55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55761137d610192565b506113866101ba565b5060443567ffffffffffffffff81116101b5576113a7903690600401611315565b505060643567ffffffffffffffff81116101b5576113c9903690600401611315565b505060843567ffffffffffffffff81116101b5576113eb903690600401610221565b50506040517fbc197c81000000000000000000000000000000000000000000000000000000008152602090f35b346101b55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55761144f610192565b506114586101ba565b5060843567ffffffffffffffff81116101b557611479903690600401610221565b505060206040517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b346101b55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576004356114df6101ba565b604435916bffffffffffffffffffffffff83168093036101b55730330361035a578273ffffffffffffffffffffffffffffffffffffffff8361156a7febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1967fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606097881b161785612b9e565b6040519384521660208301526040820152a1005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90600182018092116115bb57565b61157e565b919082018092116115bb57565b906115d782610471565b6115e460405191826103f4565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06116128294610471565b0190602036910137565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805182101561165f5760209160051b010190565b61161c565b919082519283825260005b8481106116ae5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b8060208092840101518282860101520161166f565b9080602083519182815201916020808360051b8301019401926000915b8383106116ef57505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080611762604085015160e0604086015260e0850190611664565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152970193019301919392906116e0565b906020808351928381520192019060005b8181106117b75750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016117aa565b805160ff1682526105159160208281015115159082015261010061184161181b604085015161012060408601526101208501906116c3565b606085015160608501526080850151608085015260a085015184820360a0860152611664565b9260c081015160c084015260e081015160e0840152015190610100818403910152611799565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b916118bd61051594926040855260408501906117e3565b926020818503910152611867565b906118e892916118d9611dde565b906003825260e0820152611c54565b5015611912577f1626ba7e0000000000000000000000000000000000000000000000000000000090565b600090565b6040513d6000823e3d90fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101b5570180359067ffffffffffffffff82116101b5576020019181360383136101b557565b908160209103126101b5575161051581610a8f565b604090610515949281528160208201520191611867565b91909173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169182156110b1578233036110835780611ad2575b506020915080610100611a02920190611923565b92611a3a60405194859384937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611989565b0381305afa90811561107e577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091611aa3575b501603611a9e57600090565b600190565b611ac5915060203d602011611acb575b611abd81836103f4565b810190611974565b38611a92565b503d611ab3565b823b156101b5576040517fb760faf900000000000000000000000000000000000000000000000000000000815230600482015292600091849160249183915af190811561107e57602092611a0292611b2c575b50906119ee565b806110786000611b3b936103f4565b38611b25565b916020610515938181520191611867565b3d15611b7d573d90611b6382610489565b91611b7160405193846103f4565b82523d6000602084013e565b606090565b600436108015611b8f5750565b611bc5906000357fffffffff00000000000000000000000000000000000000000000000000000000811691611c17575b50611e39565b73ffffffffffffffffffffffffffffffffffffffff8116611be35750565b60008091604051368382378036810184815203915af4611c01611b52565b9015611c0f57602081519101f35b602081519101fd5b7fffffffff000000000000000000000000000000000000000000000000000000008092503660040360031b1b161638611bbf565b901561165f5790565b91907f800000000000000000000000000000000000000000000000000000000000000080611cab611c858585611c4b565b357fff000000000000000000000000000000000000000000000000000000000000001690565b1614611d0a576000918291611cbf94612851565b905091909192808210611cda575050611cd79061399a565b91565b7ffd41fcba0000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b5050611d15906126af565b90611d1f82612789565b42811115611dac575073ffffffffffffffffffffffffffffffffffffffff81168015159081611da1575b50611d55575060019190565b7f8945c3130000000000000000000000000000000000000000000000000000000060005260048390523360245273ffffffffffffffffffffffffffffffffffffffff1660445260646000fd5b905033141538611d49565b7ff95b6ab700000000000000000000000000000000000000000000000000000000600052600484905260245260446000fd5b60405190610120820182811067ffffffffffffffff8211176103d3576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b73ffffffffffffffffffffffffffffffffffffffff906040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a120845216604082015260408152611eb06060826103f4565b519020541690565b90611ec282610471565b611ecf60405191826103f4565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611efd8294610471565b019060005b828110611f0e57505050565b602090604051611f1d816103b7565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c082015282828501015201611f02565b909392938483116101b55784116101b5578101920390565b919091611f79611dde565b6000815292600190823560f81c827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8183160161221b5750600060608701525b6007611fc860ff831660011c90565b16806121ca575b5060108181160361219557506001925b611fe884611eb8565b92604087019384526000905b85821061200357505050505050565b8281013560f81c9060010190918160018085160361217357506120473061202b83895161164b565b519073ffffffffffffffffffffffffffffffffffffffff169052565b600280841614612153575b600480841614612105575b6008808416146120d2575b6120bb6120b560c0856120948a608061208b8860108060019c9d1614935161164b565b51019015159052565b6120ab8a60a061208b88602080871614935161164b565b1660061c60031690565b60ff1690565b60c06120c883895161164b565b5101520190611ff4565b6001916120bb906120b59060c0908781013590602001969060606120f7878d5161164b565b510152959450505050612068565b9061214d908481013560e81c9060030161214661212d61212584846115c0565b838a8a611f56565b9190604061213c888d5161164b565b51019236916104c3565b90526115c0565b9061205d565b9083810135906020019190602061216b83895161164b565b510152612052565b61219092508481013560601c90601401929061202b83895161164b565b612047565b6020908116036121b75761ffff918381013560f01c906002015b921692611fdf565b60ff918381013560f81c906001016121af565b61220e919385929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290608087015238611fcf565b80850135606090811c908801526014019250611fb9565b9061223c82612743565b8181036122c257509060017f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f8819201908160405160208101907f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8252836040820152604081526122ac6060826103f4565b51902055604080519182526020820192909252a1565b917f9b6514f40000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b61230e604092959493956060835260608301906117e3565b9460208201520152565b9261051596959260c09592855260208501526040840152606083015260808201528160a08201520190611664565b6105159392606092825260208201528160408201520190611664565b61237861051594926060835260608301906117e3565b9260208201526040818403910152611664565b916000604082019384515190825b8281106123aa575b50505050505050565b6123b581885161164b565b51936123c460a0860151151590565b806126a7575b61266757506000936060810151801580158061265e575b6126265784906123f46080850151151590565b156125e05761249f9261241b855173ffffffffffffffffffffffffffffffffffffffff1690565b91156125da57505a905b61249a8b61246e60608d01516040890151908c8b604051998a967f4c4e814c00000000000000000000000000000000000000000000000000000000602089015260248801612318565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018552846103f4565b612b71565b156124e2575b506040805187815260208101839052600192917f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a91a15b01612399565b60c001805115612591576001815114612552575160021461250357386124a5565b9493505050507fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b9250612543612537612b83565b60405193849384612346565b0390a1388080808080806123a1565b50846108eb61255f612b83565b6040519384937f7f6b0bb100000000000000000000000000000000000000000000000000000000855260048501612362565b509250600180937f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d6125d26125c4612b83565b604051918291858c84612346565b0390a16124dc565b90612425565b835161261b93925073ffffffffffffffffffffffffffffffffffffffff169160208501519160001461262057505a905b604085015192612b5f565b61249f565b90612610565b83886108eb5a6040519384937f21395274000000000000000000000000000000000000000000000000000000008552600485016122f6565b50815a106123e1565b6040805188815260208101849052919550600192917f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b91819081016125d2565b5080156123ca565b61271161273d6126cf6126c9602085015115153090612c22565b93612d1d565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826103f4565b51902090565b60405160208101917f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83526040820152604081526127826060826103f4565b5190205490565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e8683526040820152604081526127c86060826103f4565b51902054906bffffffffffffffffffffffff8260601c921690565b604051906127f0826103d8565b60006020838281520152565b908160409103126101b557602060405191612816836103d8565b805183520151602082015290565b60409073ffffffffffffffffffffffffffffffffffffffff61051594931681528160208201520190611664565b909491939291853560f81c6001909381908761286b6127e3565b9360408089161480612b41575b612a44575b505050600180861614612a1e5760028581161460208501526007600286901c1688820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691019080969181966020166128ed9060051c90565b6128f6906115ad565b8a820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101959098899a81612942846126af565b98899361294e93611f56565b9161295893613134565b909861296c91600052602052604060002090565b9061297f91600052602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff166129a891600052602052604060002090565b94815190868215159283612a13575b505081612a04575b506129c75750565b6040517fccbb534f000000000000000000000000000000000000000000000000000000008152815160048201526020909101516024820152604490fd5b905060208201511015386129bf565b1415915086386129b7565b86612a399792949550612a319398611f56565b939092612f12565b919394909293929190565b8a81013560601c985060140192509087908a90849015612a68575b5082915061287d565b60038101955073ffffffffffffffffffffffffffffffffffffffff945081013560e81c92604092612aeb929091612ab691612aaf918990612aa989836115c0565b92611f56565b36916104c3565b83519586809481937fccce3bc80000000000000000000000000000000000000000000000000000000083523060048401612824565b0392165afa801561107e57612b0992600091612b12575b50926115c0565b86388981612a5f565b612b34915060403d604011612b3a575b612b2c81836103f4565b8101906127fc565b38612b02565b503d612b22565b5073ffffffffffffffffffffffffffffffffffffffff891615612878565b9160009391849360208451940192f190565b9160009291839260208351930191f490565b3d90604051916020818401016040528083526000602084013e565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e868352604082015260408152612bdd6060826103f4565b51902055565b60405160208101917fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1208352604082015260408152612bdd6060826103f4565b15612cd2576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a0815261273d60c0826103f4565b4690612c2b565b805160209091019060005b818110612cf15750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101612ce4565b610100810151604051612d3881612711602082018095612cd9565b51902090612d47815160ff1690565b60ff811680612dc05750509061273d612d6360408401516139fd565b9261271160806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b60018103612e1e57505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4669381019384529081019190915260608101929092529061273d8160808101612711565b60028103612e7457505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e46020820190815291810192909252606082019290925261273d8160808101612711565b600303612ec8575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4666020820190815291810192909252606082019290925261273d8160808101612711565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b9061230e9060409396959496606084526060840191611867565b9194929092600095600095600095600095600095612f2e611dde565b60028152937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9460005b828110612f8557505050505050508051151580612f77575b6129c75750565b506020810151841115612f70565b600381019d50959b5093995091975092909190612fa9908b9085013560e81c6115c0565b958a60008489036130ed575089915b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c036130bd5750906001612ff289612ff9948789611f56565b908b612851565b9c939c9b929b9a919a99909a9b9d8e9d9e8f905b106130775750928b88511461306e575b808b101561303c57508a60c08501528992959295949194939093612f58565b7f37daf62b0000000000000000000000000000000000000000000000000000000060005260048b905260245260446000fd5b6000885261301d565b8d8f6108eb61308885858c8e611f56565b9390926040519485947fb006aba000000000000000000000000000000000000000000000000000000000865260048601612ef8565b9798999a9160016130d38b6130da94888a611f56565b9086612851565b50929d919c909b929a9092918e8e61300d565b91612fb8565b73ffffffffffffffffffffffffffffffffffffffff610515959360609383521660208201528160408201520191611867565b908160209103126101b5575190565b9391909360009460009460005b81811061314f575050505050565b8481013560f881901c9860019092019788979692909160fc1c9889156139335750600189146138f357600289146137365760038914613707576004891461368657600689146135e6576005891461359857600789146134d1576008891461347b576009891461335257600a89146131ef577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b90919293949596975060038916978815613341575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691019081019081613267918787611f56565b6040517f898bd9210000000000000000000000000000000000000000000000000000000081529391849161329f918a60048501611989565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa91821561107e576132e29360009361330e575b5060ff909a168091019a613cc9565b90801561330857906132fc91600052602052604060002090565b955b9392919093613141565b506132fc565b60ff9193506133339060203d811161333a575b61332b81836103f4565b810190613125565b92906132d3565b503d613321565b8084013560f81c9850600101613204565b9091929394959697506003891697881561346a575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190810190816133ca918787611f56565b6040517f13792a4a00000000000000000000000000000000000000000000000000000000815293918491613402918b600485016118a6565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa91821561107e576134449360009361330e575060ff909a168091019a613cc9565b908015613464579061345e91600052602052604060002090565b956132fe565b5061345e565b8084013560f81c9850600101613367565b98506020870197509495939492939192909182013561349986613c70565b81146134a9575b61344490613c8a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506134a0565b975090919293949597600f16968715613586575b602060006134f76135649a9b86613b38565b9c9092918a60405161353a816127118a82019485603c917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008252601c8201520190565b51902092604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa1561107e576134449060ff6000519a1680910199613b7b565b600189019883013560f81c97506134e5565b9850602087019750949593949293919290918201358085146135be575b61344490613c31565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506135b5565b989091929394959662ffffff98506136086120b5600c8416603f9060021c1690565b918215613672575b6003168015613661575b9081906136459061363d908781013560e81c906003019c168c01809c8989611f56565b90898b613134565b911115613658575b906134449291613be6565b9982019961364d565b50600281019084013560f01c61361a565b8482013560f81c9250600190910190613610565b9750976136dc6136e9929394959697600f6136f193169085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290830180938686611f56565b908688613134565b9061345e92980198600052602052604060002090565b985096509394929391929091908082013590602001968015613464579061345e91600052602052604060002090565b909192939495969750600389169788156138e2575b8084013560601c996137aa916014019061376a9060021c6003166120b5565b9085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9081019061380e60208c6137c085858b8b611f56565b919073ffffffffffffffffffffffffffffffffffffffff8c604051968795869485937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611989565b0392165afa90811561107e577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000916000916138c4575b50160361388057509060ff61344492991680910199613b7b565b6108eb6138918c9389938989611f56565b906040519485947fb2fed7ae000000000000000000000000000000000000000000000000000000008652600486016130f3565b6138dc915060203d8111611acb57611abd81836103f4565b38613866565b8381013560f81c985060010161374b565b98600f91929394959697985016968715613922575b60148101976134449160ff9091169084013560601c613b7b565b8281013560f81c9750600101613908565b98509091929394959698600f16978815613985575b506020600061395b6135649a9b86613b38565b9c90916040519384938c859094939260ff6060936080840197845216602083015260408201520152565b60018101995083013560f81c97506020613948565b80151590816139a7575090565b90507fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8541490565b805160209091019060005b8181106139e75750505090565b82518452602093840193909201916001016139da565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0613a43613a2d83610471565b92613a3b60405194856103f4565b808452610471565b0136602083013760005b8351811015613b1f5780613a636001928661164b565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152613b0b610120826103f4565b519020613b18828561164b565b5201613a4d565b5090915060405161273d816127116020820180956139cf565b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff81116115bb5791565b90604051907fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208301937f53657175656e6365207369676e65723a0a000000000000000000000000000000855260601b16603183015260458201526045815261273d6065826103f4565b916040519160208301937f53657175656e6365206e657374656420636f6e6669673a0a000000000000000085526038840152605883015260788201526078815261273d6098826103f4565b60405160208101917f53657175656e636520737461746963206469676573743a0a0000000000000000835260388201526038815261273d6058826103f4565b61271161273d6126cf6126c9600060208601511515612c22565b60405160208101917f53657175656e636520616e792061646472657373207375626469676573743a0a835260408201526040815261273d6060826103f4565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e63652073617069656e7420636f6e6669673a0a00000000000000865260601b166039840152604d830152606d820152606d815261273d608d826103f456fea264697066735822122071c846bfb3a07ed1d03bb0cecee955d8b864be4c4d91b0f9a960528ecc060e8964736f6c634300081c0033608080604052346015576105b6908161001b8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c9081630c0340fc14610188575080639d043a66146100a05763eca9b31a1461004057600080fd5b3461009b5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009b577f721b5e17196ee8f054e1c6084536bdfe64f23e747e9bb98627db351b3286f7bf6020604051338152a1005b600080fd5b3461009b5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009b5760043573ffffffffffffffffffffffffffffffffffffffff8116810361009b5760243567ffffffffffffffff811161009b5760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011261009b576044359067ffffffffffffffff821161009b5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc833603011261009b57602092610180926004019160040190610307565b604051908152f35b3461009b5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009b5760207fed94f157df493252d8e5700fc6b9bf2466c66387b3c1a19816847dfa9f31005791338152a1005b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561009b570180359067ffffffffffffffff821161009b5760200191813603831361009b57565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761027357604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b92919267ffffffffffffffff821161027357604051916102ea601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200184610232565b82948184528183011161009b578281602093846000960137010152565b909160408101600461031982846101e1565b90501491821592610522575b505061051b5760c08236031261009b5760405160c0810181811067ffffffffffffffff82111761027357604052823573ffffffffffffffffffffffffffffffffffffffff8116810361009b57815260208301357fffffffff000000000000000000000000000000000000000000000000000000008116810361009b576020820152604081019060408401358252606081019360608101358552608081013567ffffffffffffffff811161009b57810136601f8201121561009b576103f09036906020813591016102a2565b608083015260a08101359067ffffffffffffffff821161009b57019060408236031261009b57604051916040830183811067ffffffffffffffff82111761027357604052803567ffffffffffffffff811161009b5781019036601f8301121561009b57610465602092369084813591016102a2565b845201359067ffffffffffffffff8216820361009b5760a0916020840152015260405160208101907f616363657074496d706c696369745265717565737400000000000000000000008252601581526104bf603582610232565b51902092519051907fffffffffffffffffffffffffffffffffffffffff000000000000000000000000604051936020850195865260601b1660408401526054830152607482015260748152610515609482610232565b51902090565b5050600090565b61052c92506101e1565b60041161009b57357fffffffff00000000000000000000000000000000000000000000000000000000167feca9b31a000000000000000000000000000000000000000000000000000000001415388061032556fea2646970667358221220b244c0331517bebc589a2a51667c56df4245db1deb284e6da3f0e5a41bbd9d1664736f6c634300081c0033a264697066735822122084914abce02a75885d51abbfb63b150330b564a55a53eb92eaf3e6ad5ef47cc664736f6c634300081c0033","sourceMap":"969:6879:90:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1035:32;969:6879;1035:32;;;969:6879;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1065:26:16;969:6879:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2723:18:9;969:6879:90;;;;;;;2723:18:9;969:6879:90;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;2024:14:2;;969:6879:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2024:14:2;;5633:79:90;969:6879;;2024:14:2;;;;:::i;:::-;2556:4:48;;;969:6879:90;;:::i;:::-;5633:79;;:::i;:::-;969:6879;;;;5719:29;336:42:2;5719:29:90;;;;969:6879;;5719:29;2024:14:2;5719:29:90;;969:6879;5719:29;;969:6879;5719:29;;;;;336:42:2;5719:29:90;;;;;;;;;;;;969:6879;;;2556:4:48;969:6879:90;;5792:6;969:6879;;;;;5779:58;;;;;;2024:14:2;5779:58:90;;2556:4:48;969:6879:90;5779:58;;2556:4:48;;;;;;:::i;:::-;969:6879:90;;5719:29;2556:4:48;;969:6879:90;2556:4:48;;;;969:6879:90;5779:58;;;;;;;;;;;;969:6879;5844:95;2556:4:48;;969:6879:90;;;2024:14:2;;2556:4:48;2024:14:2;;:::i;:::-;969:6879:90;2556:4:48;;969:6879:90;;;;;;;;5844:95;:::i;:::-;969:6879;;5779:58;;;;;;;;;;;;;;;:::i;:::-;;;969:6879;;;;5844:95;969:6879;;5779:58;;969:6879;-1:-1:-1;969:6879:90;;5779:58;;;;;;969:6879;;;;;;;;;5719:29;;;;;;;;;:::i;:::-;969:6879;;5719:29;;;;;;969:6879;;;;5719:29;969:6879;;;;;;;;;5719:29;969:6879;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1170:30;969:6879;;;;;;;;;;;;;;;;;;;;;1009:22;969:6879;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2575:18:9;969:6879:90;;;;:::i;:::-;;2024:14:2;969:6879:90;;2024:14:2;;;:::i;:::-;969:6879:90;;;2575:18:9;969:6879:90;;;;;;;;;;;;;;;;;;;:::i;:::-;;;2024:14:2;;;;;:::i;:::-;969:6879:90;;;;;;;;;;;;;;;;;;;;;;;;;336:42:2;3501:27:90;;;;969:6879;;;2024:14:2;3501:27:90;;3511:16;;;969:6879;3501:27;;969:6879;3501:27;;969:6879;3501:27;336:42:2;3501:27:90;;;;;;;;969:6879;2556:4:48;;2024:14:2;;3627:79:90;969:6879;;2024:14:2;;;;:::i;3627:79:90:-;969:6879;3842:6;969:6879;;336:42:2;3834:29:90;;;;969:6879;;3834:29;2024:14:2;3834:29:90;;969:6879;3834:29;;969:6879;;;;;;3834:29;;;;;336:42:2;3834:29:90;;;;;;;;;;;969:6879;;;;;;;336:42:2;3870:29:90;;;;969:6879;;3870:29;2024:14:2;3870:29:90;;969:6879;3870:29;;969:6879;3870:29;;969:6879;3870:29;;336:42:2;3870:29:90;;;;;;;;;;;969:6879;;;;;;;3906:59;336:42:2;3906:59:90;;;;969:6879;;3906:59;2024:14:2;3906:59:90;;3920:4;969:6879;3906:59;;969:6879;3920:4;969:6879;2763:4:48;;969:6879:90;2763:4:48;3834:29:90;2763:4:48;;969:6879:90;3920:4;2763::48;;;969:6879:90;2763:4:48;;;969:6879:90;3906:59;;;;;336:42:2;3906:59:90;;;;;;;;;;;;969:6879;;;;;;3842:6;969:6879;;;;3976:46;969:6879;;;;;;3976:46;969:6879;;4152:69;;;;;;2024:14:2;4152:69:90;;2763:4:48;969:6879:90;4152:69;;969:6879;;;;;;:::i;:::-;;;;;;;;3834:29;969:6879;;;4152:69;;;;;;;;;;;;;969:6879;2556:4:48;4228:68:90;2024:14:2;969:6879:90;;;2024:14:2;;;;;:::i;:::-;969:6879:90;2556:4:48;;969:6879:90;;;;;;;;;;4228:68;:::i;:::-;969:6879;;;;;;;;;3842:6;969:6879;;;;;4311:27;;;;2024:14:2;4311:27:90;;;969:6879;4311:27;;969:6879;4311:27;;;;;;;;;;;969:6879;2556:4:48;969:6879:90;;2024:14:2;;;;;:::i;:::-;969:6879:90;2556:4:48;;969:6879:90;;;;;;;;;;336:42:2;2484:29:4;;;;969:6879:90;;;;;2484:29:4;;;;;2024:14:2;2484:29:4;;969:6879:90;2484:29:4;;969:6879:90;;;;;;3834:29;969:6879;;;;;;;;:::i;:::-;2484:29:4;;336:42:2;2484:29:4;;;;;;;;969:6879:90;4414:23;;969:6879;4405:91;4414:23;;2556:4:48;2024:14:2;969:6879:90;;2024:14:2;;;:::i;:::-;969:6879:90;2556:4:48;;969:6879:90;;;;;;;;4405:91;:::i;2484:29:4:-;;;;;:::i;:::-;969:6879:90;;2484:29:4;;;;969:6879:90;;;;2484:29:4;969:6879:90;;;;;;;;;4311:27;;;;;;;;;;;;;;;;;;:::i;:::-;;;969:6879;;;;;;;4311:27;;;;;;;;4152:69;;;;;;;;;;;;;;;;;:::i;:::-;;;969:6879;;;;;4152:69;;;;;;;;;3906:59;;;;;;;;;:::i;:::-;969:6879;;3906:59;;;;;;969:6879;;;;3870:29;;;;;:::i;:::-;969:6879;;3870:29;;;;3834;;;;;:::i;:::-;969:6879;;3834:29;;;;3501:27;;;;;:::i;:::-;969:6879;;3501:27;;;;969:6879;;;;;;;;;;;;;;;;1035:32;969:6879;;;;;;;;;;;;;;;;;;;;;;2876:18:9;969:6879:90;;;;:::i;:::-;;2024:14:2;969:6879:90;;2024:14:2;;;:::i;:::-;969:6879:90;;;2876:18:9;969:6879:90;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;2024:14:2;;;:::i;:::-;969:6879:90;2024:14:2;;969:6879:90;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;3653:18:9;969:6879:90;;;;:::i;:::-;;2024:14:2;969:6879:90;;2024:14:2;;;:::i;:::-;969:6879:90;;;3653:18:9;969:6879:90;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;2024:14:2;;;:::i;:::-;969:6879:90;2024:14:2;;969:6879:90;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6924:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;969:6879;;:::i;:::-;2556:4:48;;;;969:6879:90;;;;2024:14:2;;;;;:::i;:::-;7136:1:90;969:6879;;2321:4:48;;;;;;;;;;7094:20:90;;969:6879;7094:20;;;;:44;;;969:6879;;7144:287;969:6879;;7264:29;2321:4:48;7241:53:90;;;969:6879;7241:53;;;;;;:::i;:::-;969:6879;;2024:14:2;;;;:::i;:::-;969:6879:90;;;7170:261;2321:4:48;7170:261:90;;969:6879;7170:261;;;969:6879;7170:261;969:6879;7170:261;;969:6879;7170:261;2321:4:48;7170:261:90;;2763:4:48;7170:261:90;2321:4:48;7170:261:90;;2763:4:48;7136:1:90;2321:4:48;7170:261:90;;969:6879;7144:20;;:287;;;;:::i;:::-;;;:::i;:::-;;969:6879;;3205:20:97;2321:4:48;3205:20:97;;;969:6879:90;;;;;;;;;;;;2556:4:48;2321;969:6879:90;;;;;;;;;;;;2321:4:48;969:6879:90;;;;;;;;;;;;2321:4:48;969:6879:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2321:4:48;969:6879:90;;;2321:4:48;969:6879:90;;;2321:4:48;969:6879:90;;;2321:4:48;969:6879:90;;;;;;;;;;;;;:::i;:::-;;2321:4:48;969:6879:90;;;;;;;;;;;;;;;;;;;;;;;;;;;2321:4:48;969:6879:90;;;;;;;;;;;;;;;;;;3205:20:97;;;;;;969:6879:90;3205:20:97;;;;2321:4:48;3205:20:97;;;;;;:::i;:::-;969:6879:90;;3192:34:97;;;;2024:14:2;3192:34:97;;2321:4:48;969:6879:90;3192:34:97;;969:6879:90;7241:53;969:6879;;;;:::i;:::-;3192:34:97;;336:42:2;3192:34:97;;;;;;;969:6879:90;3192:34:97;;;;;;;;;969:6879:90;;;;;;;;;;2321:4:48;969:6879:90;;;2024:14:2;969:6879:90;;;;2321:4:48;969:6879:90;;;2024:14:2;;;:::i;:::-;;;969:6879:90;2024:14:2;;;969:6879:90;;;;;;;;;;;:::i;:::-;;3274:11:97;;:::i;:::-;969:6879:90;;;3266:48:97;;;;;2024:14:2;3266:48:97;;969:6879:90;;3266:48:97;;969:6879:90;;;;;;:::i;:::-;;;;;;;;7241:53;969:6879;;;;;;;2321:4:48;969:6879:90;;;;;;;;;;;:::i;:::-;3266:48:97;;;336:42:2;3266:48:97;;;;;;;;;;;969:6879:90;7612:57;336:42:2;7612:57:90;;;;969:6879;;7612:57;2024:14:2;7612:57:90;;7136:1;969:6879;7612:57;;969:6879;2763:4:48;7241:53:90;2763:4:48;;969:6879:90;2763:4:48;969:6879:90;2763:4:48;;969:6879:90;7136:1;969:6879;2763:4:48;;969:6879:90;2763:4:48;;;969:6879:90;7612:57;;;;;336:42:2;7612:57:90;;;;;;;;;;;969:6879;;;7680:24;2321:4:48;969:6879:90;7697:6;969:6879;;;;;;;7680:24;969:6879;2321:4:48;969:6879:90;;336:42:2;7757:29:90;;;;969:6879;;7757:29;2024:14:2;7757:29:90;;969:6879;7757:29;;969:6879;7757:29;;7241:53;7757:29;;336:42:2;7757:29:90;;;;;;;;;;;969:6879;;;;7697:6;969:6879;;7792:49;;;;;969:6879;;;;;;;;7792:49;;;;;;2024:14:2;7792:49:90;;2321:4:48;969:6879:90;7792:49;;969:6879;7241:53;969:6879;;;;:::i;:::-;7792:49;;;;;;;;;;;;969:6879;;7792:49;;;;;:::i;:::-;969:6879;;7792:49;969:6879;7792:49;969:6879;;;;;;;;7757:29;;;;;:::i;:::-;969:6879;;7757:29;;;;;969:6879;;;;;;;;;7612:57;;;;;:::i;:::-;969:6879;;7612:57;;;;3266:48:97;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;3192:34;;;;;;;;;;;;;:::i;:::-;;;;;969:6879:90;;;;;;;;;;;;;;;;;;;2321:4:48;969:6879:90;;;;;;;;7136:1;969:6879;;;;2321:4:48;969:6879:90;;;;;7136:1;969:6879;;;;;;;;;2321:4:48;969:6879:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2321:4:48;969:6879:90;;;;;2321:4:48;969:6879:90;;;2321:4:48;969:6879:90;;;;;2321:4:48;969:6879:90;;;;;;;;;;;;;;;;;;;2321:4:48;;969:6879:90;;;2024:14:2;;;:::i;:::-;2321:4:48;;;;;;;;969:6879:90;2321:4:48;;;;;969:6879:90;2321:4:48;;;;;;;;;;;;;;;;;;;;;;;;;;;6924:13:90;969:6879;;;;;;;;;;6924:13;969:6879;;;;;;;;;;;;;;;;;;;;;3162:18:9;969:6879:90;;;;:::i;:::-;;2024:14:2;969:6879:90;;2024:14:2;;;:::i;:::-;969:6879:90;;;3162:18:9;969:6879:90;;;;;;;;;;;;;;;;;;;:::i;:::-;;;2024:14:2;;;;;:::i;:::-;969:6879:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3149:35;;;336:42:2;3139:46:90;;;;969:6879;;3139:46;2024:14:2;3139:46:90;;969:6879;3139:46;;969:6879;3139:46;;969:6879;3139:46;336:42:2;3139:46:90;;;;;;;;;;;969:6879;3192:22;;336:42:2;3192:22:90;;;;969:6879;;2024:14:2;3192:22:90;;;969:6879;3192:22;;969:6879;3192:22;;969:6879;3192:22;;336:42:2;3192:22:90;;;;;;;;;;;969:6879;;;;;3236:75;3259:37;969:6879;3236:75;;;969:6879;3236:75;;969:6879;;3236:75;;;969:6879;3236:75;;:::i;:::-;336:42:2;3220:92:90;;;;969:6879;;;;;3220:92;;;;2024:14:2;3220:92:90;;969:6879;;3220:92;;969:6879;;;;;;:::i;:::-;3220:92;;;336:42:2;3220:92:90;;;;;;;;;;;969:6879;;;3318:69;969:6879;;;3331:6;969:6879;;;;;3318:69;;;;;;2024:14:2;3318:69:90;;969:6879;;;;;;;;;3318:69;;;:::i;:::-;;;;;;;;;;;969:6879;;;3318:69;;;969:6879;3318:69;969:6879;3318:69;;;;;;;;:::i;:::-;;;;;:::i;:::-;;969:6879;;3318:69;;;;;3220:92;;;;;:::i;:::-;969:6879;;3220:92;;;;969:6879;;;3192:22;;;;;:::i;:::-;969:6879;;3192:22;;;;3139:46;;;;;:::i;:::-;969:6879;;3139:46;;;;969:6879;;;;;;;;;;;;3346:26:9;969:6879:90;;;;:::i;:::-;2024:14:2;969:6879:90;;2024:14:2;;;:::i;:::-;969:6879:90;;;3346:26:9;969:6879:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2024:14:2;;;:::i;:::-;969:6879:90;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2556:4:48;;;4761:14:90;969:6879;4761:14;;969:6879;4837:8;2024:14:2;969:6879:90;10027:18:48;969:6879:90;4872:6;969:6879;;;9972:18:48;;969:6879:90;;;1206:48:48;;;;;;;969:6879:90;;1077:202:48;969:6879:90;1077:202:48;;969:6879:90;539:66:48;969:6879:90;;709:66:48;969:6879:90;868:66:48;;969:6879:90;868:66:48;;;;969:6879:90;868:66:48;;;969:6879:90;868:66:48;;;969:6879:90;868:66:48;1077:202;;;;;;:::i;:::-;969:6879:90;1060:225:48;;10027:18;;:::i;:::-;969:6879:90;;10068:48:48;969:6879:90;10068:48:48;;969:6879:90;;;;4872:6;969:6879;;;;;;;;10068:48:48;;;;;;:::i;:::-;969:6879:90;10058:59:48;;969:6879:90;;4829:51;2024:14:2;4829:51:90;;969:6879;4829:51;;969:6879;2556:4:48;;;969:6879:90;868:66:48;4829:51:90;;;336:42:2;4829:51:90;;;;;;;;969:6879;;;;4829:51;;;1206:48:48;2024:14:2;969:6879:90;4955:6;2024:14:2;969:6879:90;;;;4943:19;2024:14:2;4943:19:90;;969:6879;4943:19;;969:6879;4943:19;;2556:4:48;4943:19:90;336:42:2;4943:19:90;;;;;;;;;;;1206:48:48;969:6879:90;;;4974:14;2024::2;4974::90;;969:6879;4974:14;;969:6879;4974:14;;2556:4:48;4974:14:90;336:42:2;4974:14:90;;;;;;;;;;;1206:48:48;969:6879:90;;;4995:14;2024::2;4995::90;;969:6879;4995:14;;969:6879;4995:14;;2556:4:48;4995:14:90;336:42:2;4995:14:90;;;;;;;;;;;1206:48:48;969:6879:90;;;;5016:14;2024::2;5016::90;;969:6879;;5016:14;;2556:4:48;5016:14:90;;2556:4:48;5016:14:90;336:42:2;5016:14:90;;;;;;;969:6879;;;;;5016:14;4926:105;5016:14;969:6879;5016:14;;2024::2;5016::90;969:6879;5016:14;2024::2;5016::90;;;;;;1206:48:48;969:6879:90;;2556:4:48;969:6879:90;;;4926:105;;;;2024:14:2;4926:105:90;;;969:6879;;;;2024:14:2;;;;;:::i;:::-;;;2556:4:48;2024:14:2;;;2556:4:48;2024:14:2;969:6879:90;;2556:4:48;;;4955:6:90;2556:4:48;;2024:14:2;;;:::i;:::-;;;2556:4:48;2024:14:2;;;2556:4:48;2024:14:2;969:6879:90;;2556:4:48;;969:6879:90;2556:4:48;;;2024:14:2;;;:::i;:::-;;;2556:4:48;2024:14:2;;;2556:4:48;2024:14:2;969:6879:90;;2556:4:48;;969:6879:90;2556:4:48;;;2024:14:2;;;:::i;:::-;;;4926:105:90;;1077:202:48;4926:105:90;;;;;;:::i;:::-;2024:14:2;;:::i;:::-;2556:4:48;969:6879:90;;;;;;;;2024:14:2;;;;;:::i;:::-;969:6879:90;2556:4:48;;2024:14:2;969:6879:90;;;;;;;;;;;;;;;;;;;;;;;;;2024:14:2;;;:::i;:::-;;;;969:6879:90;2024:14:2;;;969:6879:90;;;;;;;2024:14:2;;:::i;:::-;;;;969:6879:90;2024:14:2;;;969:6879:90;;;;;;;2024:14:2;;:::i;:::-;;;969:6879:90;2024:14:2;;;969:6879:90;;;;;;;;;;;:::i;:::-;;6692:11:97;;:::i;:::-;969:6879:90;;;6684:48:97;;;;;2024:14:2;6684:48:97;;868:66:48;969:6879:90;6684:48:97;;969:6879:90;;;;;;:::i;:::-;;;;;;;;2556:4:48;969:6879:90;;;;;;;;;;;;4829:51;969:6879;;;;;;:::i;:::-;6684:48:97;;;336:42:2;6684:48:97;;;;;;;;;;;1206::48;2556:4;5181:42:90;2024:14:2;969:6879:90;;;2024:14:2;;;;:::i;:::-;2556:4:48;;;5181:42:90;:::i;:::-;969:6879;;;;;336:42:2;5230:29:90;;;;969:6879;;5230:29;2024:14:2;5230:29:90;;969:6879;5230:29;;969:6879;5230:29;;2556:4:48;5230:29:90;;336:42:2;5230:29:90;;;;;;;;;;;;;1206:48:48;969:6879:90;;2556:4:48;969:6879:90;;4872:6;969:6879;;;;;;5290:58;;;;;;2024:14:2;5290:58:90;;868:66:48;969:6879:90;5290:58;;2556:4:48;969:6879:90;2556:4:48;;;;:::i;:::-;;;;;969:6879:90;2556:4:48;4829:51:90;2556:4:48;;969:6879:90;5290:58;;;;;;;;;;;;;1206:48:48;2556:4;;;5355:68:90;2556:4:48;;969:6879:90;;2024:14:2;;;;;:::i;:::-;4837:8:90;2556:4:48;;;;;;;;5355:68:90;:::i;5290:58::-;;;;;;;;;;;;;;;;:::i;:::-;;;969:6879;;;;;;;2556:4:48;5290:58:90;;;;;;;;969:6879;;;;;;;;;5230:29;;;;;;;;;:::i;:::-;969:6879;;5230:29;;;;;;969:6879;;;;5230:29;969:6879;;;;;;;;;6684:48:97;;;;;;;;;;;;;;:::i;:::-;;;;;5016:14:90;2556:4:48;5016:14:90;;;;;;;;;;;;;;;:::i;:::-;;;;;;4995;;;;;;;;;;;;;;:::i;:::-;;;;;4974;;;;;;;;;;;;;;:::i;:::-;;;;;4943:19;;;;;;;;;;;;;;:::i;:::-;;;;;4829:51;;;;;;868:66:48;4829:51:90;;868:66:48;4829:51:90;;;;;;868:66:48;4829:51:90;;;:::i;:::-;;;2556:4:48;;;;;;969:6879:90;;;2556:4:48;;;;;969:6879:90;;2556:4:48;;;;;;4829:51:90;;;;;;;;-1:-1:-1;4829:51:90;;1206:48:48;1240:13;1206:48;;;969:6879:90;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;6585:35;;;336:42:2;6575:46:90;;;;969:6879;;6575:46;2024:14:2;6575:46:90;;969:6879;6575:46;;969:6879;6575:46;;969:6879;6575:46;336:42:2;6575:46:90;;;;;;;;;;;969:6879;6628:22;;336:42:2;6628:22:90;;;;969:6879;;2024:14:2;6628:22:90;;;969:6879;6628:22;;969:6879;6628:22;;969:6879;6628:22;;336:42:2;6628:22:90;;;;;;;;;;;969:6879;;;;;6672:75;6695:37;969:6879;6672:75;;;969:6879;6672:75;;969:6879;;6672:75;;;;;;:::i;:::-;336:42:2;6656:92:90;;;;969:6879;;;;;6656:92;;;;2024:14:2;6656:92:90;;969:6879;;6656:92;;969:6879;;;;;;:::i;:::-;6656:92;;;336:42:2;6656:92:90;;;;;;;;;;;969:6879;;;;6767:6;969:6879;;6754:43;;;;;;969:6879;;;;;;;6754:43;;;;;;2024:14:2;6754:43:90;;969:6879;;6754:43;;969:6879;;;;;;:::i;:::-;6754:43;;;;;;;;;;969:6879;;6656:92;;;;;:::i;:::-;969:6879;;6656:92;;;;6628:22;;;;;:::i;:::-;969:6879;;6628:22;;;;;969:6879;;;;;;;;;6575:46;;;;;:::i;:::-;969:6879;;6575:46;;;;969:6879;;;;;;;;;;;;;;1107:29;969:6879;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;6177:7;969:6879;;;;;;;6152:46;;;;;;;;969:6879;6152:46;;;;;;;;;;;;;;969:6879;;;;;;;;;;;;;;;6152:46;;;;;;;;;6177:7;969:6879;6285:15;2024:14:2;;969:6879:90;;2024:14:2;6245:56:90;;969:6879;;;;;6245:56;;969:6879;2024:14:2;;;969:6879:90;;;;;;2024:14:2;;969:6879:90;;2024:14:2;;969:6879:90;;;6245:56;;;;;;969:6879;6245:56;;;;;969:6879;;;;;;;;336:42:2;6309:29:90;;;;969:6879;;6309:29;2024:14:2;6309:29:90;;969:6879;6309:29;;969:6879;6309:29;;6285:15;6309:29;;336:42:2;6309:29:90;;;;;;;;;;;969:6879;6344:52;;336:42:2;6344:52:90;;;;969:6879;;2024:14:2;6344:52:90;;6360:35;969:6879;6344:52;;969:6879;6344:52;;6285:15;6344:52;;336:42:2;6344:52:90;;;;;;;;;;;969:6879;6402:51;;;;;;;969:6879;;;;;;;6402:51;;;;;;2024:14:2;6402:51:90;;969:6879;;6402:51;;969:6879;6285:15;969:6879;;;;:::i;6344:52::-;;;;;:::i;:::-;969:6879;;6344:52;;;;6309:29;;;;;:::i;:::-;969:6879;;6309:29;;;;6245:56;;;;969:6879;6245:56;969:6879;6245:56;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;6152:46;969:6879;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2639:7;969:6879;;;;;;2614:46;;;;;;;;;969:6879;2614:46;;;;;;;;;;;;;969:6879;;;;;;;;;;;;;;;2614:46;;;;;;;;;2639:7;969:6879;;2024:14:2;;969:6879:90;;2024:14:2;2707:56:90;;969:6879;;;;;2707:56;;969:6879;2024:14:2;;;969:6879:90;;;;;;2024:14:2;;969:6879:90;;2024:14:2;;969:6879:90;;;2707:56;;;;;;;;;;;969:6879;;;;;;336:42:2;2771:29:90;;;;969:6879;;2771:29;2024:14:2;2771:29:90;;969:6879;2771:29;;969:6879;2771:29;;969:6879;2771:29;;336:42:2;2771:29:90;;;;;;;;969:6879;2806:52;336:42:2;2806:52:90;;;;969:6879;;;2024:14:2;2806:52:90;;2822:35;969:6879;2806:52;;969:6879;2806:52;;969:6879;2806:52;;336:42:2;2806:52:90;;;;;;;;969:6879;;;;;;2864:77;969:6879;;;2864:77;;;;;;2024:14:2;2864:77:90;;969:6879;;;;;;;;;2864:77;;;:::i;:::-;;969:6879;;2864:77;;;;;;;;969:6879;;;2806:52;;;;;:::i;:::-;969:6879;;2806:52;;;;2771:29;;;;;;;;:::i;:::-;;;;;2707:56;;;;969:6879;2707:56;969:6879;2707:56;;;;;;;:::i;:::-;;;;969:6879;;;;;;;;;;;;;;;;;3501:18:9;969:6879:90;;;;;;;3501:18:9;969:6879:90;;;;;;;;;;;;;;;;;;:::i;:::-;2024:14:2;;969:6879:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3794:16:9;969:6879:90;;;;;;;3794:16:9;969:6879:90;;;;;;;;;;;;;;;;;;:::i;:::-;2024:14:2;;969:6879:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1071:32;969:6879;;;;;;;;;;;;;;;;;;;;3948:19:9;969:6879:90;;;;:::i;:::-;2024:14:2;969:6879:90;;2024:14:2;;;:::i;:::-;969:6879:90;;;3948:19:9;969:6879:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;2024:14:2;;;:::i;:::-;969:6879:90;2024:14:2;;969:6879:90;;;;;;;;;;;:::i;:::-;;2024:14:2;969:6879:90;;2024:14:2;;;:::i;:::-;969:6879:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2024:14:2;;;;;:::i;:::-;969:6879:90;;;;;;;;;;;;;;;;;;;;;;;;;1231:21;969:6879;;;;;;;;;;;;;;;;;;;;;;;;;3018:16:9;969:6879:90;;;;;;;3018:16:9;969:6879:90;;;;;;;;;;;;;;;;;;:::i;:::-;2024:14:2;;969:6879:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1204:23;969:6879;;;;;;;;;;;;;;;;;;;;1297:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;969:6879;;1287:23;969:6879;;;;;;;;1287:23;969:6879;;;1329:20;;;;;;;;1297:13;1329:20;;;;;;;;;;;;;;;;;;;969:6879;;;;1316:33;969:6879;;;1316:33;969:6879;;1287:23;969:6879;;;;;;1370:55;;;;;;;;;;1297:13;1370:55;;;;;;969:6879;1370:55;;;;;;;969:6879;;1316:33;969:6879;;;1370:55;;;;;;;;;969:6879;;;1355:70;969:6879;;;1355:70;969:6879;2933:19:15;1493:3:90;1546:1263:15;;2933:19;2556:4:48;969:6879:90;;;;;;2024:14:2;;;;:::i;:::-;969:6879:90;2556:4:48;;969:6879:90;1316:33;969:6879;;;;;9786:54:15;;969:6879:90;1316:33;9786:54:15;;;;;;;;;;969:6879:90;;;;;;:::i;:::-;;;;;;9786:54:15;969:6879:90;9786:54:15;;;;;;:::i;:::-;969:6879:90;9371:159:15;679:42;9371:159;;;969:6879:90;1474:23;969:6879;;;1512:17;2024:14:2;1512:17:90;;969:6879;1512:17;;969:6879;1316:33;1512:17;9786:54:15;1512:17:90;336:42:2;1512:17:90;;;;;;;;969:6879;1512:17;;;;;969:6879;;;;;1503:26;969:6879;;;1503:26;969:6879;;;1619:19;2024:14:2;1619:19:90;;969:6879;1619:19;;969:6879;1619:19;;9786:54:15;1619:19:90;336:42:2;1619:19:90;;;;;;;;;;;969:6879;;;;1591:54;;2024:14:2;;1591:54:90;1316:33;1591:54;;2024:14:2;;;;;969:6879:90;;2024:14:2;;1316:33:90;2024:14:2;;;;;;:::i;:::-;;;;;;;;1591:54:90;;;;;;;;;;:::i;:::-;969:6879;;4632:24:97;2024:14:2;4632:24:97;;304:1:98;969:6879:90;4632:24:97;;969:6879:90;4632:24:97;;9786:54:15;4632:24:97;336:42:2;4632:24:97;;;;;;;;;;;969:6879:90;;;;4690:25:97;2024:14:2;4690:25:97;;;969:6879:90;4690:25:97;;969:6879:90;4690:25:97;;9786:54:15;4690:25:97;336:42:2;4690:25:97;;;;;;;;969:6879:90;4690:25:97;;;;;;;;;;969:6879:90;;;;;2024:14:2;969:6879:90;;;2024:14:2;969:6879:90;;;;;;;1316:33;969:6879;;;2024:14:2;969:6879:90;;;;1316:33;969:6879;;;2024:14:2;;;:::i;:::-;;;969:6879:90;2024:14:2;;;969:6879:90;2024:14:2;969:6879:90;;;;1316:33;969:6879;;;2024:14:2;;;:::i;:::-;;;;969:6879:90;2024:14:2;;;969:6879:90;;;;;;;2024:14:2;;:::i;:::-;;;969:6879:90;2024:14:2;;;969:6879:90;;;;;;;;;;;:::i;:::-;;4828:11:97;;:::i;:::-;969:6879:90;;;4820:42:97;;;;;2024:14:2;4820:42:97;;969:6879:90;;4820:42:97;;969:6879:90;;;;;;:::i;:::-;;;;;;;;9786:54:15;969:6879:90;;;;;;;1316:33;969:6879;;;;;;;;;;;:::i;:::-;4820:42:97;;;336::2;4820::97;;;;;;;;;;;969:6879:90;;;;1297:13;2024:14:2;;;;;1535:112:90;2024:14:2;;:::i;:::-;1287:23:90;2024:14:2;;;;969:6879:90;2024:14:2;1316:33:90;1287:23;2024:14:2;;;1287:23:90;;;2024:14:2;;;;;;;;;;;;;304:1:98;2024:14:2;;;;969:6879:90;2024:14:2;;;1535:112:90;2024:14:2;;;;969:6879:90;2024:14:2;;:::i;:::-;969:6879:90;304:1:98;969:6879:90;;;;;;1316:33;969:6879;;;2024:14:2;969:6879:90;;;;1316:33;969:6879;;;2024:14:2;;;:::i;:::-;;;969:6879:90;2024:14:2;;;969:6879:90;;;;;;;;;;;:::i;:::-;;5971:11:97;;:::i;:::-;969:6879:90;;;5963:48:97;;;;;2024:14:2;5963:48:97;;969:6879:90;;5963:48:97;;969:6879:90;;;;;;:::i;:::-;;;;;;;;9786:54:15;969:6879:90;;;;;;;1316:33;969:6879;;;;;;;;;;;:::i;:::-;5963:48:97;;;336:42:2;5963:48:97;;;;;;;;;;;2024:14:2;969:6879:90;;;;6067:31:97;;;;;;;;;;969:6879:90;;;;1316:33;1738:54;969:6879;;;9786:54:15;969:6879:90;;1287:23;969:6879;;;;;1355:70;2024:14:2;969:6879:90;;;;1738:54;;;;;;2024:14:2;1738:54:90;;969:6879;1738:54;;2024:14:2;;;;;;969:6879:90;2024:14:2;;;969:6879:90;;;;2024:14:2;969:6879:90;2024:14:2;1738:54:90;;;;;;;;;;969:6879;1738:54;;;;;;2024:14:2;969:6879:90;;;1721:72;969:6879;;;1721:72;969:6879;;;1738:54;;;;1316:33;1738:54;1316:33;1738:54;;;;;;;:::i;:::-;;;;;969:6879;;;;;;;;;;;5963:48:97;;;;;;;;;;;;;:::i;:::-;;;;2024:14:2;;;;-1:-1:-1;2024:14:2;;;;;1535:112:90;969:6879;;;;;2024:14:2;;969:6879:90;2024:14:2;;;;;;;;;304:1:98;2024:14:2;;;;;;;;;;;;;1535:112:90;2024:14:2;;;;;;;;;;;;969:6879:90;2024:14:2;;;;;;;;;;;;1316:33:90;304:1:98;2024:14:2;;;;;;;;;;;;;;;;1535:112:90;969:6879;;1287:23;2024:14:2;;;;969:6879:90;2024:14:2;;1316:33:90;2024:14:2;;;;;1287:23:90;2024:14:2;;;969:6879:90;2024:14:2;;;;;;;;;;;;;;;304:1:98;2024:14:2;;;;969:6879:90;;-1:-1:-1;2024:14:2;;;9786:54:15;969:6879:90;;;;;;;;4820:42:97;;;;;;;;;;;;;;:::i;:::-;;;;;;969:6879:90;;;;;;;;;;4690:25:97;969:6879:90;4690:25:97;;;;969:6879:90;2024:14:2;4690:25:97;;969:6879:90;4690:25:97;;;;;;;;;;:::i;:::-;;;;;;;;;;;969:6879:90;;;;;;;;;4632:24:97;;;;;;;;;;;;;;:::i;:::-;;;;;;969:6879:90;;;;;;;;;1619:19;;;;;;;;;;;;;:::i;:::-;;;;;969:6879;;;;;;;;;1512:17;;;;1316:33;1512:17;1316:33;1512:17;;;;;;;:::i;:::-;;;;1370:55;969:6879;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;969:6879:90;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;-1:-1:-1;969:6879:90;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;969:6879:90;;;;;-1:-1:-1;969:6879:90;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;969:6879:90;1535:112;969:6879;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;-1:-1:-1;1535:112:90;-1:-1:-1;969:6879:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;969:6879:90;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;969:6879:90;;;;;-1:-1:-1;969:6879:90;;-1:-1:-1;969:6879:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2024:14:2;;;;;;;;;;969:6879:90;;;;;;;2024:14:2;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;969:6879:90;;;2024:14:2;969:6879:90;;;;;2024:14:2;;969:6879:90;2024:14:2;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;969:6879:90:-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;969:6879:90;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;2024:14:2;;;;:::i;:::-;969:6879:90;;;-1:-1:-1;969:6879:90;;-1:-1:-1;969:6879:90;;;;;;;;;-1:-1:-1;969:6879:90;;;;-1:-1:-1;969:6879:90;;;;;;;;;-1:-1:-1;969:6879:90;;;;-1:-1:-1;969:6879:90;;;;;;:::o;2556:4:48:-;;;969:6879:90;2556:4:48;;969:6879:90;;;2556:4:48;;;;;;;969:6879:90;2556:4:48;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;969:6879:90;2556:4:48;;;;;;;969:6879:90;2556:4:48;;;;;;;969:6879:90;2556:4:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;969:6879:90:-;;;;;;;;;;;;;;;;-1:-1:-1;969:6879:90;;-1:-1:-1;969:6879:90;;-1:-1:-1;969:6879:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2024:14:2;969:6879:90;;;;;;;;2024:14:2;969:6879:90;;2024:14:2;969:6879:90;2024:14:2;;;;969:6879:90;;;;;;;;2024:14:2;969:6879:90;;2024:14:2;969:6879:90;2024:14:2;969:6879:90;2024:14:2;;969:6879:90;;;;;;;;2024:14:2;969:6879:90;;2024:14:2;969:6879:90;2024:14:2;969:6879:90;2024:14:2;;969:6879:90;;;;;;;;2024:14:2;969:6879:90;;2024:14:2;969:6879:90;2024:14:2;969:6879:90;2024:14:2;;969:6879:90;;;;;;;;2024:14:2;969:6879:90;;2024:14:2;969:6879:90;2024:14:2;969:6879:90;2024:14:2;;969:6879:90;;;;;;;;2024:14:2;969:6879:90;;2024:14:2;969:6879:90;2024:14:2;969:6879:90;2024:14:2;;969:6879:90;;;;;;;;2024:14:2;969:6879:90;;2024:14:2;969:6879:90;2024:14:2;;;969:6879:90;;;;;;;;;;;;;;;;;;;;2024:14:2;;;;969:6879:90;;;2024:14:2;;969:6879:90;2024:14:2;;969:6879:90;;;;2024:14:2;;969:6879:90;2024:14:2;;969:6879:90;;;;2024:14:2;;969:6879:90;2024:14:2;;969:6879:90;;;;2024:14:2;;969:6879:90;2024:14:2;;969:6879:90;;;;2024:14:2;;969:6879:90;2024:14:2;;969:6879:90;;;;2024:14:2;;969:6879:90;2024:14:2;;969:6879:90;;;;2024:14:2;;969:6879:90;;;;;;;;;;;;;;2763:4:48;969:6879:90;;2763:4:48;;;;;;:::o;:::-;;969:6879:90;2763:4:48;;;;;969:6879:90;2763:4:48;;969:6879:90;;2763:4:48;;;;;;;;;;;;:::o;969:6879:90:-;2024:14:2;969:6879:90;2024:14:2;;;;;:::i;:::-;969:6879:90;2556:4:48;;969:6879:90;;;;;:::o;1243:204:4:-;1302:7;969:6879:90;;;;;;;1325:14:4;:::o;1298:143::-;969:6879:90;;;2024:14:2;1377:39:4;;969:6879:90;1377:39:4;;;969:6879:90;192:59:4;2024:14:2;;;969:6879:90;2024:14:2;1377:39:4;;;969:6879:90;1377:39:4;;;;;;;2024:14:2;1377:39:4;;;1298:143;1377:53;;;1370:60;:::o;1377:39::-;;;2024:14:2;1377:39:4;;2024:14:2;1377:39:4;;;;;;969:6879:90;1377:39:4;;;:::i;:::-;;;969:6879:90;;;;;1377:39:4;;;;;;-1:-1:-1;1377:39:4;;;969:6879:90;;;2024:14:2;969:6879:90;;;;;1833:481;;969:6879;;;;2024:14:2;;;:::i;:::-;-1:-1:-1;969:6879:90;;-1:-1:-1;969:6879:90;;;;;;;;;;;;;;-1:-1:-1;969:6879:90;;;;-1:-1:-1;969:6879:90;;;;-1:-1:-1;969:6879:90;;;;;;;;;;;;2017:6;969:6879;;;;;2024:14:2;;;;:::i;:::-;969:6879:90;;-1:-1:-1;969:6879:90;1981:328;;969:6879;;;2024:14:2;;;;:::i;:::-;-1:-1:-1;2556:4:48;;969:6879:90;1981:328;;969:6879;;1981:328;;969:6879;-1:-1:-1;969:6879:90;1981:328;;969:6879;2213:5;969:6879;1981:328;;969:6879;-1:-1:-1;969:6879:90;1981:328;;969:6879;;;2024:14:2;;;;:::i;:::-;-1:-1:-1;2556:4:48;;969:6879:90;1981:328;;969:6879;;1981:328;;969:6879;1833:481;:::o;2386:134:4:-;;969:6879:90;2484:29:4;969:6879:90;2484:29:4;;;;969:6879:90;;;;;;2484:29:4;;;;;2024:14:2;2484:29:4;;;;;969:6879:90;;;;;;;;;;;;;;;;:::i;:::-;2484:29:4;;969:6879:90;2484:29:4;;;;;;;;2386:134;;:::o;2484:29::-;;;;;:::i;:::-;2386:134;:::o;:::-;969:6879:90;2484:29:4;;;;969:6879:90;;-1:-1:-1;969:6879:90;;;2484:29:4;;;;;2024:14:2;2484:29:4;;;;;969:6879:90;3920:4;969:6879;;;;;;;;;;;;;;:::i;:::-;2484:29:4;;969:6879:90;2484:29:4;;;;;;;;2386:134;:::o;2484:29::-;-1:-1:-1;2484:29:4;;;:::i;701:863:97:-;969:6879:90;;2024:14:2;798:35:97;;969:6879:90;798:35:97;;;969:6879:90;;;;;;;;;;;;798:35:97;;;969:6879:90;798:35:97;;;;;;;-1:-1:-1;798:35:97;;;701:863;969:6879:90;;;2024:14:2;866:35:97;;969:6879:90;798:35:97;866;;969:6879:90;;;;;;;;;;;;866:35:97;798;866;969:6879:90;866:35:97;;;;;;;-1:-1:-1;866:35:97;;;701:863;916:18;;;;969:6879:90;;285:44:97;462:50;1037:32;;1033:109;;701:863;232:1;;;;;;;644:49;285:44;644:49;232:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;969:6879:90;;1383:39:97;2024:14:2;1383:39:97;;969:6879:90;798:35:97;1383:39;;232:1;;969:6879:90;232:1:97;;969:6879:90;232:1:97;969:6879:90;;;232:1:97;-1:-1:-1;1383:39:97;798:35;1383:39;969:6879:90;1383:39:97;;;;;;;-1:-1:-1;1383:39:97;;;701:863;969:6879:90;;;1451:39:97;2024:14:2;1451:39:97;;969:6879:90;798:35:97;1451:39;;232:1;;969:6879:90;232:1:97;;969:6879:90;232:1:97;969:6879:90;;;232:1:97;-1:-1:-1;1451:39:97;798:35;1451:39;969:6879:90;1451:39:97;;;;;;;-1:-1:-1;1451:39:97;;;701:863;969:6879:90;;;1526:24:97;2024:14:2;1526:24:97;;798:35;1526:24;;969:6879:90;-1:-1:-1;1526:24:97;969:6879:90;1526:24:97;969:6879:90;1526:24:97;;;;;;;-1:-1:-1;1526:24:97;;;701:863;969:6879:90;;232:1:97;969:6879:90;;2024:14:2;969:6879:90;;;;;2024:14:2;969:6879:90;;;232:1:97;;;;;;2024:14:2;;;:::i;:::-;;;;969:6879:90;;2024:14:2;;;;;;;;;:::i;:::-;;;969:6879:90;;;;2024:14:2;;;;;:::i;:::-;;232:1:97;;;;;;;;:::i;1526:24::-;232:1;1526:24;;;969:6879:90;1526:24:97;;;-1:-1:-1;1526:24:97;;;;;;:::i;:::-;;;;;1451:39;;;;;;;-1:-1:-1;1451:39:97;;;;;;:::i;:::-;;;;;1383;;;;;;;-1:-1:-1;1383:39:97;;;;;;:::i;:::-;;;;;232:1;;;;;;;;;;;;-1:-1:-1;232:1:97;;;;;-1:-1:-1;232:1:97;1033:109;969:6879:90;;;;1107:26:97;;1124:8;;-1:-1:-1;969:6879:90;;1107:26:97;969:6879:90;1124:8:97;;969:6879:90;;-1:-1:-1;969:6879:90;;;;1107:26:97;;;;;;;;;:::i;:::-;969:6879:90;1097:37:97;;1033:109;;969:6879:90;798:35:97;969:6879:90;;;;;;798:35:97;969:6879:90;;;;;;;;;;;;;;866:35:97;;969:6879:90;866:35:97;;969:6879:90;866:35:97;;;;;;969:6879:90;866:35:97;;;:::i;:::-;;;969:6879:90;;;;;;866:35:97;;;;;;-1:-1:-1;866:35:97;;798;;969:6879:90;798:35:97;;969:6879:90;798:35:97;;;;;;969:6879:90;798:35:97;;;:::i;:::-;;;969:6879:90;;;;;;798:35:97;;;;;;-1:-1:-1;798:35:97;;8278:1282:48;8416:22;;;;969:6879:90;;8399:40:48;;;;;969:6879:90;8399:40:48;969:6879:90;;;;;;2024:14:2;969:6879:90;;;;;;8399:40:48;;;;;;;;;;;;;:::i;:::-;969:6879:90;8389:51:48;;969:6879:90;;;;;8451:34:48;;8447:1109;969:6879:90;;;8525:14:48;;969:6879:90;8525:14:48;;;969:6879:90;;;;;;;;:::i;:::-;;2024:14:2;969:6879:90;;2024:14:2;;;:::i;:::-;969:6879:90;;;;:::i;:::-;;8399:40:48;;969:6879:90;;;;;;;2024:14:2;8164:3:48;969:6879:90;;8146:16:48;;;;;8202:8;;969:6879:90;8202:8:48;;;:::i;:::-;;969:6879:90;1478:66:48;;969:6879:90;7708:7:48;8399:40;7708:7;;1799:66;7727:6;969:6879:90;7727:6:48;;;8399:40;969:6879:90;;;;7717:17:48;7736:10;;;;1799:66;7748:14;;;969:6879:90;;;7764:14:48;7780:17;7764:14;;;969:6879:90;;;7780:17:48;;1799:66;969:6879:90;;;7667:138:48;8399:40;7667:138;;969:6879:90;1478:66:48;969:6879:90;;;1478:66:48;;969:6879:90;7736:10:48;1478:66;;969:6879:90;7748:14:48;1478:66;;969:6879:90;7764:14:48;1478:66;;969:6879:90;7780:17:48;1478:66;;969:6879:90;1478:66:48;;;969:6879:90;8416:22:48;1478:66;;969:6879:90;8416:22:48;7667:138;;;;;;:::i;:::-;969:6879:90;7650:161:48;;8177:34;;;;:::i;:::-;969:6879:90;;8131:13:48;;8146:16;;;;;;;969:6879:90;;8240:28:48;;8399:40;8240:28;;;;969:6879:90;;;;;2024:14:2;969:6879:90;;;;;;8240:28:48;;;;;;8399:40;8240:28;;;;;;:::i;:::-;969:6879:90;8230:39:48;;8750:14;7748;7736:10;8750:14;;1799:66;8766:14;;1799:66;969:6879:90;;8712:82:48;8399:40;8712:82;;969:6879:90;1799:66:48;969:6879:90;;;1799:66:48;;969:6879:90;7736:10:48;1799:66;;969:6879:90;7748:14:48;1799:66;;969:6879:90;7764:14:48;1799:66;;969:6879:90;7764:14:48;8712:82;;;7780:17;8712:82;;:::i;:::-;969:6879:90;8702:93:48;;8695:100;:::o;969:6879:90:-;;;;;8399:40:48;969:6879:90;;;;;;-1:-1:-1;969:6879:90;;;;;;;;8447:1109:48;969:6879:90;8812:29:48;;969:6879:90;;8998:16:48;;;;8399:40;969:6879:90;;;;8988:27:48;969:6879:90;;;8959:70:48;8399:40;8959:70;;969:6879:90;1979:66:48;969:6879:90;;;1979:66:48;;969:6879:90;1979:66:48;;;969:6879:90;1979:66:48;8959:70;;;;;;:::i;8808:748::-;2482:4;9047:35;;2482:4;;9216:18;;;1979:66;969:6879:90;;;9181:67:48;8399:40;9181:67;;969:6879:90;2174:66:48;969:6879:90;;;1979:66:48;;969:6879:90;1979:66:48;;;969:6879:90;1979:66:48;9181:67;;;;;;:::i;9043:513::-;2556:4;9266:28;;2556:4;;9443:15;;;1979:66;969:6879:90;;;9414:58:48;8399:40;9414:58;;969:6879:90;1979:66:48;969:6879:90;;;1979:66:48;;969:6879:90;1979:66:48;;;969:6879:90;1979:66:48;9414:58;;;;;;:::i;9262:294::-;9523:26;2024:14:2;9523:26:48;;2556:4;2482;2024:14:2;9523:26:48;969:6879:90;;;;;;;8399:40:48;969:6879:90;;;;;;-1:-1:-1;969:6879:90;;;;;;;","linkReferences":{}},"methodIdentifiers":{"IS_TEST()":"fa7626d4","entryPoint()":"b0d691fe","excludeArtifacts()":"b5508aa9","excludeContracts()":"e20c9f71","excludeSelectors()":"b0464fdc","excludeSenders()":"1ed7831c","factory()":"c45a0155","failed()":"ba414fa6","setUp()":"0a9254e4","signer()":"238ac933","signerPk()":"17dbaeee","stage1Module()":"2dcbe49a","targetArtifactSelectors()":"66d9a9a0","targetArtifacts()":"85226c81","targetContracts()":"3f7286f4","targetInterfaces()":"2ade3880","targetSelectors()":"916a17c6","targetSenders()":"3e5e3c23","test_executeUserOp_executes_payload()":"8f75543e","test_executeUserOp_reverts_if_disabled(bytes)":"4f4fd555","test_executeUserOp_reverts_invalidEntryPoint(bytes,address)":"59ff5db7","test_validateUserOp_depositsMissingFunds(bytes32,uint256)":"b4585fd5","test_validateUserOp_returns_one_on_invalidSignature(bytes32)":"da2521f9","test_validateUserOp_returns_zero_on_validSignature(bytes32)":"5d3951f8","test_validateUserOp_reverts_if_disabled((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)":"4be6cb08","test_validateUserOp_reverts_invalidEntryPoint((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256,address)":"772e8534","wallet()":"521eb273","walletConfig()":"d34ddc05","walletImageHash()":"c4df3312"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"}],\"name\":\"InvalidKind\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalDeposited\",\"type\":\"uint256\"}],\"name\":\"Deposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"Explicit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"IS_TEST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"entryPoint\",\"outputs\":[{\"internalType\":\"contract MockEntryPoint\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"excludedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"contract Factory\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setUp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"signer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"signerPk\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stage1Module\",\"outputs\":[{\"internalType\":\"contract Stage1Module\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifactSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"artifact\",\"type\":\"string\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzArtifactSelector[]\",\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"targetedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetInterfaces\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"artifacts\",\"type\":\"string[]\"}],\"internalType\":\"struct StdInvariant.FuzzInterface[]\",\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"test_executeUserOp_executes_payload\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"test_executeUserOp_reverts_if_disabled\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"randomCaller\",\"type\":\"address\"}],\"name\":\"test_executeUserOp_reverts_invalidEntryPoint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"userOpHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"missingFunds\",\"type\":\"uint256\"}],\"name\":\"test_validateUserOp_depositsMissingFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"userOpHash\",\"type\":\"bytes32\"}],\"name\":\"test_validateUserOp_returns_one_on_invalidSignature\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"userOpHash\",\"type\":\"bytes32\"}],\"name\":\"test_validateUserOp_returns_zero_on_validSignature\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"accountGasLimits\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"gasFees\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct PackedUserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"userOpHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"missingFunds\",\"type\":\"uint256\"}],\"name\":\"test_validateUserOp_reverts_if_disabled\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"accountGasLimits\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"gasFees\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct PackedUserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"userOpHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"missingFunds\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"randomCaller\",\"type\":\"address\"}],\"name\":\"test_validateUserOp_reverts_invalidEntryPoint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wallet\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"walletConfig\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"walletImageHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"InvalidKind(uint8)\":[{\"notice\":\"Error thrown when the kind is invalid\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/modules/ERC4337v07.t.sol\":\"ERC4337v07Test\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/Factory.sol\":{\"keccak256\":\"0x5924fe583809e9c148d47c871866f6094599bb07a4d1fc2d60c814fda9c37f46\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e24d3575bf2606cd5f0f6da093e420118e018549eeb3a4ccb94f57c0e285e123\",\"dweb:/ipfs/QmRvWQt91YLJEgk5hgnRkPjDdB39tUHLYtxijYyXKdCm5J\"]},\"src/Stage1Module.sol\":{\"keccak256\":\"0x3e3be2778ac65aded03c15a73b4382a6a7dde0bcc69d1268255fd734e320d084\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c4d8846d35267bf7bc895c04e3d91b525274ae0677ec3b5529cba02577a2bb67\",\"dweb:/ipfs/QmaZq74rdyLUwRGCfacFXVS7kAL2FhTm3u356kHLtggfiW\"]},\"src/Stage2Module.sol\":{\"keccak256\":\"0xd0b2c2fead81d32a3f83f95bd1dd2d90677fdd1e0a7194a25710ffd0fdaee428\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://8489e75346dbf462b0567da30c2e020cdde3975c38bdfee055284642a3bd2d19\",\"dweb:/ipfs/QmTDM2AkG8qLVjfn35UcXN89CdQS8p3Cm888EadYrMAYAR\"]},\"src/Wallet.sol\":{\"keccak256\":\"0xe01e9e937dd8d7572976ccc8ec3ec87e4a557069dafb05f85977a7b71f5c58d5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2e9ab78d33655f8e822258dff3f2d5ad01e84f6dc90174840d5a283b8e6413c1\",\"dweb:/ipfs/QmNMyYe3C1fs3cxKmUZ3S9VU5EE4WVWPVcwiGbgvbS1vrH\"]},\"src/extensions/sessions/implicit/Attestation.sol\":{\"keccak256\":\"0xcaa44022b5eb4bc7ab487b3b1a0125da67e2e891cee983ef6cdb6814f045efc8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://94829782b6dcb482d7c002511c590d1ad8de3b21e5e72575df18be73565b3638\",\"dweb:/ipfs/QmZ4u9FxALzMzKR7auW8FmFkhGVw8kRDeDRJ1PKwKaWNWF\"]},\"src/extensions/sessions/implicit/ISignalsImplicitMode.sol\":{\"keccak256\":\"0x6cb48f50c49bcb3c7071306fe9fac6c102bc9eabf73d9909e19ab3b9a835d0a8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://15297e969f64fc1152654d1cefbe276c15a0ecfc11f86b4c276bb0b454fe700a\",\"dweb:/ipfs/QmeehNFYBPPtJePwUcqiYCgiuFotur4VVVCV1KvegdCCZ4\"]},\"src/modules/Calls.sol\":{\"keccak256\":\"0xcd0d38d0fd248e4443032dede2b8892ea0ca7e55538cd54082830f6b98d8edb1\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://617bb6d0724b18f3d77347cc454a57c1c916a0818a592552bd7fa226aa41a306\",\"dweb:/ipfs/Qmeet85Ux6cKq9JmC25JnTzFnRrgDpkyRik2svZLWt4fov\"]},\"src/modules/ERC4337v07.sol\":{\"keccak256\":\"0xbee11ed2498b892b16f72984c848fea85b58d15313fffa78c1e48ca7208f9189\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2d9296803bd52f5e2ae84011593f686802f1cadf6c68a4ee9f97e6455463ae0f\",\"dweb:/ipfs/QmXmWwUiV2eshxxdY5zCyJ7rxcH7bztxcAoh1scw2MPuhP\"]},\"src/modules/Hooks.sol\":{\"keccak256\":\"0xd1f9de45b83ae5f9f32a4d1c709d7a2b6543b1cddd09bf69d401dcdf1d154ab7\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://bf3161edf37479825588e07039752b79792666455cc0beb1ca0e873b3be31ad4\",\"dweb:/ipfs/QmYYpJeSsRgRx2oHcpvhqsNs7ZtDhVnxLmFpXz5eYcS8g4\"]},\"src/modules/Implementation.sol\":{\"keccak256\":\"0x16546d4be07865808890308750916b0a9a55e7a994a458c01edde4618f29b4e6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1b1f9785b08c9f29d6849ba2d3dee89fa3ea5f3c2feec4a59a6d1040e3fbe040\",\"dweb:/ipfs/QmU2Pm5C3Ztky7RQdCZggavyq7Eh1eS1HFqVz9jZKiMUML\"]},\"src/modules/Nonce.sol\":{\"keccak256\":\"0x56fbf6dc9b34ab60ae8a32ffb6f583c003bb8f4a5223ce704e982400fa403fab\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://492f53628633b862702cf8f9b726067a722c94028133a8a4c4fcf3d0e73ad803\",\"dweb:/ipfs/QmTHNy4XbH47YZaqKDpknb5aApjRH9HVAREHN7N5vEFWEV\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/Storage.sol\":{\"keccak256\":\"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da\",\"dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn\"]},\"src/modules/auth/BaseAuth.sol\":{\"keccak256\":\"0xbf2e40def03fcb5f4a5129b2f5803e21951325b92e00126cbe1427b7c25cfefd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://b560905fcc4b957d27c2abed78a1e82529c89fa472e91b3d108fbfd91aa7c3f7\",\"dweb:/ipfs/QmRjLLtTWE6dFX2kBQCgLz7ossfMxhAFgDC8Jx9XuGL6Wy\"]},\"src/modules/auth/BaseSig.sol\":{\"keccak256\":\"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8\",\"dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3\"]},\"src/modules/auth/SelfAuth.sol\":{\"keccak256\":\"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42\",\"dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W\"]},\"src/modules/auth/Stage1Auth.sol\":{\"keccak256\":\"0x399e21aad2b30bf80a21766bd3442d676a26eb66c02423617b2772df7204cb0a\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://25c698dee10c6fbb8b63adb4023f1886669b8e9c54dcd98871f0bd6a2b6acf03\",\"dweb:/ipfs/QmNzUFWCoymaoV7CFgJvbAWRsJAZkqBhSpgff26JVAr9hf\"]},\"src/modules/auth/Stage2Auth.sol\":{\"keccak256\":\"0x5b23b530522ba1c02248d1f7470352c57fbc91c245c7c577044f93f6bb560a59\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c30b8e13edc7e18e4ea7bc7f4b8deaf16301a8f2bb23e7697e6f6b74882a39dc\",\"dweb:/ipfs/QmW69XvfeJepuPBrHb1Vpkikg43P4juEGdRkUWt8GrrAfL\"]},\"src/modules/interfaces/IAccount.sol\":{\"keccak256\":\"0x64ca3bb59ec4fc0a60d80402802365e2d5226afe7e7aabe3b21df936c84f2bcb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ccfd2381e1874cdec2f473a9a17799a3b57360c0593d68ee66fcea9c16eb39b4\",\"dweb:/ipfs/QmcjbJpGz3Exmu4fsj953Y2bG8rtQaVMEFUgT6W2dUXomr\"]},\"src/modules/interfaces/IAuth.sol\":{\"keccak256\":\"0xf6fa30af2ec91d5fbeac17c9b1f2aa73b7883c9ac98745605007e57666394b91\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://6e90a87978519462f9612f4a17e38fddc1c7bcf700ff834a1de7dce326f30353\",\"dweb:/ipfs/QmXmWAsRRK6t4jPs4VcXrouyokxdALM28D3odX7ub48WEp\"]},\"src/modules/interfaces/ICheckpointer.sol\":{\"keccak256\":\"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1\",\"dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t\"]},\"src/modules/interfaces/IDelegatedExtension.sol\":{\"keccak256\":\"0xa2ae897e90fd70dd4a9e172bc04d019ba9c512e72c2df65fcb6daf87dd5ceb90\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://cdf4b7c3dfb0aef6c9dbe8b2a0542018dc756ef2252d7101bcb3186192da0a11\",\"dweb:/ipfs/QmPHCVu1DJ7fBrPBYA5y3hoF3a3XFEBwYCZ1ErGaxPhcYL\"]},\"src/modules/interfaces/IERC1155Receiver.sol\":{\"keccak256\":\"0xa23d0bc29233a91085922ea8a7e2cbe8b5f3358d3f2c3cdc58adade9a171d9c1\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2f06b8f3ae7a45441cc26da5b2ddd15ba76d1664178958f63f536e6c5e4fd0fb\",\"dweb:/ipfs/QmR1Rnk8ciSn5s5wNLGvpE1QNRDsBVDfDT1ZXhei2brmFj\"]},\"src/modules/interfaces/IERC1271.sol\":{\"keccak256\":\"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b\",\"dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF\"]},\"src/modules/interfaces/IERC223Receiver.sol\":{\"keccak256\":\"0x426221c0d48b651ed692edfa5388d6e5304e94f48598a71748134b2659e3890d\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://9e1ed2fd5e390b5b943dc07c2e0ea9e524eb37263dc72c482365c159fc3659e5\",\"dweb:/ipfs/QmWRDBvb1cthVPm4BSzKX3J5GpGGSBuDokkpRK9x5aA7JR\"]},\"src/modules/interfaces/IERC721Receiver.sol\":{\"keccak256\":\"0xbe14c3b727f283a467dc2f2221d3322c5a69cd64a3aacad85acab05e94438f35\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://43ef086c509b8b88cae78f67c4bd979fd427736972cfe56f7423371ccc154e63\",\"dweb:/ipfs/Qmc7Yp7Z1dQ925gzEZYVNUXnWr3YomvWkXfaGYLZpoy8J3\"]},\"src/modules/interfaces/IERC777Receiver.sol\":{\"keccak256\":\"0xd9144d439a96b0c6439cd9a186701aa530f4f782ff09fdbf6c3ef16b78b0d4e5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d1f17484eda7184db4a00106b4952f15c1517872cbfe19663d6fce4e042729b2\",\"dweb:/ipfs/QmWdhYmLNkUpgvPpSyGHstxrFwMfhRTVmxDpe4frkUu1Qh\"]},\"src/modules/interfaces/IEntryPoint.sol\":{\"keccak256\":\"0xd19922ea7a8ae09072a721138dc93e175fa77ecaa3ac6f2d759d5e5e944fb665\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://20ecea69ddd4d8787c0bdc4487dea03e90f63f4296674a12728e331a78e62620\",\"dweb:/ipfs/QmZUrX8zEqfHZEJQjNtDUXGS47bj2UuRCLfbkLPrXsot1c\"]},\"src/modules/interfaces/IPartialAuth.sol\":{\"keccak256\":\"0x0d1aa021615d8e90696e71a9468331457a1babfa2ffe169654b7456e5bcb7a73\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://bbacd149a6358ab0d4b9c588d2e3a55fc71ed4723269150d7b91ca70092f6519\",\"dweb:/ipfs/QmUSwtrYCrRcRFsy5rCzdMPrw1FCU7ZoeXdsW6kK9yc8FK\"]},\"src/modules/interfaces/ISapient.sol\":{\"keccak256\":\"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489\",\"dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"src/utils/LibOptim.sol\":{\"keccak256\":\"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81\",\"dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x\"]},\"test/mocks/Emitter.sol\":{\"keccak256\":\"0xb3fe3585f667c0af3e9deaaf6f7e68b16067014c9363367b4548c91abf367b27\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e6985271645ec1df625995837c2afb23f7042d7a4c18c992f5f1c9ff1c89b160\",\"dweb:/ipfs/QmTwQRRY95Z73vDP5EuamAQxTaSprwGy3piLRrWDf9FnoU\"]},\"test/modules/ERC4337v07.t.sol\":{\"keccak256\":\"0x1a0333d0a453ccecdf06bc0fb2099a5ca383e9d6608ca25ca9d9e738d5c3de20\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a71470bb43a4b48a165025ce0fa3e5a1d6012867c39ee755dfba82802c320b4d\",\"dweb:/ipfs/QmV95yMntjDBa5RZNLD5tN3zHsUbaS3DLsjFHv8ZG4Rdeo\"]},\"test/utils/PrimitivesRPC.sol\":{\"keccak256\":\"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe\",\"dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv\"]},\"test/utils/TestUtils.sol\":{\"keccak256\":\"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad\",\"dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint8","name":"kind","type":"uint8"}],"type":"error","name":"InvalidKind"},{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"uint256","name":"totalDeposited","type":"uint256","indexed":false}],"type":"event","name":"Deposited","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false}],"type":"event","name":"Explicit","anonymous":false},{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log","anonymous":false},{"inputs":[{"internalType":"address","name":"","type":"address","indexed":false}],"type":"event","name":"log_address","anonymous":false},{"inputs":[{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"log_bytes","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32","indexed":false}],"type":"event","name":"log_bytes32","anonymous":false},{"inputs":[{"internalType":"int256","name":"","type":"int256","indexed":false}],"type":"event","name":"log_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address","name":"val","type":"address","indexed":false}],"type":"event","name":"log_named_address","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes","name":"val","type":"bytes","indexed":false}],"type":"event","name":"log_named_bytes","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes32","name":"val","type":"bytes32","indexed":false}],"type":"event","name":"log_named_bytes32","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false}],"type":"event","name":"log_named_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"string","name":"val","type":"string","indexed":false}],"type":"event","name":"log_named_string","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false}],"type":"event","name":"log_named_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log_string","anonymous":false},{"inputs":[{"internalType":"uint256","name":"","type":"uint256","indexed":false}],"type":"event","name":"log_uint","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"logs","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"IS_TEST","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"entryPoint","outputs":[{"internalType":"contract MockEntryPoint","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeArtifacts","outputs":[{"internalType":"string[]","name":"excludedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeContracts","outputs":[{"internalType":"address[]","name":"excludedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"excludedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSenders","outputs":[{"internalType":"address[]","name":"excludedSenders_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"factory","outputs":[{"internalType":"contract Factory","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"failed","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"setUp"},{"inputs":[],"stateMutability":"view","type":"function","name":"signer","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"signerPk","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"stage1Module","outputs":[{"internalType":"contract Stage1Module","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifactSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzArtifactSelector[]","name":"targetedArtifactSelectors_","type":"tuple[]","components":[{"internalType":"string","name":"artifact","type":"string"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifacts","outputs":[{"internalType":"string[]","name":"targetedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetContracts","outputs":[{"internalType":"address[]","name":"targetedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetInterfaces","outputs":[{"internalType":"struct StdInvariant.FuzzInterface[]","name":"targetedInterfaces_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"string[]","name":"artifacts","type":"string[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"targetedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSenders","outputs":[{"internalType":"address[]","name":"targetedSenders_","type":"address[]"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"test_executeUserOp_executes_payload"},{"inputs":[{"internalType":"bytes","name":"payload","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"test_executeUserOp_reverts_if_disabled"},{"inputs":[{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"address","name":"randomCaller","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"test_executeUserOp_reverts_invalidEntryPoint"},{"inputs":[{"internalType":"bytes32","name":"userOpHash","type":"bytes32"},{"internalType":"uint256","name":"missingFunds","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"test_validateUserOp_depositsMissingFunds"},{"inputs":[{"internalType":"bytes32","name":"userOpHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"test_validateUserOp_returns_one_on_invalidSignature"},{"inputs":[{"internalType":"bytes32","name":"userOpHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"test_validateUserOp_returns_zero_on_validSignature"},{"inputs":[{"internalType":"struct PackedUserOperation","name":"userOp","type":"tuple","components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"initCode","type":"bytes"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"bytes32","name":"accountGasLimits","type":"bytes32"},{"internalType":"uint256","name":"preVerificationGas","type":"uint256"},{"internalType":"bytes32","name":"gasFees","type":"bytes32"},{"internalType":"bytes","name":"paymasterAndData","type":"bytes"},{"internalType":"bytes","name":"signature","type":"bytes"}]},{"internalType":"bytes32","name":"userOpHash","type":"bytes32"},{"internalType":"uint256","name":"missingFunds","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"test_validateUserOp_reverts_if_disabled"},{"inputs":[{"internalType":"struct PackedUserOperation","name":"userOp","type":"tuple","components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"initCode","type":"bytes"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"bytes32","name":"accountGasLimits","type":"bytes32"},{"internalType":"uint256","name":"preVerificationGas","type":"uint256"},{"internalType":"bytes32","name":"gasFees","type":"bytes32"},{"internalType":"bytes","name":"paymasterAndData","type":"bytes"},{"internalType":"bytes","name":"signature","type":"bytes"}]},{"internalType":"bytes32","name":"userOpHash","type":"bytes32"},{"internalType":"uint256","name":"missingFunds","type":"uint256"},{"internalType":"address","name":"randomCaller","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"test_validateUserOp_reverts_invalidEntryPoint"},{"inputs":[],"stateMutability":"view","type":"function","name":"wallet","outputs":[{"internalType":"address payable","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"walletConfig","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"walletImageHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/modules/ERC4337v07.t.sol":"ERC4337v07Test"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/Factory.sol":{"keccak256":"0x5924fe583809e9c148d47c871866f6094599bb07a4d1fc2d60c814fda9c37f46","urls":["bzz-raw://e24d3575bf2606cd5f0f6da093e420118e018549eeb3a4ccb94f57c0e285e123","dweb:/ipfs/QmRvWQt91YLJEgk5hgnRkPjDdB39tUHLYtxijYyXKdCm5J"],"license":"Apache-2.0"},"src/Stage1Module.sol":{"keccak256":"0x3e3be2778ac65aded03c15a73b4382a6a7dde0bcc69d1268255fd734e320d084","urls":["bzz-raw://c4d8846d35267bf7bc895c04e3d91b525274ae0677ec3b5529cba02577a2bb67","dweb:/ipfs/QmaZq74rdyLUwRGCfacFXVS7kAL2FhTm3u356kHLtggfiW"],"license":"Apache-2.0"},"src/Stage2Module.sol":{"keccak256":"0xd0b2c2fead81d32a3f83f95bd1dd2d90677fdd1e0a7194a25710ffd0fdaee428","urls":["bzz-raw://8489e75346dbf462b0567da30c2e020cdde3975c38bdfee055284642a3bd2d19","dweb:/ipfs/QmTDM2AkG8qLVjfn35UcXN89CdQS8p3Cm888EadYrMAYAR"],"license":"Apache-2.0"},"src/Wallet.sol":{"keccak256":"0xe01e9e937dd8d7572976ccc8ec3ec87e4a557069dafb05f85977a7b71f5c58d5","urls":["bzz-raw://2e9ab78d33655f8e822258dff3f2d5ad01e84f6dc90174840d5a283b8e6413c1","dweb:/ipfs/QmNMyYe3C1fs3cxKmUZ3S9VU5EE4WVWPVcwiGbgvbS1vrH"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/Attestation.sol":{"keccak256":"0xcaa44022b5eb4bc7ab487b3b1a0125da67e2e891cee983ef6cdb6814f045efc8","urls":["bzz-raw://94829782b6dcb482d7c002511c590d1ad8de3b21e5e72575df18be73565b3638","dweb:/ipfs/QmZ4u9FxALzMzKR7auW8FmFkhGVw8kRDeDRJ1PKwKaWNWF"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/ISignalsImplicitMode.sol":{"keccak256":"0x6cb48f50c49bcb3c7071306fe9fac6c102bc9eabf73d9909e19ab3b9a835d0a8","urls":["bzz-raw://15297e969f64fc1152654d1cefbe276c15a0ecfc11f86b4c276bb0b454fe700a","dweb:/ipfs/QmeehNFYBPPtJePwUcqiYCgiuFotur4VVVCV1KvegdCCZ4"],"license":"Apache-2.0"},"src/modules/Calls.sol":{"keccak256":"0xcd0d38d0fd248e4443032dede2b8892ea0ca7e55538cd54082830f6b98d8edb1","urls":["bzz-raw://617bb6d0724b18f3d77347cc454a57c1c916a0818a592552bd7fa226aa41a306","dweb:/ipfs/Qmeet85Ux6cKq9JmC25JnTzFnRrgDpkyRik2svZLWt4fov"],"license":"Apache-2.0"},"src/modules/ERC4337v07.sol":{"keccak256":"0xbee11ed2498b892b16f72984c848fea85b58d15313fffa78c1e48ca7208f9189","urls":["bzz-raw://2d9296803bd52f5e2ae84011593f686802f1cadf6c68a4ee9f97e6455463ae0f","dweb:/ipfs/QmXmWwUiV2eshxxdY5zCyJ7rxcH7bztxcAoh1scw2MPuhP"],"license":"Apache-2.0"},"src/modules/Hooks.sol":{"keccak256":"0xd1f9de45b83ae5f9f32a4d1c709d7a2b6543b1cddd09bf69d401dcdf1d154ab7","urls":["bzz-raw://bf3161edf37479825588e07039752b79792666455cc0beb1ca0e873b3be31ad4","dweb:/ipfs/QmYYpJeSsRgRx2oHcpvhqsNs7ZtDhVnxLmFpXz5eYcS8g4"],"license":"Apache-2.0"},"src/modules/Implementation.sol":{"keccak256":"0x16546d4be07865808890308750916b0a9a55e7a994a458c01edde4618f29b4e6","urls":["bzz-raw://1b1f9785b08c9f29d6849ba2d3dee89fa3ea5f3c2feec4a59a6d1040e3fbe040","dweb:/ipfs/QmU2Pm5C3Ztky7RQdCZggavyq7Eh1eS1HFqVz9jZKiMUML"],"license":"Apache-2.0"},"src/modules/Nonce.sol":{"keccak256":"0x56fbf6dc9b34ab60ae8a32ffb6f583c003bb8f4a5223ce704e982400fa403fab","urls":["bzz-raw://492f53628633b862702cf8f9b726067a722c94028133a8a4c4fcf3d0e73ad803","dweb:/ipfs/QmTHNy4XbH47YZaqKDpknb5aApjRH9HVAREHN7N5vEFWEV"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/Storage.sol":{"keccak256":"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f","urls":["bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da","dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn"],"license":"Apache-2.0"},"src/modules/auth/BaseAuth.sol":{"keccak256":"0xbf2e40def03fcb5f4a5129b2f5803e21951325b92e00126cbe1427b7c25cfefd","urls":["bzz-raw://b560905fcc4b957d27c2abed78a1e82529c89fa472e91b3d108fbfd91aa7c3f7","dweb:/ipfs/QmRjLLtTWE6dFX2kBQCgLz7ossfMxhAFgDC8Jx9XuGL6Wy"],"license":"Apache-2.0"},"src/modules/auth/BaseSig.sol":{"keccak256":"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa","urls":["bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8","dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3"],"license":"Apache-2.0"},"src/modules/auth/SelfAuth.sol":{"keccak256":"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c","urls":["bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42","dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W"],"license":"Apache-2.0"},"src/modules/auth/Stage1Auth.sol":{"keccak256":"0x399e21aad2b30bf80a21766bd3442d676a26eb66c02423617b2772df7204cb0a","urls":["bzz-raw://25c698dee10c6fbb8b63adb4023f1886669b8e9c54dcd98871f0bd6a2b6acf03","dweb:/ipfs/QmNzUFWCoymaoV7CFgJvbAWRsJAZkqBhSpgff26JVAr9hf"],"license":"Apache-2.0"},"src/modules/auth/Stage2Auth.sol":{"keccak256":"0x5b23b530522ba1c02248d1f7470352c57fbc91c245c7c577044f93f6bb560a59","urls":["bzz-raw://c30b8e13edc7e18e4ea7bc7f4b8deaf16301a8f2bb23e7697e6f6b74882a39dc","dweb:/ipfs/QmW69XvfeJepuPBrHb1Vpkikg43P4juEGdRkUWt8GrrAfL"],"license":"Apache-2.0"},"src/modules/interfaces/IAccount.sol":{"keccak256":"0x64ca3bb59ec4fc0a60d80402802365e2d5226afe7e7aabe3b21df936c84f2bcb","urls":["bzz-raw://ccfd2381e1874cdec2f473a9a17799a3b57360c0593d68ee66fcea9c16eb39b4","dweb:/ipfs/QmcjbJpGz3Exmu4fsj953Y2bG8rtQaVMEFUgT6W2dUXomr"],"license":"MIT"},"src/modules/interfaces/IAuth.sol":{"keccak256":"0xf6fa30af2ec91d5fbeac17c9b1f2aa73b7883c9ac98745605007e57666394b91","urls":["bzz-raw://6e90a87978519462f9612f4a17e38fddc1c7bcf700ff834a1de7dce326f30353","dweb:/ipfs/QmXmWAsRRK6t4jPs4VcXrouyokxdALM28D3odX7ub48WEp"],"license":"Apache-2.0"},"src/modules/interfaces/ICheckpointer.sol":{"keccak256":"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513","urls":["bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1","dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t"],"license":"Apache-2.0"},"src/modules/interfaces/IDelegatedExtension.sol":{"keccak256":"0xa2ae897e90fd70dd4a9e172bc04d019ba9c512e72c2df65fcb6daf87dd5ceb90","urls":["bzz-raw://cdf4b7c3dfb0aef6c9dbe8b2a0542018dc756ef2252d7101bcb3186192da0a11","dweb:/ipfs/QmPHCVu1DJ7fBrPBYA5y3hoF3a3XFEBwYCZ1ErGaxPhcYL"],"license":"Apache-2.0"},"src/modules/interfaces/IERC1155Receiver.sol":{"keccak256":"0xa23d0bc29233a91085922ea8a7e2cbe8b5f3358d3f2c3cdc58adade9a171d9c1","urls":["bzz-raw://2f06b8f3ae7a45441cc26da5b2ddd15ba76d1664178958f63f536e6c5e4fd0fb","dweb:/ipfs/QmR1Rnk8ciSn5s5wNLGvpE1QNRDsBVDfDT1ZXhei2brmFj"],"license":"Apache-2.0"},"src/modules/interfaces/IERC1271.sol":{"keccak256":"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9","urls":["bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b","dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF"],"license":"Apache-2.0"},"src/modules/interfaces/IERC223Receiver.sol":{"keccak256":"0x426221c0d48b651ed692edfa5388d6e5304e94f48598a71748134b2659e3890d","urls":["bzz-raw://9e1ed2fd5e390b5b943dc07c2e0ea9e524eb37263dc72c482365c159fc3659e5","dweb:/ipfs/QmWRDBvb1cthVPm4BSzKX3J5GpGGSBuDokkpRK9x5aA7JR"],"license":"Apache-2.0"},"src/modules/interfaces/IERC721Receiver.sol":{"keccak256":"0xbe14c3b727f283a467dc2f2221d3322c5a69cd64a3aacad85acab05e94438f35","urls":["bzz-raw://43ef086c509b8b88cae78f67c4bd979fd427736972cfe56f7423371ccc154e63","dweb:/ipfs/Qmc7Yp7Z1dQ925gzEZYVNUXnWr3YomvWkXfaGYLZpoy8J3"],"license":"Apache-2.0"},"src/modules/interfaces/IERC777Receiver.sol":{"keccak256":"0xd9144d439a96b0c6439cd9a186701aa530f4f782ff09fdbf6c3ef16b78b0d4e5","urls":["bzz-raw://d1f17484eda7184db4a00106b4952f15c1517872cbfe19663d6fce4e042729b2","dweb:/ipfs/QmWdhYmLNkUpgvPpSyGHstxrFwMfhRTVmxDpe4frkUu1Qh"],"license":"Apache-2.0"},"src/modules/interfaces/IEntryPoint.sol":{"keccak256":"0xd19922ea7a8ae09072a721138dc93e175fa77ecaa3ac6f2d759d5e5e944fb665","urls":["bzz-raw://20ecea69ddd4d8787c0bdc4487dea03e90f63f4296674a12728e331a78e62620","dweb:/ipfs/QmZUrX8zEqfHZEJQjNtDUXGS47bj2UuRCLfbkLPrXsot1c"],"license":"MIT"},"src/modules/interfaces/IPartialAuth.sol":{"keccak256":"0x0d1aa021615d8e90696e71a9468331457a1babfa2ffe169654b7456e5bcb7a73","urls":["bzz-raw://bbacd149a6358ab0d4b9c588d2e3a55fc71ed4723269150d7b91ca70092f6519","dweb:/ipfs/QmUSwtrYCrRcRFsy5rCzdMPrw1FCU7ZoeXdsW6kK9yc8FK"],"license":"Apache-2.0"},"src/modules/interfaces/ISapient.sol":{"keccak256":"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359","urls":["bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489","dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"src/utils/LibOptim.sol":{"keccak256":"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde","urls":["bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81","dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x"],"license":"Apache-2.0"},"test/mocks/Emitter.sol":{"keccak256":"0xb3fe3585f667c0af3e9deaaf6f7e68b16067014c9363367b4548c91abf367b27","urls":["bzz-raw://e6985271645ec1df625995837c2afb23f7042d7a4c18c992f5f1c9ff1c89b160","dweb:/ipfs/QmTwQRRY95Z73vDP5EuamAQxTaSprwGy3piLRrWDf9FnoU"],"license":"Apache-2.0"},"test/modules/ERC4337v07.t.sol":{"keccak256":"0x1a0333d0a453ccecdf06bc0fb2099a5ca383e9d6608ca25ca9d9e738d5c3de20","urls":["bzz-raw://a71470bb43a4b48a165025ce0fa3e5a1d6012867c39ee755dfba82802c320b4d","dweb:/ipfs/QmV95yMntjDBa5RZNLD5tN3zHsUbaS3DLsjFHv8ZG4Rdeo"],"license":"Apache-2.0"},"test/utils/PrimitivesRPC.sol":{"keccak256":"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe","urls":["bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe","dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv"],"license":"Apache-2.0"},"test/utils/TestUtils.sol":{"keccak256":"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79","urls":["bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad","dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa"],"license":"Apache-2.0"}},"version":1},"id":90} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/ERC4337v07.t.sol/MockEntryPoint.json b/contracts/artifacts/wallet-contracts-v3/ERC4337v07.t.sol/MockEntryPoint.json new file mode 100644 index 00000000..c2ca63d3 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/ERC4337v07.t.sol/MockEntryPoint.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"depositTo","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"deposits","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"event","name":"Deposited","inputs":[{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"totalDeposited","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false}],"bytecode":{"object":"0x6080806040523460155761019a908161001b8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c908163b760faf9146100a2575063fc7e286d1461003557600080fd5b3461009d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009d5760043573ffffffffffffffffffffffffffffffffffffffff811680910361009d5760005260006020526020604060002054604051908152f35b600080fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009d576004359073ffffffffffffffffffffffffffffffffffffffff821680920361009d578160005260006020526040600020805491348301809311610135577f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c49260209255348152a2005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212206a17cc8cad12c58baf45f5e38f066c8f0529382a68e854861bf633ee59e344f464736f6c634300081c0033","sourceMap":"661:306:90:-:0;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608080604052600436101561001357600080fd5b60003560e01c908163b760faf9146100a2575063fc7e286d1461003557600080fd5b3461009d5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009d5760043573ffffffffffffffffffffffffffffffffffffffff811680910361009d5760005260006020526020604060002054604051908152f35b600080fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009d576004359073ffffffffffffffffffffffffffffffffffffffff821680920361009d578160005260006020526040600020805491348301809311610135577f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c49260209255348152a2005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea26469706673582212206a17cc8cad12c58baf45f5e38f066c8f0529382a68e854861bf633ee59e344f464736f6c634300081c0033","sourceMap":"661:306:90:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;910:9;;661:306;;;;;;;930:29;661:306;;;;910:9;661:306;;930:29;661:306;;;;;;;;;;","linkReferences":{}},"methodIdentifiers":{"depositTo(address)":"b760faf9","deposits(address)":"fc7e286d"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalDeposited\",\"type\":\"uint256\"}],\"name\":\"Deposited\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"depositTo\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"deposits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/modules/ERC4337v07.t.sol\":\"MockEntryPoint\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/Factory.sol\":{\"keccak256\":\"0x5924fe583809e9c148d47c871866f6094599bb07a4d1fc2d60c814fda9c37f46\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e24d3575bf2606cd5f0f6da093e420118e018549eeb3a4ccb94f57c0e285e123\",\"dweb:/ipfs/QmRvWQt91YLJEgk5hgnRkPjDdB39tUHLYtxijYyXKdCm5J\"]},\"src/Stage1Module.sol\":{\"keccak256\":\"0x3e3be2778ac65aded03c15a73b4382a6a7dde0bcc69d1268255fd734e320d084\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c4d8846d35267bf7bc895c04e3d91b525274ae0677ec3b5529cba02577a2bb67\",\"dweb:/ipfs/QmaZq74rdyLUwRGCfacFXVS7kAL2FhTm3u356kHLtggfiW\"]},\"src/Stage2Module.sol\":{\"keccak256\":\"0xd0b2c2fead81d32a3f83f95bd1dd2d90677fdd1e0a7194a25710ffd0fdaee428\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://8489e75346dbf462b0567da30c2e020cdde3975c38bdfee055284642a3bd2d19\",\"dweb:/ipfs/QmTDM2AkG8qLVjfn35UcXN89CdQS8p3Cm888EadYrMAYAR\"]},\"src/Wallet.sol\":{\"keccak256\":\"0xe01e9e937dd8d7572976ccc8ec3ec87e4a557069dafb05f85977a7b71f5c58d5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2e9ab78d33655f8e822258dff3f2d5ad01e84f6dc90174840d5a283b8e6413c1\",\"dweb:/ipfs/QmNMyYe3C1fs3cxKmUZ3S9VU5EE4WVWPVcwiGbgvbS1vrH\"]},\"src/extensions/sessions/implicit/Attestation.sol\":{\"keccak256\":\"0xcaa44022b5eb4bc7ab487b3b1a0125da67e2e891cee983ef6cdb6814f045efc8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://94829782b6dcb482d7c002511c590d1ad8de3b21e5e72575df18be73565b3638\",\"dweb:/ipfs/QmZ4u9FxALzMzKR7auW8FmFkhGVw8kRDeDRJ1PKwKaWNWF\"]},\"src/extensions/sessions/implicit/ISignalsImplicitMode.sol\":{\"keccak256\":\"0x6cb48f50c49bcb3c7071306fe9fac6c102bc9eabf73d9909e19ab3b9a835d0a8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://15297e969f64fc1152654d1cefbe276c15a0ecfc11f86b4c276bb0b454fe700a\",\"dweb:/ipfs/QmeehNFYBPPtJePwUcqiYCgiuFotur4VVVCV1KvegdCCZ4\"]},\"src/modules/Calls.sol\":{\"keccak256\":\"0xcd0d38d0fd248e4443032dede2b8892ea0ca7e55538cd54082830f6b98d8edb1\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://617bb6d0724b18f3d77347cc454a57c1c916a0818a592552bd7fa226aa41a306\",\"dweb:/ipfs/Qmeet85Ux6cKq9JmC25JnTzFnRrgDpkyRik2svZLWt4fov\"]},\"src/modules/ERC4337v07.sol\":{\"keccak256\":\"0xbee11ed2498b892b16f72984c848fea85b58d15313fffa78c1e48ca7208f9189\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2d9296803bd52f5e2ae84011593f686802f1cadf6c68a4ee9f97e6455463ae0f\",\"dweb:/ipfs/QmXmWwUiV2eshxxdY5zCyJ7rxcH7bztxcAoh1scw2MPuhP\"]},\"src/modules/Hooks.sol\":{\"keccak256\":\"0xd1f9de45b83ae5f9f32a4d1c709d7a2b6543b1cddd09bf69d401dcdf1d154ab7\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://bf3161edf37479825588e07039752b79792666455cc0beb1ca0e873b3be31ad4\",\"dweb:/ipfs/QmYYpJeSsRgRx2oHcpvhqsNs7ZtDhVnxLmFpXz5eYcS8g4\"]},\"src/modules/Implementation.sol\":{\"keccak256\":\"0x16546d4be07865808890308750916b0a9a55e7a994a458c01edde4618f29b4e6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1b1f9785b08c9f29d6849ba2d3dee89fa3ea5f3c2feec4a59a6d1040e3fbe040\",\"dweb:/ipfs/QmU2Pm5C3Ztky7RQdCZggavyq7Eh1eS1HFqVz9jZKiMUML\"]},\"src/modules/Nonce.sol\":{\"keccak256\":\"0x56fbf6dc9b34ab60ae8a32ffb6f583c003bb8f4a5223ce704e982400fa403fab\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://492f53628633b862702cf8f9b726067a722c94028133a8a4c4fcf3d0e73ad803\",\"dweb:/ipfs/QmTHNy4XbH47YZaqKDpknb5aApjRH9HVAREHN7N5vEFWEV\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/Storage.sol\":{\"keccak256\":\"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da\",\"dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn\"]},\"src/modules/auth/BaseAuth.sol\":{\"keccak256\":\"0xbf2e40def03fcb5f4a5129b2f5803e21951325b92e00126cbe1427b7c25cfefd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://b560905fcc4b957d27c2abed78a1e82529c89fa472e91b3d108fbfd91aa7c3f7\",\"dweb:/ipfs/QmRjLLtTWE6dFX2kBQCgLz7ossfMxhAFgDC8Jx9XuGL6Wy\"]},\"src/modules/auth/BaseSig.sol\":{\"keccak256\":\"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8\",\"dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3\"]},\"src/modules/auth/SelfAuth.sol\":{\"keccak256\":\"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42\",\"dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W\"]},\"src/modules/auth/Stage1Auth.sol\":{\"keccak256\":\"0x399e21aad2b30bf80a21766bd3442d676a26eb66c02423617b2772df7204cb0a\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://25c698dee10c6fbb8b63adb4023f1886669b8e9c54dcd98871f0bd6a2b6acf03\",\"dweb:/ipfs/QmNzUFWCoymaoV7CFgJvbAWRsJAZkqBhSpgff26JVAr9hf\"]},\"src/modules/auth/Stage2Auth.sol\":{\"keccak256\":\"0x5b23b530522ba1c02248d1f7470352c57fbc91c245c7c577044f93f6bb560a59\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c30b8e13edc7e18e4ea7bc7f4b8deaf16301a8f2bb23e7697e6f6b74882a39dc\",\"dweb:/ipfs/QmW69XvfeJepuPBrHb1Vpkikg43P4juEGdRkUWt8GrrAfL\"]},\"src/modules/interfaces/IAccount.sol\":{\"keccak256\":\"0x64ca3bb59ec4fc0a60d80402802365e2d5226afe7e7aabe3b21df936c84f2bcb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ccfd2381e1874cdec2f473a9a17799a3b57360c0593d68ee66fcea9c16eb39b4\",\"dweb:/ipfs/QmcjbJpGz3Exmu4fsj953Y2bG8rtQaVMEFUgT6W2dUXomr\"]},\"src/modules/interfaces/IAuth.sol\":{\"keccak256\":\"0xf6fa30af2ec91d5fbeac17c9b1f2aa73b7883c9ac98745605007e57666394b91\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://6e90a87978519462f9612f4a17e38fddc1c7bcf700ff834a1de7dce326f30353\",\"dweb:/ipfs/QmXmWAsRRK6t4jPs4VcXrouyokxdALM28D3odX7ub48WEp\"]},\"src/modules/interfaces/ICheckpointer.sol\":{\"keccak256\":\"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1\",\"dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t\"]},\"src/modules/interfaces/IDelegatedExtension.sol\":{\"keccak256\":\"0xa2ae897e90fd70dd4a9e172bc04d019ba9c512e72c2df65fcb6daf87dd5ceb90\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://cdf4b7c3dfb0aef6c9dbe8b2a0542018dc756ef2252d7101bcb3186192da0a11\",\"dweb:/ipfs/QmPHCVu1DJ7fBrPBYA5y3hoF3a3XFEBwYCZ1ErGaxPhcYL\"]},\"src/modules/interfaces/IERC1155Receiver.sol\":{\"keccak256\":\"0xa23d0bc29233a91085922ea8a7e2cbe8b5f3358d3f2c3cdc58adade9a171d9c1\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2f06b8f3ae7a45441cc26da5b2ddd15ba76d1664178958f63f536e6c5e4fd0fb\",\"dweb:/ipfs/QmR1Rnk8ciSn5s5wNLGvpE1QNRDsBVDfDT1ZXhei2brmFj\"]},\"src/modules/interfaces/IERC1271.sol\":{\"keccak256\":\"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b\",\"dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF\"]},\"src/modules/interfaces/IERC223Receiver.sol\":{\"keccak256\":\"0x426221c0d48b651ed692edfa5388d6e5304e94f48598a71748134b2659e3890d\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://9e1ed2fd5e390b5b943dc07c2e0ea9e524eb37263dc72c482365c159fc3659e5\",\"dweb:/ipfs/QmWRDBvb1cthVPm4BSzKX3J5GpGGSBuDokkpRK9x5aA7JR\"]},\"src/modules/interfaces/IERC721Receiver.sol\":{\"keccak256\":\"0xbe14c3b727f283a467dc2f2221d3322c5a69cd64a3aacad85acab05e94438f35\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://43ef086c509b8b88cae78f67c4bd979fd427736972cfe56f7423371ccc154e63\",\"dweb:/ipfs/Qmc7Yp7Z1dQ925gzEZYVNUXnWr3YomvWkXfaGYLZpoy8J3\"]},\"src/modules/interfaces/IERC777Receiver.sol\":{\"keccak256\":\"0xd9144d439a96b0c6439cd9a186701aa530f4f782ff09fdbf6c3ef16b78b0d4e5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d1f17484eda7184db4a00106b4952f15c1517872cbfe19663d6fce4e042729b2\",\"dweb:/ipfs/QmWdhYmLNkUpgvPpSyGHstxrFwMfhRTVmxDpe4frkUu1Qh\"]},\"src/modules/interfaces/IEntryPoint.sol\":{\"keccak256\":\"0xd19922ea7a8ae09072a721138dc93e175fa77ecaa3ac6f2d759d5e5e944fb665\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://20ecea69ddd4d8787c0bdc4487dea03e90f63f4296674a12728e331a78e62620\",\"dweb:/ipfs/QmZUrX8zEqfHZEJQjNtDUXGS47bj2UuRCLfbkLPrXsot1c\"]},\"src/modules/interfaces/IPartialAuth.sol\":{\"keccak256\":\"0x0d1aa021615d8e90696e71a9468331457a1babfa2ffe169654b7456e5bcb7a73\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://bbacd149a6358ab0d4b9c588d2e3a55fc71ed4723269150d7b91ca70092f6519\",\"dweb:/ipfs/QmUSwtrYCrRcRFsy5rCzdMPrw1FCU7ZoeXdsW6kK9yc8FK\"]},\"src/modules/interfaces/ISapient.sol\":{\"keccak256\":\"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489\",\"dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"src/utils/LibOptim.sol\":{\"keccak256\":\"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81\",\"dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x\"]},\"test/mocks/Emitter.sol\":{\"keccak256\":\"0xb3fe3585f667c0af3e9deaaf6f7e68b16067014c9363367b4548c91abf367b27\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e6985271645ec1df625995837c2afb23f7042d7a4c18c992f5f1c9ff1c89b160\",\"dweb:/ipfs/QmTwQRRY95Z73vDP5EuamAQxTaSprwGy3piLRrWDf9FnoU\"]},\"test/modules/ERC4337v07.t.sol\":{\"keccak256\":\"0x1a0333d0a453ccecdf06bc0fb2099a5ca383e9d6608ca25ca9d9e738d5c3de20\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a71470bb43a4b48a165025ce0fa3e5a1d6012867c39ee755dfba82802c320b4d\",\"dweb:/ipfs/QmV95yMntjDBa5RZNLD5tN3zHsUbaS3DLsjFHv8ZG4Rdeo\"]},\"test/utils/PrimitivesRPC.sol\":{\"keccak256\":\"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe\",\"dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv\"]},\"test/utils/TestUtils.sol\":{\"keccak256\":\"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad\",\"dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"uint256","name":"totalDeposited","type":"uint256","indexed":false}],"type":"event","name":"Deposited","anonymous":false},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"payable","type":"function","name":"depositTo"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function","name":"deposits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/modules/ERC4337v07.t.sol":"MockEntryPoint"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/Factory.sol":{"keccak256":"0x5924fe583809e9c148d47c871866f6094599bb07a4d1fc2d60c814fda9c37f46","urls":["bzz-raw://e24d3575bf2606cd5f0f6da093e420118e018549eeb3a4ccb94f57c0e285e123","dweb:/ipfs/QmRvWQt91YLJEgk5hgnRkPjDdB39tUHLYtxijYyXKdCm5J"],"license":"Apache-2.0"},"src/Stage1Module.sol":{"keccak256":"0x3e3be2778ac65aded03c15a73b4382a6a7dde0bcc69d1268255fd734e320d084","urls":["bzz-raw://c4d8846d35267bf7bc895c04e3d91b525274ae0677ec3b5529cba02577a2bb67","dweb:/ipfs/QmaZq74rdyLUwRGCfacFXVS7kAL2FhTm3u356kHLtggfiW"],"license":"Apache-2.0"},"src/Stage2Module.sol":{"keccak256":"0xd0b2c2fead81d32a3f83f95bd1dd2d90677fdd1e0a7194a25710ffd0fdaee428","urls":["bzz-raw://8489e75346dbf462b0567da30c2e020cdde3975c38bdfee055284642a3bd2d19","dweb:/ipfs/QmTDM2AkG8qLVjfn35UcXN89CdQS8p3Cm888EadYrMAYAR"],"license":"Apache-2.0"},"src/Wallet.sol":{"keccak256":"0xe01e9e937dd8d7572976ccc8ec3ec87e4a557069dafb05f85977a7b71f5c58d5","urls":["bzz-raw://2e9ab78d33655f8e822258dff3f2d5ad01e84f6dc90174840d5a283b8e6413c1","dweb:/ipfs/QmNMyYe3C1fs3cxKmUZ3S9VU5EE4WVWPVcwiGbgvbS1vrH"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/Attestation.sol":{"keccak256":"0xcaa44022b5eb4bc7ab487b3b1a0125da67e2e891cee983ef6cdb6814f045efc8","urls":["bzz-raw://94829782b6dcb482d7c002511c590d1ad8de3b21e5e72575df18be73565b3638","dweb:/ipfs/QmZ4u9FxALzMzKR7auW8FmFkhGVw8kRDeDRJ1PKwKaWNWF"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/ISignalsImplicitMode.sol":{"keccak256":"0x6cb48f50c49bcb3c7071306fe9fac6c102bc9eabf73d9909e19ab3b9a835d0a8","urls":["bzz-raw://15297e969f64fc1152654d1cefbe276c15a0ecfc11f86b4c276bb0b454fe700a","dweb:/ipfs/QmeehNFYBPPtJePwUcqiYCgiuFotur4VVVCV1KvegdCCZ4"],"license":"Apache-2.0"},"src/modules/Calls.sol":{"keccak256":"0xcd0d38d0fd248e4443032dede2b8892ea0ca7e55538cd54082830f6b98d8edb1","urls":["bzz-raw://617bb6d0724b18f3d77347cc454a57c1c916a0818a592552bd7fa226aa41a306","dweb:/ipfs/Qmeet85Ux6cKq9JmC25JnTzFnRrgDpkyRik2svZLWt4fov"],"license":"Apache-2.0"},"src/modules/ERC4337v07.sol":{"keccak256":"0xbee11ed2498b892b16f72984c848fea85b58d15313fffa78c1e48ca7208f9189","urls":["bzz-raw://2d9296803bd52f5e2ae84011593f686802f1cadf6c68a4ee9f97e6455463ae0f","dweb:/ipfs/QmXmWwUiV2eshxxdY5zCyJ7rxcH7bztxcAoh1scw2MPuhP"],"license":"Apache-2.0"},"src/modules/Hooks.sol":{"keccak256":"0xd1f9de45b83ae5f9f32a4d1c709d7a2b6543b1cddd09bf69d401dcdf1d154ab7","urls":["bzz-raw://bf3161edf37479825588e07039752b79792666455cc0beb1ca0e873b3be31ad4","dweb:/ipfs/QmYYpJeSsRgRx2oHcpvhqsNs7ZtDhVnxLmFpXz5eYcS8g4"],"license":"Apache-2.0"},"src/modules/Implementation.sol":{"keccak256":"0x16546d4be07865808890308750916b0a9a55e7a994a458c01edde4618f29b4e6","urls":["bzz-raw://1b1f9785b08c9f29d6849ba2d3dee89fa3ea5f3c2feec4a59a6d1040e3fbe040","dweb:/ipfs/QmU2Pm5C3Ztky7RQdCZggavyq7Eh1eS1HFqVz9jZKiMUML"],"license":"Apache-2.0"},"src/modules/Nonce.sol":{"keccak256":"0x56fbf6dc9b34ab60ae8a32ffb6f583c003bb8f4a5223ce704e982400fa403fab","urls":["bzz-raw://492f53628633b862702cf8f9b726067a722c94028133a8a4c4fcf3d0e73ad803","dweb:/ipfs/QmTHNy4XbH47YZaqKDpknb5aApjRH9HVAREHN7N5vEFWEV"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/Storage.sol":{"keccak256":"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f","urls":["bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da","dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn"],"license":"Apache-2.0"},"src/modules/auth/BaseAuth.sol":{"keccak256":"0xbf2e40def03fcb5f4a5129b2f5803e21951325b92e00126cbe1427b7c25cfefd","urls":["bzz-raw://b560905fcc4b957d27c2abed78a1e82529c89fa472e91b3d108fbfd91aa7c3f7","dweb:/ipfs/QmRjLLtTWE6dFX2kBQCgLz7ossfMxhAFgDC8Jx9XuGL6Wy"],"license":"Apache-2.0"},"src/modules/auth/BaseSig.sol":{"keccak256":"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa","urls":["bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8","dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3"],"license":"Apache-2.0"},"src/modules/auth/SelfAuth.sol":{"keccak256":"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c","urls":["bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42","dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W"],"license":"Apache-2.0"},"src/modules/auth/Stage1Auth.sol":{"keccak256":"0x399e21aad2b30bf80a21766bd3442d676a26eb66c02423617b2772df7204cb0a","urls":["bzz-raw://25c698dee10c6fbb8b63adb4023f1886669b8e9c54dcd98871f0bd6a2b6acf03","dweb:/ipfs/QmNzUFWCoymaoV7CFgJvbAWRsJAZkqBhSpgff26JVAr9hf"],"license":"Apache-2.0"},"src/modules/auth/Stage2Auth.sol":{"keccak256":"0x5b23b530522ba1c02248d1f7470352c57fbc91c245c7c577044f93f6bb560a59","urls":["bzz-raw://c30b8e13edc7e18e4ea7bc7f4b8deaf16301a8f2bb23e7697e6f6b74882a39dc","dweb:/ipfs/QmW69XvfeJepuPBrHb1Vpkikg43P4juEGdRkUWt8GrrAfL"],"license":"Apache-2.0"},"src/modules/interfaces/IAccount.sol":{"keccak256":"0x64ca3bb59ec4fc0a60d80402802365e2d5226afe7e7aabe3b21df936c84f2bcb","urls":["bzz-raw://ccfd2381e1874cdec2f473a9a17799a3b57360c0593d68ee66fcea9c16eb39b4","dweb:/ipfs/QmcjbJpGz3Exmu4fsj953Y2bG8rtQaVMEFUgT6W2dUXomr"],"license":"MIT"},"src/modules/interfaces/IAuth.sol":{"keccak256":"0xf6fa30af2ec91d5fbeac17c9b1f2aa73b7883c9ac98745605007e57666394b91","urls":["bzz-raw://6e90a87978519462f9612f4a17e38fddc1c7bcf700ff834a1de7dce326f30353","dweb:/ipfs/QmXmWAsRRK6t4jPs4VcXrouyokxdALM28D3odX7ub48WEp"],"license":"Apache-2.0"},"src/modules/interfaces/ICheckpointer.sol":{"keccak256":"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513","urls":["bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1","dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t"],"license":"Apache-2.0"},"src/modules/interfaces/IDelegatedExtension.sol":{"keccak256":"0xa2ae897e90fd70dd4a9e172bc04d019ba9c512e72c2df65fcb6daf87dd5ceb90","urls":["bzz-raw://cdf4b7c3dfb0aef6c9dbe8b2a0542018dc756ef2252d7101bcb3186192da0a11","dweb:/ipfs/QmPHCVu1DJ7fBrPBYA5y3hoF3a3XFEBwYCZ1ErGaxPhcYL"],"license":"Apache-2.0"},"src/modules/interfaces/IERC1155Receiver.sol":{"keccak256":"0xa23d0bc29233a91085922ea8a7e2cbe8b5f3358d3f2c3cdc58adade9a171d9c1","urls":["bzz-raw://2f06b8f3ae7a45441cc26da5b2ddd15ba76d1664178958f63f536e6c5e4fd0fb","dweb:/ipfs/QmR1Rnk8ciSn5s5wNLGvpE1QNRDsBVDfDT1ZXhei2brmFj"],"license":"Apache-2.0"},"src/modules/interfaces/IERC1271.sol":{"keccak256":"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9","urls":["bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b","dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF"],"license":"Apache-2.0"},"src/modules/interfaces/IERC223Receiver.sol":{"keccak256":"0x426221c0d48b651ed692edfa5388d6e5304e94f48598a71748134b2659e3890d","urls":["bzz-raw://9e1ed2fd5e390b5b943dc07c2e0ea9e524eb37263dc72c482365c159fc3659e5","dweb:/ipfs/QmWRDBvb1cthVPm4BSzKX3J5GpGGSBuDokkpRK9x5aA7JR"],"license":"Apache-2.0"},"src/modules/interfaces/IERC721Receiver.sol":{"keccak256":"0xbe14c3b727f283a467dc2f2221d3322c5a69cd64a3aacad85acab05e94438f35","urls":["bzz-raw://43ef086c509b8b88cae78f67c4bd979fd427736972cfe56f7423371ccc154e63","dweb:/ipfs/Qmc7Yp7Z1dQ925gzEZYVNUXnWr3YomvWkXfaGYLZpoy8J3"],"license":"Apache-2.0"},"src/modules/interfaces/IERC777Receiver.sol":{"keccak256":"0xd9144d439a96b0c6439cd9a186701aa530f4f782ff09fdbf6c3ef16b78b0d4e5","urls":["bzz-raw://d1f17484eda7184db4a00106b4952f15c1517872cbfe19663d6fce4e042729b2","dweb:/ipfs/QmWdhYmLNkUpgvPpSyGHstxrFwMfhRTVmxDpe4frkUu1Qh"],"license":"Apache-2.0"},"src/modules/interfaces/IEntryPoint.sol":{"keccak256":"0xd19922ea7a8ae09072a721138dc93e175fa77ecaa3ac6f2d759d5e5e944fb665","urls":["bzz-raw://20ecea69ddd4d8787c0bdc4487dea03e90f63f4296674a12728e331a78e62620","dweb:/ipfs/QmZUrX8zEqfHZEJQjNtDUXGS47bj2UuRCLfbkLPrXsot1c"],"license":"MIT"},"src/modules/interfaces/IPartialAuth.sol":{"keccak256":"0x0d1aa021615d8e90696e71a9468331457a1babfa2ffe169654b7456e5bcb7a73","urls":["bzz-raw://bbacd149a6358ab0d4b9c588d2e3a55fc71ed4723269150d7b91ca70092f6519","dweb:/ipfs/QmUSwtrYCrRcRFsy5rCzdMPrw1FCU7ZoeXdsW6kK9yc8FK"],"license":"Apache-2.0"},"src/modules/interfaces/ISapient.sol":{"keccak256":"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359","urls":["bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489","dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"src/utils/LibOptim.sol":{"keccak256":"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde","urls":["bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81","dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x"],"license":"Apache-2.0"},"test/mocks/Emitter.sol":{"keccak256":"0xb3fe3585f667c0af3e9deaaf6f7e68b16067014c9363367b4548c91abf367b27","urls":["bzz-raw://e6985271645ec1df625995837c2afb23f7042d7a4c18c992f5f1c9ff1c89b160","dweb:/ipfs/QmTwQRRY95Z73vDP5EuamAQxTaSprwGy3piLRrWDf9FnoU"],"license":"Apache-2.0"},"test/modules/ERC4337v07.t.sol":{"keccak256":"0x1a0333d0a453ccecdf06bc0fb2099a5ca383e9d6608ca25ca9d9e738d5c3de20","urls":["bzz-raw://a71470bb43a4b48a165025ce0fa3e5a1d6012867c39ee755dfba82802c320b4d","dweb:/ipfs/QmV95yMntjDBa5RZNLD5tN3zHsUbaS3DLsjFHv8ZG4Rdeo"],"license":"Apache-2.0"},"test/utils/PrimitivesRPC.sol":{"keccak256":"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe","urls":["bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe","dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv"],"license":"Apache-2.0"},"test/utils/TestUtils.sol":{"keccak256":"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79","urls":["bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad","dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa"],"license":"Apache-2.0"}},"version":1},"id":90} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Emitter.sol/Emitter.json b/contracts/artifacts/wallet-contracts-v3/Emitter.sol/Emitter.json new file mode 100644 index 00000000..c623289e --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Emitter.sol/Emitter.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"acceptImplicitRequest","inputs":[{"name":"wallet","type":"address","internalType":"address"},{"name":"attestation","type":"tuple","internalType":"struct Attestation","components":[{"name":"approvedSigner","type":"address","internalType":"address"},{"name":"identityType","type":"bytes4","internalType":"bytes4"},{"name":"issuerHash","type":"bytes32","internalType":"bytes32"},{"name":"audienceHash","type":"bytes32","internalType":"bytes32"},{"name":"applicationData","type":"bytes","internalType":"bytes"},{"name":"authData","type":"tuple","internalType":"struct AuthData","components":[{"name":"redirectUrl","type":"string","internalType":"string"},{"name":"issuedAt","type":"uint64","internalType":"uint64"}]}]},{"name":"call","type":"tuple","internalType":"struct Payload.Call","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"type":"function","name":"explicitEmit","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"implicitEmit","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"Explicit","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Implicit","inputs":[{"name":"sender","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"error","name":"InvalidCall","inputs":[{"name":"reason","type":"string","internalType":"string"}]}],"bytecode":{"object":"0x608080604052346015576105b6908161001b8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c9081630c0340fc14610188575080639d043a66146100a05763eca9b31a1461004057600080fd5b3461009b5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009b577f721b5e17196ee8f054e1c6084536bdfe64f23e747e9bb98627db351b3286f7bf6020604051338152a1005b600080fd5b3461009b5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009b5760043573ffffffffffffffffffffffffffffffffffffffff8116810361009b5760243567ffffffffffffffff811161009b5760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011261009b576044359067ffffffffffffffff821161009b5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc833603011261009b57602092610180926004019160040190610307565b604051908152f35b3461009b5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009b5760207fed94f157df493252d8e5700fc6b9bf2466c66387b3c1a19816847dfa9f31005791338152a1005b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561009b570180359067ffffffffffffffff821161009b5760200191813603831361009b57565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761027357604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b92919267ffffffffffffffff821161027357604051916102ea601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200184610232565b82948184528183011161009b578281602093846000960137010152565b909160408101600461031982846101e1565b90501491821592610522575b505061051b5760c08236031261009b5760405160c0810181811067ffffffffffffffff82111761027357604052823573ffffffffffffffffffffffffffffffffffffffff8116810361009b57815260208301357fffffffff000000000000000000000000000000000000000000000000000000008116810361009b576020820152604081019060408401358252606081019360608101358552608081013567ffffffffffffffff811161009b57810136601f8201121561009b576103f09036906020813591016102a2565b608083015260a08101359067ffffffffffffffff821161009b57019060408236031261009b57604051916040830183811067ffffffffffffffff82111761027357604052803567ffffffffffffffff811161009b5781019036601f8301121561009b57610465602092369084813591016102a2565b845201359067ffffffffffffffff8216820361009b5760a0916020840152015260405160208101907f616363657074496d706c696369745265717565737400000000000000000000008252601581526104bf603582610232565b51902092519051907fffffffffffffffffffffffffffffffffffffffff000000000000000000000000604051936020850195865260601b1660408401526054830152607482015260748152610515609482610232565b51902090565b5050600090565b61052c92506101e1565b60041161009b57357fffffffff00000000000000000000000000000000000000000000000000000000167feca9b31a000000000000000000000000000000000000000000000000000000001415388061032556fea2646970667358221220b244c0331517bebc589a2a51667c56df4245db1deb284e6da3f0e5a41bbd9d1664736f6c634300081c0033","sourceMap":"324:810:86:-:0;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608080604052600436101561001357600080fd5b60003560e01c9081630c0340fc14610188575080639d043a66146100a05763eca9b31a1461004057600080fd5b3461009b5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009b577f721b5e17196ee8f054e1c6084536bdfe64f23e747e9bb98627db351b3286f7bf6020604051338152a1005b600080fd5b3461009b5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009b5760043573ffffffffffffffffffffffffffffffffffffffff8116810361009b5760243567ffffffffffffffff811161009b5760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011261009b576044359067ffffffffffffffff821161009b5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc833603011261009b57602092610180926004019160040190610307565b604051908152f35b3461009b5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009b5760207fed94f157df493252d8e5700fc6b9bf2466c66387b3c1a19816847dfa9f31005791338152a1005b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561009b570180359067ffffffffffffffff821161009b5760200191813603831361009b57565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761027357604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b92919267ffffffffffffffff821161027357604051916102ea601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200184610232565b82948184528183011161009b578281602093846000960137010152565b909160408101600461031982846101e1565b90501491821592610522575b505061051b5760c08236031261009b5760405160c0810181811067ffffffffffffffff82111761027357604052823573ffffffffffffffffffffffffffffffffffffffff8116810361009b57815260208301357fffffffff000000000000000000000000000000000000000000000000000000008116810361009b576020820152604081019060408401358252606081019360608101358552608081013567ffffffffffffffff811161009b57810136601f8201121561009b576103f09036906020813591016102a2565b608083015260a08101359067ffffffffffffffff821161009b57019060408236031261009b57604051916040830183811067ffffffffffffffff82111761027357604052803567ffffffffffffffff811161009b5781019036601f8301121561009b57610465602092369084813591016102a2565b845201359067ffffffffffffffff8216820361009b5760a0916020840152015260405160208101907f616363657074496d706c696369745265717565737400000000000000000000008252601581526104bf603582610232565b51902092519051907fffffffffffffffffffffffffffffffffffffffff000000000000000000000000604051936020850195865260601b1660408401526054830152607482015260748152610515609482610232565b51902090565b5050600090565b61052c92506101e1565b60041161009b57357fffffffff00000000000000000000000000000000000000000000000000000000167feca9b31a000000000000000000000000000000000000000000000000000000001415388061032556fea2646970667358221220b244c0331517bebc589a2a51667c56df4245db1deb284e6da3f0e5a41bbd9d1664736f6c634300081c0033","sourceMap":"324:810:86:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;561:20;324:810;;;570:10;324:810;;561:20;324:810;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;634:20;643:10;;324:810;;634:20;324:810;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;324:810:86;;;;;-1:-1:-1;324:810:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;324:810:86;;;;;;:::o;663:468::-;;;830:9;;;850:1;830:9;;;;:::i;:::-;:21;;;;;;:76;;;663:468;826:114;;;;324:810;;;;;;;830:9;324:810;;;;;;;;;;;;;830:9;324:810;;;;;;;;;;;;;;;;;;;;;;;;;;;830:9;324:810;;;830:9;324:810;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;830:9;324:810;;;;;;830:9;324:810;;830:9;324:810;;;;;;;;;;;830:9;324:810;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;830:9;324:810;;284:41:41;;324:810:86;;;;284:41:41;;;;;;;:::i;:::-;324:810:86;274:52:41;;;;;;324:810:86;274:52:41;830:9:86;324:810;4476:112:40;324:810:86;4476:112:40;;324:810:86;;;;274:52:41;;830:9:86;274:52:41;;;;;;324:810:86;274:52:41;;;324:810:86;274:52:41;4476:112:40;;;;;;:::i;:::-;324:810:86;4459:135:40;;663:468:86;:::o;826:114::-;916:17;;324:810;916:17;:::o;830:76::-;862:9;;;;:::i;:::-;850:1;324:810;;;;;;;855:51;;830:76;;;","linkReferences":{}},"methodIdentifiers":{"acceptImplicitRequest(address,(address,bytes4,bytes32,bytes32,bytes,(string,uint64)),(address,uint256,bytes,uint256,bool,bool,uint256))":"9d043a66","explicitEmit()":"0c0340fc","implicitEmit()":"eca9b31a"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"InvalidCall\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"Explicit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"Implicit\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"wallet\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"approvedSigner\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"identityType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes32\",\"name\":\"issuerHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"audienceHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"applicationData\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"redirectUrl\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"issuedAt\",\"type\":\"uint64\"}],\"internalType\":\"struct AuthData\",\"name\":\"authData\",\"type\":\"tuple\"}],\"internalType\":\"struct Attestation\",\"name\":\"attestation\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call\",\"name\":\"call\",\"type\":\"tuple\"}],\"name\":\"acceptImplicitRequest\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"explicitEmit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implicitEmit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"acceptImplicitRequest(address,(address,bytes4,bytes32,bytes32,bytes,(string,uint64)),(address,uint256,bytes,uint256,bool,bool,uint256))\":{\"params\":{\"attestation\":\"The attestation data\",\"call\":\"The call to validate\",\"wallet\":\"The wallet's address\"},\"returns\":{\"_0\":\"The hash of the implicit request if valid\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"acceptImplicitRequest(address,(address,bytes4,bytes32,bytes32,bytes,(string,uint64)),(address,uint256,bytes,uint256,bool,bool,uint256))\":{\"notice\":\"Determines if an implicit request is valid\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/mocks/Emitter.sol\":\"Emitter\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/extensions/sessions/implicit/Attestation.sol\":{\"keccak256\":\"0xcaa44022b5eb4bc7ab487b3b1a0125da67e2e891cee983ef6cdb6814f045efc8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://94829782b6dcb482d7c002511c590d1ad8de3b21e5e72575df18be73565b3638\",\"dweb:/ipfs/QmZ4u9FxALzMzKR7auW8FmFkhGVw8kRDeDRJ1PKwKaWNWF\"]},\"src/extensions/sessions/implicit/ISignalsImplicitMode.sol\":{\"keccak256\":\"0x6cb48f50c49bcb3c7071306fe9fac6c102bc9eabf73d9909e19ab3b9a835d0a8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://15297e969f64fc1152654d1cefbe276c15a0ecfc11f86b4c276bb0b454fe700a\",\"dweb:/ipfs/QmeehNFYBPPtJePwUcqiYCgiuFotur4VVVCV1KvegdCCZ4\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/interfaces/ISapient.sol\":{\"keccak256\":\"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489\",\"dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"test/mocks/Emitter.sol\":{\"keccak256\":\"0xb3fe3585f667c0af3e9deaaf6f7e68b16067014c9363367b4548c91abf367b27\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e6985271645ec1df625995837c2afb23f7042d7a4c18c992f5f1c9ff1c89b160\",\"dweb:/ipfs/QmTwQRRY95Z73vDP5EuamAQxTaSprwGy3piLRrWDf9FnoU\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"reason","type":"string"}],"type":"error","name":"InvalidCall"},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false}],"type":"event","name":"Explicit","anonymous":false},{"inputs":[{"internalType":"address","name":"sender","type":"address","indexed":false}],"type":"event","name":"Implicit","anonymous":false},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"struct Attestation","name":"attestation","type":"tuple","components":[{"internalType":"address","name":"approvedSigner","type":"address"},{"internalType":"bytes4","name":"identityType","type":"bytes4"},{"internalType":"bytes32","name":"issuerHash","type":"bytes32"},{"internalType":"bytes32","name":"audienceHash","type":"bytes32"},{"internalType":"bytes","name":"applicationData","type":"bytes"},{"internalType":"struct AuthData","name":"authData","type":"tuple","components":[{"internalType":"string","name":"redirectUrl","type":"string"},{"internalType":"uint64","name":"issuedAt","type":"uint64"}]}]},{"internalType":"struct Payload.Call","name":"call","type":"tuple","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]}],"stateMutability":"pure","type":"function","name":"acceptImplicitRequest","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"explicitEmit"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"implicitEmit"}],"devdoc":{"kind":"dev","methods":{"acceptImplicitRequest(address,(address,bytes4,bytes32,bytes32,bytes,(string,uint64)),(address,uint256,bytes,uint256,bool,bool,uint256))":{"params":{"attestation":"The attestation data","call":"The call to validate","wallet":"The wallet's address"},"returns":{"_0":"The hash of the implicit request if valid"}}},"version":1},"userdoc":{"kind":"user","methods":{"acceptImplicitRequest(address,(address,bytes4,bytes32,bytes32,bytes,(string,uint64)),(address,uint256,bytes,uint256,bool,bool,uint256))":{"notice":"Determines if an implicit request is valid"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/mocks/Emitter.sol":"Emitter"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/extensions/sessions/implicit/Attestation.sol":{"keccak256":"0xcaa44022b5eb4bc7ab487b3b1a0125da67e2e891cee983ef6cdb6814f045efc8","urls":["bzz-raw://94829782b6dcb482d7c002511c590d1ad8de3b21e5e72575df18be73565b3638","dweb:/ipfs/QmZ4u9FxALzMzKR7auW8FmFkhGVw8kRDeDRJ1PKwKaWNWF"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/ISignalsImplicitMode.sol":{"keccak256":"0x6cb48f50c49bcb3c7071306fe9fac6c102bc9eabf73d9909e19ab3b9a835d0a8","urls":["bzz-raw://15297e969f64fc1152654d1cefbe276c15a0ecfc11f86b4c276bb0b454fe700a","dweb:/ipfs/QmeehNFYBPPtJePwUcqiYCgiuFotur4VVVCV1KvegdCCZ4"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/interfaces/ISapient.sol":{"keccak256":"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359","urls":["bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489","dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"test/mocks/Emitter.sol":{"keccak256":"0xb3fe3585f667c0af3e9deaaf6f7e68b16067014c9363367b4548c91abf367b27","urls":["bzz-raw://e6985271645ec1df625995837c2afb23f7042d7a4c18c992f5f1c9ff1c89b160","dweb:/ipfs/QmTwQRRY95Z73vDP5EuamAQxTaSprwGy3piLRrWDf9FnoU"],"license":"Apache-2.0"}},"version":1},"id":86} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Estimator.sol/Estimator.json b/contracts/artifacts/wallet-contracts-v3/Estimator.sol/Estimator.json new file mode 100644 index 00000000..4b42709e --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Estimator.sol/Estimator.json @@ -0,0 +1 @@ +{"abi":[{"type":"constructor","inputs":[{"name":"_entryPoint","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"fallback","stateMutability":"payable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"addHook","inputs":[{"name":"selector","type":"bytes4","internalType":"bytes4"},{"name":"implementation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"entrypoint","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"estimate","inputs":[{"name":"_payload","type":"bytes","internalType":"bytes"},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"gasUsed","type":"uint256","internalType":"uint256"}],"stateMutability":"payable"},{"type":"function","name":"execute","inputs":[{"name":"_payload","type":"bytes","internalType":"bytes"},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"executeUserOp","inputs":[{"name":"_payload","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getImplementation","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getStaticSignature","inputs":[{"name":"_hash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"imageHash","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"isValidSignature","inputs":[{"name":"_hash","type":"bytes32","internalType":"bytes32"},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"view"},{"type":"function","name":"onERC1155BatchReceived","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256[]","internalType":"uint256[]"},{"name":"","type":"uint256[]","internalType":"uint256[]"},{"name":"","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"pure"},{"type":"function","name":"onERC1155Received","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"pure"},{"type":"function","name":"onERC721Received","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"pure"},{"type":"function","name":"readHook","inputs":[{"name":"selector","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"readNonce","inputs":[{"name":"_space","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"recoverPartialSignature","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"threshold","type":"uint256","internalType":"uint256"},{"name":"weight","type":"uint256","internalType":"uint256"},{"name":"isValidImage","type":"bool","internalType":"bool"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"checkpoint","type":"uint256","internalType":"uint256"},{"name":"opHash","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"recoverSapientSignature","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"removeHook","inputs":[{"name":"selector","type":"bytes4","internalType":"bytes4"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"selfExecute","inputs":[{"name":"_payload","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"setStaticSignature","inputs":[{"name":"_hash","type":"bytes32","internalType":"bytes32"},{"name":"_address","type":"address","internalType":"address"},{"name":"_timestamp","type":"uint96","internalType":"uint96"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"tokenReceived","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"pure"},{"type":"function","name":"tokensReceived","inputs":[{"name":"operator","type":"address","internalType":"address"},{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"operatorData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateImageHash","inputs":[{"name":"_imageHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateImplementation","inputs":[{"name":"_implementation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"validateUserOp","inputs":[{"name":"userOp","type":"tuple","internalType":"struct PackedUserOperation","components":[{"name":"sender","type":"address","internalType":"address"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"initCode","type":"bytes","internalType":"bytes"},{"name":"callData","type":"bytes","internalType":"bytes"},{"name":"accountGasLimits","type":"bytes32","internalType":"bytes32"},{"name":"preVerificationGas","type":"uint256","internalType":"uint256"},{"name":"gasFees","type":"bytes32","internalType":"bytes32"},{"name":"paymasterAndData","type":"bytes","internalType":"bytes"},{"name":"signature","type":"bytes","internalType":"bytes"}]},{"name":"userOpHash","type":"bytes32","internalType":"bytes32"},{"name":"missingAccountFunds","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"validationData","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"event","name":"CallAborted","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"_returnData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"CallFailed","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"_returnData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"CallSkipped","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"CallSucceeded","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"DefinedHook","inputs":[{"name":"selector","type":"bytes4","indexed":false,"internalType":"bytes4"},{"name":"implementation","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"ImageHashUpdated","inputs":[{"name":"newImageHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"ImplementationUpdated","inputs":[{"name":"newImplementation","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"NonceChange","inputs":[{"name":"_space","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"_newNonce","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"StaticSignatureSet","inputs":[{"name":"_hash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_address","type":"address","indexed":false,"internalType":"address"},{"name":"_timestamp","type":"uint96","indexed":false,"internalType":"uint96"}],"anonymous":false},{"type":"error","name":"BadNonce","inputs":[{"name":"_space","type":"uint256","internalType":"uint256"},{"name":"_provided","type":"uint256","internalType":"uint256"},{"name":"_current","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC4337Disabled","inputs":[]},{"type":"error","name":"HookAlreadyExists","inputs":[{"name":"selector","type":"bytes4","internalType":"bytes4"}]},{"type":"error","name":"HookDoesNotExist","inputs":[{"name":"selector","type":"bytes4","internalType":"bytes4"}]},{"type":"error","name":"ImageHashIsZero","inputs":[]},{"type":"error","name":"InvalidERC1271Signature","inputs":[{"name":"_opHash","type":"bytes32","internalType":"bytes32"},{"name":"_signer","type":"address","internalType":"address"},{"name":"_signature","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"InvalidEntryPoint","inputs":[{"name":"_entrypoint","type":"address","internalType":"address"}]},{"type":"error","name":"InvalidKind","inputs":[{"name":"kind","type":"uint8","internalType":"uint8"}]},{"type":"error","name":"InvalidSapientSignature","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"InvalidSignature","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"InvalidSignatureFlag","inputs":[{"name":"_flag","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidSignatureWeight","inputs":[{"name":"_threshold","type":"uint256","internalType":"uint256"},{"name":"_weight","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidStaticSignatureExpired","inputs":[{"name":"_opHash","type":"bytes32","internalType":"bytes32"},{"name":"_expires","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidStaticSignatureWrongCaller","inputs":[{"name":"_opHash","type":"bytes32","internalType":"bytes32"},{"name":"_caller","type":"address","internalType":"address"},{"name":"_expectedCaller","type":"address","internalType":"address"}]},{"type":"error","name":"LowWeightChainedSignature","inputs":[{"name":"_signature","type":"bytes","internalType":"bytes"},{"name":"_threshold","type":"uint256","internalType":"uint256"},{"name":"_weight","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"NotEnoughGas","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_index","type":"uint256","internalType":"uint256"},{"name":"_gasLeft","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"OnlySelf","inputs":[{"name":"_sender","type":"address","internalType":"address"}]},{"type":"error","name":"Reverted","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_index","type":"uint256","internalType":"uint256"},{"name":"_returnData","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"UnusedSnapshot","inputs":[{"name":"_snapshot","type":"tuple","internalType":"struct Snapshot","components":[{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"checkpoint","type":"uint256","internalType":"uint256"}]}]},{"type":"error","name":"WrongChainedCheckpointOrder","inputs":[{"name":"_nextCheckpoint","type":"uint256","internalType":"uint256"},{"name":"_checkpoint","type":"uint256","internalType":"uint256"}]}],"bytecode":{"object":"0x60a034607457601f613e6d38819003918201601f19168301916001600160401b03831184841017607957808492602094604052833981010312607457516001600160a01b0381168103607457608052604051613ddd908161009082396080518181816110a3015281816111e00152611a660152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6080604052600436101561001e575b361561001c5761001c611c2e565b005b60003560e01c806223de291461019d578063025b22bc1461019857806313792a4a14610193578063150b7a021461018e5780631626ba7e1461018957806319822f7c146101845780631a9b23371461017f5780631f6a1eb91461017a57806329561426146101755780634fcf3eca1461017057806351605d801461016b5780636ea44577146101665780638943ec02146101615780638c3f55631461015c57806392dcb3fc14610157578063975befdb146101525780639c145aed1461014d578063a65d69d414610148578063aaf10f4214610143578063ad55366b1461013e578063b93ea7ad14610139578063bc197c8114610134578063f23a6e611461012f5763f727ef1c0361000e57611556565b6114c9565b6113f7565b611298565b611255565b611204565b611195565b61107d565b610fde565b610f80565b610f44565b610ec0565b610e91565b610ded565b610cd1565b610c18565b610b98565b610ac9565b610a14565b61098c565b6108ff565b610802565b6102eb565b61025f565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101c557565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101c557565b6044359073ffffffffffffffffffffffffffffffffffffffff821682036101c557565b359073ffffffffffffffffffffffffffffffffffffffff821682036101c557565b9181601f840112156101c55782359167ffffffffffffffff83116101c557602083818601950101116101c557565b346101c55760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576102966101a2565b5061029f6101ca565b506102a86101ed565b5060843567ffffffffffffffff81116101c5576102c9903690600401610231565b505060a43567ffffffffffffffff81116101c55761001c903690600401610231565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55761031d6101a2565b30330361036a576020817f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca0392305573ffffffffffffffffffffffffffffffffffffffff60405191168152a1005b7fa19dbf00000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff8211176103e357604052565b610398565b6040810190811067ffffffffffffffff8211176103e357604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176103e357604052565b6040519061045460e083610404565b565b6040519061045461012083610404565b359060ff821682036101c557565b359081151582036101c557565b67ffffffffffffffff81116103e35760051b60200190565b67ffffffffffffffff81116103e357601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926104df82610499565b916104ed6040519384610404565b8294818452818301116101c5578281602093846000960137010152565b9080601f830112156101c557816020610525933591016104d3565b90565b81601f820112156101c55780359061053f82610481565b9261054d6040519485610404565b82845260208085019360051b830101918183116101c55760208101935b83851061057957505050505090565b843567ffffffffffffffff81116101c557820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082860301126101c5576105c0610445565b916105cd60208301610210565b83526040820135602084015260608201359267ffffffffffffffff84116101c55760e08361060288602080988198010161050a565b60408401526080810135606084015261061d60a08201610474565b608084015261062e60c08201610474565b60a0840152013560c082015281520194019361056a565b9080601f830112156101c557813561065c81610481565b9261066a6040519485610404565b81845260208085019260051b8201019283116101c557602001905b8282106106925750505090565b6020809161069f84610210565b815201910190610685565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126101c55760043567ffffffffffffffff81116101c5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82850301126101c55761071c610456565b9061072981600401610466565b825261073760248201610474565b6020830152604481013567ffffffffffffffff81116101c55784600461075f92840101610528565b6040830152606481013560608301526084810135608083015260a481013567ffffffffffffffff81116101c55784600461079b9284010161050a565b60a083015260c481013560c083015260e481013560e083015261010481013567ffffffffffffffff81116101c557600485916107d8930101610645565b610100820152916024359067ffffffffffffffff82116101c5576107fe91600401610231565b9091565b346101c557610810366106aa565b909161010081019261082b61082685515161165e565b611679565b9160005b85518051821015610892579061088c61086761084d836001956116f7565b5173ffffffffffffffffffffffffffffffffffffffff1690565b61087183886116f7565b9073ffffffffffffffffffffffffffffffffffffffff169052565b0161082f565b50508383866108a733610871835151856116f7565b526108b3818484611d00565b50156108c55760405160018152602090f35b6108fb906040519384937ff58cc8b500000000000000000000000000000000000000000000000000000000855260048501611952565b0390fd5b346101c55760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576109366101a2565b5061093f6101ca565b5060643567ffffffffffffffff81116101c557610960903690600401610231565b505060206040517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b346101c55760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760043560243567ffffffffffffffff81116101c5576020916109e46109ea923690600401610231565b91611977565b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b346101c55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760043567ffffffffffffffff81116101c5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126101c557610a9760209160243560443591600401611a4c565b604051908152f35b7fffffffff000000000000000000000000000000000000000000000000000000008116036101c557565b346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576020610b0e600435610b0981610a9f565b611edc565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101c55760043567ffffffffffffffff81116101c55781610b7591600401610231565b929092916024359067ffffffffffffffff82116101c5576107fe91600401610231565b610baf610ba436610b2c565b919390935a93612011565b91610bc360608401516080850151906122d5565b610bce828585611d00565b929015610be0575061001c935061242e565b836108fb86926040519384937fa2b6d61b00000000000000000000000000000000000000000000000000000000855260048501611952565b346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760043530330361036a578015610ca7576020817f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf855604051908152a1005b7f4294d1270000000000000000000000000000000000000000000000000000000060005260046000fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c557600435610d0781610a9f565b30330361036a5773ffffffffffffffffffffffffffffffffffffffff610d2c82611edc565b1615610d925760407fffffffff000000000000000000000000000000000000000000000000000000007f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19216610d83600082612c86565b815190815260006020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f1c3812cc000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b60009103126101c557565b346101c55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760207fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf854604051908152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101c5576004359067ffffffffffffffff82116101c5576107fe91600401610231565b610e9a36610e48565b9030330361036a57610eb061001c925a92612011565b90610eba82612752565b9061242e565b346101c55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c557610ef76101a2565b5060443567ffffffffffffffff81116101c557610f18903690600401610231565b505060206040517f8943ec02000000000000000000000000000000000000000000000000000000008152f35b346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576020610a976004356127e6565b346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576040610fbc60043561282c565b73ffffffffffffffffffffffffffffffffffffffff8351921682526020820152f35b610ff6610fea36610b2c565b91939092935a94612011565b9161100e6060840151611008816127e6565b906122d5565b611019828285611d00565b929015611046578461102c85858361242e565b5a810390811161104157602090604051908152f35b61162f565b6108fb84916040519384937fa2b6d61b00000000000000000000000000000000000000000000000000000000855260048501611952565b346101c55761108b36610e48565b9073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016801561116b57330361113d57303b156101c5576111119160009160405193849283927f6ea4457700000000000000000000000000000000000000000000000000000000845260048401611bed565b038183305af180156111385761112357005b80611132600061001c93610404565b80610de2565b6119c3565b7f1d6ddbf4000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7fd13d78350000000000000000000000000000000000000000000000000000000060005260046000fd5b346101c55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101c55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576020305473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346101c55760c061127160008061126b366106aa565b916128f4565b926040929192519485526020850152600160408501526060840152608083015260a0820152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576004356112ce81610a9f565b6112d66101ca565b9030330361036a5773ffffffffffffffffffffffffffffffffffffffff6112fc82611edc565b16611376577f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19173ffffffffffffffffffffffffffffffffffffffff7fffffffff000000000000000000000000000000000000000000000000000000006040931691166113698183612c86565b82519182526020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f5b4d6d6a000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b9181601f840112156101c55782359167ffffffffffffffff83116101c5576020808501948460051b0101116101c557565b346101c55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55761142e6101a2565b506114376101ca565b5060443567ffffffffffffffff81116101c5576114589036906004016113c6565b505060643567ffffffffffffffff81116101c55761147a9036906004016113c6565b505060843567ffffffffffffffff81116101c55761149c903690600401610231565b50506040517fbc197c81000000000000000000000000000000000000000000000000000000008152602090f35b346101c55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576115006101a2565b506115096101ca565b5060843567ffffffffffffffff81116101c55761152a903690600401610231565b505060206040517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b346101c55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576004356115906101ca565b604435916bffffffffffffffffffffffff83168093036101c55730330361036a578273ffffffffffffffffffffffffffffffffffffffff8361161b7febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1967fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606097881b161785612c41565b6040519384521660208301526040820152a1005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b906001820180921161104157565b9190820180921161104157565b9061168382610481565b6116906040519182610404565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06116be8294610481565b0190602036910137565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805182101561170b5760209160051b010190565b6116c8565b919082519283825260005b84811061175a5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b8060208092840101518282860101520161171b565b9080602083519182815201916020808360051b8301019401926000915b83831061179b57505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c08061180e604085015160e0604086015260e0850190611710565b936060810151606085015260808101511515608085015260a0810151151560a085015201519101529701930193019193929061178c565b906020808351928381520192019060005b8181106118635750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101611856565b805160ff168252610525916020828101511515908201526101006118ed6118c76040850151610120604086015261012085019061176f565b606085015160608501526080850151608085015260a085015184820360a0860152611710565b9260c081015160c084015260e081015160e0840152015190610100818403910152611845565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b91611969610525949260408552604085019061188f565b926020818503910152611913565b906119949291611985611e81565b906003825260e0820152611d00565b50156119be577f1626ba7e0000000000000000000000000000000000000000000000000000000090565b600090565b6040513d6000823e3d90fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101c5570180359067ffffffffffffffff82116101c5576020019181360383136101c557565b908160209103126101c5575161052581610a9f565b604090610525949281528160208201520191611913565b91909173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691821561116b5782330361113d5780611b7e575b506020915080610100611aae9201906119cf565b92611ae660405194859384937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611a35565b0381305afa908115611138577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091611b4f575b501603611b4a57600090565b600190565b611b71915060203d602011611b77575b611b698183610404565b810190611a20565b38611b3e565b503d611b5f565b823b156101c5576040517fb760faf900000000000000000000000000000000000000000000000000000000815230600482015292600091849160249183915af190811561113857602092611aae92611bd8575b5090611a9a565b806111326000611be793610404565b38611bd1565b916020610525938181520191611913565b3d15611c29573d90611c0f82610499565b91611c1d6040519384610404565b82523d6000602084013e565b606090565b600436108015611c3b5750565b611c71906000357fffffffff00000000000000000000000000000000000000000000000000000000811691611cc3575b50611edc565b73ffffffffffffffffffffffffffffffffffffffff8116611c8f5750565b60008091604051368382378036810184815203915af4611cad611bfe565b9015611cbb57602081519101f35b602081519101fd5b7fffffffff000000000000000000000000000000000000000000000000000000008092503660040360031b1b161638611c6b565b901561170b5790565b91907f800000000000000000000000000000000000000000000000000000000000000080611d57611d318585611cf7565b357fff000000000000000000000000000000000000000000000000000000000000001690565b1614611dad576000918291611d6b946128f4565b91505091808210611d7d575050600191565b7ffd41fcba0000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b5050611db890612752565b90611dc28261282c565b42811115611e4f575073ffffffffffffffffffffffffffffffffffffffff81168015159081611e44575b50611df8575060019190565b7f8945c3130000000000000000000000000000000000000000000000000000000060005260048390523360245273ffffffffffffffffffffffffffffffffffffffff1660445260646000fd5b905033141538611dec565b7ff95b6ab700000000000000000000000000000000000000000000000000000000600052600484905260245260446000fd5b60405190610120820182811067ffffffffffffffff8211176103e3576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b73ffffffffffffffffffffffffffffffffffffffff906040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a120845216604082015260408152611f53606082610404565b519020541690565b90611f6582610481565b611f726040519182610404565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611fa08294610481565b019060005b828110611fb157505050565b602090604051611fc0816103c7565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c082015282828501015201611fa5565b909392938483116101c55784116101c5578101920390565b91909161201c611e81565b6000815292600190823560f81c827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818316016122be5750600060608701525b600761206b60ff831660011c90565b168061226d575b5060108181160361223857506001925b61208b84611f5b565b92604087019384526000905b8582106120a657505050505050565b8281013560f81c9060010190918160018085160361221657506120ea306120ce8389516116f7565b519073ffffffffffffffffffffffffffffffffffffffff169052565b6002808416146121f6575b6004808416146121a8575b600880841614612175575b61215e61215860c0856121378a608061212e8860108060019c9d161493516116f7565b51019015159052565b61214e8a60a061212e8860208087161493516116f7565b1660061c60031690565b60ff1690565b60c061216b8389516116f7565b5101520190612097565b60019161215e906121589060c09087810135906020019690606061219a878d516116f7565b51015295945050505061210b565b906121f0908481013560e81c906003016121e96121d06121c8848461166c565b838a8a611ff9565b919060406121df888d516116f7565b51019236916104d3565b905261166c565b90612100565b9083810135906020019190602061220e8389516116f7565b5101526120f5565b61223392508481013560601c9060140192906120ce8389516116f7565b6120ea565b60209081160361225a5761ffff918381013560f01c906002015b921692612082565b60ff918381013560f81c90600101612252565b6122b1919385929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290608087015238612072565b80850135606090811c90880152601401925061205c565b906122df826127e6565b81810361236557509060017f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f8819201908160405160208101907f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e82528360408201526040815261234f606082610404565b51902055604080519182526020820192909252a1565b917f9b6514f40000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b6123b16040929594939560608352606083019061188f565b9460208201520152565b9261052596959260c09592855260208501526040840152606083015260808201528160a08201520190611710565b6105259392606092825260208201528160408201520190611710565b61241b610525949260608352606083019061188f565b9260208201526040818403910152611710565b916000604082019384515190825b82811061244d575b50505050505050565b6124588188516116f7565b519361246760a0860151151590565b8061274a575b61270a575060009360608101518015801580612701575b6126c95784906124976080850151151590565b1561268357612542926124be855173ffffffffffffffffffffffffffffffffffffffff1690565b911561267d57505a905b61253d8b61251160608d01516040890151908c8b604051998a967f4c4e814c000000000000000000000000000000000000000000000000000000006020890152602488016123bb565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101855284610404565b612c14565b15612585575b506040805187815260208101839052600192917f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a91a15b0161243c565b60c0018051156126345760018151146125f557516002146125a65738612548565b9493505050507fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b92506125e66125da612c26565b604051938493846123e9565b0390a138808080808080612444565b50846108fb612602612c26565b6040519384937f7f6b0bb100000000000000000000000000000000000000000000000000000000855260048501612405565b509250600180937f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d612675612667612c26565b604051918291858c846123e9565b0390a161257f565b906124c8565b83516126be93925073ffffffffffffffffffffffffffffffffffffffff16916020850151916000146126c357505a905b604085015192612c02565b612542565b906126b3565b83886108fb5a6040519384937f2139527400000000000000000000000000000000000000000000000000000000855260048501612399565b50815a10612484565b6040805188815260208101849052919550600192917f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b9181908101612675565b50801561246d565b6127b46127e061277261276c602085015115153090612cc5565b93612dc0565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610404565b51902090565b60405160208101917f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8352604082015260408152612825606082610404565b5190205490565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e86835260408201526040815261286b606082610404565b51902054906bffffffffffffffffffffffff8260601c921690565b60405190612893826103e8565b60006020838281520152565b908160409103126101c5576020604051916128b9836103e8565b805183520151602082015290565b60409073ffffffffffffffffffffffffffffffffffffffff61052594931681528160208201520190611710565b909491939291853560f81c6001909381908761290e612886565b9360408089161480612be4575b612ae7575b505050600180861614612ac15760028581161460208501526007600286901c1688820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691019080969181966020166129909060051c90565b6129999061165e565b8a820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101959098899a816129e584612752565b9889936129f193611ff9565b916129fb936131d7565b9098612a0f91600052602052604060002090565b90612a2291600052602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff16612a4b91600052602052604060002090565b94815190868215159283612ab6575b505081612aa7575b50612a6a5750565b6040517fccbb534f000000000000000000000000000000000000000000000000000000008152815160048201526020909101516024820152604490fd5b90506020820151101538612a62565b141591508638612a5a565b86612adc9792949550612ad49398611ff9565b939092612fb5565b919394909293929190565b8a81013560601c985060140192509087908a90849015612b0b575b50829150612920565b60038101955073ffffffffffffffffffffffffffffffffffffffff945081013560e81c92604092612b8e929091612b5991612b52918990612b4c898361166c565b92611ff9565b36916104d3565b83519586809481937fccce3bc800000000000000000000000000000000000000000000000000000000835230600484016128c7565b0392165afa801561113857612bac92600091612bb5575b509261166c565b86388981612b02565b612bd7915060403d604011612bdd575b612bcf8183610404565b81019061289f565b38612ba5565b503d612bc5565b5073ffffffffffffffffffffffffffffffffffffffff89161561291b565b9160009391849360208451940192f190565b9160009291839260208351930191f490565b3d90604051916020818401016040528083526000602084013e565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e868352604082015260408152612c80606082610404565b51902055565b60405160208101917fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1208352604082015260408152612c80606082610404565b15612d75576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a081526127e060c082610404565b4690612cce565b805160209091019060005b818110612d945750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101612d87565b610100810151604051612ddb816127b4602082018095612d7c565b51902090612dea815160ff1690565b60ff811680612e63575050906127e0612e066040840151613a6b565b926127b460806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b60018103612ec157505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d466938101938452908101919091526060810192909252906127e081608081016127b4565b60028103612f1757505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e4602082019081529181019290925260608201929092526127e081608081016127b4565b600303612f6b575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d466602082019081529181019290925260608201929092526127e081608081016127b4565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b906123b19060409396959496606084526060840191611913565b9194929092600095600095600095600095600095612fd1611e81565b60028152937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9460005b8281106130285750505050505050805115158061301a575b612a6a5750565b506020810151841115613013565b600381019d50959b509399509197509290919061304c908b9085013560e81c61166c565b958a6000848903613190575089915b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c0361316057509060016130958961309c948789611ff9565b908b6128f4565b9c939c9b929b9a919a99909a9b9d8e9d9e8f905b1061311a5750928b885114613111575b808b10156130df57508a60c08501528992959295949194939093612ffb565b7f37daf62b0000000000000000000000000000000000000000000000000000000060005260048b905260245260446000fd5b600088526130c0565b8d8f6108fb61312b85858c8e611ff9565b9390926040519485947fb006aba000000000000000000000000000000000000000000000000000000000865260048601612f9b565b9798999a9160016131768b61317d94888a611ff9565b90866128f4565b50929d919c909b929a9092918e8e6130b0565b9161305b565b73ffffffffffffffffffffffffffffffffffffffff610525959360609383521660208201528160408201520191611913565b908160209103126101c5575190565b9391909360009460009460005b8181106131f2575050505050565b8481013560f881901c9860019092019788979692909160fc1c9889156139d657506001891461399657600289146137d957600389146137aa57600489146137295760068914613689576005891461363b5760078914613574576008891461351e57600989146133f557600a8914613292577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b909192939495969750600389169788156133e4575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101908101908161330a918787611ff9565b6040517f898bd92100000000000000000000000000000000000000000000000000000000815293918491613342918a60048501611a35565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa91821561113857613385936000936133b1575b5060ff909a168091019a613d37565b9080156133ab579061339f91600052602052604060002090565b955b93929190936131e4565b5061339f565b60ff9193506133d69060203d81116133dd575b6133ce8183610404565b8101906131c8565b9290613376565b503d6133c4565b8084013560f81c98506001016132a7565b9091929394959697506003891697881561350d575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101908101908161346d918787611ff9565b6040517f13792a4a000000000000000000000000000000000000000000000000000000008152939184916134a5918b60048501611952565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa918215611138576134e7936000936133b1575060ff909a168091019a613d37565b908015613507579061350191600052602052604060002090565b956133a1565b50613501565b8084013560f81c985060010161340a565b98506020870197509495939492939192909182013561353c86613cde565b811461354c575b6134e790613cf8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9850613543565b975090919293949597600f16968715613629575b6020600061359a6136079a9b86613ba6565b9c9092918a6040516135dd816127b48a82019485603c917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008252601c8201520190565b51902092604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa15611138576134e79060ff6000519a1680910199613be9565b600189019883013560f81c9750613588565b985060208701975094959394929391929091820135808514613661575b6134e790613c9f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9850613658565b989091929394959662ffffff98506136ab612158600c8416603f9060021c1690565b918215613715575b6003168015613704575b9081906136e8906136e0908781013560e81c906003019c168c01809c8989611ff9565b90898b6131d7565b9111156136fb575b906134e79291613c54565b998201996136f0565b50600281019084013560f01c6136bd565b8482013560f81c92506001909101906136b3565b97509761377f61378c929394959697600f61379493169085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290830180938686611ff9565b9086886131d7565b9061350192980198600052602052604060002090565b985096509394929391929091908082013590602001968015613507579061350191600052602052604060002090565b90919293949596975060038916978815613985575b8084013560601c9961384d916014019061380d9060021c600316612158565b9085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b908101906138b160208c61386385858b8b611ff9565b919073ffffffffffffffffffffffffffffffffffffffff8c604051968795869485937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611a35565b0392165afa908115611138577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091613967575b50160361392357509060ff6134e792991680910199613be9565b6108fb6139348c9389938989611ff9565b906040519485947fb2fed7ae00000000000000000000000000000000000000000000000000000000865260048601613196565b61397f915060203d8111611b7757611b698183610404565b38613909565b8381013560f81c98506001016137ee565b98600f919293949596979850169687156139c5575b60148101976134e79160ff9091169084013560601c613be9565b8281013560f81c97506001016139ab565b98509091929394959698600f16978815613a28575b50602060006139fe6136079a9b86613ba6565b9c90916040519384938c859094939260ff6060936080840197845216602083015260408201520152565b60018101995083013560f81c975060206139eb565b805160209091019060005b818110613a555750505090565b8251845260209384019390920191600101613a48565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0613ab1613a9b83610481565b92613aa96040519485610404565b808452610481565b0136602083013760005b8351811015613b8d5780613ad1600192866116f7565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152613b7961012082610404565b519020613b8682856116f7565b5201613abb565b509091506040516127e0816127b4602082018095613a3d565b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff81116110415791565b90604051907fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208301937f53657175656e6365207369676e65723a0a000000000000000000000000000000855260601b1660318301526045820152604581526127e0606582610404565b916040519160208301937f53657175656e6365206e657374656420636f6e6669673a0a00000000000000008552603884015260588301526078820152607881526127e0609882610404565b60405160208101917f53657175656e636520737461746963206469676573743a0a000000000000000083526038820152603881526127e0605882610404565b6127b46127e061277261276c600060208601511515612cc5565b60405160208101917f53657175656e636520616e792061646472657373207375626469676573743a0a83526040820152604081526127e0606082610404565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e63652073617069656e7420636f6e6669673a0a00000000000000865260601b166039840152604d830152606d820152606d81526127e0608d8261040456fea2646970667358221220fd510fff57502b123cb8cca23f77a513f5d8001f96adc68f13bd2a44f529e4ad64736f6c634300081c0033","sourceMap":"429:2965:24:-:0;;;;;;;;;;;;;-1:-1:-1;;429:2965:24;;;;-1:-1:-1;;;;;429:2965:24;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;429:2965:24;;;;;;581:24:44;;429:2965:24;;;;;;;;581:24:44;429:2965:24;;;;;;;;;;;;;;;;;-1:-1:-1;429:2965:24;;;;;;-1:-1:-1;429:2965:24;;;;;-1:-1:-1;429:2965:24","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436101561001e575b361561001c5761001c611c2e565b005b60003560e01c806223de291461019d578063025b22bc1461019857806313792a4a14610193578063150b7a021461018e5780631626ba7e1461018957806319822f7c146101845780631a9b23371461017f5780631f6a1eb91461017a57806329561426146101755780634fcf3eca1461017057806351605d801461016b5780636ea44577146101665780638943ec02146101615780638c3f55631461015c57806392dcb3fc14610157578063975befdb146101525780639c145aed1461014d578063a65d69d414610148578063aaf10f4214610143578063ad55366b1461013e578063b93ea7ad14610139578063bc197c8114610134578063f23a6e611461012f5763f727ef1c0361000e57611556565b6114c9565b6113f7565b611298565b611255565b611204565b611195565b61107d565b610fde565b610f80565b610f44565b610ec0565b610e91565b610ded565b610cd1565b610c18565b610b98565b610ac9565b610a14565b61098c565b6108ff565b610802565b6102eb565b61025f565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101c557565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101c557565b6044359073ffffffffffffffffffffffffffffffffffffffff821682036101c557565b359073ffffffffffffffffffffffffffffffffffffffff821682036101c557565b9181601f840112156101c55782359167ffffffffffffffff83116101c557602083818601950101116101c557565b346101c55760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576102966101a2565b5061029f6101ca565b506102a86101ed565b5060843567ffffffffffffffff81116101c5576102c9903690600401610231565b505060a43567ffffffffffffffff81116101c55761001c903690600401610231565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55761031d6101a2565b30330361036a576020817f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca0392305573ffffffffffffffffffffffffffffffffffffffff60405191168152a1005b7fa19dbf00000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff8211176103e357604052565b610398565b6040810190811067ffffffffffffffff8211176103e357604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176103e357604052565b6040519061045460e083610404565b565b6040519061045461012083610404565b359060ff821682036101c557565b359081151582036101c557565b67ffffffffffffffff81116103e35760051b60200190565b67ffffffffffffffff81116103e357601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926104df82610499565b916104ed6040519384610404565b8294818452818301116101c5578281602093846000960137010152565b9080601f830112156101c557816020610525933591016104d3565b90565b81601f820112156101c55780359061053f82610481565b9261054d6040519485610404565b82845260208085019360051b830101918183116101c55760208101935b83851061057957505050505090565b843567ffffffffffffffff81116101c557820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082860301126101c5576105c0610445565b916105cd60208301610210565b83526040820135602084015260608201359267ffffffffffffffff84116101c55760e08361060288602080988198010161050a565b60408401526080810135606084015261061d60a08201610474565b608084015261062e60c08201610474565b60a0840152013560c082015281520194019361056a565b9080601f830112156101c557813561065c81610481565b9261066a6040519485610404565b81845260208085019260051b8201019283116101c557602001905b8282106106925750505090565b6020809161069f84610210565b815201910190610685565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126101c55760043567ffffffffffffffff81116101c5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82850301126101c55761071c610456565b9061072981600401610466565b825261073760248201610474565b6020830152604481013567ffffffffffffffff81116101c55784600461075f92840101610528565b6040830152606481013560608301526084810135608083015260a481013567ffffffffffffffff81116101c55784600461079b9284010161050a565b60a083015260c481013560c083015260e481013560e083015261010481013567ffffffffffffffff81116101c557600485916107d8930101610645565b610100820152916024359067ffffffffffffffff82116101c5576107fe91600401610231565b9091565b346101c557610810366106aa565b909161010081019261082b61082685515161165e565b611679565b9160005b85518051821015610892579061088c61086761084d836001956116f7565b5173ffffffffffffffffffffffffffffffffffffffff1690565b61087183886116f7565b9073ffffffffffffffffffffffffffffffffffffffff169052565b0161082f565b50508383866108a733610871835151856116f7565b526108b3818484611d00565b50156108c55760405160018152602090f35b6108fb906040519384937ff58cc8b500000000000000000000000000000000000000000000000000000000855260048501611952565b0390fd5b346101c55760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576109366101a2565b5061093f6101ca565b5060643567ffffffffffffffff81116101c557610960903690600401610231565b505060206040517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b346101c55760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760043560243567ffffffffffffffff81116101c5576020916109e46109ea923690600401610231565b91611977565b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b346101c55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760043567ffffffffffffffff81116101c5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126101c557610a9760209160243560443591600401611a4c565b604051908152f35b7fffffffff000000000000000000000000000000000000000000000000000000008116036101c557565b346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576020610b0e600435610b0981610a9f565b611edc565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101c55760043567ffffffffffffffff81116101c55781610b7591600401610231565b929092916024359067ffffffffffffffff82116101c5576107fe91600401610231565b610baf610ba436610b2c565b919390935a93612011565b91610bc360608401516080850151906122d5565b610bce828585611d00565b929015610be0575061001c935061242e565b836108fb86926040519384937fa2b6d61b00000000000000000000000000000000000000000000000000000000855260048501611952565b346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760043530330361036a578015610ca7576020817f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf855604051908152a1005b7f4294d1270000000000000000000000000000000000000000000000000000000060005260046000fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c557600435610d0781610a9f565b30330361036a5773ffffffffffffffffffffffffffffffffffffffff610d2c82611edc565b1615610d925760407fffffffff000000000000000000000000000000000000000000000000000000007f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19216610d83600082612c86565b815190815260006020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f1c3812cc000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b60009103126101c557565b346101c55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760207fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf854604051908152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101c5576004359067ffffffffffffffff82116101c5576107fe91600401610231565b610e9a36610e48565b9030330361036a57610eb061001c925a92612011565b90610eba82612752565b9061242e565b346101c55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c557610ef76101a2565b5060443567ffffffffffffffff81116101c557610f18903690600401610231565b505060206040517f8943ec02000000000000000000000000000000000000000000000000000000008152f35b346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576020610a976004356127e6565b346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576040610fbc60043561282c565b73ffffffffffffffffffffffffffffffffffffffff8351921682526020820152f35b610ff6610fea36610b2c565b91939092935a94612011565b9161100e6060840151611008816127e6565b906122d5565b611019828285611d00565b929015611046578461102c85858361242e565b5a810390811161104157602090604051908152f35b61162f565b6108fb84916040519384937fa2b6d61b00000000000000000000000000000000000000000000000000000000855260048501611952565b346101c55761108b36610e48565b9073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016801561116b57330361113d57303b156101c5576111119160009160405193849283927f6ea4457700000000000000000000000000000000000000000000000000000000845260048401611bed565b038183305af180156111385761112357005b80611132600061001c93610404565b80610de2565b6119c3565b7f1d6ddbf4000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7fd13d78350000000000000000000000000000000000000000000000000000000060005260046000fd5b346101c55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101c55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576020305473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346101c55760c061127160008061126b366106aa565b916128f4565b926040929192519485526020850152600160408501526060840152608083015260a0820152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576004356112ce81610a9f565b6112d66101ca565b9030330361036a5773ffffffffffffffffffffffffffffffffffffffff6112fc82611edc565b16611376577f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19173ffffffffffffffffffffffffffffffffffffffff7fffffffff000000000000000000000000000000000000000000000000000000006040931691166113698183612c86565b82519182526020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f5b4d6d6a000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b9181601f840112156101c55782359167ffffffffffffffff83116101c5576020808501948460051b0101116101c557565b346101c55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55761142e6101a2565b506114376101ca565b5060443567ffffffffffffffff81116101c5576114589036906004016113c6565b505060643567ffffffffffffffff81116101c55761147a9036906004016113c6565b505060843567ffffffffffffffff81116101c55761149c903690600401610231565b50506040517fbc197c81000000000000000000000000000000000000000000000000000000008152602090f35b346101c55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576115006101a2565b506115096101ca565b5060843567ffffffffffffffff81116101c55761152a903690600401610231565b505060206040517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b346101c55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576004356115906101ca565b604435916bffffffffffffffffffffffff83168093036101c55730330361036a578273ffffffffffffffffffffffffffffffffffffffff8361161b7febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1967fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606097881b161785612c41565b6040519384521660208301526040820152a1005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b906001820180921161104157565b9190820180921161104157565b9061168382610481565b6116906040519182610404565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06116be8294610481565b0190602036910137565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805182101561170b5760209160051b010190565b6116c8565b919082519283825260005b84811061175a5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b8060208092840101518282860101520161171b565b9080602083519182815201916020808360051b8301019401926000915b83831061179b57505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c08061180e604085015160e0604086015260e0850190611710565b936060810151606085015260808101511515608085015260a0810151151560a085015201519101529701930193019193929061178c565b906020808351928381520192019060005b8181106118635750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101611856565b805160ff168252610525916020828101511515908201526101006118ed6118c76040850151610120604086015261012085019061176f565b606085015160608501526080850151608085015260a085015184820360a0860152611710565b9260c081015160c084015260e081015160e0840152015190610100818403910152611845565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b91611969610525949260408552604085019061188f565b926020818503910152611913565b906119949291611985611e81565b906003825260e0820152611d00565b50156119be577f1626ba7e0000000000000000000000000000000000000000000000000000000090565b600090565b6040513d6000823e3d90fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101c5570180359067ffffffffffffffff82116101c5576020019181360383136101c557565b908160209103126101c5575161052581610a9f565b604090610525949281528160208201520191611913565b91909173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691821561116b5782330361113d5780611b7e575b506020915080610100611aae9201906119cf565b92611ae660405194859384937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611a35565b0381305afa908115611138577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091611b4f575b501603611b4a57600090565b600190565b611b71915060203d602011611b77575b611b698183610404565b810190611a20565b38611b3e565b503d611b5f565b823b156101c5576040517fb760faf900000000000000000000000000000000000000000000000000000000815230600482015292600091849160249183915af190811561113857602092611aae92611bd8575b5090611a9a565b806111326000611be793610404565b38611bd1565b916020610525938181520191611913565b3d15611c29573d90611c0f82610499565b91611c1d6040519384610404565b82523d6000602084013e565b606090565b600436108015611c3b5750565b611c71906000357fffffffff00000000000000000000000000000000000000000000000000000000811691611cc3575b50611edc565b73ffffffffffffffffffffffffffffffffffffffff8116611c8f5750565b60008091604051368382378036810184815203915af4611cad611bfe565b9015611cbb57602081519101f35b602081519101fd5b7fffffffff000000000000000000000000000000000000000000000000000000008092503660040360031b1b161638611c6b565b901561170b5790565b91907f800000000000000000000000000000000000000000000000000000000000000080611d57611d318585611cf7565b357fff000000000000000000000000000000000000000000000000000000000000001690565b1614611dad576000918291611d6b946128f4565b91505091808210611d7d575050600191565b7ffd41fcba0000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b5050611db890612752565b90611dc28261282c565b42811115611e4f575073ffffffffffffffffffffffffffffffffffffffff81168015159081611e44575b50611df8575060019190565b7f8945c3130000000000000000000000000000000000000000000000000000000060005260048390523360245273ffffffffffffffffffffffffffffffffffffffff1660445260646000fd5b905033141538611dec565b7ff95b6ab700000000000000000000000000000000000000000000000000000000600052600484905260245260446000fd5b60405190610120820182811067ffffffffffffffff8211176103e3576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b73ffffffffffffffffffffffffffffffffffffffff906040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a120845216604082015260408152611f53606082610404565b519020541690565b90611f6582610481565b611f726040519182610404565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611fa08294610481565b019060005b828110611fb157505050565b602090604051611fc0816103c7565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c082015282828501015201611fa5565b909392938483116101c55784116101c5578101920390565b91909161201c611e81565b6000815292600190823560f81c827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818316016122be5750600060608701525b600761206b60ff831660011c90565b168061226d575b5060108181160361223857506001925b61208b84611f5b565b92604087019384526000905b8582106120a657505050505050565b8281013560f81c9060010190918160018085160361221657506120ea306120ce8389516116f7565b519073ffffffffffffffffffffffffffffffffffffffff169052565b6002808416146121f6575b6004808416146121a8575b600880841614612175575b61215e61215860c0856121378a608061212e8860108060019c9d161493516116f7565b51019015159052565b61214e8a60a061212e8860208087161493516116f7565b1660061c60031690565b60ff1690565b60c061216b8389516116f7565b5101520190612097565b60019161215e906121589060c09087810135906020019690606061219a878d516116f7565b51015295945050505061210b565b906121f0908481013560e81c906003016121e96121d06121c8848461166c565b838a8a611ff9565b919060406121df888d516116f7565b51019236916104d3565b905261166c565b90612100565b9083810135906020019190602061220e8389516116f7565b5101526120f5565b61223392508481013560601c9060140192906120ce8389516116f7565b6120ea565b60209081160361225a5761ffff918381013560f01c906002015b921692612082565b60ff918381013560f81c90600101612252565b6122b1919385929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290608087015238612072565b80850135606090811c90880152601401925061205c565b906122df826127e6565b81810361236557509060017f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f8819201908160405160208101907f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e82528360408201526040815261234f606082610404565b51902055604080519182526020820192909252a1565b917f9b6514f40000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b6123b16040929594939560608352606083019061188f565b9460208201520152565b9261052596959260c09592855260208501526040840152606083015260808201528160a08201520190611710565b6105259392606092825260208201528160408201520190611710565b61241b610525949260608352606083019061188f565b9260208201526040818403910152611710565b916000604082019384515190825b82811061244d575b50505050505050565b6124588188516116f7565b519361246760a0860151151590565b8061274a575b61270a575060009360608101518015801580612701575b6126c95784906124976080850151151590565b1561268357612542926124be855173ffffffffffffffffffffffffffffffffffffffff1690565b911561267d57505a905b61253d8b61251160608d01516040890151908c8b604051998a967f4c4e814c000000000000000000000000000000000000000000000000000000006020890152602488016123bb565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101855284610404565b612c14565b15612585575b506040805187815260208101839052600192917f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a91a15b0161243c565b60c0018051156126345760018151146125f557516002146125a65738612548565b9493505050507fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b92506125e66125da612c26565b604051938493846123e9565b0390a138808080808080612444565b50846108fb612602612c26565b6040519384937f7f6b0bb100000000000000000000000000000000000000000000000000000000855260048501612405565b509250600180937f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d612675612667612c26565b604051918291858c846123e9565b0390a161257f565b906124c8565b83516126be93925073ffffffffffffffffffffffffffffffffffffffff16916020850151916000146126c357505a905b604085015192612c02565b612542565b906126b3565b83886108fb5a6040519384937f2139527400000000000000000000000000000000000000000000000000000000855260048501612399565b50815a10612484565b6040805188815260208101849052919550600192917f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b9181908101612675565b50801561246d565b6127b46127e061277261276c602085015115153090612cc5565b93612dc0565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610404565b51902090565b60405160208101917f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8352604082015260408152612825606082610404565b5190205490565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e86835260408201526040815261286b606082610404565b51902054906bffffffffffffffffffffffff8260601c921690565b60405190612893826103e8565b60006020838281520152565b908160409103126101c5576020604051916128b9836103e8565b805183520151602082015290565b60409073ffffffffffffffffffffffffffffffffffffffff61052594931681528160208201520190611710565b909491939291853560f81c6001909381908761290e612886565b9360408089161480612be4575b612ae7575b505050600180861614612ac15760028581161460208501526007600286901c1688820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691019080969181966020166129909060051c90565b6129999061165e565b8a820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101959098899a816129e584612752565b9889936129f193611ff9565b916129fb936131d7565b9098612a0f91600052602052604060002090565b90612a2291600052602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff16612a4b91600052602052604060002090565b94815190868215159283612ab6575b505081612aa7575b50612a6a5750565b6040517fccbb534f000000000000000000000000000000000000000000000000000000008152815160048201526020909101516024820152604490fd5b90506020820151101538612a62565b141591508638612a5a565b86612adc9792949550612ad49398611ff9565b939092612fb5565b919394909293929190565b8a81013560601c985060140192509087908a90849015612b0b575b50829150612920565b60038101955073ffffffffffffffffffffffffffffffffffffffff945081013560e81c92604092612b8e929091612b5991612b52918990612b4c898361166c565b92611ff9565b36916104d3565b83519586809481937fccce3bc800000000000000000000000000000000000000000000000000000000835230600484016128c7565b0392165afa801561113857612bac92600091612bb5575b509261166c565b86388981612b02565b612bd7915060403d604011612bdd575b612bcf8183610404565b81019061289f565b38612ba5565b503d612bc5565b5073ffffffffffffffffffffffffffffffffffffffff89161561291b565b9160009391849360208451940192f190565b9160009291839260208351930191f490565b3d90604051916020818401016040528083526000602084013e565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e868352604082015260408152612c80606082610404565b51902055565b60405160208101917fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1208352604082015260408152612c80606082610404565b15612d75576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a081526127e060c082610404565b4690612cce565b805160209091019060005b818110612d945750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101612d87565b610100810151604051612ddb816127b4602082018095612d7c565b51902090612dea815160ff1690565b60ff811680612e63575050906127e0612e066040840151613a6b565b926127b460806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b60018103612ec157505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d466938101938452908101919091526060810192909252906127e081608081016127b4565b60028103612f1757505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e4602082019081529181019290925260608201929092526127e081608081016127b4565b600303612f6b575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d466602082019081529181019290925260608201929092526127e081608081016127b4565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b906123b19060409396959496606084526060840191611913565b9194929092600095600095600095600095600095612fd1611e81565b60028152937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9460005b8281106130285750505050505050805115158061301a575b612a6a5750565b506020810151841115613013565b600381019d50959b509399509197509290919061304c908b9085013560e81c61166c565b958a6000848903613190575089915b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c0361316057509060016130958961309c948789611ff9565b908b6128f4565b9c939c9b929b9a919a99909a9b9d8e9d9e8f905b1061311a5750928b885114613111575b808b10156130df57508a60c08501528992959295949194939093612ffb565b7f37daf62b0000000000000000000000000000000000000000000000000000000060005260048b905260245260446000fd5b600088526130c0565b8d8f6108fb61312b85858c8e611ff9565b9390926040519485947fb006aba000000000000000000000000000000000000000000000000000000000865260048601612f9b565b9798999a9160016131768b61317d94888a611ff9565b90866128f4565b50929d919c909b929a9092918e8e6130b0565b9161305b565b73ffffffffffffffffffffffffffffffffffffffff610525959360609383521660208201528160408201520191611913565b908160209103126101c5575190565b9391909360009460009460005b8181106131f2575050505050565b8481013560f881901c9860019092019788979692909160fc1c9889156139d657506001891461399657600289146137d957600389146137aa57600489146137295760068914613689576005891461363b5760078914613574576008891461351e57600989146133f557600a8914613292577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b909192939495969750600389169788156133e4575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101908101908161330a918787611ff9565b6040517f898bd92100000000000000000000000000000000000000000000000000000000815293918491613342918a60048501611a35565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa91821561113857613385936000936133b1575b5060ff909a168091019a613d37565b9080156133ab579061339f91600052602052604060002090565b955b93929190936131e4565b5061339f565b60ff9193506133d69060203d81116133dd575b6133ce8183610404565b8101906131c8565b9290613376565b503d6133c4565b8084013560f81c98506001016132a7565b9091929394959697506003891697881561350d575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101908101908161346d918787611ff9565b6040517f13792a4a000000000000000000000000000000000000000000000000000000008152939184916134a5918b60048501611952565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa918215611138576134e7936000936133b1575060ff909a168091019a613d37565b908015613507579061350191600052602052604060002090565b956133a1565b50613501565b8084013560f81c985060010161340a565b98506020870197509495939492939192909182013561353c86613cde565b811461354c575b6134e790613cf8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9850613543565b975090919293949597600f16968715613629575b6020600061359a6136079a9b86613ba6565b9c9092918a6040516135dd816127b48a82019485603c917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008252601c8201520190565b51902092604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa15611138576134e79060ff6000519a1680910199613be9565b600189019883013560f81c9750613588565b985060208701975094959394929391929091820135808514613661575b6134e790613c9f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9850613658565b989091929394959662ffffff98506136ab612158600c8416603f9060021c1690565b918215613715575b6003168015613704575b9081906136e8906136e0908781013560e81c906003019c168c01809c8989611ff9565b90898b6131d7565b9111156136fb575b906134e79291613c54565b998201996136f0565b50600281019084013560f01c6136bd565b8482013560f81c92506001909101906136b3565b97509761377f61378c929394959697600f61379493169085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290830180938686611ff9565b9086886131d7565b9061350192980198600052602052604060002090565b985096509394929391929091908082013590602001968015613507579061350191600052602052604060002090565b90919293949596975060038916978815613985575b8084013560601c9961384d916014019061380d9060021c600316612158565b9085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b908101906138b160208c61386385858b8b611ff9565b919073ffffffffffffffffffffffffffffffffffffffff8c604051968795869485937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611a35565b0392165afa908115611138577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091613967575b50160361392357509060ff6134e792991680910199613be9565b6108fb6139348c9389938989611ff9565b906040519485947fb2fed7ae00000000000000000000000000000000000000000000000000000000865260048601613196565b61397f915060203d8111611b7757611b698183610404565b38613909565b8381013560f81c98506001016137ee565b98600f919293949596979850169687156139c5575b60148101976134e79160ff9091169084013560601c613be9565b8281013560f81c97506001016139ab565b98509091929394959698600f16978815613a28575b50602060006139fe6136079a9b86613ba6565b9c90916040519384938c859094939260ff6060936080840197845216602083015260408201520152565b60018101995083013560f81c975060206139eb565b805160209091019060005b818110613a555750505090565b8251845260209384019390920191600101613a48565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0613ab1613a9b83610481565b92613aa96040519485610404565b808452610481565b0136602083013760005b8351811015613b8d5780613ad1600192866116f7565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152613b7961012082610404565b519020613b8682856116f7565b5201613abb565b509091506040516127e0816127b4602082018095613a3d565b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff81116110415791565b90604051907fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208301937f53657175656e6365207369676e65723a0a000000000000000000000000000000855260601b1660318301526045820152604581526127e0606582610404565b916040519160208301937f53657175656e6365206e657374656420636f6e6669673a0a00000000000000008552603884015260588301526078820152607881526127e0609882610404565b60405160208101917f53657175656e636520737461746963206469676573743a0a000000000000000083526038820152603881526127e0605882610404565b6127b46127e061277261276c600060208601511515612cc5565b60405160208101917f53657175656e636520616e792061646472657373207375626469676573743a0a83526040820152604081526127e0606082610404565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e63652073617069656e7420636f6e6669673a0a00000000000000865260601b166039840152604d830152606d820152606d81526127e0608d8261040456fea2646970667358221220fd510fff57502b123cb8cca23f77a513f5d8001f96adc68f13bd2a44f529e4ad64736f6c634300081c0033","sourceMap":"429:2965:24:-:0;;;;;;;;;-1:-1:-1;429:2965:24;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;401:4:52;379:10;:27;375:75;;429:2965:24;401:4:52;1013:38:46;401:4:52;;1125:46:46;429:2965:24;;;;;;;1013:38:46;429:2965:24;375:75:52;423:20;-1:-1:-1;423:20:52;379:10;429:2965:24;;;-1:-1:-1;423:20:52;429:2965:24;;;;;;;;;;;2321:4:48;429:2965:24;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;429:2965:24;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;4682:22:50;;;;;;4668:48;4682:33;:22;;429:2965:24;4682:33:50;:::i;:::-;4668:48;:::i;:::-;4728:13;-1:-1:-1;4778:3:50;4747:22;;429:2965:24;;4743:33:50;;;;;4810:25;4791:44;4810:25;;;4714:1;4810:25;;:::i;:::-;429:2965:24;;;;;4810:25:50;4791:44;;;;:::i;:::-;429:2965:24;;;;;;4791:44:50;429:2965:24;4728:13:50;;4743:33;;;;;;4848:57;4895:10;4848:57;4862:22;;429:2965:24;4848:57:50;;:::i;:::-;4911:38;4974:41;;;;;:::i;:::-;5025:8;;5021:81;;429:2965:24;;4714:1:50;429:2965:24;;;;;5021:81:50;5050:45;429:2965:24;;;5050:45:50;;;;;;429:2965:24;5050:45:50;;;:::i;:::-;;;;429:2965:24;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;3351:31:45;429:2965:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;1358:19:45;429:2965:24;;;;;:::i;:::-;1358:19:45;:::i;:::-;429:2965:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;1572:33:43;429:2965:24;;;:::i;:::-;1524:9:43;;;;;1572:33;;:::i;:::-;1626:13;1641;1626;;;429:2965:24;1641:13:43;;;429:2965:24;1641:13:43;;:::i;:::-;1694:40;;;;;:::i;:::-;1745:8;;;1741:73;;1850:7;;;;;:::i;1741:73::-;429:2965:24;1770:37:43;429:2965:24;;;;1770:37:43;;;;;;429:2965:24;1770:37:43;;;:::i;429:2965:24:-;;;;;;;;;;;;;401:4:52;379:10;:27;375:75;;1242:24:54;;1238:69;;429:2965:24;260:41:49;1371:28:54;260:41:49;509:66:54;260:41:49;429:2965:24;;;;;1371:28:54;429:2965:24;1238:69:54;1283:17;-1:-1:-1;1283:17:54;429:2965:24;-1:-1:-1;1283:17:54;429:2965:24;;;;;;;;;;;;;:::i;:::-;401:4:52;379:10;:27;375:75;;429:2965:24;2005:19:45;;;:::i;:::-;429:2965:24;2005:33:45;2001:87;;429:2965:24;;2492:37:45;429:2965:24;;2439:41:45;429:2965:24;2439:41:45;;:::i;:::-;429:2965:24;;;;;;;;;;2492:37:45;429:2965:24;2001:87:45;429:2965:24;2055:26:45;;-1:-1:-1;2055:26:45;429:2965:24;;;;-1:-1:-1;2055:26:45;429:2965:24;;;;;;;:::o;:::-;;;;;;;;;;;;509:66:54;394:41:49;429:2965:24;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;401:4:52;;379:10;:27;375:75;;2142:33:43;2255:7;2094:9;;2142:33;;:::i;:::-;2198:21;;;;:::i;:::-;2255:7;;:::i;429:2965:24:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;3526:28:45;429:2965:24;;;;;;;;;;;;;;;806:50:47;429:2965:24;;806:50:47;:::i;429:2965:24:-;;;;;;;;;;;;2500:26:50;429:2965:24;;2500:26:50;:::i;:::-;429:2965:24;;;;;;;;;;;;;1187:33;429:2965;;;:::i;:::-;1139:9;;;;;;1187:33;;:::i;:::-;1241:13;1256:24;1241:13;;;429:2965;806:50:47;;;:::i;:::-;1256:24:24;;:::i;:::-;1320:40;;;;;:::i;:::-;1371:8;;;1367:73;;1477:7;;;;;;:::i;:::-;1513:9;429:2965;;;;;;;;;;;;;;;;;:::i;1367:73::-;1396:37;429:2965;;;;1396:37;;;;;;429:2965;1396:37;;;:::i;429:2965::-;;;;;;;:::i;:::-;1358:10:44;429:2965:24;1358:10:44;429:2965:24;1358:24:44;;1354:69;;1433:10;:24;1429:81;;1516:4;:26;;;;;429:2965:24;1380:1:44;429:2965:24;;;1516:26:44;;;;;429:2965:24;1516:26:44;;429:2965:24;1516:26:44;;;:::i;:::-;;:4;;;:26;;;;;;;;429:2965:24;1516:26:44;;;1380:1;1516:26;;;:::i;:::-;;;:::i;:::-;;:::i;1429:81::-;1474:29;1380:1;1474:29;1433:10;429:2965:24;;;1380:1:44;1474:29;1354:69;1399:17;1380:1;1399:17;429:2965:24;1380:1:44;1399:17;429:2965:24;;;;;;;;;;;;;;;418:35:44;429:2965:24;;;;;;;;;;;;;;;;1252:47:46;;429:2965:24;;;;;;;;;;;;;5879:56:50;-1:-1:-1;429:2965:24;;;;:::i;:::-;5879:56:50;;:::i;:::-;429:2965:24;;;;;;;;;;;;;690:4;429:2965;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;401:4:52;;379:10;:27;375:75;;429:2965:24;1667:19:45;;;:::i;:::-;429:2965:24;1663:88:45;;2492:37;429:2965:24;;;;;;;;2439:41:45;;;;:::i;:::-;429:2965:24;;;;;;;;;2492:37:45;429:2965:24;1663:88:45;429:2965:24;1717:27:45;;-1:-1:-1;1717:27:45;429:2965:24;;;;-1:-1:-1;1717:27:45;429:2965:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;429:2965:24;;2946:37:45;429:2965:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;2696:32:45;429:2965:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;401:4:52;379:10;:27;375:75;;429:2965:24;;;2043:85:50;2998:47;429:2965:24;;;;;;;2051:76:50;2043:85;;:::i;:::-;429:2965:24;;;;;;;;;;;;;;2998:47:50;429:2965:24;;;;;;;;;;;;;4714:1:50;429:2965:24;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;429:2965:24;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;429:2965:24;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;429:2965:24;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;5170:322:50:-;;5358:40;5170:322;;429:2965:24;;:::i;:::-;2556:4:48;;;;4826:15;;;2556:4;5358:40:50;:::i;:::-;5408:8;;5404:45;;429:2965:24;5170:322:50;:::o;5404:45::-;429:2965:24;5426:16:50;:::o;429:2965:24:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;614:665:44:-;;;;429:2965:24;792:10:44;429:2965:24;792:24:44;;;788:69;;867:10;;:24;863:81;;1006:24;1002:123;;614:665;1169:16;1135:51;1169:16;;;;;;;;;:::i;:::-;429:2965:24;1135:51:44;429:2965:24;;1135:51:44;;;;;429:2965:24;1135:51:44;;;;;;:::i;:::-;;:4;;:51;;;;;;;429:2965:24;1135:51:44;429:2965:24;1135:51:44;429:2965:24;1135:51:44;;;614:665;429:2965:24;;1135:80:44;1131:129;;429:2965:24;614:665:44;:::o;1131:129::-;412:1;1225:28;:::o;1135:51::-;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;1002:123;1040:78;;;;;429:2965:24;;;1040:78:44;;1112:4;1040:78;;;429:2965:24;;-1:-1:-1;;429:2965:24;;;;;;1040:78:44;;;;;;;1135:51;1040:78;1169:16;1040:78;;;1002:123;;;;;1040:78;;;429:2965:24;1040:78:44;;;:::i;:::-;;;;429:2965:24;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;429:2965:24;;;;:::o;:::-;;;:::o;3638:392:45:-;3695:1;3676:8;:20;;;3672:354;;3638:392;:::o;3672:354::-;3723:27;3733:16;3676:8;429:2965:24;;;;;;;3672:354:45;3723:27;;:::i;:::-;429:2965:24;;;3758:262:45;;3638:392;:::o;3758:262::-;3676:8;429:2965:24;;;;3676:8:45;429:2965:24;;;3676:8:45;;429:2965:24;;;;;3832:29:45;;;;;;:::i;:::-;3871:141;;;;;;;;;;;;;;;;;429:2965:24;;3676:8:45;;;;3695:1;429:2965:24;;;;;;;;;;;;;;;:::o;3301:1109:50:-;;;429:2965:24;3555:13:50;;;;;;:::i;:::-;;429:2965:24;;;;3555:13:50;3579:20;:28;3575:429;;3566:1;4188:56;;;;;;:::i;:::-;4146:98;;;4282:18;;;;4278:87;;4371:34;;690:4:24;3301:1109:50;:::o;4278:87::-;4317:41;3566:1;4317:41;3772:48;429:2965:24;;;;1380:1:44;1474:29;3575:429:50;3626:15;;;;;:::i;:::-;3686:27;;;;:::i;:::-;3738:15;3725:28;;;3721:108;;429:2965:24;;;;3841:18:50;;;:40;;;;3575:429;3837:131;;;3976:21;3984:4;3976:21;;:::o;3837:131::-;3900:59;3566:1;3900:59;;429:2965:24;;;3942:10:50;429:2965:24;;;;;;;1380:1:44;1474:29;3841:40:50;3871:10;;;3863:18;;3841:40;;;3721:108;3772:48;3566:1;3772:48;;429:2965:24;;;;;;1380:1:44;1474:29;429:2965:24;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;429:2965:24;;-1:-1:-1;429:2965:24;;;;;;;;;-1:-1:-1;429:2965:24;;;;-1:-1:-1;429:2965:24;;;;;;;;;-1:-1:-1;429:2965:24;;;;-1:-1:-1;429:2965:24;;;;;;:::o;2134:172:45:-;429:2965:24;2134:172:45;429:2965:24;;;753:25:49;;;;:66:45;429:2965:24;;;;;;;;753:25:49;;;;;;:::i;:::-;429:2965:24;743:36:49;;785:40;429:2965:24;2134:172:45;:::o;2321:4:48:-;;429:2965:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;2321:4:48;;;;;:::i;:::-;;;-1:-1:-1;2321:4:48;;;;;;;;;:::o;:::-;;429:2965:24;;;;;;:::i;:::-;-1:-1:-1;2321:4:48;;-1:-1:-1;2321:4:48;;;;429:2965:24;;2321:4:48;;;-1:-1:-1;429:2965:24;2321:4:48;;;-1:-1:-1;2321:4:48;;;;-1:-1:-1;2321:4:48;;;;-1:-1:-1;2321:4:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4859:2701::-;;;;429:2965:24;;:::i;:::-;;2556:4:48;;;566:109:68;;;;;;;5163:25:48;:17;;;:25;5176:4;;5198:14;2321:4;5198:14;;;2556:4;5159:140;5396:4;5377:15;429:2965:24;;;;2321:4:48;;;5377:15;5376:24;5411:13;5407:122;;5159:140;-1:-1:-1;5635:4:48;5622:17;;;:25;5635:4;;5657:12;5176:4;5618:320;;5983:20;;;:::i;:::-;5966:14;;;;:37;;;2321:4;6010:1546;6030:12;;;;;;4859:2701;;;;;;:::o;6044:3::-;798:135:68;;;;;;;;;6076:44:48;;;5176:4;6227:12;;;:20;5176:4;;6314;6283:36;6314:4;6283:17;:14;;;:17;:::i;:::-;;429:2965:24;;;;;;6283:36:48;6529:4;6521:12;;;:20;6517:109;;6223:226;6704:4;6696:12;;;:20;6692:287;;6223:226;7065:4;7057:12;;;:20;7053:112;;6223:226;7494:55;7530:19;7539:4;7275:12;7241:55;7275:12;7241:30;:17;7275:12;5635:4;7275:12;5176:4;7275:12;;;:20;7241:14;;:17;:::i;:::-;;:30;2321:4;429:2965:24;;2321:4:48;;;7241:55;7364;7398:12;7364:30;:17;7398:12;7406:4;7398:12;;;:20;7364:14;;:17;:::i;:55::-;7531:12;429:2965:24;2321:4:48;;;;;7530:19;429:2965:24;;;;7494:55:48;7539:4;7494:17;:14;;;:17;:::i;:::-;;:33;2556:4;429:2965:24;6015:13:48;;;7053:112;5176:4;;7494:55;;7530:19;;7539:4;;2102:103:68;;;;;;;7090:14:48;;:26;:17;:14;;;:17;:::i;:::-;;:26;2556:4;7053:112;;;;;;;;6692:287;1201:256:68;6947:23:48;;1318:135:68;;;;;;;;;2321:4:48;6899:38;6914:22;1318:135:68;;6914:22:48;:::i;:::-;6899:38;;;;:::i;:::-;6874:14;;5966;6874:17;:14;;;:17;:::i;:::-;;:22;2321:4;;;;:::i;:::-;6874:63;;6947:23;:::i;:::-;6692:287;;;6517:109;1983:226:68;2102:103;;;;;;;6554:14:48;;7406:4;6554:17;:14;;;:17;:::i;:::-;;:23;2556:4;6517:109;;6223:226;6379:61;;-1:-1:-1;1840:135:68;;;;;;;;;6380:14:48;;:17;:14;;;:17;:::i;6379:61::-;6223:226;;5618:320;5779:4;5766:17;;;:25;5779:4;;2321;;1058:135:68;;;;;;;;;941:256;5803:48:48;2321:4;5762:170;5618:320;;5762:170;429:2965:24;;798:135:68;;;;;;;;;683:254;;5407:122:48;2213:380:68;;;;;;;;2363:226;;;;;;;;;;;;;;;;;;;2213:380;;;5458:64:48;;5459:14;;;2556:4;5407:122;;;5159:140;1840:135:68;;;;;;;;5238:14:48;;;2556:4;1840:135:68;;;-1:-1:-1;5159:140:48;;1011:362:47;;806:50;;;:::i;:::-;1131:22;;;1127:88;;429:2965:24;;1267:1:47;1319:29;429:2965:24;;;;;;552:25:49;;;;543:66:47;429:2965:24;;;;;;;;552:25:49;;;;;;:::i;:::-;429:2965:24;542:36:49;;584:40;429:2965:24;;;;;;;;;;;;;1319:29:47;1011:362::o;1127:88::-;1170:38;;-1:-1:-1;1170:38:47;;429:2965:24;;;;;;-1:-1:-1;1170:38:47;429:2965:24;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2657:4:48:-;;;;;;429:2965:24;;2657:4:48;;;429:2965:24;2657:4:48;;;;;;;;:::i;2763:::-;;;;;;;;;;;;;:::i;:::-;;;;;429:2965:24;2763:4:48;;;;;;;;:::i;2272:1859:43:-;;2393:5;2424:14;;;;;;429:2965:24;2456:13:43;;2471:12;;;;;;2451:1676;2272:1859;;;;;;;:::o;2485:3::-;2525:17;:14;;;:17;:::i;:::-;;2609;429:2965:24;2609:17:43;;;429:2965:24;;;;;;2609:31:43;;;2485:3;2605:102;;2833:17;2393:5;2878:13;;;;429:2965:24;2903:13:43;;;;:37;;;2485:3;2899:105;;3012:12;;429:2965:24;3036:17:43;;;429:2965:24;;;;;;3036:17:43;;;3077:348;429:2965:24;;;;;;;;;3129:36:43;;;;3145:9;;3129:36;;3177:238;3366:14;3177:238;2878:13;3366:14;;429:2965:24;2424:14:43;3394:9;;;429:2965:24;;;2424:14:43;429:2965:24;3177:238:43;;;3213:55;3177:238;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;3077:348;:::i;:::-;3566:8;3562:520;;3032:522;-1:-1:-1;2424:14:43;429:2965:24;;;;;;;;;;;;;;4095:25:43;;;2456:13;429:2965:24;2456:13:43;;3562:520;3590:20;;429:2965:24;;3590:53:43;3586:180;;429:2965:24;;;3780:56:43;3776:136;;429:2965:24;2867:4:48;3926:55:43;3922:152;;3562:520;;;3922:152;4024:21;;;;;;4000:46;4024:21;;4000:46;4024:21;;:::i;:::-;2424:14;429:2965:24;4000:46:43;;;;;:::i;:::-;;;;4058:5;;;;;;;;;3776:136;3879:21;;3857:44;3879:21;;:::i;:::-;2424:14;429:2965:24;3857:44:43;;;;;;;;;;:::i;3586:180::-;3657:16;;;429:2965:24;3657:16:43;3713:21;3690:45;;3713:21;;:::i;:::-;2424:14;429:2965:24;3690:45:43;;;;;;;:::i;:::-;;;;3747:8;;3129:36;;;;3032:522;429:2965:24;;3462:83:43;;429:2965:24;-1:-1:-1;429:2965:24;;3485:10:43;;;;429:2965:24;3497:36:43;;;;;3513:9;;3497:36;;2424:14;3535:9;;;3462:83;;:::i;:::-;3032:522;;3497:36;;;;2899:105;2985:9;;2959:36;2985:9;2424:14;429:2965:24;2959:36:43;;;;;;;;;;:::i;2903:37::-;2920:9;;;:20;2903:37;;2605:102;2424:14;429:2965:24;;;;;;;;;;;;;-1:-1:-1;429:2965:24;;;2657:23:43;;429:2965:24;;;;2657:23:43;429:2965:24;2609:31:43;2630:10;;;2609:31;;9564:274:48;9784:48;;9743:18;9666:50;9682:18;;;429:2965:24;;;9710:4:48;9666:50;;:::i;:::-;9743:18;;:::i;:::-;429:2965:24;;9784:48:48;;;9682:18;9784:48;;;;429:2965:24;;;;;;;;;;;;;;;;;;9784:48:48;;;;;;;;;:::i;:::-;429:2965:24;9774:59:48;;9564:274;:::o;632:197:49:-;429:2965:24;;753:25:49;;;;543:66:47;429:2965:24;;;;;;;753:25:49;;;;;;:::i;:::-;429:2965:24;743:36:49;;785:40;632:197;:::o;1637:245:50:-;429:2965:24;;753:25:49;;;;834:66:50;429:2965:24;;;;;;;753:25:49;;;;;;:::i;:::-;429:2965:24;743:36:49;;785:40;2321:4:48;429:2965:24;2321:4:48;753:25:49;2321:4:48;429:2965:24;;1637:245:50;:::o;429:2965:24:-;;;;;;;:::i;:::-;-1:-1:-1;429:2965:24;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;2963:3141:51:-;;;;;;;566:109:68;;;;;3268:69:51;;;3762:24;429:2965:24;;;:::i;:::-;3963:20:51;3979:4;3963:20;;;:28;:59;;;2963:3141;3959:742;;2963:3141;4774:20;;;4790:4;4774:20;;;:28;4770:126;;5004:4;4988:20;;;:28;4967:18;;;2321:4:48;;429:2965:24;2321:4:48;;;;2363:226:68;;;;;;;;;;;;;;;;;;;;;;;;;5158:67:51;;;;;5330:20;4967:18;5330:20;5329:27;;429:2965:24;2321:4:48;;;5329:27:51;5328:33;;;:::i;:::-;2363:226:68;;;;;;;;;;;;;;;;;;;;;;;;;5369:65:51;;;;5480:15;;;;;:::i;:::-;5555:19;;;;;;:::i;:::-;5523:52;;;;:::i;:::-;5501:74;5594:50;;;545:85:69;;;;;;;461:173;;5594:50:51;5662:51;;;545:85:69;;;;;;;461:173;;5662:51:51;429:2965:24;;;5731:72:51;;545:85:69;;;;;;;461:173;;5731:72:51;429:2965:24;;;5948:32:51;;;;;:67;;;;2963:3141;5948:104;;;;;2963:3141;5944:156;;;2963:3141;:::o;5944:156::-;3979:4;429:2965:24;6069:24:51;;;429:2965:24;;6069:24:51;;;429:2965:24;;;;;;;;;;;;5050:45:50;5948:104:51;6033:19;;4967:18;6033:19;;429:2965:24;-1:-1:-1;6019:33:51;5948:104;;;:67;5984:31;;;-1:-1:-1;5948:67:51;;;;4770:126;4869:19;4819:70;4869:19;;;;;;;;;:::i;:::-;4819:70;;;;:::i;:::-;4812:77;;;;;;;;;:::o;3959:742::-;1840:135:68;;;;;;;-1:-1:-1;1840:135:68;;;-1:-1:-1;3162:307:68;1840:135;;;;;;4197:20:51;4193:502;;3959:742;;;;;;;4193:502;1318:135:68;;;;-1:-1:-1;429:2965:24;;-1:-1:-1;1318:135:68;;;;;;3979:4:51;;4572:73;;3979:4;;2321::48;;4471:48:51;;1318:135:68;;4489:29:51;1318:135:68;;4489:29:51;:::i;:::-;4471:48;;:::i;:::-;2321:4:48;;;:::i;:::-;429:2965:24;;4572:73:51;;;;;;429:2965:24;4572:73:51;;4621:4;4572:73;;;;:::i;:::-;;429:2965:24;;4572:73:51;;;;;;4656:30;4572:73;-1:-1:-1;4572:73:51;;;4193:502;4561:84;4656:30;;:::i;:::-;4193:502;;;;;;4572:73;;;;3979:4;4572:73;3979:4;4572:73;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;3963:59;429:2965:24;;;;3995:27:51;3963:59;;1431:196:69;;1538:85;1431:196;;;;1538:85;;;;;;;1431:196;:::o;1997:192::-;;2098:87;1997:192;;;;2098:87;;;;;;;1997:192;:::o;758:271::-;825:200;;;;;;;;;;;;;;;;;;;;758:271::o;443:185:49:-;429:2965:24;;552:25:49;;;;834:66:50;429:2965:24;;;;;;;552:25:49;;;;;;:::i;:::-;429:2965:24;542:36:49;;584:40;443:185::o;:::-;429:2965:24;;552:25:49;;;;753:66:45;429:2965:24;;;;;;;552:25:49;;;;;;:::i;939:351:48:-;1206:48;;;-1:-1:-1;1206:48:48;;429:2965:24;;;1077:202:48;;;;429:2965:24;539:66:48;429:2965:24;;709:66:48;429:2965:24;868:66:48;;429:2965:24;868:66:48;;;;429:2965:24;868:66:48;;;429:2965:24;;868:66:48;;;429:2965:24;868:66:48;1077:202;;;;;;:::i;1206:48::-;1240:13;1206:48;;;429:2965:24;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;8278:1282:48;8416:22;;;;429:2965:24;;8399:40:48;;429:2965:24;8399:40:48;;;429:2965:24;;;:::i;8399:40:48:-;429:2965:24;8389:51:48;;429:2965:24;;;;;;;;;;;;8451:34:48;429:2965:24;;8525:14:48;;;8712:82;8515:25;429:2965:24;8525:14:48;;;8515:25;:::i;:::-;8750:14;8712:82;8766:14;8750;;;429:2965:24;8766:14:48;;429:2965:24;;;;8712:82:48;;;8399:40;8712:82;;;;1799:66;;;;;;;;;429:2965:24;1799:66:48;429:2965:24;;1799:66:48;;;429:2965:24;1799:66:48;;;429:2965:24;1799:66:48;;;429:2965:24;1799:66:48;429:2965:24;1799:66:48;8447:1109;2763:4;8812:29;;2763:4;;-1:-1:-1;;8998:16:48;;;429:2965:24;;8399:40:48;429:2965:24;;;8988:27:48;429:2965:24;;;1979:66:48;8959:70;;;429:2965:24;;;1979:66:48;;;429:2965:24;;;;1979:66:48;;;429:2965:24;;;;8959:70:48;;429:2965:24;1979:66:48;;;8959:70;1979:66;8808:748;2867:4;9047:35;;2867:4;;-1:-1:-1;;9216:18:48;;429:2965:24;;;;2174:66:48;8399:40;9181:67;;429:2965:24;;;1979:66:48;;;429:2965:24;;;;1979:66:48;;;429:2965:24;;;;9181:67:48;429:2965:24;1979:66:48;;;9181:67;1979:66;9043:513;2556:4;9266:28;2556:4;;-1:-1:-1;9443:15:48;;429:2965:24;;;;1979:66:48;8399:40;9414:58;;429:2965:24;;;1979:66:48;;;429:2965:24;;;;1979:66:48;;;429:2965:24;;;;9414:58:48;429:2965:24;1979:66:48;;;9414:58;1979:66;9262:294;9523:26;429:2965:24;9523:26:48;429:2965:24;;9523:26:48;429:2965:24;2482:4:48;1380:1:44;1474:29;429:2965:24;;;;;;;;;;;;;;;;;;:::i;6108:1663:51:-;;;;;;429:2965:24;6304:14:51;429:2965:24;6320:17:51;429:2965:24;6339:18:51;429:2965:24;6359:14:51;429:2965:24;;;;:::i;:::-;;2556:4:48;;6423:47:51;6522:17;;429:2965:24;6553:26:51;;;;;;429:2965:24;;;;;;;;;7647:33:51;;:71;;;6546:1091;7643:124;;6108:1663;:::o;7647:71::-;7698:20;;;;429:2965:24;7684:34:51;;;7647:71;;6546:1091;1318:135:68;;;;-1:-1:-1;1201:256:68;;-1:-1:-1;1201:256:68;;-1:-1:-1;1201:256:68;;-1:-1:-1;1201:256:68;;;;6717:16:51;;1318:135:68;;;;;;;6717:16:51;:::i;:::-;6773:57;;429:2965:24;6773:28:51;;;;;:57;;;;6522:17;6843:35;;6522:17;;6971:26;;6999:4;6971:26;;6953:65;6971:26;;;;:::i;:::-;6953:65;;;:::i;:::-;6890:128;;;;;;;;;;;;;;;;6839:339;;;;7190:18;7186:122;;7315:16;429:2965:24;;;;7344:32:51;7340:89;;6839:339;7441:28;;;;7437:115;;7560:23;;;;;2556:4:48;7603:27:51;6546:1091;;;;;;;;;;;;7437:115;7488:55;429:2965:24;7488:55:51;3772:48:50;429:2965:24;;;;;;1380:1:44;1474:29;7340:89:51;429:2965:24;2556:4:48;;7340:89:51;;7186:122;7253:26;;7227:72;7253:26;;;;;;:::i;:::-;429:2965:24;;;;;7227:72:51;;;;;;;;;;:::i;6839:339::-;7122:26;;;;;7150:4;7122:26;;7099:70;7122:26;;;;:::i;:::-;7099:70;;;:::i;:::-;-1:-1:-1;7043:126:51;;;;;;;;;;;;;6839:339;;6773:57;;;;842:1;429:2965:24;842:1:51;;;;;429:2965:24;;;842:1:51;;;429:2965:24;842:1:51;;;;;;;;:::i;1206:::-;;;;;;;;;429:2965:24;1206:1:51;:::o;7775:11084::-;;;;;429:2965:24;7930:12:51;429:2965:24;7968:14:51;429:2965:24;8044:26:51;;;;;;7775:11084;;;;;:::o;8037:10812::-;798:135:68;;;;;;;;;;;;;;;;683:254;;;;2321:4:48;;8454:27:51;;;8450:864;;9374:20;412:1:44;9374:20:51;;9370:676;;842:1;10096:30;;10092:1383;;885:1;11512:17;;11508:279;;8405:1;11826:19;;11822:656;;1023:1;12517:19;;12513:1278;;978:1;13833:22;;13829:518;;1080:1;14398:31;;14394:933;;1150:1;15464:44;;15460:617;;1206:1;16127:30;;16123:1308;;1270:2;17489:38;;17485:1312;;18814:26;429:2965:24;18814:26:51;8405:1;429:2965:24;;;;1380:1:44;1474:29;17485:1312:51;17799:16;;;;;;;;;885:1;17799:16;;17832:15;;;17828:99;;17485:1312;1840:135:68;;;;;;;;;18081:16:51;;429:2965:24;2321:4:48;;;429:2965:24;;2363:226:68;;;;;;;;;;;;;;;;;;;;;;;;;429:2965:24;;;18467:26:51;;;;;;;:::i;:::-;429:2965:24;;;18405:89:51;;429:2965:24;;;;18405:89:51;;429:2965:24;8405:1:51;18405:89;;;:::i;:::-;;429:2965:24;;;;18405:89:51;;;;;;;;;;;;18637:51;18405:89;429:2965:24;18405:89:51;;;17485:1312;18506:16;429:2965:24;18506:16:51;429:2965:24;;;;;18637:51:51;;:::i;:::-;18707:59;:18;;;;18728:31;;;545:85:69;;;;;;;461:173;;18728:31:51;18778:8;8037:10812;;;;;;;;18707:59;;;;18405:89;429:2965:24;18405:89:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;17828:99;798:135:68;;;;;;;-1:-1:-1;798:135:68;;17828:99:51;;16123:1308;16429:16;;;;;;;;;885:1;16429:16;;16462:15;;;16458:99;;16123:1308;1840:135:68;;;;;;;;;16749:16:51;;429:2965:24;2321:4:48;;;429:2965:24;;2363:226:68;;;;;;;;;;;;;;;;;;;;;;;;;429:2965:24;;;17100:26:51;;;;;;;:::i;:::-;429:2965:24;;;17051:76:51;;429:2965:24;;;;17051:76:51;;429:2965:24;8405:1:51;17051:76;;;:::i;:::-;;429:2965:24;;;;17051:76:51;;;;;;;;;;;;17271:51;17051:76;429:2965:24;17051:76:51;;;17139:16;429:2965:24;17139:16:51;429:2965:24;;;;;17271:51:51;;:::i;:::-;17341:59;:18;;;;17362:31;;;545:85:69;;;;;;;461:173;;17362:31:51;17412:8;;;17341:59;;;;16458:99;798:135:68;;;;;;;-1:-1:-1;798:135:68;;16458:99:51;;15460:617;2926:232:68;-1:-1:-1;2102:103:68;;;;-1:-1:-1;2926:232:68;;;;;;;;;;2102:103;;;15775:28:51;2926:232:68;15775:28:51;:::i;:::-;15819:29;;15815:88;;15460:617;15930:38;;;:::i;15815:88::-;15873:17;;-1:-1:-1;15815:88:51;;14394:933;14742:16;;;;;;;;;14754:4;14742:16;14775:15;;;14771:99;;14394:933;15044:61;429:2965:24;3511:494:68;15024:92:51;3511:494:68;;;;:::i;:::-;14943:53:51;;;;429:2965:24;;;15044:61:51;;;;;;;;1080:1;;;;;;;;429:2965:24;1080:1:51;;;15044:61;429:2965:24;15034:72:51;;429:2965:24;;;15024:92:51;;;;740:1;;;;429:2965:24;740:1:51;;;;;429:2965:24;;;;740:1:51;;;429:2965:24;740:1:51;;;429:2965:24;740:1:51;429:2965:24;740:1:51;15024:92;;;;;;412:1:44;15024:92:51;;;;;15176:42;15024:92;429:2965:24;;15024:92:51;429:2965:24;;;;;15176:42:51;;:::i;14771:99::-;798:135:68;;;;;;;;;;-1:-1:-1;14771:99:51;;13829:518;2926:232:68;-1:-1:-1;2102:103:68;;;;-1:-1:-1;2926:232:68;;;;;;;;;;2102:103;;;14099:20:51;;;14095:79;;13829:518;14201:37;;;:::i;14095:79::-;14144:17;;-1:-1:-1;14095:79:51;;12513:1278;12882:16;;;;;;;;2321:4:48;12882:16:51;;12851:53;12876:28;12894:4;12882:16;;2321:4:48;;429:2965:24;2321:4:48;;;;12851:53:51;12920:19;;;12916:107;;12513:1278;885:1;13069:16;13102:22;;13098:114;;12513:1278;1201:256:68;;;13399:60:51;;13432:26;;1318:135:68;;;;;;;;;2321:4:48;;429:2965:24;;13432:26:51;;;;;:::i;:::-;13399:60;;;;:::i;:::-;13471:16;-1:-1:-1;13504:35:51;13500:92;;12513:1278;13619:63;;;;;:::i;13500:92::-;429:2965:24;;;;13500:92:51;;13098:114;-1:-1:-1;1058:135:68;;;;;;;;;13098:114:51;;12916:107;798:135:68;;;;;;;-1:-1:-1;798:135:68;;;;;12916:107:51;;11822:656;12023:16;;;2213:380:68;12312:26:51;12023:16;;;;;;12035:4;12279:60;12023:16;;2213:380:68;;;;;;2363:226;;;;;;;;;;;;;;;;;;;2213:380;;;429:2965:24;;;;12312:26:51;;;;;:::i;:::-;12279:60;;;;:::i;:::-;;12416:31;12279:60;429:2965:24;;12416:31:51;545:85:69;;;;;;;461:173;;11508:279:51;2926:232:68;-1:-1:-1;2926:232:68;-1:-1:-1;2926:232:68;;;;;;;;;2102:103;;;;;;;11697:59:51;:18;;;;11718:31;;;545:85:69;;;;;;;461:173;;10092:1383:51;10387:16;;;;;;;;;885:1;10387:16;;10420:15;;;10416:99;;10092:1383;1840:135:68;;;;;;;2213:380;;1840:135;;;10669:47:51;;429:2965:24;2321:4:48;;;10688:28:51;2321:4:48;10669:47:51;2213:380:68;;;;;;2363:226;;;;;;;;;;;;;;;;;;;2213:380;;;429:2965:24;;;11024:26:51;10983:68;;11024:26;;;;;;;:::i;:::-;429:2965:24;;;;;;10983:68:51;;;;;;;429:2965:24;10983:68:51;;8405:1;10983:68;;;:::i;:::-;;429:2965:24;;10983:68:51;;;;;;;429:2965:24;10983:68:51;429:2965:24;10983:68:51;429:2965:24;10983:68:51;;;10092:1383;429:2965:24;;10983:97:51;10979:203;;11193:16;;429:2965:24;11324:42:51;11193:16;429:2965:24;;;;;11324:42:51;;:::i;10979:203::-;11103:66;11142:26;;;;;;;;:::i;:::-;429:2965:24;;;11103:66:51;;;;;;8405:1;11103:66;;;:::i;10983:68::-;;;;;;;;;;;;;;:::i;:::-;;;;10416:99;798:135:68;;;;;;;-1:-1:-1;798:135:68;;10416:99:51;;9370:676;9567:16;9579:4;9567:16;;;;;;;;;;9600:15;;;9596:99;;9370:676;1840:135:68;;;;9895:42:51;;429:2965:24;;;;;1840:135:68;;;;;9895:42:51;:::i;9596:99::-;798:135:68;;;;;;;-1:-1:-1;798:135:68;;9596:99:51;;8450:864;8794:16;;;;;;;;;;8806:4;8794:16;8827:15;;;8823:99;;8450:864;3511:494:68;9076:27:51;429:2965:24;3511:494:68;9076:27:51;3511:494:68;;;;:::i;:::-;8995:53:51;;;429:2965:24;;9076:27:51;;;;;740:1;;;;429:2965:24;740:1:51;;;;;429:2965:24;;;;740:1:51;;;429:2965:24;740:1:51;;;429:2965:24;740:1:51;429:2965:24;740:1:51;8823:99;798:135:68;;;;-1:-1:-1;798:135:68;;;;;;-1:-1:-1;9076:27:51;8823:99;;429:2965:24;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;7820:454:48;;429:2965:24;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;-1:-1:-1;8164:3:48;429:2965:24;;8146:16:48;;;;;8202:8;;429:2965:24;8202:8:48;;;:::i;:::-;;429:2965:24;;;;7708:7:48;429:2965:24;7708:7:48;;429:2965:24;7727:6:48;429:2965:24;7727:6:48;;;429:2965:24;;;;;7717:17:48;7736:10;;;;429:2965:24;7748:14:48;;;429:2965:24;;;7764:14:48;7780:17;7764:14;;;429:2965:24;;;7780:17:48;;429:2965:24;;;;7667:138:48;429:2965:24;7667:138:48;;429:2965:24;1478:66:48;429:2965:24;;;1478:66:48;;429:2965:24;7736:10:48;1478:66;;429:2965:24;7748:14:48;1478:66;;429:2965:24;7764:14:48;1478:66;;429:2965:24;7780:17:48;1478:66;;429:2965:24;1478:66:48;;;429:2965:24;1478:66:48;;;429:2965:24;1478:66:48;7667:138;;;;;;:::i;:::-;429:2965:24;7650:161:48;;8177:34;;;;:::i;:::-;2556:4;429:2965:24;8131:13:48;;8146:16;;;;;429:2965:24;;8240:28:48;;429:2965:24;;8240:28:48;;429:2965:24;;;:::i;3511:494:68:-;3690:173;;;;;;;;;;;;3998:2;3955:14;3931:39;;2321:4:48;429:2965:24;2321:4:48;429:2965:24;;;;;;3511:494:68;:::o;1947:181:51:-;;429:2965:24;;2068:54:51;429:2965:24;2068:54:51;;;429:2965:24;;;;;;;;;;;;;;;;2068:54:51;;;;;;:::i;2132:210::-;;429:2965:24;;2263:73:51;;;;429:2965:24;;;;;;;;;;;;;;;;;2263:73:51;;;;;;:::i;2562:182::-;429:2965:24;;2681:57:51;;;429:2965:24;;;;;;;;;2681:57:51;;;;;;:::i;9842:280:48:-;10068:48;;10027:18;9956:44;429:2965:24;9972:18:48;;;429:2965:24;;;9956:44:48;:::i;2748:211:51:-;429:2965:24;;2878:75:51;;;429:2965:24;;;;;;;;;2878:75:51;;;;;;:::i;2346:212::-;;429:2965:24;;2478:74:51;429:2965:24;2478:74:51;;;429:2965:24;;;;;;;;;;;;;;;;;;;;2478:74:51;;;;;;:::i","linkReferences":{},"immutableReferences":{"45560":[{"start":4259,"length":32},{"start":4576,"length":32},{"start":6758,"length":32}]}},"methodIdentifiers":{"addHook(bytes4,address)":"b93ea7ad","entrypoint()":"a65d69d4","estimate(bytes,bytes)":"975befdb","execute(bytes,bytes)":"1f6a1eb9","executeUserOp(bytes)":"9c145aed","getImplementation()":"aaf10f42","getStaticSignature(bytes32)":"92dcb3fc","imageHash()":"51605d80","isValidSignature(bytes32,bytes)":"1626ba7e","onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)":"bc197c81","onERC1155Received(address,address,uint256,uint256,bytes)":"f23a6e61","onERC721Received(address,address,uint256,bytes)":"150b7a02","readHook(bytes4)":"1a9b2337","readNonce(uint256)":"8c3f5563","recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":"ad55366b","recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":"13792a4a","removeHook(bytes4)":"4fcf3eca","selfExecute(bytes)":"6ea44577","setStaticSignature(bytes32,address,uint96)":"f727ef1c","tokenReceived(address,uint256,bytes)":"8943ec02","tokensReceived(address,address,address,uint256,bytes,bytes)":"0023de29","updateImageHash(bytes32)":"29561426","updateImplementation(address)":"025b22bc","validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)":"19822f7c"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_entryPoint\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_provided\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_current\",\"type\":\"uint256\"}],\"name\":\"BadNonce\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC4337Disabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"HookAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"HookDoesNotExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ImageHashIsZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_signer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"InvalidERC1271Signature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_entrypoint\",\"type\":\"address\"}],\"name\":\"InvalidEntryPoint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"}],\"name\":\"InvalidKind\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"InvalidSapientSignature\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"InvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_flag\",\"type\":\"uint256\"}],\"name\":\"InvalidSignatureFlag\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_weight\",\"type\":\"uint256\"}],\"name\":\"InvalidSignatureWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_expires\",\"type\":\"uint256\"}],\"name\":\"InvalidStaticSignatureExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_expectedCaller\",\"type\":\"address\"}],\"name\":\"InvalidStaticSignatureWrongCaller\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_weight\",\"type\":\"uint256\"}],\"name\":\"LowWeightChainedSignature\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_gasLeft\",\"type\":\"uint256\"}],\"name\":\"NotEnoughGas\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_returnData\",\"type\":\"bytes\"}],\"name\":\"Reverted\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"checkpoint\",\"type\":\"uint256\"}],\"internalType\":\"struct Snapshot\",\"name\":\"_snapshot\",\"type\":\"tuple\"}],\"name\":\"UnusedSnapshot\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nextCheckpoint\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_checkpoint\",\"type\":\"uint256\"}],\"name\":\"WrongChainedCheckpointOrder\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_returnData\",\"type\":\"bytes\"}],\"name\":\"CallAborted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_returnData\",\"type\":\"bytes\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"CallSkipped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"CallSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"DefinedHook\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"newImageHash\",\"type\":\"bytes32\"}],\"name\":\"ImageHashUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"ImplementationUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_space\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_newNonce\",\"type\":\"uint256\"}],\"name\":\"NonceChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"_timestamp\",\"type\":\"uint96\"}],\"name\":\"StaticSignatureSet\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"addHook\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"entrypoint\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"estimate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"}],\"name\":\"executeUserOp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"getStaticSignature\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"imageHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"readHook\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_space\",\"type\":\"uint256\"}],\"name\":\"readNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"recoverPartialSignature\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isValidImage\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"checkpoint\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"opHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"recoverSapientSignature\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"removeHook\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"}],\"name\":\"selfExecute\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"_timestamp\",\"type\":\"uint96\"}],\"name\":\"setStaticSignature\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"tokenReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"operatorData\",\"type\":\"bytes\"}],\"name\":\"tokensReceived\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_imageHash\",\"type\":\"bytes32\"}],\"name\":\"updateImageHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"}],\"name\":\"updateImplementation\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"accountGasLimits\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"gasFees\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct PackedUserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"userOpHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"missingAccountFunds\",\"type\":\"uint256\"}],\"name\":\"validateUserOp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"validationData\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"William Hua\",\"kind\":\"dev\",\"methods\":{\"addHook(bytes4,address)\":{\"details\":\"Callable only by the contract itself\",\"params\":{\"implementation\":\"The implementation address of the hook\",\"selector\":\"The selector of the hook\"}},\"estimate(bytes,bytes)\":{\"params\":{\"_payload\":\"The payload to estimate the gas used for\",\"_signature\":\"The signature to validate the payload with\"},\"returns\":{\"gasUsed\":\"The gas used for payload validation and execution\"}},\"execute(bytes,bytes)\":{\"params\":{\"_payload\":\"The payload\",\"_signature\":\"The signature\"}},\"getImplementation()\":{\"returns\":{\"_0\":\"implementation The implementation\"}},\"getStaticSignature(bytes32)\":{\"params\":{\"_hash\":\"The hash to get the static signature for\"},\"returns\":{\"_0\":\"address The address associated with the static signature\",\"_1\":\"timestamp The timestamp of the static signature\"}},\"imageHash()\":{\"returns\":{\"_0\":\"imageHash The image hash\"}},\"isValidSignature(bytes32,bytes)\":{\"details\":\"MUST return the correct magic value if the signature provided is valid for the provided hash > The bytes4 magic value to return when signature is valid is 0x1626ba7e : bytes4(keccak256(\\\"isValidSignature(bytes32,bytes)\\\") > This function MAY modify Ethereum's state\",\"params\":{\"_hash\":\"keccak256 hash that was signed\",\"_signature\":\"Signature byte array associated with _data\"},\"returns\":{\"_0\":\"Magic value 0x1626ba7e if the signature is valid and 0x0 otherwise\"}},\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\":{\"params\":{\"data\":\"Additional data with no specified format\",\"from\":\"The address which previously owned the token\",\"ids\":\"The list of token IDs being transferred\",\"operator\":\"The address which initiated the transfer\",\"values\":\"The amounts of each token being transferred\"},\"returns\":{\"_0\":\"On a success, the selector of the function that was called\"}},\"onERC1155Received(address,address,uint256,uint256,bytes)\":{\"params\":{\"data\":\"Additional data with no specified format\",\"from\":\"The address which previously owned the token\",\"operator\":\"The address which initiated the transfer\",\"tokenId\":\"The ID of the token being transferred\",\"value\":\"The amount of token being transferred\"},\"returns\":{\"_0\":\"On a success, the selector of the function that was called\"}},\"onERC721Received(address,address,uint256,bytes)\":{\"params\":{\"data\":\"Additional data with no specified format\",\"from\":\"The address which previously owned the token\",\"operator\":\"The address which initiated the transfer\",\"tokenId\":\"The ID of the token being transferred\"},\"returns\":{\"_0\":\"On a success, the selector of the function that was called\"}},\"readHook(bytes4)\":{\"params\":{\"selector\":\"The selector of the hook\"},\"returns\":{\"_0\":\"implementation The implementation address of the hook\"}},\"readNonce(uint256)\":{\"params\":{\"_space\":\"The space\"},\"returns\":{\"_0\":\"nonce The nonce\"}},\"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"params\":{\"_payload\":\"The payload\",\"_signature\":\"The signature to recover\"},\"returns\":{\"checkpoint\":\"The checkpoint identifier\",\"imageHash\":\"The derived image hash\",\"isValidImage\":\"Whether the image hash is valid\",\"opHash\":\"The hash of the payload\",\"threshold\":\"The signature threshold\",\"weight\":\"The derived weight\"}},\"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"params\":{\"payload\":\"The payload to recover the signature from\",\"signature\":\"The signature to recover the image hash from\"},\"returns\":{\"_0\":\"The recovered image hash\"}},\"removeHook(bytes4)\":{\"details\":\"Callable only by the contract itself\",\"params\":{\"selector\":\"The selector of the hook\"}},\"selfExecute(bytes)\":{\"details\":\"Callable only by the contract itself\",\"params\":{\"_payload\":\"The payload\"}},\"setStaticSignature(bytes32,address,uint96)\":{\"details\":\"Only callable by the wallet itself\",\"params\":{\"_address\":\"The address to associate with the static signature\",\"_hash\":\"The hash to set the static signature for\",\"_timestamp\":\"The timestamp of the static signature\"}},\"tokenReceived(address,uint256,bytes)\":{\"params\":{\"data\":\"Transaction metadata\",\"from\":\"The address which previously owned the tokens\",\"value\":\"The amount of tokens being transferred\"},\"returns\":{\"_0\":\"The signature of the function to be called\"}},\"tokensReceived(address,address,address,uint256,bytes,bytes)\":{\"params\":{\"amount\":\"The amount of tokens being transferred\",\"data\":\"Additional data with no specified format\",\"from\":\"The address which previously owned the tokens\",\"operator\":\"The address which initiated the transfer\",\"operatorData\":\"Additional data with no specified format\",\"to\":\"The address which is receiving the tokens\"}},\"updateImageHash(bytes32)\":{\"details\":\"Only callable by the wallet itself\",\"params\":{\"_imageHash\":\"The new image hash\"}},\"updateImplementation(address)\":{\"details\":\"Callable only by the contract itself\",\"params\":{\"_implementation\":\"The new implementation\"}},\"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)\":{\"details\":\"Must validate caller is the entryPoint. Must validate the signature and nonce\",\"params\":{\"missingAccountFunds\":\"- Missing funds on the account's deposit in the entrypoint. This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call. The excess is left as a deposit in the entrypoint for future calls. Can be withdrawn anytime using \\\"entryPoint.withdrawTo()\\\". In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.\",\"userOp\":\"- The operation that is about to be executed.\",\"userOpHash\":\"- Hash of the user's request data. can be used as the basis for signature.\"},\"returns\":{\"validationData\":\" - Packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode. <20-byte> aggregatorOrSigFail - 0 for valid signature, 1 to mark signature failure, otherwise, an address of an \\\"aggregator\\\" contract. <6-byte> validUntil - Last timestamp this operation is valid at, or 0 for \\\"indefinitely\\\" <6-byte> validAfter - First timestamp this operation is valid If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure. Note that the validation code cannot use block.timestamp (or block.number) directly.\"}}},\"title\":\"Estimator\",\"version\":1},\"userdoc\":{\"errors\":{\"BadNonce(uint256,uint256,uint256)\":[{\"notice\":\"Error thrown when the nonce is bad\"}],\"HookAlreadyExists(bytes4)\":[{\"notice\":\"Error thrown when a hook already exists\"}],\"HookDoesNotExist(bytes4)\":[{\"notice\":\"Error thrown when a hook does not exist\"}],\"ImageHashIsZero()\":[{\"notice\":\"Error thrown when the image hash is zero\"}],\"InvalidERC1271Signature(bytes32,address,bytes)\":[{\"notice\":\"Error thrown when the ERC1271 signature is invalid\"}],\"InvalidKind(uint8)\":[{\"notice\":\"Error thrown when the kind is invalid\"}],\"InvalidSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":[{\"notice\":\"Error thrown when the sapient signature is invalid\"}],\"InvalidSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":[{\"notice\":\"Error thrown when a signature is invalid\"}],\"InvalidSignatureFlag(uint256)\":[{\"notice\":\"Error thrown when the signature flag is invalid\"}],\"InvalidSignatureWeight(uint256,uint256)\":[{\"notice\":\"Error thrown when the signature weight is invalid\"}],\"InvalidStaticSignatureExpired(bytes32,uint256)\":[{\"notice\":\"Error thrown when the static signature has expired\"}],\"InvalidStaticSignatureWrongCaller(bytes32,address,address)\":[{\"notice\":\"Error thrown when the static signature has the wrong caller\"}],\"LowWeightChainedSignature(bytes,uint256,uint256)\":[{\"notice\":\"Error thrown when the weight is too low for a chained signature\"}],\"NotEnoughGas((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint256,uint256)\":[{\"notice\":\"Error thrown when there is not enough gas\"}],\"OnlySelf(address)\":[{\"notice\":\"Error thrown when the caller is not the same as the contract\"}],\"Reverted((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint256,bytes)\":[{\"notice\":\"Error thrown when a call reverts\"}],\"UnusedSnapshot((bytes32,uint256))\":[{\"notice\":\"Error thrown when the snapshot is unused\"}],\"WrongChainedCheckpointOrder(uint256,uint256)\":[{\"notice\":\"Error thrown when the checkpoint order is wrong\"}]},\"events\":{\"CallAborted(bytes32,uint256,bytes)\":{\"notice\":\"Emitted when a call is aborted\"},\"CallFailed(bytes32,uint256,bytes)\":{\"notice\":\"Emitted when a call fails\"},\"CallSkipped(bytes32,uint256)\":{\"notice\":\"Emitted when a call is skipped\"},\"CallSucceeded(bytes32,uint256)\":{\"notice\":\"Emitted when a call succeeds\"},\"DefinedHook(bytes4,address)\":{\"notice\":\"Emitted when a hook is defined\"},\"ImageHashUpdated(bytes32)\":{\"notice\":\"Emitted when the image hash is updated\"},\"ImplementationUpdated(address)\":{\"notice\":\"Emitted when the implementation is updated\"},\"NonceChange(uint256,uint256)\":{\"notice\":\"Emitted when the nonce is changed\"},\"StaticSignatureSet(bytes32,address,uint96)\":{\"notice\":\"Event emitted when a static signature is set\"}},\"kind\":\"user\",\"methods\":{\"addHook(bytes4,address)\":{\"notice\":\"Add a hook\"},\"estimate(bytes,bytes)\":{\"notice\":\"Estimate the gas used for payload validation and execution\"},\"execute(bytes,bytes)\":{\"notice\":\"Execute a call\"},\"getImplementation()\":{\"notice\":\"Get the implementation\"},\"getStaticSignature(bytes32)\":{\"notice\":\"Get the static signature for a specific hash\"},\"imageHash()\":{\"notice\":\"Get the image hash\"},\"isValidSignature(bytes32,bytes)\":{\"notice\":\"Verifies whether the provided signature is valid with respect to the provided hash\"},\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\":{\"notice\":\"Called when multiple ERC1155 tokens are transferred to this contract\"},\"onERC1155Received(address,address,uint256,uint256,bytes)\":{\"notice\":\"Called when a single ERC1155 token is transferred to this contract\"},\"onERC721Received(address,address,uint256,bytes)\":{\"notice\":\"Called when a single ERC721 token is transferred to this contract\"},\"readHook(bytes4)\":{\"notice\":\"Read a hook\"},\"readNonce(uint256)\":{\"notice\":\"Read the nonce\"},\"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"notice\":\"Recover the partial signature\"},\"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"notice\":\"Recovers the image hash of a given signature\"},\"removeHook(bytes4)\":{\"notice\":\"Remove a hook\"},\"selfExecute(bytes)\":{\"notice\":\"Execute a call\"},\"setStaticSignature(bytes32,address,uint96)\":{\"notice\":\"Set the static signature for a specific hash\"},\"tokenReceived(address,uint256,bytes)\":{\"notice\":\"Called when ERC223 tokens are received by this contract\"},\"tokensReceived(address,address,address,uint256,bytes,bytes)\":{\"notice\":\"Called when tokens are received by this contract\"},\"updateImageHash(bytes32)\":{\"notice\":\"Update the image hash\"},\"updateImplementation(address)\":{\"notice\":\"Update the implementation\"},\"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)\":{\"notice\":\"Validate user's signature and nonce the entryPoint will make the call to the recipient only if this validation call returns successfully. signature failure should be reported by returning SIG_VALIDATION_FAILED (1). This allows making a \\\"simulation call\\\" without a valid signature Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.\"}},\"notice\":\"Helper for estimating the gas used for payload validation and execution\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Estimator.sol\":\"Estimator\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/Estimator.sol\":{\"keccak256\":\"0xc431d4f640a175f3ede1e9573725752a30254eee10ebea7033eb3c4a5837a5ba\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://f426e9d076e74bd861d9842a86ff91b296ca82974fbf9471dba7dcded6fa8b48\",\"dweb:/ipfs/QmNc4abrqiia98655dcNEJM845ajEqiYa1DgPEykD7VAMi\"]},\"src/Stage2Module.sol\":{\"keccak256\":\"0xd0b2c2fead81d32a3f83f95bd1dd2d90677fdd1e0a7194a25710ffd0fdaee428\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://8489e75346dbf462b0567da30c2e020cdde3975c38bdfee055284642a3bd2d19\",\"dweb:/ipfs/QmTDM2AkG8qLVjfn35UcXN89CdQS8p3Cm888EadYrMAYAR\"]},\"src/Wallet.sol\":{\"keccak256\":\"0xe01e9e937dd8d7572976ccc8ec3ec87e4a557069dafb05f85977a7b71f5c58d5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2e9ab78d33655f8e822258dff3f2d5ad01e84f6dc90174840d5a283b8e6413c1\",\"dweb:/ipfs/QmNMyYe3C1fs3cxKmUZ3S9VU5EE4WVWPVcwiGbgvbS1vrH\"]},\"src/modules/Calls.sol\":{\"keccak256\":\"0xcd0d38d0fd248e4443032dede2b8892ea0ca7e55538cd54082830f6b98d8edb1\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://617bb6d0724b18f3d77347cc454a57c1c916a0818a592552bd7fa226aa41a306\",\"dweb:/ipfs/Qmeet85Ux6cKq9JmC25JnTzFnRrgDpkyRik2svZLWt4fov\"]},\"src/modules/ERC4337v07.sol\":{\"keccak256\":\"0xbee11ed2498b892b16f72984c848fea85b58d15313fffa78c1e48ca7208f9189\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2d9296803bd52f5e2ae84011593f686802f1cadf6c68a4ee9f97e6455463ae0f\",\"dweb:/ipfs/QmXmWwUiV2eshxxdY5zCyJ7rxcH7bztxcAoh1scw2MPuhP\"]},\"src/modules/Hooks.sol\":{\"keccak256\":\"0xd1f9de45b83ae5f9f32a4d1c709d7a2b6543b1cddd09bf69d401dcdf1d154ab7\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://bf3161edf37479825588e07039752b79792666455cc0beb1ca0e873b3be31ad4\",\"dweb:/ipfs/QmYYpJeSsRgRx2oHcpvhqsNs7ZtDhVnxLmFpXz5eYcS8g4\"]},\"src/modules/Implementation.sol\":{\"keccak256\":\"0x16546d4be07865808890308750916b0a9a55e7a994a458c01edde4618f29b4e6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1b1f9785b08c9f29d6849ba2d3dee89fa3ea5f3c2feec4a59a6d1040e3fbe040\",\"dweb:/ipfs/QmU2Pm5C3Ztky7RQdCZggavyq7Eh1eS1HFqVz9jZKiMUML\"]},\"src/modules/Nonce.sol\":{\"keccak256\":\"0x56fbf6dc9b34ab60ae8a32ffb6f583c003bb8f4a5223ce704e982400fa403fab\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://492f53628633b862702cf8f9b726067a722c94028133a8a4c4fcf3d0e73ad803\",\"dweb:/ipfs/QmTHNy4XbH47YZaqKDpknb5aApjRH9HVAREHN7N5vEFWEV\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/Storage.sol\":{\"keccak256\":\"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da\",\"dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn\"]},\"src/modules/auth/BaseAuth.sol\":{\"keccak256\":\"0xbf2e40def03fcb5f4a5129b2f5803e21951325b92e00126cbe1427b7c25cfefd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://b560905fcc4b957d27c2abed78a1e82529c89fa472e91b3d108fbfd91aa7c3f7\",\"dweb:/ipfs/QmRjLLtTWE6dFX2kBQCgLz7ossfMxhAFgDC8Jx9XuGL6Wy\"]},\"src/modules/auth/BaseSig.sol\":{\"keccak256\":\"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8\",\"dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3\"]},\"src/modules/auth/SelfAuth.sol\":{\"keccak256\":\"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42\",\"dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W\"]},\"src/modules/auth/Stage2Auth.sol\":{\"keccak256\":\"0x5b23b530522ba1c02248d1f7470352c57fbc91c245c7c577044f93f6bb560a59\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c30b8e13edc7e18e4ea7bc7f4b8deaf16301a8f2bb23e7697e6f6b74882a39dc\",\"dweb:/ipfs/QmW69XvfeJepuPBrHb1Vpkikg43P4juEGdRkUWt8GrrAfL\"]},\"src/modules/interfaces/IAccount.sol\":{\"keccak256\":\"0x64ca3bb59ec4fc0a60d80402802365e2d5226afe7e7aabe3b21df936c84f2bcb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ccfd2381e1874cdec2f473a9a17799a3b57360c0593d68ee66fcea9c16eb39b4\",\"dweb:/ipfs/QmcjbJpGz3Exmu4fsj953Y2bG8rtQaVMEFUgT6W2dUXomr\"]},\"src/modules/interfaces/IAuth.sol\":{\"keccak256\":\"0xf6fa30af2ec91d5fbeac17c9b1f2aa73b7883c9ac98745605007e57666394b91\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://6e90a87978519462f9612f4a17e38fddc1c7bcf700ff834a1de7dce326f30353\",\"dweb:/ipfs/QmXmWAsRRK6t4jPs4VcXrouyokxdALM28D3odX7ub48WEp\"]},\"src/modules/interfaces/ICheckpointer.sol\":{\"keccak256\":\"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1\",\"dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t\"]},\"src/modules/interfaces/IDelegatedExtension.sol\":{\"keccak256\":\"0xa2ae897e90fd70dd4a9e172bc04d019ba9c512e72c2df65fcb6daf87dd5ceb90\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://cdf4b7c3dfb0aef6c9dbe8b2a0542018dc756ef2252d7101bcb3186192da0a11\",\"dweb:/ipfs/QmPHCVu1DJ7fBrPBYA5y3hoF3a3XFEBwYCZ1ErGaxPhcYL\"]},\"src/modules/interfaces/IERC1155Receiver.sol\":{\"keccak256\":\"0xa23d0bc29233a91085922ea8a7e2cbe8b5f3358d3f2c3cdc58adade9a171d9c1\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2f06b8f3ae7a45441cc26da5b2ddd15ba76d1664178958f63f536e6c5e4fd0fb\",\"dweb:/ipfs/QmR1Rnk8ciSn5s5wNLGvpE1QNRDsBVDfDT1ZXhei2brmFj\"]},\"src/modules/interfaces/IERC1271.sol\":{\"keccak256\":\"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b\",\"dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF\"]},\"src/modules/interfaces/IERC223Receiver.sol\":{\"keccak256\":\"0x426221c0d48b651ed692edfa5388d6e5304e94f48598a71748134b2659e3890d\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://9e1ed2fd5e390b5b943dc07c2e0ea9e524eb37263dc72c482365c159fc3659e5\",\"dweb:/ipfs/QmWRDBvb1cthVPm4BSzKX3J5GpGGSBuDokkpRK9x5aA7JR\"]},\"src/modules/interfaces/IERC721Receiver.sol\":{\"keccak256\":\"0xbe14c3b727f283a467dc2f2221d3322c5a69cd64a3aacad85acab05e94438f35\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://43ef086c509b8b88cae78f67c4bd979fd427736972cfe56f7423371ccc154e63\",\"dweb:/ipfs/Qmc7Yp7Z1dQ925gzEZYVNUXnWr3YomvWkXfaGYLZpoy8J3\"]},\"src/modules/interfaces/IERC777Receiver.sol\":{\"keccak256\":\"0xd9144d439a96b0c6439cd9a186701aa530f4f782ff09fdbf6c3ef16b78b0d4e5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d1f17484eda7184db4a00106b4952f15c1517872cbfe19663d6fce4e042729b2\",\"dweb:/ipfs/QmWdhYmLNkUpgvPpSyGHstxrFwMfhRTVmxDpe4frkUu1Qh\"]},\"src/modules/interfaces/IEntryPoint.sol\":{\"keccak256\":\"0xd19922ea7a8ae09072a721138dc93e175fa77ecaa3ac6f2d759d5e5e944fb665\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://20ecea69ddd4d8787c0bdc4487dea03e90f63f4296674a12728e331a78e62620\",\"dweb:/ipfs/QmZUrX8zEqfHZEJQjNtDUXGS47bj2UuRCLfbkLPrXsot1c\"]},\"src/modules/interfaces/IPartialAuth.sol\":{\"keccak256\":\"0x0d1aa021615d8e90696e71a9468331457a1babfa2ffe169654b7456e5bcb7a73\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://bbacd149a6358ab0d4b9c588d2e3a55fc71ed4723269150d7b91ca70092f6519\",\"dweb:/ipfs/QmUSwtrYCrRcRFsy5rCzdMPrw1FCU7ZoeXdsW6kK9yc8FK\"]},\"src/modules/interfaces/ISapient.sol\":{\"keccak256\":\"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489\",\"dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"src/utils/LibOptim.sol\":{\"keccak256\":\"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81\",\"dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_entryPoint","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"_space","type":"uint256"},{"internalType":"uint256","name":"_provided","type":"uint256"},{"internalType":"uint256","name":"_current","type":"uint256"}],"type":"error","name":"BadNonce"},{"inputs":[],"type":"error","name":"ERC4337Disabled"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"type":"error","name":"HookAlreadyExists"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"type":"error","name":"HookDoesNotExist"},{"inputs":[],"type":"error","name":"ImageHashIsZero"},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32"},{"internalType":"address","name":"_signer","type":"address"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"type":"error","name":"InvalidERC1271Signature"},{"inputs":[{"internalType":"address","name":"_entrypoint","type":"address"}],"type":"error","name":"InvalidEntryPoint"},{"inputs":[{"internalType":"uint8","name":"kind","type":"uint8"}],"type":"error","name":"InvalidKind"},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"type":"error","name":"InvalidSapientSignature"},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"type":"error","name":"InvalidSignature"},{"inputs":[{"internalType":"uint256","name":"_flag","type":"uint256"}],"type":"error","name":"InvalidSignatureFlag"},{"inputs":[{"internalType":"uint256","name":"_threshold","type":"uint256"},{"internalType":"uint256","name":"_weight","type":"uint256"}],"type":"error","name":"InvalidSignatureWeight"},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32"},{"internalType":"uint256","name":"_expires","type":"uint256"}],"type":"error","name":"InvalidStaticSignatureExpired"},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32"},{"internalType":"address","name":"_caller","type":"address"},{"internalType":"address","name":"_expectedCaller","type":"address"}],"type":"error","name":"InvalidStaticSignatureWrongCaller"},{"inputs":[{"internalType":"bytes","name":"_signature","type":"bytes"},{"internalType":"uint256","name":"_threshold","type":"uint256"},{"internalType":"uint256","name":"_weight","type":"uint256"}],"type":"error","name":"LowWeightChainedSignature"},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_gasLeft","type":"uint256"}],"type":"error","name":"NotEnoughGas"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"}],"type":"error","name":"OnlySelf"},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"bytes","name":"_returnData","type":"bytes"}],"type":"error","name":"Reverted"},{"inputs":[{"internalType":"struct Snapshot","name":"_snapshot","type":"tuple","components":[{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"uint256","name":"checkpoint","type":"uint256"}]}],"type":"error","name":"UnusedSnapshot"},{"inputs":[{"internalType":"uint256","name":"_nextCheckpoint","type":"uint256"},{"internalType":"uint256","name":"_checkpoint","type":"uint256"}],"type":"error","name":"WrongChainedCheckpointOrder"},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_index","type":"uint256","indexed":false},{"internalType":"bytes","name":"_returnData","type":"bytes","indexed":false}],"type":"event","name":"CallAborted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_index","type":"uint256","indexed":false},{"internalType":"bytes","name":"_returnData","type":"bytes","indexed":false}],"type":"event","name":"CallFailed","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_index","type":"uint256","indexed":false}],"type":"event","name":"CallSkipped","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_index","type":"uint256","indexed":false}],"type":"event","name":"CallSucceeded","anonymous":false},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4","indexed":false},{"internalType":"address","name":"implementation","type":"address","indexed":false}],"type":"event","name":"DefinedHook","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"newImageHash","type":"bytes32","indexed":false}],"type":"event","name":"ImageHashUpdated","anonymous":false},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address","indexed":false}],"type":"event","name":"ImplementationUpdated","anonymous":false},{"inputs":[{"internalType":"uint256","name":"_space","type":"uint256","indexed":false},{"internalType":"uint256","name":"_newNonce","type":"uint256","indexed":false}],"type":"event","name":"NonceChange","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32","indexed":false},{"internalType":"address","name":"_address","type":"address","indexed":false},{"internalType":"uint96","name":"_timestamp","type":"uint96","indexed":false}],"type":"event","name":"StaticSignatureSet","anonymous":false},{"inputs":[],"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"},{"internalType":"address","name":"implementation","type":"address"}],"stateMutability":"payable","type":"function","name":"addHook"},{"inputs":[],"stateMutability":"view","type":"function","name":"entrypoint","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"payable","type":"function","name":"estimate","outputs":[{"internalType":"uint256","name":"gasUsed","type":"uint256"}]},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"payable","type":"function","name":"execute"},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"executeUserOp"},{"inputs":[],"stateMutability":"view","type":"function","name":"getImplementation","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getStaticSignature","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"imageHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"view","type":"function","name":"isValidSignature","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function","name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function","name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function","name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"stateMutability":"view","type":"function","name":"readHook","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"_space","type":"uint256"}],"stateMutability":"view","type":"function","name":"readNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"view","type":"function","name":"recoverPartialSignature","outputs":[{"internalType":"uint256","name":"threshold","type":"uint256"},{"internalType":"uint256","name":"weight","type":"uint256"},{"internalType":"bool","name":"isValidImage","type":"bool"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"uint256","name":"checkpoint","type":"uint256"},{"internalType":"bytes32","name":"opHash","type":"bytes32"}]},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"view","type":"function","name":"recoverSapientSignature","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"stateMutability":"payable","type":"function","name":"removeHook"},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"}],"stateMutability":"payable","type":"function","name":"selfExecute"},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint96","name":"_timestamp","type":"uint96"}],"stateMutability":"nonpayable","type":"function","name":"setStaticSignature"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function","name":"tokenReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes","name":"operatorData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"tokensReceived"},{"inputs":[{"internalType":"bytes32","name":"_imageHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"updateImageHash"},{"inputs":[{"internalType":"address","name":"_implementation","type":"address"}],"stateMutability":"payable","type":"function","name":"updateImplementation"},{"inputs":[{"internalType":"struct PackedUserOperation","name":"userOp","type":"tuple","components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"initCode","type":"bytes"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"bytes32","name":"accountGasLimits","type":"bytes32"},{"internalType":"uint256","name":"preVerificationGas","type":"uint256"},{"internalType":"bytes32","name":"gasFees","type":"bytes32"},{"internalType":"bytes","name":"paymasterAndData","type":"bytes"},{"internalType":"bytes","name":"signature","type":"bytes"}]},{"internalType":"bytes32","name":"userOpHash","type":"bytes32"},{"internalType":"uint256","name":"missingAccountFunds","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"validateUserOp","outputs":[{"internalType":"uint256","name":"validationData","type":"uint256"}]},{"inputs":[],"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"addHook(bytes4,address)":{"details":"Callable only by the contract itself","params":{"implementation":"The implementation address of the hook","selector":"The selector of the hook"}},"estimate(bytes,bytes)":{"params":{"_payload":"The payload to estimate the gas used for","_signature":"The signature to validate the payload with"},"returns":{"gasUsed":"The gas used for payload validation and execution"}},"execute(bytes,bytes)":{"params":{"_payload":"The payload","_signature":"The signature"}},"getImplementation()":{"returns":{"_0":"implementation The implementation"}},"getStaticSignature(bytes32)":{"params":{"_hash":"The hash to get the static signature for"},"returns":{"_0":"address The address associated with the static signature","_1":"timestamp The timestamp of the static signature"}},"imageHash()":{"returns":{"_0":"imageHash The image hash"}},"isValidSignature(bytes32,bytes)":{"details":"MUST return the correct magic value if the signature provided is valid for the provided hash > The bytes4 magic value to return when signature is valid is 0x1626ba7e : bytes4(keccak256(\"isValidSignature(bytes32,bytes)\") > This function MAY modify Ethereum's state","params":{"_hash":"keccak256 hash that was signed","_signature":"Signature byte array associated with _data"},"returns":{"_0":"Magic value 0x1626ba7e if the signature is valid and 0x0 otherwise"}},"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)":{"params":{"data":"Additional data with no specified format","from":"The address which previously owned the token","ids":"The list of token IDs being transferred","operator":"The address which initiated the transfer","values":"The amounts of each token being transferred"},"returns":{"_0":"On a success, the selector of the function that was called"}},"onERC1155Received(address,address,uint256,uint256,bytes)":{"params":{"data":"Additional data with no specified format","from":"The address which previously owned the token","operator":"The address which initiated the transfer","tokenId":"The ID of the token being transferred","value":"The amount of token being transferred"},"returns":{"_0":"On a success, the selector of the function that was called"}},"onERC721Received(address,address,uint256,bytes)":{"params":{"data":"Additional data with no specified format","from":"The address which previously owned the token","operator":"The address which initiated the transfer","tokenId":"The ID of the token being transferred"},"returns":{"_0":"On a success, the selector of the function that was called"}},"readHook(bytes4)":{"params":{"selector":"The selector of the hook"},"returns":{"_0":"implementation The implementation address of the hook"}},"readNonce(uint256)":{"params":{"_space":"The space"},"returns":{"_0":"nonce The nonce"}},"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"params":{"_payload":"The payload","_signature":"The signature to recover"},"returns":{"checkpoint":"The checkpoint identifier","imageHash":"The derived image hash","isValidImage":"Whether the image hash is valid","opHash":"The hash of the payload","threshold":"The signature threshold","weight":"The derived weight"}},"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"params":{"payload":"The payload to recover the signature from","signature":"The signature to recover the image hash from"},"returns":{"_0":"The recovered image hash"}},"removeHook(bytes4)":{"details":"Callable only by the contract itself","params":{"selector":"The selector of the hook"}},"selfExecute(bytes)":{"details":"Callable only by the contract itself","params":{"_payload":"The payload"}},"setStaticSignature(bytes32,address,uint96)":{"details":"Only callable by the wallet itself","params":{"_address":"The address to associate with the static signature","_hash":"The hash to set the static signature for","_timestamp":"The timestamp of the static signature"}},"tokenReceived(address,uint256,bytes)":{"params":{"data":"Transaction metadata","from":"The address which previously owned the tokens","value":"The amount of tokens being transferred"},"returns":{"_0":"The signature of the function to be called"}},"tokensReceived(address,address,address,uint256,bytes,bytes)":{"params":{"amount":"The amount of tokens being transferred","data":"Additional data with no specified format","from":"The address which previously owned the tokens","operator":"The address which initiated the transfer","operatorData":"Additional data with no specified format","to":"The address which is receiving the tokens"}},"updateImageHash(bytes32)":{"details":"Only callable by the wallet itself","params":{"_imageHash":"The new image hash"}},"updateImplementation(address)":{"details":"Callable only by the contract itself","params":{"_implementation":"The new implementation"}},"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)":{"details":"Must validate caller is the entryPoint. Must validate the signature and nonce","params":{"missingAccountFunds":"- Missing funds on the account's deposit in the entrypoint. This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call. The excess is left as a deposit in the entrypoint for future calls. Can be withdrawn anytime using \"entryPoint.withdrawTo()\". In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.","userOp":"- The operation that is about to be executed.","userOpHash":"- Hash of the user's request data. can be used as the basis for signature."},"returns":{"validationData":" - Packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode. <20-byte> aggregatorOrSigFail - 0 for valid signature, 1 to mark signature failure, otherwise, an address of an \"aggregator\" contract. <6-byte> validUntil - Last timestamp this operation is valid at, or 0 for \"indefinitely\" <6-byte> validAfter - First timestamp this operation is valid If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure. Note that the validation code cannot use block.timestamp (or block.number) directly."}}},"version":1},"userdoc":{"kind":"user","methods":{"addHook(bytes4,address)":{"notice":"Add a hook"},"estimate(bytes,bytes)":{"notice":"Estimate the gas used for payload validation and execution"},"execute(bytes,bytes)":{"notice":"Execute a call"},"getImplementation()":{"notice":"Get the implementation"},"getStaticSignature(bytes32)":{"notice":"Get the static signature for a specific hash"},"imageHash()":{"notice":"Get the image hash"},"isValidSignature(bytes32,bytes)":{"notice":"Verifies whether the provided signature is valid with respect to the provided hash"},"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)":{"notice":"Called when multiple ERC1155 tokens are transferred to this contract"},"onERC1155Received(address,address,uint256,uint256,bytes)":{"notice":"Called when a single ERC1155 token is transferred to this contract"},"onERC721Received(address,address,uint256,bytes)":{"notice":"Called when a single ERC721 token is transferred to this contract"},"readHook(bytes4)":{"notice":"Read a hook"},"readNonce(uint256)":{"notice":"Read the nonce"},"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"notice":"Recover the partial signature"},"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"notice":"Recovers the image hash of a given signature"},"removeHook(bytes4)":{"notice":"Remove a hook"},"selfExecute(bytes)":{"notice":"Execute a call"},"setStaticSignature(bytes32,address,uint96)":{"notice":"Set the static signature for a specific hash"},"tokenReceived(address,uint256,bytes)":{"notice":"Called when ERC223 tokens are received by this contract"},"tokensReceived(address,address,address,uint256,bytes,bytes)":{"notice":"Called when tokens are received by this contract"},"updateImageHash(bytes32)":{"notice":"Update the image hash"},"updateImplementation(address)":{"notice":"Update the implementation"},"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)":{"notice":"Validate user's signature and nonce the entryPoint will make the call to the recipient only if this validation call returns successfully. signature failure should be reported by returning SIG_VALIDATION_FAILED (1). This allows making a \"simulation call\" without a valid signature Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure."}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/Estimator.sol":"Estimator"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/Estimator.sol":{"keccak256":"0xc431d4f640a175f3ede1e9573725752a30254eee10ebea7033eb3c4a5837a5ba","urls":["bzz-raw://f426e9d076e74bd861d9842a86ff91b296ca82974fbf9471dba7dcded6fa8b48","dweb:/ipfs/QmNc4abrqiia98655dcNEJM845ajEqiYa1DgPEykD7VAMi"],"license":"Apache-2.0"},"src/Stage2Module.sol":{"keccak256":"0xd0b2c2fead81d32a3f83f95bd1dd2d90677fdd1e0a7194a25710ffd0fdaee428","urls":["bzz-raw://8489e75346dbf462b0567da30c2e020cdde3975c38bdfee055284642a3bd2d19","dweb:/ipfs/QmTDM2AkG8qLVjfn35UcXN89CdQS8p3Cm888EadYrMAYAR"],"license":"Apache-2.0"},"src/Wallet.sol":{"keccak256":"0xe01e9e937dd8d7572976ccc8ec3ec87e4a557069dafb05f85977a7b71f5c58d5","urls":["bzz-raw://2e9ab78d33655f8e822258dff3f2d5ad01e84f6dc90174840d5a283b8e6413c1","dweb:/ipfs/QmNMyYe3C1fs3cxKmUZ3S9VU5EE4WVWPVcwiGbgvbS1vrH"],"license":"Apache-2.0"},"src/modules/Calls.sol":{"keccak256":"0xcd0d38d0fd248e4443032dede2b8892ea0ca7e55538cd54082830f6b98d8edb1","urls":["bzz-raw://617bb6d0724b18f3d77347cc454a57c1c916a0818a592552bd7fa226aa41a306","dweb:/ipfs/Qmeet85Ux6cKq9JmC25JnTzFnRrgDpkyRik2svZLWt4fov"],"license":"Apache-2.0"},"src/modules/ERC4337v07.sol":{"keccak256":"0xbee11ed2498b892b16f72984c848fea85b58d15313fffa78c1e48ca7208f9189","urls":["bzz-raw://2d9296803bd52f5e2ae84011593f686802f1cadf6c68a4ee9f97e6455463ae0f","dweb:/ipfs/QmXmWwUiV2eshxxdY5zCyJ7rxcH7bztxcAoh1scw2MPuhP"],"license":"Apache-2.0"},"src/modules/Hooks.sol":{"keccak256":"0xd1f9de45b83ae5f9f32a4d1c709d7a2b6543b1cddd09bf69d401dcdf1d154ab7","urls":["bzz-raw://bf3161edf37479825588e07039752b79792666455cc0beb1ca0e873b3be31ad4","dweb:/ipfs/QmYYpJeSsRgRx2oHcpvhqsNs7ZtDhVnxLmFpXz5eYcS8g4"],"license":"Apache-2.0"},"src/modules/Implementation.sol":{"keccak256":"0x16546d4be07865808890308750916b0a9a55e7a994a458c01edde4618f29b4e6","urls":["bzz-raw://1b1f9785b08c9f29d6849ba2d3dee89fa3ea5f3c2feec4a59a6d1040e3fbe040","dweb:/ipfs/QmU2Pm5C3Ztky7RQdCZggavyq7Eh1eS1HFqVz9jZKiMUML"],"license":"Apache-2.0"},"src/modules/Nonce.sol":{"keccak256":"0x56fbf6dc9b34ab60ae8a32ffb6f583c003bb8f4a5223ce704e982400fa403fab","urls":["bzz-raw://492f53628633b862702cf8f9b726067a722c94028133a8a4c4fcf3d0e73ad803","dweb:/ipfs/QmTHNy4XbH47YZaqKDpknb5aApjRH9HVAREHN7N5vEFWEV"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/Storage.sol":{"keccak256":"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f","urls":["bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da","dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn"],"license":"Apache-2.0"},"src/modules/auth/BaseAuth.sol":{"keccak256":"0xbf2e40def03fcb5f4a5129b2f5803e21951325b92e00126cbe1427b7c25cfefd","urls":["bzz-raw://b560905fcc4b957d27c2abed78a1e82529c89fa472e91b3d108fbfd91aa7c3f7","dweb:/ipfs/QmRjLLtTWE6dFX2kBQCgLz7ossfMxhAFgDC8Jx9XuGL6Wy"],"license":"Apache-2.0"},"src/modules/auth/BaseSig.sol":{"keccak256":"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa","urls":["bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8","dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3"],"license":"Apache-2.0"},"src/modules/auth/SelfAuth.sol":{"keccak256":"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c","urls":["bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42","dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W"],"license":"Apache-2.0"},"src/modules/auth/Stage2Auth.sol":{"keccak256":"0x5b23b530522ba1c02248d1f7470352c57fbc91c245c7c577044f93f6bb560a59","urls":["bzz-raw://c30b8e13edc7e18e4ea7bc7f4b8deaf16301a8f2bb23e7697e6f6b74882a39dc","dweb:/ipfs/QmW69XvfeJepuPBrHb1Vpkikg43P4juEGdRkUWt8GrrAfL"],"license":"Apache-2.0"},"src/modules/interfaces/IAccount.sol":{"keccak256":"0x64ca3bb59ec4fc0a60d80402802365e2d5226afe7e7aabe3b21df936c84f2bcb","urls":["bzz-raw://ccfd2381e1874cdec2f473a9a17799a3b57360c0593d68ee66fcea9c16eb39b4","dweb:/ipfs/QmcjbJpGz3Exmu4fsj953Y2bG8rtQaVMEFUgT6W2dUXomr"],"license":"MIT"},"src/modules/interfaces/IAuth.sol":{"keccak256":"0xf6fa30af2ec91d5fbeac17c9b1f2aa73b7883c9ac98745605007e57666394b91","urls":["bzz-raw://6e90a87978519462f9612f4a17e38fddc1c7bcf700ff834a1de7dce326f30353","dweb:/ipfs/QmXmWAsRRK6t4jPs4VcXrouyokxdALM28D3odX7ub48WEp"],"license":"Apache-2.0"},"src/modules/interfaces/ICheckpointer.sol":{"keccak256":"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513","urls":["bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1","dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t"],"license":"Apache-2.0"},"src/modules/interfaces/IDelegatedExtension.sol":{"keccak256":"0xa2ae897e90fd70dd4a9e172bc04d019ba9c512e72c2df65fcb6daf87dd5ceb90","urls":["bzz-raw://cdf4b7c3dfb0aef6c9dbe8b2a0542018dc756ef2252d7101bcb3186192da0a11","dweb:/ipfs/QmPHCVu1DJ7fBrPBYA5y3hoF3a3XFEBwYCZ1ErGaxPhcYL"],"license":"Apache-2.0"},"src/modules/interfaces/IERC1155Receiver.sol":{"keccak256":"0xa23d0bc29233a91085922ea8a7e2cbe8b5f3358d3f2c3cdc58adade9a171d9c1","urls":["bzz-raw://2f06b8f3ae7a45441cc26da5b2ddd15ba76d1664178958f63f536e6c5e4fd0fb","dweb:/ipfs/QmR1Rnk8ciSn5s5wNLGvpE1QNRDsBVDfDT1ZXhei2brmFj"],"license":"Apache-2.0"},"src/modules/interfaces/IERC1271.sol":{"keccak256":"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9","urls":["bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b","dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF"],"license":"Apache-2.0"},"src/modules/interfaces/IERC223Receiver.sol":{"keccak256":"0x426221c0d48b651ed692edfa5388d6e5304e94f48598a71748134b2659e3890d","urls":["bzz-raw://9e1ed2fd5e390b5b943dc07c2e0ea9e524eb37263dc72c482365c159fc3659e5","dweb:/ipfs/QmWRDBvb1cthVPm4BSzKX3J5GpGGSBuDokkpRK9x5aA7JR"],"license":"Apache-2.0"},"src/modules/interfaces/IERC721Receiver.sol":{"keccak256":"0xbe14c3b727f283a467dc2f2221d3322c5a69cd64a3aacad85acab05e94438f35","urls":["bzz-raw://43ef086c509b8b88cae78f67c4bd979fd427736972cfe56f7423371ccc154e63","dweb:/ipfs/Qmc7Yp7Z1dQ925gzEZYVNUXnWr3YomvWkXfaGYLZpoy8J3"],"license":"Apache-2.0"},"src/modules/interfaces/IERC777Receiver.sol":{"keccak256":"0xd9144d439a96b0c6439cd9a186701aa530f4f782ff09fdbf6c3ef16b78b0d4e5","urls":["bzz-raw://d1f17484eda7184db4a00106b4952f15c1517872cbfe19663d6fce4e042729b2","dweb:/ipfs/QmWdhYmLNkUpgvPpSyGHstxrFwMfhRTVmxDpe4frkUu1Qh"],"license":"Apache-2.0"},"src/modules/interfaces/IEntryPoint.sol":{"keccak256":"0xd19922ea7a8ae09072a721138dc93e175fa77ecaa3ac6f2d759d5e5e944fb665","urls":["bzz-raw://20ecea69ddd4d8787c0bdc4487dea03e90f63f4296674a12728e331a78e62620","dweb:/ipfs/QmZUrX8zEqfHZEJQjNtDUXGS47bj2UuRCLfbkLPrXsot1c"],"license":"MIT"},"src/modules/interfaces/IPartialAuth.sol":{"keccak256":"0x0d1aa021615d8e90696e71a9468331457a1babfa2ffe169654b7456e5bcb7a73","urls":["bzz-raw://bbacd149a6358ab0d4b9c588d2e3a55fc71ed4723269150d7b91ca70092f6519","dweb:/ipfs/QmUSwtrYCrRcRFsy5rCzdMPrw1FCU7ZoeXdsW6kK9yc8FK"],"license":"Apache-2.0"},"src/modules/interfaces/ISapient.sol":{"keccak256":"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359","urls":["bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489","dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"src/utils/LibOptim.sol":{"keccak256":"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde","urls":["bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81","dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x"],"license":"Apache-2.0"}},"version":1},"id":24} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/ExplicitSessionManager.sol/ExplicitSessionManager.json b/contracts/artifacts/wallet-contracts-v3/ExplicitSessionManager.sol/ExplicitSessionManager.json new file mode 100644 index 00000000..a6431fec --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/ExplicitSessionManager.sol/ExplicitSessionManager.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"VALUE_TRACKING_ADDRESS","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getLimitUsage","inputs":[{"name":"wallet","type":"address","internalType":"address"},{"name":"usageHash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"incrementUsageLimit","inputs":[{"name":"limits","type":"tuple[]","internalType":"struct UsageLimit[]","components":[{"name":"usageHash","type":"bytes32","internalType":"bytes32"},{"name":"usageAmount","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"validatePermission","inputs":[{"name":"permission","type":"tuple","internalType":"struct Permission","components":[{"name":"target","type":"address","internalType":"address"},{"name":"rules","type":"tuple[]","internalType":"struct ParameterRule[]","components":[{"name":"cumulative","type":"bool","internalType":"bool"},{"name":"operation","type":"uint8","internalType":"enum ParameterOperation"},{"name":"value","type":"bytes32","internalType":"bytes32"},{"name":"offset","type":"uint256","internalType":"uint256"},{"name":"mask","type":"bytes32","internalType":"bytes32"}]}]},{"name":"call","type":"tuple","internalType":"struct Payload.Call","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"wallet","type":"address","internalType":"address"},{"name":"signer","type":"address","internalType":"address"},{"name":"usageLimits","type":"tuple[]","internalType":"struct UsageLimit[]","components":[{"name":"usageHash","type":"bytes32","internalType":"bytes32"},{"name":"usageAmount","type":"uint256","internalType":"uint256"}]}],"outputs":[{"name":"","type":"bool","internalType":"bool"},{"name":"newUsageLimits","type":"tuple[]","internalType":"struct UsageLimit[]","components":[{"name":"usageHash","type":"bytes32","internalType":"bytes32"},{"name":"usageAmount","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"event","name":"LimitUsageUpdated","inputs":[{"name":"wallet","type":"address","indexed":false,"internalType":"address"},{"name":"usageHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"usageAmount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"InvalidLimitUsageIncrement","inputs":[]}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"VALUE_TRACKING_ADDRESS()":"f916f3b2","getLimitUsage(address,bytes32)":"23b3713e","incrementUsageLimit((bytes32,uint256)[])":"42de1418","validatePermission((address,(bool,uint8,bytes32,uint256,bytes32)[]),(address,uint256,bytes,uint256,bool,bool,uint256),address,address,(bytes32,uint256)[])":"313dade7"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidLimitUsageIncrement\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"wallet\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"usageHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"usageAmount\",\"type\":\"uint256\"}],\"name\":\"LimitUsageUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"VALUE_TRACKING_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"wallet\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"usageHash\",\"type\":\"bytes32\"}],\"name\":\"getLimitUsage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"usageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"usageAmount\",\"type\":\"uint256\"}],\"internalType\":\"struct UsageLimit[]\",\"name\":\"limits\",\"type\":\"tuple[]\"}],\"name\":\"incrementUsageLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"cumulative\",\"type\":\"bool\"},{\"internalType\":\"enum ParameterOperation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"offset\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"mask\",\"type\":\"bytes32\"}],\"internalType\":\"struct ParameterRule[]\",\"name\":\"rules\",\"type\":\"tuple[]\"}],\"internalType\":\"struct Permission\",\"name\":\"permission\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call\",\"name\":\"call\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"wallet\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"usageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"usageAmount\",\"type\":\"uint256\"}],\"internalType\":\"struct UsageLimit[]\",\"name\":\"usageLimits\",\"type\":\"tuple[]\"}],\"name\":\"validatePermission\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"usageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"usageAmount\",\"type\":\"uint256\"}],\"internalType\":\"struct UsageLimit[]\",\"name\":\"newUsageLimits\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getLimitUsage(address,bytes32)\":{\"params\":{\"usageHash\":\"The usage hash\",\"wallet\":\"The wallet address\"},\"returns\":{\"_0\":\"The usage amount\"}},\"incrementUsageLimit((bytes32,uint256)[])\":{\"params\":{\"limits\":\"Array of limit/session/target combinations\"}},\"validatePermission((address,(bool,uint8,bytes32,uint256,bytes32)[]),(address,uint256,bytes,uint256,bool,bool,uint256),address,address,(bytes32,uint256)[])\":{\"params\":{\"call\":\"The call to validate against\",\"permission\":\"The rules permission to validate\",\"signer\":\"The signer address\",\"usageLimits\":\"Array of current usage limits\",\"wallet\":\"The wallet address\"},\"returns\":{\"_0\":\"True if the permission is valid, false otherwise\",\"newUsageLimits\":\"New array of usage limits\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"InvalidLimitUsageIncrement()\":[{\"notice\":\"Invalid limit usage increment\"}]},\"events\":{\"LimitUsageUpdated(address,bytes32,uint256)\":{\"notice\":\"Emitted when the usage amount for a given wallet and usage hash is updated\"}},\"kind\":\"user\",\"methods\":{\"VALUE_TRACKING_ADDRESS()\":{\"notice\":\"Special address used for tracking native token value limits\"},\"getLimitUsage(address,bytes32)\":{\"notice\":\"Get the usage amount for a given usage hash and wallet\"},\"incrementUsageLimit((bytes32,uint256)[])\":{\"notice\":\"Increment usage for a caller's given session and target\"},\"validatePermission((address,(bool,uint8,bytes32,uint256,bytes32)[]),(address,uint256,bytes,uint256,bool,bool,uint256),address,address,(bytes32,uint256)[])\":{\"notice\":\"Validates a rules permission\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/extensions/sessions/explicit/ExplicitSessionManager.sol\":\"ExplicitSessionManager\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/extensions/sessions/SessionErrors.sol\":{\"keccak256\":\"0xa7642b4ef1d2ac8e41bd6dca88c5a644cac21b3ebe79deb5013e21fb4aaab405\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ef80768f6c509a54ea5d3fb92cbf46363f945f071cc3664710770c09b3d2a978\",\"dweb:/ipfs/QmbRpicAiPSYQbKpjoDbanap9q5hYsqEMS1u7w7sqKEYTY\"]},\"src/extensions/sessions/explicit/ExplicitSessionManager.sol\":{\"keccak256\":\"0x08405cc3def78d4172267a2e607e303b5f222d8cb85ba009deab58e0110088b0\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e2e073fdb5794f59ee6d7eb5e04074b1452e5d0824e4117259835071199f3d32\",\"dweb:/ipfs/Qmbi56yfELF88ezZ2tczegLmeB6Gb3HxDX11bzx3rpDgJZ\"]},\"src/extensions/sessions/explicit/IExplicitSessionManager.sol\":{\"keccak256\":\"0xae940e96cf0677c9b0df0daee07db0293c55a21cec0b893d82eefd122815602b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://62ee98f92121ad54f78d375ec3003aab73719adec852b0d12518fe99fc6f66c6\",\"dweb:/ipfs/QmPuAX7tdga5Su1xua6LS6jR9DsV7GyCwyZLeRC8upPTKY\"]},\"src/extensions/sessions/explicit/Permission.sol\":{\"keccak256\":\"0x0bc35a04da3830c64ec13c32b57f88be6b980228f6b387e800cf70919cdcfb16\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://fcb304612f894699f8e1e40cf134abebe8f7135795bea479b04e967551c59948\",\"dweb:/ipfs/Qme4mD8dh3xU9wbscQwvL4cQcZ2Wv8Fobo2fmU29B3DirV\"]},\"src/extensions/sessions/explicit/PermissionValidator.sol\":{\"keccak256\":\"0xe970e1ce931ef3779e3ddc9525b40820b7f63746828a440306ff9c984da42234\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://9154a986b7a5565119b2c0993dd9bc9e6e9b3e07eede034c8fde1c9f39a56a30\",\"dweb:/ipfs/QmXbgsr6kYYK5gmge6sosgwbHnFnQW5ntCZCyeNTQqTndD\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[],"type":"error","name":"InvalidLimitUsageIncrement"},{"inputs":[{"internalType":"address","name":"wallet","type":"address","indexed":false},{"internalType":"bytes32","name":"usageHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"usageAmount","type":"uint256","indexed":false}],"type":"event","name":"LimitUsageUpdated","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"VALUE_TRACKING_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bytes32","name":"usageHash","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getLimitUsage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"struct UsageLimit[]","name":"limits","type":"tuple[]","components":[{"internalType":"bytes32","name":"usageHash","type":"bytes32"},{"internalType":"uint256","name":"usageAmount","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"incrementUsageLimit"},{"inputs":[{"internalType":"struct Permission","name":"permission","type":"tuple","components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"struct ParameterRule[]","name":"rules","type":"tuple[]","components":[{"internalType":"bool","name":"cumulative","type":"bool"},{"internalType":"enum ParameterOperation","name":"operation","type":"uint8"},{"internalType":"bytes32","name":"value","type":"bytes32"},{"internalType":"uint256","name":"offset","type":"uint256"},{"internalType":"bytes32","name":"mask","type":"bytes32"}]}]},{"internalType":"struct Payload.Call","name":"call","type":"tuple","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"address","name":"wallet","type":"address"},{"internalType":"address","name":"signer","type":"address"},{"internalType":"struct UsageLimit[]","name":"usageLimits","type":"tuple[]","components":[{"internalType":"bytes32","name":"usageHash","type":"bytes32"},{"internalType":"uint256","name":"usageAmount","type":"uint256"}]}],"stateMutability":"view","type":"function","name":"validatePermission","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"struct UsageLimit[]","name":"newUsageLimits","type":"tuple[]","components":[{"internalType":"bytes32","name":"usageHash","type":"bytes32"},{"internalType":"uint256","name":"usageAmount","type":"uint256"}]}]}],"devdoc":{"kind":"dev","methods":{"getLimitUsage(address,bytes32)":{"params":{"usageHash":"The usage hash","wallet":"The wallet address"},"returns":{"_0":"The usage amount"}},"incrementUsageLimit((bytes32,uint256)[])":{"params":{"limits":"Array of limit/session/target combinations"}},"validatePermission((address,(bool,uint8,bytes32,uint256,bytes32)[]),(address,uint256,bytes,uint256,bool,bool,uint256),address,address,(bytes32,uint256)[])":{"params":{"call":"The call to validate against","permission":"The rules permission to validate","signer":"The signer address","usageLimits":"Array of current usage limits","wallet":"The wallet address"},"returns":{"_0":"True if the permission is valid, false otherwise","newUsageLimits":"New array of usage limits"}}},"version":1},"userdoc":{"kind":"user","methods":{"VALUE_TRACKING_ADDRESS()":{"notice":"Special address used for tracking native token value limits"},"getLimitUsage(address,bytes32)":{"notice":"Get the usage amount for a given usage hash and wallet"},"incrementUsageLimit((bytes32,uint256)[])":{"notice":"Increment usage for a caller's given session and target"},"validatePermission((address,(bool,uint8,bytes32,uint256,bytes32)[]),(address,uint256,bytes,uint256,bool,bool,uint256),address,address,(bytes32,uint256)[])":{"notice":"Validates a rules permission"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/extensions/sessions/explicit/ExplicitSessionManager.sol":"ExplicitSessionManager"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/extensions/sessions/SessionErrors.sol":{"keccak256":"0xa7642b4ef1d2ac8e41bd6dca88c5a644cac21b3ebe79deb5013e21fb4aaab405","urls":["bzz-raw://ef80768f6c509a54ea5d3fb92cbf46363f945f071cc3664710770c09b3d2a978","dweb:/ipfs/QmbRpicAiPSYQbKpjoDbanap9q5hYsqEMS1u7w7sqKEYTY"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/ExplicitSessionManager.sol":{"keccak256":"0x08405cc3def78d4172267a2e607e303b5f222d8cb85ba009deab58e0110088b0","urls":["bzz-raw://e2e073fdb5794f59ee6d7eb5e04074b1452e5d0824e4117259835071199f3d32","dweb:/ipfs/Qmbi56yfELF88ezZ2tczegLmeB6Gb3HxDX11bzx3rpDgJZ"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/IExplicitSessionManager.sol":{"keccak256":"0xae940e96cf0677c9b0df0daee07db0293c55a21cec0b893d82eefd122815602b","urls":["bzz-raw://62ee98f92121ad54f78d375ec3003aab73719adec852b0d12518fe99fc6f66c6","dweb:/ipfs/QmPuAX7tdga5Su1xua6LS6jR9DsV7GyCwyZLeRC8upPTKY"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/Permission.sol":{"keccak256":"0x0bc35a04da3830c64ec13c32b57f88be6b980228f6b387e800cf70919cdcfb16","urls":["bzz-raw://fcb304612f894699f8e1e40cf134abebe8f7135795bea479b04e967551c59948","dweb:/ipfs/Qme4mD8dh3xU9wbscQwvL4cQcZ2Wv8Fobo2fmU29B3DirV"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/PermissionValidator.sol":{"keccak256":"0xe970e1ce931ef3779e3ddc9525b40820b7f63746828a440306ff9c984da42234","urls":["bzz-raw://9154a986b7a5565119b2c0993dd9bc9e6e9b3e07eede034c8fde1c9f39a56a30","dweb:/ipfs/QmXbgsr6kYYK5gmge6sosgwbHnFnQW5ntCZCyeNTQqTndD"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"}},"version":1},"id":36} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/ExplicitSessionManager.t.sol/ExplicitSessionManagerHarness.json b/contracts/artifacts/wallet-contracts-v3/ExplicitSessionManager.t.sol/ExplicitSessionManagerHarness.json new file mode 100644 index 00000000..cb770eac --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/ExplicitSessionManager.t.sol/ExplicitSessionManagerHarness.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"VALUE_TRACKING_ADDRESS","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getLimitUsage","inputs":[{"name":"wallet","type":"address","internalType":"address"},{"name":"usageHash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"incrementUsageLimit","inputs":[{"name":"limits","type":"tuple[]","internalType":"struct UsageLimit[]","components":[{"name":"usageHash","type":"bytes32","internalType":"bytes32"},{"name":"usageAmount","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"validateExplicitCall","inputs":[{"name":"payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"callIdx","type":"uint256","internalType":"uint256"},{"name":"wallet","type":"address","internalType":"address"},{"name":"sessionWallet","type":"address","internalType":"address"},{"name":"allSessionPermissions","type":"tuple[]","internalType":"struct SessionPermissions[]","components":[{"name":"signer","type":"address","internalType":"address"},{"name":"chainId","type":"uint256","internalType":"uint256"},{"name":"valueLimit","type":"uint256","internalType":"uint256"},{"name":"deadline","type":"uint64","internalType":"uint64"},{"name":"permissions","type":"tuple[]","internalType":"struct Permission[]","components":[{"name":"target","type":"address","internalType":"address"},{"name":"rules","type":"tuple[]","internalType":"struct ParameterRule[]","components":[{"name":"cumulative","type":"bool","internalType":"bool"},{"name":"operation","type":"uint8","internalType":"enum ParameterOperation"},{"name":"value","type":"bytes32","internalType":"bytes32"},{"name":"offset","type":"uint256","internalType":"uint256"},{"name":"mask","type":"bytes32","internalType":"bytes32"}]}]}]},{"name":"permissionIdx","type":"uint8","internalType":"uint8"},{"name":"sessionUsageLimits","type":"tuple","internalType":"struct SessionUsageLimits","components":[{"name":"signer","type":"address","internalType":"address"},{"name":"limits","type":"tuple[]","internalType":"struct UsageLimit[]","components":[{"name":"usageHash","type":"bytes32","internalType":"bytes32"},{"name":"usageAmount","type":"uint256","internalType":"uint256"}]},{"name":"totalValueUsed","type":"uint256","internalType":"uint256"}]}],"outputs":[{"name":"","type":"tuple","internalType":"struct SessionUsageLimits","components":[{"name":"signer","type":"address","internalType":"address"},{"name":"limits","type":"tuple[]","internalType":"struct UsageLimit[]","components":[{"name":"usageHash","type":"bytes32","internalType":"bytes32"},{"name":"usageAmount","type":"uint256","internalType":"uint256"}]},{"name":"totalValueUsed","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"validateLimitUsageIncrement","inputs":[{"name":"call","type":"tuple","internalType":"struct Payload.Call","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"sessionUsageLimits","type":"tuple[]","internalType":"struct SessionUsageLimits[]","components":[{"name":"signer","type":"address","internalType":"address"},{"name":"limits","type":"tuple[]","internalType":"struct UsageLimit[]","components":[{"name":"usageHash","type":"bytes32","internalType":"bytes32"},{"name":"usageAmount","type":"uint256","internalType":"uint256"}]},{"name":"totalValueUsed","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"validatePermission","inputs":[{"name":"permission","type":"tuple","internalType":"struct Permission","components":[{"name":"target","type":"address","internalType":"address"},{"name":"rules","type":"tuple[]","internalType":"struct ParameterRule[]","components":[{"name":"cumulative","type":"bool","internalType":"bool"},{"name":"operation","type":"uint8","internalType":"enum ParameterOperation"},{"name":"value","type":"bytes32","internalType":"bytes32"},{"name":"offset","type":"uint256","internalType":"uint256"},{"name":"mask","type":"bytes32","internalType":"bytes32"}]}]},{"name":"call","type":"tuple","internalType":"struct Payload.Call","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"wallet","type":"address","internalType":"address"},{"name":"signer","type":"address","internalType":"address"},{"name":"usageLimits","type":"tuple[]","internalType":"struct UsageLimit[]","components":[{"name":"usageHash","type":"bytes32","internalType":"bytes32"},{"name":"usageAmount","type":"uint256","internalType":"uint256"}]}],"outputs":[{"name":"","type":"bool","internalType":"bool"},{"name":"newUsageLimits","type":"tuple[]","internalType":"struct UsageLimit[]","components":[{"name":"usageHash","type":"bytes32","internalType":"bytes32"},{"name":"usageAmount","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"event","name":"LimitUsageUpdated","inputs":[{"name":"wallet","type":"address","indexed":false,"internalType":"address"},{"name":"usageHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"usageAmount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"InvalidChainId","inputs":[{"name":"invalidChainId","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidDelegateCall","inputs":[]},{"type":"error","name":"InvalidLimitUsageIncrement","inputs":[]},{"type":"error","name":"InvalidPermission","inputs":[]},{"type":"error","name":"InvalidSelfCall","inputs":[]},{"type":"error","name":"InvalidSessionSigner","inputs":[{"name":"invalidSigner","type":"address","internalType":"address"}]},{"type":"error","name":"InvalidValue","inputs":[]},{"type":"error","name":"MissingPermission","inputs":[]},{"type":"error","name":"SessionExpired","inputs":[{"name":"deadline","type":"uint256","internalType":"uint256"}]}],"bytecode":{"object":"0x60808060405234601557611955908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c806323b3713e14610077578063313dade71461007257806342de14181461006d57806375a5627b14610068578063bbfa0b65146100635763f916f3b21461005e57600080fd5b6109ab565b6108c2565b6105af565b6104d8565b610411565b346100ef5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef576004356100b2816100f4565b73ffffffffffffffffffffffffffffffffffffffff6024359116600052600060205260406000209060005260205260406000205460805260206080f35b600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116036100ef57565b6044359061011f826100f4565b565b6064359061011f826100f4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff82111761017957604052565b61012e565b60a0810190811067ffffffffffffffff82111761017957604052565b6060810190811067ffffffffffffffff82111761017957604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761017957604052565b6040519061011f6040836101b6565b67ffffffffffffffff81116101795760051b60200190565b801515036100ef57565b91906040838203126100ef576040516102408161015d565b8093803561024d816100f4565b825260208101359067ffffffffffffffff82116100ef570182601f820112156100ef5780359061027c82610206565b9361028a60405195866101b6565b828552602060a08187019402830101918183116100ef57602001925b8284106102b7575050505060200152565b60a0848303126100ef57604051906102ce8261017e565b84356102d98161021e565b825260208501359060048210156100ef57826020928360a09501526040870135604082015260608701356060820152608087013560808201528152019301926102a6565b908160e09103126100ef5790565b81601f820112156100ef5780359061034282610206565b9261035060405194856101b6565b82845260208085019360061b830101918183116100ef57602001925b82841061037a575050505090565b6040848303126100ef57602060409182516103948161015d565b86358152828701358382015281520193019261036c565b906020808351928381520192019060005b8181106103c95750505090565b90919260206103eb600192865190602060409280518352015160208201520190565b94019291016103bc565b60409061040e93921515815281602082015201906103ab565b90565b346100ef5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef5760043567ffffffffffffffff81116100ef57610460903690600401610228565b60243567ffffffffffffffff81116100ef5761048090369060040161031d565b9060443561048d816100f4565b6064359061049a826100f4565b6084359367ffffffffffffffff85116100ef576104be6104c495369060040161032b565b93610c6d565b906104d4604051928392836103f5565b0390f35b346100ef5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef5760043567ffffffffffffffff81116100ef57366023820112156100ef57806004013567ffffffffffffffff81116100ef573660248260061b840101116100ef5760246105539201610ffb565b005b9190916060818403126100ef576040519061056f8261019a565b8193813561057c816100f4565b835260208201359167ffffffffffffffff83116100ef576105a3604093928493830161032b565b60208501520135910152565b346100ef5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef5760043567ffffffffffffffff81116100ef576105fe90369060040161031d565b60243567ffffffffffffffff81116100ef57366023820112156100ef5780600401359161062a83610206565b9161063860405193846101b6565b8383526024602084019460051b820101903682116100ef5760248101945b8286106106675761055385856111c2565b853567ffffffffffffffff81116100ef5760209161068c839260243691870101610555565b815201950194610656565b9080601f830112156100ef5781356106ae81610206565b926106bc60405194856101b6565b81845260208085019260051b820101918383116100ef5760208201905b8382106106e857505050505090565b813567ffffffffffffffff81116100ef5760209161070b87848094880101610228565b8152019101906106d9565b9080601f830112156100ef5781359161072e83610206565b9261073c60405194856101b6565b80845260208085019160051b830101918383116100ef5760208101915b83831061076857505050505090565b823567ffffffffffffffff81116100ef5782019060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe083880301126100ef57604051906107b58261017e565b60208301356107c3816100f4565b82526040830135602083015260608301356040830152608083013567ffffffffffffffff811681036100ef57606083015260a08301359167ffffffffffffffff83116100ef5761081b88602080969581960101610697565b6080820152815201920191610759565b60a4359060ff821682036100ef57565b60208152608081019173ffffffffffffffffffffffffffffffffffffffff8151166020830152602081015192606060408401528351809152602060a0840194019060005b818110610896575050506040606091015191015290565b90919460206108b8600192885190602060409280518352015160208201520190565b960192910161087f565b346100ef5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef5760043567ffffffffffffffff81116100ef576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126100ef576024359061093c610112565b90610945610121565b60843567ffffffffffffffff81116100ef57610965903690600401610716565b61096d61082b565b9160c4359467ffffffffffffffff86116100ef576104d49661099661099f973690600401610555565b95600401611107565b6040519182918261083b565b346100ef5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef57602060405173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8152f35b3561040e816100f4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9060018201809211610a3f57565b610a02565b91908201809211610a3f57565b60405190610a5e8261015d565b60006020838281520152565b90610a7482610206565b610a8160405191826101b6565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610aaf8294610206565b019060005b828110610ac057505050565b602090610acb610a51565b82828501015201610ab4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8051821015610b1a5760209160051b010190565b610ad7565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156100ef570180359067ffffffffffffffff82116100ef576020019181360383136100ef57565b60041115610b7a57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9392919073ffffffffffffffffffffffffffffffffffffffff16845260606020850152602060a085019173ffffffffffffffffffffffffffffffffffffffff81511660608701520151604060808601528051809252602060c0860191019160005b818110610c1c57505060409150930152565b909183518051151582526020810151906004821015610b7a5782608060a092602094856001970152604081015160408401526060810151606084015201516080820152019401910192919092610c0a565b949091929394610c91815173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff610ccb610cb2866109f8565b73ffffffffffffffffffffffffffffffffffffffff1690565b911603610fe057855192610cee610ce9602084019586515190610a44565b610a6a565b9460005b8851811015610d255780610d086001928b610b06565b51610d13828a610b06565b52610d1e8189610b06565b5001610cf2565b50909294919395875160005b88518051821015610fcf5781610d4691610b06565b51610d6a610d576040890189610b1f565b5060608301519081013591602090910190565b5060808201511690610d7c8151151590565b610e4f575b602081018051610d9081610b70565b610d9981610b70565b610dbf57506040015103610db1576001905b01610d31565b506000989750505050505050565b60038151610dcc81610b70565b610dd581610b70565b03610dec57506040015110610db157600190610dab565b60018151610df981610b70565b610e0281610b70565b03610e1957506040015114610db157600190610dab565b60029051610e2681610b70565b610e2f81610b70565b14610e3f575b5050600190610dab565b6040015111610db1573880610e35565b9691989795929093998a610e72610e9e8c6040519283918c602084019687610ba9565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826101b6565b51902096600093610ead610a51565b9c60005b8751811015610fb757610ec48189610b06565b515115610f6a578a610ed6828a610b06565b515114610ee557600101610eb1565b6020949e50879a9198939c9d9650610f0390610f18939c9698610b06565b519284840151915b8215610f23575b50610a44565b918291015290610d81565b610f62919250610f538b73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b90600052602052604060002090565b549038610f12565b6020949e50610f18929b955097610fb189899c99959e9f98939a610fab90610f906101f7565b978c895260008a8a015288610fa58383610b06565b52610b06565b50610a31565b97610f0b565b5096946020939d929b9c95610f18929b95979a610f0b565b505083525060019650909450505050565b509250505060009190565b9190811015610b1a5760061b0190565b33919060005b82811061100e5750505050565b602061101b828585610feb565b0135611028828585610feb565b35336000526000602052604060002090600052602052604060002054116110be57807f42063b8d32ac0a88f94053143bb30a789b3d5dfabb27d6c8a54e23d4fef30851606061107a6001948787610feb565b356020611088858989610feb565b0135886000526000602052604060002082600052602052806040600020556040519189835260208301526040820152a101611001565b7e2a700a0000000000000000000000000000000000000000000000000000000060005260046000fd5b604051906110f48261019a565b6000604083828152606060208201520152565b9061040e9695949392916111196110e7565b50611562565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610a3f5760010190565b90602061040e9281815201906103ab565b92919267ffffffffffffffff821161017957604051916111a560207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601846101b6565b8294818452818301116100ef578281602093846000960137010152565b9080516111cd575050565b6111d6826109f8565b73ffffffffffffffffffffffffffffffffffffffff163014801590611413575b6110be57600092835b8251851015611254576112229060206112188786610b06565b5101515190610a44565b93604061122f8285610b06565b510151611240575b600101936111ff565b9361124c60019161111f565b949050611237565b61126091939450610a6a565b60009081935b83518510156113a85760005b602061127e8787610b06565b510151518110156112cb57806112c46112a7600193602061129f8b8b610b06565b510151610b06565b51956112b28161111f565b966112bd8288610b06565b5285610b06565b5001611272565b50949360019060406112dd8287610b06565b5101516112ed575b019394611266565b6113a26113186112fd8388610b06565b515173ffffffffffffffffffffffffffffffffffffffff1690565b60405161136481610e72602082019485602073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee9193929373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b5190209460406113748489610b06565b51015161137f6101f7565b96875260208701526113908161111f565b9561139b8287610b06565b5284610b06565b506112e5565b94935061140592506113fe91506040516113f081610e7260208201947f42de14180000000000000000000000000000000000000000000000000000000086526024830161114c565b519020926040810190610b1f565b369161115d565b60208151910120036110be57565b50600160c083013514156111f6565b6040519061142f8261017e565b60606080836000815260006020820152600060408201526000838201520152565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156100ef570180359067ffffffffffffffff82116100ef57602001918160051b360383136100ef57565b9190811015610b1a5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21813603018212156100ef570190565b3561040e8161021e565b906004116100ef5790600490565b919091357fffffffff0000000000000000000000000000000000000000000000000000000081169260048110611530575050565b7fffffffff00000000000000000000000000000000000000000000000000000000929350829060040360031b1b161690565b939594909291926115716110e7565b5061157a611422565b9660005b8151811015611911576115946112fd8284610b06565b73ffffffffffffffffffffffffffffffffffffffff8087169116146115bb5760010161157e565b906115cc9293949596979850610b06565b51945b73ffffffffffffffffffffffffffffffffffffffff611602875173ffffffffffffffffffffffffffffffffffffffff1690565b16156118cd576020860151801515806118c3575b6118965750606086015167ffffffffffffffff1680151580611883575b61184c57509061164a826040611650940190611450565b906114a4565b9161165d608084016114e4565b6118225761166a836109f8565b73ffffffffffffffffffffffffffffffffffffffff163014611770576080850160ff815151931692831015611746576116b7926116a79151610b06565b5190602087019484865193610c6d565b901561171c5760209252013580611705575b50604080830151910151106116db5790565b7faa7feadc0000000000000000000000000000000000000000000000000000000060005260046000fd5b61171460408401918251610a44565b9052386116c9565b7f868a64de0000000000000000000000000000000000000000000000000000000060005260046000fd5b7f3f904dc00000000000000000000000000000000000000000000000000000000060005260046000fd5b5050915050602061179661179061178a6040850185610b1f565b906114ee565b906114fc565b91013515908115916117d5575b506117ab5790565b7f540733ea0000000000000000000000000000000000000000000000000000000060005260046000fd5b7f42de14180000000000000000000000000000000000000000000000000000000091507fffffffff00000000000000000000000000000000000000000000000000000000161415386117a3565b7faa25f2ad0000000000000000000000000000000000000000000000000000000060005260046000fd5b7fb1bbfdd50000000000000000000000000000000000000000000000000000000060005267ffffffffffffffff1660045260246000fd5b5067ffffffffffffffff81164211611633565b7f331003b30000000000000000000000000000000000000000000000000000000060005260045260246000fd5b5046811415611616565b7fc1e84ed60000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff841660045260246000fd5b5050909192939594956115cf56fea26469706673582212201dc8207dc5c95b04a2aa9930defb11873e5847a457c45044785f4da312d07e8564736f6c634300081c0033","sourceMap":"28423:888:83:-:0;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436101561001257600080fd5b60003560e01c806323b3713e14610077578063313dade71461007257806342de14181461006d57806375a5627b14610068578063bbfa0b65146100635763f916f3b21461005e57600080fd5b6109ab565b6108c2565b6105af565b6104d8565b610411565b346100ef5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef576004356100b2816100f4565b73ffffffffffffffffffffffffffffffffffffffff6024359116600052600060205260406000209060005260205260406000205460805260206080f35b600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116036100ef57565b6044359061011f826100f4565b565b6064359061011f826100f4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff82111761017957604052565b61012e565b60a0810190811067ffffffffffffffff82111761017957604052565b6060810190811067ffffffffffffffff82111761017957604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761017957604052565b6040519061011f6040836101b6565b67ffffffffffffffff81116101795760051b60200190565b801515036100ef57565b91906040838203126100ef576040516102408161015d565b8093803561024d816100f4565b825260208101359067ffffffffffffffff82116100ef570182601f820112156100ef5780359061027c82610206565b9361028a60405195866101b6565b828552602060a08187019402830101918183116100ef57602001925b8284106102b7575050505060200152565b60a0848303126100ef57604051906102ce8261017e565b84356102d98161021e565b825260208501359060048210156100ef57826020928360a09501526040870135604082015260608701356060820152608087013560808201528152019301926102a6565b908160e09103126100ef5790565b81601f820112156100ef5780359061034282610206565b9261035060405194856101b6565b82845260208085019360061b830101918183116100ef57602001925b82841061037a575050505090565b6040848303126100ef57602060409182516103948161015d565b86358152828701358382015281520193019261036c565b906020808351928381520192019060005b8181106103c95750505090565b90919260206103eb600192865190602060409280518352015160208201520190565b94019291016103bc565b60409061040e93921515815281602082015201906103ab565b90565b346100ef5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef5760043567ffffffffffffffff81116100ef57610460903690600401610228565b60243567ffffffffffffffff81116100ef5761048090369060040161031d565b9060443561048d816100f4565b6064359061049a826100f4565b6084359367ffffffffffffffff85116100ef576104be6104c495369060040161032b565b93610c6d565b906104d4604051928392836103f5565b0390f35b346100ef5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef5760043567ffffffffffffffff81116100ef57366023820112156100ef57806004013567ffffffffffffffff81116100ef573660248260061b840101116100ef5760246105539201610ffb565b005b9190916060818403126100ef576040519061056f8261019a565b8193813561057c816100f4565b835260208201359167ffffffffffffffff83116100ef576105a3604093928493830161032b565b60208501520135910152565b346100ef5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef5760043567ffffffffffffffff81116100ef576105fe90369060040161031d565b60243567ffffffffffffffff81116100ef57366023820112156100ef5780600401359161062a83610206565b9161063860405193846101b6565b8383526024602084019460051b820101903682116100ef5760248101945b8286106106675761055385856111c2565b853567ffffffffffffffff81116100ef5760209161068c839260243691870101610555565b815201950194610656565b9080601f830112156100ef5781356106ae81610206565b926106bc60405194856101b6565b81845260208085019260051b820101918383116100ef5760208201905b8382106106e857505050505090565b813567ffffffffffffffff81116100ef5760209161070b87848094880101610228565b8152019101906106d9565b9080601f830112156100ef5781359161072e83610206565b9261073c60405194856101b6565b80845260208085019160051b830101918383116100ef5760208101915b83831061076857505050505090565b823567ffffffffffffffff81116100ef5782019060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe083880301126100ef57604051906107b58261017e565b60208301356107c3816100f4565b82526040830135602083015260608301356040830152608083013567ffffffffffffffff811681036100ef57606083015260a08301359167ffffffffffffffff83116100ef5761081b88602080969581960101610697565b6080820152815201920191610759565b60a4359060ff821682036100ef57565b60208152608081019173ffffffffffffffffffffffffffffffffffffffff8151166020830152602081015192606060408401528351809152602060a0840194019060005b818110610896575050506040606091015191015290565b90919460206108b8600192885190602060409280518352015160208201520190565b960192910161087f565b346100ef5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef5760043567ffffffffffffffff81116100ef576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126100ef576024359061093c610112565b90610945610121565b60843567ffffffffffffffff81116100ef57610965903690600401610716565b61096d61082b565b9160c4359467ffffffffffffffff86116100ef576104d49661099661099f973690600401610555565b95600401611107565b6040519182918261083b565b346100ef5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef57602060405173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8152f35b3561040e816100f4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9060018201809211610a3f57565b610a02565b91908201809211610a3f57565b60405190610a5e8261015d565b60006020838281520152565b90610a7482610206565b610a8160405191826101b6565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610aaf8294610206565b019060005b828110610ac057505050565b602090610acb610a51565b82828501015201610ab4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8051821015610b1a5760209160051b010190565b610ad7565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156100ef570180359067ffffffffffffffff82116100ef576020019181360383136100ef57565b60041115610b7a57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9392919073ffffffffffffffffffffffffffffffffffffffff16845260606020850152602060a085019173ffffffffffffffffffffffffffffffffffffffff81511660608701520151604060808601528051809252602060c0860191019160005b818110610c1c57505060409150930152565b909183518051151582526020810151906004821015610b7a5782608060a092602094856001970152604081015160408401526060810151606084015201516080820152019401910192919092610c0a565b949091929394610c91815173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff610ccb610cb2866109f8565b73ffffffffffffffffffffffffffffffffffffffff1690565b911603610fe057855192610cee610ce9602084019586515190610a44565b610a6a565b9460005b8851811015610d255780610d086001928b610b06565b51610d13828a610b06565b52610d1e8189610b06565b5001610cf2565b50909294919395875160005b88518051821015610fcf5781610d4691610b06565b51610d6a610d576040890189610b1f565b5060608301519081013591602090910190565b5060808201511690610d7c8151151590565b610e4f575b602081018051610d9081610b70565b610d9981610b70565b610dbf57506040015103610db1576001905b01610d31565b506000989750505050505050565b60038151610dcc81610b70565b610dd581610b70565b03610dec57506040015110610db157600190610dab565b60018151610df981610b70565b610e0281610b70565b03610e1957506040015114610db157600190610dab565b60029051610e2681610b70565b610e2f81610b70565b14610e3f575b5050600190610dab565b6040015111610db1573880610e35565b9691989795929093998a610e72610e9e8c6040519283918c602084019687610ba9565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826101b6565b51902096600093610ead610a51565b9c60005b8751811015610fb757610ec48189610b06565b515115610f6a578a610ed6828a610b06565b515114610ee557600101610eb1565b6020949e50879a9198939c9d9650610f0390610f18939c9698610b06565b519284840151915b8215610f23575b50610a44565b918291015290610d81565b610f62919250610f538b73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b90600052602052604060002090565b549038610f12565b6020949e50610f18929b955097610fb189899c99959e9f98939a610fab90610f906101f7565b978c895260008a8a015288610fa58383610b06565b52610b06565b50610a31565b97610f0b565b5096946020939d929b9c95610f18929b95979a610f0b565b505083525060019650909450505050565b509250505060009190565b9190811015610b1a5760061b0190565b33919060005b82811061100e5750505050565b602061101b828585610feb565b0135611028828585610feb565b35336000526000602052604060002090600052602052604060002054116110be57807f42063b8d32ac0a88f94053143bb30a789b3d5dfabb27d6c8a54e23d4fef30851606061107a6001948787610feb565b356020611088858989610feb565b0135886000526000602052604060002082600052602052806040600020556040519189835260208301526040820152a101611001565b7e2a700a0000000000000000000000000000000000000000000000000000000060005260046000fd5b604051906110f48261019a565b6000604083828152606060208201520152565b9061040e9695949392916111196110e7565b50611562565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610a3f5760010190565b90602061040e9281815201906103ab565b92919267ffffffffffffffff821161017957604051916111a560207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601846101b6565b8294818452818301116100ef578281602093846000960137010152565b9080516111cd575050565b6111d6826109f8565b73ffffffffffffffffffffffffffffffffffffffff163014801590611413575b6110be57600092835b8251851015611254576112229060206112188786610b06565b5101515190610a44565b93604061122f8285610b06565b510151611240575b600101936111ff565b9361124c60019161111f565b949050611237565b61126091939450610a6a565b60009081935b83518510156113a85760005b602061127e8787610b06565b510151518110156112cb57806112c46112a7600193602061129f8b8b610b06565b510151610b06565b51956112b28161111f565b966112bd8288610b06565b5285610b06565b5001611272565b50949360019060406112dd8287610b06565b5101516112ed575b019394611266565b6113a26113186112fd8388610b06565b515173ffffffffffffffffffffffffffffffffffffffff1690565b60405161136481610e72602082019485602073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee9193929373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b5190209460406113748489610b06565b51015161137f6101f7565b96875260208701526113908161111f565b9561139b8287610b06565b5284610b06565b506112e5565b94935061140592506113fe91506040516113f081610e7260208201947f42de14180000000000000000000000000000000000000000000000000000000086526024830161114c565b519020926040810190610b1f565b369161115d565b60208151910120036110be57565b50600160c083013514156111f6565b6040519061142f8261017e565b60606080836000815260006020820152600060408201526000838201520152565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156100ef570180359067ffffffffffffffff82116100ef57602001918160051b360383136100ef57565b9190811015610b1a5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21813603018212156100ef570190565b3561040e8161021e565b906004116100ef5790600490565b919091357fffffffff0000000000000000000000000000000000000000000000000000000081169260048110611530575050565b7fffffffff00000000000000000000000000000000000000000000000000000000929350829060040360031b1b161690565b939594909291926115716110e7565b5061157a611422565b9660005b8151811015611911576115946112fd8284610b06565b73ffffffffffffffffffffffffffffffffffffffff8087169116146115bb5760010161157e565b906115cc9293949596979850610b06565b51945b73ffffffffffffffffffffffffffffffffffffffff611602875173ffffffffffffffffffffffffffffffffffffffff1690565b16156118cd576020860151801515806118c3575b6118965750606086015167ffffffffffffffff1680151580611883575b61184c57509061164a826040611650940190611450565b906114a4565b9161165d608084016114e4565b6118225761166a836109f8565b73ffffffffffffffffffffffffffffffffffffffff163014611770576080850160ff815151931692831015611746576116b7926116a79151610b06565b5190602087019484865193610c6d565b901561171c5760209252013580611705575b50604080830151910151106116db5790565b7faa7feadc0000000000000000000000000000000000000000000000000000000060005260046000fd5b61171460408401918251610a44565b9052386116c9565b7f868a64de0000000000000000000000000000000000000000000000000000000060005260046000fd5b7f3f904dc00000000000000000000000000000000000000000000000000000000060005260046000fd5b5050915050602061179661179061178a6040850185610b1f565b906114ee565b906114fc565b91013515908115916117d5575b506117ab5790565b7f540733ea0000000000000000000000000000000000000000000000000000000060005260046000fd5b7f42de14180000000000000000000000000000000000000000000000000000000091507fffffffff00000000000000000000000000000000000000000000000000000000161415386117a3565b7faa25f2ad0000000000000000000000000000000000000000000000000000000060005260046000fd5b7fb1bbfdd50000000000000000000000000000000000000000000000000000000060005267ffffffffffffffff1660045260246000fd5b5067ffffffffffffffff81164211611633565b7f331003b30000000000000000000000000000000000000000000000000000000060005260045260246000fd5b5046811415611616565b7fc1e84ed60000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff841660045260246000fd5b5050909192939594956115cf56fea26469706673582212201dc8207dc5c95b04a2aa9930defb11873e5847a457c45044785f4da312d07e8564736f6c634300081c0033","sourceMap":"28423:888:83:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;2725:9:39;28423:888:83;;;2725:9:39;28423:888:83;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28423:888:83;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29284:18;;;;:::i;28423:888::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;724:42:36;28423:888:83;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;-1:-1:-1;28423:888:83;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;28423:888:83;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;28423:888:83;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1890:3002:39;;;;;;;28423:888:83;;;;;;;;;2138:28:39;2159:7;;;:::i;:::-;28423:888:83;;;;2138:28:39;28423:888:83;;2138:28:39;2134:76;;28423:888:83;;2332:16:39;2294:62;2311:44;2332:16;;;;;;28423:888:83;2311:44:39;;:::i;:::-;2294:62;:::i;:::-;2367:13;28423:888:83;2406:3:39;28423:888:83;;2382:22:39;;;;;2439:14;;28423:888:83;2439:14:39;;;:::i;:::-;;2419:34;;;;:::i;:::-;;;;;;:::i;:::-;;28423:888:83;2367:13:39;;2382:22;;;;;;;;28423:888:83;;;2590:3:39;2565:16;;28423:888:83;;2561:27:39;;;;;2631:19;;;;:::i;:::-;;2926:232:68;2725:9:39;;;;;;:::i;:::-;-1:-1:-1;28423:888:83;2747:11:39;;28423:888:83;3047:107:68;;;;;;;;;;2926:232;;2706:53:39;2804:9;;;28423:888:83;2796:17:39;28423:888:83;;;;;;;;;2822:1237:39;;2590:3;2332:16;4107:14;;28423:888:83;;;;;:::i;:::-;;;;:::i;:::-;4107:42:39;;4174:10;2725:9;4174:10;28423:888:83;4165:19:39;4161:75;;28423:888:83;4103:649:39;;28423:888:83;2546:13:39;;4161:75;-1:-1:-1;28423:888:83;;4198:27:39;-1:-1:-1;;;;;;;4198:27:39:o;4103:649::-;4272:37;28423:888:83;;;;;:::i;:::-;;;;:::i;:::-;4254:55:39;4272:37;;4350:10;2725:9;4350:10;28423:888:83;-1:-1:-1;4321:92:39;;28423:888:83;4250:502:39;4103:649;;4250:502;28423:888:83;;;;;;:::i;:::-;;;;:::i;:::-;4431:46:39;28423:888:83;;4502:10:39;2725:9;4502:10;28423:888:83;4493:19:39;4489:75;;28423:888:83;4427:325:39;4103:649;;4427:325;4600:40;28423:888:83;;;;;:::i;:::-;;;;:::i;:::-;4582:58:39;4578:174;;4427:325;;;28423:888:83;4427:325:39;4103:649;;4578:174;2725:9;4681:10;28423:888:83;-1:-1:-1;4652:92:39;;4578:174;;;;2822:1237;28423:888:83;;;;;;;;;;3017:33:39;;28423:888:83;2725:9:39;28423:888:83;3017:33:39;;;;2332:16;3017:33;;;;;:::i;:::-;;;;;;;;;:::i;:::-;28423:888:83;3007:44:39;;3061:21;28423:888:83;3092:28:39;28423:888:83;;:::i;:::-;3135:13:39;28423:888:83;3177:3:39;28423:888:83;;3150:25:39;;;;;3198:17;;;;:::i;:::-;;28423:888:83;3198:41:39;3194:283;;3492:17;;;;;:::i;:::-;;28423:888:83;3492:40:39;3488:210;;28423:888:83;;3135:13:39;;3488:210;2332:16;3597:17;;;;;;;;;;;;;;3896:25;3597:17;;;;;:::i;:::-;;3644:22;;;;28423:888:83;3680:5:39;3130:578;3721:18;;3717:144;;3130:578;3896:25;;:::i;:::-;3931:22;;;;28423:888:83;2822:1237:39;;;3717:144;1060:29;:18;;;;;28423:888:83;;;;;;;;;;;;1060:18:39;28423:888:83;;;;;;;;;;1060:29:39;28423:888:83;3717:144:39;;;;3194:283;2332:16;28423:888:83;;;3896:25:39;28423:888:83;;;;;3440:5:39;28423:888:83;;;;;;;;;;3376:30:39;28423:888:83;;;:::i;:::-;;;;;;3310:52:39;;;28423:888:83;3297:65:39;3376:30;;;;:::i;:::-;;;:::i;:::-;;3440:5;:::i;:::-;3459;;;3150:25;;;;2332:16;3150:25;;;;;;3896;3150;;;;;;;2561:27;-1:-1:-1;;4788:64:39;;-1:-1:-1;28423:888:83;;-1:-1:-1;2561:27:39;;-1:-1:-1;;;;1890:3002:39:o;2134:76::-;2176:27;;;;;28423:888:83;2176:27:39;;:::o;28423:888:83:-;;;;;;;;;;;;:::o;814:430:36:-;913:10;;814:430;946:1;949:17;;;;;;814:430;;;;:::o;968:3::-;985:21;:9;;;;;:::i;:::-;:21;28423:888:83;1031:9:36;;;;;:::i;:::-;28423:888:83;913:10:36;946:1;28423:888:83;946:1:36;985:21;28423:888:83;;946:1:36;28423:888:83;;946:1:36;28423:888:83;985:21:36;28423:888:83;;946:1:36;28423:888:83;;-1:-1:-1;981:180:36;;1190:9;1434:49:39;28423:888:83;1190:9:36;28423:888:83;1190:9:36;;;;:::i;:::-;28423:888:83;985:21:36;1211:9;;;;;:::i;:::-;:21;28423:888:83;;1380:10:39;28423:888:83;1380:10:39;28423:888:83;;;1380:10:39;28423:888:83;;1380:10:39;28423:888:83;;;;;1380:10:39;28423:888:83;;;;;;;;;;;;;;;;1434:49:39;28423:888:83;934:13:36;;981:180;1110:42;946:1;1110:42;;946:1;1110:42;28423:888:83;;;;;;;:::i;:::-;-1:-1:-1;28423:888:83;;;;;;;;;;;;:::o;28560:468::-;;28891:132;28560:468;;;;;;28423:888;;:::i;:::-;;28891:132;:::i;2763:4:48:-;;;;;;;;;:::o;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;28423:888:83;;;;2763:4:48;28423:888:83;;;;;2763:4:48;28423:888:83;;:::i;:::-;2763:4:48;;;;;;;;;;;;;;;;-1:-1:-1;2763:4:48;;;;;;:::o;4690:1776:36:-;;28423:888:83;;4903:1559:36;;4690:1776;;:::o;4903:1559::-;5002:7;;;:::i;:::-;28423:888:83;;5021:4:36;5002:24;;;;:84;;4903:1559;4998:158;;4935:1;5251:13;;5297:3;28423:888:83;;5266:29:36;;;;;5312:56;5333:21;:28;:21;;;;:::i;:::-;;:28;;28423:888:83;5312:56:36;;:::i;:::-;5382:21;:36;:21;;;;:::i;:::-;;:36;28423:888:83;5378:88:36;;5297:3;28423:888:83;;5251:13:36;;;5378:88;5436:19;;28423:888:83;5436:19:36;;:::i;:::-;5378:88;;;;;5266:29;5510:35;5266:29;;;;5510:35;:::i;:::-;4935:1;5588:13;;5583:505;5634:3;28423:888:83;;5603:29:36;;;;;4935:1;5710:3;5333:28;5673:21;;;;:::i;:::-;;:28;;28423:888:83;5669:39:36;;;;;5750:21;5727:54;5750:31;28423:888:83;5750:21:36;5333:28;5750:21;;;;:::i;:::-;;:28;;:31;:::i;:::-;;5734:12;;;;:::i;:::-;5727:54;;;;;:::i;:::-;;;;:::i;:::-;;28423:888:83;5654:13:36;;5669:39;;;;28423:888:83;5669:39:36;5382:36;5805:21;;;;:::i;:::-;;:36;28423:888:83;5801:279:36;;5649:143;28423:888:83;5588:13:36;;;;5801:279;5859:210;5939:28;:21;;;;:::i;:::-;;28423:888:83;;;;;5939:28:36;5382:36;28423:888:83;5928:64:36;;;5333:28;5928:64;;;;2763:4:48;724:42:36;2763:4:48;;;;28423:888:83;2763:4:48;;;28423:888:83;;;;2763:4:48;28423:888:83;2763:4:48;5928:64:36;28423:888:83;5918:75:36;;6020:21;5382:36;6020:21;;;;:::i;:::-;;:36;28423:888:83;;;:::i;:::-;;;;5333:28:36;5882:187;;28423:888:83;5866:12:36;;;:::i;:::-;5859:210;;;;;:::i;:::-;;;;:::i;:::-;;5801:279;;5603:29;;;;2763:4:48;5603:29:36;;6330:9;5603:29;;5382:36;28423:888:83;6164:65:36;;;5333:28;6164:65;;;2763:4:48;6164:65:36;;;;;;:::i;:::-;28423:888:83;6264:23:36;;6330:9;5382:36;6330:9;;;;:::i;:::-;2763:4:48;;;:::i;:::-;5333:28:36;28423:888:83;;;;6320:20:36;6352:34;6348:108;;4690:1776::o;5002:84::-;5030:20;2763:4:48;5030:20:36;;;28423:888:83;5030:56:36;;5002:84;;28423:888:83;;;;;;;:::i;:::-;;;;-1:-1:-1;28423:888:83;;-1:-1:-1;28423:888:83;;;;-1:-1:-1;28423:888:83;;;;-1:-1:-1;28423:888:83;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;3296:1:36;28423:888:83;;;;3296:1:36;28423:888:83;:::o;:::-;;;;;2763:4:48;;;28423:888:83;;;;;;;;:::o;:::-;2763:4:48;28423:888:83;;;;;;;;;;;;;:::o;1753:2649:36:-;;;;;;;;28423:888:83;;:::i;:::-;2159:44:36;28423:888:83;;:::i;:::-;2214:13:36;-1:-1:-1;2263:3:36;28423:888:83;;2229:32:36;;;;;2280:31;:24;;;;:::i;:31::-;28423:888:83;;;;;;2280:48:36;2276:133;;28423:888:83;;2214:13:36;;2276:133;2361:24;;;;;;;;;;;:::i;:::-;;2395:5;2209:206;28423:888:83;;;;;;;;;;2424:39:36;2420:116;;2587:26;;;28423:888:83;2587:31:36;;;:78;;;2209:206;2583:162;;-1:-1:-1;2792:27:36;;;28423:888:83;;;2792:32:36;;;;:81;;2209:206;2788:166;;3027:13;;;;;:22;:13;;;;:::i;:::-;:22;;:::i;:::-;3059:17;;;;;;:::i;:::-;3055:80;;3225:7;;;:::i;:::-;28423:888:83;;3244:4:36;3225:24;3221:303;;3059:17;3598:30;;28423:888:83;3598:30:36;;28423:888:83;;;3581:54:36;;;;3577:115;;3883:86;3728:30;:45;:30;;:45;:::i;:::-;;3943:25;2587:26;3943:25;;;;;;3883:86;;:::i;:::-;3979:8;;3975:69;;2587:26;4049:34;;4132:10;28423:888:83;4132:14:36;4128:82;;2209:206;4219:33;3027:13;4219:33;;;28423:888:83;4255:29:36;;28423:888:83;-1:-1:-1;4215:151:36;;1753:2649;:::o;4215:151::-;4331:28;-1:-1:-1;4331:28:36;;-1:-1:-1;4331:28:36;4128:82;4156:47;3027:13;4156:33;;28423:888:83;;;4156:47:36;:::i;:::-;28423:888:83;;4128:82:36;;;3975:69;4004:33;-1:-1:-1;4004:33:36;;-1:-1:-1;4004:33:36;3577:115;3652:33;-1:-1:-1;3652:33:36;;-1:-1:-1;3652:33:36;3221:303;3284:9;;;;;2587:26;3277:22;3284:14;:9;3027:13;3284:9;;;;:::i;:::-;:14;;:::i;:::-;3277:22;;:::i;:::-;3311:10;;28423:888:83;3311:14:36;;;;:82;;;3221:303;3307:145;;;3492:25;:::o;3307:145::-;3412:31;-1:-1:-1;3412:31:36;3296:1;-1:-1:-1;3412:31:36;3311:82;3341:52;2763:4:48;;;;3329:64:36;;3311:82;;;3055:80;3093:35;-1:-1:-1;3093:35:36;;-1:-1:-1;3093:35:36;2788:166;2890:57;-1:-1:-1;2890:57:36;28423:888:83;;2890:57:36;28423:888:83;;-1:-1:-1;2890:57:36;2792:81;-1:-1:-1;28423:888:83;;;2828:15:36;:45;2792:81;;2583:162;2682:56;-1:-1:-1;2682:56:36;;28423:888:83;;-1:-1:-1;2890:57:36;2587:78;2652:13;;2622:43;;;2587:78;;2420:116;2480:49;-1:-1:-1;2480:49:36;28423:888:83;;;2480:49:36;28423:888:83;;-1:-1:-1;2890:57:36;2229:32;;;;;;;;;;;","linkReferences":{}},"methodIdentifiers":{"VALUE_TRACKING_ADDRESS()":"f916f3b2","getLimitUsage(address,bytes32)":"23b3713e","incrementUsageLimit((bytes32,uint256)[])":"42de1418","validateExplicitCall((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint256,address,address,(address,uint256,uint256,uint64,(address,(bool,uint8,bytes32,uint256,bytes32)[])[])[],uint8,(address,(bytes32,uint256)[],uint256))":"bbfa0b65","validateLimitUsageIncrement((address,uint256,bytes,uint256,bool,bool,uint256),(address,(bytes32,uint256)[],uint256)[])":"75a5627b","validatePermission((address,(bool,uint8,bytes32,uint256,bytes32)[]),(address,uint256,bytes,uint256,bool,bool,uint256),address,address,(bytes32,uint256)[])":"313dade7"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"invalidChainId\",\"type\":\"uint256\"}],\"name\":\"InvalidChainId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidLimitUsageIncrement\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPermission\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSelfCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"invalidSigner\",\"type\":\"address\"}],\"name\":\"InvalidSessionSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MissingPermission\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"SessionExpired\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"wallet\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"usageHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"usageAmount\",\"type\":\"uint256\"}],\"name\":\"LimitUsageUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"VALUE_TRACKING_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"wallet\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"usageHash\",\"type\":\"bytes32\"}],\"name\":\"getLimitUsage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"usageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"usageAmount\",\"type\":\"uint256\"}],\"internalType\":\"struct UsageLimit[]\",\"name\":\"limits\",\"type\":\"tuple[]\"}],\"name\":\"incrementUsageLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"payload\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"callIdx\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"wallet\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sessionWallet\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"valueLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"deadline\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"cumulative\",\"type\":\"bool\"},{\"internalType\":\"enum ParameterOperation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"offset\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"mask\",\"type\":\"bytes32\"}],\"internalType\":\"struct ParameterRule[]\",\"name\":\"rules\",\"type\":\"tuple[]\"}],\"internalType\":\"struct Permission[]\",\"name\":\"permissions\",\"type\":\"tuple[]\"}],\"internalType\":\"struct SessionPermissions[]\",\"name\":\"allSessionPermissions\",\"type\":\"tuple[]\"},{\"internalType\":\"uint8\",\"name\":\"permissionIdx\",\"type\":\"uint8\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"usageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"usageAmount\",\"type\":\"uint256\"}],\"internalType\":\"struct UsageLimit[]\",\"name\":\"limits\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"totalValueUsed\",\"type\":\"uint256\"}],\"internalType\":\"struct SessionUsageLimits\",\"name\":\"sessionUsageLimits\",\"type\":\"tuple\"}],\"name\":\"validateExplicitCall\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"usageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"usageAmount\",\"type\":\"uint256\"}],\"internalType\":\"struct UsageLimit[]\",\"name\":\"limits\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"totalValueUsed\",\"type\":\"uint256\"}],\"internalType\":\"struct SessionUsageLimits\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call\",\"name\":\"call\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"usageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"usageAmount\",\"type\":\"uint256\"}],\"internalType\":\"struct UsageLimit[]\",\"name\":\"limits\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"totalValueUsed\",\"type\":\"uint256\"}],\"internalType\":\"struct SessionUsageLimits[]\",\"name\":\"sessionUsageLimits\",\"type\":\"tuple[]\"}],\"name\":\"validateLimitUsageIncrement\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"cumulative\",\"type\":\"bool\"},{\"internalType\":\"enum ParameterOperation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"offset\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"mask\",\"type\":\"bytes32\"}],\"internalType\":\"struct ParameterRule[]\",\"name\":\"rules\",\"type\":\"tuple[]\"}],\"internalType\":\"struct Permission\",\"name\":\"permission\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call\",\"name\":\"call\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"wallet\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"usageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"usageAmount\",\"type\":\"uint256\"}],\"internalType\":\"struct UsageLimit[]\",\"name\":\"usageLimits\",\"type\":\"tuple[]\"}],\"name\":\"validatePermission\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"usageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"usageAmount\",\"type\":\"uint256\"}],\"internalType\":\"struct UsageLimit[]\",\"name\":\"newUsageLimits\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getLimitUsage(address,bytes32)\":{\"params\":{\"usageHash\":\"The usage hash\",\"wallet\":\"The wallet address\"},\"returns\":{\"_0\":\"The usage amount\"}},\"incrementUsageLimit((bytes32,uint256)[])\":{\"params\":{\"limits\":\"Array of limit/session/target combinations\"}},\"validatePermission((address,(bool,uint8,bytes32,uint256,bytes32)[]),(address,uint256,bytes,uint256,bool,bool,uint256),address,address,(bytes32,uint256)[])\":{\"params\":{\"call\":\"The call to validate against\",\"permission\":\"The rules permission to validate\",\"signer\":\"The signer address\",\"usageLimits\":\"Array of current usage limits\",\"wallet\":\"The wallet address\"},\"returns\":{\"_0\":\"True if the permission is valid, false otherwise\",\"newUsageLimits\":\"New array of usage limits\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"InvalidChainId(uint256)\":[{\"notice\":\"Invalid chainId\"}],\"InvalidDelegateCall()\":[{\"notice\":\"Invalid delegate call\"}],\"InvalidLimitUsageIncrement()\":[{\"notice\":\"Invalid limit usage increment\"}],\"InvalidPermission()\":[{\"notice\":\"Invalid permission for explicit session\"}],\"InvalidSelfCall()\":[{\"notice\":\"Invalid self call\"}],\"InvalidSessionSigner(address)\":[{\"notice\":\"Invalid session signer\"}],\"InvalidValue()\":[{\"notice\":\"Invalid value\"}],\"MissingPermission()\":[{\"notice\":\"Missing permission for explicit session\"}],\"SessionExpired(uint256)\":[{\"notice\":\"Session expired\"}]},\"events\":{\"LimitUsageUpdated(address,bytes32,uint256)\":{\"notice\":\"Emitted when the usage amount for a given wallet and usage hash is updated\"}},\"kind\":\"user\",\"methods\":{\"VALUE_TRACKING_ADDRESS()\":{\"notice\":\"Special address used for tracking native token value limits\"},\"getLimitUsage(address,bytes32)\":{\"notice\":\"Get the usage amount for a given usage hash and wallet\"},\"incrementUsageLimit((bytes32,uint256)[])\":{\"notice\":\"Increment usage for a caller's given session and target\"},\"validateExplicitCall((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint256,address,address,(address,uint256,uint256,uint64,(address,(bool,uint8,bytes32,uint256,bytes32)[])[])[],uint8,(address,(bytes32,uint256)[],uint256))\":{\"notice\":\"Exposes the internal _validateExplicitCall function.\"},\"validateLimitUsageIncrement((address,uint256,bytes,uint256,bool,bool,uint256),(address,(bytes32,uint256)[],uint256)[])\":{\"notice\":\"Exposes the internal _validateLimitUsageIncrement function.\"},\"validatePermission((address,(bool,uint8,bytes32,uint256,bytes32)[]),(address,uint256,bytes,uint256,bool,bool,uint256),address,address,(bytes32,uint256)[])\":{\"notice\":\"Validates a rules permission\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/extensions/sessions/explicit/ExplicitSessionManager.t.sol\":\"ExplicitSessionManagerHarness\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/extensions/sessions/SessionErrors.sol\":{\"keccak256\":\"0xa7642b4ef1d2ac8e41bd6dca88c5a644cac21b3ebe79deb5013e21fb4aaab405\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ef80768f6c509a54ea5d3fb92cbf46363f945f071cc3664710770c09b3d2a978\",\"dweb:/ipfs/QmbRpicAiPSYQbKpjoDbanap9q5hYsqEMS1u7w7sqKEYTY\"]},\"src/extensions/sessions/SessionManager.sol\":{\"keccak256\":\"0x796e8db3b2dc58842aca5c7fe76897527dd60279a8146ee107f651d876fccbd9\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2ee4d968a8bd5d007cccc67108509470677f4f5ce59dce7005b1da7d9b243609\",\"dweb:/ipfs/QmVUz8Q4BwNsbeLZdsWHg87MCVF6aAJL6UYzWWWAoxjvS7\"]},\"src/extensions/sessions/SessionSig.sol\":{\"keccak256\":\"0x7c44eabacfd2b4758fa8f54574f7479d8ef0209551ad824b3fc497c215a9609a\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://845b301783b1f069fa0b01d47ca2de1a79b0d4c3e14881973421a718c4d823df\",\"dweb:/ipfs/QmcDgiqjENAL3L7MjQ7HgitmsJ2PVNUm3ibnL2DZRU1VAL\"]},\"src/extensions/sessions/explicit/ExplicitSessionManager.sol\":{\"keccak256\":\"0x08405cc3def78d4172267a2e607e303b5f222d8cb85ba009deab58e0110088b0\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e2e073fdb5794f59ee6d7eb5e04074b1452e5d0824e4117259835071199f3d32\",\"dweb:/ipfs/Qmbi56yfELF88ezZ2tczegLmeB6Gb3HxDX11bzx3rpDgJZ\"]},\"src/extensions/sessions/explicit/IExplicitSessionManager.sol\":{\"keccak256\":\"0xae940e96cf0677c9b0df0daee07db0293c55a21cec0b893d82eefd122815602b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://62ee98f92121ad54f78d375ec3003aab73719adec852b0d12518fe99fc6f66c6\",\"dweb:/ipfs/QmPuAX7tdga5Su1xua6LS6jR9DsV7GyCwyZLeRC8upPTKY\"]},\"src/extensions/sessions/explicit/Permission.sol\":{\"keccak256\":\"0x0bc35a04da3830c64ec13c32b57f88be6b980228f6b387e800cf70919cdcfb16\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://fcb304612f894699f8e1e40cf134abebe8f7135795bea479b04e967551c59948\",\"dweb:/ipfs/Qme4mD8dh3xU9wbscQwvL4cQcZ2Wv8Fobo2fmU29B3DirV\"]},\"src/extensions/sessions/explicit/PermissionValidator.sol\":{\"keccak256\":\"0xe970e1ce931ef3779e3ddc9525b40820b7f63746828a440306ff9c984da42234\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://9154a986b7a5565119b2c0993dd9bc9e6e9b3e07eede034c8fde1c9f39a56a30\",\"dweb:/ipfs/QmXbgsr6kYYK5gmge6sosgwbHnFnQW5ntCZCyeNTQqTndD\"]},\"src/extensions/sessions/implicit/Attestation.sol\":{\"keccak256\":\"0xcaa44022b5eb4bc7ab487b3b1a0125da67e2e891cee983ef6cdb6814f045efc8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://94829782b6dcb482d7c002511c590d1ad8de3b21e5e72575df18be73565b3638\",\"dweb:/ipfs/QmZ4u9FxALzMzKR7auW8FmFkhGVw8kRDeDRJ1PKwKaWNWF\"]},\"src/extensions/sessions/implicit/ISignalsImplicitMode.sol\":{\"keccak256\":\"0x6cb48f50c49bcb3c7071306fe9fac6c102bc9eabf73d9909e19ab3b9a835d0a8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://15297e969f64fc1152654d1cefbe276c15a0ecfc11f86b4c276bb0b454fe700a\",\"dweb:/ipfs/QmeehNFYBPPtJePwUcqiYCgiuFotur4VVVCV1KvegdCCZ4\"]},\"src/extensions/sessions/implicit/ImplicitSessionManager.sol\":{\"keccak256\":\"0xe0d4f9f9c242e1e5781ba3a2eb4c4485b16de53769dacf7f448be01649d9997b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://f6f28cfeca83fffc74e63440243fcb0a7f9a7d5ac5efae21fa8e96926c1d0fae\",\"dweb:/ipfs/Qmdnw9PrjjpUjWij9VDxBRe6besuJvpwiGaPewVcR2G9C1\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/interfaces/ISapient.sol\":{\"keccak256\":\"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489\",\"dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"src/utils/LibOptim.sol\":{\"keccak256\":\"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81\",\"dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x\"]},\"test/extensions/sessions/SessionTestBase.sol\":{\"keccak256\":\"0x96ed18b2829a94a4e2fa0331b595e931ba48114679aa9765799aa9583713a1e7\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1f5dc74df056ea0b6722898060c5f467d47c7961335d474d93a3d45a75575894\",\"dweb:/ipfs/QmPT1ArcYmBUASEr2iL5TnRRkwShMahRh8YWurcbGkwJa4\"]},\"test/extensions/sessions/explicit/ExplicitSessionManager.t.sol\":{\"keccak256\":\"0x593be627e5b81ff8958545c7a562db0ad22ad70511f318ab0ac867df2e3e82ca\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://68fbc8fbddb0e7490e9c2465ff26691263c3bac2208869cf8714c03a4cd61ab5\",\"dweb:/ipfs/QmeNWGGrBmgQqx95mFZyANyCX59f9513EEJszoAR9bN7En\"]},\"test/utils/PrimitivesRPC.sol\":{\"keccak256\":\"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe\",\"dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv\"]},\"test/utils/TestUtils.sol\":{\"keccak256\":\"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad\",\"dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint256","name":"invalidChainId","type":"uint256"}],"type":"error","name":"InvalidChainId"},{"inputs":[],"type":"error","name":"InvalidDelegateCall"},{"inputs":[],"type":"error","name":"InvalidLimitUsageIncrement"},{"inputs":[],"type":"error","name":"InvalidPermission"},{"inputs":[],"type":"error","name":"InvalidSelfCall"},{"inputs":[{"internalType":"address","name":"invalidSigner","type":"address"}],"type":"error","name":"InvalidSessionSigner"},{"inputs":[],"type":"error","name":"InvalidValue"},{"inputs":[],"type":"error","name":"MissingPermission"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"}],"type":"error","name":"SessionExpired"},{"inputs":[{"internalType":"address","name":"wallet","type":"address","indexed":false},{"internalType":"bytes32","name":"usageHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"usageAmount","type":"uint256","indexed":false}],"type":"event","name":"LimitUsageUpdated","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"VALUE_TRACKING_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bytes32","name":"usageHash","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getLimitUsage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"struct UsageLimit[]","name":"limits","type":"tuple[]","components":[{"internalType":"bytes32","name":"usageHash","type":"bytes32"},{"internalType":"uint256","name":"usageAmount","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"incrementUsageLimit"},{"inputs":[{"internalType":"struct Payload.Decoded","name":"payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"uint256","name":"callIdx","type":"uint256"},{"internalType":"address","name":"wallet","type":"address"},{"internalType":"address","name":"sessionWallet","type":"address"},{"internalType":"struct SessionPermissions[]","name":"allSessionPermissions","type":"tuple[]","components":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"uint256","name":"valueLimit","type":"uint256"},{"internalType":"uint64","name":"deadline","type":"uint64"},{"internalType":"struct Permission[]","name":"permissions","type":"tuple[]","components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"struct ParameterRule[]","name":"rules","type":"tuple[]","components":[{"internalType":"bool","name":"cumulative","type":"bool"},{"internalType":"enum ParameterOperation","name":"operation","type":"uint8"},{"internalType":"bytes32","name":"value","type":"bytes32"},{"internalType":"uint256","name":"offset","type":"uint256"},{"internalType":"bytes32","name":"mask","type":"bytes32"}]}]}]},{"internalType":"uint8","name":"permissionIdx","type":"uint8"},{"internalType":"struct SessionUsageLimits","name":"sessionUsageLimits","type":"tuple","components":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"struct UsageLimit[]","name":"limits","type":"tuple[]","components":[{"internalType":"bytes32","name":"usageHash","type":"bytes32"},{"internalType":"uint256","name":"usageAmount","type":"uint256"}]},{"internalType":"uint256","name":"totalValueUsed","type":"uint256"}]}],"stateMutability":"view","type":"function","name":"validateExplicitCall","outputs":[{"internalType":"struct SessionUsageLimits","name":"","type":"tuple","components":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"struct UsageLimit[]","name":"limits","type":"tuple[]","components":[{"internalType":"bytes32","name":"usageHash","type":"bytes32"},{"internalType":"uint256","name":"usageAmount","type":"uint256"}]},{"internalType":"uint256","name":"totalValueUsed","type":"uint256"}]}]},{"inputs":[{"internalType":"struct Payload.Call","name":"call","type":"tuple","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"struct SessionUsageLimits[]","name":"sessionUsageLimits","type":"tuple[]","components":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"struct UsageLimit[]","name":"limits","type":"tuple[]","components":[{"internalType":"bytes32","name":"usageHash","type":"bytes32"},{"internalType":"uint256","name":"usageAmount","type":"uint256"}]},{"internalType":"uint256","name":"totalValueUsed","type":"uint256"}]}],"stateMutability":"view","type":"function","name":"validateLimitUsageIncrement"},{"inputs":[{"internalType":"struct Permission","name":"permission","type":"tuple","components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"struct ParameterRule[]","name":"rules","type":"tuple[]","components":[{"internalType":"bool","name":"cumulative","type":"bool"},{"internalType":"enum ParameterOperation","name":"operation","type":"uint8"},{"internalType":"bytes32","name":"value","type":"bytes32"},{"internalType":"uint256","name":"offset","type":"uint256"},{"internalType":"bytes32","name":"mask","type":"bytes32"}]}]},{"internalType":"struct Payload.Call","name":"call","type":"tuple","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"address","name":"wallet","type":"address"},{"internalType":"address","name":"signer","type":"address"},{"internalType":"struct UsageLimit[]","name":"usageLimits","type":"tuple[]","components":[{"internalType":"bytes32","name":"usageHash","type":"bytes32"},{"internalType":"uint256","name":"usageAmount","type":"uint256"}]}],"stateMutability":"view","type":"function","name":"validatePermission","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"struct UsageLimit[]","name":"newUsageLimits","type":"tuple[]","components":[{"internalType":"bytes32","name":"usageHash","type":"bytes32"},{"internalType":"uint256","name":"usageAmount","type":"uint256"}]}]}],"devdoc":{"kind":"dev","methods":{"getLimitUsage(address,bytes32)":{"params":{"usageHash":"The usage hash","wallet":"The wallet address"},"returns":{"_0":"The usage amount"}},"incrementUsageLimit((bytes32,uint256)[])":{"params":{"limits":"Array of limit/session/target combinations"}},"validatePermission((address,(bool,uint8,bytes32,uint256,bytes32)[]),(address,uint256,bytes,uint256,bool,bool,uint256),address,address,(bytes32,uint256)[])":{"params":{"call":"The call to validate against","permission":"The rules permission to validate","signer":"The signer address","usageLimits":"Array of current usage limits","wallet":"The wallet address"},"returns":{"_0":"True if the permission is valid, false otherwise","newUsageLimits":"New array of usage limits"}}},"version":1},"userdoc":{"kind":"user","methods":{"VALUE_TRACKING_ADDRESS()":{"notice":"Special address used for tracking native token value limits"},"getLimitUsage(address,bytes32)":{"notice":"Get the usage amount for a given usage hash and wallet"},"incrementUsageLimit((bytes32,uint256)[])":{"notice":"Increment usage for a caller's given session and target"},"validateExplicitCall((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint256,address,address,(address,uint256,uint256,uint64,(address,(bool,uint8,bytes32,uint256,bytes32)[])[])[],uint8,(address,(bytes32,uint256)[],uint256))":{"notice":"Exposes the internal _validateExplicitCall function."},"validateLimitUsageIncrement((address,uint256,bytes,uint256,bool,bool,uint256),(address,(bytes32,uint256)[],uint256)[])":{"notice":"Exposes the internal _validateLimitUsageIncrement function."},"validatePermission((address,(bool,uint8,bytes32,uint256,bytes32)[]),(address,uint256,bytes,uint256,bool,bool,uint256),address,address,(bytes32,uint256)[])":{"notice":"Validates a rules permission"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/extensions/sessions/explicit/ExplicitSessionManager.t.sol":"ExplicitSessionManagerHarness"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/extensions/sessions/SessionErrors.sol":{"keccak256":"0xa7642b4ef1d2ac8e41bd6dca88c5a644cac21b3ebe79deb5013e21fb4aaab405","urls":["bzz-raw://ef80768f6c509a54ea5d3fb92cbf46363f945f071cc3664710770c09b3d2a978","dweb:/ipfs/QmbRpicAiPSYQbKpjoDbanap9q5hYsqEMS1u7w7sqKEYTY"],"license":"Apache-2.0"},"src/extensions/sessions/SessionManager.sol":{"keccak256":"0x796e8db3b2dc58842aca5c7fe76897527dd60279a8146ee107f651d876fccbd9","urls":["bzz-raw://2ee4d968a8bd5d007cccc67108509470677f4f5ce59dce7005b1da7d9b243609","dweb:/ipfs/QmVUz8Q4BwNsbeLZdsWHg87MCVF6aAJL6UYzWWWAoxjvS7"],"license":"Apache-2.0"},"src/extensions/sessions/SessionSig.sol":{"keccak256":"0x7c44eabacfd2b4758fa8f54574f7479d8ef0209551ad824b3fc497c215a9609a","urls":["bzz-raw://845b301783b1f069fa0b01d47ca2de1a79b0d4c3e14881973421a718c4d823df","dweb:/ipfs/QmcDgiqjENAL3L7MjQ7HgitmsJ2PVNUm3ibnL2DZRU1VAL"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/ExplicitSessionManager.sol":{"keccak256":"0x08405cc3def78d4172267a2e607e303b5f222d8cb85ba009deab58e0110088b0","urls":["bzz-raw://e2e073fdb5794f59ee6d7eb5e04074b1452e5d0824e4117259835071199f3d32","dweb:/ipfs/Qmbi56yfELF88ezZ2tczegLmeB6Gb3HxDX11bzx3rpDgJZ"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/IExplicitSessionManager.sol":{"keccak256":"0xae940e96cf0677c9b0df0daee07db0293c55a21cec0b893d82eefd122815602b","urls":["bzz-raw://62ee98f92121ad54f78d375ec3003aab73719adec852b0d12518fe99fc6f66c6","dweb:/ipfs/QmPuAX7tdga5Su1xua6LS6jR9DsV7GyCwyZLeRC8upPTKY"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/Permission.sol":{"keccak256":"0x0bc35a04da3830c64ec13c32b57f88be6b980228f6b387e800cf70919cdcfb16","urls":["bzz-raw://fcb304612f894699f8e1e40cf134abebe8f7135795bea479b04e967551c59948","dweb:/ipfs/Qme4mD8dh3xU9wbscQwvL4cQcZ2Wv8Fobo2fmU29B3DirV"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/PermissionValidator.sol":{"keccak256":"0xe970e1ce931ef3779e3ddc9525b40820b7f63746828a440306ff9c984da42234","urls":["bzz-raw://9154a986b7a5565119b2c0993dd9bc9e6e9b3e07eede034c8fde1c9f39a56a30","dweb:/ipfs/QmXbgsr6kYYK5gmge6sosgwbHnFnQW5ntCZCyeNTQqTndD"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/Attestation.sol":{"keccak256":"0xcaa44022b5eb4bc7ab487b3b1a0125da67e2e891cee983ef6cdb6814f045efc8","urls":["bzz-raw://94829782b6dcb482d7c002511c590d1ad8de3b21e5e72575df18be73565b3638","dweb:/ipfs/QmZ4u9FxALzMzKR7auW8FmFkhGVw8kRDeDRJ1PKwKaWNWF"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/ISignalsImplicitMode.sol":{"keccak256":"0x6cb48f50c49bcb3c7071306fe9fac6c102bc9eabf73d9909e19ab3b9a835d0a8","urls":["bzz-raw://15297e969f64fc1152654d1cefbe276c15a0ecfc11f86b4c276bb0b454fe700a","dweb:/ipfs/QmeehNFYBPPtJePwUcqiYCgiuFotur4VVVCV1KvegdCCZ4"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/ImplicitSessionManager.sol":{"keccak256":"0xe0d4f9f9c242e1e5781ba3a2eb4c4485b16de53769dacf7f448be01649d9997b","urls":["bzz-raw://f6f28cfeca83fffc74e63440243fcb0a7f9a7d5ac5efae21fa8e96926c1d0fae","dweb:/ipfs/Qmdnw9PrjjpUjWij9VDxBRe6besuJvpwiGaPewVcR2G9C1"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/interfaces/ISapient.sol":{"keccak256":"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359","urls":["bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489","dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"src/utils/LibOptim.sol":{"keccak256":"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde","urls":["bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81","dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x"],"license":"Apache-2.0"},"test/extensions/sessions/SessionTestBase.sol":{"keccak256":"0x96ed18b2829a94a4e2fa0331b595e931ba48114679aa9765799aa9583713a1e7","urls":["bzz-raw://1f5dc74df056ea0b6722898060c5f467d47c7961335d474d93a3d45a75575894","dweb:/ipfs/QmPT1ArcYmBUASEr2iL5TnRRkwShMahRh8YWurcbGkwJa4"],"license":"Apache-2.0"},"test/extensions/sessions/explicit/ExplicitSessionManager.t.sol":{"keccak256":"0x593be627e5b81ff8958545c7a562db0ad22ad70511f318ab0ac867df2e3e82ca","urls":["bzz-raw://68fbc8fbddb0e7490e9c2465ff26691263c3bac2208869cf8714c03a4cd61ab5","dweb:/ipfs/QmeNWGGrBmgQqx95mFZyANyCX59f9513EEJszoAR9bN7En"],"license":"Apache-2.0"},"test/utils/PrimitivesRPC.sol":{"keccak256":"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe","urls":["bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe","dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv"],"license":"Apache-2.0"},"test/utils/TestUtils.sol":{"keccak256":"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79","urls":["bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad","dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa"],"license":"Apache-2.0"}},"version":1},"id":83} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/ExplicitSessionManager.t.sol/ExplicitSessionManagerTest.json b/contracts/artifacts/wallet-contracts-v3/ExplicitSessionManager.t.sol/ExplicitSessionManagerTest.json new file mode 100644 index 00000000..afd5ae0d --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/ExplicitSessionManager.t.sol/ExplicitSessionManagerTest.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"excludeArtifacts","inputs":[],"outputs":[{"name":"excludedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"excludeContracts","inputs":[],"outputs":[{"name":"excludedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"excludeSelectors","inputs":[],"outputs":[{"name":"excludedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"excludeSenders","inputs":[],"outputs":[{"name":"excludedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"setUp","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"targetArtifactSelectors","inputs":[],"outputs":[{"name":"targetedArtifactSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzArtifactSelector[]","components":[{"name":"artifact","type":"string","internalType":"string"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetArtifacts","inputs":[],"outputs":[{"name":"targetedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"targetContracts","inputs":[],"outputs":[{"name":"targetedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"targetInterfaces","inputs":[],"outputs":[{"name":"targetedInterfaces_","type":"tuple[]","internalType":"struct StdInvariant.FuzzInterface[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"artifacts","type":"string[]","internalType":"string[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSelectors","inputs":[],"outputs":[{"name":"targetedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSenders","inputs":[],"outputs":[{"name":"targetedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"test_incrementUsageLimit","inputs":[{"name":"limits","type":"tuple[]","internalType":"struct UsageLimit[]","components":[{"name":"usageHash","type":"bytes32","internalType":"bytes32"},{"name":"usageAmount","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_incrementUsageLimit_decrement","inputs":[{"name":"limit","type":"tuple","internalType":"struct UsageLimit","components":[{"name":"usageHash","type":"bytes32","internalType":"bytes32"},{"name":"usageAmount","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_incrementUsageLimit_twice","inputs":[{"name":"limits","type":"tuple[]","internalType":"struct UsageLimit[]","components":[{"name":"usageHash","type":"bytes32","internalType":"bytes32"},{"name":"usageAmount","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_validateExplicitCall","inputs":[{"name":"chainId","type":"uint64","internalType":"uint64"},{"name":"target","type":"address","internalType":"address"},{"name":"selector","type":"bytes4","internalType":"bytes4"},{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_validateExplicitCall_DelegateCall","inputs":[{"name":"chainId","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_validateExplicitCall_InvalidPermission","inputs":[{"name":"chainId","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_validateExplicitCall_InvalidSelfCall_Selector","inputs":[{"name":"chainId","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_validateExplicitCall_InvalidSelfCall_Value","inputs":[{"name":"chainId","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_validateExplicitCall_InvalidSessionSigner","inputs":[{"name":"invalidSigner","type":"address","internalType":"address"},{"name":"chainId","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_validateExplicitCall_MissingPermission","inputs":[{"name":"chainId","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_validateExplicitCall_MultipleValues","inputs":[{"name":"chainId","type":"uint64","internalType":"uint64"},{"name":"firstValue","type":"uint256","internalType":"uint256"},{"name":"secondValue","type":"uint256","internalType":"uint256"},{"name":"thirdValue","type":"uint256","internalType":"uint256"},{"name":"valueLimit","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_validateExplicitCall_SessionExpired","inputs":[{"name":"chainId","type":"uint64","internalType":"uint64"},{"name":"currentTimestamp","type":"uint64","internalType":"uint64"},{"name":"expiredTimestamp","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_validateExplicitCall_ValueLimitExceeded","inputs":[{"name":"chainId","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_validateExplicitCall_invalidChainId","inputs":[{"name":"chainId","type":"uint64","internalType":"uint64"},{"name":"invalidChainId","type":"uint256","internalType":"uint256"},{"name":"target","type":"address","internalType":"address"},{"name":"selector","type":"bytes4","internalType":"bytes4"},{"name":"callData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_validateLimitUsageIncrement_InvalidBehaviorOnError","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_validateLimitUsageIncrement_InvalidCall","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_validateLimitUsageIncrement_InvalidCallData","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_validateLimitUsageIncrement_rule","inputs":[{"name":"limit","type":"tuple","internalType":"struct UsageLimit","components":[{"name":"usageHash","type":"bytes32","internalType":"bytes32"},{"name":"usageAmount","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_validateLimitUsageIncrement_value","inputs":[{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"view"},{"type":"event","name":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false}],"bytecode":{"object":"0x60808060405234602f57600160ff19600c541617600c55600160ff19601f541617601f5561867090816100358239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c806303a7f7cd146102175780630a9254e41461021257806315b4cfcc1461020d5780631cf4449c146102085780631ed7831c146102035780632ade3880146101fe5780633e5e3c23146101f95780633f7286f4146101f45780634f40fc4f146101ef578063512e9ee2146101ea57806366d9a9a0146101e557806373f7d27c146101e05780637c446162146101db57806385226c81146101d6578063916a17c6146101d15780639729cadc146101cc5780639ee306ed146101c75780639f7f8430146101c2578063a2e84088146101bd578063ad4d5bf7146101b8578063ae0d51a5146101b3578063b0464fdc146101ae578063b125aa50146101a9578063b53bc950146101a4578063b5508aa91461019f578063ba414fa61461019a578063c194a6c514610195578063cae9ba8014610190578063e20c9f711461018b578063eeb801f314610186578063f95a0554146101815763fa7626d41461017c57600080fd5b612d79565b612c97565b612bb5565b612b0a565b6129f2565b6128d6565b6127b4565b612709565b612627565b612551565b612478565b612396565b6122b4565b6121c3565b611fc0565b611ce7565b611b16565b611a3d565b6118ed565b611587565b611432565b611368565b61125e565b610f15565b610e4c565b610da1565b610cc8565b610a91565b61095f565b61086b565b610558565b61022c565b600091031261022757565b600080fd5b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757610263612dba565b61029f61028560215473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff168252565b6102a7612dda565b6020820152606460408201526102bb612efc565b906102c582612f8a565b526102cf81612f8a565b50601f5461030a9060081c73ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff1690565b610331610315611101565b73ffffffffffffffffffffffffffffffffffffffff9092168252565b60006020820152610340612fe5565b60408201526000606082015260006080820152600060a0820152600160c0820152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527e2a700a00000000000000000000000000000000000000000000000000000000600482015260008180602481015b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561052957610543575b5060205473ffffffffffffffffffffffffffffffffffffffff165b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91909116600482015260008160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156105295761052e575b50601f546104be9060081c73ffffffffffffffffffffffffffffffffffffffff166102f1565b91823b1561022757610502926000926040518095819482937f75a5627b00000000000000000000000000000000000000000000000000000000845260048401613118565b03915afa80156105295761051257005b806105216000610527936110c0565b8061021c565b005b613020565b80610521600061053d936110c0565b38610498565b806105216000610552936110c0565b386103f5565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102275760405161197080820182811067ffffffffffffffff821117610821578291616ccb833903906000f0801561052957610600907fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00601f549260081b16911617601f55565b6040517f7404f1d200000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f77616c6c6574000000000000000000000000000000000000000000000000000060448201526080816064816000737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115610529576106ec916106ab91600091610802575b505173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff00000000000000000000000000000000000000006020541617602055565b6040517f7404f1d200000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f73657373696f6e0000000000000000000000000000000000000000000000000060448201526080816064816000737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561052957610527916000916107d3575b5060609073ffffffffffffffffffffffffffffffffffffffff8151167fffffffffffffffffffffffff00000000000000000000000000000000000000006021541617602155602081015160225560408101516023550151602455565b6107f5915060803d6080116107fb575b6107ed81836110c0565b8101906131a9565b38610777565b503d6107e3565b61081b915060803d6080116107fb576107ed81836110c0565b38610690565b611004565b6004359067ffffffffffffffff8216820361022757565b6024359067ffffffffffffffff8216820361022757565b6044359067ffffffffffffffff8216820361022757565b346102275760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610227576108a2610826565b6108aa61083d565b6108b2610854565b9067ffffffffffffffff831692836108cf575b61052793506139f7565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561022757604051937f4049ddd2000000000000000000000000000000000000000000000000000000008552600485015260008460248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1938415610529576105279461094a575b506108c5565b806105216000610959936110c0565b38610944565b346102275760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757610996610826565b67ffffffffffffffff811690816109b1575b61052790613efd565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561022757604051917f4049ddd2000000000000000000000000000000000000000000000000000000008352600483015260008260248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19182156105295761052792610a2c575b506109a8565b806105216000610a3b936110c0565b38610a26565b602060408183019282815284518094520192019060005b818110610a655750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101610a58565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102275760405180602060165491828152019060166000527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b51242899060005b818110610b2057610b1c85610b10818703826110c0565b60405191829182610a41565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610af9565b60005b838110610b5f5750506000910152565b8181015183820152602001610b4f565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093610bab81518092818752878088019101610b4c565b0116010190565b602081016020825282518091526040820190602060408260051b8501019401916000905b828210610be557505050505090565b9091929395947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08782030182528451906020604082019273ffffffffffffffffffffffffffffffffffffffff81511683520151916040602083015282518091526060820190602060608260051b85010194019260005b828110610c7f57505050505060208060019296019201920190929195939495610bd6565b9091929394602080610cbb837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa087600196030189528951610b6f565b9701950193929101610c5b565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757601e54610d0381611130565b90610d1160405192836110c0565b80825260208201601e6000527f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e3506000915b838310610d575760405180610b1c8782610bb2565b60026020600192604051610d6a81611033565b73ffffffffffffffffffffffffffffffffffffffff8654168152610d8f858701614239565b83820152815201920192019190610d42565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102275760405180602060185491828152019060186000527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e9060005b818110610e2057610b1c85610b10818703826110c0565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610e09565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102275760405180602060175491828152019060176000527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c159060005b818110610ecb57610b1c85610b10818703826110c0565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610eb4565b73ffffffffffffffffffffffffffffffffffffffff81160361022757565b346102275760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757600435610f5081610ef7565b610f5861083d565b67ffffffffffffffff81169182610f74575b6105279250614291565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561022757604051927f4049ddd2000000000000000000000000000000000000000000000000000000008452600484015260008360248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19283156105295761052793610fef575b50610f6a565b806105216000610ffe936110c0565b38610fe9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff82111761082157604052565b6060810190811067ffffffffffffffff82111761082157604052565b60a0810190811067ffffffffffffffff82111761082157604052565b60e0810190811067ffffffffffffffff82111761082157604052565b610120810190811067ffffffffffffffff82111761082157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761082157604052565b6040519061111060e0836110c0565b565b604051906111106040836110c0565b6040519061111060a0836110c0565b67ffffffffffffffff81116108215760051b60200190565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6040910112610227576040519061117f82611033565b60043582526024356020830152565b9190826040910312610227576040516111a681611033565b6020808294803584520135910152565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126102275760043567ffffffffffffffff8111610227578160238201121561022757806004013561120b81611130565b9261121960405194856110c0565b8184526024602085019260061b8401019281841161022757602401915b838310611244575050505090565b6020604091611253848661118e565b815201920191611236565b346102275761052761126f366111b6565b6144c6565b906020808351928381520192019060005b8181106112925750505090565b82517fffffffff0000000000000000000000000000000000000000000000000000000016845260209384019390920191600101611285565b602081016020825282518091526040820191602060408360051b8301019401926000915b8383106112fd57505050505090565b9091929394602080611359837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08660019603018752895190836113498351604084526040840190610b6f565b9201519084818403910152611274565b970193019301919392906112ee565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757601b546113a381611130565b906113b160405192836110c0565b80825260208201601b6000527f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc16000915b8383106113f75760405180610b1c87826112ca565b6002602060019260405161140a81611033565b61141386614137565b815261142085870161488d565b838201528152019201920191906113e2565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757611469611101565b61dead81526000602082015261147d614c38565b60408201526000606082015260006080820152600060a0820152600160c08201526114a6612dba565b906114e36114c960215473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff168352565b6114eb612dda565b6020830152603260408301526114ff612efc565b9161150983612f8a565b5261151382612f8a565b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527e2a700a00000000000000000000000000000000000000000000000000000000600482015260008180602481016103d0565b346102275760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610227576115bf36611148565b6020810180511515737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529015156004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156105295761185a575b50611662611644612e22565b928061164f85612f8a565b5261165984612f8a565b50519151614c73565b61166a611112565b918252602082015261167b82612f9c565b5261168581612f9c565b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527e2a700a00000000000000000000000000000000000000000000000000000000600482015260008160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561052957611845575b5060205473ffffffffffffffffffffffffffffffffffffffff16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91909116600482015260008160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561052957611830575b50601f546117dd9060081c73ffffffffffffffffffffffffffffffffffffffff166102f1565b803b15610227576040517f42de14180000000000000000000000000000000000000000000000000000000081529060009082908183816118208860048301613e82565b03925af180156105295761051257005b80610521600061183f936110c0565b386117b7565b806105216000611854936110c0565b38611715565b806105216000611869936110c0565b38611638565b602081016020825282518091526040820191602060408360051b8301019401926000915b8383106118a257505050505090565b90919293946020806118de837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187528951610b6f565b97019301930191939290611893565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757601a5461192881611130565b9061193660405192836110c0565b808252601a60009081527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b83831061197b5760405180610b1c878261186f565b60016020819261198a85614137565b815201920192019190611966565b602081016020825282518091526040820191602060408360051b8301019401926000915b8383106119cb57505050505090565b9091929394602080611a2e837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190611274565b970193019301919392906119bc565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757601d54611a7881611130565b90611a8660405192836110c0565b80825260208201601d6000527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f6000915b838310611acc5760405180610b1c8782611998565b60026020600192604051611adf81611033565b73ffffffffffffffffffffffffffffffffffffffff8654168152611b0485870161488d565b83820152815201920192019190611ab7565b346102275760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757611b4e36611148565b60208101611b5c81516165b6565b9052601f54611b839060081c73ffffffffffffffffffffffffffffffffffffffff166102f1565b611b8e610315611101565b60006020820152611c9c611ba0612fd0565b604083019081526000606084015260006080840152600060a0840152600160c0840152611cc8611bce612dba565b94611c0b611bf160215473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff168752565b611c2c611c16612e8f565b80602089015282611c2682612f8a565b52612f8a565b50611c35612efc565b95611c3f87612f8a565b52611c4986612f8a565b50611c52612e8f565b90611c5c82612f8a565b52611c6681612f8a565b506040519384917f42de141800000000000000000000000000000000000000000000000000000000602084015260248301613e82565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018452836110c0565b5260205473ffffffffffffffffffffffffffffffffffffffff16610410565b3461022757611cf5366111b6565b6005815111611fb7575b611d08816144c6565b60005b8151811015611d535780611d3e6020611d2660019486612fbc565b5101516020611d358487612fbc565b510151906166a5565b6020611d4a8386612fbc565b51015201611d0b565b5060205473ffffffffffffffffffffffffffffffffffffffff16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91909116600482015260008160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561052957611fa2575b50601f54611e1b9060081c73ffffffffffffffffffffffffffffffffffffffff166102f1565b803b1561022757600060405180927f42de1418000000000000000000000000000000000000000000000000000000008252818381611e5c8860048301613e82565b03925af1801561052957611f8d575b50600090611e956102f1601f5473ffffffffffffffffffffffffffffffffffffffff9060081c1690565b90611eb560205473ffffffffffffffffffffffffffffffffffffffff1690565b925b815181101561052757806020611ed0611f289385612fbc565b51516040517f23b3713e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88166004820152602481019190915292839081906044820190565b0381875afa91821561052957600192611f5991600091611f5f575b506020611f508487612fbc565b51015190616927565b01611eb7565b611f80915060203d8111611f86575b611f7881836110c0565b8101906144b7565b38611f43565b503d611f6e565b806105216000611f9c936110c0565b38611e6b565b806105216000611fb1936110c0565b38611df5565b60058152611cff565b346102275760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757611ffa6004356165b6565b601f5461201f9060081c73ffffffffffffffffffffffffffffffffffffffff166102f1565b90612028611101565b73ffffffffffffffffffffffffffffffffffffffff831681529060006020830152611c9c612054612fd0565b604084019081526000606085015260006080850152600060a0850152600160c085015261217f612082612dba565b936120a260215473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff811686526120c3612dda565b60208701528160408701526120d6612efc565b956120e087612f8a565b526120ea86612f8a565b5060405161216381612137602082019485602073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee9193929373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826110c0565b5190209061216f611112565b9182526020820152611c52612e8f565b52823b1561022757610502926000926040518095819482937f75a5627b00000000000000000000000000000000000000000000000000000000845260048401613118565b346102275760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610227576121fa610826565b602435604435606435906084359267ffffffffffffffff85169485612224575b6105279550614e3f565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561022757604051957f4049ddd2000000000000000000000000000000000000000000000000000000008752600487015260008660248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1958615610529576105279661229f575b5061221a565b8061052160006122ae936110c0565b38612299565b346102275760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610227576122eb610826565b67ffffffffffffffff81169081612306575b610527906157f6565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561022757604051917f4049ddd2000000000000000000000000000000000000000000000000000000008352600483015260008260248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19182156105295761052792612381575b506122fd565b806105216000612390936110c0565b3861237b565b346102275760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610227576123cd610826565b67ffffffffffffffff811690816123e8575b6105279061588a565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561022757604051917f4049ddd2000000000000000000000000000000000000000000000000000000008352600483015260008260248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19182156105295761052792612463575b506123df565b806105216000612472936110c0565b3861245d565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757601c546124b381611130565b906124c160405192836110c0565b80825260208201601c6000527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2116000915b8383106125075760405180610b1c8782611998565b6002602060019260405161251a81611033565b73ffffffffffffffffffffffffffffffffffffffff865416815261253f85870161488d565b838201528152019201920191906124f2565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757601f546125a59060081c73ffffffffffffffffffffffffffffffffffffffff166102f1565b6125b0610315611101565b600060208201526125bf614c38565b60408201526000606082015260006080820152600060a0820152600060c08201526125e8612dba565b9061260b6114c960215473ffffffffffffffffffffffffffffffffffffffff1690565b612613612dda565b6020830152606460408301526114ff612efc565b346102275760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102275761265e610826565b67ffffffffffffffff81169081612679575b61052790615a37565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561022757604051917f4049ddd2000000000000000000000000000000000000000000000000000000008352600483015260008260248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af191821561052957610527926126f4575b50612670565b806105216000612703936110c0565b386126ee565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102275760195461274481611130565b9061275260405192836110c0565b808252601960009081527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b8383106127975760405180610b1c878261186f565b6001602081926127a685614137565b815201920192019190612782565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102275760206127ed615bc2565b6040519015158152f35b606435907fffffffff000000000000000000000000000000000000000000000000000000008216820361022757565b604435907fffffffff000000000000000000000000000000000000000000000000000000008216820361022757565b67ffffffffffffffff811161082157601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b81601f82011215610227578035906128a682612855565b926128b460405194856110c0565b8284526020838301011161022757816000926020809301838601378301015290565b346102275760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102275761290d610826565b60243560443561291c81610ef7565b6129246127f7565b9060843567ffffffffffffffff81116102275761294590369060040161288f565b9267ffffffffffffffff85169485612962575b6105279550615c8d565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561022757604051957f4049ddd2000000000000000000000000000000000000000000000000000000008752600487015260008660248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af195861561052957610527966129dd575b50612958565b8061052160006129ec936110c0565b386129d7565b346102275760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757612a29610826565b602435612a3581610ef7565b612a3d612826565b60643567ffffffffffffffff811161022757612a5d90369060040161288f565b9167ffffffffffffffff84169384612a7a575b6105279450615fff565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561022757604051947f4049ddd2000000000000000000000000000000000000000000000000000000008652600486015260008560248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19485156105295761052795612af5575b50612a70565b806105216000612b04936110c0565b38612aef565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102275760405180602060155491828152019060156000527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4759060005b818110612b8957610b1c85610b10818703826110c0565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201612b72565b346102275760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757612bec610826565b67ffffffffffffffff81169081612c07575b61052790616330565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561022757604051917f4049ddd2000000000000000000000000000000000000000000000000000000008352600483015260008260248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19182156105295761052792612c82575b50612bfe565b806105216000612c91936110c0565b38612c7c565b346102275760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757612cce610826565b67ffffffffffffffff81169081612ce9575b61052790616454565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561022757604051917f4049ddd2000000000000000000000000000000000000000000000000000000008352600483015260008260248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19182156105295761052792612d64575b50612ce0565b806105216000612d73936110c0565b38612d5e565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757602060ff601f54166040519015158152f35b60405190612dc78261104f565b6000604083828152606060208201520152565b60405190612de96020836110c0565b600080835282815b828110612dfd57505050565b602090604051612e0c81611033565b6000815260008382015282828501015201612df1565b60405160609190612e3383826110c0565b60028152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018260005b828110612e6a57505050565b602090604051612e7981611033565b6000815260008382015282828501015201612e5e565b60408051909190612ea083826110c0565b60018152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018260005b828110612ed757505050565b602090604051612ee681611033565b6000815260008382015282828501015201612ecb565b60408051909190612f0d83826110c0565b60018152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018260005b828110612f4457505050565b602090612f4f612dba565b82828501015201612f38565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805115612f975760200190565b612f5b565b805160011015612f975760400190565b805160021015612f975760600190565b8051821015612f975760209160051b010190565b60405190612fdf6020836110c0565b60008252565b60405190612ff46040836110c0565b600482527fdeadbeef000000000000000000000000000000000000000000000000000000006020830152565b6040513d6000823e3d90fd5b9073ffffffffffffffffffffffffffffffffffffffff82511681526020820151602082015260c08061306d604085015160e0604086015260e0850190610b6f565b936060810151606085015260808101511515608085015260a0810151151560a0850152015191015290565b90606081019173ffffffffffffffffffffffffffffffffffffffff815116825260208101519260606020840152835180915260206080840194019060005b8181106130ec5750505060408091015191015290565b909194602061310e600192885190602060409280518352015160208201520190565b96019291016130d6565b9061312b9060408352604083019061302c565b906020818303910152815180825260208201916020808360051b8301019401926000915b83831061315e57505050505090565b909192939460208061319a837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086600196030187528951613098565b9701930193019193929061314f565b908160809103126102275760405190608082019082821067ffffffffffffffff8311176108215760609160405280516131e181610ef7565b835260208101516020840152604081015160408401520151606082015290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b67ffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9116019067ffffffffffffffff821161326f57565b613201565b604051906132836040836110c0565b600482527f12345678000000000000000000000000000000000000000000000000000000006020830152565b906004917f123456780000000000000000000000000000000000000000000000000000000081526132e98251809360208685019101610b4c565b010190565b7fffffffff00000000000000000000000000000000000000000000000000000000600493921681526132e98251809360208685019101610b4c565b6040805190919061333a83826110c0565b60018152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018260005b82811061337157505050565b60209060405161338081611033565b6000815260608382015282828501015201613365565b604051608091906133a783826110c0565b60038152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018260005b8281106133de57505050565b6020906040516133ed81611033565b60008152606083820152828285010152016133d2565b604051906134126020836110c0565b600080835282815b82811061342657505050565b60209060405161343581611033565b600081526060838201528282850101520161341a565b60408051919061345b90836110c0565b60018252817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061348b6001611130565b019060005b82811061349c57505050565b6020906040516134ab8161106b565b6000815260008382015260006040820152600060608201526000608082015282828501015201613490565b604051906134e56020836110c0565b60008252817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06135156000611130565b019060005b82811061352657505050565b6020906040516135358161106b565b600081526000838201526000604082015260006060820152600060808201528282850101520161351a565b906020613571928181520190610b6f565b90565b6020818303126102275780519067ffffffffffffffff8211610227570160608183031261022757604051916135a88361104f565b81516135b381610ef7565b8352602082015167ffffffffffffffff811161022757820181601f82011215610227578051906135e282611130565b926135f060405194856110c0565b82845260208085019360061b8301019181831161022757602001925b82841061362a57505050509060409160208401520151604082015290565b604084830312610227576020604091825161364481611033565b86518152828701518382015281520193019261360c565b9080602083519182815201916020808360051b8301019401926000915b83831061368757505050505090565b90919293946020806136c3837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08660019603018752895161302c565b97019301930191939290613678565b906020808351928381520192019060005b8181106136f05750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016136e3565b805160ff1682526135719160208281015115159082015261010061377a6137546040850151610120604086015261012085019061365b565b606085015160608501526080850151608085015260a085015184820360a0860152610b6f565b9260c081015160c084015260e081015160e08401520151906101008184039101526136d2565b9080602083519182815201916020808360051b8301019401926000915b8383106137cc57505050505090565b90919293947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828203018352855190608060a082019273ffffffffffffffffffffffffffffffffffffffff8151168352602081015160208401526040810151604084015267ffffffffffffffff606082015116606084015201519160a06080830152825180915260c0820190602060c08260051b85010194019260005b82811061388a575050505050602080600192970193019301919392906137bd565b90919293947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4083820301855285516020606081604085019373ffffffffffffffffffffffffffffffffffffffff81511686520151936040838201528451809452019201906000905b8082106139115750505060208060019297019501910192919092613869565b909192835180511515825260208101519060048210156139605782608060a0926020948560019701526040810151604084015260608101516060840152015160808201520194019201906138f2565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9373ffffffffffffffffffffffffffffffffffffffff6135719694816139c16139e2969560e08a5260e08a019061371c565b94600060208a015216604088015216606086015284820360808601526137a0565b91600060a082015260c0818403910152613098565b9190613a15613a22613a1567ffffffffffffffff613a3e94166166d0565b67ffffffffffffffff1690565b9267ffffffffffffffff80613a3686613230565b1691166166fc565b91737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fe5d6bf0200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff92909216600483015260008260248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af191821561052957613ce092613e6d575b50613ac96167cd565b613b2e612137613ae9613ada613274565b604051928391602083016132af565b613af1611101565b6112348152906000602083015260408201526000606082015260006080820152600060a0820152600160c0820152604083015190611c2682612f8a565b50613d0c613c9b613b5460215473ffffffffffffffffffffffffffffffffffffffff1690565b93613c5a613b60613329565b67ffffffffffffffff613b71611121565b73ffffffffffffffffffffffffffffffffffffffff89168152931660208401526064604084015267ffffffffffffffff891660608401525b60808301908152613bdb613bbb61344b565b613bc3611112565b6112348152905b6020820152825190611c2682612f8a565b506020613c4d613be9611121565b92600084526000838501527f12345678000000000000000000000000000000000000000000000000000000006040850152600060608501527fffffffff00000000000000000000000000000000000000000000000000000000608085015251612f8a565b51015190611c2682612f8a565b50613c82613c66612dba565b73ffffffffffffffffffffffffffffffffffffffff9096168652565b613c8a612dda565b602086015260006040860152616893565b6040517fb1bbfdd500000000000000000000000000000000000000000000000000000000602082015267ffffffffffffffff9096166024870152949384906044820190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018552846110c0565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576000613d6093604051809581927ff28dceb300000000000000000000000000000000000000000000000000000000835260048301613560565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af192831561052957600093613e59575b50601f54613daf9060081c73ffffffffffffffffffffffffffffffffffffffff166102f1565b90613dcf60205473ffffffffffffffffffffffffffffffffffffffff1690565b90613e29613df260215473ffffffffffffffffffffffffffffffffffffffff1690565b94604051978896879586957fbbfa0b650000000000000000000000000000000000000000000000000000000087526004870161398f565b03915afa801561052957613e3a5750565b613e56903d806000833e613e4e81836110c0565b810190613574565b50565b8061052185613e67936110c0565b38613d89565b806105216000613e7c936110c0565b38613ac0565b602060408183019282815284518094520192019060005b818110613ea65750505090565b9091926020613ec8600192865190602060409280518352015160208201520190565b9401929101613e99565b9062015180820180921161326f57565b906001820180921161326f57565b9190820180921161326f57565b611c9c90613f41613f0c612dda565b6040519384917f42de141800000000000000000000000000000000000000000000000000000000602084015260248301613e82565b6140a2613f4c6167cd565b91613fd0613f766102f1601f5473ffffffffffffffffffffffffffffffffffffffff9060081c1690565b94613f7f611101565b73ffffffffffffffffffffffffffffffffffffffff87168152906001602083015260408201526000606082015260006080820152600060a0820152600160c0820152604085015190611c2682612f8a565b5061409c613ff360215473ffffffffffffffffffffffffffffffffffffffff1690565b94614000613a1542613ed2565b61405661400b613329565b9167ffffffffffffffff61401d611121565b73ffffffffffffffffffffffffffffffffffffffff8b168152965b1660208701526064604087015267ffffffffffffffff166060860152565b608084019081526140656134d6565b61408c614070611112565b73ffffffffffffffffffffffffffffffffffffffff9094168452565b60208301525190611c2682612f8a565b50616893565b916140ae610315612dba565b6140b6612dda565b602082015260006040820152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f540733ea000000000000000000000000000000000000000000000000000000006004820152916000838060248101613d60565b9060405191600081548060011c926001821691821561422f575b6020851083146142025784875286939260208501929181156141c65750600114614184575b5050611110925003836110c0565b614195919250600052602060002090565b906000915b8483106141af57506111109350013880614176565b80548284015286935060209092019160010161419a565b9050611110959293507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009150168252151560051b013880614176565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f1693614151565b90815461424581611130565b9261425360405194856110c0565b818452602084019060005260206000206000915b8383106142745750505050565b60016020819261428385614137565b815201920192019190614267565b906142b160215473ffffffffffffffffffffffffffffffffffffffff1690565b9173ffffffffffffffffffffffffffffffffffffffff831673ffffffffffffffffffffffffffffffffffffffff8216141591737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529215156004840152600083602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831561052957613ce0936144a2575b506144236143656167cd565b916143b7614371612fe5565b614379611101565b6112348152905b6000602083015260408201526000606082015260006080820152600060a0820152600160c0820152604085015190611c2682612f8a565b506144006143c7613a1542613ed2565b67ffffffffffffffff6143d8613329565b936140386143e4611121565b73ffffffffffffffffffffffffffffffffffffffff9099168952565b6080840190815261440f6134d6565b90614418611112565b61123481529161408c565b50613d0c614451614432612dba565b73ffffffffffffffffffffffffffffffffffffffff8716815293613c82565b6040517fc1e84ed600000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9096166024870152949384906044820190565b8061052160006144b1936110c0565b38614359565b90816020910312610227575190565b80511515737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529015156004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561052957614878575b50600581511161486f575b6000915b815183101561461c5761455c83613ee2565b82518110156146115761456f8484612fbc565b515161457b8285612fbc565b5151141590737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529115156004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215610529576001926145fc575b500161455c565b80610521600061460b936110c0565b386145f5565b50916001019161454a565b915061463d60205473ffffffffffffffffffffffffffffffffffffffff1690565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91909116600482015260008160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156105295761485a575b50601f546146eb9060081c73ffffffffffffffffffffffffffffffffffffffff166102f1565b803b1561022757600060405180927f42de141800000000000000000000000000000000000000000000000000000000825281838161472c8860048301613e82565b03925af1801561052957614845575b50906000916147666102f1601f5473ffffffffffffffffffffffffffffffffffffffff9060081c1690565b60205473ffffffffffffffffffffffffffffffffffffffff16935b825181101561483e5780602061479a6147f29386612fbc565b51516040517f23b3713e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89166004820152602481019190915292839081906044820190565b0381865afa9182156105295760019261481a91600091614820575b506020611f508488612fbc565b01614781565b614838915060203d8111611f8657611f7881836110c0565b3861480d565b5050509050565b806105216000614854936110c0565b3861473b565b806105216000614869936110c0565b386146c5565b60058152614546565b806105216000614887936110c0565b3861453b565b604051815480825290929183906148ad6020830191600052602060002090565b926000905b806007830110614aba57611110945491818110614a7e575b818110614a47575b818110614a10575b8181106149d9575b8181106149a2575b81811061496b575b818110614935575b10614908575b5003836110c0565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260200138614900565b602083811b7fffffffff0000000000000000000000000000000000000000000000000000000016855290936001910193016148fa565b604083901b7fffffffff000000000000000000000000000000000000000000000000000000001684529260019060200193016148f2565b606083901b7fffffffff000000000000000000000000000000000000000000000000000000001684529260019060200193016148ea565b608083901b7fffffffff000000000000000000000000000000000000000000000000000000001684529260019060200193016148e2565b60a083901b7fffffffff000000000000000000000000000000000000000000000000000000001684529260019060200193016148da565b60c083901b7fffffffff000000000000000000000000000000000000000000000000000000001684529260019060200193016148d2565b92602081614ab26001938660e01b7fffffffff00000000000000000000000000000000000000000000000000000000169052565b0193016148ca565b916008919350610100600191614c2a8754614af9838260e01b7fffffffff00000000000000000000000000000000000000000000000000000000169052565b60c081901b7fffffffff0000000000000000000000000000000000000000000000000000000016602084015260a081901b7fffffffff00000000000000000000000000000000000000000000000000000000166040840152608081901b7fffffffff00000000000000000000000000000000000000000000000000000000166060840152606081901b7fffffffff00000000000000000000000000000000000000000000000000000000166080840152604081901b7fffffffff000000000000000000000000000000000000000000000000000000001660a0840152602081901b7fffffffff000000000000000000000000000000000000000000000000000000001660c08401527fffffffff000000000000000000000000000000000000000000000000000000001660e0830152565b0194019201859293916148b2565b60405190614c476040836110c0565b600782527f696e76616c6964000000000000000000000000000000000000000000000000006020830152565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821161326f57565b9190820391821161326f57565b60405190614cbc6060836110c0565b602f82527f20746f20746f74616c2076616c756500000000000000000000000000000000006040837f46697273742063616c6c2073686f756c642061646420666972737456616c756560208201520152565b9373ffffffffffffffffffffffffffffffffffffffff613571969481614d40614d61969560e08a5260e08a019061371c565b94600160208a015216604088015216606086015284820360808601526137a0565b91600160a082015260c0818403910152613098565b60405190614d856060836110c0565b603182527f756520746f20746f74616c2076616c75650000000000000000000000000000006040837f5365636f6e642063616c6c2073686f756c6420616464207365636f6e6456616c60208201520152565b9373ffffffffffffffffffffffffffffffffffffffff613571969481614e09614e2a969560e08a5260e08a019061371c565b94600260208a015216604088015216606086015284820360808601526137a0565b91600260a082015260c0818403910152613098565b90614e80614e7a614e7a614eac939796977f5555555555555555555555555555555555555555555555555555555555555555928380926166fc565b966166fc565b93614e8b8685613ef0565b614ea6614ea187614e9c8a89613ef0565b613ef0565b614c73565b91616708565b90614eb5616832565b9361503d604051917f1234567800000000000000000000000000000000000000000000000000000000602084015260048352614ef26024846110c0565b614efa611101565b61123481529286602085015260408401526000606084015260006080840152600060a0840152600160c0840152614f3b6040880193845190611c2682612f8a565b50614fbe6040517f1234567800000000000000000000000000000000000000000000000000000000602082015260048152614f776024826110c0565b614f7f611101565b6156788152908a602083015260408201526000606082015260006080820152600060a0820152600160c0820152845190614fb882612f9c565b52612f9c565b506040517f1234567800000000000000000000000000000000000000000000000000000000602082015260048152614ff76024826110c0565b614fff611101565b619abc815291602083015260408201526000606082015260006080820152600060a0820152600160c082015282519061503782612fac565b52612fac565b5060215473ffffffffffffffffffffffffffffffffffffffff16926150b7615067613a1542613ed2565b61506f613396565b9267ffffffffffffffff615081611121565b73ffffffffffffffffffffffffffffffffffffffff8916815296166020870152604086015267ffffffffffffffff166060850152565b6080830190815260005b60038110615701575050506150d590616893565b80946151916000846150e5612dba565b73ffffffffffffffffffffffffffffffffffffffff82168152615106612dda565b60208201528260408201526151376102f1601f5473ffffffffffffffffffffffffffffffffffffffff9060081c1690565b908961515860205473ffffffffffffffffffffffffffffffffffffffff1690565b958692604051998a96879586957fbbfa0b650000000000000000000000000000000000000000000000000000000087526004870161398f565b03915afa928315610529576000936156e4575b506151bc6040840151866151b6614cad565b91616a4a565b6151c4612e8f565b9360405161521181612137602082019485602073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee9193929373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b51902061521c611112565b90815285602082015261522e85612f8a565b5261523884612f8a565b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91909116600482015260008160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015610529576156cf575b50601f546152e79060081c73ffffffffffffffffffffffffffffffffffffffff166102f1565b93843b1561022757600060405180967f42de14180000000000000000000000000000000000000000000000000000000082528183816153298a60048301613e82565b03925af19485156105295787956156ba575b5060006153646102f1601f5473ffffffffffffffffffffffffffffffffffffffff9060081c1690565b9361538460205473ffffffffffffffffffffffffffffffffffffffff1690565b9485896153e06153a960215473ffffffffffffffffffffffffffffffffffffffff1690565b946040519b8c96879586957fbbfa0b6500000000000000000000000000000000000000000000000000000000875260048701614d0e565b03915afa94851561052957600095615697575b509061541391614e9c604087015161540b8484613ef0565b6151b6614d76565b602061541e84612f8a565b510152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91909116600482015260008160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561052957615682575b50601f546154cf9060081c73ffffffffffffffffffffffffffffffffffffffff166102f1565b803b15610227576155146000929183926040519485809481937f42de141800000000000000000000000000000000000000000000000000000000835260048301613e82565b03925af180156105295761566d575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527faa7feadc0000000000000000000000000000000000000000000000000000000060048201529160008360248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af192831561052957600093615659575b50601f546155df9060081c73ffffffffffffffffffffffffffffffffffffffff166102f1565b906155ff60205473ffffffffffffffffffffffffffffffffffffffff1690565b90613e2961562260215473ffffffffffffffffffffffffffffffffffffffff1690565b94604051978896879586957fbbfa0b6500000000000000000000000000000000000000000000000000000000875260048701614dd7565b8061052185615667936110c0565b386155b9565b80610521600061567c936110c0565b38615523565b806105216000615691936110c0565b386154a9565b615413929195506156b2903d806000833e613e4e81836110c0565b9490916153f3565b8061052160006156c9936110c0565b3861533b565b8061052160006156de936110c0565b386152c1565b6156fa9193503d806000833e613e4e81836110c0565b91386151a4565b80615778816157316157166001958851612fbc565b515173ffffffffffffffffffffffffffffffffffffffff1690565b61573961344b565b615760615744611112565b73ffffffffffffffffffffffffffffffffffffffff9093168352565b60208201528551906157728383612fbc565b52612fbc565b506157ef615784611121565b60008152600060208201527f12345678000000000000000000000000000000000000000000000000000000006040820152600060608201527fffffffff0000000000000000000000000000000000000000000000000000000060808201526020613c4d848751612fbc565b50016150c1565b6157fe6167cd565b6140a26158276102f1601f5473ffffffffffffffffffffffffffffffffffffffff9060081c1690565b92613fd060405161586381612137602082016004907fdeadbeef0000000000000000000000000000000000000000000000000000000081520190565b61586b611101565b73ffffffffffffffffffffffffffffffffffffffff8716815290614380565b615892613274565b6158f86121376158b36158a36167cd565b93604051928391602083016132af565b6158bb611101565b6112348152906014602083015260408201526000606082015260006080820152600060a0820152600160c0820152604083015190611c2682612f8a565b506159c161591b60215473ffffffffffffffffffffffffffffffffffffffff1690565b9261598061592b613a1542613ed2565b613ba9615936613329565b9167ffffffffffffffff615948611121565b73ffffffffffffffffffffffffffffffffffffffff8a16815295166020860152600a604086015267ffffffffffffffff166060850152565b506159a861598c612dba565b73ffffffffffffffffffffffffffffffffffffffff9095168552565b6159b0612dda565b602085015260006040850152616893565b91737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527faa7feadc000000000000000000000000000000000000000000000000000000006004820152916000838060248101613d60565b61571690615b4c615a466167cd565b91615980615a52612fe5565b91615a5b611101565b61dead8152926000602085015260408401526000606084015260006080840152600060a0840152600160c0840152615a9d6040860193845190611c2682612f8a565b50613bdb615b39615ac360215473ffffffffffffffffffffffffffffffffffffffff1690565b978895615b2c615ad5613a1542613ed2565b67ffffffffffffffff615ae6613329565b97615b0e615af2611121565b73ffffffffffffffffffffffffffffffffffffffff909c168c52565b1660208a0152600060408a015267ffffffffffffffff166060890152565b6080870194855251612f8a565b615b4161344b565b613bca615744611112565b91737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f868a64de000000000000000000000000000000000000000000000000000000006004820152916000838060248101613d60565b60085460ff168015615bd15790565b506040517f667f9d7000000000000000000000000000000000000000000000000000000000815260208180600481017f6661696c65640000000000000000000000000000000000000000000000000000846040830192737109709ecfa91a80626ff3989d68f67f5b1dd12d815201520381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561052957600091615c6e575b50151590565b615c87915060203d602011611f8657611f7881836110c0565b38615c68565b9390615c9b909392936165b6565b93737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517f4c63e56200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff919091168514156004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561052957615faf575b50615d446102f16102f1601f5473ffffffffffffffffffffffffffffffffffffffff9060081c1690565b73ffffffffffffffffffffffffffffffffffffffff8416141591737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529215156004840152600083602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831561052957613ce094613c5a613d0c93615f5f93615ef197615f9a575b50615e5f612137615e06615df56167cd565b9860405192839186602084016132ee565b615e0e611101565b73ffffffffffffffffffffffffffffffffffffffff86168152906000602083015260408201526000606082015260006080820152600060a0820152600160c0820152604088015190611c2682612f8a565b506020613c4d8a615e8560215473ffffffffffffffffffffffffffffffffffffffff1690565b998a96615ec7615e97613a1542613ed2565b615e9f613329565b94615eab615af2611121565b8a880152600060408b015267ffffffffffffffff1660608a0152565b60808801928352615ed661344b565b615ee1615744611112565b85820152825190611c2682612f8a565b507fffffffff00000000000000000000000000000000000000000000000000000000615f1b611121565b9460008652600085870152166040850152600060608501527fffffffff00000000000000000000000000000000000000000000000000000000608085015251612f8a565b946040519485917f331003b3000000000000000000000000000000000000000000000000000000006020840152602483019190602083019252565b806105216000615fa9936110c0565b38615de3565b806105216000615fbe936110c0565b38615d1a565b60405190615fd36040836110c0565b601a82527f746f74616c56616c7565557365642073686f756c6420626520300000000000006020830152565b91906160276102f1601f5473ffffffffffffffffffffffffffffffffffffffff9060081c1690565b9073ffffffffffffffffffffffffffffffffffffffff821673ffffffffffffffffffffffffffffffffffffffff8216141593737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529415156004860152600085602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa938415610529576020613c4d61623e936000986161d39861631c575b506161516121376160fd6160ed6167cd565b9c604051928391898984016132ee565b616105611101565b73ffffffffffffffffffffffffffffffffffffffff89168152908b8683015260408201528a60608201528a60808201528a60a0820152600160c082015260408c015190611c2682612f8a565b5060215473ffffffffffffffffffffffffffffffffffffffff16978896615ec761617d613a1542613ed2565b67ffffffffffffffff61618e613329565b956161b661619a611121565b73ffffffffffffffffffffffffffffffffffffffff909d168d52565b168a88015260408a018d905267ffffffffffffffff1660608a0152565b507fffffffff000000000000000000000000000000000000000000000000000000006161fd611121565b948a86528a858701521660408501528860608501527fffffffff00000000000000000000000000000000000000000000000000000000608085015251612f8a565b5061627c61624a612dba565b73ffffffffffffffffffffffffffffffffffffffff851681529161626c612dda565b6020840152856040840152616893565b946162d661629f60205473ffffffffffffffffffffffffffffffffffffffff1690565b92604051978896879586957fbbfa0b650000000000000000000000000000000000000000000000000000000087526004870161398f565b03915afa9081156105295761111091604091600091616301575b5001516162fb615fc4565b906169a9565b61631691503d806000833e613e4e81836110c0565b386162f0565b806105218b61632a936110c0565b386160db565b616338613274565b616349612137613ae96158a36167cd565b506163de61636c60215473ffffffffffffffffffffffffffffffffffffffff1690565b92616379613a1542613ed2565b6163ce616384613403565b9167ffffffffffffffff616396611121565b73ffffffffffffffffffffffffffffffffffffffff89168152941660208501526064604085015267ffffffffffffffff166060840152565b60808201526159a861598c612dba565b91737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f3f904dc0000000000000000000000000000000000000000000000000000000006004820152916000838060248101613d60565b61645c6167cd565b6164b861213761646d613ada613274565b616475611101565b6112348152906000602083015260408201526000606082015261649b6080820160019052565b600060a0820152600160c0820152604083015190611c2682612f8a565b506165406164db60215473ffffffffffffffffffffffffffffffffffffffff1690565b926159806164eb613a1542613ed2565b613ba96164f6613329565b9167ffffffffffffffff616508611121565b73ffffffffffffffffffffffffffffffffffffffff8a168152951660208601526064604086015267ffffffffffffffff166060850152565b91737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527faa25f2ad000000000000000000000000000000000000000000000000000000006004820152916000838060248101613d60565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60016165e292616b9c565b90600080604061666061669282516165fa84826110c0565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152835192839160208301957fb60e72cc00000000000000000000000000000000000000000000000000000000875260248401526064830190610b6f565b886044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826110c0565b51906a636f6e736f6c652e6c6f675afa50565b6165e2917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91616b9c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60026165e292616b9c565b9060016165e292616b9c565b906165e29291616b9c565b604051906167226020836110c0565b6000808352366020840137565b9061673982611130565b61674660405191826110c0565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06167748294611130565b019060005b82811061678557505050565b60209060405161679481611087565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c082015282828501015201616779565b604051906167da826110a3565b60008083526060604084018181528185018390526080850183905260a0850182905260c0850183905260e0850192909252610100840190815260016020850152616822616713565b905261682e600161672f565b9052565b6040519061683f826110a3565b60008083526060604084018181528185018390526080850183905260a0850182905260c0850183905260e0850192909252610100840190815260016020850152616887616713565b905261682e600361672f565b6040908151916168a381846110c0565b600183527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019060005b8281106168ef575050506168e182612f8a565b526168eb81612f8a565b5090565b60209082516168fd8161106b565b600081526000838201526000848201526000606082015260606080820152828288010152016168ce565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561022757604051917f98296c5400000000000000000000000000000000000000000000000000000000835260048301526024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156105295761699e5750565b6000611110916110c0565b90600091737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15616a4657616a1591839160405193849283927f88b44c850000000000000000000000000000000000000000000000000000000084526004840152846024840152606060448401526064830190610b6f565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561052957616a3c575050565b81613e56916110c0565b8280fd5b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561022757600091616ab260405194859384937f88b44c8500000000000000000000000000000000000000000000000000000000855260048501526024840152606060448401526064830190610b6f565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156105295761699e5750565b15616adf57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374645574696c7320626f756e642875696e743235362c75696e743235362c7560448201527f696e74323536293a204d6178206973206c657373207468616e206d696e2e00006064820152fd5b8115616b6d570690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600090616bab84841115616ad8565b82811091821580616cc0575b616cb857616bcd616bc88587614ca0565b613ee2565b92600383111580616caf575b616ca0577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83101580616c96575b616c855785831115616c4357505090616c2384616c2893614ca0565b616b63565b918215616c3d575061357191614ea191613ef0565b91505090565b959492919095616c54575b50505050565b83949550616c2390616c669394614ca0565b918215616c3d5750616c7b91616bc891614ca0565b9038808080616c4e565b505090506135719291501990614ca0565b5082198411616c07565b50509190506135719250613ef0565b50828411616bd9565b509250505090565b5084821115616bb756fe60808060405234601557611955908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c806323b3713e14610077578063313dade71461007257806342de14181461006d57806375a5627b14610068578063bbfa0b65146100635763f916f3b21461005e57600080fd5b6109ab565b6108c2565b6105af565b6104d8565b610411565b346100ef5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef576004356100b2816100f4565b73ffffffffffffffffffffffffffffffffffffffff6024359116600052600060205260406000209060005260205260406000205460805260206080f35b600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116036100ef57565b6044359061011f826100f4565b565b6064359061011f826100f4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff82111761017957604052565b61012e565b60a0810190811067ffffffffffffffff82111761017957604052565b6060810190811067ffffffffffffffff82111761017957604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761017957604052565b6040519061011f6040836101b6565b67ffffffffffffffff81116101795760051b60200190565b801515036100ef57565b91906040838203126100ef576040516102408161015d565b8093803561024d816100f4565b825260208101359067ffffffffffffffff82116100ef570182601f820112156100ef5780359061027c82610206565b9361028a60405195866101b6565b828552602060a08187019402830101918183116100ef57602001925b8284106102b7575050505060200152565b60a0848303126100ef57604051906102ce8261017e565b84356102d98161021e565b825260208501359060048210156100ef57826020928360a09501526040870135604082015260608701356060820152608087013560808201528152019301926102a6565b908160e09103126100ef5790565b81601f820112156100ef5780359061034282610206565b9261035060405194856101b6565b82845260208085019360061b830101918183116100ef57602001925b82841061037a575050505090565b6040848303126100ef57602060409182516103948161015d565b86358152828701358382015281520193019261036c565b906020808351928381520192019060005b8181106103c95750505090565b90919260206103eb600192865190602060409280518352015160208201520190565b94019291016103bc565b60409061040e93921515815281602082015201906103ab565b90565b346100ef5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef5760043567ffffffffffffffff81116100ef57610460903690600401610228565b60243567ffffffffffffffff81116100ef5761048090369060040161031d565b9060443561048d816100f4565b6064359061049a826100f4565b6084359367ffffffffffffffff85116100ef576104be6104c495369060040161032b565b93610c6d565b906104d4604051928392836103f5565b0390f35b346100ef5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef5760043567ffffffffffffffff81116100ef57366023820112156100ef57806004013567ffffffffffffffff81116100ef573660248260061b840101116100ef5760246105539201610ffb565b005b9190916060818403126100ef576040519061056f8261019a565b8193813561057c816100f4565b835260208201359167ffffffffffffffff83116100ef576105a3604093928493830161032b565b60208501520135910152565b346100ef5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef5760043567ffffffffffffffff81116100ef576105fe90369060040161031d565b60243567ffffffffffffffff81116100ef57366023820112156100ef5780600401359161062a83610206565b9161063860405193846101b6565b8383526024602084019460051b820101903682116100ef5760248101945b8286106106675761055385856111c2565b853567ffffffffffffffff81116100ef5760209161068c839260243691870101610555565b815201950194610656565b9080601f830112156100ef5781356106ae81610206565b926106bc60405194856101b6565b81845260208085019260051b820101918383116100ef5760208201905b8382106106e857505050505090565b813567ffffffffffffffff81116100ef5760209161070b87848094880101610228565b8152019101906106d9565b9080601f830112156100ef5781359161072e83610206565b9261073c60405194856101b6565b80845260208085019160051b830101918383116100ef5760208101915b83831061076857505050505090565b823567ffffffffffffffff81116100ef5782019060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe083880301126100ef57604051906107b58261017e565b60208301356107c3816100f4565b82526040830135602083015260608301356040830152608083013567ffffffffffffffff811681036100ef57606083015260a08301359167ffffffffffffffff83116100ef5761081b88602080969581960101610697565b6080820152815201920191610759565b60a4359060ff821682036100ef57565b60208152608081019173ffffffffffffffffffffffffffffffffffffffff8151166020830152602081015192606060408401528351809152602060a0840194019060005b818110610896575050506040606091015191015290565b90919460206108b8600192885190602060409280518352015160208201520190565b960192910161087f565b346100ef5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef5760043567ffffffffffffffff81116100ef576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126100ef576024359061093c610112565b90610945610121565b60843567ffffffffffffffff81116100ef57610965903690600401610716565b61096d61082b565b9160c4359467ffffffffffffffff86116100ef576104d49661099661099f973690600401610555565b95600401611107565b6040519182918261083b565b346100ef5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef57602060405173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8152f35b3561040e816100f4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9060018201809211610a3f57565b610a02565b91908201809211610a3f57565b60405190610a5e8261015d565b60006020838281520152565b90610a7482610206565b610a8160405191826101b6565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610aaf8294610206565b019060005b828110610ac057505050565b602090610acb610a51565b82828501015201610ab4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8051821015610b1a5760209160051b010190565b610ad7565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156100ef570180359067ffffffffffffffff82116100ef576020019181360383136100ef57565b60041115610b7a57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9392919073ffffffffffffffffffffffffffffffffffffffff16845260606020850152602060a085019173ffffffffffffffffffffffffffffffffffffffff81511660608701520151604060808601528051809252602060c0860191019160005b818110610c1c57505060409150930152565b909183518051151582526020810151906004821015610b7a5782608060a092602094856001970152604081015160408401526060810151606084015201516080820152019401910192919092610c0a565b949091929394610c91815173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff610ccb610cb2866109f8565b73ffffffffffffffffffffffffffffffffffffffff1690565b911603610fe057855192610cee610ce9602084019586515190610a44565b610a6a565b9460005b8851811015610d255780610d086001928b610b06565b51610d13828a610b06565b52610d1e8189610b06565b5001610cf2565b50909294919395875160005b88518051821015610fcf5781610d4691610b06565b51610d6a610d576040890189610b1f565b5060608301519081013591602090910190565b5060808201511690610d7c8151151590565b610e4f575b602081018051610d9081610b70565b610d9981610b70565b610dbf57506040015103610db1576001905b01610d31565b506000989750505050505050565b60038151610dcc81610b70565b610dd581610b70565b03610dec57506040015110610db157600190610dab565b60018151610df981610b70565b610e0281610b70565b03610e1957506040015114610db157600190610dab565b60029051610e2681610b70565b610e2f81610b70565b14610e3f575b5050600190610dab565b6040015111610db1573880610e35565b9691989795929093998a610e72610e9e8c6040519283918c602084019687610ba9565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826101b6565b51902096600093610ead610a51565b9c60005b8751811015610fb757610ec48189610b06565b515115610f6a578a610ed6828a610b06565b515114610ee557600101610eb1565b6020949e50879a9198939c9d9650610f0390610f18939c9698610b06565b519284840151915b8215610f23575b50610a44565b918291015290610d81565b610f62919250610f538b73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b90600052602052604060002090565b549038610f12565b6020949e50610f18929b955097610fb189899c99959e9f98939a610fab90610f906101f7565b978c895260008a8a015288610fa58383610b06565b52610b06565b50610a31565b97610f0b565b5096946020939d929b9c95610f18929b95979a610f0b565b505083525060019650909450505050565b509250505060009190565b9190811015610b1a5760061b0190565b33919060005b82811061100e5750505050565b602061101b828585610feb565b0135611028828585610feb565b35336000526000602052604060002090600052602052604060002054116110be57807f42063b8d32ac0a88f94053143bb30a789b3d5dfabb27d6c8a54e23d4fef30851606061107a6001948787610feb565b356020611088858989610feb565b0135886000526000602052604060002082600052602052806040600020556040519189835260208301526040820152a101611001565b7e2a700a0000000000000000000000000000000000000000000000000000000060005260046000fd5b604051906110f48261019a565b6000604083828152606060208201520152565b9061040e9695949392916111196110e7565b50611562565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610a3f5760010190565b90602061040e9281815201906103ab565b92919267ffffffffffffffff821161017957604051916111a560207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601846101b6565b8294818452818301116100ef578281602093846000960137010152565b9080516111cd575050565b6111d6826109f8565b73ffffffffffffffffffffffffffffffffffffffff163014801590611413575b6110be57600092835b8251851015611254576112229060206112188786610b06565b5101515190610a44565b93604061122f8285610b06565b510151611240575b600101936111ff565b9361124c60019161111f565b949050611237565b61126091939450610a6a565b60009081935b83518510156113a85760005b602061127e8787610b06565b510151518110156112cb57806112c46112a7600193602061129f8b8b610b06565b510151610b06565b51956112b28161111f565b966112bd8288610b06565b5285610b06565b5001611272565b50949360019060406112dd8287610b06565b5101516112ed575b019394611266565b6113a26113186112fd8388610b06565b515173ffffffffffffffffffffffffffffffffffffffff1690565b60405161136481610e72602082019485602073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee9193929373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b5190209460406113748489610b06565b51015161137f6101f7565b96875260208701526113908161111f565b9561139b8287610b06565b5284610b06565b506112e5565b94935061140592506113fe91506040516113f081610e7260208201947f42de14180000000000000000000000000000000000000000000000000000000086526024830161114c565b519020926040810190610b1f565b369161115d565b60208151910120036110be57565b50600160c083013514156111f6565b6040519061142f8261017e565b60606080836000815260006020820152600060408201526000838201520152565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156100ef570180359067ffffffffffffffff82116100ef57602001918160051b360383136100ef57565b9190811015610b1a5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21813603018212156100ef570190565b3561040e8161021e565b906004116100ef5790600490565b919091357fffffffff0000000000000000000000000000000000000000000000000000000081169260048110611530575050565b7fffffffff00000000000000000000000000000000000000000000000000000000929350829060040360031b1b161690565b939594909291926115716110e7565b5061157a611422565b9660005b8151811015611911576115946112fd8284610b06565b73ffffffffffffffffffffffffffffffffffffffff8087169116146115bb5760010161157e565b906115cc9293949596979850610b06565b51945b73ffffffffffffffffffffffffffffffffffffffff611602875173ffffffffffffffffffffffffffffffffffffffff1690565b16156118cd576020860151801515806118c3575b6118965750606086015167ffffffffffffffff1680151580611883575b61184c57509061164a826040611650940190611450565b906114a4565b9161165d608084016114e4565b6118225761166a836109f8565b73ffffffffffffffffffffffffffffffffffffffff163014611770576080850160ff815151931692831015611746576116b7926116a79151610b06565b5190602087019484865193610c6d565b901561171c5760209252013580611705575b50604080830151910151106116db5790565b7faa7feadc0000000000000000000000000000000000000000000000000000000060005260046000fd5b61171460408401918251610a44565b9052386116c9565b7f868a64de0000000000000000000000000000000000000000000000000000000060005260046000fd5b7f3f904dc00000000000000000000000000000000000000000000000000000000060005260046000fd5b5050915050602061179661179061178a6040850185610b1f565b906114ee565b906114fc565b91013515908115916117d5575b506117ab5790565b7f540733ea0000000000000000000000000000000000000000000000000000000060005260046000fd5b7f42de14180000000000000000000000000000000000000000000000000000000091507fffffffff00000000000000000000000000000000000000000000000000000000161415386117a3565b7faa25f2ad0000000000000000000000000000000000000000000000000000000060005260046000fd5b7fb1bbfdd50000000000000000000000000000000000000000000000000000000060005267ffffffffffffffff1660045260246000fd5b5067ffffffffffffffff81164211611633565b7f331003b30000000000000000000000000000000000000000000000000000000060005260045260246000fd5b5046811415611616565b7fc1e84ed60000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff841660045260246000fd5b5050909192939594956115cf56fea26469706673582212201dc8207dc5c95b04a2aa9930defb11873e5847a457c45044785f4da312d07e8564736f6c634300081c0033a26469706673582212209b73f1e34c65b77f015b561ec5abdd95c2bfc71247643b1a71bb09f6327b3b0064736f6c634300081c0033","sourceMap":"766:27655:83:-:0;;;;;;;3166:4:5;766:27655:83;;3166:4:5;766:27655:83;;;3166:4:5;766:27655:83;3166:4:5;766:27655:83;;1087:4:16;766:27655:83;;;1087:4:16;766:27655:83;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436101561001257600080fd5b60003560e01c806303a7f7cd146102175780630a9254e41461021257806315b4cfcc1461020d5780631cf4449c146102085780631ed7831c146102035780632ade3880146101fe5780633e5e3c23146101f95780633f7286f4146101f45780634f40fc4f146101ef578063512e9ee2146101ea57806366d9a9a0146101e557806373f7d27c146101e05780637c446162146101db57806385226c81146101d6578063916a17c6146101d15780639729cadc146101cc5780639ee306ed146101c75780639f7f8430146101c2578063a2e84088146101bd578063ad4d5bf7146101b8578063ae0d51a5146101b3578063b0464fdc146101ae578063b125aa50146101a9578063b53bc950146101a4578063b5508aa91461019f578063ba414fa61461019a578063c194a6c514610195578063cae9ba8014610190578063e20c9f711461018b578063eeb801f314610186578063f95a0554146101815763fa7626d41461017c57600080fd5b612d79565b612c97565b612bb5565b612b0a565b6129f2565b6128d6565b6127b4565b612709565b612627565b612551565b612478565b612396565b6122b4565b6121c3565b611fc0565b611ce7565b611b16565b611a3d565b6118ed565b611587565b611432565b611368565b61125e565b610f15565b610e4c565b610da1565b610cc8565b610a91565b61095f565b61086b565b610558565b61022c565b600091031261022757565b600080fd5b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757610263612dba565b61029f61028560215473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff168252565b6102a7612dda565b6020820152606460408201526102bb612efc565b906102c582612f8a565b526102cf81612f8a565b50601f5461030a9060081c73ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff1690565b610331610315611101565b73ffffffffffffffffffffffffffffffffffffffff9092168252565b60006020820152610340612fe5565b60408201526000606082015260006080820152600060a0820152600160c0820152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527e2a700a00000000000000000000000000000000000000000000000000000000600482015260008180602481015b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561052957610543575b5060205473ffffffffffffffffffffffffffffffffffffffff165b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91909116600482015260008160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156105295761052e575b50601f546104be9060081c73ffffffffffffffffffffffffffffffffffffffff166102f1565b91823b1561022757610502926000926040518095819482937f75a5627b00000000000000000000000000000000000000000000000000000000845260048401613118565b03915afa80156105295761051257005b806105216000610527936110c0565b8061021c565b005b613020565b80610521600061053d936110c0565b38610498565b806105216000610552936110c0565b386103f5565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102275760405161197080820182811067ffffffffffffffff821117610821578291616ccb833903906000f0801561052957610600907fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00601f549260081b16911617601f55565b6040517f7404f1d200000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f77616c6c6574000000000000000000000000000000000000000000000000000060448201526080816064816000737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115610529576106ec916106ab91600091610802575b505173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff00000000000000000000000000000000000000006020541617602055565b6040517f7404f1d200000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f73657373696f6e0000000000000000000000000000000000000000000000000060448201526080816064816000737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561052957610527916000916107d3575b5060609073ffffffffffffffffffffffffffffffffffffffff8151167fffffffffffffffffffffffff00000000000000000000000000000000000000006021541617602155602081015160225560408101516023550151602455565b6107f5915060803d6080116107fb575b6107ed81836110c0565b8101906131a9565b38610777565b503d6107e3565b61081b915060803d6080116107fb576107ed81836110c0565b38610690565b611004565b6004359067ffffffffffffffff8216820361022757565b6024359067ffffffffffffffff8216820361022757565b6044359067ffffffffffffffff8216820361022757565b346102275760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610227576108a2610826565b6108aa61083d565b6108b2610854565b9067ffffffffffffffff831692836108cf575b61052793506139f7565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561022757604051937f4049ddd2000000000000000000000000000000000000000000000000000000008552600485015260008460248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1938415610529576105279461094a575b506108c5565b806105216000610959936110c0565b38610944565b346102275760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757610996610826565b67ffffffffffffffff811690816109b1575b61052790613efd565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561022757604051917f4049ddd2000000000000000000000000000000000000000000000000000000008352600483015260008260248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19182156105295761052792610a2c575b506109a8565b806105216000610a3b936110c0565b38610a26565b602060408183019282815284518094520192019060005b818110610a655750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101610a58565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102275760405180602060165491828152019060166000527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b51242899060005b818110610b2057610b1c85610b10818703826110c0565b60405191829182610a41565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610af9565b60005b838110610b5f5750506000910152565b8181015183820152602001610b4f565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093610bab81518092818752878088019101610b4c565b0116010190565b602081016020825282518091526040820190602060408260051b8501019401916000905b828210610be557505050505090565b9091929395947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08782030182528451906020604082019273ffffffffffffffffffffffffffffffffffffffff81511683520151916040602083015282518091526060820190602060608260051b85010194019260005b828110610c7f57505050505060208060019296019201920190929195939495610bd6565b9091929394602080610cbb837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa087600196030189528951610b6f565b9701950193929101610c5b565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757601e54610d0381611130565b90610d1160405192836110c0565b80825260208201601e6000527f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e3506000915b838310610d575760405180610b1c8782610bb2565b60026020600192604051610d6a81611033565b73ffffffffffffffffffffffffffffffffffffffff8654168152610d8f858701614239565b83820152815201920192019190610d42565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102275760405180602060185491828152019060186000527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e9060005b818110610e2057610b1c85610b10818703826110c0565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610e09565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102275760405180602060175491828152019060176000527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c159060005b818110610ecb57610b1c85610b10818703826110c0565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610eb4565b73ffffffffffffffffffffffffffffffffffffffff81160361022757565b346102275760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757600435610f5081610ef7565b610f5861083d565b67ffffffffffffffff81169182610f74575b6105279250614291565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561022757604051927f4049ddd2000000000000000000000000000000000000000000000000000000008452600484015260008360248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19283156105295761052793610fef575b50610f6a565b806105216000610ffe936110c0565b38610fe9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff82111761082157604052565b6060810190811067ffffffffffffffff82111761082157604052565b60a0810190811067ffffffffffffffff82111761082157604052565b60e0810190811067ffffffffffffffff82111761082157604052565b610120810190811067ffffffffffffffff82111761082157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761082157604052565b6040519061111060e0836110c0565b565b604051906111106040836110c0565b6040519061111060a0836110c0565b67ffffffffffffffff81116108215760051b60200190565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6040910112610227576040519061117f82611033565b60043582526024356020830152565b9190826040910312610227576040516111a681611033565b6020808294803584520135910152565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126102275760043567ffffffffffffffff8111610227578160238201121561022757806004013561120b81611130565b9261121960405194856110c0565b8184526024602085019260061b8401019281841161022757602401915b838310611244575050505090565b6020604091611253848661118e565b815201920191611236565b346102275761052761126f366111b6565b6144c6565b906020808351928381520192019060005b8181106112925750505090565b82517fffffffff0000000000000000000000000000000000000000000000000000000016845260209384019390920191600101611285565b602081016020825282518091526040820191602060408360051b8301019401926000915b8383106112fd57505050505090565b9091929394602080611359837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08660019603018752895190836113498351604084526040840190610b6f565b9201519084818403910152611274565b970193019301919392906112ee565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757601b546113a381611130565b906113b160405192836110c0565b80825260208201601b6000527f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc16000915b8383106113f75760405180610b1c87826112ca565b6002602060019260405161140a81611033565b61141386614137565b815261142085870161488d565b838201528152019201920191906113e2565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757611469611101565b61dead81526000602082015261147d614c38565b60408201526000606082015260006080820152600060a0820152600160c08201526114a6612dba565b906114e36114c960215473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff168352565b6114eb612dda565b6020830152603260408301526114ff612efc565b9161150983612f8a565b5261151382612f8a565b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527e2a700a00000000000000000000000000000000000000000000000000000000600482015260008180602481016103d0565b346102275760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610227576115bf36611148565b6020810180511515737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529015156004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156105295761185a575b50611662611644612e22565b928061164f85612f8a565b5261165984612f8a565b50519151614c73565b61166a611112565b918252602082015261167b82612f9c565b5261168581612f9c565b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527e2a700a00000000000000000000000000000000000000000000000000000000600482015260008160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561052957611845575b5060205473ffffffffffffffffffffffffffffffffffffffff16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91909116600482015260008160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561052957611830575b50601f546117dd9060081c73ffffffffffffffffffffffffffffffffffffffff166102f1565b803b15610227576040517f42de14180000000000000000000000000000000000000000000000000000000081529060009082908183816118208860048301613e82565b03925af180156105295761051257005b80610521600061183f936110c0565b386117b7565b806105216000611854936110c0565b38611715565b806105216000611869936110c0565b38611638565b602081016020825282518091526040820191602060408360051b8301019401926000915b8383106118a257505050505090565b90919293946020806118de837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187528951610b6f565b97019301930191939290611893565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757601a5461192881611130565b9061193660405192836110c0565b808252601a60009081527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b83831061197b5760405180610b1c878261186f565b60016020819261198a85614137565b815201920192019190611966565b602081016020825282518091526040820191602060408360051b8301019401926000915b8383106119cb57505050505090565b9091929394602080611a2e837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190611274565b970193019301919392906119bc565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757601d54611a7881611130565b90611a8660405192836110c0565b80825260208201601d6000527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f6000915b838310611acc5760405180610b1c8782611998565b60026020600192604051611adf81611033565b73ffffffffffffffffffffffffffffffffffffffff8654168152611b0485870161488d565b83820152815201920192019190611ab7565b346102275760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757611b4e36611148565b60208101611b5c81516165b6565b9052601f54611b839060081c73ffffffffffffffffffffffffffffffffffffffff166102f1565b611b8e610315611101565b60006020820152611c9c611ba0612fd0565b604083019081526000606084015260006080840152600060a0840152600160c0840152611cc8611bce612dba565b94611c0b611bf160215473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff168752565b611c2c611c16612e8f565b80602089015282611c2682612f8a565b52612f8a565b50611c35612efc565b95611c3f87612f8a565b52611c4986612f8a565b50611c52612e8f565b90611c5c82612f8a565b52611c6681612f8a565b506040519384917f42de141800000000000000000000000000000000000000000000000000000000602084015260248301613e82565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018452836110c0565b5260205473ffffffffffffffffffffffffffffffffffffffff16610410565b3461022757611cf5366111b6565b6005815111611fb7575b611d08816144c6565b60005b8151811015611d535780611d3e6020611d2660019486612fbc565b5101516020611d358487612fbc565b510151906166a5565b6020611d4a8386612fbc565b51015201611d0b565b5060205473ffffffffffffffffffffffffffffffffffffffff16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91909116600482015260008160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561052957611fa2575b50601f54611e1b9060081c73ffffffffffffffffffffffffffffffffffffffff166102f1565b803b1561022757600060405180927f42de1418000000000000000000000000000000000000000000000000000000008252818381611e5c8860048301613e82565b03925af1801561052957611f8d575b50600090611e956102f1601f5473ffffffffffffffffffffffffffffffffffffffff9060081c1690565b90611eb560205473ffffffffffffffffffffffffffffffffffffffff1690565b925b815181101561052757806020611ed0611f289385612fbc565b51516040517f23b3713e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88166004820152602481019190915292839081906044820190565b0381875afa91821561052957600192611f5991600091611f5f575b506020611f508487612fbc565b51015190616927565b01611eb7565b611f80915060203d8111611f86575b611f7881836110c0565b8101906144b7565b38611f43565b503d611f6e565b806105216000611f9c936110c0565b38611e6b565b806105216000611fb1936110c0565b38611df5565b60058152611cff565b346102275760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757611ffa6004356165b6565b601f5461201f9060081c73ffffffffffffffffffffffffffffffffffffffff166102f1565b90612028611101565b73ffffffffffffffffffffffffffffffffffffffff831681529060006020830152611c9c612054612fd0565b604084019081526000606085015260006080850152600060a0850152600160c085015261217f612082612dba565b936120a260215473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff811686526120c3612dda565b60208701528160408701526120d6612efc565b956120e087612f8a565b526120ea86612f8a565b5060405161216381612137602082019485602073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee9193929373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826110c0565b5190209061216f611112565b9182526020820152611c52612e8f565b52823b1561022757610502926000926040518095819482937f75a5627b00000000000000000000000000000000000000000000000000000000845260048401613118565b346102275760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610227576121fa610826565b602435604435606435906084359267ffffffffffffffff85169485612224575b6105279550614e3f565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561022757604051957f4049ddd2000000000000000000000000000000000000000000000000000000008752600487015260008660248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1958615610529576105279661229f575b5061221a565b8061052160006122ae936110c0565b38612299565b346102275760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610227576122eb610826565b67ffffffffffffffff81169081612306575b610527906157f6565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561022757604051917f4049ddd2000000000000000000000000000000000000000000000000000000008352600483015260008260248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19182156105295761052792612381575b506122fd565b806105216000612390936110c0565b3861237b565b346102275760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610227576123cd610826565b67ffffffffffffffff811690816123e8575b6105279061588a565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561022757604051917f4049ddd2000000000000000000000000000000000000000000000000000000008352600483015260008260248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19182156105295761052792612463575b506123df565b806105216000612472936110c0565b3861245d565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757601c546124b381611130565b906124c160405192836110c0565b80825260208201601c6000527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2116000915b8383106125075760405180610b1c8782611998565b6002602060019260405161251a81611033565b73ffffffffffffffffffffffffffffffffffffffff865416815261253f85870161488d565b838201528152019201920191906124f2565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757601f546125a59060081c73ffffffffffffffffffffffffffffffffffffffff166102f1565b6125b0610315611101565b600060208201526125bf614c38565b60408201526000606082015260006080820152600060a0820152600060c08201526125e8612dba565b9061260b6114c960215473ffffffffffffffffffffffffffffffffffffffff1690565b612613612dda565b6020830152606460408301526114ff612efc565b346102275760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102275761265e610826565b67ffffffffffffffff81169081612679575b61052790615a37565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561022757604051917f4049ddd2000000000000000000000000000000000000000000000000000000008352600483015260008260248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af191821561052957610527926126f4575b50612670565b806105216000612703936110c0565b386126ee565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102275760195461274481611130565b9061275260405192836110c0565b808252601960009081527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b8383106127975760405180610b1c878261186f565b6001602081926127a685614137565b815201920192019190612782565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102275760206127ed615bc2565b6040519015158152f35b606435907fffffffff000000000000000000000000000000000000000000000000000000008216820361022757565b604435907fffffffff000000000000000000000000000000000000000000000000000000008216820361022757565b67ffffffffffffffff811161082157601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b81601f82011215610227578035906128a682612855565b926128b460405194856110c0565b8284526020838301011161022757816000926020809301838601378301015290565b346102275760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102275761290d610826565b60243560443561291c81610ef7565b6129246127f7565b9060843567ffffffffffffffff81116102275761294590369060040161288f565b9267ffffffffffffffff85169485612962575b6105279550615c8d565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561022757604051957f4049ddd2000000000000000000000000000000000000000000000000000000008752600487015260008660248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af195861561052957610527966129dd575b50612958565b8061052160006129ec936110c0565b386129d7565b346102275760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757612a29610826565b602435612a3581610ef7565b612a3d612826565b60643567ffffffffffffffff811161022757612a5d90369060040161288f565b9167ffffffffffffffff84169384612a7a575b6105279450615fff565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561022757604051947f4049ddd2000000000000000000000000000000000000000000000000000000008652600486015260008560248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19485156105295761052795612af5575b50612a70565b806105216000612b04936110c0565b38612aef565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102275760405180602060155491828152019060156000527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4759060005b818110612b8957610b1c85610b10818703826110c0565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201612b72565b346102275760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757612bec610826565b67ffffffffffffffff81169081612c07575b61052790616330565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561022757604051917f4049ddd2000000000000000000000000000000000000000000000000000000008352600483015260008260248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19182156105295761052792612c82575b50612bfe565b806105216000612c91936110c0565b38612c7c565b346102275760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757612cce610826565b67ffffffffffffffff81169081612ce9575b61052790616454565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561022757604051917f4049ddd2000000000000000000000000000000000000000000000000000000008352600483015260008260248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19182156105295761052792612d64575b50612ce0565b806105216000612d73936110c0565b38612d5e565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757602060ff601f54166040519015158152f35b60405190612dc78261104f565b6000604083828152606060208201520152565b60405190612de96020836110c0565b600080835282815b828110612dfd57505050565b602090604051612e0c81611033565b6000815260008382015282828501015201612df1565b60405160609190612e3383826110c0565b60028152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018260005b828110612e6a57505050565b602090604051612e7981611033565b6000815260008382015282828501015201612e5e565b60408051909190612ea083826110c0565b60018152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018260005b828110612ed757505050565b602090604051612ee681611033565b6000815260008382015282828501015201612ecb565b60408051909190612f0d83826110c0565b60018152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018260005b828110612f4457505050565b602090612f4f612dba565b82828501015201612f38565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805115612f975760200190565b612f5b565b805160011015612f975760400190565b805160021015612f975760600190565b8051821015612f975760209160051b010190565b60405190612fdf6020836110c0565b60008252565b60405190612ff46040836110c0565b600482527fdeadbeef000000000000000000000000000000000000000000000000000000006020830152565b6040513d6000823e3d90fd5b9073ffffffffffffffffffffffffffffffffffffffff82511681526020820151602082015260c08061306d604085015160e0604086015260e0850190610b6f565b936060810151606085015260808101511515608085015260a0810151151560a0850152015191015290565b90606081019173ffffffffffffffffffffffffffffffffffffffff815116825260208101519260606020840152835180915260206080840194019060005b8181106130ec5750505060408091015191015290565b909194602061310e600192885190602060409280518352015160208201520190565b96019291016130d6565b9061312b9060408352604083019061302c565b906020818303910152815180825260208201916020808360051b8301019401926000915b83831061315e57505050505090565b909192939460208061319a837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086600196030187528951613098565b9701930193019193929061314f565b908160809103126102275760405190608082019082821067ffffffffffffffff8311176108215760609160405280516131e181610ef7565b835260208101516020840152604081015160408401520151606082015290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b67ffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9116019067ffffffffffffffff821161326f57565b613201565b604051906132836040836110c0565b600482527f12345678000000000000000000000000000000000000000000000000000000006020830152565b906004917f123456780000000000000000000000000000000000000000000000000000000081526132e98251809360208685019101610b4c565b010190565b7fffffffff00000000000000000000000000000000000000000000000000000000600493921681526132e98251809360208685019101610b4c565b6040805190919061333a83826110c0565b60018152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018260005b82811061337157505050565b60209060405161338081611033565b6000815260608382015282828501015201613365565b604051608091906133a783826110c0565b60038152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018260005b8281106133de57505050565b6020906040516133ed81611033565b60008152606083820152828285010152016133d2565b604051906134126020836110c0565b600080835282815b82811061342657505050565b60209060405161343581611033565b600081526060838201528282850101520161341a565b60408051919061345b90836110c0565b60018252817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061348b6001611130565b019060005b82811061349c57505050565b6020906040516134ab8161106b565b6000815260008382015260006040820152600060608201526000608082015282828501015201613490565b604051906134e56020836110c0565b60008252817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06135156000611130565b019060005b82811061352657505050565b6020906040516135358161106b565b600081526000838201526000604082015260006060820152600060808201528282850101520161351a565b906020613571928181520190610b6f565b90565b6020818303126102275780519067ffffffffffffffff8211610227570160608183031261022757604051916135a88361104f565b81516135b381610ef7565b8352602082015167ffffffffffffffff811161022757820181601f82011215610227578051906135e282611130565b926135f060405194856110c0565b82845260208085019360061b8301019181831161022757602001925b82841061362a57505050509060409160208401520151604082015290565b604084830312610227576020604091825161364481611033565b86518152828701518382015281520193019261360c565b9080602083519182815201916020808360051b8301019401926000915b83831061368757505050505090565b90919293946020806136c3837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08660019603018752895161302c565b97019301930191939290613678565b906020808351928381520192019060005b8181106136f05750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016136e3565b805160ff1682526135719160208281015115159082015261010061377a6137546040850151610120604086015261012085019061365b565b606085015160608501526080850151608085015260a085015184820360a0860152610b6f565b9260c081015160c084015260e081015160e08401520151906101008184039101526136d2565b9080602083519182815201916020808360051b8301019401926000915b8383106137cc57505050505090565b90919293947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828203018352855190608060a082019273ffffffffffffffffffffffffffffffffffffffff8151168352602081015160208401526040810151604084015267ffffffffffffffff606082015116606084015201519160a06080830152825180915260c0820190602060c08260051b85010194019260005b82811061388a575050505050602080600192970193019301919392906137bd565b90919293947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4083820301855285516020606081604085019373ffffffffffffffffffffffffffffffffffffffff81511686520151936040838201528451809452019201906000905b8082106139115750505060208060019297019501910192919092613869565b909192835180511515825260208101519060048210156139605782608060a0926020948560019701526040810151604084015260608101516060840152015160808201520194019201906138f2565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9373ffffffffffffffffffffffffffffffffffffffff6135719694816139c16139e2969560e08a5260e08a019061371c565b94600060208a015216604088015216606086015284820360808601526137a0565b91600060a082015260c0818403910152613098565b9190613a15613a22613a1567ffffffffffffffff613a3e94166166d0565b67ffffffffffffffff1690565b9267ffffffffffffffff80613a3686613230565b1691166166fc565b91737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fe5d6bf0200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff92909216600483015260008260248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af191821561052957613ce092613e6d575b50613ac96167cd565b613b2e612137613ae9613ada613274565b604051928391602083016132af565b613af1611101565b6112348152906000602083015260408201526000606082015260006080820152600060a0820152600160c0820152604083015190611c2682612f8a565b50613d0c613c9b613b5460215473ffffffffffffffffffffffffffffffffffffffff1690565b93613c5a613b60613329565b67ffffffffffffffff613b71611121565b73ffffffffffffffffffffffffffffffffffffffff89168152931660208401526064604084015267ffffffffffffffff891660608401525b60808301908152613bdb613bbb61344b565b613bc3611112565b6112348152905b6020820152825190611c2682612f8a565b506020613c4d613be9611121565b92600084526000838501527f12345678000000000000000000000000000000000000000000000000000000006040850152600060608501527fffffffff00000000000000000000000000000000000000000000000000000000608085015251612f8a565b51015190611c2682612f8a565b50613c82613c66612dba565b73ffffffffffffffffffffffffffffffffffffffff9096168652565b613c8a612dda565b602086015260006040860152616893565b6040517fb1bbfdd500000000000000000000000000000000000000000000000000000000602082015267ffffffffffffffff9096166024870152949384906044820190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018552846110c0565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576000613d6093604051809581927ff28dceb300000000000000000000000000000000000000000000000000000000835260048301613560565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af192831561052957600093613e59575b50601f54613daf9060081c73ffffffffffffffffffffffffffffffffffffffff166102f1565b90613dcf60205473ffffffffffffffffffffffffffffffffffffffff1690565b90613e29613df260215473ffffffffffffffffffffffffffffffffffffffff1690565b94604051978896879586957fbbfa0b650000000000000000000000000000000000000000000000000000000087526004870161398f565b03915afa801561052957613e3a5750565b613e56903d806000833e613e4e81836110c0565b810190613574565b50565b8061052185613e67936110c0565b38613d89565b806105216000613e7c936110c0565b38613ac0565b602060408183019282815284518094520192019060005b818110613ea65750505090565b9091926020613ec8600192865190602060409280518352015160208201520190565b9401929101613e99565b9062015180820180921161326f57565b906001820180921161326f57565b9190820180921161326f57565b611c9c90613f41613f0c612dda565b6040519384917f42de141800000000000000000000000000000000000000000000000000000000602084015260248301613e82565b6140a2613f4c6167cd565b91613fd0613f766102f1601f5473ffffffffffffffffffffffffffffffffffffffff9060081c1690565b94613f7f611101565b73ffffffffffffffffffffffffffffffffffffffff87168152906001602083015260408201526000606082015260006080820152600060a0820152600160c0820152604085015190611c2682612f8a565b5061409c613ff360215473ffffffffffffffffffffffffffffffffffffffff1690565b94614000613a1542613ed2565b61405661400b613329565b9167ffffffffffffffff61401d611121565b73ffffffffffffffffffffffffffffffffffffffff8b168152965b1660208701526064604087015267ffffffffffffffff166060860152565b608084019081526140656134d6565b61408c614070611112565b73ffffffffffffffffffffffffffffffffffffffff9094168452565b60208301525190611c2682612f8a565b50616893565b916140ae610315612dba565b6140b6612dda565b602082015260006040820152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f540733ea000000000000000000000000000000000000000000000000000000006004820152916000838060248101613d60565b9060405191600081548060011c926001821691821561422f575b6020851083146142025784875286939260208501929181156141c65750600114614184575b5050611110925003836110c0565b614195919250600052602060002090565b906000915b8483106141af57506111109350013880614176565b80548284015286935060209092019160010161419a565b9050611110959293507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009150168252151560051b013880614176565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f1693614151565b90815461424581611130565b9261425360405194856110c0565b818452602084019060005260206000206000915b8383106142745750505050565b60016020819261428385614137565b815201920192019190614267565b906142b160215473ffffffffffffffffffffffffffffffffffffffff1690565b9173ffffffffffffffffffffffffffffffffffffffff831673ffffffffffffffffffffffffffffffffffffffff8216141591737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529215156004840152600083602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831561052957613ce0936144a2575b506144236143656167cd565b916143b7614371612fe5565b614379611101565b6112348152905b6000602083015260408201526000606082015260006080820152600060a0820152600160c0820152604085015190611c2682612f8a565b506144006143c7613a1542613ed2565b67ffffffffffffffff6143d8613329565b936140386143e4611121565b73ffffffffffffffffffffffffffffffffffffffff9099168952565b6080840190815261440f6134d6565b90614418611112565b61123481529161408c565b50613d0c614451614432612dba565b73ffffffffffffffffffffffffffffffffffffffff8716815293613c82565b6040517fc1e84ed600000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9096166024870152949384906044820190565b8061052160006144b1936110c0565b38614359565b90816020910312610227575190565b80511515737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529015156004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561052957614878575b50600581511161486f575b6000915b815183101561461c5761455c83613ee2565b82518110156146115761456f8484612fbc565b515161457b8285612fbc565b5151141590737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529115156004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215610529576001926145fc575b500161455c565b80610521600061460b936110c0565b386145f5565b50916001019161454a565b915061463d60205473ffffffffffffffffffffffffffffffffffffffff1690565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91909116600482015260008160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156105295761485a575b50601f546146eb9060081c73ffffffffffffffffffffffffffffffffffffffff166102f1565b803b1561022757600060405180927f42de141800000000000000000000000000000000000000000000000000000000825281838161472c8860048301613e82565b03925af1801561052957614845575b50906000916147666102f1601f5473ffffffffffffffffffffffffffffffffffffffff9060081c1690565b60205473ffffffffffffffffffffffffffffffffffffffff16935b825181101561483e5780602061479a6147f29386612fbc565b51516040517f23b3713e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89166004820152602481019190915292839081906044820190565b0381865afa9182156105295760019261481a91600091614820575b506020611f508488612fbc565b01614781565b614838915060203d8111611f8657611f7881836110c0565b3861480d565b5050509050565b806105216000614854936110c0565b3861473b565b806105216000614869936110c0565b386146c5565b60058152614546565b806105216000614887936110c0565b3861453b565b604051815480825290929183906148ad6020830191600052602060002090565b926000905b806007830110614aba57611110945491818110614a7e575b818110614a47575b818110614a10575b8181106149d9575b8181106149a2575b81811061496b575b818110614935575b10614908575b5003836110c0565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260200138614900565b602083811b7fffffffff0000000000000000000000000000000000000000000000000000000016855290936001910193016148fa565b604083901b7fffffffff000000000000000000000000000000000000000000000000000000001684529260019060200193016148f2565b606083901b7fffffffff000000000000000000000000000000000000000000000000000000001684529260019060200193016148ea565b608083901b7fffffffff000000000000000000000000000000000000000000000000000000001684529260019060200193016148e2565b60a083901b7fffffffff000000000000000000000000000000000000000000000000000000001684529260019060200193016148da565b60c083901b7fffffffff000000000000000000000000000000000000000000000000000000001684529260019060200193016148d2565b92602081614ab26001938660e01b7fffffffff00000000000000000000000000000000000000000000000000000000169052565b0193016148ca565b916008919350610100600191614c2a8754614af9838260e01b7fffffffff00000000000000000000000000000000000000000000000000000000169052565b60c081901b7fffffffff0000000000000000000000000000000000000000000000000000000016602084015260a081901b7fffffffff00000000000000000000000000000000000000000000000000000000166040840152608081901b7fffffffff00000000000000000000000000000000000000000000000000000000166060840152606081901b7fffffffff00000000000000000000000000000000000000000000000000000000166080840152604081901b7fffffffff000000000000000000000000000000000000000000000000000000001660a0840152602081901b7fffffffff000000000000000000000000000000000000000000000000000000001660c08401527fffffffff000000000000000000000000000000000000000000000000000000001660e0830152565b0194019201859293916148b2565b60405190614c476040836110c0565b600782527f696e76616c6964000000000000000000000000000000000000000000000000006020830152565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821161326f57565b9190820391821161326f57565b60405190614cbc6060836110c0565b602f82527f20746f20746f74616c2076616c756500000000000000000000000000000000006040837f46697273742063616c6c2073686f756c642061646420666972737456616c756560208201520152565b9373ffffffffffffffffffffffffffffffffffffffff613571969481614d40614d61969560e08a5260e08a019061371c565b94600160208a015216604088015216606086015284820360808601526137a0565b91600160a082015260c0818403910152613098565b60405190614d856060836110c0565b603182527f756520746f20746f74616c2076616c75650000000000000000000000000000006040837f5365636f6e642063616c6c2073686f756c6420616464207365636f6e6456616c60208201520152565b9373ffffffffffffffffffffffffffffffffffffffff613571969481614e09614e2a969560e08a5260e08a019061371c565b94600260208a015216604088015216606086015284820360808601526137a0565b91600260a082015260c0818403910152613098565b90614e80614e7a614e7a614eac939796977f5555555555555555555555555555555555555555555555555555555555555555928380926166fc565b966166fc565b93614e8b8685613ef0565b614ea6614ea187614e9c8a89613ef0565b613ef0565b614c73565b91616708565b90614eb5616832565b9361503d604051917f1234567800000000000000000000000000000000000000000000000000000000602084015260048352614ef26024846110c0565b614efa611101565b61123481529286602085015260408401526000606084015260006080840152600060a0840152600160c0840152614f3b6040880193845190611c2682612f8a565b50614fbe6040517f1234567800000000000000000000000000000000000000000000000000000000602082015260048152614f776024826110c0565b614f7f611101565b6156788152908a602083015260408201526000606082015260006080820152600060a0820152600160c0820152845190614fb882612f9c565b52612f9c565b506040517f1234567800000000000000000000000000000000000000000000000000000000602082015260048152614ff76024826110c0565b614fff611101565b619abc815291602083015260408201526000606082015260006080820152600060a0820152600160c082015282519061503782612fac565b52612fac565b5060215473ffffffffffffffffffffffffffffffffffffffff16926150b7615067613a1542613ed2565b61506f613396565b9267ffffffffffffffff615081611121565b73ffffffffffffffffffffffffffffffffffffffff8916815296166020870152604086015267ffffffffffffffff166060850152565b6080830190815260005b60038110615701575050506150d590616893565b80946151916000846150e5612dba565b73ffffffffffffffffffffffffffffffffffffffff82168152615106612dda565b60208201528260408201526151376102f1601f5473ffffffffffffffffffffffffffffffffffffffff9060081c1690565b908961515860205473ffffffffffffffffffffffffffffffffffffffff1690565b958692604051998a96879586957fbbfa0b650000000000000000000000000000000000000000000000000000000087526004870161398f565b03915afa928315610529576000936156e4575b506151bc6040840151866151b6614cad565b91616a4a565b6151c4612e8f565b9360405161521181612137602082019485602073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee9193929373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b51902061521c611112565b90815285602082015261522e85612f8a565b5261523884612f8a565b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91909116600482015260008160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015610529576156cf575b50601f546152e79060081c73ffffffffffffffffffffffffffffffffffffffff166102f1565b93843b1561022757600060405180967f42de14180000000000000000000000000000000000000000000000000000000082528183816153298a60048301613e82565b03925af19485156105295787956156ba575b5060006153646102f1601f5473ffffffffffffffffffffffffffffffffffffffff9060081c1690565b9361538460205473ffffffffffffffffffffffffffffffffffffffff1690565b9485896153e06153a960215473ffffffffffffffffffffffffffffffffffffffff1690565b946040519b8c96879586957fbbfa0b6500000000000000000000000000000000000000000000000000000000875260048701614d0e565b03915afa94851561052957600095615697575b509061541391614e9c604087015161540b8484613ef0565b6151b6614d76565b602061541e84612f8a565b510152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91909116600482015260008160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561052957615682575b50601f546154cf9060081c73ffffffffffffffffffffffffffffffffffffffff166102f1565b803b15610227576155146000929183926040519485809481937f42de141800000000000000000000000000000000000000000000000000000000835260048301613e82565b03925af180156105295761566d575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527faa7feadc0000000000000000000000000000000000000000000000000000000060048201529160008360248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af192831561052957600093615659575b50601f546155df9060081c73ffffffffffffffffffffffffffffffffffffffff166102f1565b906155ff60205473ffffffffffffffffffffffffffffffffffffffff1690565b90613e2961562260215473ffffffffffffffffffffffffffffffffffffffff1690565b94604051978896879586957fbbfa0b6500000000000000000000000000000000000000000000000000000000875260048701614dd7565b8061052185615667936110c0565b386155b9565b80610521600061567c936110c0565b38615523565b806105216000615691936110c0565b386154a9565b615413929195506156b2903d806000833e613e4e81836110c0565b9490916153f3565b8061052160006156c9936110c0565b3861533b565b8061052160006156de936110c0565b386152c1565b6156fa9193503d806000833e613e4e81836110c0565b91386151a4565b80615778816157316157166001958851612fbc565b515173ffffffffffffffffffffffffffffffffffffffff1690565b61573961344b565b615760615744611112565b73ffffffffffffffffffffffffffffffffffffffff9093168352565b60208201528551906157728383612fbc565b52612fbc565b506157ef615784611121565b60008152600060208201527f12345678000000000000000000000000000000000000000000000000000000006040820152600060608201527fffffffff0000000000000000000000000000000000000000000000000000000060808201526020613c4d848751612fbc565b50016150c1565b6157fe6167cd565b6140a26158276102f1601f5473ffffffffffffffffffffffffffffffffffffffff9060081c1690565b92613fd060405161586381612137602082016004907fdeadbeef0000000000000000000000000000000000000000000000000000000081520190565b61586b611101565b73ffffffffffffffffffffffffffffffffffffffff8716815290614380565b615892613274565b6158f86121376158b36158a36167cd565b93604051928391602083016132af565b6158bb611101565b6112348152906014602083015260408201526000606082015260006080820152600060a0820152600160c0820152604083015190611c2682612f8a565b506159c161591b60215473ffffffffffffffffffffffffffffffffffffffff1690565b9261598061592b613a1542613ed2565b613ba9615936613329565b9167ffffffffffffffff615948611121565b73ffffffffffffffffffffffffffffffffffffffff8a16815295166020860152600a604086015267ffffffffffffffff166060850152565b506159a861598c612dba565b73ffffffffffffffffffffffffffffffffffffffff9095168552565b6159b0612dda565b602085015260006040850152616893565b91737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527faa7feadc000000000000000000000000000000000000000000000000000000006004820152916000838060248101613d60565b61571690615b4c615a466167cd565b91615980615a52612fe5565b91615a5b611101565b61dead8152926000602085015260408401526000606084015260006080840152600060a0840152600160c0840152615a9d6040860193845190611c2682612f8a565b50613bdb615b39615ac360215473ffffffffffffffffffffffffffffffffffffffff1690565b978895615b2c615ad5613a1542613ed2565b67ffffffffffffffff615ae6613329565b97615b0e615af2611121565b73ffffffffffffffffffffffffffffffffffffffff909c168c52565b1660208a0152600060408a015267ffffffffffffffff166060890152565b6080870194855251612f8a565b615b4161344b565b613bca615744611112565b91737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f868a64de000000000000000000000000000000000000000000000000000000006004820152916000838060248101613d60565b60085460ff168015615bd15790565b506040517f667f9d7000000000000000000000000000000000000000000000000000000000815260208180600481017f6661696c65640000000000000000000000000000000000000000000000000000846040830192737109709ecfa91a80626ff3989d68f67f5b1dd12d815201520381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561052957600091615c6e575b50151590565b615c87915060203d602011611f8657611f7881836110c0565b38615c68565b9390615c9b909392936165b6565b93737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517f4c63e56200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff919091168514156004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561052957615faf575b50615d446102f16102f1601f5473ffffffffffffffffffffffffffffffffffffffff9060081c1690565b73ffffffffffffffffffffffffffffffffffffffff8416141591737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529215156004840152600083602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831561052957613ce094613c5a613d0c93615f5f93615ef197615f9a575b50615e5f612137615e06615df56167cd565b9860405192839186602084016132ee565b615e0e611101565b73ffffffffffffffffffffffffffffffffffffffff86168152906000602083015260408201526000606082015260006080820152600060a0820152600160c0820152604088015190611c2682612f8a565b506020613c4d8a615e8560215473ffffffffffffffffffffffffffffffffffffffff1690565b998a96615ec7615e97613a1542613ed2565b615e9f613329565b94615eab615af2611121565b8a880152600060408b015267ffffffffffffffff1660608a0152565b60808801928352615ed661344b565b615ee1615744611112565b85820152825190611c2682612f8a565b507fffffffff00000000000000000000000000000000000000000000000000000000615f1b611121565b9460008652600085870152166040850152600060608501527fffffffff00000000000000000000000000000000000000000000000000000000608085015251612f8a565b946040519485917f331003b3000000000000000000000000000000000000000000000000000000006020840152602483019190602083019252565b806105216000615fa9936110c0565b38615de3565b806105216000615fbe936110c0565b38615d1a565b60405190615fd36040836110c0565b601a82527f746f74616c56616c7565557365642073686f756c6420626520300000000000006020830152565b91906160276102f1601f5473ffffffffffffffffffffffffffffffffffffffff9060081c1690565b9073ffffffffffffffffffffffffffffffffffffffff821673ffffffffffffffffffffffffffffffffffffffff8216141593737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529415156004860152600085602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa938415610529576020613c4d61623e936000986161d39861631c575b506161516121376160fd6160ed6167cd565b9c604051928391898984016132ee565b616105611101565b73ffffffffffffffffffffffffffffffffffffffff89168152908b8683015260408201528a60608201528a60808201528a60a0820152600160c082015260408c015190611c2682612f8a565b5060215473ffffffffffffffffffffffffffffffffffffffff16978896615ec761617d613a1542613ed2565b67ffffffffffffffff61618e613329565b956161b661619a611121565b73ffffffffffffffffffffffffffffffffffffffff909d168d52565b168a88015260408a018d905267ffffffffffffffff1660608a0152565b507fffffffff000000000000000000000000000000000000000000000000000000006161fd611121565b948a86528a858701521660408501528860608501527fffffffff00000000000000000000000000000000000000000000000000000000608085015251612f8a565b5061627c61624a612dba565b73ffffffffffffffffffffffffffffffffffffffff851681529161626c612dda565b6020840152856040840152616893565b946162d661629f60205473ffffffffffffffffffffffffffffffffffffffff1690565b92604051978896879586957fbbfa0b650000000000000000000000000000000000000000000000000000000087526004870161398f565b03915afa9081156105295761111091604091600091616301575b5001516162fb615fc4565b906169a9565b61631691503d806000833e613e4e81836110c0565b386162f0565b806105218b61632a936110c0565b386160db565b616338613274565b616349612137613ae96158a36167cd565b506163de61636c60215473ffffffffffffffffffffffffffffffffffffffff1690565b92616379613a1542613ed2565b6163ce616384613403565b9167ffffffffffffffff616396611121565b73ffffffffffffffffffffffffffffffffffffffff89168152941660208501526064604085015267ffffffffffffffff166060840152565b60808201526159a861598c612dba565b91737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f3f904dc0000000000000000000000000000000000000000000000000000000006004820152916000838060248101613d60565b61645c6167cd565b6164b861213761646d613ada613274565b616475611101565b6112348152906000602083015260408201526000606082015261649b6080820160019052565b600060a0820152600160c0820152604083015190611c2682612f8a565b506165406164db60215473ffffffffffffffffffffffffffffffffffffffff1690565b926159806164eb613a1542613ed2565b613ba96164f6613329565b9167ffffffffffffffff616508611121565b73ffffffffffffffffffffffffffffffffffffffff8a168152951660208601526064604086015267ffffffffffffffff166060850152565b91737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527faa25f2ad000000000000000000000000000000000000000000000000000000006004820152916000838060248101613d60565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60016165e292616b9c565b90600080604061666061669282516165fa84826110c0565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152835192839160208301957fb60e72cc00000000000000000000000000000000000000000000000000000000875260248401526064830190610b6f565b886044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826110c0565b51906a636f6e736f6c652e6c6f675afa50565b6165e2917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91616b9c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60026165e292616b9c565b9060016165e292616b9c565b906165e29291616b9c565b604051906167226020836110c0565b6000808352366020840137565b9061673982611130565b61674660405191826110c0565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06167748294611130565b019060005b82811061678557505050565b60209060405161679481611087565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c082015282828501015201616779565b604051906167da826110a3565b60008083526060604084018181528185018390526080850183905260a0850182905260c0850183905260e0850192909252610100840190815260016020850152616822616713565b905261682e600161672f565b9052565b6040519061683f826110a3565b60008083526060604084018181528185018390526080850183905260a0850182905260c0850183905260e0850192909252610100840190815260016020850152616887616713565b905261682e600361672f565b6040908151916168a381846110c0565b600183527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019060005b8281106168ef575050506168e182612f8a565b526168eb81612f8a565b5090565b60209082516168fd8161106b565b600081526000838201526000848201526000606082015260606080820152828288010152016168ce565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561022757604051917f98296c5400000000000000000000000000000000000000000000000000000000835260048301526024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156105295761699e5750565b6000611110916110c0565b90600091737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15616a4657616a1591839160405193849283927f88b44c850000000000000000000000000000000000000000000000000000000084526004840152846024840152606060448401526064830190610b6f565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561052957616a3c575050565b81613e56916110c0565b8280fd5b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561022757600091616ab260405194859384937f88b44c8500000000000000000000000000000000000000000000000000000000855260048501526024840152606060448401526064830190610b6f565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156105295761699e5750565b15616adf57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374645574696c7320626f756e642875696e743235362c75696e743235362c7560448201527f696e74323536293a204d6178206973206c657373207468616e206d696e2e00006064820152fd5b8115616b6d570690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600090616bab84841115616ad8565b82811091821580616cc0575b616cb857616bcd616bc88587614ca0565b613ee2565b92600383111580616caf575b616ca0577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83101580616c96575b616c855785831115616c4357505090616c2384616c2893614ca0565b616b63565b918215616c3d575061357191614ea191613ef0565b91505090565b959492919095616c54575b50505050565b83949550616c2390616c669394614ca0565b918215616c3d5750616c7b91616bc891614ca0565b9038808080616c4e565b505090506135719291501990614ca0565b5082198411616c07565b50509190506135719250613ef0565b50828411616bd9565b509250505090565b5084821115616bb756fe60808060405234601557611955908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c806323b3713e14610077578063313dade71461007257806342de14181461006d57806375a5627b14610068578063bbfa0b65146100635763f916f3b21461005e57600080fd5b6109ab565b6108c2565b6105af565b6104d8565b610411565b346100ef5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef576004356100b2816100f4565b73ffffffffffffffffffffffffffffffffffffffff6024359116600052600060205260406000209060005260205260406000205460805260206080f35b600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116036100ef57565b6044359061011f826100f4565b565b6064359061011f826100f4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff82111761017957604052565b61012e565b60a0810190811067ffffffffffffffff82111761017957604052565b6060810190811067ffffffffffffffff82111761017957604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761017957604052565b6040519061011f6040836101b6565b67ffffffffffffffff81116101795760051b60200190565b801515036100ef57565b91906040838203126100ef576040516102408161015d565b8093803561024d816100f4565b825260208101359067ffffffffffffffff82116100ef570182601f820112156100ef5780359061027c82610206565b9361028a60405195866101b6565b828552602060a08187019402830101918183116100ef57602001925b8284106102b7575050505060200152565b60a0848303126100ef57604051906102ce8261017e565b84356102d98161021e565b825260208501359060048210156100ef57826020928360a09501526040870135604082015260608701356060820152608087013560808201528152019301926102a6565b908160e09103126100ef5790565b81601f820112156100ef5780359061034282610206565b9261035060405194856101b6565b82845260208085019360061b830101918183116100ef57602001925b82841061037a575050505090565b6040848303126100ef57602060409182516103948161015d565b86358152828701358382015281520193019261036c565b906020808351928381520192019060005b8181106103c95750505090565b90919260206103eb600192865190602060409280518352015160208201520190565b94019291016103bc565b60409061040e93921515815281602082015201906103ab565b90565b346100ef5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef5760043567ffffffffffffffff81116100ef57610460903690600401610228565b60243567ffffffffffffffff81116100ef5761048090369060040161031d565b9060443561048d816100f4565b6064359061049a826100f4565b6084359367ffffffffffffffff85116100ef576104be6104c495369060040161032b565b93610c6d565b906104d4604051928392836103f5565b0390f35b346100ef5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef5760043567ffffffffffffffff81116100ef57366023820112156100ef57806004013567ffffffffffffffff81116100ef573660248260061b840101116100ef5760246105539201610ffb565b005b9190916060818403126100ef576040519061056f8261019a565b8193813561057c816100f4565b835260208201359167ffffffffffffffff83116100ef576105a3604093928493830161032b565b60208501520135910152565b346100ef5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef5760043567ffffffffffffffff81116100ef576105fe90369060040161031d565b60243567ffffffffffffffff81116100ef57366023820112156100ef5780600401359161062a83610206565b9161063860405193846101b6565b8383526024602084019460051b820101903682116100ef5760248101945b8286106106675761055385856111c2565b853567ffffffffffffffff81116100ef5760209161068c839260243691870101610555565b815201950194610656565b9080601f830112156100ef5781356106ae81610206565b926106bc60405194856101b6565b81845260208085019260051b820101918383116100ef5760208201905b8382106106e857505050505090565b813567ffffffffffffffff81116100ef5760209161070b87848094880101610228565b8152019101906106d9565b9080601f830112156100ef5781359161072e83610206565b9261073c60405194856101b6565b80845260208085019160051b830101918383116100ef5760208101915b83831061076857505050505090565b823567ffffffffffffffff81116100ef5782019060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe083880301126100ef57604051906107b58261017e565b60208301356107c3816100f4565b82526040830135602083015260608301356040830152608083013567ffffffffffffffff811681036100ef57606083015260a08301359167ffffffffffffffff83116100ef5761081b88602080969581960101610697565b6080820152815201920191610759565b60a4359060ff821682036100ef57565b60208152608081019173ffffffffffffffffffffffffffffffffffffffff8151166020830152602081015192606060408401528351809152602060a0840194019060005b818110610896575050506040606091015191015290565b90919460206108b8600192885190602060409280518352015160208201520190565b960192910161087f565b346100ef5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef5760043567ffffffffffffffff81116100ef576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126100ef576024359061093c610112565b90610945610121565b60843567ffffffffffffffff81116100ef57610965903690600401610716565b61096d61082b565b9160c4359467ffffffffffffffff86116100ef576104d49661099661099f973690600401610555565b95600401611107565b6040519182918261083b565b346100ef5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef57602060405173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8152f35b3561040e816100f4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9060018201809211610a3f57565b610a02565b91908201809211610a3f57565b60405190610a5e8261015d565b60006020838281520152565b90610a7482610206565b610a8160405191826101b6565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610aaf8294610206565b019060005b828110610ac057505050565b602090610acb610a51565b82828501015201610ab4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8051821015610b1a5760209160051b010190565b610ad7565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156100ef570180359067ffffffffffffffff82116100ef576020019181360383136100ef57565b60041115610b7a57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9392919073ffffffffffffffffffffffffffffffffffffffff16845260606020850152602060a085019173ffffffffffffffffffffffffffffffffffffffff81511660608701520151604060808601528051809252602060c0860191019160005b818110610c1c57505060409150930152565b909183518051151582526020810151906004821015610b7a5782608060a092602094856001970152604081015160408401526060810151606084015201516080820152019401910192919092610c0a565b949091929394610c91815173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff610ccb610cb2866109f8565b73ffffffffffffffffffffffffffffffffffffffff1690565b911603610fe057855192610cee610ce9602084019586515190610a44565b610a6a565b9460005b8851811015610d255780610d086001928b610b06565b51610d13828a610b06565b52610d1e8189610b06565b5001610cf2565b50909294919395875160005b88518051821015610fcf5781610d4691610b06565b51610d6a610d576040890189610b1f565b5060608301519081013591602090910190565b5060808201511690610d7c8151151590565b610e4f575b602081018051610d9081610b70565b610d9981610b70565b610dbf57506040015103610db1576001905b01610d31565b506000989750505050505050565b60038151610dcc81610b70565b610dd581610b70565b03610dec57506040015110610db157600190610dab565b60018151610df981610b70565b610e0281610b70565b03610e1957506040015114610db157600190610dab565b60029051610e2681610b70565b610e2f81610b70565b14610e3f575b5050600190610dab565b6040015111610db1573880610e35565b9691989795929093998a610e72610e9e8c6040519283918c602084019687610ba9565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826101b6565b51902096600093610ead610a51565b9c60005b8751811015610fb757610ec48189610b06565b515115610f6a578a610ed6828a610b06565b515114610ee557600101610eb1565b6020949e50879a9198939c9d9650610f0390610f18939c9698610b06565b519284840151915b8215610f23575b50610a44565b918291015290610d81565b610f62919250610f538b73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b90600052602052604060002090565b549038610f12565b6020949e50610f18929b955097610fb189899c99959e9f98939a610fab90610f906101f7565b978c895260008a8a015288610fa58383610b06565b52610b06565b50610a31565b97610f0b565b5096946020939d929b9c95610f18929b95979a610f0b565b505083525060019650909450505050565b509250505060009190565b9190811015610b1a5760061b0190565b33919060005b82811061100e5750505050565b602061101b828585610feb565b0135611028828585610feb565b35336000526000602052604060002090600052602052604060002054116110be57807f42063b8d32ac0a88f94053143bb30a789b3d5dfabb27d6c8a54e23d4fef30851606061107a6001948787610feb565b356020611088858989610feb565b0135886000526000602052604060002082600052602052806040600020556040519189835260208301526040820152a101611001565b7e2a700a0000000000000000000000000000000000000000000000000000000060005260046000fd5b604051906110f48261019a565b6000604083828152606060208201520152565b9061040e9695949392916111196110e7565b50611562565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610a3f5760010190565b90602061040e9281815201906103ab565b92919267ffffffffffffffff821161017957604051916111a560207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601846101b6565b8294818452818301116100ef578281602093846000960137010152565b9080516111cd575050565b6111d6826109f8565b73ffffffffffffffffffffffffffffffffffffffff163014801590611413575b6110be57600092835b8251851015611254576112229060206112188786610b06565b5101515190610a44565b93604061122f8285610b06565b510151611240575b600101936111ff565b9361124c60019161111f565b949050611237565b61126091939450610a6a565b60009081935b83518510156113a85760005b602061127e8787610b06565b510151518110156112cb57806112c46112a7600193602061129f8b8b610b06565b510151610b06565b51956112b28161111f565b966112bd8288610b06565b5285610b06565b5001611272565b50949360019060406112dd8287610b06565b5101516112ed575b019394611266565b6113a26113186112fd8388610b06565b515173ffffffffffffffffffffffffffffffffffffffff1690565b60405161136481610e72602082019485602073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee9193929373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b5190209460406113748489610b06565b51015161137f6101f7565b96875260208701526113908161111f565b9561139b8287610b06565b5284610b06565b506112e5565b94935061140592506113fe91506040516113f081610e7260208201947f42de14180000000000000000000000000000000000000000000000000000000086526024830161114c565b519020926040810190610b1f565b369161115d565b60208151910120036110be57565b50600160c083013514156111f6565b6040519061142f8261017e565b60606080836000815260006020820152600060408201526000838201520152565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156100ef570180359067ffffffffffffffff82116100ef57602001918160051b360383136100ef57565b9190811015610b1a5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21813603018212156100ef570190565b3561040e8161021e565b906004116100ef5790600490565b919091357fffffffff0000000000000000000000000000000000000000000000000000000081169260048110611530575050565b7fffffffff00000000000000000000000000000000000000000000000000000000929350829060040360031b1b161690565b939594909291926115716110e7565b5061157a611422565b9660005b8151811015611911576115946112fd8284610b06565b73ffffffffffffffffffffffffffffffffffffffff8087169116146115bb5760010161157e565b906115cc9293949596979850610b06565b51945b73ffffffffffffffffffffffffffffffffffffffff611602875173ffffffffffffffffffffffffffffffffffffffff1690565b16156118cd576020860151801515806118c3575b6118965750606086015167ffffffffffffffff1680151580611883575b61184c57509061164a826040611650940190611450565b906114a4565b9161165d608084016114e4565b6118225761166a836109f8565b73ffffffffffffffffffffffffffffffffffffffff163014611770576080850160ff815151931692831015611746576116b7926116a79151610b06565b5190602087019484865193610c6d565b901561171c5760209252013580611705575b50604080830151910151106116db5790565b7faa7feadc0000000000000000000000000000000000000000000000000000000060005260046000fd5b61171460408401918251610a44565b9052386116c9565b7f868a64de0000000000000000000000000000000000000000000000000000000060005260046000fd5b7f3f904dc00000000000000000000000000000000000000000000000000000000060005260046000fd5b5050915050602061179661179061178a6040850185610b1f565b906114ee565b906114fc565b91013515908115916117d5575b506117ab5790565b7f540733ea0000000000000000000000000000000000000000000000000000000060005260046000fd5b7f42de14180000000000000000000000000000000000000000000000000000000091507fffffffff00000000000000000000000000000000000000000000000000000000161415386117a3565b7faa25f2ad0000000000000000000000000000000000000000000000000000000060005260046000fd5b7fb1bbfdd50000000000000000000000000000000000000000000000000000000060005267ffffffffffffffff1660045260246000fd5b5067ffffffffffffffff81164211611633565b7f331003b30000000000000000000000000000000000000000000000000000000060005260045260246000fd5b5046811415611616565b7fc1e84ed60000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff841660045260246000fd5b5050909192939594956115cf56fea26469706673582212201dc8207dc5c95b04a2aa9930defb11873e5847a457c45044785f4da312d07e8564736f6c634300081c0033a26469706673582212209b73f1e34c65b77f015b561ec5abdd95c2bfc71247643b1a71bb09f6327b3b0064736f6c634300081c0033","sourceMap":"766:27655:83:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;21251:33;766:27655;21266:13;766:27655;;;;;;;;;;;21251:33;21305:19;;:::i;:::-;21290:12;;;:34;21353:3;21330:20;;;766:27655;21401:27;;:::i;:::-;21434:19;;;;:::i;:::-;;;;;:::i;:::-;-1:-1:-1;21611:7:83;766:27655;21603:16;;766:27655;;;;;;;;;21603:16;21578:243;2763:4:48;;:::i;:::-;766:27655:83;;;;;;;21578:243;766:27655;21290:12;21578:243;;766:27655;2763:4:48;;:::i;:::-;21330:20:83;21578:243;;766:27655;;21578:243;;;766:27655;;21578:243;;;2763:4:48;766:27655:83;21578:243;;;2763:4:48;21426:1:83;21578:243;;;766:27655;336:42:2;21828:66:83;;;;21330:20;766:27655;2024:14:2;21828:66:83;;21844:49;766:27655;21828:66;;766:27655;;;;2024:14:2;;;21828:66:83;;;;336:42:2;21828:66:83;;;;;;;;766:27655;-1:-1:-1;21290:12:83;766:27655;;;;336:42:2;21900:16:83;;;;21330:20;766:27655;2024:14:2;21900:16:83;;766:27655;;;;;;21900:16;;766:27655;-1:-1:-1;766:27655:83;2024:14:2;766:27655:83;-1:-1:-1;336:42:2;21900:16:83;;;;;;;;766:27655;-1:-1:-1;21611:7:83;766:27655;21922:35;;766:27655;;;;;;21922:35;:54;;;;;;;766:27655;;;21330:20;766:27655;21922:54;;;;;;2024:14:2;21922:54:83;;766:27655;21922:54;;;:::i;:::-;;;;;;;;;;;766:27655;21922:54;;;766:27655;21922:54;;;:::i;:::-;;;:::i;:::-;766:27655;21922:54;;:::i;21900:16::-;;;766:27655;21900:16;;;:::i;:::-;;;;21828:66;;;766:27655;21828:66;;;:::i;:::-;;;;766:27655;;;;;;;;;;;;;1138:35;;;;;;;;;;;;;;;;;;;;766:27655;1138:35;;;;;1128:45;;766:27655;;1128:45;766:27655;;;;;;;;1128:45;766:27655;;1128:45;766:27655;;2024:14:2;1188:25:83;;766:27655;;1188:25;;766:27655;;;;;;;;;;;1188:25;766:27655;;;-1:-1:-1;336:42:2;1188:25:83;;;;;;;1179:39;1188:25;766:27655;1188:25;766:27655;1188:25;;;766:27655;;;;;;;;;;;1179:39;766:27655;;;1179:39;766:27655;;1179:39;766:27655;;2024:14:2;1240:26:83;;766:27655;;1240:26;;766:27655;;;;;;;;;;;1188:25;766:27655;;;-1:-1:-1;336:42:2;1240:26:83;;;;;;766:27655;1240:26;766:27655;1240:26;;;766:27655;;;;;;;;;1224:42;766:27655;;;1224:42;766:27655;;;;;;;;;;;;;;;;;;1240:26;;;;1188:25;1240:26;1188:25;1240:26;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;1188:25;;;;;;;;;;;;;;:::i;:::-;;;;1138:35;;:::i;766:27655::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;:::i;:::-;;;;;1035:12;;1031:52;;766:27655;1088:1;;;;:::i;1031:52::-;336:42:2;1057:19:83;;;;766:27655;;1057:19;2024:14:2;1057:19:83;;766:27655;1057:19;;766:27655;-1:-1:-1;1057:19:83;766:27655;1057:19;;336:42:2;1057:19:83;;;;;;;1088:1;1057:19;;;1031:52;;;;1057:19;;;-1:-1:-1;1057:19:83;;;:::i;:::-;;;;766:27655;;;;;;;;;;;;;:::i;:::-;;;;1035:12;;1031:52;;766:27655;1088:1;;;:::i;1031:52::-;336:42:2;1057:19:83;;;;766:27655;;1057:19;2024:14:2;1057:19:83;;766:27655;1057:19;;766:27655;-1:-1:-1;1057:19:83;;;;336:42:2;1057:19:83;;;;;;;1088:1;1057:19;;;1031:52;;;;1057:19;;;-1:-1:-1;1057:19:83;;;:::i;:::-;;;;766:27655;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3018:16:9;766:27655:83;;;;;;;3018:16:9;766:27655:83;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;766:27655:83;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;3948:19:9;766:27655:83;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;3948:19:9;766:27655:83;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3794:16:9;766:27655:83;;;;;;;3794:16:9;766:27655:83;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3501:18:9;766:27655:83;;;;;;;3501:18:9;766:27655:83;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;1035:12;;1031:52;;766:27655;1088:1;;;;:::i;1031:52::-;336:42:2;1057:19:83;;;;766:27655;;1057:19;2024:14:2;1057:19:83;;766:27655;1057:19;;766:27655;-1:-1:-1;1057:19:83;766:27655;1057:19;;336:42:2;1057:19:83;;;;;;;1088:1;1057:19;;;1031:52;;;;1057:19;;;-1:-1:-1;1057:19:83;;;:::i;:::-;;;;766:27655;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;2763:4:48;766:27655:83;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;2763:4:48;766:27655:83;;:::i;:::-;:::o;:::-;;;;;;;;:::i;:::-;;;;;7331:253;766:27655;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;766:27655:83;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;3346:26:9;766:27655:83;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;3346:26:9;766:27655:83;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;2763:4:48;;:::i;:::-;766:27655:83;;;;22132:232;;;766:27655;;;:::i;:::-;22132:232;;;766:27655;;22132:232;;;766:27655;;22132:232;;;2763:4:48;766:27655:83;22132:232;;;2763:4:48;;22132:232:83;;;766:27655;;;:::i;:::-;;22408:33;766:27655;22423:13;766:27655;;;;;;;;;;;22408:33;22462:19;;:::i;:::-;22132:232;22447:12;;:34;22510:2;22132:232;22487:20;;766:27655;22558:27;;:::i;:::-;22591:19;;;;:::i;:::-;;;;;:::i;:::-;;336:42:2;22617:66:83;;;;22132:232;766:27655;2024:14:2;22617:66:83;;21844:49;766:27655;22617:66;;766:27655;;;;2024:14:2;;;22617:66:83;2024:14:2;766:27655:83;;;;;;;;;;;;;;:::i;:::-;24330:17;;;766:27655;;24330:21;;336:42:2;24320:32:83;;;;766:27655;;2024:14:2;24320:32:83;;766:27655;;;;24320:32;;766:27655;-1:-1:-1;766:27655:83;;;336:42:2;24320:32:83;;;;;;;;766:27655;24387:19;24501:21;24387:19;;:::i;:::-;24412:17;;;;;:::i;:::-;;;;;:::i;:::-;;766:27655;;;24501:21;:::i;:::-;766:27655;;:::i;:::-;;;;24330:17;24447:78;;766:27655;24435:90;;;:::i;:::-;;;;;:::i;:::-;;336:42:2;24532:66:83;;;;766:27655;;2024:14:2;24532:66:83;;21844:49;766:27655;24532:66;;766:27655;-1:-1:-1;766:27655:83;2024:14:2;766:27655:83;-1:-1:-1;336:42:2;24532:66:83;;;;;;;;766:27655;-1:-1:-1;24330:17:83;766:27655;;;336:42:2;24604:16:83;;;;766:27655;;2024:14:2;24604:16:83;;766:27655;;;;;;24604:16;;766:27655;-1:-1:-1;766:27655:83;2024:14:2;766:27655:83;-1:-1:-1;336:42:2;24604:16:83;;;;;;;;766:27655;-1:-1:-1;24626:7:83;766:27655;24626:27;;766:27655;;;;;;24626:27;:35;;;;;766:27655;;2024:14:2;24626:35:83;;766:27655;-1:-1:-1;;766:27655:83;;;-1:-1:-1;766:27655:83;24626:35;766:27655;;24626:35;;;:::i;:::-;;;;;;;;;;;766:27655;24604:16;;;-1:-1:-1;24604:16:83;;;:::i;:::-;;;;24532:66;;;-1:-1:-1;24532:66:83;;;:::i;:::-;;;;24320:32;;;-1:-1:-1;24320:32:83;;;:::i;:::-;;;;766:27655;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;3162:18:9;766:27655:83;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;3162:18:9;766:27655:83;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;3653:18:9;766:27655:83;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;3653:18:9;766:27655:83;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17483:17;;;17477:46;766:27655;;17477:46;:::i;:::-;766:27655;;17658:7;766:27655;17650:16;;766:27655;;;;;;17650:16;17625:307;2763:4:48;;:::i;17625:307:83:-;-1:-1:-1;17483:17:83;17625:307;;766:27655;18457:71;766:27655;;:::i;:::-;;17625:307;;766:27655;;;-1:-1:-1;17625:307:83;;;766:27655;;17625:307;;;2763:4:48;766:27655:83;17625:307;;;2763:4:48;17502:1:83;17625:307;;;766:27655;18457:71;766:27655;;:::i;:::-;;18043:33;766:27655;18058:13;766:27655;;;;;;;;;;;18043:33;18122:23;18097:19;;:::i;:::-;18082:12;17483:17;18082:12;;:34;18122:23;;;;:::i;:::-;;;:::i;:::-;;18191:27;;:::i;:::-;18224:19;;;;:::i;:::-;;;;;:::i;:::-;;18329;;:::i;:::-;18354:20;;;;:::i;:::-;;;;;:::i;:::-;;766:27655;;18457:71;;;2024:14:2;17483:17:83;18457:71;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;18534:27;17483:17;766:27655;;;;;;;;;;;;:::i;:::-;23603:1;766:27655;;23587:17;23583:81;;766:27655;23717:6;;;:::i;:::-;23805:1;23827:3;766:27655;;23808:17;;;;;23870:9;23864:70;23870:21;:9;766:27655;23870:9;;;:::i;:::-;;:21;766:27655;23870:21;23893:9;;;;:::i;:::-;;:21;766:27655;23864:70;;:::i;:::-;23870:21;23840:9;;;;:::i;:::-;;:21;766:27655;;23793:13;;23808:17;-1:-1:-1;23870:21:83;766:27655;;;336:42:2;23996:16:83;;;;766:27655;;2024:14:2;23996:16:83;;766:27655;;;;;;23996:16;;766:27655;-1:-1:-1;766:27655:83;2024:14:2;766:27655:83;-1:-1:-1;336:42:2;23996:16:83;;;;;;;;23788:153;-1:-1:-1;24018:7:83;766:27655;24018:27;;766:27655;;;;;;24018:27;:35;;;;;23805:1;766:27655;;24018:35;;2024:14:2;24018:35:83;;;;;;;766:27655;24018:35;;;:::i;:::-;;;;;;;;;;;23788:153;24085:13;23805:1;766:27655;24141:21;766:27655;24018:7;766:27655;;;;;;;;24141:21;766:27655;;23870:21;766:27655;;;;;;24080:142;24119:3;766:27655;;24100:17;;;;;24171:9;23870:21;24171:9;24141:50;24171:9;;;:::i;:::-;;766:27655;;;2024:14:2;24141:50:83;;766:27655;;;;24141:50;;766:27655;;;;2024:14:2;;;;766:27655:83;;;;;;;;;;24141:50;;;;;;;;;;;766:27655;24141:50;24193:21;24141:50;23805:1;24141:50;;;24119:3;24193:9;23870:21;24193:9;;;;:::i;:::-;;:21;766:27655;24193:21;;:::i;:::-;766:27655;24085:13;;24141:50;;;;23870:21;24141:50;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;24018:35;;;23805:1;24018:35;;;:::i;:::-;;;;23996:16;;;23805:1;23996:16;;;:::i;:::-;;;;23583:81;23603:1;23614:44;;23583:81;;766:27655;;;;;;;;;;;18795:34;766:27655;;18795:34;:::i;:::-;18964:7;766:27655;18956:16;;766:27655;;;;;;18956:16;2763:4:48;;;:::i;:::-;766:27655:83;;;;;18931:307;-1:-1:-1;766:27655:83;18931:307;;766:27655;19968:71;766:27655;;:::i;:::-;18931:307;;;766:27655;;;-1:-1:-1;18931:307:83;;;766:27655;;18931:307;;;2763:4:48;766:27655:83;18931:307;;;2763:4:48;18808:1:83;18931:307;;;766:27655;19968:71;766:27655;;:::i;:::-;;;19364:13;766:27655;;;;;;;;;;;19403:19;;:::i;:::-;766:27655;19388:12;;:34;19462:20;18931:307;19462:20;;766:27655;19536:27;;:::i;:::-;19569:19;;;;:::i;:::-;;;;;:::i;:::-;;18931:307;766:27655;19716:54;;;766:27655;19716:54;;;;877:42:82;;;;;;766:27655:83;877:42:82;;;766:27655:83;;;;877:42:82;766:27655:83;877:42:82;19716:54:83;;;;;;;;;:::i;:::-;766:27655;19706:65;;766:27655;;;:::i;:::-;;;;;19682:112;;766:27655;19832:19;;:::i;19968:71::-;20045:27;20124:54;;;;;;766:27655;-1:-1:-1;766:27655:83;18931:307;766:27655;20124:54;;;;;;2024:14:2;20124:54:83;;766:27655;20124:54;;;:::i;766:27655::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;1035:12;;1031:52;;766:27655;1088:1;;;;:::i;1031:52::-;336:42:2;1057:19:83;;;;766:27655;;1057:19;2024:14:2;1057:19:83;;766:27655;1057:19;;766:27655;-1:-1:-1;1057:19:83;766:27655;1057:19;;336:42:2;1057:19:83;;;;;;;1088:1;1057:19;;;1031:52;;;;1057:19;;;-1:-1:-1;1057:19:83;;;:::i;:::-;;;;766:27655;;;;;;;;;;;;;:::i;:::-;;;;1035:12;;1031:52;;766:27655;1088:1;;;:::i;1031:52::-;336:42:2;1057:19:83;;;;766:27655;;1057:19;2024:14:2;1057:19:83;;766:27655;1057:19;;766:27655;-1:-1:-1;1057:19:83;;;;336:42:2;1057:19:83;;;;;;;1088:1;1057:19;;;1031:52;;;;1057:19;;;-1:-1:-1;1057:19:83;;;:::i;:::-;;;;766:27655;;;;;;;;;;;;;:::i;:::-;;;;1035:12;;1031:52;;766:27655;1088:1;;;:::i;1031:52::-;336:42:2;1057:19:83;;;;766:27655;;1057:19;2024:14:2;1057:19:83;;766:27655;1057:19;;766:27655;-1:-1:-1;1057:19:83;;;;336:42:2;1057:19:83;;;;;;;1088:1;1057:19;;;1031:52;;;;1057:19;;;-1:-1:-1;1057:19:83;;;:::i;:::-;;;;766:27655;;;;;;;;;;;2876:18:9;766:27655:83;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;2876:18:9;766:27655:83;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;20403:7;766:27655;20395:16;;766:27655;;;;;;20395:16;20370:296;2763:4:48;;:::i;20370:296:83:-;766:27655;20370:296;;;766:27655;;;:::i;:::-;20370:296;;;766:27655;;20370:296;;;766:27655;;20370:296;;;2763:4:48;766:27655:83;20370:296;;;2763:4:48;766:27655:83;20370:296;;;766:27655;;;:::i;:::-;;20710:33;766:27655;20725:13;766:27655;;;;;20710:33;20764:19;;:::i;:::-;20370:296;20749:12;;:34;20812:3;20370:296;20789:20;;766:27655;20860:27;;:::i;766:27655::-;;;;;;;;;;;;;:::i;:::-;;;;1035:12;;1031:52;;766:27655;1088:1;;;:::i;1031:52::-;336:42:2;1057:19:83;;;;766:27655;;1057:19;2024:14:2;1057:19:83;;766:27655;1057:19;;766:27655;-1:-1:-1;1057:19:83;;;;336:42:2;1057:19:83;;;;;;;1088:1;1057:19;;;1031:52;;;;1057:19;;;-1:-1:-1;1057:19:83;;;:::i;:::-;;;;766:27655;;;;;;;;;;;2575:18:9;766:27655:83;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;2575:18:9;766:27655:83;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;766:27655:83;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;1035:12;;1031:52;;766:27655;1088:1;;;;:::i;1031:52::-;336:42:2;1057:19:83;;;;766:27655;;1057:19;2024:14:2;1057:19:83;;766:27655;1057:19;;766:27655;-1:-1:-1;1057:19:83;766:27655;1057:19;;336:42:2;1057:19:83;;;;;;;1088:1;1057:19;;;1031:52;;;;1057:19;;;-1:-1:-1;1057:19:83;;;:::i;:::-;;;;766:27655;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;1035:12;;1031:52;;766:27655;1088:1;;;;:::i;1031:52::-;336:42:2;1057:19:83;;;;766:27655;;1057:19;2024:14:2;1057:19:83;;766:27655;1057:19;;766:27655;-1:-1:-1;1057:19:83;766:27655;1057:19;;336:42:2;1057:19:83;;;;;;;1088:1;1057:19;;;1031:52;;;;1057:19;;;-1:-1:-1;1057:19:83;;;:::i;:::-;;;;766:27655;;;;;;;;;;;;;;;2723:18:9;766:27655:83;;;;;;;2723:18:9;766:27655:83;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;1035:12;;1031:52;;766:27655;1088:1;;;:::i;1031:52::-;336:42:2;1057:19:83;;;;766:27655;;1057:19;2024:14:2;1057:19:83;;766:27655;1057:19;;766:27655;-1:-1:-1;1057:19:83;;;;336:42:2;1057:19:83;;;;;;;1088:1;1057:19;;;1031:52;;;;1057:19;;;-1:-1:-1;1057:19:83;;;:::i;:::-;;;;766:27655;;;;;;;;;;;;;:::i;:::-;;;;1035:12;;1031:52;;766:27655;1088:1;;;:::i;1031:52::-;336:42:2;1057:19:83;;;;766:27655;;1057:19;2024:14:2;1057:19:83;;766:27655;1057:19;;766:27655;-1:-1:-1;1057:19:83;;;;336:42:2;1057:19:83;;;;;;;1088:1;1057:19;;;1031:52;;;;1057:19;;;-1:-1:-1;1057:19:83;;;:::i;:::-;;;;766:27655;;;;;;;;;;;;;1065:26:16;766:27655:83;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;766:27655:83;;;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24404:1;766:27655;;;;;;-1:-1:-1;766:27655:83;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;-1:-1:-1;766:27655:83;;-1:-1:-1;766:27655:83;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17502:1;766:27655;;;;;;-1:-1:-1;766:27655:83;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;-1:-1:-1;766:27655:83;;-1:-1:-1;766:27655:83;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21426:1;766:27655;;;;;;-1:-1:-1;766:27655:83;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;24521:1;766:27655;;;;;;;:::o;:::-;;;25947:1;766:27655;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;2763:4:48:-;766:27655:83;;;;;;;:::i;:::-;17737:1;2763:4:48;;:::o;:::-;766:27655:83;;;;;;;:::i;:::-;2763:4:48;;;;;;;;:::o;2024:14:2:-;766:27655:83;;2024:14:2;;;;;;;;;766:27655:83;2024:14:2;;766:27655:83;;;2024:14:2;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;766:27655:83;;2024:14:2;;;766:27655:83;2024:14:2;;;;766:27655:83;;2024:14:2;;;766:27655:83;2024:14:2;;;;;;:::o;:::-;;;;;;766:27655:83;2024:14:2;;766:27655:83;;;2024:14:2;;;;;;;;;;766:27655:83;;;;;2024:14:2;766:27655:83;;;;;2024:14:2;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;766:27655:83;;;2024:14:2;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;766:27655:83;;;;;2024:14:2;766:27655:83;;2024:14:2;;;;;;;;;766:27655:83;;2024:14:2;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;766:27655:83;;2024:14:2;;;;;;;;;;766:27655:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;2763:4:48;;766:27655:83;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;7151:1;766:27655;;;;;;-1:-1:-1;766:27655:83;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;-1:-1:-1;766:27655:83;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24973:1;766:27655;;;;;;-1:-1:-1;766:27655:83;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;-1:-1:-1;766:27655:83;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13305:1;766:27655;;;;13305:1;766:27655;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;13305:1;766:27655;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7151:1;766:27655;;;;;7151:1;766:27655;:::i;:::-;;;-1:-1:-1;766:27655:83;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;-1:-1:-1;766:27655:83;;-1:-1:-1;766:27655:83;;;;-1:-1:-1;766:27655:83;;;;-1:-1:-1;766:27655:83;;;;-1:-1:-1;766:27655:83;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10479:1;766:27655;;;;;10479:1;766:27655;:::i;:::-;;;10479:1;766:27655;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;10479:1;766:27655;;10479:1;766:27655;;;;10479:1;766:27655;;;;10479:1;766:27655;;;;10479:1;766:27655;;;;;;;;;;;;;945:27;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;766:27655;;;;;;:::i;:::-;;;;;;:::i;:::-;945:27;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;766:27655;;;;;;;:::i;:::-;945:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;766:27655;945:27;;;;;;766:27655;;945:27;;;;:::o;:::-;766:27655;945:27;;;;;;;766:27655;;;;;;;:::i;:::-;;;945:27;;;;;766:27655;945:27;;;;;;;;;;;;;;;766:27655;;;;;;;;945:27;766:27655;945:27;;;;;;;766:27655;;945:27;-1:-1:-1;945:27:83;;;;;;;;;;;;;:::o;:::-;;;;;;766:27655;945:27;;;;;;;;;;;;;;:::i;:::-;766:27655;;945:27;;;;;;;;;;;;766:27655;;;;;;;;;;;945:27;-1:-1:-1;945:27:83;;;;;;;;;;:::o;:::-;;;766:27655;;;;;;;;;;;;;945:27;;;;;;;766:27655;;945:27;;;;;;;;;766:27655;;945:27;;;766:27655;945:27;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;2024:14:2;945:27:83;;;;;;;2024:14:2;945:27:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;2024:14:2;945:27:83;;;;;;;2024:14:2;945:27:83;;;;;;;;;;;:::i;:::-;;;766:27655;;;;;;;;945:27;766:27655;945:27;;;;;;;766:27655;;945:27;-1:-1:-1;945:27:83;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;766:27655;945:27;;766:27655;;;;945:27;;;766:27655;945:27;;2024:14:2;945:27:83;;;;;;;2024:14:2;766:27655:83;945:27;;;;766:27655;945:27;;;766:27655;945:27;;;;;;;;766:27655;;;;;;;;945:27;766:27655;;945:27;;;;;;766:27655;;945:27;-1:-1:-1;945:27:83;;;;;;;;;;;766:27655;945:27;;;766:27655;;945:27;;;;;;;;;;;;;;;;;;;;;;;;;766:27655;945:27;;;;;;766:27655;945:27;;766:27655;;;945:27;;;;;;;;766:27655;;;;;;;;945:27;-1:-1:-1;945:27:83;;;;;;;;;;766:27655;945:27;;;766:27655;;945:27;;;;;;;;;;;;;;;;;;766:27655;;;;;945:27;;;;;;;;;;;;;;766:27655;945:27;;;;;;;;;;;;;2024:14:2;945:27:83;;;;;;;2024:14:2;945:27:83;;;;;2024:14:2;945:27:83;766:27655;;945:27;;;;;;;-1:-1:-1;945:27:83;;;;;-1:-1:-1;945:27:83;;;766:27655;945:27;;;;;;;;;;;;;;;;:::i;:::-;;7182:25;945:27;;;2024:14:2;766:27655:83;945:27;;;766:27655;;945:27;;;766:27655;945:27;;;;;;;;:::i;:::-;;7182:25;945:27;;;;;;;;;;;;:::i;6854:1820::-;;;7127:48;7042:53;7049:45;766:27655;7120:56;6854:1820;766:27655;7049:45;:::i;:::-;766:27655;;;;7042:53;7154:20;766:27655;7154:20;;;;:::i;:::-;766:27655;;;7127:48;:::i;7120:56::-;7182:25;336:42:2;7182:25:83;;;;766:27655;;2024:14:2;7182:25:83;;766:27655;;;;;7182:25;;;766:27655;-1:-1:-1;766:27655:83;;;-1:-1:-1;336:42:2;7182:25:83;;;;;;;8495:79;7182:25;;;6854:1820;7247:16;;;:::i;:::-;7312:272;7401:46;;766:27655;;:::i;:::-;;;7401:46;;;;;;;:::i;:::-;2763:4:48;;:::i;:::-;766:27655:83;;;7331:253;7182:25;7401:46;7331:253;;766:27655;;7331:253;;766:27655;7182:25;7331:253;;;766:27655;;7331:253;;;2763:4:48;766:27655:83;7331:253;;;2763:4:48;7151:1:83;7331:253;;;766:27655;;7312:13;;;:272;;;;:::i;:::-;;8495:79;8384:15;766:27655;7722:13;766:27655;;;;;;7853:19;7984:207;7853:19;;:::i;:::-;766:27655;;;:::i;:::-;;;;;;7687:192;766:27655;7401:46;7687:192;;766:27655;7784:3;766:27655;7687:192;;766:27655;;;;7331:253;7687:192;;766:27655;7687:192;7331:253;7687:192;;766:27655;;;7885:93;7953:22;;:::i;:::-;766:27655;;:::i;:::-;;;;7908:70;;7401:46;7908:70;;766:27655;7885:17;;:93;;;;:::i;:::-;;7401:46;7984:20;766:27655;;:::i;:::-;2763:4:48;766:27655:83;2763:4:48;;-1:-1:-1;8016:175:83;;;945:27;2024:14:2;766:27655:83;8016:175;;766:27655;7182:25;7331:253;8016:175;;766:27655;;7331:253;8016:175;;766:27655;7984:17;:20;:::i;:::-;;:26;;:207;;;;:::i;:::-;;8235:33;766:27655;;:::i;:::-;;;;;;;;8235:33;8289:19;;:::i;:::-;7401:46;8274:12;;:34;7182:25;766:27655;8314:20;;766:27655;8384:15;:::i;:::-;766:27655;;8518:37;7401:46;8495:79;;;766:27655;;;;8495:79;;;766:27655;;;;;;;;;;8495:79;;7401:46;8495:79;;;;;;:::i;:::-;336:42:2;8479:96:83;;;;7182:25;8479:96;766:27655;;;8479:96;;;;2024:14:2;8479:96:83;;7182:25;8479:96;;;:::i;:::-;;;;336:42:2;8479:96:83;;;;;;;7182:25;8479:96;;;6854:1820;-1:-1:-1;8581:7:83;766:27655;8581:28;;766:27655;;;;;;8581:28;766:27655;;7401:46;766:27655;;;;;;;8581:88;766:27655;7722:13;766:27655;;;;;;;;;8581:88;;;;;;;2024:14:2;8581:88:83;;7182:25;8581:88;;;:::i;:::-;;;;;;;;;;;6854:1820;:::o;8581:88::-;;;;;7182:25;8581:88;;;;;;:::i;:::-;;;;;:::i;:::-;;6854:1820::o;8479:96::-;;;;;;;:::i;:::-;;;;7182:25;;;;;;;:::i;:::-;;;;766:27655;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;2024:14:2;;;;;;;;;;;;;;;;;766:27655:83;;;;;;;;;;11101:6;766:27655;;;;;;;:::o;:::-;;23098:1;766:27655;;;;;;;:::o;:::-;;;;;;;;;;:::o;10208:1415::-;10401:81;10208:1415;10401:81;10462:19;;:::i;:::-;766:27655;;10401:81;;;2024:14:2;10401:81:83;;;;;;;;:::i;:::-;11301:15;10521:16;;:::i;:::-;766:27655;10543:265;10587:16;766:27655;10595:7;766:27655;;;;;;;;10587:16;2763:4:48;;;:::i;:::-;766:27655:83;;;;;10562:246;10535:1;10401:81;10562:246;;766:27655;;10562:246;;766:27655;10479:1;10562:246;;;766:27655;;10562:246;;;2763:4:48;766:27655:83;10562:246;;;2763:4:48;10535:1:83;10562:246;;;766:27655;;10543:13;;;:265;;;;:::i;:::-;;11161:94;766:27655;10965:13;766:27655;;;;;;11083:15;11076:32;11083:24;:15;:24;:::i;11076:32::-;10930:225;11129:19;;:::i;:::-;766:27655;;;;:::i;:::-;;;;;;10930:225;;766:27655;10401:81;10930:225;;766:27655;11055:3;766:27655;10930:225;;766:27655;;;10562:246;10930:225;;766:27655;;10930:225;10562:246;10930:225;;766:27655;;;11230:22;;:::i;:::-;11184:71;766:27655;;:::i;:::-;;;;;;;;11184:71;10401:81;11184:71;;766:27655;11161:17;:94;;;;:::i;:::-;;11301:15;:::i;:::-;766:27655;11359:33;766:27655;;:::i;11359:33::-;11413:19;;:::i;:::-;10401:81;11398:12;;:34;10479:1;766:27655;11438:20;;766:27655;336:42:2;11469:55:83;;;;766:27655;;2024:14:2;11469:55:83;;11485:38;10401:81;11469:55;;766:27655;;10479:1;766:27655;;2024:14:2;;;11469:55:83;2024:14:2;766:27655:83;;;;;-1:-1:-1;766:27655:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;766:27655:83;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;766:27655:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;766:27655:83;;-1:-1:-1;766:27655:83;-1:-1:-1;766:27655:83;;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;5338:1512;;766:27655;5509:13;766:27655;;;;;;5492:35;766:27655;;;;;;5492:35;;5482:46;336:42:2;5482:46:83;;;;766:27655;;2024:14:2;5482:46:83;;766:27655;;;5482:46;;;766:27655;-1:-1:-1;766:27655:83;;;336:42:2;5482:46:83;;;;;;;6663:87;5482:46;;;5338:1512;5605:16;6250:93;5605:16;;:::i;:::-;2763:4:48;5670:234:83;2763:4:48;;:::i;:::-;;;:::i;:::-;766:27655:83;;;5689:215;;5509:18;5689:215;;;766:27655;;5689:215;;766:27655;5509:18;5689:215;;;766:27655;;5689:215;;;2763:4:48;766:27655:83;5689:215;;;2763:4:48;5619:1:83;5689:215;;;766:27655;;5670:13;;;:234;;;;:::i;:::-;;6032:212;6165:32;6172:24;:15;:24;:::i;6165:32::-;766:27655;6218:19;;:::i;:::-;766:27655;6032:212;766:27655;;:::i;:::-;;;;;;;;6032:212;5689:215;6032:212;;766:27655;;;6318:22;;:::i;:::-;766:27655;;;:::i;:::-;;;;6273:70;;766:27655;6250:93;;6663:87;6572:15;766:27655;;:::i;:::-;;;;;;6423:33;;766:27655;6572:15;766:27655;;6686:43;5689:215;6663:87;;;766:27655;;;;6663:87;;;766:27655;;;;;2024:14:2;;;;;5482:46:83;;;5509:18;5482:46;;;:::i;:::-;;;;766:27655;;;;;;;;;;;:::o;22774:698::-;766:27655;;22867:17;;336:42:2;22857:28:83;;;;766:27655;;2024:14:2;22857:28:83;;766:27655;;;22857:28;;;766:27655;-1:-1:-1;766:27655:83;;;336:42:2;22857:28:83;;;;;;;;22774:698;766:27655;22929:1;766:27655;;22913:17;22909:81;;22774:698;22883:1;23025:178;23064:3;766:27655;;23045:17;;;;;23094:5;;;:::i;:::-;766:27655;;23101:17;;;;;23145:9;;;;:::i;:::-;;766:27655;23168:9;;;;:::i;:::-;;766:27655;23145:42;;23135:53;336:42:2;23135:53:83;;;;766:27655;;2024:14:2;23135:53:83;;766:27655;;;22857:28;23135:53;;766:27655;-1:-1:-1;766:27655:83;;;336:42:2;23135:53:83;;;;;;;23098:1;23135:53;;;23120:3;;766:27655;23082:17;;23135:53;;;22883:1;23135:53;;;:::i;:::-;;;;23101:17;;;23098:1;766:27655;23030:13;;;23045:17;;;766:27655;23251:6;766:27655;;;;;;336:42:2;23242:16:83;;;;766:27655;;2024:14:2;23242:16:83;;766:27655;;;;;22857:28;23242:16;;766:27655;-1:-1:-1;766:27655:83;2024:14:2;766:27655:83;-1:-1:-1;336:42:2;23242:16:83;;;;;;;;23025:178;-1:-1:-1;23264:7:83;766:27655;23264:27;;766:27655;;;;;;23264:27;:35;;;;;22883:1;766:27655;;23264:35;;2024:14:2;23264:35:83;;;;;;;22857:28;23264:35;;;:::i;:::-;;;;;;;;;;;23025:178;23331:13;;22883:1;766:27655;23387:21;766:27655;23264:7;766:27655;;;;;;;;23387:21;23251:6;766:27655;;;23326:142;23365:3;766:27655;;23346:17;;;;;23417:9;23251:6;23417:9;23387:50;23417:9;;;:::i;:::-;;766:27655;;;2024:14:2;23387:50:83;;766:27655;;;22857:28;23387:50;;766:27655;;;;2024:14:2;;;;766:27655:83;;;;;;;;;;23387:50;;;;;;;;;;;23098:1;23387:50;23439:21;23387:50;22883:1;23387:50;;;23365:3;23439:9;23251:6;23439:9;;;;:::i;:21::-;766:27655;23331:13;;23387:50;;;;23251:6;23387:50;;;;;;;;;:::i;:::-;;;;23346:17;;;;;;22774:698::o;23264:35::-;;;22883:1;23264:35;;;:::i;:::-;;;;23242:16;;;22883:1;23242:16;;;:::i;:::-;;;;22909:81;22929:1;22940:44;;22909:81;;22857:28;;;22883:1;22857:28;;;:::i;:::-;;;;766:27655;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;766:27655:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2024:14:2;;766:27655:83;;;;;;;;;2024:14:2;;;;;766:27655:83;;2024:14:2;;766:27655:83;;;;;;;;;2024:14:2;;;;;766:27655:83;;2024:14:2;766:27655:83;;;;;;;;;;2024:14:2;;;;;766:27655:83;;2024:14:2;766:27655:83;;;;;;;;;;2024:14:2;;;;;766:27655:83;;2024:14:2;766:27655:83;;;;;;;;;;2024:14:2;;;;;766:27655:83;;2024:14:2;766:27655:83;;;;;;;;;;2024:14:2;;;;;766:27655:83;;2024:14:2;766:27655:83;;;;;;;;;2024:14:2;766:27655:83;2024:14:2;766:27655:83;;2024:14:2;;;;766:27655:83;;;;;;;;;;;;;;;;;;;;;;;;2024:14:2;;;;766:27655:83;;;;;;;2024:14:2;;;;;766:27655:83;;;;;2024:14:2;;;;;766:27655:83;;;;;2024:14:2;;;;;766:27655:83;;;;;2024:14:2;;;;;766:27655:83;;;;;2024:14:2;;;;;766:27655:83;;;;;2024:14:2;;;;;766:27655:83;;;;2024:14:2;;;766:27655:83;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2763:4:48;;766:27655:83;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;2763:4:48;;766:27655:83;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;24950:1;766:27655;;;2024:14:2;766:27655:83;;;;;;;;;;;;;;;;;;:::i;:::-;;24950:1;766:27655;;;945:27;766:27655;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;2763:4:48;;766:27655:83;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;25947:1;766:27655;;;2024:14:2;766:27655:83;;;;;;;;;;;;;;;;;;:::i;:::-;;25947:1;766:27655;;;945:27;766:27655;;;;;;;;:::i;24670:3748::-;;25058:43;24932;24995:44;25120:86;24670:3748;;;;766:27655;24932:43;;;;;:::i;:::-;24995:44;;:::i;25058:43::-;25138:24;;;;;:::i;:::-;25164:41;:37;:24;;;;;:::i;:::-;:37;:::i;:::-;:41;:::i;:::-;25120:86;;:::i;:::-;25286:16;;;:::i;:::-;766:27655;25933:277;766:27655;;25425:42;2024:14:2;25425:42:83;;;;;;;;;;;:::i;:::-;2763:4:48;;:::i;:::-;766:27655:83;;;25346:258;;25425:42;25346:258;;766:27655;;25346:258;;766:27655;25485:1;25346:258;;;766:27655;;25346:258;;;2763:4:48;766:27655:83;25346:258;;;2763:4:48;24950:1:83;25346:258;;;766:27655;25327:277;766:27655;25327:13;;;;;:277;;;;:::i;:::-;;25630:278;766:27655;;2024:14:2;25425:42:83;25729;;;25425;25729;;;25425;25729;;:::i;:::-;2763:4:48;;:::i;:::-;766:27655:83;;;25649:259;;25425:42;25649:259;;766:27655;;25649:259;;766:27655;25485:1;25346:258;25649:259;;766:27655;;25346:258;25649:259;;2763:4:48;766:27655:83;25346:258;25649:259;;2763:4:48;24950:1:83;25346:258;25649:259;;766:27655;25630:13;;:278;;;;:::i;:::-;;;:::i;:::-;;766:27655;;2024:14:2;25425:42:83;26031;;;25425;26031;;;25425;26031;;:::i;:::-;2763:4:48;;:::i;:::-;766:27655:83;;;25952:258;25425:42;25952:258;;766:27655;;25952:258;;766:27655;25485:1;25346:258;25952;;766:27655;;25346:258;25952;;2763:4:48;766:27655:83;25346:258;25952;;2763:4:48;24950:1:83;25346:258;25952;;766:27655;25933:13;;:277;;;;:::i;:::-;;;:::i;:::-;-1:-1:-1;26351:13:83;766:27655;;;26448:15;26316:204;26441:32;26448:24;:15;:24;:::i;26441:32::-;26494:19;;:::i;:::-;766:27655;;;;:::i;:::-;;;;;;26316:204;766:27655;25425:42;26316:204;;766:27655;;26316:204;;766:27655;;;25346:258;26316:204;;766:27655;;26316:204;25346:258;26316:204;;766:27655;;;25485:1;26592:5;24973:1;26592:5;;;;26988:15;;;;;;:::i;:::-;766:27655;;27245:88;25485:1;766:27655;;;:::i;:::-;;;;;;27100:19;;:::i;:::-;25425:42;27085:12;;:34;27125:20;766:27655;27125:20;;766:27655;27245:28;766:27655;27245:7;766:27655;;;;;;;;27245:28;766:27655;;;25425:42;766:27655;;;;;;;;;;;27245:88;;;;;;;2024:14:2;27245:88:83;;25425:42;27245:88;;;:::i;:::-;;;;;;;;;;25485:1;27245:88;;;26572:371;27348:23;27339:96;766:27655;27348:23;;766:27655;;;;:::i;:::-;27339:96;;:::i;:::-;27517:19;;:::i;:::-;766:27655;;;27594:54;;;25425:42;27594:54;;;;877:42:82;;;;;;766:27655:83;877:42:82;;;766:27655:83;;;;877:42:82;766:27655:83;877:42:82;27594:54:83;766:27655;27584:65;;766:27655;;:::i;:::-;;;;27554:133;25425:42;27554:133;;766:27655;27542:145;;;:::i;:::-;;;;;:::i;:::-;;336:42:2;27693:16:83;;;;766:27655;;2024:14:2;27693:16:83;;766:27655;;;;;25425:42;27693:16;;766:27655;-1:-1:-1;766:27655:83;2024:14:2;766:27655:83;-1:-1:-1;336:42:2;27693:16:83;;;;;;;;26572:371;-1:-1:-1;27245:7:83;766:27655;27715:27;;766:27655;;;;;;27715:27;:35;;;;;;25485:1;766:27655;;27715:35;;2024:14:2;27715:35:83;;;;;;;25425:42;27715:35;;;:::i;:::-;;;;;;;;;;;;;;26572:371;766:27655;25485:1;27816:28;766:27655;27245:7;766:27655;;;;;;;;27816:28;766:27655;;25425:42;766:27655;;;;;;;;;27816:91;766:27655;26351:13;766:27655;;;;;;;;;27816:91;;;;;;;2024:14:2;27816:91:83;;25425:42;27816:91;;;:::i;:::-;;;;;;;;;;25485:1;27816:91;;;26572:371;27922:23;;28103:24;27922:23;27913:112;766:27655;27922:23;;766:27655;27947:24;;;;:::i;:::-;766:27655;;:::i;28103:24::-;25425:42;28079:9;;;:::i;:::-;;:21;766:27655;336:42:2;28133:16:83;;;;766:27655;;2024:14:2;28133:16:83;;766:27655;;;;;25425:42;28133:16;;766:27655;-1:-1:-1;766:27655:83;2024:14:2;766:27655:83;-1:-1:-1;336:42:2;28133:16:83;;;;;;;;26572:371;-1:-1:-1;27245:7:83;766:27655;28155:27;;766:27655;;;;;;28155:27;:35;;;;;;25485:1;766:27655;;;;;;28155:35;;;;;;2024:14:2;28155:35:83;;25425:42;28155:35;;;:::i;:::-;;;;;;;;;;;26572:371;28264:52;336:42:2;28264:52:83;;;;766:27655;;2024:14:2;28264:52:83;;28280:35;25425:42;28264:52;;766:27655;;-1:-1:-1;766:27655:83;2024:14:2;766:27655:83;-1:-1:-1;336:42:2;28264:52:83;;;;;;;25485:1;28264:52;;;26572:371;-1:-1:-1;27245:7:83;766:27655;28322:28;;766:27655;;;;;;28322:28;766:27655;;25425:42;766:27655;;;;;;;28322:91;766:27655;26351:13;766:27655;;;;;;;;;28322:91;;;;;;;2024:14:2;28322:91:83;;25425:42;28322:91;;;:::i;28264:52::-;;;;;;;:::i;:::-;;;;28155:35;;;25485:1;28155:35;;;:::i;:::-;;;;28133:16;;;25485:1;28133:16;;;:::i;:::-;;;;27816:91;28103:24;27816:91;;;;;;;;25485:1;27816:91;;;;;;:::i;:::-;;;;;;27715:35;;;25485:1;27715:35;;;:::i;:::-;;;;27693:16;;;25485:1;27693:16;;;:::i;:::-;;;;27245:88;;;;;;;25485:1;27245:88;;;;;;:::i;:::-;;;;;26599:3;26656:13;26612:97;26656:13;:19;:16;24950:1;26656:13;;;:16;:::i;:::-;;766:27655;;;;;26656:19;26684:22;;:::i;:::-;26635:74;766:27655;;:::i;:::-;;;;;;;;26635:74;25425:42;26635:74;;766:27655;26612:17;;:97;;;;;:::i;:::-;;;:::i;:::-;;26717:219;766:27655;;:::i;:::-;;2763:4:48;;-1:-1:-1;25425:42:83;26749:187;;945:27;2024:14:2;766:27655:83;26749:187;;766:27655;25485:1;25346:258;26749:187;;766:27655;;25346:258;26749:187;;766:27655;25425:42;26717:20;:17;;;:20;:::i;:219::-;;766:27655;26577:13;;11627:1353;11885:16;;:::i;:::-;12658:15;11951:16;766:27655;11959:7;766:27655;;;;;;;;11951:16;766:27655;11907:258;766:27655;;11997:31;;;;;;766:27655;;;;;;;;11997:31;2763:4:48;;:::i;:::-;766:27655:83;;;;;11926:239;;766:27655;14239:1563;766:27655;;:::i;:::-;14502:319;14638:46;;14480:16;;:::i;:::-;766:27655;;;14638:46;;;;;;;:::i;:::-;2763:4:48;;:::i;:::-;766:27655:83;;;14521:300;14576:2;14638:46;14521:300;;766:27655;;14521:300;;766:27655;14702:1;14521:300;;;766:27655;;14521:300;;;2763:4:48;766:27655:83;14521:300;;;2763:4:48;14494:1:83;14521:300;;;766:27655;;14502:13;;;:319;;;;:::i;:::-;;15629:15;766:27655;14946:13;766:27655;;;;;;15052:15;15229:207;15045:32;15052:24;:15;:24;:::i;15045:32::-;14911:213;15098:19;;:::i;:::-;766:27655;;;;:::i;:::-;;;;;;14911:213;766:27655;14638:46;14911:213;;766:27655;15008:2;766:27655;14911:213;;766:27655;;;14521:300;14911:213;;766:27655;;15229:207;;15480:33;766:27655;;:::i;:::-;;;;;;;;15480:33;15534:19;;:::i;:::-;14638:46;15519:12;;:34;14702:1;766:27655;15559:20;;766:27655;15629:15;:::i;:::-;15651:52;336:42:2;15651:52:83;;;;766:27655;;2024:14:2;15651:52:83;;28280:35;15651:52;;;766:27655;;14702:1;766:27655;;2024:14:2;;;15651:52:83;2024:14:2;15806:1554:83;16666:16;15806:1554;17125:15;15953:16;;:::i;:::-;2763:4:48;16725:207:83;2763:4:48;;:::i;:::-;;;;:::i;:::-;766:27655:83;;;16101:215;16156:1;16101:215;;;766:27655;16101:215;;;766:27655;16156:1;16101:215;;;766:27655;;16101:215;;;2763:4:48;766:27655:83;16101:215;;;2763:4:48;15967:1:83;16101:215;;;766:27655;16082:234;16101:215;16082:13;;;;;:234;;;;:::i;:::-;;16622:97;16666:19;766:27655;16456:13;766:27655;;;;;;16544:15;;;16421:195;16537:32;16544:24;:15;:24;:::i;16537:32::-;766:27655;16590:19;;:::i;:::-;766:27655;16421:195;766:27655;;:::i;:::-;;;;;;;;16421:195;766:27655;16101:215;16421:195;;766:27655;16156:1;16101:215;16421:195;;766:27655;;;16101:215;16421:195;;766:27655;;16421:195;16101:215;16421:195;;766:27655;;;16666:13;:16;:::i;:19::-;16694:22;;:::i;:::-;16645:74;766:27655;;:::i;17125:15::-;17204:57;336:42:2;17204:57:83;;;;16101:215;766:27655;2024:14:2;17204:57:83;;17220:40;17204:57;;;766:27655;;16156:1;766:27655;;2024:14:2;;;17204:57:83;2024:14:2;1243:204:4;1302:7;766:27655:83;;;;;;;1325:14:4;:::o;1298:143::-;766:27655:83;;;2024:14:2;1377:39:4;;;;;;;;192:59;766:27655:83;;;;;;;;;2024:14:2;1377:39:4;;766:27655:83;1377:39:4;;;;;;;766:27655:83;1377:39:4;;;1298:143;1377:53;;;1370:60;:::o;1377:39::-;;;;;;;;;;;;;;:::i;:::-;;;;3308:2026:83;;;3532:43;3308:2026;;;;3532:43;:::i;:::-;3581:36;336:42:2;3581:36:83;;;;766:27655;;2024:14:2;3581:36:83;;766:27655;;;;;3591:25;;;3581:36;;;766:27655;-1:-1:-1;766:27655:83;;;336:42:2;3581:36:83;;;;;;;;3308:2026;766:27655;3633:26;3643:16;766:27655;3651:7;766:27655;;;;;;;;3633:26;766:27655;;;3633:26;;3623:37;336:42:2;3623:37:83;;;;766:27655;;2024:14:2;3623:37:83;;766:27655;;;3581:36;3623:37;;766:27655;-1:-1:-1;766:27655:83;;;336:42:2;3623:37:83;;;;;;;5157:77;3623:37;4574:197;5157:77;3623:37;5069:15;3623:37;4484:84;3623:37;;;3308:2026;3737:16;3858:225;3816:36;;3737:16;;:::i;:::-;766:27655;;;3816:36;;;;;;;;:::i;:::-;2763:4:48;;:::i;:::-;766:27655:83;;;;;3877:206;3581:36;3816;3877:206;;766:27655;;3877:206;;766:27655;3581:36;3877:206;;;766:27655;;3877:206;;;2763:4:48;766:27655:83;3877:206;;;2763:4:48;3554:1:83;3877:206;;;766:27655;;3858:13;;;:225;;;;:::i;:::-;;3816:36;4574:20;766:27655;;4213:13;766:27655;;;;;;4347:15;;;4178:241;4340:32;4347:24;:15;:24;:::i;4340:32::-;4393:19;;:::i;:::-;766:27655;4178:241;766:27655;;:::i;4178:241::-;;;;766:27655;3581:36;766:27655;4178:241;;766:27655;;;3877:206;4178:241;;766:27655;;4178:241;3877:206;4178:241;;766:27655;;;4543:22;;:::i;:::-;4507:61;766:27655;;:::i;4507:61::-;;;;766:27655;4484:17;;:84;;;;:::i;:::-;;766:27655;;;:::i;:::-;2763:4:48;766:27655:83;2763:4:48;;-1:-1:-1;4606:165:83;;;945:27;766:27655;;4606:165;;766:27655;3581:36;3877:206;4606:165;;766:27655;;3877:206;4606:165;;766:27655;4574:17;:20;:::i;5069:15::-;766:27655;;;5157:77;;;5180:37;3816:36;5157:77;;;;;;766:27655;;;;;2024:14:2;;766:27655:83;3623:37;;;3581:36;3623:37;;;:::i;:::-;;;;3581:36;;;;;;;:::i;:::-;;;;766:27655;;;;;;;;:::i;:::-;;2763:4:48;;766:27655:83;;;;;:::o;1275:2029::-;;;1459:16;766:27655;1467:7;766:27655;;;;;;;;1459:16;1449:26;766:27655;;;;;;1449:26;;1439:37;336:42:2;1439:37:83;;;;766:27655;;2024:14:2;1439:37:83;;766:27655;;;1439:37;;;766:27655;-1:-1:-1;766:27655:83;;;336:42:2;1439:37:83;;;;;;;1632:36;2383:20;:197;1439:37;;;2293:84;1439:37;;;1275:2029;1553:16;1674:225;1632:36;;1553:16;;:::i;:::-;766:27655;;;1632:36;;;;;;;;:::i;:::-;2763:4:48;;:::i;:::-;766:27655:83;;;;;1693:206;;;;;766:27655;;1693:206;;766:27655;1693:206;;;;766:27655;1693:206;;;;2763:4:48;1693:206:83;;;;2763:4:48;1567:1:83;1693:206;;;766:27655;;1674:13;;;:225;;;;:::i;:::-;-1:-1:-1;2029:13:83;766:27655;;;2156:15;;;1994:234;2149:32;2156:24;:15;:24;:::i;2149:32::-;766:27655;2202:19;;:::i;:::-;766:27655;1994:234;766:27655;;:::i;:::-;;;;;;;;1994:234;766:27655;1994:234;;;766:27655;;1994:234;;766:27655;;;;;1693:206;1994:234;;766:27655;;2293:84;;766:27655;;;:::i;:::-;2763:4:48;;;;2415:165:83;;;;945:27;766:27655;;2415:165;;766:27655;2415:165;1693:206;2415:165;;766:27655;;1693:206;2415:165;;766:27655;2383:17;:20;:::i;:197::-;;2878:15;766:27655;;:::i;:::-;;;;;;2669:33;2723:19;;:::i;:::-;1632:36;2708:12;;:34;2748:20;766:27655;2748:20;;766:27655;2878:15;:::i;:::-;766:27655;2987:170;766:27655;1632:36;766:27655;;;;;;;;;2987:170;;;;;;;2024:14:2;2987:170:83;;1439:37;2987:170;;;:::i;:::-;;;;;;;;;;3233:66;2987:170;766:27655;2987:170;1439:37;2987:170;;;1275:2029;3242:23;;766:27655;;;:::i;:::-;3233:66;;:::i;2987:170::-;;;;;;1439:37;2987:170;;;;;;:::i;:::-;;;;1439:37;;;;;;;:::i;:::-;;;;12984:1251;766:27655;;:::i;:::-;13231:272;13320:46;;13209:16;;:::i;13231:272::-;;14000:15;766:27655;13645:13;766:27655;;;;;;13735:15;13728:32;13735:24;:15;:24;:::i;13728:32::-;13610:197;13781:19;;:::i;:::-;766:27655;;;;:::i;:::-;;;;;;13610:197;766:27655;13320:46;13610:197;;766:27655;13707:3;766:27655;13610:197;;766:27655;;;13250:253;13610:197;;766:27655;;13610:197;13250:253;13610:197;;766:27655;13851:33;766:27655;;:::i;14000:15::-;14022:57;336:42:2;14022:57:83;;;;766:27655;;2024:14:2;14022:57:83;;14038:40;14022:57;;;766:27655;;13305:1;766:27655;;2024:14:2;;;14022:57:83;2024:14:2;8678:1526:83;8820:16;;:::i;:::-;8939:271;9028:46;;766:27655;;:::i;9028:46::-;2763:4:48;;:::i;:::-;766:27655:83;;;8958:252;9013:1;9028:46;8958:252;;766:27655;;8958:252;;766:27655;9013:1;8958:252;;;766:27655;8958:252;;;;8834:1;2763:4:48;;;8958:252:83;766:27655;8958:252;;;2763:4:48;8834:1:83;8958:252;;;766:27655;;8939:13;;;:271;;;;:::i;:::-;;10024:15;766:27655;9357:13;766:27655;;;;;;9447:15;9624:207;9440:32;9447:24;:15;:24;:::i;9440:32::-;9322:197;9493:19;;:::i;:::-;766:27655;;;;:::i;:::-;;;;;;9322:197;766:27655;9028:46;9322:197;;766:27655;9419:3;766:27655;9322:197;;766:27655;;;8958:252;9322:197;;766:27655;;10024:15;10046:59;336:42:2;10046:59:83;;;;766:27655;;2024:14:2;10046:59:83;;10062:42;10046:59;;;766:27655;;9013:1;766:27655;;2024:14:2;;;10046:59:83;2024:14:2;2815:199:15;17505:17:83;17502:1;2933:19:15;2815:199;2933:19;:::i;:::-;2763:4:48;-1:-1:-1;766:27655:83;;;9786:54:15;766:27655:83;;;;;;:::i;:::-;;2763:4:48;;766:27655:83;;;;;;;9786:54:15;;;766:27655:83;9786:54:15;;;;;;;;;766:27655:83;;;;;;:::i;:::-;;;;;2024:14:2;9786:54:15;;;;;;;;:::i;:::-;766:27655:83;9371:159:15;679:42;9371:159;;;2815:199::o;:::-;2933:19;2815:199;23916:17:83;2815:199:15;2933:19;:::i;2815:199::-;7076:17:83;7073:1;2933:19:15;2815:199;2933:19;:::i;2815:199::-;;7151:1:83;2933:19:15;2815:199;2933:19;:::i;2815:199::-;;2933:19;2815:199;;2933:19;:::i;2321:4:48:-;766:27655:83;;;;;;;:::i;:::-;;;;;2321:4:48;766:27655:83;2321:4:48;;;:::o;:::-;;766:27655:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;2321:4:48;;;;;:::i;:::-;;;-1:-1:-1;2321:4:48;;;;;;;;;:::o;:::-;;766:27655:83;;;;;;:::i;:::-;-1:-1:-1;2321:4:48;;-1:-1:-1;2321:4:48;;;;766:27655:83;;2321:4:48;;;-1:-1:-1;766:27655:83;2321:4:48;;;-1:-1:-1;2321:4:48;;;;-1:-1:-1;2321:4:48;;;;-1:-1:-1;2321:4:48;;;;;;;;;;;;;1279:329:82;766:27655:83;;;;;;:::i;:::-;-1:-1:-1;766:27655:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8834:1;766:27655;;;2763:4:48;1536:16:82;;:::i;:::-;1512:40;;1574:29;7151:1:83;1574:29:82;:::i;:::-;1558:45;;1279:329::o;:::-;766:27655:83;;;;;;:::i;:::-;-1:-1:-1;766:27655:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8834:1;766:27655;;;2763:4:48;1536:16:82;;:::i;:::-;1512:40;;1574:29;24973:1:83;1574:29:82;:::i;7296:217::-;766:27655:83;;;;;;;;;:::i;:::-;7471:1:82;766:27655:83;;;;;;-1:-1:-1;766:27655:83;;;;;;7479:13:82;;;;;;:::i;:::-;;;;;:::i;:::-;;7296:217;:::o;766:27655:83:-;;;;;;;;:::i;:::-;-1:-1:-1;766:27655:83;;-1:-1:-1;766:27655:83;;;;-1:-1:-1;766:27655:83;;;;-1:-1:-1;766:27655:83;;;;;;;;;;;;;;;;;;2270:110:4;;766:27655:83;2349:24:4;;;;766:27655:83;;2349:24:4;2024:14:2;2349:24:4;;;;;2024:14:2;766:27655:83;;;2024:14:2;-1:-1:-1;2349:24:4;;;766:27655:83;2349:24:4;;;;;;;;2270:110;:::o;2349:24::-;-1:-1:-1;2349:24:4;;;:::i;2386:134::-;;1439:37:83;2484:29:4;766:27655:83;2484:29:4;;;;766:27655:83;;;;;;2484:29:4;;;;;2024:14:2;2484:29:4;;;;;2024:14:2;766:27655:83;;;;2024:14:2;766:27655:83;;;;;;;;;;:::i;:::-;2484:29:4;;766:27655:83;2484:29:4;;;;;;;;2386:134;;:::o;2484:29::-;;;;;:::i;:::-;766:27655:83;;;2386:134:4;;766:27655:83;2484:29:4;;;;-1:-1:-1;766:27655:83;;;;2484:29:4;;;;;2024:14:2;2484:29:4;;;;;2024:14:2;766:27655:83;;;2024:14:2;766:27655:83;;;;;;;;;;:::i;:::-;2484:29:4;;766:27655:83;2484:29:4;;;;;;;;2386:134;:::o;766:27655:83:-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;1042:78:15;;;;;;;:::o;:::-;766:27655:83;;;;;;;;;1546:1263:15;766:27655:83;1664:10:15;1656:85;1664:10;;;;1656:85;:::i;:::-;1970:8;;;;;;:20;;;1546:1263;1966:34;;2026:13;:9;;;;:::i;:::-;:13;:::i;:::-;2229:6;2234:1;2229:6;;;:18;;;1546:1263;2225:38;;766:27655:83;2277:20:15;;;:46;;;1546:1263;2273:82;;2455:7;;;;;;2493;;;;;2528:11;2493:7;;:::i;:::-;2528:11;:::i;:::-;2557:8;;;2553:24;;2600:9;:13;:9;;;;:::i;2553:24::-;2567:10;;;;:::o;2451:352::-;2630:173;;;;;;;;2451:352;;;;;1546:1263::o;2630:173::-;2672:7;;;;;;2707:11;2672:7;;;:::i;2707:11::-;2736:8;;;2732:24;;2779:9;:13;:9;;;;:::i;:13::-;2630:173;;;;;;;2273:82;2339:15;;;;2332:23;2339:15;;;766:27655:83;;2332:23:15;:::i;2277:46::-;2308:15;766:27655:83;;2301:22:15;;2277:46;;2225:38;2256:7;;;;;;;;;:::i;2229:18::-;2239:8;;;;2229:18;;1966:34;1992:8;;;;;;:::o;1970:20::-;1982:8;;;;;1970:20;","linkReferences":{}},"methodIdentifiers":{"IS_TEST()":"fa7626d4","excludeArtifacts()":"b5508aa9","excludeContracts()":"e20c9f71","excludeSelectors()":"b0464fdc","excludeSenders()":"1ed7831c","failed()":"ba414fa6","setUp()":"0a9254e4","targetArtifactSelectors()":"66d9a9a0","targetArtifacts()":"85226c81","targetContracts()":"3f7286f4","targetInterfaces()":"2ade3880","targetSelectors()":"916a17c6","targetSenders()":"3e5e3c23","test_incrementUsageLimit((bytes32,uint256)[])":"512e9ee2","test_incrementUsageLimit_decrement((bytes32,uint256))":"7c446162","test_incrementUsageLimit_twice((bytes32,uint256)[])":"9ee306ed","test_validateExplicitCall(uint64,address,bytes4,bytes)":"cae9ba80","test_validateExplicitCall_DelegateCall(uint64)":"f95a0554","test_validateExplicitCall_InvalidPermission(uint64)":"b53bc950","test_validateExplicitCall_InvalidSelfCall_Selector(uint64)":"ad4d5bf7","test_validateExplicitCall_InvalidSelfCall_Value(uint64)":"1cf4449c","test_validateExplicitCall_InvalidSessionSigner(address,uint64)":"4f40fc4f","test_validateExplicitCall_MissingPermission(uint64)":"eeb801f3","test_validateExplicitCall_MultipleValues(uint64,uint256,uint256,uint256,uint256)":"a2e84088","test_validateExplicitCall_SessionExpired(uint64,uint64,uint64)":"15b4cfcc","test_validateExplicitCall_ValueLimitExceeded(uint64)":"ae0d51a5","test_validateExplicitCall_invalidChainId(uint64,uint256,address,bytes4,bytes)":"c194a6c5","test_validateLimitUsageIncrement_InvalidBehaviorOnError()":"b125aa50","test_validateLimitUsageIncrement_InvalidCall()":"73f7d27c","test_validateLimitUsageIncrement_InvalidCallData()":"03a7f7cd","test_validateLimitUsageIncrement_rule((bytes32,uint256))":"9729cadc","test_validateLimitUsageIncrement_value(uint256)":"9f7f8430"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"IS_TEST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"excludedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setUp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifactSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"artifact\",\"type\":\"string\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzArtifactSelector[]\",\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"targetedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetInterfaces\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"artifacts\",\"type\":\"string[]\"}],\"internalType\":\"struct StdInvariant.FuzzInterface[]\",\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"usageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"usageAmount\",\"type\":\"uint256\"}],\"internalType\":\"struct UsageLimit[]\",\"name\":\"limits\",\"type\":\"tuple[]\"}],\"name\":\"test_incrementUsageLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"usageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"usageAmount\",\"type\":\"uint256\"}],\"internalType\":\"struct UsageLimit\",\"name\":\"limit\",\"type\":\"tuple\"}],\"name\":\"test_incrementUsageLimit_decrement\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"usageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"usageAmount\",\"type\":\"uint256\"}],\"internalType\":\"struct UsageLimit[]\",\"name\":\"limits\",\"type\":\"tuple[]\"}],\"name\":\"test_incrementUsageLimit_twice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"test_validateExplicitCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"}],\"name\":\"test_validateExplicitCall_DelegateCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"}],\"name\":\"test_validateExplicitCall_InvalidPermission\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"}],\"name\":\"test_validateExplicitCall_InvalidSelfCall_Selector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"}],\"name\":\"test_validateExplicitCall_InvalidSelfCall_Value\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"invalidSigner\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"}],\"name\":\"test_validateExplicitCall_InvalidSessionSigner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"}],\"name\":\"test_validateExplicitCall_MissingPermission\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"firstValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"secondValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"thirdValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"valueLimit\",\"type\":\"uint256\"}],\"name\":\"test_validateExplicitCall_MultipleValues\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"currentTimestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"expiredTimestamp\",\"type\":\"uint64\"}],\"name\":\"test_validateExplicitCall_SessionExpired\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"}],\"name\":\"test_validateExplicitCall_ValueLimitExceeded\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"invalidChainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"test_validateExplicitCall_invalidChainId\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"test_validateLimitUsageIncrement_InvalidBehaviorOnError\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"test_validateLimitUsageIncrement_InvalidCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"test_validateLimitUsageIncrement_InvalidCallData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"usageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"usageAmount\",\"type\":\"uint256\"}],\"internalType\":\"struct UsageLimit\",\"name\":\"limit\",\"type\":\"tuple\"}],\"name\":\"test_validateLimitUsageIncrement_rule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"test_validateLimitUsageIncrement_value\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/extensions/sessions/explicit/ExplicitSessionManager.t.sol\":\"ExplicitSessionManagerTest\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/extensions/sessions/SessionErrors.sol\":{\"keccak256\":\"0xa7642b4ef1d2ac8e41bd6dca88c5a644cac21b3ebe79deb5013e21fb4aaab405\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ef80768f6c509a54ea5d3fb92cbf46363f945f071cc3664710770c09b3d2a978\",\"dweb:/ipfs/QmbRpicAiPSYQbKpjoDbanap9q5hYsqEMS1u7w7sqKEYTY\"]},\"src/extensions/sessions/SessionManager.sol\":{\"keccak256\":\"0x796e8db3b2dc58842aca5c7fe76897527dd60279a8146ee107f651d876fccbd9\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2ee4d968a8bd5d007cccc67108509470677f4f5ce59dce7005b1da7d9b243609\",\"dweb:/ipfs/QmVUz8Q4BwNsbeLZdsWHg87MCVF6aAJL6UYzWWWAoxjvS7\"]},\"src/extensions/sessions/SessionSig.sol\":{\"keccak256\":\"0x7c44eabacfd2b4758fa8f54574f7479d8ef0209551ad824b3fc497c215a9609a\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://845b301783b1f069fa0b01d47ca2de1a79b0d4c3e14881973421a718c4d823df\",\"dweb:/ipfs/QmcDgiqjENAL3L7MjQ7HgitmsJ2PVNUm3ibnL2DZRU1VAL\"]},\"src/extensions/sessions/explicit/ExplicitSessionManager.sol\":{\"keccak256\":\"0x08405cc3def78d4172267a2e607e303b5f222d8cb85ba009deab58e0110088b0\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e2e073fdb5794f59ee6d7eb5e04074b1452e5d0824e4117259835071199f3d32\",\"dweb:/ipfs/Qmbi56yfELF88ezZ2tczegLmeB6Gb3HxDX11bzx3rpDgJZ\"]},\"src/extensions/sessions/explicit/IExplicitSessionManager.sol\":{\"keccak256\":\"0xae940e96cf0677c9b0df0daee07db0293c55a21cec0b893d82eefd122815602b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://62ee98f92121ad54f78d375ec3003aab73719adec852b0d12518fe99fc6f66c6\",\"dweb:/ipfs/QmPuAX7tdga5Su1xua6LS6jR9DsV7GyCwyZLeRC8upPTKY\"]},\"src/extensions/sessions/explicit/Permission.sol\":{\"keccak256\":\"0x0bc35a04da3830c64ec13c32b57f88be6b980228f6b387e800cf70919cdcfb16\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://fcb304612f894699f8e1e40cf134abebe8f7135795bea479b04e967551c59948\",\"dweb:/ipfs/Qme4mD8dh3xU9wbscQwvL4cQcZ2Wv8Fobo2fmU29B3DirV\"]},\"src/extensions/sessions/explicit/PermissionValidator.sol\":{\"keccak256\":\"0xe970e1ce931ef3779e3ddc9525b40820b7f63746828a440306ff9c984da42234\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://9154a986b7a5565119b2c0993dd9bc9e6e9b3e07eede034c8fde1c9f39a56a30\",\"dweb:/ipfs/QmXbgsr6kYYK5gmge6sosgwbHnFnQW5ntCZCyeNTQqTndD\"]},\"src/extensions/sessions/implicit/Attestation.sol\":{\"keccak256\":\"0xcaa44022b5eb4bc7ab487b3b1a0125da67e2e891cee983ef6cdb6814f045efc8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://94829782b6dcb482d7c002511c590d1ad8de3b21e5e72575df18be73565b3638\",\"dweb:/ipfs/QmZ4u9FxALzMzKR7auW8FmFkhGVw8kRDeDRJ1PKwKaWNWF\"]},\"src/extensions/sessions/implicit/ISignalsImplicitMode.sol\":{\"keccak256\":\"0x6cb48f50c49bcb3c7071306fe9fac6c102bc9eabf73d9909e19ab3b9a835d0a8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://15297e969f64fc1152654d1cefbe276c15a0ecfc11f86b4c276bb0b454fe700a\",\"dweb:/ipfs/QmeehNFYBPPtJePwUcqiYCgiuFotur4VVVCV1KvegdCCZ4\"]},\"src/extensions/sessions/implicit/ImplicitSessionManager.sol\":{\"keccak256\":\"0xe0d4f9f9c242e1e5781ba3a2eb4c4485b16de53769dacf7f448be01649d9997b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://f6f28cfeca83fffc74e63440243fcb0a7f9a7d5ac5efae21fa8e96926c1d0fae\",\"dweb:/ipfs/Qmdnw9PrjjpUjWij9VDxBRe6besuJvpwiGaPewVcR2G9C1\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/interfaces/ISapient.sol\":{\"keccak256\":\"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489\",\"dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"src/utils/LibOptim.sol\":{\"keccak256\":\"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81\",\"dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x\"]},\"test/extensions/sessions/SessionTestBase.sol\":{\"keccak256\":\"0x96ed18b2829a94a4e2fa0331b595e931ba48114679aa9765799aa9583713a1e7\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1f5dc74df056ea0b6722898060c5f467d47c7961335d474d93a3d45a75575894\",\"dweb:/ipfs/QmPT1ArcYmBUASEr2iL5TnRRkwShMahRh8YWurcbGkwJa4\"]},\"test/extensions/sessions/explicit/ExplicitSessionManager.t.sol\":{\"keccak256\":\"0x593be627e5b81ff8958545c7a562db0ad22ad70511f318ab0ac867df2e3e82ca\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://68fbc8fbddb0e7490e9c2465ff26691263c3bac2208869cf8714c03a4cd61ab5\",\"dweb:/ipfs/QmeNWGGrBmgQqx95mFZyANyCX59f9513EEJszoAR9bN7En\"]},\"test/utils/PrimitivesRPC.sol\":{\"keccak256\":\"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe\",\"dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv\"]},\"test/utils/TestUtils.sol\":{\"keccak256\":\"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad\",\"dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log","anonymous":false},{"inputs":[{"internalType":"address","name":"","type":"address","indexed":false}],"type":"event","name":"log_address","anonymous":false},{"inputs":[{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"log_bytes","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32","indexed":false}],"type":"event","name":"log_bytes32","anonymous":false},{"inputs":[{"internalType":"int256","name":"","type":"int256","indexed":false}],"type":"event","name":"log_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address","name":"val","type":"address","indexed":false}],"type":"event","name":"log_named_address","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes","name":"val","type":"bytes","indexed":false}],"type":"event","name":"log_named_bytes","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes32","name":"val","type":"bytes32","indexed":false}],"type":"event","name":"log_named_bytes32","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false}],"type":"event","name":"log_named_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"string","name":"val","type":"string","indexed":false}],"type":"event","name":"log_named_string","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false}],"type":"event","name":"log_named_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log_string","anonymous":false},{"inputs":[{"internalType":"uint256","name":"","type":"uint256","indexed":false}],"type":"event","name":"log_uint","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"logs","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"IS_TEST","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeArtifacts","outputs":[{"internalType":"string[]","name":"excludedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeContracts","outputs":[{"internalType":"address[]","name":"excludedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"excludedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSenders","outputs":[{"internalType":"address[]","name":"excludedSenders_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"failed","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"setUp"},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifactSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzArtifactSelector[]","name":"targetedArtifactSelectors_","type":"tuple[]","components":[{"internalType":"string","name":"artifact","type":"string"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifacts","outputs":[{"internalType":"string[]","name":"targetedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetContracts","outputs":[{"internalType":"address[]","name":"targetedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetInterfaces","outputs":[{"internalType":"struct StdInvariant.FuzzInterface[]","name":"targetedInterfaces_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"string[]","name":"artifacts","type":"string[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"targetedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSenders","outputs":[{"internalType":"address[]","name":"targetedSenders_","type":"address[]"}]},{"inputs":[{"internalType":"struct UsageLimit[]","name":"limits","type":"tuple[]","components":[{"internalType":"bytes32","name":"usageHash","type":"bytes32"},{"internalType":"uint256","name":"usageAmount","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"test_incrementUsageLimit"},{"inputs":[{"internalType":"struct UsageLimit","name":"limit","type":"tuple","components":[{"internalType":"bytes32","name":"usageHash","type":"bytes32"},{"internalType":"uint256","name":"usageAmount","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"test_incrementUsageLimit_decrement"},{"inputs":[{"internalType":"struct UsageLimit[]","name":"limits","type":"tuple[]","components":[{"internalType":"bytes32","name":"usageHash","type":"bytes32"},{"internalType":"uint256","name":"usageAmount","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"test_incrementUsageLimit_twice"},{"inputs":[{"internalType":"uint64","name":"chainId","type":"uint64"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"selector","type":"bytes4"},{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"test_validateExplicitCall"},{"inputs":[{"internalType":"uint64","name":"chainId","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"test_validateExplicitCall_DelegateCall"},{"inputs":[{"internalType":"uint64","name":"chainId","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"test_validateExplicitCall_InvalidPermission"},{"inputs":[{"internalType":"uint64","name":"chainId","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"test_validateExplicitCall_InvalidSelfCall_Selector"},{"inputs":[{"internalType":"uint64","name":"chainId","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"test_validateExplicitCall_InvalidSelfCall_Value"},{"inputs":[{"internalType":"address","name":"invalidSigner","type":"address"},{"internalType":"uint64","name":"chainId","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"test_validateExplicitCall_InvalidSessionSigner"},{"inputs":[{"internalType":"uint64","name":"chainId","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"test_validateExplicitCall_MissingPermission"},{"inputs":[{"internalType":"uint64","name":"chainId","type":"uint64"},{"internalType":"uint256","name":"firstValue","type":"uint256"},{"internalType":"uint256","name":"secondValue","type":"uint256"},{"internalType":"uint256","name":"thirdValue","type":"uint256"},{"internalType":"uint256","name":"valueLimit","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"test_validateExplicitCall_MultipleValues"},{"inputs":[{"internalType":"uint64","name":"chainId","type":"uint64"},{"internalType":"uint64","name":"currentTimestamp","type":"uint64"},{"internalType":"uint64","name":"expiredTimestamp","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"test_validateExplicitCall_SessionExpired"},{"inputs":[{"internalType":"uint64","name":"chainId","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"test_validateExplicitCall_ValueLimitExceeded"},{"inputs":[{"internalType":"uint64","name":"chainId","type":"uint64"},{"internalType":"uint256","name":"invalidChainId","type":"uint256"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"selector","type":"bytes4"},{"internalType":"bytes","name":"callData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"test_validateExplicitCall_invalidChainId"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"test_validateLimitUsageIncrement_InvalidBehaviorOnError"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"test_validateLimitUsageIncrement_InvalidCall"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"test_validateLimitUsageIncrement_InvalidCallData"},{"inputs":[{"internalType":"struct UsageLimit","name":"limit","type":"tuple","components":[{"internalType":"bytes32","name":"usageHash","type":"bytes32"},{"internalType":"uint256","name":"usageAmount","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"test_validateLimitUsageIncrement_rule"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"view","type":"function","name":"test_validateLimitUsageIncrement_value"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/extensions/sessions/explicit/ExplicitSessionManager.t.sol":"ExplicitSessionManagerTest"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/extensions/sessions/SessionErrors.sol":{"keccak256":"0xa7642b4ef1d2ac8e41bd6dca88c5a644cac21b3ebe79deb5013e21fb4aaab405","urls":["bzz-raw://ef80768f6c509a54ea5d3fb92cbf46363f945f071cc3664710770c09b3d2a978","dweb:/ipfs/QmbRpicAiPSYQbKpjoDbanap9q5hYsqEMS1u7w7sqKEYTY"],"license":"Apache-2.0"},"src/extensions/sessions/SessionManager.sol":{"keccak256":"0x796e8db3b2dc58842aca5c7fe76897527dd60279a8146ee107f651d876fccbd9","urls":["bzz-raw://2ee4d968a8bd5d007cccc67108509470677f4f5ce59dce7005b1da7d9b243609","dweb:/ipfs/QmVUz8Q4BwNsbeLZdsWHg87MCVF6aAJL6UYzWWWAoxjvS7"],"license":"Apache-2.0"},"src/extensions/sessions/SessionSig.sol":{"keccak256":"0x7c44eabacfd2b4758fa8f54574f7479d8ef0209551ad824b3fc497c215a9609a","urls":["bzz-raw://845b301783b1f069fa0b01d47ca2de1a79b0d4c3e14881973421a718c4d823df","dweb:/ipfs/QmcDgiqjENAL3L7MjQ7HgitmsJ2PVNUm3ibnL2DZRU1VAL"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/ExplicitSessionManager.sol":{"keccak256":"0x08405cc3def78d4172267a2e607e303b5f222d8cb85ba009deab58e0110088b0","urls":["bzz-raw://e2e073fdb5794f59ee6d7eb5e04074b1452e5d0824e4117259835071199f3d32","dweb:/ipfs/Qmbi56yfELF88ezZ2tczegLmeB6Gb3HxDX11bzx3rpDgJZ"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/IExplicitSessionManager.sol":{"keccak256":"0xae940e96cf0677c9b0df0daee07db0293c55a21cec0b893d82eefd122815602b","urls":["bzz-raw://62ee98f92121ad54f78d375ec3003aab73719adec852b0d12518fe99fc6f66c6","dweb:/ipfs/QmPuAX7tdga5Su1xua6LS6jR9DsV7GyCwyZLeRC8upPTKY"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/Permission.sol":{"keccak256":"0x0bc35a04da3830c64ec13c32b57f88be6b980228f6b387e800cf70919cdcfb16","urls":["bzz-raw://fcb304612f894699f8e1e40cf134abebe8f7135795bea479b04e967551c59948","dweb:/ipfs/Qme4mD8dh3xU9wbscQwvL4cQcZ2Wv8Fobo2fmU29B3DirV"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/PermissionValidator.sol":{"keccak256":"0xe970e1ce931ef3779e3ddc9525b40820b7f63746828a440306ff9c984da42234","urls":["bzz-raw://9154a986b7a5565119b2c0993dd9bc9e6e9b3e07eede034c8fde1c9f39a56a30","dweb:/ipfs/QmXbgsr6kYYK5gmge6sosgwbHnFnQW5ntCZCyeNTQqTndD"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/Attestation.sol":{"keccak256":"0xcaa44022b5eb4bc7ab487b3b1a0125da67e2e891cee983ef6cdb6814f045efc8","urls":["bzz-raw://94829782b6dcb482d7c002511c590d1ad8de3b21e5e72575df18be73565b3638","dweb:/ipfs/QmZ4u9FxALzMzKR7auW8FmFkhGVw8kRDeDRJ1PKwKaWNWF"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/ISignalsImplicitMode.sol":{"keccak256":"0x6cb48f50c49bcb3c7071306fe9fac6c102bc9eabf73d9909e19ab3b9a835d0a8","urls":["bzz-raw://15297e969f64fc1152654d1cefbe276c15a0ecfc11f86b4c276bb0b454fe700a","dweb:/ipfs/QmeehNFYBPPtJePwUcqiYCgiuFotur4VVVCV1KvegdCCZ4"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/ImplicitSessionManager.sol":{"keccak256":"0xe0d4f9f9c242e1e5781ba3a2eb4c4485b16de53769dacf7f448be01649d9997b","urls":["bzz-raw://f6f28cfeca83fffc74e63440243fcb0a7f9a7d5ac5efae21fa8e96926c1d0fae","dweb:/ipfs/Qmdnw9PrjjpUjWij9VDxBRe6besuJvpwiGaPewVcR2G9C1"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/interfaces/ISapient.sol":{"keccak256":"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359","urls":["bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489","dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"src/utils/LibOptim.sol":{"keccak256":"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde","urls":["bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81","dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x"],"license":"Apache-2.0"},"test/extensions/sessions/SessionTestBase.sol":{"keccak256":"0x96ed18b2829a94a4e2fa0331b595e931ba48114679aa9765799aa9583713a1e7","urls":["bzz-raw://1f5dc74df056ea0b6722898060c5f467d47c7961335d474d93a3d45a75575894","dweb:/ipfs/QmPT1ArcYmBUASEr2iL5TnRRkwShMahRh8YWurcbGkwJa4"],"license":"Apache-2.0"},"test/extensions/sessions/explicit/ExplicitSessionManager.t.sol":{"keccak256":"0x593be627e5b81ff8958545c7a562db0ad22ad70511f318ab0ac867df2e3e82ca","urls":["bzz-raw://68fbc8fbddb0e7490e9c2465ff26691263c3bac2208869cf8714c03a4cd61ab5","dweb:/ipfs/QmeNWGGrBmgQqx95mFZyANyCX59f9513EEJszoAR9bN7En"],"license":"Apache-2.0"},"test/utils/PrimitivesRPC.sol":{"keccak256":"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe","urls":["bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe","dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv"],"license":"Apache-2.0"},"test/utils/TestUtils.sol":{"keccak256":"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79","urls":["bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad","dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa"],"license":"Apache-2.0"}},"version":1},"id":83} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Factory.sol/Factory.json b/contracts/artifacts/wallet-contracts-v3/Factory.sol/Factory.json new file mode 100644 index 00000000..274da45f --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Factory.sol/Factory.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"deploy","inputs":[{"name":"_mainModule","type":"address","internalType":"address"},{"name":"_salt","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"_contract","type":"address","internalType":"address"}],"stateMutability":"payable"},{"type":"error","name":"DeployFailed","inputs":[{"name":"_mainModule","type":"address","internalType":"address"},{"name":"_salt","type":"bytes32","internalType":"bytes32"}]}],"bytecode":{"object":"0x6080806040523460155761029b908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c6332c02a141461002757600080fd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019f5760043573ffffffffffffffffffffffffffffffffffffffff811680820361019f5760243580916100eb6101176040519261008a846101d3565b602f84527f6041600e3d396021805130553df33d3d36153402601f57363d3d373d363d305460208501527f5af43d82803e903d91601f57fd5bf300000000000000000000000000000000006040850152604051928391602083019586610235565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826101f4565b519034f59173ffffffffffffffffffffffffffffffffffffffff8316156101595760405173ffffffffffffffffffffffffffffffffffffffff84168152602090f35b7f8caac8050000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff1660045260245260446000fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6060810190811067ffffffffffffffff8211176101ef57604052565b6101a4565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176101ef57604052565b9291909283519060005b8281106102525750019081526020019150565b806020809288010151818401520161023f56fea2646970667358221220be04d6b1fea99f8da63c42ae89d7f45bd43865e722cddb9cb70f1713011e9fe264736f6c634300081c0033","sourceMap":"195:927:25:-:0;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436101561001257600080fd5b60003560e01c6332c02a141461002757600080fd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019f5760043573ffffffffffffffffffffffffffffffffffffffff811680820361019f5760243580916100eb6101176040519261008a846101d3565b602f84527f6041600e3d396021805130553df33d3d36153402601f57363d3d373d363d305460208501527f5af43d82803e903d91601f57fd5bf300000000000000000000000000000000006040850152604051928391602083019586610235565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826101f4565b519034f59173ffffffffffffffffffffffffffffffffffffffff8316156101595760405173ffffffffffffffffffffffffffffffffffffffff84168152602090f35b7f8caac8050000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff1660045260245260446000fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6060810190811067ffffffffffffffff8211176101ef57604052565b6101a4565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176101ef57604052565b9291909283519060005b8281106102525750019081526020019150565b806020809288010151818401520161023f56fea2646970667358221220be04d6b1fea99f8da63c42ae89d7f45bd43865e722cddb9cb70f1713011e9fe264736f6c634300081c0033","sourceMap":"195:927:25:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;862:68;;195:927;;;;;;:::i;:::-;;;;;;;;;;;;;;;;862:68;;;195:927;862:68;;;;;:::i;:::-;;195:927;862:68;;;;;;:::i;:::-;936:91;;;;195:927;;;;1036:23;1032:83;;195:927;;;;;;;;;;1032:83;1076:32;195:927;1076:32;195:927;;;;2177:99:30;;;195:927:25;1076:32;195:927;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::o;2177:99:30:-;;;;;;;;-1:-1:-1;2177:99:30;;;;;;-1:-1:-1;2177:99:30;;;;;;;-1:-1:-1;2177:99:30:o;:::-;;;;;;;;;;;;;;;","linkReferences":{}},"methodIdentifiers":{"deploy(address,bytes32)":"32c02a14"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_mainModule\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"}],\"name\":\"DeployFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_mainModule\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"}],\"name\":\"deploy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_contract\",\"type\":\"address\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Agustin Aguilar, Michael Standen\",\"kind\":\"dev\",\"methods\":{\"deploy(address,bytes32)\":{\"details\":\"It is recommended to not have more than 200 signers as opcode repricing could make transactions impossible to execute as all the signers must be passed for each transaction.\",\"params\":{\"_mainModule\":\"Address of the main module to be used by the wallet\",\"_salt\":\"Salt used to generate the wallet, which is the imageHash of the wallet's configuration.\"}}},\"title\":\"Factory\",\"version\":1},\"userdoc\":{\"errors\":{\"DeployFailed(address,bytes32)\":[{\"notice\":\"Error thrown when the deployment fails\"}]},\"kind\":\"user\",\"methods\":{\"deploy(address,bytes32)\":{\"notice\":\"Deploy a new wallet instance\"}},\"notice\":\"Factory for deploying wallets\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Factory.sol\":\"Factory\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/Factory.sol\":{\"keccak256\":\"0x5924fe583809e9c148d47c871866f6094599bb07a4d1fc2d60c814fda9c37f46\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e24d3575bf2606cd5f0f6da093e420118e018549eeb3a4ccb94f57c0e285e123\",\"dweb:/ipfs/QmRvWQt91YLJEgk5hgnRkPjDdB39tUHLYtxijYyXKdCm5J\"]},\"src/Wallet.sol\":{\"keccak256\":\"0xe01e9e937dd8d7572976ccc8ec3ec87e4a557069dafb05f85977a7b71f5c58d5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2e9ab78d33655f8e822258dff3f2d5ad01e84f6dc90174840d5a283b8e6413c1\",\"dweb:/ipfs/QmNMyYe3C1fs3cxKmUZ3S9VU5EE4WVWPVcwiGbgvbS1vrH\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_mainModule","type":"address"},{"internalType":"bytes32","name":"_salt","type":"bytes32"}],"type":"error","name":"DeployFailed"},{"inputs":[{"internalType":"address","name":"_mainModule","type":"address"},{"internalType":"bytes32","name":"_salt","type":"bytes32"}],"stateMutability":"payable","type":"function","name":"deploy","outputs":[{"internalType":"address","name":"_contract","type":"address"}]}],"devdoc":{"kind":"dev","methods":{"deploy(address,bytes32)":{"details":"It is recommended to not have more than 200 signers as opcode repricing could make transactions impossible to execute as all the signers must be passed for each transaction.","params":{"_mainModule":"Address of the main module to be used by the wallet","_salt":"Salt used to generate the wallet, which is the imageHash of the wallet's configuration."}}},"version":1},"userdoc":{"kind":"user","methods":{"deploy(address,bytes32)":{"notice":"Deploy a new wallet instance"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/Factory.sol":"Factory"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/Factory.sol":{"keccak256":"0x5924fe583809e9c148d47c871866f6094599bb07a4d1fc2d60c814fda9c37f46","urls":["bzz-raw://e24d3575bf2606cd5f0f6da093e420118e018549eeb3a4ccb94f57c0e285e123","dweb:/ipfs/QmRvWQt91YLJEgk5hgnRkPjDdB39tUHLYtxijYyXKdCm5J"],"license":"Apache-2.0"},"src/Wallet.sol":{"keccak256":"0xe01e9e937dd8d7572976ccc8ec3ec87e4a557069dafb05f85977a7b71f5c58d5","urls":["bzz-raw://2e9ab78d33655f8e822258dff3f2d5ad01e84f6dc90174840d5a283b8e6413c1","dweb:/ipfs/QmNMyYe3C1fs3cxKmUZ3S9VU5EE4WVWPVcwiGbgvbS1vrH"],"license":"Apache-2.0"}},"version":1},"id":25} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Factory.t.sol/FactoryTest.json b/contracts/artifacts/wallet-contracts-v3/Factory.t.sol/FactoryTest.json new file mode 100644 index 00000000..bda17b2a --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Factory.t.sol/FactoryTest.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"excludeArtifacts","inputs":[],"outputs":[{"name":"excludedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"excludeContracts","inputs":[],"outputs":[{"name":"excludedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"excludeSelectors","inputs":[],"outputs":[{"name":"excludedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"excludeSenders","inputs":[],"outputs":[{"name":"excludedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"setUp","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"targetArtifactSelectors","inputs":[],"outputs":[{"name":"targetedArtifactSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzArtifactSelector[]","components":[{"name":"artifact","type":"string","internalType":"string"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetArtifacts","inputs":[],"outputs":[{"name":"targetedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"targetContracts","inputs":[],"outputs":[{"name":"targetedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"targetInterfaces","inputs":[],"outputs":[{"name":"targetedInterfaces_","type":"tuple[]","internalType":"struct StdInvariant.FuzzInterface[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"artifacts","type":"string[]","internalType":"string[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSelectors","inputs":[],"outputs":[{"name":"targetedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSenders","inputs":[],"outputs":[{"name":"targetedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"test_deploy","inputs":[{"name":"_mainModule","type":"address","internalType":"address"},{"name":"_salt","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_deployForwardValue","inputs":[{"name":"_mainModule","type":"address","internalType":"address"},{"name":"_salt","type":"bytes32","internalType":"bytes32"},{"name":"_value","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_deployTwice","inputs":[{"name":"_mainModule","type":"address","internalType":"address"},{"name":"_salt","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false}],"bytecode":{"object":"0x60808060405234602f57600160ff19600c541617600c55600160ff19601f541617601f55611be790816100358239f35b600080fdfe608080604052600436101561001357600080fd5b600090813560e01c9081630a9254e414611076575080631ed7831c14610fcd5780632ade388014610da15780633e5e3c2314610cf85780633f7286f414610c4f57806342b1eac114610ad357806366d9a9a01461097857806385226c81146108d0578063916a17c6146107fb578063a5a5cd2414610601578063b0464fdc1461052c578063b5508aa914610484578063b96c02ce14610210578063ba414fa6146101cd578063e20c9f71146101145763fa7626d4146100d157600080fd5b3461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011157602060ff601f54166040519015158152f35b80fd5b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101115760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b8181106101a15761019d85610191818703826113e2565b60405191829182611147565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff1684526020909301926001928301920161017a565b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610111576020610206611815565b6040519015158152f35b50346101115760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610111576102486111f6565b601f546040517f32c02a1400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8084166004830152602480359083018190529392602091839160081c168187816044810103925af180156104795761045c575b506040517f8caac80500000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff821660248201526044808201849052815283906103166064826113e2565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610458578161037191604051809381927ff28dceb3000000000000000000000000000000000000000000000000000000008352602060048401526024830190611197565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156104345761043f575b5050601f546040517f32c02a1400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810193909352602091839160081c168185816044810103925af1801561043457610408575080f35b6104299060203d60201161042d575b61042181836113e2565b810190611542565b5080f35b503d610417565b6040513d84823e3d90fd5b81610449916113e2565b610454578238610396565b8280fd5b5080fd5b6104749060203d60201161042d5761042181836113e2565b6102b9565b6040513d86823e3d90fd5b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610111576019546104bf81611423565b916104cd60405193846113e2565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b83831061050f576040518061019d8782611274565b60016020819261051e8561143b565b8152019201920191906104fa565b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011157601c5461056781611423565b9161057560405193846113e2565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b8383106105b7576040518061019d87826112f2565b600260206001926040516105ca81611397565b73ffffffffffffffffffffffffffffffffffffffff86541681526105ef85870161156e565b838201528152019201920191906105a2565b50346101115760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610111578061063a6111f6565b60443590737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156107b257604051907fc88a5e6d000000000000000000000000000000000000000000000000000000008252306004830152826024830152838260448183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561047957839285916107e0575b5050601f546040517f32c02a1400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260248035908201529260209284926044928492909160081c165af19081156107d55783916107b6575b503190737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156107b257604051917f98296c54000000000000000000000000000000000000000000000000000000008352600483015260248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610434576107a15750f35b816107ab916113e2565b6101115780f35b5050fd5b6107cf915060203d60201161042d5761042181836113e2565b38610729565b6040513d85823e3d90fd5b81929350906107ee916113e2565b6107b257819083386106b8565b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011157601d5461083681611423565b9161084460405193846113e2565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b838310610886576040518061019d87826112f2565b6002602060019260405161089981611397565b73ffffffffffffffffffffffffffffffffffffffff86541681526108be85870161156e565b83820152815201920192019190610871565b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011157601a5461090b81611423565b9161091960405193846113e2565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b83831061095b576040518061019d8782611274565b60016020819261096a8561143b565b815201920192019190610946565b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011157601b546109b381611423565b6109c060405191826113e2565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b838310610a9857868587604051928392602084019060208552518091526040840160408260051b8601019392905b828210610a2d57505050500390f35b91936020610a88827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0600195979984950301865288519083610a788351604084526040840190611197565b920151908481840391015261121e565b9601920192018594939192610a1e565b60026020600192604051610aab81611397565b610ab48661143b565b8152610ac185870161156e565b838201528152019201920191906109f0565b50346101115760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011157806020610b8a610b116111f6565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c16906040519485809481937f32c02a1400000000000000000000000000000000000000000000000000000000835260243590600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af1908115610434578291610c30575b503b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561045857604051907fb79093200000000000000000000000000000000000000000000000000000000082526004820152816024820152818082604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610c2357610c155780f35b610c1e916113e2565b388180f35b50604051903d90823e3d90fd5b610c49915060203d60201161042d5761042181836113e2565b38610b9c565b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101115760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b818110610ccc5761019d85610191818703826113e2565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610cb5565b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101115760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b818110610d755761019d85610191818703826113e2565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610d5e565b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011157601e54610ddc81611423565b610de960405191826113e2565b818152601e83526020810191837f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350845b838310610f375786858760405192839260208401906020855251809152604084019160408260051b8601019392815b838310610e555786860387f35b9193957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09086929496030183528551906020604082019273ffffffffffffffffffffffffffffffffffffffff81511683520151916040602083015282518091526060820190602060608260051b850101940192855b828110610eee57505050505060208060019297019301930190928695949293610e48565b9091929394602080610f2a837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa087600196030189528951611197565b9701950193929101610eca565b604051610f4381611397565b73ffffffffffffffffffffffffffffffffffffffff8354168152600183018054610f6c81611423565b91610f7a60405193846113e2565b8183528a526020808b20908b9084015b838210610fb0575050505060019282602092836002950152815201920192019190610e19565b600160208192610fbf8661143b565b815201930191019091610f8a565b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101115760405180916020601654928381520191601682527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289915b81811061104a5761019d85610191818703826113e2565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201611033565b90503461045857817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610458576102b68082019082821067ffffffffffffffff83111761111a579082916118fc8339039082f08015610c23577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00601f549260081b16911617601f5580f35b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b602060408183019282815284518094520192019060005b81811061116b5750505090565b825173ffffffffffffffffffffffffffffffffffffffff1684526020938401939092019160010161115e565b919082519283825260005b8481106111e15750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b806020809284010151828286010152016111a2565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361121957565b600080fd5b906020808351928381520192019060005b81811061123c5750505090565b82517fffffffff000000000000000000000000000000000000000000000000000000001684526020938401939092019160010161122f565b602081016020825282518091526040820191602060408360051b8301019401926000915b8383106112a757505050505090565b90919293946020806112e3837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187528951611197565b97019301930191939290611298565b602081016020825282518091526040820191602060408360051b8301019401926000915b83831061132557505050505090565b9091929394602080611388837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff81511684520151918185820152019061121e565b97019301930191939290611316565b6040810190811067ffffffffffffffff8211176113b357604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176113b357604052565b67ffffffffffffffff81116113b35760051b60200190565b906040519160008154918260011c92600181168015611538575b60208510811461150b578487528693929181156114cb5750600114611484575b50611482925003836113e2565b565b90506000929192526020600020906000915b8183106114af5750509060206114829282010138611475565b6020919350806001915483858901015201910190918492611496565b602093506114829592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b82010138611475565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f1693611455565b90816020910312611219575173ffffffffffffffffffffffffffffffffffffffff811681036112195790565b90604051918281549182825260208201906000526020600020926000905b80600783011061178857611482945491818110611752575b81811061171c575b8181106116e6575b8181106116b0575b81811061167a575b818110611644575b81811061160f575b106115e2575b5003836113e2565b7fffffffff00000000000000000000000000000000000000000000000000000000168152602001386115da565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b1681520193016115d4565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b1681520193016115cc565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b1681520193016115c4565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b1681520193016115bc565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b1681520193016115b4565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b1681520193016115ac565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b1681520193016115a4565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e082015201940192018592939161158c565b60085460ff1680156118245790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156118ef576000916118bd575b50151590565b90506020813d6020116118e7575b816118d8602093836113e2565b810103126112195751386118b7565b3d91506118cb565b6040513d6000823e3d90fdfe6080806040523460155761029b908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c6332c02a141461002757600080fd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019f5760043573ffffffffffffffffffffffffffffffffffffffff811680820361019f5760243580916100eb6101176040519261008a846101d3565b602f84527f6041600e3d396021805130553df33d3d36153402601f57363d3d373d363d305460208501527f5af43d82803e903d91601f57fd5bf300000000000000000000000000000000006040850152604051928391602083019586610235565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826101f4565b519034f59173ffffffffffffffffffffffffffffffffffffffff8316156101595760405173ffffffffffffffffffffffffffffffffffffffff84168152602090f35b7f8caac8050000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff1660045260245260446000fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6060810190811067ffffffffffffffff8211176101ef57604052565b6101a4565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176101ef57604052565b9291909283519060005b8281106102525750019081526020019150565b806020809288010151818401520161023f56fea2646970667358221220be04d6b1fea99f8da63c42ae89d7f45bd43865e722cddb9cb70f1713011e9fe264736f6c634300081c0033a26469706673582212202799c2fbd8820df6f85e2d86c0b3d02262b36e5b54c77f7f658ed032f67b4b9664736f6c634300081c0033","sourceMap":"161:799:72:-:0;;;;;;;3166:4:5;161:799:72;;3166:4:5;161:799:72;;;3166:4:5;161:799:72;3166:4:5;161:799:72;;1087:4:16;161:799:72;;;1087:4:16;161:799:72;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608080604052600436101561001357600080fd5b600090813560e01c9081630a9254e414611076575080631ed7831c14610fcd5780632ade388014610da15780633e5e3c2314610cf85780633f7286f414610c4f57806342b1eac114610ad357806366d9a9a01461097857806385226c81146108d0578063916a17c6146107fb578063a5a5cd2414610601578063b0464fdc1461052c578063b5508aa914610484578063b96c02ce14610210578063ba414fa6146101cd578063e20c9f71146101145763fa7626d4146100d157600080fd5b3461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011157602060ff601f54166040519015158152f35b80fd5b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101115760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b8181106101a15761019d85610191818703826113e2565b60405191829182611147565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff1684526020909301926001928301920161017a565b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610111576020610206611815565b6040519015158152f35b50346101115760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610111576102486111f6565b601f546040517f32c02a1400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8084166004830152602480359083018190529392602091839160081c168187816044810103925af180156104795761045c575b506040517f8caac80500000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff821660248201526044808201849052815283906103166064826113e2565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610458578161037191604051809381927ff28dceb3000000000000000000000000000000000000000000000000000000008352602060048401526024830190611197565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156104345761043f575b5050601f546040517f32c02a1400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810193909352602091839160081c168185816044810103925af1801561043457610408575080f35b6104299060203d60201161042d575b61042181836113e2565b810190611542565b5080f35b503d610417565b6040513d84823e3d90fd5b81610449916113e2565b610454578238610396565b8280fd5b5080fd5b6104749060203d60201161042d5761042181836113e2565b6102b9565b6040513d86823e3d90fd5b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610111576019546104bf81611423565b916104cd60405193846113e2565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b83831061050f576040518061019d8782611274565b60016020819261051e8561143b565b8152019201920191906104fa565b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011157601c5461056781611423565b9161057560405193846113e2565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b8383106105b7576040518061019d87826112f2565b600260206001926040516105ca81611397565b73ffffffffffffffffffffffffffffffffffffffff86541681526105ef85870161156e565b838201528152019201920191906105a2565b50346101115760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610111578061063a6111f6565b60443590737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156107b257604051907fc88a5e6d000000000000000000000000000000000000000000000000000000008252306004830152826024830152838260448183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561047957839285916107e0575b5050601f546040517f32c02a1400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260248035908201529260209284926044928492909160081c165af19081156107d55783916107b6575b503190737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156107b257604051917f98296c54000000000000000000000000000000000000000000000000000000008352600483015260248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610434576107a15750f35b816107ab916113e2565b6101115780f35b5050fd5b6107cf915060203d60201161042d5761042181836113e2565b38610729565b6040513d85823e3d90fd5b81929350906107ee916113e2565b6107b257819083386106b8565b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011157601d5461083681611423565b9161084460405193846113e2565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b838310610886576040518061019d87826112f2565b6002602060019260405161089981611397565b73ffffffffffffffffffffffffffffffffffffffff86541681526108be85870161156e565b83820152815201920192019190610871565b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011157601a5461090b81611423565b9161091960405193846113e2565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b83831061095b576040518061019d8782611274565b60016020819261096a8561143b565b815201920192019190610946565b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011157601b546109b381611423565b6109c060405191826113e2565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b838310610a9857868587604051928392602084019060208552518091526040840160408260051b8601019392905b828210610a2d57505050500390f35b91936020610a88827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0600195979984950301865288519083610a788351604084526040840190611197565b920151908481840391015261121e565b9601920192018594939192610a1e565b60026020600192604051610aab81611397565b610ab48661143b565b8152610ac185870161156e565b838201528152019201920191906109f0565b50346101115760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011157806020610b8a610b116111f6565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c16906040519485809481937f32c02a1400000000000000000000000000000000000000000000000000000000835260243590600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af1908115610434578291610c30575b503b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561045857604051907fb79093200000000000000000000000000000000000000000000000000000000082526004820152816024820152818082604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610c2357610c155780f35b610c1e916113e2565b388180f35b50604051903d90823e3d90fd5b610c49915060203d60201161042d5761042181836113e2565b38610b9c565b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101115760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b818110610ccc5761019d85610191818703826113e2565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610cb5565b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101115760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b818110610d755761019d85610191818703826113e2565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610d5e565b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011157601e54610ddc81611423565b610de960405191826113e2565b818152601e83526020810191837f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350845b838310610f375786858760405192839260208401906020855251809152604084019160408260051b8601019392815b838310610e555786860387f35b9193957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09086929496030183528551906020604082019273ffffffffffffffffffffffffffffffffffffffff81511683520151916040602083015282518091526060820190602060608260051b850101940192855b828110610eee57505050505060208060019297019301930190928695949293610e48565b9091929394602080610f2a837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa087600196030189528951611197565b9701950193929101610eca565b604051610f4381611397565b73ffffffffffffffffffffffffffffffffffffffff8354168152600183018054610f6c81611423565b91610f7a60405193846113e2565b8183528a526020808b20908b9084015b838210610fb0575050505060019282602092836002950152815201920192019190610e19565b600160208192610fbf8661143b565b815201930191019091610f8a565b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101115760405180916020601654928381520191601682527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289915b81811061104a5761019d85610191818703826113e2565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201611033565b90503461045857817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610458576102b68082019082821067ffffffffffffffff83111761111a579082916118fc8339039082f08015610c23577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00601f549260081b16911617601f5580f35b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b602060408183019282815284518094520192019060005b81811061116b5750505090565b825173ffffffffffffffffffffffffffffffffffffffff1684526020938401939092019160010161115e565b919082519283825260005b8481106111e15750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b806020809284010151828286010152016111a2565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361121957565b600080fd5b906020808351928381520192019060005b81811061123c5750505090565b82517fffffffff000000000000000000000000000000000000000000000000000000001684526020938401939092019160010161122f565b602081016020825282518091526040820191602060408360051b8301019401926000915b8383106112a757505050505090565b90919293946020806112e3837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187528951611197565b97019301930191939290611298565b602081016020825282518091526040820191602060408360051b8301019401926000915b83831061132557505050505090565b9091929394602080611388837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff81511684520151918185820152019061121e565b97019301930191939290611316565b6040810190811067ffffffffffffffff8211176113b357604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176113b357604052565b67ffffffffffffffff81116113b35760051b60200190565b906040519160008154918260011c92600181168015611538575b60208510811461150b578487528693929181156114cb5750600114611484575b50611482925003836113e2565b565b90506000929192526020600020906000915b8183106114af5750509060206114829282010138611475565b6020919350806001915483858901015201910190918492611496565b602093506114829592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b82010138611475565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f1693611455565b90816020910312611219575173ffffffffffffffffffffffffffffffffffffffff811681036112195790565b90604051918281549182825260208201906000526020600020926000905b80600783011061178857611482945491818110611752575b81811061171c575b8181106116e6575b8181106116b0575b81811061167a575b818110611644575b81811061160f575b106115e2575b5003836113e2565b7fffffffff00000000000000000000000000000000000000000000000000000000168152602001386115da565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b1681520193016115d4565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b1681520193016115cc565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b1681520193016115c4565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b1681520193016115bc565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b1681520193016115b4565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b1681520193016115ac565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b1681520193016115a4565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e082015201940192018592939161158c565b60085460ff1680156118245790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156118ef576000916118bd575b50151590565b90506020813d6020116118e7575b816118d8602093836113e2565b810103126112195751386118b7565b3d91506118cb565b6040513d6000823e3d90fdfe6080806040523460155761029b908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c6332c02a141461002757600080fd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019f5760043573ffffffffffffffffffffffffffffffffffffffff811680820361019f5760243580916100eb6101176040519261008a846101d3565b602f84527f6041600e3d396021805130553df33d3d36153402601f57363d3d373d363d305460208501527f5af43d82803e903d91601f57fd5bf300000000000000000000000000000000006040850152604051928391602083019586610235565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826101f4565b519034f59173ffffffffffffffffffffffffffffffffffffffff8316156101595760405173ffffffffffffffffffffffffffffffffffffffff84168152602090f35b7f8caac8050000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff1660045260245260446000fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6060810190811067ffffffffffffffff8211176101ef57604052565b6101a4565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176101ef57604052565b9291909283519060005b8281106102525750019081526020019150565b806020809288010151818401520161023f56fea2646970667358221220be04d6b1fea99f8da63c42ae89d7f45bd43865e722cddb9cb70f1713011e9fe264736f6c634300081c0033a26469706673582212202799c2fbd8820df6f85e2d86c0b3d02262b36e5b54c77f7f658ed032f67b4b9664736f6c634300081c0033","sourceMap":"161:799:72:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1065:26:16;161:799:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2723:18:9;161:799:72;;;;;;;2723:18:9;161:799:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;531:7;161:799;;;;531:34;;161:799;;;;;531:34;;161:799;;;;;;;;;;;;;;;;;;;;531:34;161:799;;;;531:34;;;;;;;;;;161:799;-1:-1:-1;161:799:72;;610:29;161:799;587:73;;;161:799;;;;587:73;;161:799;;;;;;;;587:73;;161:799;;587:73;161:799;;587:73;:::i;:::-;336:42:2;571:90:72;;;;161:799;;;;;571:90;;;;161:799;571:90;;161:799;;571:90;;161:799;;;;;;:::i;:::-;571:90;;;336:42:2;571:90:72;;;;;;;;161:799;-1:-1:-1;;531:7:72;161:799;;;;667:34;;161:799;;;;;667:34;;161:799;;;;;;;;;;;;;;;;;;;;;667:34;;;;;;;;;;161:799;;;667:34;;;161:799;667:34;161:799;667:34;;;;;;;;:::i;:::-;;;;;:::i;:::-;;161:799;;667:34;;;;;;161:799;;;;;;;;;571:90;;;;;:::i;:::-;161:799;;571:90;;;;161:799;;;;571:90;161:799;;;531:34;;;161:799;531:34;161:799;531:34;;;;;;;:::i;:::-;;;;161:799;;;;;;;;;;;;;;;;;;;;;2575:18:9;161:799:72;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;2575:18:9;161:799:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;2876:18:9;161:799:72;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;2876:18:9;161:799:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;810:30;336:42:2;810:30:72;;;;161:799;;810:30;161:799;810:30;;826:4;161:799;810:30;;161:799;2024:14:2;161:799:72;2024:14:2;;161:799:72;810:30;;161:799;810:30;;336:42:2;810:30:72;;;;;;;;;;;;161:799;-1:-1:-1;;863:7:72;161:799;;;;863:51;;161:799;;;;;863:51;;161:799;;;;;;;;;;;;;;;;;;;;;;863:51;;;;;;;;;;;161:799;929:14;;2349:24:4;336:42:2;2349:24:4;;;;161:799:72;;2349:24:4;161:799:72;2349:24:4;;161:799:72;2349:24:4;;161:799:72;;;;;2349:24:4;;161:799:72;2349:24:4;336:42:2;2349:24:4;;;;;;;;161:799:72;;2349:24:4;;;;;:::i;:::-;161:799:72;;2349:24:4;161:799:72;2349:24:4;161:799:72;;;863:51;;;;161:799;863:51;161:799;863:51;;;;;;;:::i;:::-;;;;;161:799;;;;;;;;;810:30;;;;;;;;;:::i;:::-;161:799;;810:30;;;;;;161:799;;;;;;;;;;;;3653:18:9;161:799:72;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;3653:18:9;161:799:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;3162:18:9;161:799:72;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;3162:18:9;161:799:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;3346:26:9;161:799:72;;;;:::i;:::-;;;;;;;:::i;:::-;;;;3346:26:9;161:799:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;371:34;161:799;;:::i;:::-;;371:7;161:799;;;;;;;371:34;;;;;;161:799;371:34;;161:799;;371:34;161:799;371:34;;161:799;;;;;;;;;;;;;;;;;371:34;;;;;;;;;;;;;;161:799;423:18;;161:799;7268:27:4;;;;161:799:72;;7268:27:4;161:799:72;7268:27:4;;161:799:72;7268:27:4;;161:799:72;;;;;;7268:27:4;;;;;161:799:72;7268:27:4;;;;;;;;161:799:72;;7268:27:4;;;;:::i;:::-;;;161:799:72;;7268:27:4;161:799:72;;;;;;;;;;;371:34;;;;161:799;371:34;161:799;371:34;;;;;;;:::i;:::-;;;;161:799;;;;;;;;;;;;;;;;;3501:18:9;161:799:72;;;;;;;3501:18:9;161:799:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3794:16:9;161:799:72;;;;;;;3794:16:9;161:799:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3948:19:9;161:799:72;;;;:::i;:::-;;;;;;;:::i;:::-;;;;3948:19:9;161:799:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3018:16:9;161:799:72;;;;;;;3018:16:9;161:799:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;260:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;161:799;;250:23;161:799;;;;;;;;250:23;161:799;;;260:13;161:799;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;161:799:72;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;161:799:72;;;;;-1:-1:-1;161:799:72;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;-1:-1:-1;161:799:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;;;-1:-1:-1;161:799:72;;;;;-1:-1:-1;161:799:72;;-1:-1:-1;161:799:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;-1:-1:-1;161:799:72;;-1:-1:-1;161:799:72;;-1:-1:-1;161:799:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1243:204:4;1302:7;161:799:72;;;;;;;1325:14:4;:::o;1298:143::-;161:799:72;;;;1377:39:4;;161:799:72;1377:39:4;;;161:799:72;192:59:4;161:799:72;;;;;1377:39:4;;;161:799:72;1377:39:4;;;;;;;161:799:72;1377:39:4;;;1298:143;1377:53;;;1370:60;:::o;1377:39::-;;;161:799:72;1377:39:4;;161:799:72;1377:39:4;;;;;;161:799:72;1377:39:4;;;:::i;:::-;;;192:59;;;;;1377:39;;;;;;-1:-1:-1;1377:39:4;;;161:799:72;;;;;;;;","linkReferences":{}},"methodIdentifiers":{"IS_TEST()":"fa7626d4","excludeArtifacts()":"b5508aa9","excludeContracts()":"e20c9f71","excludeSelectors()":"b0464fdc","excludeSenders()":"1ed7831c","failed()":"ba414fa6","setUp()":"0a9254e4","targetArtifactSelectors()":"66d9a9a0","targetArtifacts()":"85226c81","targetContracts()":"3f7286f4","targetInterfaces()":"2ade3880","targetSelectors()":"916a17c6","targetSenders()":"3e5e3c23","test_deploy(address,bytes32)":"42b1eac1","test_deployForwardValue(address,bytes32,uint256)":"a5a5cd24","test_deployTwice(address,bytes32)":"b96c02ce"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"IS_TEST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"excludedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setUp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifactSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"artifact\",\"type\":\"string\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzArtifactSelector[]\",\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"targetedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetInterfaces\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"artifacts\",\"type\":\"string[]\"}],\"internalType\":\"struct StdInvariant.FuzzInterface[]\",\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_mainModule\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"}],\"name\":\"test_deploy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_mainModule\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"test_deployForwardValue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_mainModule\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"}],\"name\":\"test_deployTwice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/Factory.t.sol\":\"FactoryTest\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/Factory.sol\":{\"keccak256\":\"0x5924fe583809e9c148d47c871866f6094599bb07a4d1fc2d60c814fda9c37f46\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e24d3575bf2606cd5f0f6da093e420118e018549eeb3a4ccb94f57c0e285e123\",\"dweb:/ipfs/QmRvWQt91YLJEgk5hgnRkPjDdB39tUHLYtxijYyXKdCm5J\"]},\"src/Wallet.sol\":{\"keccak256\":\"0xe01e9e937dd8d7572976ccc8ec3ec87e4a557069dafb05f85977a7b71f5c58d5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2e9ab78d33655f8e822258dff3f2d5ad01e84f6dc90174840d5a283b8e6413c1\",\"dweb:/ipfs/QmNMyYe3C1fs3cxKmUZ3S9VU5EE4WVWPVcwiGbgvbS1vrH\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"test/Factory.t.sol\":{\"keccak256\":\"0x58b1c887104a3a818634af614f36debe7bc06adbd7fe2bbfec56f642e918f9a6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e7c7f21b7761f8c397a26a39a1aa0f116e84a4e29f403802e83eb4271cf63de1\",\"dweb:/ipfs/QmRxz7eXm3Z6mkzrTBAkrRPbHk5XaTtrkz5yYyQ62GqVNM\"]},\"test/utils/TestUtils.sol\":{\"keccak256\":\"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad\",\"dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log","anonymous":false},{"inputs":[{"internalType":"address","name":"","type":"address","indexed":false}],"type":"event","name":"log_address","anonymous":false},{"inputs":[{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"log_bytes","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32","indexed":false}],"type":"event","name":"log_bytes32","anonymous":false},{"inputs":[{"internalType":"int256","name":"","type":"int256","indexed":false}],"type":"event","name":"log_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address","name":"val","type":"address","indexed":false}],"type":"event","name":"log_named_address","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes","name":"val","type":"bytes","indexed":false}],"type":"event","name":"log_named_bytes","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes32","name":"val","type":"bytes32","indexed":false}],"type":"event","name":"log_named_bytes32","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false}],"type":"event","name":"log_named_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"string","name":"val","type":"string","indexed":false}],"type":"event","name":"log_named_string","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false}],"type":"event","name":"log_named_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log_string","anonymous":false},{"inputs":[{"internalType":"uint256","name":"","type":"uint256","indexed":false}],"type":"event","name":"log_uint","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"logs","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"IS_TEST","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeArtifacts","outputs":[{"internalType":"string[]","name":"excludedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeContracts","outputs":[{"internalType":"address[]","name":"excludedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"excludedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSenders","outputs":[{"internalType":"address[]","name":"excludedSenders_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"failed","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"setUp"},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifactSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzArtifactSelector[]","name":"targetedArtifactSelectors_","type":"tuple[]","components":[{"internalType":"string","name":"artifact","type":"string"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifacts","outputs":[{"internalType":"string[]","name":"targetedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetContracts","outputs":[{"internalType":"address[]","name":"targetedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetInterfaces","outputs":[{"internalType":"struct StdInvariant.FuzzInterface[]","name":"targetedInterfaces_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"string[]","name":"artifacts","type":"string[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"targetedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSenders","outputs":[{"internalType":"address[]","name":"targetedSenders_","type":"address[]"}]},{"inputs":[{"internalType":"address","name":"_mainModule","type":"address"},{"internalType":"bytes32","name":"_salt","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"test_deploy"},{"inputs":[{"internalType":"address","name":"_mainModule","type":"address"},{"internalType":"bytes32","name":"_salt","type":"bytes32"},{"internalType":"uint256","name":"_value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"test_deployForwardValue"},{"inputs":[{"internalType":"address","name":"_mainModule","type":"address"},{"internalType":"bytes32","name":"_salt","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"test_deployTwice"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/Factory.t.sol":"FactoryTest"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/Factory.sol":{"keccak256":"0x5924fe583809e9c148d47c871866f6094599bb07a4d1fc2d60c814fda9c37f46","urls":["bzz-raw://e24d3575bf2606cd5f0f6da093e420118e018549eeb3a4ccb94f57c0e285e123","dweb:/ipfs/QmRvWQt91YLJEgk5hgnRkPjDdB39tUHLYtxijYyXKdCm5J"],"license":"Apache-2.0"},"src/Wallet.sol":{"keccak256":"0xe01e9e937dd8d7572976ccc8ec3ec87e4a557069dafb05f85977a7b71f5c58d5","urls":["bzz-raw://2e9ab78d33655f8e822258dff3f2d5ad01e84f6dc90174840d5a283b8e6413c1","dweb:/ipfs/QmNMyYe3C1fs3cxKmUZ3S9VU5EE4WVWPVcwiGbgvbS1vrH"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"test/Factory.t.sol":{"keccak256":"0x58b1c887104a3a818634af614f36debe7bc06adbd7fe2bbfec56f642e918f9a6","urls":["bzz-raw://e7c7f21b7761f8c397a26a39a1aa0f116e84a4e29f403802e83eb4271cf63de1","dweb:/ipfs/QmRxz7eXm3Z6mkzrTBAkrRPbHk5XaTtrkz5yYyQ62GqVNM"],"license":"Apache-2.0"},"test/utils/TestUtils.sol":{"keccak256":"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79","urls":["bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad","dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa"],"license":"Apache-2.0"}},"version":1},"id":72} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Guest.sol/Guest.json b/contracts/artifacts/wallet-contracts-v3/Guest.sol/Guest.json new file mode 100644 index 00000000..6b65338f --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Guest.sol/Guest.json @@ -0,0 +1 @@ +{"abi":[{"type":"fallback","stateMutability":"payable"},{"type":"event","name":"CallAborted","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"_returnData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"CallFailed","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"_returnData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"CallSkipped","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"CallSucceeded","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"DelegateCallNotAllowed","inputs":[{"name":"index","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidKind","inputs":[{"name":"kind","type":"uint8","internalType":"uint8"}]},{"type":"error","name":"NotEnoughGas","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_index","type":"uint256","internalType":"uint256"},{"name":"_gasLeft","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"Reverted","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_index","type":"uint256","internalType":"uint256"},{"name":"_returnData","type":"bytes","internalType":"bytes"}]}],"bytecode":{"object":"0x60808060405234601557610f6d908161001b8239f35b600080fdfe608060405261000c610330565b60008082523560f81c6001908160018083160361028a5750600060608401525b600761003b60ff831660011c90565b168061023d575b5060108181160361020c57506001905b61005b826103a3565b90604084019182526000905b838210610083576100818561007b81610540565b906108e0565b005b803560f81c906001019091816001808516036101ec57506100c5306100a9838751610441565b519073ffffffffffffffffffffffffffffffffffffffff169052565b6002808416146101ce575b600480841614610183575b60088084161461014e575b61013761013160c0856101116010806001989916146080610108888c51610441565b51019015159052565b61012760208083161460a0610108888c51610441565b1660061c60031690565b60ff1690565b60c0610144838751610441565b5101520190610067565b61013761013160c06101666001959060208235920190565b96906060610175878b51610441565b5101529594505050506100e6565b906101c890803560e81c906003016101c16101a86101a18484610484565b83366104c0565b919060406101b7888b51610441565b51019236916104db565b9052610484565b906100db565b90803590602001919060206101e4838751610441565b5101526100d0565b6102079250803560601c9060140192906100a9838751610441565b6100c5565b60209081160361022c5761ffff90803560f01c906002015b911690610052565b60ff90803560f81c90600101610224565b61027d919291908060031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b0190843590610100031c16920190565b9190608084015238610042565b8035606090811c90850152601401915061002c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff8211176102ea57604052565b61029f565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176102ea57604052565b60405190610120820182811067ffffffffffffffff8211176102ea576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b67ffffffffffffffff81116102ea5760051b60200190565b906103ad8261038b565b6103ba60405191826102ef565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06103e8829461038b565b019060005b8281106103f957505050565b602090604051610408816102ce565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c0820152828285010152016103ed565b80518210156104555760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9190820180921161049157565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9291928382116104d65783116104d65780920390565b600080fd5b92919267ffffffffffffffff82116102ea576040519161052360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601846102ef565b8294818452818301116104d6578281602093846000960137010152565b6020810151156106645761063261065e6105f060005b60405160208101917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408301527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606083015260808201523060a082015260a081526105e760c0826102ef565b51902093610bc6565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826102ef565b51902090565b61063261065e6105f046610556565b919082519283825260005b8481106106bd5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b8060208092840101518282860101520161067e565b9080602083519182815201916020808360051b8301019401926000915b8383106106fe57505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080610771604085015160e0604086015260e0850190610673565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152970193019301919392906106ef565b906020808351928381520192019060005b8181106107c65750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016107b9565b805160ff1682526108769160208281015115159082015261010061085061082a604085015161012060408601526101208501906106d2565b606085015160608501526080850151608085015260a085015184820360a0860152610673565b9260c081015160c084015260e081015160e08401520151906101008184039101526107a8565b90565b610891604092959493956060835260608301906107f2565b9460208201520152565b6108769392606092825260208201528160408201520190610673565b6108cd61087694926060835260608301906107f2565b9260208201526040818403910152610673565b90600091604081019283515193815b8581106108ff575b505050505050565b61090a818351610441565b519261091960a0850151151590565b80610b7a575b610b3a575060009260608101518015801580610b31575b610af9576080830151610acc5761098a9161098691610969855173ffffffffffffffffffffffffffffffffffffffff1690565b91602086015191600014610ac657505a905b604086015192610da1565b1590565b6109cc575b506040805186815260208101839052600192917f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a91a15b016108ef565b60c001805115610a7d576001815114610a3a57516002146109ed573861098f565b93925050507fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b9250610a2c610a20610db3565b6040519384938461089b565b0390a13880808080806108f7565b5083610a79610a47610db3565b6040519384937f7f6b0bb1000000000000000000000000000000000000000000000000000000008552600485016108b7565b0390fd5b509150600180927f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d610abe610ab0610db3565b604051918291858b8461089b565b0390a16109c6565b9061097b565b7f230d1ccc0000000000000000000000000000000000000000000000000000000086526004849052602486fd5b8387610a795a6040519384937f2139527400000000000000000000000000000000000000000000000000000000855260048501610879565b50815a10610936565b6040805187815260208101849052919450600192917f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b9181908101610abe565b50801561091f565b805160209091019060005b818110610b9a5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101610b8d565b610100810151604051610be181610632602082018095610b82565b51902090610bf0815160ff1690565b60ff811680610c695750509061065e610c0c6040840151610dfc565b9261063260806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b60018103610cc757505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4669381019384529081019190915260608101929092529061065e8160808101610632565b60028103610d1d57505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e46020820190815291810192909252606082019290925261065e8160808101610632565b600303610d71575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4666020820190815291810192909252606082019290925261065e8160808101610632565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b9160009391849360208451940192f190565b3d90604051916020818401016040528083526000602084013e565b805160209091019060005b818110610de65750505090565b8251845260209384019390920191600101610dd9565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610e42610e2c8361038b565b92610e3a60405194856102ef565b80845261038b565b0136602083013760005b8351811015610f1e5780610e6260019286610441565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152610f0a610120826102ef565b519020610f178285610441565b5201610e4c565b5090915060405161065e81610632602082018095610dce56fea2646970667358221220baf48a03c446c575132553e62013c6320b5d90a1ba275593a31ee1589046bd1464736f6c634300081c0033","sourceMap":"374:1940:26:-:0;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405261000c610330565b60008082523560f81c6001908160018083160361028a5750600060608401525b600761003b60ff831660011c90565b168061023d575b5060108181160361020c57506001905b61005b826103a3565b90604084019182526000905b838210610083576100818561007b81610540565b906108e0565b005b803560f81c906001019091816001808516036101ec57506100c5306100a9838751610441565b519073ffffffffffffffffffffffffffffffffffffffff169052565b6002808416146101ce575b600480841614610183575b60088084161461014e575b61013761013160c0856101116010806001989916146080610108888c51610441565b51019015159052565b61012760208083161460a0610108888c51610441565b1660061c60031690565b60ff1690565b60c0610144838751610441565b5101520190610067565b61013761013160c06101666001959060208235920190565b96906060610175878b51610441565b5101529594505050506100e6565b906101c890803560e81c906003016101c16101a86101a18484610484565b83366104c0565b919060406101b7888b51610441565b51019236916104db565b9052610484565b906100db565b90803590602001919060206101e4838751610441565b5101526100d0565b6102079250803560601c9060140192906100a9838751610441565b6100c5565b60209081160361022c5761ffff90803560f01c906002015b911690610052565b60ff90803560f81c90600101610224565b61027d919291908060031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b0190843590610100031c16920190565b9190608084015238610042565b8035606090811c90850152601401915061002c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff8211176102ea57604052565b61029f565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176102ea57604052565b60405190610120820182811067ffffffffffffffff8211176102ea576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b67ffffffffffffffff81116102ea5760051b60200190565b906103ad8261038b565b6103ba60405191826102ef565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06103e8829461038b565b019060005b8281106103f957505050565b602090604051610408816102ce565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c0820152828285010152016103ed565b80518210156104555760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9190820180921161049157565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9291928382116104d65783116104d65780920390565b600080fd5b92919267ffffffffffffffff82116102ea576040519161052360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601846102ef565b8294818452818301116104d6578281602093846000960137010152565b6020810151156106645761063261065e6105f060005b60405160208101917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408301527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606083015260808201523060a082015260a081526105e760c0826102ef565b51902093610bc6565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826102ef565b51902090565b61063261065e6105f046610556565b919082519283825260005b8481106106bd5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b8060208092840101518282860101520161067e565b9080602083519182815201916020808360051b8301019401926000915b8383106106fe57505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080610771604085015160e0604086015260e0850190610673565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152970193019301919392906106ef565b906020808351928381520192019060005b8181106107c65750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016107b9565b805160ff1682526108769160208281015115159082015261010061085061082a604085015161012060408601526101208501906106d2565b606085015160608501526080850151608085015260a085015184820360a0860152610673565b9260c081015160c084015260e081015160e08401520151906101008184039101526107a8565b90565b610891604092959493956060835260608301906107f2565b9460208201520152565b6108769392606092825260208201528160408201520190610673565b6108cd61087694926060835260608301906107f2565b9260208201526040818403910152610673565b90600091604081019283515193815b8581106108ff575b505050505050565b61090a818351610441565b519261091960a0850151151590565b80610b7a575b610b3a575060009260608101518015801580610b31575b610af9576080830151610acc5761098a9161098691610969855173ffffffffffffffffffffffffffffffffffffffff1690565b91602086015191600014610ac657505a905b604086015192610da1565b1590565b6109cc575b506040805186815260208101839052600192917f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a91a15b016108ef565b60c001805115610a7d576001815114610a3a57516002146109ed573861098f565b93925050507fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b9250610a2c610a20610db3565b6040519384938461089b565b0390a13880808080806108f7565b5083610a79610a47610db3565b6040519384937f7f6b0bb1000000000000000000000000000000000000000000000000000000008552600485016108b7565b0390fd5b509150600180927f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d610abe610ab0610db3565b604051918291858b8461089b565b0390a16109c6565b9061097b565b7f230d1ccc0000000000000000000000000000000000000000000000000000000086526004849052602486fd5b8387610a795a6040519384937f2139527400000000000000000000000000000000000000000000000000000000855260048501610879565b50815a10610936565b6040805187815260208101849052919450600192917f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b9181908101610abe565b50801561091f565b805160209091019060005b818110610b9a5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101610b8d565b610100810151604051610be181610632602082018095610b82565b51902090610bf0815160ff1690565b60ff811680610c695750509061065e610c0c6040840151610dfc565b9261063260806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b60018103610cc757505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4669381019384529081019190915260608101929092529061065e8160808101610632565b60028103610d1d57505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e46020820190815291810192909252606082019290925261065e8160808101610632565b600303610d71575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4666020820190815291810192909252606082019290925261065e8160808101610632565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b9160009391849360208451940192f190565b3d90604051916020818401016040528083526000602084013e565b805160209091019060005b818110610de65750505090565b8251845260209384019390920191600101610dd9565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610e42610e2c8361038b565b92610e3a60405194856102ef565b80845261038b565b0136602083013760005b8351811015610f1e5780610e6260019286610441565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152610f0a610120826102ef565b519020610f178285610441565b5201610e4c565b5090915060405161065e81610632602082018095610dce56fea2646970667358221220baf48a03c446c575132553e62013c6320b5d90a1ba275593a31ee1589046bd1464736f6c634300081c0033","sourceMap":"374:1940:26:-:0;;;;;:::i;:::-;;2321:4:48;;;566:109:68;;;;5037:63:48;;5176:4;5163:17;;;:25;5176:4;;5198:14;694:8:26;5198:14:48;;;2321:4;5159:140;5396:4;5377:15;374:1940:26;;;;2321:4:48;;;5377:15;5376:24;5411:13;5407:122;;5159:140;-1:-1:-1;5635:4:48;5622:17;;;:25;5635:4;;5657:12;5176:4;5618:320;;5983:20;;;:::i;:::-;5966:14;374:1940:26;5966:14:48;;:37;;;694:8:26;6010:1546:48;6030:12;;;;;;777:6:26;726:21;;;;:::i;:::-;777:6;;:::i;:::-;374:1940;6044:3:48;798:135:68;;;;;;;6076:44:48;;;5176:4;6227:12;;;:20;5176:4;;6314;6283:36;6314:4;6283:17;:14;;;:17;:::i;:::-;;2321:4;;;;;;6283:36;6529:4;6521:12;;;:20;6517:109;;6223:226;6704:4;6696:12;;;:20;6692:287;;6223:226;7065:4;7057:12;;;:20;7053:112;;6223:226;7494:55;7530:19;7539:4;7275:12;7241:55;5635:4;7275:12;5176:4;7275:12;;;:20;374:1940:26;7241:17:48;:14;;;:17;:::i;:::-;;:30;2321:4;;;;;;7241:55;7364;7406:4;7398:12;;;:20;7364:30;:17;:14;;;:17;:::i;:55::-;7531:12;374:1940:26;2321:4:48;;;;;7530:19;374:1940:26;;;;7494:55:48;7539:4;7494:17;:14;;;:17;:::i;:::-;;:33;2321:4;;6015:13;;;7053:112;7494:55;7530:19;7539:4;1983:226:68;5176:4:48;1983:226:68;;2102:103;;;;;1983:226;;;7090:14:48;;:26;:17;:14;;;:17;:::i;:::-;;:26;2321:4;7053:112;;;;;;;;6692:287;1201:256:68;6947:23:48;;1318:135:68;;;;;;;2321:4:48;6899:38;6914:22;1318:135:68;;6914:22:48;:::i;:::-;694:8:26;;6899:38:48;:::i;:::-;6874:14;;374:1940:26;6874:17:48;:14;;;:17;:::i;:::-;;:22;694:8:26;;2321:4:48;;:::i;:::-;6874:63;;6947:23;:::i;:::-;6692:287;;;6517:109;1983:226:68;2102:103;;;;;6554:14:48;;7406:4;6554:17;:14;;;:17;:::i;:::-;;:23;2321:4;6517:109;;6223:226;6379:61;;-1:-1:-1;1840:135:68;;;;;;;6380:14:48;;:17;:14;;;:17;:::i;6379:61::-;6223:226;;5618:320;5779:4;5766:17;;;:25;5779:4;;2321;;1058:135:68;;;;;;;941:256;5803:48:48;2321:4;5762:170;5618:320;;5762:170;374:1940:26;;798:135:68;;;;;;;683:254;;5407:122:48;2213:380:68;;;;;2363:226;;;;;;;;;;;;;;;;;;2213:380;;;5458:64:48;;374:1940:26;5459:14:48;;2321:4;5407:122;;;5159:140;1840:135:68;;;;;;5238:14:48;;;2321:4;1840:135:68;;;-1:-1:-1;5159:140:48;;374:1940:26;;;;;;;;;;;2321:4:48;374:1940:26;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;374:1940:26;;-1:-1:-1;374:1940:26;;;;;;;;;-1:-1:-1;374:1940:26;;;;-1:-1:-1;374:1940:26;;;;;;;;;-1:-1:-1;374:1940:26;;;;-1:-1:-1;374:1940:26;;;;;;:::o;2321:4:48:-;;;;;;;;;;;:::o;:::-;;;;;:::i;:::-;374:1940:26;;;;;;:::i;:::-;2321:4:48;;;;;;;;:::i;:::-;;;-1:-1:-1;2321:4:48;;;;;;;;;:::o;:::-;;374:1940:26;;;;;;:::i;:::-;-1:-1:-1;2321:4:48;;-1:-1:-1;2321:4:48;;;;374:1940:26;;2321:4:48;;;-1:-1:-1;374:1940:26;2321:4:48;;;-1:-1:-1;2321:4:48;;;;-1:-1:-1;2321:4:48;;;;-1:-1:-1;2321:4:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;694:8:26;2321:4:48;;;;;;;;;;;374:1940:26;;;;2321:4:48;374:1940:26;;;;;2321:4:48;374:1940:26;;:::i;:::-;2321:4:48;;;;;;;;;;;;;;;;-1:-1:-1;2321:4:48;;;;;;:::o;9564:274::-;9682:18;;;374:1940:26;2321:4:48;1206:48;;9784;;9743:18;-1:-1:-1;1206:48:48;374:1940:26;;9682:18:48;1077:202;;374:1940:26;539:66:48;374:1940:26;;709:66:48;374:1940:26;868:66:48;;374:1940:26;868:66:48;;;;374:1940:26;868:66:48;;;374:1940:26;9710:4:48;868:66;;;374:1940:26;868:66:48;1077:202;;;;;;:::i;:::-;2321:4;1060:225;;9743:18;;:::i;:::-;374:1940:26;;9784:48:48;;;9682:18;9784:48;;;;374:1940:26;;;;;;;;;;;;;;;;;;9784:48:48;;1077:202;9784:48;;;;;;:::i;:::-;2321:4;9774:59;;9564:274;:::o;1206:48::-;9784;;9743:18;1240:13;1206:48;;374:1940:26;;;2321:4:48;;374:1940:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;2321:4:48;;374:1940:26;;;;;;;;;;;;;;;;;-1:-1:-1;374:1940:26;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;2321:4:48;374:1940:26;;2321:4:48;374:1940:26;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;2321:4:48;;374:1940:26;;;;;;;;2321:4:48;;374:1940:26;;;;;;;;;;;;;;;;;;;;;;;;2321:4:48;;;374:1940:26;;;;;;;;-1:-1:-1;374:1940:26;;;;;;;;;;:::o;:::-;;;2321:4:48;;374:1940:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2321:4:48;;374:1940:26;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::o;2657:4:48:-;;;;;;374:1940:26;;2657:4:48;;;374:1940:26;2657:4:48;;;;;;;;:::i;2763:::-;;;;;;;;;;;;;:::i;:::-;;;;;374:1940:26;2763:4:48;;;;;;;;:::i;793:1518:26:-;;899:5;930:14;;;;;;;2321:4:48;962:13:26;;977:12;;;;;;957:1350;793:1518;;;;;;:::o;991:3::-;1031:17;:14;;;:17;:::i;:::-;;1115;374:1940;1115:17;;;374:1940;2321:4:48;;;;374:1940:26;1115:31;;;991:3;1111:108;;1345:17;899:5;1390:13;;;;374:1940;1415:13;;;;:37;;;991:3;1411:111;;1534:17;;;374:1940;1530:74;;1722:8;374:1940;1627:83;374:1940;;;;2321:4:48;;;;374:1940:26;1650:10;;;;374:1940;1662:36;;;;;1678:9;;1662:36;;930:14;1700:9;;;1627:83;;:::i;:::-;1722:8;;2321:4:48;1722:8:26;1718:538;;1662:36;-1:-1:-1;930:14:26;374:1940;;;;;;;;;;;2321:4:48;;374:1940:26;2269:31;;;962:13;2321:4:48;962:13:26;;1718:538;1746:20;;374:1940;;1746:53;1742:186;;2321:4:48;374:1940:26;;1942:56;1938:142;;374:1940;2867:4:48;2094:55:26;2090:158;;1718:538;;;2090:158;2198:21;;;;;2168:52;2198:21;;2168:52;2198:21;;:::i;:::-;930:14;374:1940;2168:52;;;;;:::i;:::-;;;;2232:5;;;;;;;;1938:142;2047:21;;2019:50;2047:21;;:::i;:::-;930:14;374:1940;2019:50;;;;;;;;;;:::i;:::-;;;;1742:186;1813:16;;;2321:4:48;1813:16:26;1875:21;1846:51;;1875:21;;:::i;:::-;930:14;374:1940;1846:51;;;;;;;:::i;:::-;;;;1909:8;;1662:36;;;;1530:74;1570:25;;;;374:1940;;;;1570:25;;1411:111;1503:9;;1471:42;1503:9;930:14;374:1940;1471:42;;;;;;;;;;:::i;1415:37::-;1432:9;;;:20;1415:37;;1111:108;930:14;374:1940;;;;;;;;;;;;;-1:-1:-1;2321:4:48;;374:1940:26;1163:29;;374:1940;;;;1163:29;374:1940;1115:31;1136:10;;;1115:31;;374:1940;2321:4:48;;374:1940:26;;;;;;;;;;;;;;;;:::o;:::-;;;2321:4:48;;374:1940:26;;;;;;;;;;;;;;;8278:1282:48;8416:22;;;;374:1940:26;;8399:40:48;;374:1940:26;8399:40:48;;;374:1940:26;;;:::i;8399:40:48:-;2321:4;8389:51;;374:1940:26;;;;;;;;;;;;8451:34:48;374:1940:26;;8525:14:48;;;8712:82;8515:25;374:1940:26;8525:14:48;;;8515:25;:::i;:::-;8750:14;8712:82;8766:14;8750;;;374:1940:26;8766:14:48;;374:1940:26;;;;8712:82:48;;;8399:40;8712:82;;;;1799:66;;;;;;;;;374:1940:26;1799:66:48;374:1940:26;;1799:66:48;;;374:1940:26;1799:66:48;;;374:1940:26;1799:66:48;;;374:1940:26;1799:66:48;374:1940:26;1799:66:48;8447:1109;2763:4;8812:29;;2763:4;;-1:-1:-1;;8998:16:48;;;2321:4;;8399:40;374:1940:26;;;8988:27:48;374:1940:26;;;1979:66:48;8959:70;;;374:1940:26;;;1979:66:48;;;374:1940:26;;;;1979:66:48;;;374:1940:26;;;;8959:70:48;;374:1940:26;1979:66:48;;;8959:70;1979:66;8808:748;2867:4;9047:35;;2867:4;;-1:-1:-1;;9216:18:48;;1979:66;374:1940:26;;;2174:66:48;8399:40;9181:67;;374:1940:26;;;1979:66:48;;;374:1940:26;;;;1979:66:48;;;374:1940:26;;;;9181:67:48;374:1940:26;1979:66:48;;;9181:67;1979:66;9043:513;2556:4;9266:28;2556:4;;-1:-1:-1;9443:15:48;;1979:66;374:1940:26;;;1979:66:48;8399:40;9414:58;;374:1940:26;;;1979:66:48;;;374:1940:26;;;;1979:66:48;;;374:1940:26;;;;9414:58:48;374:1940:26;1979:66:48;;;9414:58;1979:66;9262:294;9523:26;374:1940:26;9523:26:48;374:1940:26;;9523:26:48;374:1940:26;2556:4:48;374:1940:26;9523:26:48;1431:196:69;;1538:85;1431:196;;;;1538:85;;;;;;;1431:196;:::o;758:271::-;825:200;;;;;;;;;;;;;;;;;;;;758:271::o;374:1940:26:-;2321:4:48;;374:1940:26;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;7820:454:48;;2321:4;;374:1940:26;;2321:4:48;;;:::i;:::-;374:1940:26;;;;;;;:::i;:::-;2321:4:48;;;374:1940:26;:::i;:::-;;;;;;;-1:-1:-1;8164:3:48;2321:4;;8146:16;;;;;8202:8;;2321:4;8202:8;;;:::i;:::-;;2321:4;374:1940:26;;2321:4:48;7708:7;374:1940:26;7708:7:48;;374:1940:26;7727:6:48;374:1940:26;7727:6:48;;;374:1940:26;2321:4:48;;374:1940:26;;7717:17:48;7736:10;;;;374:1940:26;7748:14:48;;;374:1940:26;2321:4:48;;7764:14;7780:17;7764:14;;;374:1940:26;2321:4:48;;7780:17;;374:1940:26;;;;7667:138:48;374:1940:26;7667:138:48;;374:1940:26;1478:66:48;374:1940:26;;;1478:66:48;;374:1940:26;7736:10:48;1478:66;;374:1940:26;7748:14:48;1478:66;;374:1940:26;7764:14:48;1478:66;;374:1940:26;7780:17:48;1478:66;;374:1940:26;1478:66:48;;;374:1940:26;1478:66:48;;;374:1940:26;1478:66:48;7667:138;;;;;;:::i;:::-;2321:4;7650:161;;8177:34;;;;:::i;:::-;2321:4;;8131:13;;8146:16;;;;;374:1940:26;;8240:28:48;;374:1940:26;;8240:28:48;;374:1940:26;;;:::i","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"DelegateCallNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"}],\"name\":\"InvalidKind\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_gasLeft\",\"type\":\"uint256\"}],\"name\":\"NotEnoughGas\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_returnData\",\"type\":\"bytes\"}],\"name\":\"Reverted\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_returnData\",\"type\":\"bytes\"}],\"name\":\"CallAborted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_returnData\",\"type\":\"bytes\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"CallSkipped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"CallSucceeded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"}],\"devdoc\":{\"author\":\"Agustin Aguilar, William Hua, Michael Standen\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Guest\",\"version\":1},\"userdoc\":{\"errors\":{\"DelegateCallNotAllowed(uint256)\":[{\"notice\":\"Error thrown when a delegate call is not allowed\"}],\"InvalidKind(uint8)\":[{\"notice\":\"Error thrown when the kind is invalid\"}],\"NotEnoughGas((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint256,uint256)\":[{\"notice\":\"Error thrown when there is not enough gas\"}],\"Reverted((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint256,bytes)\":[{\"notice\":\"Error thrown when a call reverts\"}]},\"events\":{\"CallAborted(bytes32,uint256,bytes)\":{\"notice\":\"Emitted when a call is aborted\"},\"CallFailed(bytes32,uint256,bytes)\":{\"notice\":\"Emitted when a call fails\"},\"CallSkipped(bytes32,uint256)\":{\"notice\":\"Emitted when a call is skipped\"},\"CallSucceeded(bytes32,uint256)\":{\"notice\":\"Emitted when a call succeeds\"}},\"kind\":\"user\",\"methods\":{},\"notice\":\"Guest for dispatching calls\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Guest.sol\":\"Guest\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/Guest.sol\":{\"keccak256\":\"0xfd8c9d325f3593965dbc65b7a6fb1fea452d65aeecaf06a328481694876bc60c\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://92180762cdd69f516afc3bebef61fc16273a670ab6a9e9deaa25a9f51e39bcad\",\"dweb:/ipfs/QmXD5iSjnBWdDGH8WcZVzkgaHZKiAg9QgR4raSQ5uRDa5i\"]},\"src/modules/Calls.sol\":{\"keccak256\":\"0xcd0d38d0fd248e4443032dede2b8892ea0ca7e55538cd54082830f6b98d8edb1\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://617bb6d0724b18f3d77347cc454a57c1c916a0818a592552bd7fa226aa41a306\",\"dweb:/ipfs/Qmeet85Ux6cKq9JmC25JnTzFnRrgDpkyRik2svZLWt4fov\"]},\"src/modules/Nonce.sol\":{\"keccak256\":\"0x56fbf6dc9b34ab60ae8a32ffb6f583c003bb8f4a5223ce704e982400fa403fab\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://492f53628633b862702cf8f9b726067a722c94028133a8a4c4fcf3d0e73ad803\",\"dweb:/ipfs/QmTHNy4XbH47YZaqKDpknb5aApjRH9HVAREHN7N5vEFWEV\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/Storage.sol\":{\"keccak256\":\"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da\",\"dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn\"]},\"src/modules/auth/BaseAuth.sol\":{\"keccak256\":\"0xbf2e40def03fcb5f4a5129b2f5803e21951325b92e00126cbe1427b7c25cfefd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://b560905fcc4b957d27c2abed78a1e82529c89fa472e91b3d108fbfd91aa7c3f7\",\"dweb:/ipfs/QmRjLLtTWE6dFX2kBQCgLz7ossfMxhAFgDC8Jx9XuGL6Wy\"]},\"src/modules/auth/BaseSig.sol\":{\"keccak256\":\"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8\",\"dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3\"]},\"src/modules/auth/SelfAuth.sol\":{\"keccak256\":\"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42\",\"dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W\"]},\"src/modules/interfaces/IAuth.sol\":{\"keccak256\":\"0xf6fa30af2ec91d5fbeac17c9b1f2aa73b7883c9ac98745605007e57666394b91\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://6e90a87978519462f9612f4a17e38fddc1c7bcf700ff834a1de7dce326f30353\",\"dweb:/ipfs/QmXmWAsRRK6t4jPs4VcXrouyokxdALM28D3odX7ub48WEp\"]},\"src/modules/interfaces/ICheckpointer.sol\":{\"keccak256\":\"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1\",\"dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t\"]},\"src/modules/interfaces/IDelegatedExtension.sol\":{\"keccak256\":\"0xa2ae897e90fd70dd4a9e172bc04d019ba9c512e72c2df65fcb6daf87dd5ceb90\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://cdf4b7c3dfb0aef6c9dbe8b2a0542018dc756ef2252d7101bcb3186192da0a11\",\"dweb:/ipfs/QmPHCVu1DJ7fBrPBYA5y3hoF3a3XFEBwYCZ1ErGaxPhcYL\"]},\"src/modules/interfaces/IERC1271.sol\":{\"keccak256\":\"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b\",\"dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF\"]},\"src/modules/interfaces/IPartialAuth.sol\":{\"keccak256\":\"0x0d1aa021615d8e90696e71a9468331457a1babfa2ffe169654b7456e5bcb7a73\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://bbacd149a6358ab0d4b9c588d2e3a55fc71ed4723269150d7b91ca70092f6519\",\"dweb:/ipfs/QmUSwtrYCrRcRFsy5rCzdMPrw1FCU7ZoeXdsW6kK9yc8FK\"]},\"src/modules/interfaces/ISapient.sol\":{\"keccak256\":\"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489\",\"dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"src/utils/LibOptim.sol\":{\"keccak256\":\"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81\",\"dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"type":"error","name":"DelegateCallNotAllowed"},{"inputs":[{"internalType":"uint8","name":"kind","type":"uint8"}],"type":"error","name":"InvalidKind"},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_gasLeft","type":"uint256"}],"type":"error","name":"NotEnoughGas"},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"bytes","name":"_returnData","type":"bytes"}],"type":"error","name":"Reverted"},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_index","type":"uint256","indexed":false},{"internalType":"bytes","name":"_returnData","type":"bytes","indexed":false}],"type":"event","name":"CallAborted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_index","type":"uint256","indexed":false},{"internalType":"bytes","name":"_returnData","type":"bytes","indexed":false}],"type":"event","name":"CallFailed","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_index","type":"uint256","indexed":false}],"type":"event","name":"CallSkipped","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_index","type":"uint256","indexed":false}],"type":"event","name":"CallSucceeded","anonymous":false},{"inputs":[],"stateMutability":"payable","type":"fallback"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/Guest.sol":"Guest"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/Guest.sol":{"keccak256":"0xfd8c9d325f3593965dbc65b7a6fb1fea452d65aeecaf06a328481694876bc60c","urls":["bzz-raw://92180762cdd69f516afc3bebef61fc16273a670ab6a9e9deaa25a9f51e39bcad","dweb:/ipfs/QmXD5iSjnBWdDGH8WcZVzkgaHZKiAg9QgR4raSQ5uRDa5i"],"license":"Apache-2.0"},"src/modules/Calls.sol":{"keccak256":"0xcd0d38d0fd248e4443032dede2b8892ea0ca7e55538cd54082830f6b98d8edb1","urls":["bzz-raw://617bb6d0724b18f3d77347cc454a57c1c916a0818a592552bd7fa226aa41a306","dweb:/ipfs/Qmeet85Ux6cKq9JmC25JnTzFnRrgDpkyRik2svZLWt4fov"],"license":"Apache-2.0"},"src/modules/Nonce.sol":{"keccak256":"0x56fbf6dc9b34ab60ae8a32ffb6f583c003bb8f4a5223ce704e982400fa403fab","urls":["bzz-raw://492f53628633b862702cf8f9b726067a722c94028133a8a4c4fcf3d0e73ad803","dweb:/ipfs/QmTHNy4XbH47YZaqKDpknb5aApjRH9HVAREHN7N5vEFWEV"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/Storage.sol":{"keccak256":"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f","urls":["bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da","dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn"],"license":"Apache-2.0"},"src/modules/auth/BaseAuth.sol":{"keccak256":"0xbf2e40def03fcb5f4a5129b2f5803e21951325b92e00126cbe1427b7c25cfefd","urls":["bzz-raw://b560905fcc4b957d27c2abed78a1e82529c89fa472e91b3d108fbfd91aa7c3f7","dweb:/ipfs/QmRjLLtTWE6dFX2kBQCgLz7ossfMxhAFgDC8Jx9XuGL6Wy"],"license":"Apache-2.0"},"src/modules/auth/BaseSig.sol":{"keccak256":"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa","urls":["bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8","dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3"],"license":"Apache-2.0"},"src/modules/auth/SelfAuth.sol":{"keccak256":"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c","urls":["bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42","dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W"],"license":"Apache-2.0"},"src/modules/interfaces/IAuth.sol":{"keccak256":"0xf6fa30af2ec91d5fbeac17c9b1f2aa73b7883c9ac98745605007e57666394b91","urls":["bzz-raw://6e90a87978519462f9612f4a17e38fddc1c7bcf700ff834a1de7dce326f30353","dweb:/ipfs/QmXmWAsRRK6t4jPs4VcXrouyokxdALM28D3odX7ub48WEp"],"license":"Apache-2.0"},"src/modules/interfaces/ICheckpointer.sol":{"keccak256":"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513","urls":["bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1","dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t"],"license":"Apache-2.0"},"src/modules/interfaces/IDelegatedExtension.sol":{"keccak256":"0xa2ae897e90fd70dd4a9e172bc04d019ba9c512e72c2df65fcb6daf87dd5ceb90","urls":["bzz-raw://cdf4b7c3dfb0aef6c9dbe8b2a0542018dc756ef2252d7101bcb3186192da0a11","dweb:/ipfs/QmPHCVu1DJ7fBrPBYA5y3hoF3a3XFEBwYCZ1ErGaxPhcYL"],"license":"Apache-2.0"},"src/modules/interfaces/IERC1271.sol":{"keccak256":"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9","urls":["bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b","dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF"],"license":"Apache-2.0"},"src/modules/interfaces/IPartialAuth.sol":{"keccak256":"0x0d1aa021615d8e90696e71a9468331457a1babfa2ffe169654b7456e5bcb7a73","urls":["bzz-raw://bbacd149a6358ab0d4b9c588d2e3a55fc71ed4723269150d7b91ca70092f6519","dweb:/ipfs/QmUSwtrYCrRcRFsy5rCzdMPrw1FCU7ZoeXdsW6kK9yc8FK"],"license":"Apache-2.0"},"src/modules/interfaces/ISapient.sol":{"keccak256":"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359","urls":["bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489","dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"src/utils/LibOptim.sol":{"keccak256":"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde","urls":["bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81","dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x"],"license":"Apache-2.0"}},"version":1},"id":26} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Guest.t.sol/GuestTest.json b/contracts/artifacts/wallet-contracts-v3/Guest.t.sol/GuestTest.json new file mode 100644 index 00000000..3e903c91 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Guest.t.sol/GuestTest.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"excludeArtifacts","inputs":[],"outputs":[{"name":"excludedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"excludeContracts","inputs":[],"outputs":[{"name":"excludedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"excludeSelectors","inputs":[],"outputs":[{"name":"excludedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"excludeSenders","inputs":[],"outputs":[{"name":"excludedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"guest","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract Guest"}],"stateMutability":"view"},{"type":"function","name":"setUp","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"targetArtifactSelectors","inputs":[],"outputs":[{"name":"targetedArtifactSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzArtifactSelector[]","components":[{"name":"artifact","type":"string","internalType":"string"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetArtifacts","inputs":[],"outputs":[{"name":"targetedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"targetContracts","inputs":[],"outputs":[{"name":"targetedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"targetInterfaces","inputs":[],"outputs":[{"name":"targetedInterfaces_","type":"tuple[]","internalType":"struct StdInvariant.FuzzInterface[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"artifacts","type":"string[]","internalType":"string[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSelectors","inputs":[],"outputs":[{"name":"targetedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSenders","inputs":[],"outputs":[{"name":"targetedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"test_callFailsWithAbortBehavior","inputs":[{"name":"p","type":"tuple","internalType":"struct GuestPayload","components":[{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint160","internalType":"uint160"},{"name":"nonce","type":"uint56","internalType":"uint56"}]},{"name":"callIndex","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_callFailsWithIgnoreBehavior","inputs":[{"name":"p","type":"tuple","internalType":"struct GuestPayload","components":[{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint160","internalType":"uint160"},{"name":"nonce","type":"uint56","internalType":"uint56"}]},{"name":"callIndex","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_callFailsWithRevertBehavior","inputs":[{"name":"p","type":"tuple","internalType":"struct GuestPayload","components":[{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint160","internalType":"uint160"},{"name":"nonce","type":"uint56","internalType":"uint56"}]},{"name":"callIndex","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_delegateCallNotAllowed","inputs":[{"name":"p","type":"tuple","internalType":"struct GuestPayload","components":[{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint160","internalType":"uint160"},{"name":"nonce","type":"uint56","internalType":"uint56"}]},{"name":"callIndex","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fallback","inputs":[{"name":"p","type":"tuple","internalType":"struct GuestPayload","components":[{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint160","internalType":"uint160"},{"name":"nonce","type":"uint56","internalType":"uint56"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_forwardPayment","inputs":[{"name":"_value1","type":"uint256","internalType":"uint256"},{"name":"_value2","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_notEnoughGas","inputs":[{"name":"p","type":"tuple","internalType":"struct GuestPayload","components":[{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint160","internalType":"uint160"},{"name":"nonce","type":"uint56","internalType":"uint56"}]},{"name":"callIndex","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"CallAborted","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"_returnData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"CallFailed","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"_returnData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"CallSkipped","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"CallSucceeded","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"error","name":"InvalidKind","inputs":[{"name":"kind","type":"uint8","internalType":"uint8"}]}],"bytecode":{"object":"0x60808060405234602f57600160ff19600c541617600c55600160ff19601f541617601f556158b090816100358239f35b600080fdfe608080604052600436101561001357600080fd5b600090813560e01c9081630a9254e4146126ff575080631ed7831c1461265657806325c71d57146122525780632ade3880146120955780632cefdb9814611a025780633e5e3c23146119595780633f7286f4146118b0578063495500e11461150957806366d9a9a0146113ae57806385226c81146112fe5780638efe7cce14611054578063916a17c614610f7f5780639a04f70414610f2a578063b0464fdc14610e55578063b4973a1f14610c22578063b5508aa914610b72578063ba414fa614610b2f578063c14cf83214610721578063c5a48a0a14610204578063e20c9f711461014b5763fa7626d41461010857600080fd5b3461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014857602060ff601f54166040519015158152f35b80fd5b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101485760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b8181106101d8576101d4856101c881870382612894565b604051918291826127dd565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016101b1565b50346101485761021336612b42565b6020829392018051511515737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106bd57604051907f4c63e56200000000000000000000000000000000000000000000000000000000825260048201528381602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610716579084916106fd575b50505151907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82019182116106d0576102d1916102cb9161354d565b926135ef565b906102db8261363a565b60408201815b815180518210156103bd579061031973ffffffffffffffffffffffffffffffffffffffff61031183600195612df2565b51511661387f565b73ffffffffffffffffffffffffffffffffffffffff610339838651612df2565b519116905283602061034c838651612df2565b51015283608061035d838651612df2565b5101526103786060610370838651612df2565b5101516135b6565b6060610385838651612df2565b510152858114610396575b016102e1565b8160c06103a4838651612df2565b5101528360a06103b5838651612df2565b510152610390565b50509181936103cb826139aa565b93604051907f08c379a0000000000000000000000000000000000000000000000000000000006020830152610465826104396024820160609060208152600a60208201527f54657374206572726f720000000000000000000000000000000000000000000060408201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101845283612894565b60406104958473ffffffffffffffffffffffffffffffffffffffff61048b828651612df2565b5151169351612df2565b51015190737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106cc57829186916104ef60405194859384937fdbaad14700000000000000000000000000000000000000000000000000000000855260048501612e06565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156106c15785916106a4575b5050916105976105c392610562946040519586947f7f6b0bb10000000000000000000000000000000000000000000000000000000060208701526060602487015260848601906133bf565b9160448501527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc848303016064850152612bb5565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612894565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106a0578161061e91604051809381927ff28dceb3000000000000000000000000000000000000000000000000000000008352602060048401526024830190612bb5565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561069557610680575b508061067d9273ffffffffffffffffffffffffffffffffffffffff601f5460081c1682602083519301915af1610677612e66565b5061422c565b80f35b61068b828092612894565b6101485738610643565b6040513d84823e3d90fd5b5080fd5b816106b191959395612894565b6106bd57918338610517565b8380fd5b6040513d87823e3d90fd5b8580fd5b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b8161070791612894565b61071257823861028f565b8280fd5b6040513d86823e3d90fd5b50346101485760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101485760043567ffffffffffffffff81116106a057610771903690600401612939565b81602082015151600581109081610b25575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106a057604051907f4c63e562000000000000000000000000000000000000000000000000000000008252151560048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561069557610b10575b50506107ff906135ef565b6108088161363a565b8160408201925b83519081518110156108d45761083f73ffffffffffffffffffffffffffffffffffffffff61031183600195612df2565b73ffffffffffffffffffffffffffffffffffffffff61085f838851612df2565b5191169052826020610872838851612df2565b510152826080610883838851612df2565b51015261089e60c0610896838851612df2565b5101516135e2565b60c06108ab838851612df2565b5101526108be6060610370838851612df2565b60606108cb838851612df2565b5101520161080f565b50506109056108e2836139aa565b9273ffffffffffffffffffffffffffffffffffffffff601f5460081c1690614116565b92815b81518051821015610adb5761091f8260a092612df2565b51015115610a0757737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610712576040517f491cc7c200000000000000000000000000000000000000000000000000000000815283818061098f60048201906001606060808401938281528260208201528260408201520152565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015610716579084916109f2575b50506001907f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b60408051888152836020820152a15b01610908565b816109fc91612894565b6107125782386109b7565b73ffffffffffffffffffffffffffffffffffffffff610a27828451612df2565b5151166040610a37838551612df2565b51015190737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610ad757610a9091859160405193849283927fbd6af43400000000000000000000000000000000000000000000000000000000845260048401612faa565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561071657908491610ac2575b50506001906109ec565b81610acc91612894565b610712578238610ab8565b8480fd5b8361067d81808873ffffffffffffffffffffffffffffffffffffffff601f5460081c1682602083519301915af1610677612e66565b81610b1a91612894565b6106a05781386107f4565b9050151538610783565b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610148576020610b686132d9565b6040519015158152f35b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014857601954610bad816128e7565b91610bbb6040519384612894565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b838310610c0557604051602080825281906101d490820188612bf8565b600160208192610c1485612e96565b815201920192019190610be8565b503461014857610c3136612b42565b60208201838151511515737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106a057604051907f4c63e56200000000000000000000000000000000000000000000000000000000825260048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561069557610e40575b50505151907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201918211610e1357610ceb91610ce59161354d565b916135ef565b91610cf58361363a565b60408301815b81518051821015610dc75790610d2b73ffffffffffffffffffffffffffffffffffffffff61031183600195612df2565b73ffffffffffffffffffffffffffffffffffffffff610d4b838651612df2565b5191169052836020610d5e838651612df2565b510152610d716060610370838651612df2565b6060610d7e838651612df2565b510152808503610db157816080610d96838651612df2565b5101528360a0610da7838651612df2565b5101525b01610cfb565b836080610dbf838651612df2565b510152610dab565b505050610dd481936139aa565b91604051907f230d1ccc0000000000000000000000000000000000000000000000000000000060208301526024820152602481526105c3604482612894565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b81610e4a91612894565b6106bd578338610ca9565b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014857601c54610e90816128e7565b91610e9e6040519384612894565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b838310610ee057604051806101d48782612cc5565b60026020600192604051610ef38161282d565b73ffffffffffffffffffffffffffffffffffffffff8654168152610f18858701612fd7565b83820152815201920192019190610ecb565b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014857602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051908152f35b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014857601d54610fba816128e7565b91610fc86040519384612894565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b83831061100a57604051806101d48782612cc5565b6002602060019260405161101d8161282d565b73ffffffffffffffffffffffffffffffffffffffff8654168152611042858701612fd7565b83820152815201920192019190610ff5565b50346101485760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101485761108f6004356135c6565b61109a6024356135c6565b6110a261327e565b838152816060604051906110b68183612894565b600282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190875b8281106112b5575050509060206111308493621000016111096040611138980192808452612da6565b515287836111178351612da6565b510152621000026111288251612de2565b515251612de2565b5101526139aa565b836111438385612f9d565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106a0576040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152816024820152828160448183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156112aa57611295575b506111ed92829173ffffffffffffffffffffffffffffffffffffffff601f5460081c1690602083519301915af1610677612e66565b8247737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106a057604051907f98296c5400000000000000000000000000000000000000000000000000000000825260048201528160248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561069557611280575b505061127661067d9262100001316142aa565b62100002316142aa565b8161128a91612894565b610712578238611263565b6112a0838092612894565b6106a057386111b8565b6040513d85823e3d90fd5b602091929394506040516112c881612878565b898152898382015283604082015289848201528960808201528960a08201528960c08201528282870101520190859392916110e0565b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014857601a54611339816128e7565b916113476040519384612894565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b83831061139157604051602080825281906101d490820188612bf8565b6001602081926113a085612e96565b815201920192019190611374565b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014857601b546113e9816128e7565b6113f66040519182612894565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b8383106114ce57868587604051928392602084019060208552518091526040840160408260051b8601019392905b82821061146357505050500390f35b919360206114be827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc06001959799849503018652885190836114ae8351604084526040840190612bb5565b9201519084818403910152612c6f565b9601920192018594939192611454565b600260206001926040516114e18161282d565b6114ea86612e96565b81526114f7858701612fd7565b83820152815201920192019190611426565b50346101485761151836612b42565b60208201838151511515737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106a057604051907f4c63e56200000000000000000000000000000000000000000000000000000000825260048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156106955761189b575b50505151907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201918211610e13576115cc91610ce59161354d565b906115d68261363a565b6040820190835b825180518210156117df5773ffffffffffffffffffffffffffffffffffffffff6103118361160a93612df2565b73ffffffffffffffffffffffffffffffffffffffff61162a838651612df2565b519116905284602061163d838651612df2565b51015284608061164e838651612df2565b5101528082036117b7576060611665828551612df2565b5101515a906001820180921161178a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600193926116a39261435a565b8680604061171f61175182516116b98482612894565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152835192839160208301957fb60e72cc00000000000000000000000000000000000000000000000000000000875260248401526064830190612bb5565b876044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612894565b51906a636f6e736f6c652e6c6f675afa50606061176f838751612df2565b5101528560a0611780838751612df2565b5101525b016115dd565b6024877f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b806117ca60606103706001948751612df2565b60606117d7838751612df2565b510152611784565b856117e9866139aa565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106a057816040517ff4844814000000000000000000000000000000000000000000000000000000008152818160048183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156106955761188657508061067d9273ffffffffffffffffffffffffffffffffffffffff601f5460081c1682602083519301915af1610677612e66565b611891828092612894565b6101485783610643565b816118a591612894565b6106bd578338611590565b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101485760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b81811061192d576101d4856101c881870382612894565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201611916565b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101485760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b8181106119d6576101d4856101c881870382612894565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016119bf565b503461014857611a1136612b42565b6020829392018051511515737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106bd57604051907f4c63e56200000000000000000000000000000000000000000000000000000000825260048201528381602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561071657908491612080575b50505151907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82019182116106d057611ac9916102cb9161354d565b90611ad38261363a565b60408201815b8151908151811015611ba557611b0973ffffffffffffffffffffffffffffffffffffffff61031183600195612df2565b73ffffffffffffffffffffffffffffffffffffffff611b29838651612df2565b5191169052836020611b3c838651612df2565b510152836080611b4d838651612df2565b510152611b606060610370838651612df2565b6060611b6d838651612df2565b510152858114611b7e575b01611ad9565b8360c0611b8c838651612df2565b5101528360a0611b9d838651612df2565b510152611b78565b5050611bd6611bb3846139aa565b9373ffffffffffffffffffffffffffffffffffffffff601f5460081c1690614116565b936040517f08c379a0000000000000000000000000000000000000000000000000000000006020820152611c43816105976024820160609060208152600a60208201527f54657374206572726f720000000000000000000000000000000000000000000060408201520190565b73ffffffffffffffffffffffffffffffffffffffff611c63838551612df2565b5151166040611c73848651612df2565b51015190737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106cc5782918691611ccd60405194859384937fdbaad14700000000000000000000000000000000000000000000000000000000855260048501612e06565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156106c15790859161206b575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106bd576040517f491cc7c2000000000000000000000000000000000000000000000000000000008152848180611d5f60048201906001606060808401938281528260208201528260408201520152565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156106c157908591612056575b5050611dbc7f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d91604051918291858a84612e4a565b0390a16001810180911180610e1357815b83515181101561202157737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610ad7576040517f491cc7c2000000000000000000000000000000000000000000000000000000008152858180611e3f60048201906001606060808401938281528260208201528260408201520152565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015611f7e5783918791612008575b5050611fdb578281148015611fc4575b15611f8d5773ffffffffffffffffffffffffffffffffffffffff611e9d828651612df2565b5151166040611ead838751612df2565b51015190737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15611f8957611f0691879160405193849283927fbd6af43400000000000000000000000000000000000000000000000000000000845260048401612faa565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015611f7e57908691611f69575b50506001907f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a604080518a8152836020820152a15b01611dcd565b81611f7391612894565b610ad7578438611f2e565b6040513d88823e3d90fd5b8680fd5b6001907f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b604080518a8152836020820152a1611f63565b5060a0611fd2828651612df2565b51015115611e78565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b8192509061201591612894565b610ad757818538611e68565b8461067d81808973ffffffffffffffffffffffffffffffffffffffff601f5460081c1682602083519301915af1610677612e66565b8161206091612894565b6106bd578338611d87565b8161207591612894565b6106bd578338611cf5565b8161208a91612894565b610712578238611a8d565b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014857601e546120d0816128e7565b6120dd6040519182612894565b818152601e83526020810191837f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350845b8383106121bc57868587604051928392602084019060208552518091526040840160408260051b8601019392905b82821061214a57505050500390f35b919360206121ac827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc060019597998495030186526040838a5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190612bf8565b960192019201859493919261213b565b6040516121c88161282d565b73ffffffffffffffffffffffffffffffffffffffff83541681526001830180546121f1816128e7565b916121ff6040519384612894565b8183528a526020808b20908b9084015b83821061223557505050506001928260209283600295015281520192019201919061210d565b60016020819261224486612e96565b81520193019101909161220f565b50346101485761226136612b42565b602082018051511515737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610ad757604051907f4c63e56200000000000000000000000000000000000000000000000000000000825260048201528481602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156106c157612642575b505151907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201918211610e13576102cb84926123149261354d565b9061231e8261363a565b6040820192815b845180518210156123f2579061235573ffffffffffffffffffffffffffffffffffffffff61031183600195612df2565b73ffffffffffffffffffffffffffffffffffffffff612375838951612df2565b5191169052836020612388838951612df2565b510152836080612399838951612df2565b5101526123ac6060610370838951612df2565b60606123b9838951612df2565b5101528281146123ca575b01612325565b600260c06123d9838951612df2565b5101528360a06123ea838951612df2565b5101526123c4565b50509181936124036108e2836139aa565b90604051907f08c379a0000000000000000000000000000000000000000000000000000000006020830152612471826104396024820160609060208152600a60208201527f54657374206572726f720000000000000000000000000000000000000000000060408201520190565b60406124978773ffffffffffffffffffffffffffffffffffffffff61048b828651612df2565b51015190737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106cc57829186916124f160405194859384937fdbaad14700000000000000000000000000000000000000000000000000000000855260048501612e06565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156106c157859161262d575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106bd576040517f491cc7c200000000000000000000000000000000000000000000000000000000815284818061258360048201906001606060808401938281528260208201528260408201520152565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156106c157612612575b5061067d948493926125e17fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b9360405193849384612e4a565b0390a173ffffffffffffffffffffffffffffffffffffffff601f5460081c1682602083519301915af1610677612e66565b612620858092959495612894565b6106bd57869291926125a8565b8161263791612894565b6106bd578387612519565b8461264f91959295612894565b92386122d8565b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101485760405180916020601654928381520191601682527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289915b8181106126d3576101d4856101c881870382612894565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016126bc565b9050346106a057817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106a057610f888082019082821067ffffffffffffffff8311176127b0579082916148f38339039082f080156127a3577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00601f549260081b16911617601f5580f35b50604051903d90823e3d90fd5b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b602060408183019282815284518094520192019060005b8181106128015750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016127f4565b6040810190811067ffffffffffffffff82111761284957604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff82111761284957604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761284957604052565b359081151582036128e257565b600080fd5b67ffffffffffffffff81116128495760051b60200190565b67ffffffffffffffff811161284957601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9190916080818403126128e257604051906080820182811067ffffffffffffffff82111761284957604052819361296f826128d5565b8352602082013567ffffffffffffffff81116128e25782019080601f830112156128e25781359161299f836128e7565b926129ad6040519485612894565b80845260208085019160051b830101918383116128e25760208101915b838310612a1f575050505050602083015260408101359073ffffffffffffffffffffffffffffffffffffffff821682036128e257606091604084015201359066ffffffffffffff821682036128e25760600152565b823567ffffffffffffffff81116128e25782019060e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe083880301126128e25760405190612a6c82612878565b602083013573ffffffffffffffffffffffffffffffffffffffff811681036128e257825260408301356020830152606083013567ffffffffffffffff81116128e2576020908401019187601f840112156128e257823592612acc846128ff565b94612ada6040519687612894565b84865289602086840101116128e2576020956000878781988260e097018386013783010152604084015260808101356060840152612b1a60a082016128d5565b6080840152612b2b60c082016128d5565b60a0840152013560c08201528152019201916129ca565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126128e2576004359067ffffffffffffffff82116128e257612b8b91600401612939565b9060243590565b60005b838110612ba55750506000910152565b8181015183820152602001612b95565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093612bf181518092818752878088019101612b92565b0116010190565b9080602083519182815201916020808360051b8301019401926000915b838310612c2457505050505090565b9091929394602080612c60837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086600196030187528951612bb5565b97019301930191939290612c15565b906020808351928381520192019060005b818110612c8d5750505090565b82517fffffffff0000000000000000000000000000000000000000000000000000000016845260209384019390920191600101612c80565b602081016020825282518091526040820191602060408360051b8301019401926000915b838310612cf857505050505090565b9091929394602080612d5b837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190612c6f565b97019301930191939290612ce9565b91908203918211612d7757565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b805115612db35760200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805160011015612db35760400190565b8051821015612db35760209160051b010190565b91612e399073ffffffffffffffffffffffffffffffffffffffff612e479593168452606060208501526060840190612bb5565b916040818403910152612bb5565b90565b612e479392606092825260208201528160408201520190612bb5565b3d15612e91573d90612e77826128ff565b91612e856040519384612894565b82523d6000602084013e565b606090565b906040519160008154918260011c92600181168015612f93575b602085108114612f6657848752869392918115612f265750600114612edf575b50612edd92500383612894565b565b90506000929192526020600020906000915b818310612f0a575050906020612edd9282010138612ed0565b6020919350806001915483858901015201910190918492612ef1565b60209350612edd9592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b82010138612ed0565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f1693612eb0565b91908201809211612d7757565b60409073ffffffffffffffffffffffffffffffffffffffff612e4794931681528160208201520190612bb5565b90604051918281549182825260208201906000526020600020926000905b8060078301106131f157612edd9454918181106131bb575b818110613185575b81811061314f575b818110613119575b8181106130e3575b8181106130ad575b818110613078575b1061304b575b500383612894565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260200138613043565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b16815201930161303d565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b168152019301613035565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b16815201930161302d565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b168152019301613025565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b16815201930161301d565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b168152019301613015565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b16815201930161300d565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e0820152019401920185929391612ff5565b60405190610120820182811067ffffffffffffffff821117612849576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b60085460ff1680156132e85790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156133b357600091613381575b50151590565b90506020813d6020116133ab575b8161339c60209383612894565b810103126128e257513861337b565b3d915061338f565b6040513d6000823e3d90fd5b610120820160ff82511683526020820151151560208401526040820151906101206040850152815180915261014084019060206101408260051b8701019301916000905b8282106134a5575050505061343b61010091606084015160608601526080840151608086015260a084015185820360a0870152612bb5565b9160c081015160c085015260e081015160e08501520151916101008183039101526020808351928381520192019060005b8181106134795750505090565b825173ffffffffffffffffffffffffffffffffffffffff1684526020938401939092019160010161346c565b90919293602080827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec08a6001950301855287519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080613517604085015160e0604086015260e0850190612bb5565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152960192019201909291613403565b9060006135599261435a565b9060008060406135716135a382516116b98482612894565b886044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612894565b51906a636f6e736f6c652e6c6f675afa50565b633b9aca0060006135599261435a565b6fffffffffffffffffffffffffffffffff60006135599261435a565b600260006135599261435a565b9066ffffffffffffff606061360261327e565b93600085526020810151604086015273ffffffffffffffffffffffffffffffffffffffff604082015116828601520151166080830152565b61364b6003600060ff84511661435a565b60ff604091600080845161365f8682612894565b600c81527f426f756e6420726573756c740000000000000000000000000000000000000000602082015285516136ca8161171f60208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528a60248401526064830190612bb5565b51906a636f6e736f6c652e6c6f675afa5016808352156136e8575050565b6060820161370d73ffffffffffffffffffffffffffffffffffffffff6000835161435a565b90600080845161371d8682612894565b600c81527f426f756e6420726573756c740000000000000000000000000000000000000000602082015285516137888161357160208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528a60248401526064830190612bb5565b51906a636f6e736f6c652e6c6f675afa5052608082016137b266ffffffffffffff6000835161435a565b9060008084516137c28682612894565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152855161382d8161357160208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528a60248401526064830190612bb5565b51906a636f6e736f6c652e6c6f675afa505260005b8183019081519182518210156138785760c061386f836138688361089683600199612df2565b9351612df2565b51015201613842565b5050505050565b73ffffffffffffffffffffffffffffffffffffffff8116600181101580613933575b801561391f575b8015613902575b80156138f8575b156138f45773ffffffffffffffffffffffffffffffffffffffff915060405160208101918252602081526138eb604082612894565b5190201661387f565b5090565b50813b15156138b6565b50734e59b44847b379578588920ca78fbf26c0b4956c81146138af565b506a636f6e736f6c652e6c6f6781146138a8565b5060ff8111156138a1565b9092919261394b816128ff565b916139596040519384612894565b8294828452828201116128e2576020612edd930190612b92565b6020818303126128e25780519067ffffffffffffffff82116128e257019080601f830112156128e2578151612e479260200161393e565b9060006105976139cd613a089460405192839160208084015260408301906133bf565b604051809481927f71aad10d000000000000000000000000000000000000000000000000000000008352602060048401526024830190612bb5565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156133b3576000926140f9575b50613acb6002602c60405180957f7b227061796c6f6164223a2200000000000000000000000000000000000000006020830152613a768151809260208686019101612b92565b81017f227d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2810185520183612894565b6040517fc1978d1f00000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5345515f53444b5f5250435f4d494e5f504f52540000000000000000000000006044820152602081606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156133b3576000916140c7575b50604051907fc1978d1f00000000000000000000000000000000000000000000000000000000825260206004830152601460248301527f5345515f53444b5f5250435f4d41585f504f52540000000000000000000000006044830152602082606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156133b357600092614093575b50808210614035577fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a6548015613fe3575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612d7757816001613c62920193847fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a655612d6a565b9160018301809311612d7757613c8192613c7b91614321565b90612f9d565b604051907ff877cb1900000000000000000000000000000000000000000000000000000000825260206004830152601660248301527f5345515f53444b5f5250435f55524c5f505245464958000000000000000000006044830152600082606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156133b357600092613fc6575b506040517ff877cb1900000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5345515f53444b5f5250435f55524c5f535546464958000000000000000000006044820152600081606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156133b357600091613fab575b50604051917f6900a3ae0000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156133b357604095600094613ea2948693613f7c575b50613e67906020613f069495613e3a828c519885613e178b9751809285808b019101612b92565b8601613e2b82518093858085019101612b92565b01019182815194859201612b92565b01037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101855284612894565b865196879485947f0199a220000000000000000000000000000000000000000000000000000000008652606060048701526064860190612bb5565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152601083527f7061796c6f61645f746f5061636b65640000000000000000000000000000000060208401520160448601520190612bb5565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19182156133b357600092613f315750565b3d8084833e613f408183612894565b8101906020818303126106bd5780519067ffffffffffffffff8211610ad7570181601f820112156106bd57612e4792935060208151910161393e565b613f069350906020613fa2613e67933d808b833e613f9a8183612894565b810190613973565b94505090613df0565b613fc091503d806000833e613f9a8183612894565b38613d8f565b613fdc9192503d806000833e613f9a8183612894565b9038613d08565b506040516020810190366000833761402d60208236810160008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612894565b519020613c0a565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e76616c696420706f72742072616e676500000000000000000000000000006044820152fd5b90916020823d6020116140bf575b816140ae60209383612894565b810103126101485750519038613bd9565b3d91506140a1565b906020823d6020116140f1575b816140e160209383612894565b8101031261014857505138613b51565b3d91506140d4565b61410f9192503d806000833e613f9a8183612894565b9038613a30565b602081015190916141da9115614225576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a081526141d160c082612894565b51902091614539565b6040519060208201927f19010000000000000000000000000000000000000000000000000000000000008452602283015260428201526042815261421f606282612894565b51902090565b469061412a565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156128e257604051907f0c9fd58100000000000000000000000000000000000000000000000000000000825215156004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156133b35761429f5750565b6000612edd91612894565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156128e257604051917f98296c5400000000000000000000000000000000000000000000000000000000835260048301526024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156133b35761429f5750565b811561432b570690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000908383116144b557828110918215806144ab575b6144a35761437e8486612d6a565b9260018401809411612d775760038311158061449a575b61448b577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83101580614481575b6144705785831115614427575050906143df846143e493612d6a565b614321565b908115614422576143f59250612f9d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111612d775790565b505090565b959492919095614438575b50505050565b839495506143df9061444a9394612d6a565b9081156144225761445b9250612d6a565b60018101809111612d77579038808080614432565b50509050612e479291501990612d6a565b50821984116143c3565b5050919050612e479250612f9d565b50828411614395565b509250505090565b5084821115614370565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374645574696c7320626f756e642875696e743235362c75696e743235362c7560448201527f696e74323536293a204d6178206973206c657373207468616e206d696e2e00006064820152fd5b61010081015160405160208101818193602081519391019260005b8181106148c357505061458e9250037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612894565b5190209060ff81511680156000146147965750906040820151928351916145cd6145b7846128e7565b936145c56040519586612894565b8085526128e7565b937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe060208501950136863760005b86518110156146cd578061461160019289612df2565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e083015261010082015261010081526146b961012082612894565b5190206146c68288612df2565b52016145fb565b5092919450926040519081602081019182945192909260005b81811061477d5750506147209250037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612894565b51902091608060608301519201516040519260208401947f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a2865260408501526060840152608083015260a082015260a0815261421f60c082612894565b84518352602094850194869450909201916001016146e6565b600181036147f0575060a0015160208151910120906040519060208201927fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4668452604083015260608201526060815261421f608082612894565b60028103614843575060c00151906040519060208201927f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e48452604083015260608201526060815261421f608082612894565b60038103614896575060e00151906040519060208201927fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4668452604083015260608201526060815261421f608082612894565b7f048183200000000000000000000000000000000000000000000000000000000060005260045260246000fd5b845173ffffffffffffffffffffffffffffffffffffffff1683526020948501948694509092019160010161455456fe60808060405234601557610f6d908161001b8239f35b600080fdfe608060405261000c610330565b60008082523560f81c6001908160018083160361028a5750600060608401525b600761003b60ff831660011c90565b168061023d575b5060108181160361020c57506001905b61005b826103a3565b90604084019182526000905b838210610083576100818561007b81610540565b906108e0565b005b803560f81c906001019091816001808516036101ec57506100c5306100a9838751610441565b519073ffffffffffffffffffffffffffffffffffffffff169052565b6002808416146101ce575b600480841614610183575b60088084161461014e575b61013761013160c0856101116010806001989916146080610108888c51610441565b51019015159052565b61012760208083161460a0610108888c51610441565b1660061c60031690565b60ff1690565b60c0610144838751610441565b5101520190610067565b61013761013160c06101666001959060208235920190565b96906060610175878b51610441565b5101529594505050506100e6565b906101c890803560e81c906003016101c16101a86101a18484610484565b83366104c0565b919060406101b7888b51610441565b51019236916104db565b9052610484565b906100db565b90803590602001919060206101e4838751610441565b5101526100d0565b6102079250803560601c9060140192906100a9838751610441565b6100c5565b60209081160361022c5761ffff90803560f01c906002015b911690610052565b60ff90803560f81c90600101610224565b61027d919291908060031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b0190843590610100031c16920190565b9190608084015238610042565b8035606090811c90850152601401915061002c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff8211176102ea57604052565b61029f565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176102ea57604052565b60405190610120820182811067ffffffffffffffff8211176102ea576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b67ffffffffffffffff81116102ea5760051b60200190565b906103ad8261038b565b6103ba60405191826102ef565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06103e8829461038b565b019060005b8281106103f957505050565b602090604051610408816102ce565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c0820152828285010152016103ed565b80518210156104555760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9190820180921161049157565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9291928382116104d65783116104d65780920390565b600080fd5b92919267ffffffffffffffff82116102ea576040519161052360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601846102ef565b8294818452818301116104d6578281602093846000960137010152565b6020810151156106645761063261065e6105f060005b60405160208101917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408301527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606083015260808201523060a082015260a081526105e760c0826102ef565b51902093610bc6565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826102ef565b51902090565b61063261065e6105f046610556565b919082519283825260005b8481106106bd5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b8060208092840101518282860101520161067e565b9080602083519182815201916020808360051b8301019401926000915b8383106106fe57505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080610771604085015160e0604086015260e0850190610673565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152970193019301919392906106ef565b906020808351928381520192019060005b8181106107c65750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016107b9565b805160ff1682526108769160208281015115159082015261010061085061082a604085015161012060408601526101208501906106d2565b606085015160608501526080850151608085015260a085015184820360a0860152610673565b9260c081015160c084015260e081015160e08401520151906101008184039101526107a8565b90565b610891604092959493956060835260608301906107f2565b9460208201520152565b6108769392606092825260208201528160408201520190610673565b6108cd61087694926060835260608301906107f2565b9260208201526040818403910152610673565b90600091604081019283515193815b8581106108ff575b505050505050565b61090a818351610441565b519261091960a0850151151590565b80610b7a575b610b3a575060009260608101518015801580610b31575b610af9576080830151610acc5761098a9161098691610969855173ffffffffffffffffffffffffffffffffffffffff1690565b91602086015191600014610ac657505a905b604086015192610da1565b1590565b6109cc575b506040805186815260208101839052600192917f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a91a15b016108ef565b60c001805115610a7d576001815114610a3a57516002146109ed573861098f565b93925050507fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b9250610a2c610a20610db3565b6040519384938461089b565b0390a13880808080806108f7565b5083610a79610a47610db3565b6040519384937f7f6b0bb1000000000000000000000000000000000000000000000000000000008552600485016108b7565b0390fd5b509150600180927f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d610abe610ab0610db3565b604051918291858b8461089b565b0390a16109c6565b9061097b565b7f230d1ccc0000000000000000000000000000000000000000000000000000000086526004849052602486fd5b8387610a795a6040519384937f2139527400000000000000000000000000000000000000000000000000000000855260048501610879565b50815a10610936565b6040805187815260208101849052919450600192917f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b9181908101610abe565b50801561091f565b805160209091019060005b818110610b9a5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101610b8d565b610100810151604051610be181610632602082018095610b82565b51902090610bf0815160ff1690565b60ff811680610c695750509061065e610c0c6040840151610dfc565b9261063260806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b60018103610cc757505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4669381019384529081019190915260608101929092529061065e8160808101610632565b60028103610d1d57505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e46020820190815291810192909252606082019290925261065e8160808101610632565b600303610d71575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4666020820190815291810192909252606082019290925261065e8160808101610632565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b9160009391849360208451940192f190565b3d90604051916020818401016040528083526000602084013e565b805160209091019060005b818110610de65750505090565b8251845260209384019390920191600101610dd9565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610e42610e2c8361038b565b92610e3a60405194856102ef565b80845261038b565b0136602083013760005b8351811015610f1e5780610e6260019286610441565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152610f0a610120826102ef565b519020610f178285610441565b5201610e4c565b5090915060405161065e81610632602082018095610dce56fea2646970667358221220baf48a03c446c575132553e62013c6320b5d90a1ba275593a31ee1589046bd1464736f6c634300081c0033a2646970667358221220c96f7577a4db4c0efc90bd609549afcdea31217fe312247174ad838c5ca8c2c164736f6c634300081c0033","sourceMap":"625:8884:73:-:0;;;;;;;3166:4:5;625:8884:73;;3166:4:5;625:8884:73;;;3166:4:5;625:8884:73;3166:4:5;625:8884:73;;1087:4:16;625:8884:73;;;1087:4:16;625:8884:73;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608080604052600436101561001357600080fd5b600090813560e01c9081630a9254e4146126ff575080631ed7831c1461265657806325c71d57146122525780632ade3880146120955780632cefdb9814611a025780633e5e3c23146119595780633f7286f4146118b0578063495500e11461150957806366d9a9a0146113ae57806385226c81146112fe5780638efe7cce14611054578063916a17c614610f7f5780639a04f70414610f2a578063b0464fdc14610e55578063b4973a1f14610c22578063b5508aa914610b72578063ba414fa614610b2f578063c14cf83214610721578063c5a48a0a14610204578063e20c9f711461014b5763fa7626d41461010857600080fd5b3461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014857602060ff601f54166040519015158152f35b80fd5b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101485760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b8181106101d8576101d4856101c881870382612894565b604051918291826127dd565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016101b1565b50346101485761021336612b42565b6020829392018051511515737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106bd57604051907f4c63e56200000000000000000000000000000000000000000000000000000000825260048201528381602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610716579084916106fd575b50505151907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82019182116106d0576102d1916102cb9161354d565b926135ef565b906102db8261363a565b60408201815b815180518210156103bd579061031973ffffffffffffffffffffffffffffffffffffffff61031183600195612df2565b51511661387f565b73ffffffffffffffffffffffffffffffffffffffff610339838651612df2565b519116905283602061034c838651612df2565b51015283608061035d838651612df2565b5101526103786060610370838651612df2565b5101516135b6565b6060610385838651612df2565b510152858114610396575b016102e1565b8160c06103a4838651612df2565b5101528360a06103b5838651612df2565b510152610390565b50509181936103cb826139aa565b93604051907f08c379a0000000000000000000000000000000000000000000000000000000006020830152610465826104396024820160609060208152600a60208201527f54657374206572726f720000000000000000000000000000000000000000000060408201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101845283612894565b60406104958473ffffffffffffffffffffffffffffffffffffffff61048b828651612df2565b5151169351612df2565b51015190737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106cc57829186916104ef60405194859384937fdbaad14700000000000000000000000000000000000000000000000000000000855260048501612e06565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156106c15785916106a4575b5050916105976105c392610562946040519586947f7f6b0bb10000000000000000000000000000000000000000000000000000000060208701526060602487015260848601906133bf565b9160448501527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc848303016064850152612bb5565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612894565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106a0578161061e91604051809381927ff28dceb3000000000000000000000000000000000000000000000000000000008352602060048401526024830190612bb5565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561069557610680575b508061067d9273ffffffffffffffffffffffffffffffffffffffff601f5460081c1682602083519301915af1610677612e66565b5061422c565b80f35b61068b828092612894565b6101485738610643565b6040513d84823e3d90fd5b5080fd5b816106b191959395612894565b6106bd57918338610517565b8380fd5b6040513d87823e3d90fd5b8580fd5b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b8161070791612894565b61071257823861028f565b8280fd5b6040513d86823e3d90fd5b50346101485760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101485760043567ffffffffffffffff81116106a057610771903690600401612939565b81602082015151600581109081610b25575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106a057604051907f4c63e562000000000000000000000000000000000000000000000000000000008252151560048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561069557610b10575b50506107ff906135ef565b6108088161363a565b8160408201925b83519081518110156108d45761083f73ffffffffffffffffffffffffffffffffffffffff61031183600195612df2565b73ffffffffffffffffffffffffffffffffffffffff61085f838851612df2565b5191169052826020610872838851612df2565b510152826080610883838851612df2565b51015261089e60c0610896838851612df2565b5101516135e2565b60c06108ab838851612df2565b5101526108be6060610370838851612df2565b60606108cb838851612df2565b5101520161080f565b50506109056108e2836139aa565b9273ffffffffffffffffffffffffffffffffffffffff601f5460081c1690614116565b92815b81518051821015610adb5761091f8260a092612df2565b51015115610a0757737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610712576040517f491cc7c200000000000000000000000000000000000000000000000000000000815283818061098f60048201906001606060808401938281528260208201528260408201520152565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015610716579084916109f2575b50506001907f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b60408051888152836020820152a15b01610908565b816109fc91612894565b6107125782386109b7565b73ffffffffffffffffffffffffffffffffffffffff610a27828451612df2565b5151166040610a37838551612df2565b51015190737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610ad757610a9091859160405193849283927fbd6af43400000000000000000000000000000000000000000000000000000000845260048401612faa565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561071657908491610ac2575b50506001906109ec565b81610acc91612894565b610712578238610ab8565b8480fd5b8361067d81808873ffffffffffffffffffffffffffffffffffffffff601f5460081c1682602083519301915af1610677612e66565b81610b1a91612894565b6106a05781386107f4565b9050151538610783565b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610148576020610b686132d9565b6040519015158152f35b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014857601954610bad816128e7565b91610bbb6040519384612894565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b838310610c0557604051602080825281906101d490820188612bf8565b600160208192610c1485612e96565b815201920192019190610be8565b503461014857610c3136612b42565b60208201838151511515737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106a057604051907f4c63e56200000000000000000000000000000000000000000000000000000000825260048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561069557610e40575b50505151907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201918211610e1357610ceb91610ce59161354d565b916135ef565b91610cf58361363a565b60408301815b81518051821015610dc75790610d2b73ffffffffffffffffffffffffffffffffffffffff61031183600195612df2565b73ffffffffffffffffffffffffffffffffffffffff610d4b838651612df2565b5191169052836020610d5e838651612df2565b510152610d716060610370838651612df2565b6060610d7e838651612df2565b510152808503610db157816080610d96838651612df2565b5101528360a0610da7838651612df2565b5101525b01610cfb565b836080610dbf838651612df2565b510152610dab565b505050610dd481936139aa565b91604051907f230d1ccc0000000000000000000000000000000000000000000000000000000060208301526024820152602481526105c3604482612894565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b81610e4a91612894565b6106bd578338610ca9565b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014857601c54610e90816128e7565b91610e9e6040519384612894565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b838310610ee057604051806101d48782612cc5565b60026020600192604051610ef38161282d565b73ffffffffffffffffffffffffffffffffffffffff8654168152610f18858701612fd7565b83820152815201920192019190610ecb565b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014857602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051908152f35b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014857601d54610fba816128e7565b91610fc86040519384612894565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b83831061100a57604051806101d48782612cc5565b6002602060019260405161101d8161282d565b73ffffffffffffffffffffffffffffffffffffffff8654168152611042858701612fd7565b83820152815201920192019190610ff5565b50346101485760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101485761108f6004356135c6565b61109a6024356135c6565b6110a261327e565b838152816060604051906110b68183612894565b600282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190875b8281106112b5575050509060206111308493621000016111096040611138980192808452612da6565b515287836111178351612da6565b510152621000026111288251612de2565b515251612de2565b5101526139aa565b836111438385612f9d565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106a0576040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152816024820152828160448183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156112aa57611295575b506111ed92829173ffffffffffffffffffffffffffffffffffffffff601f5460081c1690602083519301915af1610677612e66565b8247737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106a057604051907f98296c5400000000000000000000000000000000000000000000000000000000825260048201528160248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561069557611280575b505061127661067d9262100001316142aa565b62100002316142aa565b8161128a91612894565b610712578238611263565b6112a0838092612894565b6106a057386111b8565b6040513d85823e3d90fd5b602091929394506040516112c881612878565b898152898382015283604082015289848201528960808201528960a08201528960c08201528282870101520190859392916110e0565b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014857601a54611339816128e7565b916113476040519384612894565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b83831061139157604051602080825281906101d490820188612bf8565b6001602081926113a085612e96565b815201920192019190611374565b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014857601b546113e9816128e7565b6113f66040519182612894565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b8383106114ce57868587604051928392602084019060208552518091526040840160408260051b8601019392905b82821061146357505050500390f35b919360206114be827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc06001959799849503018652885190836114ae8351604084526040840190612bb5565b9201519084818403910152612c6f565b9601920192018594939192611454565b600260206001926040516114e18161282d565b6114ea86612e96565b81526114f7858701612fd7565b83820152815201920192019190611426565b50346101485761151836612b42565b60208201838151511515737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106a057604051907f4c63e56200000000000000000000000000000000000000000000000000000000825260048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156106955761189b575b50505151907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201918211610e13576115cc91610ce59161354d565b906115d68261363a565b6040820190835b825180518210156117df5773ffffffffffffffffffffffffffffffffffffffff6103118361160a93612df2565b73ffffffffffffffffffffffffffffffffffffffff61162a838651612df2565b519116905284602061163d838651612df2565b51015284608061164e838651612df2565b5101528082036117b7576060611665828551612df2565b5101515a906001820180921161178a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600193926116a39261435a565b8680604061171f61175182516116b98482612894565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152835192839160208301957fb60e72cc00000000000000000000000000000000000000000000000000000000875260248401526064830190612bb5565b876044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612894565b51906a636f6e736f6c652e6c6f675afa50606061176f838751612df2565b5101528560a0611780838751612df2565b5101525b016115dd565b6024877f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b806117ca60606103706001948751612df2565b60606117d7838751612df2565b510152611784565b856117e9866139aa565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106a057816040517ff4844814000000000000000000000000000000000000000000000000000000008152818160048183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156106955761188657508061067d9273ffffffffffffffffffffffffffffffffffffffff601f5460081c1682602083519301915af1610677612e66565b611891828092612894565b6101485783610643565b816118a591612894565b6106bd578338611590565b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101485760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b81811061192d576101d4856101c881870382612894565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201611916565b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101485760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b8181106119d6576101d4856101c881870382612894565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016119bf565b503461014857611a1136612b42565b6020829392018051511515737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106bd57604051907f4c63e56200000000000000000000000000000000000000000000000000000000825260048201528381602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561071657908491612080575b50505151907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82019182116106d057611ac9916102cb9161354d565b90611ad38261363a565b60408201815b8151908151811015611ba557611b0973ffffffffffffffffffffffffffffffffffffffff61031183600195612df2565b73ffffffffffffffffffffffffffffffffffffffff611b29838651612df2565b5191169052836020611b3c838651612df2565b510152836080611b4d838651612df2565b510152611b606060610370838651612df2565b6060611b6d838651612df2565b510152858114611b7e575b01611ad9565b8360c0611b8c838651612df2565b5101528360a0611b9d838651612df2565b510152611b78565b5050611bd6611bb3846139aa565b9373ffffffffffffffffffffffffffffffffffffffff601f5460081c1690614116565b936040517f08c379a0000000000000000000000000000000000000000000000000000000006020820152611c43816105976024820160609060208152600a60208201527f54657374206572726f720000000000000000000000000000000000000000000060408201520190565b73ffffffffffffffffffffffffffffffffffffffff611c63838551612df2565b5151166040611c73848651612df2565b51015190737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106cc5782918691611ccd60405194859384937fdbaad14700000000000000000000000000000000000000000000000000000000855260048501612e06565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156106c15790859161206b575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106bd576040517f491cc7c2000000000000000000000000000000000000000000000000000000008152848180611d5f60048201906001606060808401938281528260208201528260408201520152565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156106c157908591612056575b5050611dbc7f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d91604051918291858a84612e4a565b0390a16001810180911180610e1357815b83515181101561202157737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610ad7576040517f491cc7c2000000000000000000000000000000000000000000000000000000008152858180611e3f60048201906001606060808401938281528260208201528260408201520152565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015611f7e5783918791612008575b5050611fdb578281148015611fc4575b15611f8d5773ffffffffffffffffffffffffffffffffffffffff611e9d828651612df2565b5151166040611ead838751612df2565b51015190737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15611f8957611f0691879160405193849283927fbd6af43400000000000000000000000000000000000000000000000000000000845260048401612faa565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015611f7e57908691611f69575b50506001907f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a604080518a8152836020820152a15b01611dcd565b81611f7391612894565b610ad7578438611f2e565b6040513d88823e3d90fd5b8680fd5b6001907f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b604080518a8152836020820152a1611f63565b5060a0611fd2828651612df2565b51015115611e78565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b8192509061201591612894565b610ad757818538611e68565b8461067d81808973ffffffffffffffffffffffffffffffffffffffff601f5460081c1682602083519301915af1610677612e66565b8161206091612894565b6106bd578338611d87565b8161207591612894565b6106bd578338611cf5565b8161208a91612894565b610712578238611a8d565b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014857601e546120d0816128e7565b6120dd6040519182612894565b818152601e83526020810191837f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350845b8383106121bc57868587604051928392602084019060208552518091526040840160408260051b8601019392905b82821061214a57505050500390f35b919360206121ac827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc060019597998495030186526040838a5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190612bf8565b960192019201859493919261213b565b6040516121c88161282d565b73ffffffffffffffffffffffffffffffffffffffff83541681526001830180546121f1816128e7565b916121ff6040519384612894565b8183528a526020808b20908b9084015b83821061223557505050506001928260209283600295015281520192019201919061210d565b60016020819261224486612e96565b81520193019101909161220f565b50346101485761226136612b42565b602082018051511515737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610ad757604051907f4c63e56200000000000000000000000000000000000000000000000000000000825260048201528481602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156106c157612642575b505151907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201918211610e13576102cb84926123149261354d565b9061231e8261363a565b6040820192815b845180518210156123f2579061235573ffffffffffffffffffffffffffffffffffffffff61031183600195612df2565b73ffffffffffffffffffffffffffffffffffffffff612375838951612df2565b5191169052836020612388838951612df2565b510152836080612399838951612df2565b5101526123ac6060610370838951612df2565b60606123b9838951612df2565b5101528281146123ca575b01612325565b600260c06123d9838951612df2565b5101528360a06123ea838951612df2565b5101526123c4565b50509181936124036108e2836139aa565b90604051907f08c379a0000000000000000000000000000000000000000000000000000000006020830152612471826104396024820160609060208152600a60208201527f54657374206572726f720000000000000000000000000000000000000000000060408201520190565b60406124978773ffffffffffffffffffffffffffffffffffffffff61048b828651612df2565b51015190737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106cc57829186916124f160405194859384937fdbaad14700000000000000000000000000000000000000000000000000000000855260048501612e06565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156106c157859161262d575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106bd576040517f491cc7c200000000000000000000000000000000000000000000000000000000815284818061258360048201906001606060808401938281528260208201528260408201520152565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156106c157612612575b5061067d948493926125e17fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b9360405193849384612e4a565b0390a173ffffffffffffffffffffffffffffffffffffffff601f5460081c1682602083519301915af1610677612e66565b612620858092959495612894565b6106bd57869291926125a8565b8161263791612894565b6106bd578387612519565b8461264f91959295612894565b92386122d8565b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101485760405180916020601654928381520191601682527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289915b8181106126d3576101d4856101c881870382612894565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016126bc565b9050346106a057817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106a057610f888082019082821067ffffffffffffffff8311176127b0579082916148f38339039082f080156127a3577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00601f549260081b16911617601f5580f35b50604051903d90823e3d90fd5b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b602060408183019282815284518094520192019060005b8181106128015750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016127f4565b6040810190811067ffffffffffffffff82111761284957604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff82111761284957604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761284957604052565b359081151582036128e257565b600080fd5b67ffffffffffffffff81116128495760051b60200190565b67ffffffffffffffff811161284957601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9190916080818403126128e257604051906080820182811067ffffffffffffffff82111761284957604052819361296f826128d5565b8352602082013567ffffffffffffffff81116128e25782019080601f830112156128e25781359161299f836128e7565b926129ad6040519485612894565b80845260208085019160051b830101918383116128e25760208101915b838310612a1f575050505050602083015260408101359073ffffffffffffffffffffffffffffffffffffffff821682036128e257606091604084015201359066ffffffffffffff821682036128e25760600152565b823567ffffffffffffffff81116128e25782019060e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe083880301126128e25760405190612a6c82612878565b602083013573ffffffffffffffffffffffffffffffffffffffff811681036128e257825260408301356020830152606083013567ffffffffffffffff81116128e2576020908401019187601f840112156128e257823592612acc846128ff565b94612ada6040519687612894565b84865289602086840101116128e2576020956000878781988260e097018386013783010152604084015260808101356060840152612b1a60a082016128d5565b6080840152612b2b60c082016128d5565b60a0840152013560c08201528152019201916129ca565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126128e2576004359067ffffffffffffffff82116128e257612b8b91600401612939565b9060243590565b60005b838110612ba55750506000910152565b8181015183820152602001612b95565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093612bf181518092818752878088019101612b92565b0116010190565b9080602083519182815201916020808360051b8301019401926000915b838310612c2457505050505090565b9091929394602080612c60837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086600196030187528951612bb5565b97019301930191939290612c15565b906020808351928381520192019060005b818110612c8d5750505090565b82517fffffffff0000000000000000000000000000000000000000000000000000000016845260209384019390920191600101612c80565b602081016020825282518091526040820191602060408360051b8301019401926000915b838310612cf857505050505090565b9091929394602080612d5b837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190612c6f565b97019301930191939290612ce9565b91908203918211612d7757565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b805115612db35760200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805160011015612db35760400190565b8051821015612db35760209160051b010190565b91612e399073ffffffffffffffffffffffffffffffffffffffff612e479593168452606060208501526060840190612bb5565b916040818403910152612bb5565b90565b612e479392606092825260208201528160408201520190612bb5565b3d15612e91573d90612e77826128ff565b91612e856040519384612894565b82523d6000602084013e565b606090565b906040519160008154918260011c92600181168015612f93575b602085108114612f6657848752869392918115612f265750600114612edf575b50612edd92500383612894565b565b90506000929192526020600020906000915b818310612f0a575050906020612edd9282010138612ed0565b6020919350806001915483858901015201910190918492612ef1565b60209350612edd9592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b82010138612ed0565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f1693612eb0565b91908201809211612d7757565b60409073ffffffffffffffffffffffffffffffffffffffff612e4794931681528160208201520190612bb5565b90604051918281549182825260208201906000526020600020926000905b8060078301106131f157612edd9454918181106131bb575b818110613185575b81811061314f575b818110613119575b8181106130e3575b8181106130ad575b818110613078575b1061304b575b500383612894565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260200138613043565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b16815201930161303d565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b168152019301613035565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b16815201930161302d565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b168152019301613025565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b16815201930161301d565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b168152019301613015565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b16815201930161300d565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e0820152019401920185929391612ff5565b60405190610120820182811067ffffffffffffffff821117612849576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b60085460ff1680156132e85790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156133b357600091613381575b50151590565b90506020813d6020116133ab575b8161339c60209383612894565b810103126128e257513861337b565b3d915061338f565b6040513d6000823e3d90fd5b610120820160ff82511683526020820151151560208401526040820151906101206040850152815180915261014084019060206101408260051b8701019301916000905b8282106134a5575050505061343b61010091606084015160608601526080840151608086015260a084015185820360a0870152612bb5565b9160c081015160c085015260e081015160e08501520151916101008183039101526020808351928381520192019060005b8181106134795750505090565b825173ffffffffffffffffffffffffffffffffffffffff1684526020938401939092019160010161346c565b90919293602080827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec08a6001950301855287519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080613517604085015160e0604086015260e0850190612bb5565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152960192019201909291613403565b9060006135599261435a565b9060008060406135716135a382516116b98482612894565b886044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612894565b51906a636f6e736f6c652e6c6f675afa50565b633b9aca0060006135599261435a565b6fffffffffffffffffffffffffffffffff60006135599261435a565b600260006135599261435a565b9066ffffffffffffff606061360261327e565b93600085526020810151604086015273ffffffffffffffffffffffffffffffffffffffff604082015116828601520151166080830152565b61364b6003600060ff84511661435a565b60ff604091600080845161365f8682612894565b600c81527f426f756e6420726573756c740000000000000000000000000000000000000000602082015285516136ca8161171f60208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528a60248401526064830190612bb5565b51906a636f6e736f6c652e6c6f675afa5016808352156136e8575050565b6060820161370d73ffffffffffffffffffffffffffffffffffffffff6000835161435a565b90600080845161371d8682612894565b600c81527f426f756e6420726573756c740000000000000000000000000000000000000000602082015285516137888161357160208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528a60248401526064830190612bb5565b51906a636f6e736f6c652e6c6f675afa5052608082016137b266ffffffffffffff6000835161435a565b9060008084516137c28682612894565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152855161382d8161357160208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528a60248401526064830190612bb5565b51906a636f6e736f6c652e6c6f675afa505260005b8183019081519182518210156138785760c061386f836138688361089683600199612df2565b9351612df2565b51015201613842565b5050505050565b73ffffffffffffffffffffffffffffffffffffffff8116600181101580613933575b801561391f575b8015613902575b80156138f8575b156138f45773ffffffffffffffffffffffffffffffffffffffff915060405160208101918252602081526138eb604082612894565b5190201661387f565b5090565b50813b15156138b6565b50734e59b44847b379578588920ca78fbf26c0b4956c81146138af565b506a636f6e736f6c652e6c6f6781146138a8565b5060ff8111156138a1565b9092919261394b816128ff565b916139596040519384612894565b8294828452828201116128e2576020612edd930190612b92565b6020818303126128e25780519067ffffffffffffffff82116128e257019080601f830112156128e2578151612e479260200161393e565b9060006105976139cd613a089460405192839160208084015260408301906133bf565b604051809481927f71aad10d000000000000000000000000000000000000000000000000000000008352602060048401526024830190612bb5565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156133b3576000926140f9575b50613acb6002602c60405180957f7b227061796c6f6164223a2200000000000000000000000000000000000000006020830152613a768151809260208686019101612b92565b81017f227d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2810185520183612894565b6040517fc1978d1f00000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5345515f53444b5f5250435f4d494e5f504f52540000000000000000000000006044820152602081606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156133b3576000916140c7575b50604051907fc1978d1f00000000000000000000000000000000000000000000000000000000825260206004830152601460248301527f5345515f53444b5f5250435f4d41585f504f52540000000000000000000000006044830152602082606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156133b357600092614093575b50808210614035577fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a6548015613fe3575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612d7757816001613c62920193847fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a655612d6a565b9160018301809311612d7757613c8192613c7b91614321565b90612f9d565b604051907ff877cb1900000000000000000000000000000000000000000000000000000000825260206004830152601660248301527f5345515f53444b5f5250435f55524c5f505245464958000000000000000000006044830152600082606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156133b357600092613fc6575b506040517ff877cb1900000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5345515f53444b5f5250435f55524c5f535546464958000000000000000000006044820152600081606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156133b357600091613fab575b50604051917f6900a3ae0000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156133b357604095600094613ea2948693613f7c575b50613e67906020613f069495613e3a828c519885613e178b9751809285808b019101612b92565b8601613e2b82518093858085019101612b92565b01019182815194859201612b92565b01037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101855284612894565b865196879485947f0199a220000000000000000000000000000000000000000000000000000000008652606060048701526064860190612bb5565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152601083527f7061796c6f61645f746f5061636b65640000000000000000000000000000000060208401520160448601520190612bb5565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19182156133b357600092613f315750565b3d8084833e613f408183612894565b8101906020818303126106bd5780519067ffffffffffffffff8211610ad7570181601f820112156106bd57612e4792935060208151910161393e565b613f069350906020613fa2613e67933d808b833e613f9a8183612894565b810190613973565b94505090613df0565b613fc091503d806000833e613f9a8183612894565b38613d8f565b613fdc9192503d806000833e613f9a8183612894565b9038613d08565b506040516020810190366000833761402d60208236810160008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612894565b519020613c0a565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e76616c696420706f72742072616e676500000000000000000000000000006044820152fd5b90916020823d6020116140bf575b816140ae60209383612894565b810103126101485750519038613bd9565b3d91506140a1565b906020823d6020116140f1575b816140e160209383612894565b8101031261014857505138613b51565b3d91506140d4565b61410f9192503d806000833e613f9a8183612894565b9038613a30565b602081015190916141da9115614225576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a081526141d160c082612894565b51902091614539565b6040519060208201927f19010000000000000000000000000000000000000000000000000000000000008452602283015260428201526042815261421f606282612894565b51902090565b469061412a565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156128e257604051907f0c9fd58100000000000000000000000000000000000000000000000000000000825215156004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156133b35761429f5750565b6000612edd91612894565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156128e257604051917f98296c5400000000000000000000000000000000000000000000000000000000835260048301526024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156133b35761429f5750565b811561432b570690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000908383116144b557828110918215806144ab575b6144a35761437e8486612d6a565b9260018401809411612d775760038311158061449a575b61448b577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83101580614481575b6144705785831115614427575050906143df846143e493612d6a565b614321565b908115614422576143f59250612f9d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111612d775790565b505090565b959492919095614438575b50505050565b839495506143df9061444a9394612d6a565b9081156144225761445b9250612d6a565b60018101809111612d77579038808080614432565b50509050612e479291501990612d6a565b50821984116143c3565b5050919050612e479250612f9d565b50828411614395565b509250505090565b5084821115614370565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374645574696c7320626f756e642875696e743235362c75696e743235362c7560448201527f696e74323536293a204d6178206973206c657373207468616e206d696e2e00006064820152fd5b61010081015160405160208101818193602081519391019260005b8181106148c357505061458e9250037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612894565b5190209060ff81511680156000146147965750906040820151928351916145cd6145b7846128e7565b936145c56040519586612894565b8085526128e7565b937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe060208501950136863760005b86518110156146cd578061461160019289612df2565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e083015261010082015261010081526146b961012082612894565b5190206146c68288612df2565b52016145fb565b5092919450926040519081602081019182945192909260005b81811061477d5750506147209250037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612894565b51902091608060608301519201516040519260208401947f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a2865260408501526060840152608083015260a082015260a0815261421f60c082612894565b84518352602094850194869450909201916001016146e6565b600181036147f0575060a0015160208151910120906040519060208201927fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4668452604083015260608201526060815261421f608082612894565b60028103614843575060c00151906040519060208201927f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e48452604083015260608201526060815261421f608082612894565b60038103614896575060e00151906040519060208201927fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4668452604083015260608201526060815261421f608082612894565b7f048183200000000000000000000000000000000000000000000000000000000060005260045260246000fd5b845173ffffffffffffffffffffffffffffffffffffffff1683526020948501948694509092019160010161455456fe60808060405234601557610f6d908161001b8239f35b600080fdfe608060405261000c610330565b60008082523560f81c6001908160018083160361028a5750600060608401525b600761003b60ff831660011c90565b168061023d575b5060108181160361020c57506001905b61005b826103a3565b90604084019182526000905b838210610083576100818561007b81610540565b906108e0565b005b803560f81c906001019091816001808516036101ec57506100c5306100a9838751610441565b519073ffffffffffffffffffffffffffffffffffffffff169052565b6002808416146101ce575b600480841614610183575b60088084161461014e575b61013761013160c0856101116010806001989916146080610108888c51610441565b51019015159052565b61012760208083161460a0610108888c51610441565b1660061c60031690565b60ff1690565b60c0610144838751610441565b5101520190610067565b61013761013160c06101666001959060208235920190565b96906060610175878b51610441565b5101529594505050506100e6565b906101c890803560e81c906003016101c16101a86101a18484610484565b83366104c0565b919060406101b7888b51610441565b51019236916104db565b9052610484565b906100db565b90803590602001919060206101e4838751610441565b5101526100d0565b6102079250803560601c9060140192906100a9838751610441565b6100c5565b60209081160361022c5761ffff90803560f01c906002015b911690610052565b60ff90803560f81c90600101610224565b61027d919291908060031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b0190843590610100031c16920190565b9190608084015238610042565b8035606090811c90850152601401915061002c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff8211176102ea57604052565b61029f565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176102ea57604052565b60405190610120820182811067ffffffffffffffff8211176102ea576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b67ffffffffffffffff81116102ea5760051b60200190565b906103ad8261038b565b6103ba60405191826102ef565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06103e8829461038b565b019060005b8281106103f957505050565b602090604051610408816102ce565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c0820152828285010152016103ed565b80518210156104555760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9190820180921161049157565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9291928382116104d65783116104d65780920390565b600080fd5b92919267ffffffffffffffff82116102ea576040519161052360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601846102ef565b8294818452818301116104d6578281602093846000960137010152565b6020810151156106645761063261065e6105f060005b60405160208101917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408301527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606083015260808201523060a082015260a081526105e760c0826102ef565b51902093610bc6565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826102ef565b51902090565b61063261065e6105f046610556565b919082519283825260005b8481106106bd5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b8060208092840101518282860101520161067e565b9080602083519182815201916020808360051b8301019401926000915b8383106106fe57505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080610771604085015160e0604086015260e0850190610673565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152970193019301919392906106ef565b906020808351928381520192019060005b8181106107c65750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016107b9565b805160ff1682526108769160208281015115159082015261010061085061082a604085015161012060408601526101208501906106d2565b606085015160608501526080850151608085015260a085015184820360a0860152610673565b9260c081015160c084015260e081015160e08401520151906101008184039101526107a8565b90565b610891604092959493956060835260608301906107f2565b9460208201520152565b6108769392606092825260208201528160408201520190610673565b6108cd61087694926060835260608301906107f2565b9260208201526040818403910152610673565b90600091604081019283515193815b8581106108ff575b505050505050565b61090a818351610441565b519261091960a0850151151590565b80610b7a575b610b3a575060009260608101518015801580610b31575b610af9576080830151610acc5761098a9161098691610969855173ffffffffffffffffffffffffffffffffffffffff1690565b91602086015191600014610ac657505a905b604086015192610da1565b1590565b6109cc575b506040805186815260208101839052600192917f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a91a15b016108ef565b60c001805115610a7d576001815114610a3a57516002146109ed573861098f565b93925050507fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b9250610a2c610a20610db3565b6040519384938461089b565b0390a13880808080806108f7565b5083610a79610a47610db3565b6040519384937f7f6b0bb1000000000000000000000000000000000000000000000000000000008552600485016108b7565b0390fd5b509150600180927f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d610abe610ab0610db3565b604051918291858b8461089b565b0390a16109c6565b9061097b565b7f230d1ccc0000000000000000000000000000000000000000000000000000000086526004849052602486fd5b8387610a795a6040519384937f2139527400000000000000000000000000000000000000000000000000000000855260048501610879565b50815a10610936565b6040805187815260208101849052919450600192917f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b9181908101610abe565b50801561091f565b805160209091019060005b818110610b9a5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101610b8d565b610100810151604051610be181610632602082018095610b82565b51902090610bf0815160ff1690565b60ff811680610c695750509061065e610c0c6040840151610dfc565b9261063260806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b60018103610cc757505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4669381019384529081019190915260608101929092529061065e8160808101610632565b60028103610d1d57505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e46020820190815291810192909252606082019290925261065e8160808101610632565b600303610d71575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4666020820190815291810192909252606082019290925261065e8160808101610632565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b9160009391849360208451940192f190565b3d90604051916020818401016040528083526000602084013e565b805160209091019060005b818110610de65750505090565b8251845260209384019390920191600101610dd9565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610e42610e2c8361038b565b92610e3a60405194856102ef565b80845261038b565b0136602083013760005b8351811015610f1e5780610e6260019286610441565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152610f0a610120826102ef565b519020610f178285610441565b5201610e4c565b5090915060405161065e81610632602082018095610dce56fea2646970667358221220baf48a03c446c575132553e62013c6320b5d90a1ba275593a31ee1589046bd1464736f6c634300081c0033a2646970667358221220c96f7577a4db4c0efc90bd609549afcdea31217fe312247174ad838c5ca8c2c164736f6c634300081c0033","sourceMap":"625:8884:73:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1065:26:16;625:8884:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2723:18:9;625:8884:73;;;;;;;2723:18:9;625:8884:73;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6177:7;;;;;;;625:8884;6177:18;;336:42:2;6167:29:73;;;;625:8884;;6167:29;2024:14:2;6167:29:73;;625:8884;6167:29;;625:8884;6167:29;;;;336:42:2;6167:29:73;;;;;;;;;;;625:8884;6234:7;;;625:8884;2024:14:2;;;;;;;;;6293:24:73;6214:39;;;;:::i;:::-;6293:24;;:::i;:::-;6343:7;;;;:::i;:::-;625:8884;6382:13;;6363;6404:3;6382:13;;625:8884;;6378:24;;;;;6457:16;6439:38;625:8884;6457:16;;6251:1;6457:16;;:::i;:::-;;2024:14:2;625:8884:73;6439:38;:::i;:::-;625:8884;6417:16;:13;;;:16;:::i;:::-;;625:8884;;2024:14:2;;6485:13:73;6177:7;6485:16;:13;;;:16;:::i;:::-;;:22;2024:14:2;6519:13:73;:29;:16;:13;;;:16;:::i;:::-;;:29;2024:14:2;6592:50:73;6598:25;:16;:13;;;:16;:::i;:::-;;:25;2024:14:2;6592:50:73;:::i;:::-;6598:25;6564:16;:13;;;:16;:::i;:::-;;:25;2024:14:2;6655::73;;;6651:153;;6404:3;2024:14:2;6363:13:73;;6651:153;6681:13;:32;:16;:13;;;:16;:::i;:::-;;:32;2024:14:2;6758:13:73;:29;:16;:13;;;:16;:::i;:::-;;:29;2024:14:2;6651:153:73;;6378:24;;;;;;6838:42;;;:::i;:::-;625:8884;;;6964:54;;6177:7;6964:54;;;;;;6167:29;6964:54;;2867:4:48;;;;;;;;;625:8884:73;2867:4:48;625:8884:73;;;2867:4:48;;;;6964:54:73;;;;;;;;;:::i;:::-;625:8884;7071:24;7042:13;625:8884;7042:24;:13;;;:24;:::i;:::-;;2024:14:2;625:8884:73;7071:13;;:24;:::i;:::-;;:29;;7024:89;336:42:2;7024:89:73;;;;625:8884;;;;7024:89;625:8884;;7024:89;;;;;2024:14:2;7024:89:73;;625:8884;7024:89;;;:::i;:::-;;;;336:42:2;7024:89:73;;;;;;;;;;;6358:452;625:8884;;;2763:4:48;7161:79:73;625:8884;2763:4:48;625:8884:73;;;7161:79;;;7184:23;6177:7;7161:79;;;6598:25;6167:29;7161:79;;2763:4:48;;;;;;:::i;:::-;;;;;2867;2763;;;;;;;;;;:::i;:::-;7161:79:73;6964:54;7161:79;;;;;;:::i;:::-;336:42:2;7145:96:73;;;;625:8884;;;;;7145:96;;;;2024:14:2;7145:96:73;;6177:7;625:8884;7145:96;;625:8884;6167:29;625:8884;;;;:::i;:::-;7145:96;;;336:42:2;7145:96:73;;;;;;;;6358:452;2867:4:48;;7305:2:73;2867:4:48;625:8884:73;7269:5;2867:4:48;;;625:8884:73;7261:27;6177:7;7261:27;;;;;;;;;:::i;:::-;;7305:2;:::i;:::-;625:8884;;7145:96;;;;;;:::i;:::-;625:8884;;7145:96;;;;625:8884;;;;;;;;;7145:96;625:8884;;;7024:89;;;;;;;;:::i;:::-;625:8884;;7024:89;;;;;625:8884;;;;7024:89;625:8884;;;;;;;;;7024:89;625:8884;;;2024:14:2;6167:29:73;2024:14:2;;;;;625:8884:73;2024:14:2;;6167:29:73;;;;;:::i;:::-;625:8884;;6167:29;;;;625:8884;;;;6167:29;625:8884;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1078:7;625:8884;1078:7;;;625:8884;1095:1;1078:18;;:40;;;;625:8884;1068:51;336:42:2;1068:51:73;;;;625:8884;;1068:51;2024:14:2;1068:51:73;;625:8884;;;1068:51;;625:8884;1068:51;;;;336:42:2;1068:51:73;;;;;;;;625:8884;1158:24;;;;;:::i;:::-;1208:7;;;:::i;:::-;1227:13;625:8884;1246:13;;1222:436;1268:3;1246:13;;625:8884;;;1242:24;;;;;1303:38;625:8884;1321:16;;2024:14:2;1321:16:73;;:::i;1303:38::-;625:8884;1281:16;:13;;;:16;:::i;:::-;;625:8884;;2024:14:2;;1349:13:73;625:8884;1349:16;:13;;;:16;:::i;:::-;;:22;2024:14:2;1411:13:73;:29;:16;:13;;;:16;:::i;:::-;;:29;2024:14:2;1520:45:73;1526:32;:16;:13;;;:16;:::i;:::-;;:32;2024:14:2;1520:45:73;:::i;:::-;1526:32;1485:16;:13;;;:16;:::i;:::-;;:32;2024:14:2;1601:50:73;1607:25;:16;:13;;;:16;:::i;1601:50::-;1607:25;1573:16;:13;;;:16;:::i;:::-;;:25;2024:14:2;;1227:13:73;;1242:24;;;1752:40;1686:42;;;:::i;:::-;2867:4:48;625:8884:73;1785:5;2867:4:48;;;625:8884:73;1752:40;;:::i;:::-;1803:13;;1844:3;1822:13;;625:8884;;1818:24;;;;;1861:16;;:29;:16;;:::i;:::-;;:29;2657:4:48;625:8884:73;1861:29;;336:42:2;1902:37:73;;;;625:8884;;2024:14:2;1902:37:73;;;;;;625:8884;1902:37;;2867:4:48;7499:1:73;2867:4:48;;;;625:8884:73;;;;2867:4:48;;;;625:8884:73;2867:4:48;;;;625:8884:73;2867:4:48;625:8884:73;2867:4:48;1902:37:73;;;;336:42:2;1902:37:73;;;;;;;;;;;1857:302;625:8884;;2024:14:2;625:8884:73;1954:22;625:8884;;;2867:4:48;;;2657;625:8884:73;2657:4:48;;2867;1954:22:73;1857:302;2024:14:2;1803:13:73;;1902:37;;;;;:::i;:::-;625:8884;;1902:37;;;;1857:302;625:8884;2015:16;:13;;;:16;:::i;:::-;;2024:14:2;625:8884:73;;2036:16;:13;;;:16;:::i;:::-;;:21;;2001:57;336:42:2;2001:57:73;;;;;625:8884;;;;;2001:57;;;;;2024:14:2;2001:57:73;;625:8884;2001:57;;;:::i;:::-;;;;336:42:2;2001:57:73;;;;;;;;;;;1857:302;;;2024:14:2;1857:302:73;;;2001:57;;;;;:::i;:::-;625:8884;;2001:57;;;;;625:8884;;;1818:24;;2227:2;1818:24;;;625:8884;1785:5;2867:4:48;;;625:8884:73;2183:27;625:8884;2183:27;;;;;;;;;:::i;1068:51::-;;;;;:::i;:::-;625:8884;;1068:51;;;;1078:40;1100:18;;;;1078:40;;;625:8884;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2575:18:9;625:8884:73;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;2575:18:9;625:8884:73;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;3427:7;;;;;;625:8884;3427:18;;336:42:2;3417:29:73;;;;625:8884;;3417:29;2024:14:2;3417:29:73;;625:8884;3417:29;;625:8884;3417:29;;;;336:42:2;3417:29:73;;;;;;;;625:8884;3484:7;;;625:8884;2024:14:2;;;;;;;;;3543:24:73;3464:39;;;;:::i;:::-;3543:24;;:::i;:::-;3593:7;;;;:::i;:::-;625:8884;3632:13;;3613;3654:3;3632:13;;625:8884;;3628:24;;;;;3707:16;3689:38;625:8884;3707:16;;3501:1;3707:16;;:::i;3689:38::-;625:8884;3667:16;:13;;;:16;:::i;:::-;;625:8884;;2024:14:2;;3735:13:73;3427:7;3735:16;:13;;;:16;:::i;:::-;;:22;2024:14:2;3797:50:73;3803:25;:16;:13;;;:16;:::i;3797:50::-;3803:25;3769:16;:13;;;:16;:::i;:::-;;:25;2024:14:2;3860::73;;;;;3945:13;:29;:16;:13;;;:16;:::i;:::-;;:29;2024:14:2;3991:13:73;:29;:16;:13;;;:16;:::i;:::-;;:29;2024:14:2;3856:243:73;2024:14:2;3613:13:73;;3856:243;4053:13;:29;:16;:13;;;:16;:::i;:::-;;:29;2024:14:2;3856:243:73;;3628:24;;;;4133:42;3628:24;;4133:42;:::i;:::-;625:8884;;;4198:72;4221:37;3427:7;4198:72;;;3417:29;4198:72;;2867:4:48;3417:29:73;4198:72;;;;;;:::i;2024:14:2:-;3417:29:73;2024:14:2;;;;;625:8884:73;2024:14:2;;3417:29:73;;;;;:::i;:::-;625:8884;;3417:29;;;;625:8884;;;;;;;;;;;;2876:18:9;625:8884:73;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;2876:18:9;625:8884:73;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;2024:14:2;;625:8884:73;;;;;:::i;:::-;;;;2024:14:2;625:8884:73;;;;;;;;;;;;;;;;;;;;;;;;;660:18;625:8884;;;;;;;;;;;;;;;;;;;;;;3653:18:9;625:8884:73;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;3653:18:9;625:8884:73;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;2024:14:2;;625:8884:73;;;;;:::i;:::-;;;;2024:14:2;625:8884:73;;;;;;;;;;;;;;;;;;;;;;;8789:36;625:8884;;8789:36;:::i;:::-;8841;625:8884;;8841:36;:::i;:::-;625:8884;;:::i;:::-;2321:4:48;;;625:8884:73;;;;;;;;;:::i;:::-;9001:1;625:8884;;2321:4:48;;;;;;;;;;;8966:13:73;;;;625:8884;9109:16;8966:13;;8726:8;9009:16;625:8884;9170:42;8966:13;;:37;;;;9009:16;:::i;:::-;;2024:14:2;9040:13:73;;:16;:13;;:16;:::i;:::-;;:22;2024:14:2;8763:8:73;9078:16;:13;;:16;:::i;:::-;;2024:14:2;9109:13:73;:16;:::i;:::-;;:22;2024:14:2;9170:42:73;:::i;:::-;9235:17;;;;;:::i;:::-;336:42:2;9258:29:73;;;;625:8884;;2024:14:2;9258:29:73;;9274:4;625:8884;9258:29;;625:8884;2321:4:48;625:8884:73;2321:4:48;;2867;9258:29:73;;;;;336:42:2;9258:29:73;;;;;;;;2321:4:48;2867;9366:2:73;2867:4:48;;;625:8884:73;9314:5;2867:4:48;;;625:8884:73;9306:43;625:8884;9306:43;;;;;;;;;:::i;9366:2::-;9385:21;;336:42:2;2349:24:4;;;;625:8884:73;;2349:24:4;2024:14:2;2349:24:4;;625:8884:73;2349:24:4;;2867:4:48;625:8884:73;;;;2867:4:48;2349:24:4;;9258:29:73;2349:24:4;336:42:2;2349:24:4;;;;;;;;2321:4:48;9426:20:73;;9448:7;9493;9426:20;8726:8;9426:20;9448:7;:::i;:::-;8763:8;9471:20;9493:7;:::i;2349:24:4:-;;;;;:::i;:::-;625:8884:73;;2349:24:4;;;;9258:29:73;;;;;;:::i;:::-;625:8884;;9258:29;;;;625:8884;;;;;;;;;2321:4:48;625:8884:73;;;;;;;;;;;:::i;:::-;2321:4:48;;;;;;;;;625:8884:73;2321:4:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;625:8884:73;;;;;;;;;;;;3162:18:9;625:8884:73;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;3162:18:9;625:8884:73;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;3346:26:9;625:8884:73;;;;:::i;:::-;;;;;;;:::i;:::-;;;;3346:26:9;625:8884:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;2024:14:2;;625:8884:73;;;;;:::i;:::-;;;;2024:14:2;625:8884:73;;;;;;;;;;;;;;;;;;;:::i;:::-;2333:7;;;;;;625:8884;2333:18;;336:42:2;2323:29:73;;;;625:8884;;2323:29;2024:14:2;2323:29:73;;625:8884;2323:29;;625:8884;2323:29;;;;336:42:2;2323:29:73;;;;;;;;625:8884;2390:7;;;625:8884;2024:14:2;;;;;;;;;2449:24:73;2370:39;;;;:::i;2449:24::-;2499:7;;;;:::i;:::-;625:8884;2538:13;;;2519;2560:3;2538:13;;625:8884;;2534:24;;;;;625:8884;2613:16;;2595:38;2613:16;;:::i;2595:38::-;625:8884;2573:16;:13;;;:16;:::i;:::-;;625:8884;;2024:14:2;;2641:13:73;2333:7;2641:16;:13;;;:16;:::i;:::-;;:22;2024:14:2;2675:13:73;:29;:16;:13;;;:16;:::i;:::-;;:29;2024:14:2;2725::73;;;;;2834:25;:16;:13;;;:16;:::i;:::-;;:25;2024:14:2;2861:9:73;2657:4:48;2407:1:73;2657:4:48;;;;;;;2024:14:2;2407:1:73;2828:66;;2933:19:15;2828:66:73;2933:19:15;:::i;:::-;625:8884:73;;;;9786:54:15;625:8884:73;;;;;;:::i;:::-;;2867:4:48;;625:8884:73;2333:7;625:8884;;;;;9786:54:15;;;2333:7:73;9786:54:15;;;;;;2323:29:73;9786:54:15;;625:8884:73;;;;;;:::i;:::-;;;;;2867:4:48;9786:54:15;;;;;;;;:::i;:::-;625:8884:73;9371:159:15;679:42;9371:159;;;2834:25:73;2904:16;:13;;;:16;:::i;:::-;;:25;2024:14:2;2950:13:73;:29;:16;:13;;;:16;:::i;:::-;;:29;2024:14:2;2721:427:73;2024:14:2;2519:13:73;;2657:4:48;2323:29:73;2024:14:2;;;;;625:8884:73;2024:14:2;;2721:427:73;3095:13;3089:50;3095:25;:16;2407:1;3095:13;;;:16;:::i;3089:50::-;3095:25;3061:16;:13;;;:16;:::i;:::-;;:25;2024:14:2;2721:427:73;;2534:24;;3182:42;2534:24;3182:42;:::i;:::-;336::2;3231:17:73;;;;625:8884;;;2024:14:2;3231:17:73;;;;625:8884;3231:17;;336:42:2;3231:17:73;;;;;;;;2867:4:48;;3311:2:73;2867:4:48;625:8884:73;3275:5;2867:4:48;;;625:8884:73;3267:27;2333:7;3267:27;;;;;;;;;:::i;3231:17::-;;;;;;:::i;:::-;625:8884;;3231:17;;;2323:29;;;;;:::i;:::-;625:8884;;2323:29;;;;625:8884;;;;;;;;;;;;;;;;;3501:18:9;625:8884:73;;;;;;;3501:18:9;625:8884:73;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3794:16:9;625:8884:73;;;;;;;3794:16:9;625:8884:73;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4455:7;;;;;;;625:8884;4455:18;;336:42:2;4445:29:73;;;;625:8884;;4445:29;2024:14:2;4445:29:73;;625:8884;4445:29;;625:8884;4445:29;;;;336:42:2;4445:29:73;;;;;;;;;;;625:8884;4512:7;;;625:8884;2024:14:2;;;;;;;;;4571:24:73;4492:39;;;;:::i;4571:24::-;4621:7;;;;:::i;:::-;625:8884;4660:13;;4641;4682:3;4660:13;;625:8884;;;4656:24;;;;;4717:38;625:8884;4735:16;;4529:1;4735:16;;:::i;4717:38::-;625:8884;4695:16;:13;;;:16;:::i;:::-;;625:8884;;2024:14:2;;4763:13:73;4455:7;4763:16;:13;;;:16;:::i;:::-;;:22;2024:14:2;4797:13:73;:29;:16;:13;;;:16;:::i;:::-;;:29;2024:14:2;4870:50:73;4876:25;:16;:13;;;:16;:::i;4870:50::-;4876:25;4842:16;:13;;;:16;:::i;:::-;;:25;2024:14:2;4933::73;;;4929:150;;4682:3;2024:14:2;4641:13:73;;4929:150;4959:13;:32;:16;:13;;;:16;:::i;:::-;;:32;2024:14:2;5033:13:73;:29;:16;:13;;;:16;:::i;:::-;;:29;2024:14:2;4929:150:73;;4656:24;;;5178:40;5113:42;;;:::i;:::-;2867:4:48;625:8884:73;5211:5;2867:4:48;;;625:8884:73;5178:40;;:::i;:::-;625:8884;;;5302:54;4455:7;5302:54;;;;;;4445:29;5302:54;;2867:4:48;;;;;;;;;625:8884:73;2867:4:48;625:8884:73;;;2867:4:48;;;;5302:54:73;625:8884;5380:24;:13;;;:24;:::i;:::-;;2024:14:2;625:8884:73;;5409:24;:13;;;:24;:::i;:::-;;:29;;5362:89;336:42:2;5362:89:73;;;;625:8884;;;;5362:89;625:8884;;5362:89;;;;;2024:14:2;5362:89:73;;625:8884;5362:89;;;:::i;:::-;;;;336:42:2;5362:89:73;;;;;;;;;;;4636:449;5490:37;;336:42:2;5490:37:73;;;;625:8884;;2024:14:2;5490:37:73;;;;;;625:8884;5490:37;;2867:4:48;7499:1:73;2867:4:48;;;;625:8884:73;;;;2867:4:48;;;;625:8884:73;2867:4:48;;;;625:8884:73;2867:4:48;625:8884:73;2867:4:48;5490:37:73;;;;336:42:2;5490:37:73;;;;;;;;;;;4636:449;625:8884;;5538:41;;625:8884;;;5538:41;;;;;;;:::i;:::-;;;;4529:1;2657:4:48;;;;;;;;5651:25:73;5704:3;5682:13;;625:8884;5678:24;;;;;336:42:2;5717:37:73;;;;625:8884;;2024:14:2;5717:37:73;;;;;;625:8884;5717:37;;2867:4:48;7499:1:73;2867:4:48;;;;625:8884:73;;;;2867:4:48;;;;625:8884:73;2867:4:48;;;;625:8884:73;2867:4:48;625:8884:73;2867:4:48;5717:37:73;;;;336:42:2;5717:37:73;;;;;;;;;;;;5704:3;2657:4:48;;;;5766:18:73;;;:52;;;;5704:3;5762:225;;;625:8884;5844:16;:13;;;:16;:::i;:::-;;2024:14:2;625:8884:73;;5865:16;:13;;;:16;:::i;:::-;;:21;;5830:57;336:42:2;5830:57:73;;;;;625:8884;;;;;5830:57;;;;;2024:14:2;5830:57:73;;625:8884;5830:57;;;:::i;:::-;;;;336:42:2;5830:57:73;;;;;;;;;;;5762:225;625:8884;;4529:1;625:8884;5902:24;625:8884;;;2867:4:48;;;2657;4455:7:73;2657:4:48;;2867;5902:24:73;5762:225;2024:14:2;5651:25:73;;5830:57;;;;;:::i;:::-;625:8884;;5830:57;;;;;625:8884;;;;;;;;;5830:57;625:8884;;;5762:225;4529:1;625:8884;5956:22;625:8884;;;2867:4:48;;;2657;4455:7:73;2657:4:48;;2867;5956:22:73;5762:225;;5766:52;5789:13;:29;:16;:13;;;:16;:::i;:::-;;:29;2657:4:48;625:8884:73;5766:52;;2657:4:48;4445:29:73;2024:14:2;;;;;625:8884:73;2024:14:2;;5717:37:73;;;;;;;;:::i;:::-;625:8884;;5717:37;;;;;5678:24;;6056:2;5678:24;;;625:8884;5211:5;2867:4:48;;;625:8884:73;6012:27;4455:7;6012:27;;;;;;;;;:::i;5490:37::-;;;;;:::i;:::-;625:8884;;5490:37;;;;5362:89;;;;;:::i;:::-;625:8884;;5362:89;;;;4445:29;;;;;:::i;:::-;625:8884;;4445:29;;;;625:8884;;;;;;;;;;;;3948:19:9;625:8884:73;;;;:::i;:::-;;;;;;;:::i;:::-;;;;3948:19:9;625:8884:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;2024:14:2;;625:8884:73;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2024:14:2;625:8884:73;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;7425:7;;;;;625:8884;7425:18;;336:42:2;7415:29:73;;;;625:8884;;7415:29;2024:14:2;7415:29:73;;625:8884;7415:29;;625:8884;7415:29;;;;336:42:2;7415:29:73;;;;;;;;625:8884;7482:7;;625:8884;2024:14:2;;;;;;;;;7462:39:73;;;7541:24;7462:39;;:::i;7541:24::-;7591:7;;;;:::i;:::-;625:8884;7630:13;;;7611;7652:3;7630:13;;625:8884;;7626:24;;;;;7705:16;7687:38;625:8884;7705:16;;7499:1;7705:16;;:::i;7687:38::-;625:8884;7665:16;:13;;;:16;:::i;:::-;;625:8884;;2024:14:2;;7733:13:73;7425:7;7733:16;:13;;;:16;:::i;:::-;;:22;2024:14:2;7767:13:73;:29;:16;:13;;;:16;:::i;:::-;;:29;2024:14:2;7840:50:73;7846:25;:16;:13;;;:16;:::i;7840:50::-;7846:25;7812:16;:13;;;:16;:::i;:::-;;:25;2024:14:2;7903::73;;;7899:152;;7652:3;2024:14:2;7611:13:73;;7899:152;2867:4:48;7929:32:73;:16;:13;;;:16;:::i;:::-;;:32;2024:14:2;8005:13:73;:29;:16;:13;;;:16;:::i;:::-;;:29;2024:14:2;7899:152:73;;7626:24;;;;;;8150:40;8085:42;;;:::i;8150:40::-;625:8884;;;8274:54;;7425:7;8274:54;;;;;;7415:29;8274:54;;2867:4:48;;;;;;;;;625:8884:73;2867:4:48;625:8884:73;;;2867:4:48;;;;8274:54:73;625:8884;8381:24;8352:13;625:8884;8352:24;:13;;;:24;:::i;8381:::-;;:29;;8334:89;336:42:2;8334:89:73;;;;625:8884;;;;8334:89;625:8884;;8334:89;;;;;2024:14:2;8334:89:73;;625:8884;8334:89;;;:::i;:::-;;;;336:42:2;8334:89:73;;;;;;;;;;;7606:451;8460:37;;336:42:2;8460:37:73;;;;625:8884;;2024:14:2;8460:37:73;;;;;;625:8884;8460:37;;2867:4:48;7499:1:73;2867:4:48;;;;625:8884:73;;;;2867:4:48;;;;625:8884:73;2867:4:48;;;;625:8884:73;2867:4:48;625:8884:73;2867:4:48;8460:37:73;;;;336:42:2;8460:37:73;;;;;;;;7606:451;625:8884;8614:2;625:8884;;;;8508:42;;625:8884;;;8508:42;;;;;:::i;:::-;;;;625:8884;8183:5;2867:4:48;;;625:8884:73;8570:27;7425:7;8570:27;;;;;;;;;:::i;8460:37::-;;;;;;;;;:::i;:::-;625:8884;;8460:37;;;;;;8334:89;;;;;:::i;:::-;625:8884;;8334:89;;;;7415:29;;;;;;;;:::i;:::-;;;;;625:8884;;;;;;;;;;;;;;;;;3018:16:9;625:8884:73;;;;;;;3018:16:9;625:8884:73;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;979:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;625:8884;;971:19;625:8884;;;;;;;;971:19;625:8884;;;979:11;625:8884;;;;;;;;;;;979:11;625:8884;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;625:8884:73;;;;;-1:-1:-1;625:8884:73;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;625:8884:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;625:8884:73;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;625:8884:73;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;625:8884:73;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2024:14:2;;;;;;;;;;:::o;:::-;;;;;;;;;;;625:8884:73;;2024:14:2;;;;;;:::o;:::-;;625:8884:73;2024:14:2;;;;;625:8884:73;2024:14:2;;625:8884:73;;9092:1;2024:14:2;;;;;;;:::o;:::-;625:8884:73;;2024:14:2;;;;;;;;;;;;:::o;2867:4:48:-;;;;625:8884:73;2867:4:48;;;625:8884:73;;;2867:4:48;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;625:8884:73;;;;;;;:::i;:::-;2867:4:48;;;-1:-1:-1;2867:4:48;;;;:::o;:::-;625:8884:73;2867:4:48;:::o;625:8884:73:-;;;;;-1:-1:-1;625:8884:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;;;-1:-1:-1;625:8884:73;;;;;-1:-1:-1;625:8884:73;;-1:-1:-1;625:8884:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2657:4:48;;;;;;;;;;:::o;:::-;;;625:8884:73;2657:4:48;;;625:8884:73;;;2657:4:48;;;;;;;;:::i;625:8884:73:-;;;;;;;;;;;;;;;;-1:-1:-1;625:8884:73;;-1:-1:-1;625:8884:73;;-1:-1:-1;625:8884:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2024:14:2;625:8884:73;;;;;;;;2024:14:2;625:8884:73;;2024:14:2;625:8884:73;2024:14:2;;;;625:8884:73;;;;;;;;2024:14:2;625:8884:73;;2024:14:2;625:8884:73;2024:14:2;625:8884:73;2024:14:2;;625:8884:73;;;;;;;;2024:14:2;625:8884:73;;2024:14:2;625:8884:73;2024:14:2;625:8884:73;2024:14:2;;625:8884:73;;;;;;;;2024:14:2;625:8884:73;;2024:14:2;625:8884:73;2024:14:2;625:8884:73;2024:14:2;;625:8884:73;;;;;;;;2024:14:2;625:8884:73;;2024:14:2;625:8884:73;2024:14:2;625:8884:73;2024:14:2;;625:8884:73;;;;;;;;2024:14:2;625:8884:73;;2024:14:2;625:8884:73;2024:14:2;625:8884:73;2024:14:2;;625:8884:73;;;;;;;;2024:14:2;625:8884:73;;2024:14:2;625:8884:73;2024:14:2;;;625:8884:73;;;;;;;;;;;;;;;;;;;;2024:14:2;;;;625:8884:73;;;2024:14:2;;625:8884:73;2024:14:2;;625:8884:73;;;;2024:14:2;;625:8884:73;2024:14:2;;625:8884:73;;;;2024:14:2;;625:8884:73;2024:14:2;;625:8884:73;;;;2024:14:2;;625:8884:73;2024:14:2;;625:8884:73;;;;2024:14:2;;625:8884:73;2024:14:2;;625:8884:73;;;;2024:14:2;;625:8884:73;2024:14:2;;625:8884:73;;;;2024:14:2;;625:8884:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;625:8884:73;;-1:-1:-1;625:8884:73;;;;;;;;;-1:-1:-1;625:8884:73;;;;-1:-1:-1;625:8884:73;;;;;;;;;-1:-1:-1;625:8884:73;;;;-1:-1:-1;625:8884:73;;;;;;:::o;1243:204:4:-;1302:7;625:8884:73;;;;;;;1325:14:4;:::o;1298:143::-;625:8884:73;;;2024:14:2;1377:39:4;;625:8884:73;1377:39:4;;;625:8884:73;192:59:4;;;;2867:4:48;192:59:4;1377:39;;;625:8884:73;1377:39:4;;;;;;;625:8884:73;1377:39:4;;;1298:143;1377:53;;;1370:60;:::o;1377:39::-;;;192:59;1377:39;;192:59;1377:39;;;;;;192:59;1377:39;;;:::i;:::-;;;192:59;;;;;1377:39;;;;;;-1:-1:-1;1377:39:4;;;625:8884:73;;;;;;;;;2763:4:48;;;;625:8884:73;2763:4:48;;625:8884:73;2763:4:48;;;;;;625:8884:73;;2763:4:48;;;625:8884:73;2763:4:48;;;;;;;;;;625:8884:73;;;;;;;;2763:4:48;;625:8884:73;2763:4:48;;;;;;625:8884:73;;2763:4:48;;;;;;;;;;;;;;;;;;;;;;;2867;2763;;;;;;;2867;2763;;;;;;;;;;;;:::i;:::-;;;;;;;;;2867;2763;;;;;;;2867;2763;;;;;;;;;;;625:8884:73;;;;;;;;;;2763:4:48;;;;;;;;;;;;:::o;:::-;;;625:8884:73;;;;2763:4:48;625:8884:73;;;;;;;;2763:4:48;;;;;;;;;;;;;;;;;;;;;;;625:8884:73;2763:4:48;;625:8884:73;;;2763:4:48;;;;;;;2867;2763;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;2867;2763;;;;625:8884:73;;2763:4:48;;;625:8884:73;2763:4:48;;;;625:8884:73;;2763:4:48;;;625:8884:73;2763:4:48;;;;2867;625:8884:73;;2763:4:48;;;;;;;;;2815:199:15;;625:8884:73;2933:19:15;2815:199;2933:19;:::i;:::-;2867:4:48;625:8884:73;;;;9786:54:15;625:8884:73;;;;;;:::i;:::-;;;;;2867:4:48;9786:54:15;;;;;;;;:::i;:::-;625:8884:73;9371:159:15;679:42;9371:159;;;2815:199::o;:::-;7876:13:73;625:8884;2933:19:15;2815:199;2933:19;:::i;2815:199::-;625:8884:73;;2933:19:15;2815:199;2933:19;:::i;2815:199::-;1563:1:73;625:8884;2933:19:15;2815:199;2933:19;:::i;421:202:73:-;;625:8884;582:7;625:8884;;:::i;:::-;2321:4:48;2657;2321;;571:7:73;;;;561;;;:17;625:8884;561:7;592;;625:8884;;582:7;;;2024:14:2;613:7:73;625:8884;;603:7;;;2024:14:2;421:202:73:o;398:649:98:-;2933:19:15;625:8884:73;-1:-1:-1;625:8884:73;;;;2933:19:15;:::i;:::-;625:8884:73;;;-1:-1:-1;625:8884:73;;;;;;;:::i;:::-;;2867:4:48;;625:8884:73;;;;;;;9786:54:15;;625:8884:73;;9786:54:15;;;;;;;;;;625:8884:73;;;;;;:::i;9786:54:15:-;625:8884:73;9371:159:15;679:42;9371:159;;;625:8884:73;2321:4:48;;;580:42:98;576:467;;398:649;;:::o;576:467::-;655:14;;;2933:19:15;625:8884:73;-1:-1:-1;2024:14:2;;2933:19:15;:::i;:::-;625:8884:73;-1:-1:-1;625:8884:73;;;;;;;:::i;:::-;;2867:4:48;;625:8884:73;;;;;;;9786:54:15;;625:8884:73;;9786:54:15;;;;;;;;;;625:8884:73;;;;;;:::i;9786:54:15:-;625:8884:73;9371:159:15;679:42;9371:159;;;2024:14:2;723::98;;;2933:19:15;625:8884:73;-1:-1:-1;2024:14:2;;2933:19:15;:::i;:::-;625:8884:73;-1:-1:-1;625:8884:73;;;;;;;:::i;:::-;;2867:4:48;;625:8884:73;;;;;;;9786:54:15;;625:8884:73;;9786:54:15;;;;;;;;;;625:8884:73;;;;;;:::i;9786:54:15:-;625:8884:73;9371:159:15;679:42;9371:159;;;2024:14:2;-1:-1:-1;815:3:98;792:14;;;;;;625:8884:73;;;788:25:98;;;;;883:33;830:17;883;866:162;883:17;;;2024:14:2;883:17:98;;:::i;866:162::-;830:14;;:17;:::i;:::-;;:33;2024:14:2;;773:13:98;;788:25;;;;;;398:649::o;1526:548::-;625:8884:73;;;1835:1:98;1813:23;;;:53;;;1798:249;1812:80;;;;1798:249;1812:105;;;;1798:249;1812:142;;;;1798:249;1812:142;;;625:8884:73;;;;;2015:21:98;;;625:8884:73;;;2015:21:98;;;;625:8884:73;2015:21:98;;:::i;:::-;625:8884:73;2005:32:98;;625:8884:73;1798:249:98;;1812:142;;1526:548;:::o;1812:142::-;1929:21;;;:25;;1812:142;;:105;1896:21;1748:42;1896:21;;1812:105;;:80;1871:21;1672:42;1871:21;;1812:80;;1813:53;1840:26;1862:4;1840:26;;;1813:53;;625:8884:73;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3035:310:97:-;;-1:-1:-1;625:8884:73;3205:20:97;625:8884:73;3035:310:97;625:8884:73;;3205:20:97;;;;;;;625:8884:73;;;;;;:::i;3205:20:97:-;625:8884:73;;3192:34:97;;;;2024:14:2;3192:34:97;;3205:20;3192:34;;;625:8884:73;;;;;;:::i;:::-;3192:34:97;;625:8884:73;3192:34:97;;;;;;;-1:-1:-1;3192:34:97;;;3035:310;625:8884:73;;;;;;;;;3205:20:97;625:8884:73;;;;;;;;3205:20:97;625:8884:73;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;2024:14:2;798:35:97;;3205:20;3192:34;798:35;;625:8884:73;;;;;;;;;;;3205:20:97;798:35;;;625:8884:73;798:35:97;;;;;;;-1:-1:-1;798:35:97;;;3035:310;625:8884:73;;;866:35:97;2024:14:2;866:35:97;;3205:20;3192:34;866:35;;625:8884:73;;;;;;;;;;;3205:20:97;866:35;798;866;625:8884:73;866:35:97;;;;;;;-1:-1:-1;866:35:97;;;3035:310;916:18;;;;625:8884:73;;285:44:97;462:50;1037:32;;1033:109;;3035:310;232:1;;;;;;;1278:17;232:1;;644:49;;285:44;644:49;1278:17;:::i;:::-;2657:4:48;232:1:97;2657:4:48;;;;;;;1326:27:97;1337:15;;;;:::i;:::-;1326:27;;:::i;:::-;625:8884:73;;1383:39:97;2024:14:2;1383:39:97;;3205:20;3192:34;1383:39;;232:1;;625:8884:73;232:1:97;;625:8884:73;232:1:97;625:8884:73;;;232:1:97;-1:-1:-1;1383:39:97;798:35;1383:39;625:8884:73;1383:39:97;;;;;;;-1:-1:-1;1383:39:97;;;3035:310;625:8884:73;;;2024:14:2;1451:39:97;;3205:20;3192:34;1451:39;;232:1;;625:8884:73;232:1:97;;625:8884:73;232:1:97;625:8884:73;;;232:1:97;-1:-1:-1;1451:39:97;798:35;1451:39;625:8884:73;1451:39:97;;;;;;;-1:-1:-1;1451:39:97;;;3035:310;625:8884:73;;;1526:24:97;2024:14:2;1526:24:97;;3192:34;1526:24;;2867:4:48;-1:-1:-1;1526:24:97;625:8884:73;1526:24:97;625:8884:73;1526:24:97;;;;;;625:8884:73;1526:24:97;-1:-1:-1;1526:24:97;625:8884:73;1526:24:97;;;;;3035:310;625:8884:73;232:1:97;625:8884:73;3205:20:97;625:8884:73;;;;;;;;;;;;;232:1:97;;;;;;625:8884:73;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;232:1:97;3205:20;232:1;;;;;;:::i;:::-;625:8884:73;;3266:48:97;;;;;2024:14:2;3266:48:97;;625:8884:73;3192:34:97;3266:48;;625:8884:73;798:35:97;625:8884:73;;;;:::i;:::-;;;;;;;;;;;;;;;;3205:20:97;625:8884:73;;;;;;;;;;;:::i;:::-;3266:48:97;;;625:8884:73;3266:48:97;;;;;;;-1:-1:-1;3266:48:97;;;3320:20;3035:310::o;3266:48::-;;;;;;;;;;:::i;:::-;;;625:8884:73;3205:20:97;625:8884:73;;;;;;;;;;;;;;;;;;;;;;;;;;;3205:20:97;625:8884:73;;;;;:::i;1526:24:97:-;625:8884:73;1526:24:97;;;3205:20;1526:24;232:1;1526:24;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;1451:39;;;;;;-1:-1:-1;1451:39:97;;;;;;:::i;:::-;;;;1383;;;;;;;-1:-1:-1;1383:39:97;;;;;;:::i;:::-;;;;;1033:109;625:8884:73;;;3205:20:97;1107:26;;1124:8;;-1:-1:-1;625:8884:73;;1107:26:97;3205:20;1124:8;;625:8884:73;;-1:-1:-1;625:8884:73;;;;1107:26:97;;3205:20;1107:26;;;;;;:::i;:::-;625:8884:73;1097:37:97;;1033:109;;625:8884:73;798:35:97;625:8884:73;;;;;3205:20:97;3192:34;625:8884:73;;;;;;;;;;;;;;866:35:97;;;3205:20;866:35;;3205:20;866:35;;;;;;625:8884:73;866:35:97;;;:::i;:::-;;;625:8884:73;;;;;;866:35:97;;;;;;;-1:-1:-1;866:35:97;;798;;3205:20;798:35;;3205:20;798:35;;;;;;625:8884:73;798:35:97;;;:::i;:::-;;;625:8884:73;;;;;;798:35:97;;;;;;-1:-1:-1;798:35:97;;3192:34;;;;;;;-1:-1:-1;3192:34:97;;;;;;:::i;:::-;;;;;9842:280:48;9972:18;;;2657:4;9842:280;;10027:18;;625:8884:73;1206:48:48;;-1:-1:-1;1206:48:48;;625:8884:73;;;1077:202:48;9972:18;1077:202;;2867:4;539:66;2867:4;;709:66;625:8884:73;868:66:48;;2867:4;868:66;;;;2867:4;868:66;;;2867:4;625:8884:73;868:66:48;;;625:8884:73;868:66:48;1077:202;;;;;;:::i;:::-;625:8884:73;1060:225:48;;10027:18;;:::i;:::-;625:8884:73;;10068:48:48;9972:18;10068:48;;625:8884:73;;;;;;;2867:4:48;625:8884:73;;;2867:4:48;625:8884:73;10068:48:48;;;;;;:::i;:::-;625:8884:73;10058:59:48;;9842:280;:::o;1206:48::-;1240:13;1206:48;;;1594:89:4;625:8884:73;1657:19:4;;;;625:8884:73;;1657:19:4;2024:14:2;1657:19:4;;625:8884:73;;1657:19:4;;;625:8884:73;-1:-1:-1;1657:19:4;;;625:8884:73;1657:19:4;;;;;;;;1594:89;:::o;1657:19::-;-1:-1:-1;1657:19:4;;;:::i;2270:110::-;;625:8884:73;2349:24:4;;;;625:8884:73;;2349:24:4;2024:14:2;2349:24:4;;;;;2867:4:48;625:8884:73;;;2867:4:48;-1:-1:-1;2349:24:4;;;625:8884:73;2349:24:4;;;;;;;;2270:110;:::o;1042:78:15:-;;;;;;;:::o;:::-;;;;;;;;;;1546:1263;625:8884:73;1664:10:15;;;;625:8884:73;;1970:8:15;;;;;;:20;;;1546:1263;1966:34;;2026:9;;;;:::i;:::-;2657:4:48;2038:1:15;2657:4:48;;;;;;;2234:1:15;2229:6;;;:18;;;1546:1263;2225:38;;2024:14:2;2277:20:15;;;:46;;;1546:1263;2273:82;;2455:7;;;;;;2493;;;;;2528:11;2493:7;;:::i;:::-;2528:11;:::i;:::-;2557:8;;;2553:24;;2600:9;;;;:::i;:::-;1042:78;2024:14:2;;;;;;;2451:352:15;1546:1263::o;2553:24::-;2567:10;;;:::o;2451:352::-;2630:173;;;;;;;;2451:352;;;;;1546:1263::o;2630:173::-;2672:7;;;;;;2707:11;2672:7;;;:::i;2707:11::-;2736:8;;;2732:24;;2779:9;;;;:::i;:::-;2038:1;2657:4:48;;;;;;;2630:173:15;;;;;;;2273:82;2024:14:2;;;;2332:23:15;2024:14:2;;;;2332:23:15;;:::i;2277:46::-;2024:14:2;;;2301:22:15;;2277:46;;2225:38;2256:7;;;;;;;;;:::i;2229:18::-;2239:8;;;;2229:18;;1966:34;1992:8;;;;;;:::o;1970:20::-;1982:8;;;;;1970:20;;625:8884:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;8278:1282:48;8416:22;;;;625:8884:73;;8399:40:48;;;;;625:8884:73;8399:40:48;625:8884:73;;;;;;;;;;;;;8399:40:48;;;;;;;;;;;;;:::i;:::-;625:8884:73;8389:51:48;;625:8884:73;;;;;8451:34:48;;8447:1109;625:8884:73;;;8525:14:48;;625:8884:73;8525:14:48;;;625:8884:73;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;:::i;:::-;;8399:40:48;;625:8884:73;;;;;;;;8164:3:48;625:8884:73;;8146:16:48;;;;;8202:8;;625:8884:73;8202:8:48;;;:::i;:::-;;625:8884:73;2024:14:2;;625:8884:73;7708:7:48;8399:40;7708:7;;2024:14:2;7727:6:48;625:8884:73;7727:6:48;;;8399:40;625:8884:73;;;;7717:17:48;7736:10;;;;2024:14:2;7748::48;;;2657:4;625:8884:73;;7764:14:48;7780:17;7764:14;;;2657:4;625:8884:73;;7780:17:48;;2024:14:2;625:8884:73;;;7667:138:48;8399:40;7667:138;;2867:4;1478:66;2867:4;;625:8884:73;1478:66:48;;625:8884:73;7736:10:48;1478:66;;2867:4;7748:14;1478:66;;2867:4;7764:14;1478:66;;2867:4;7780:17;1478:66;;625:8884:73;1478:66:48;;;625:8884:73;8416:22:48;1478:66;;2867:4;8416:22;7667:138;;;;;;:::i;:::-;625:8884:73;7650:161:48;;8177:34;;;;:::i;:::-;2024:14:2;;8131:13:48;;8146:16;;;;;;;625:8884:73;;8240:28:48;;8399:40;8240:28;;;;625:8884:73;;;;;;;;;;;;8240:28:48;;;;;;8399:40;8240:28;;;;;;:::i;:::-;625:8884:73;8230:39:48;;8750:14;7748;7736:10;8750:14;;2024::2;8766::48;;2024::2;625:8884:73;;8712:82:48;8399:40;8712:82;;2867:4;1799:66;2867:4;;625:8884:73;1799:66:48;;2867:4;7736:10;1799:66;;2867:4;7748:14;1799:66;;2867:4;7764:14;1799:66;;2867:4;7764:14;8712:82;;;7780:17;8712:82;;:::i;625:8884:73:-;;;2867:4:48;;8399:40;625:8884:73;;;;;;-1:-1:-1;625:8884:73;;;;;;;;8447:1109:48;625:8884:73;8812:29:48;;625:8884:73;;8998:16:48;;;;8399:40;625:8884:73;;;;8988:27:48;625:8884:73;;;8959:70:48;8399:40;8959:70;;2867:4;1979:66;2867:4;;625:8884:73;1979:66:48;;2867:4;1979:66;;;2867:4;1979:66;8959:70;;;;;;:::i;8808:748::-;2867:4;9047:35;;2867:4;;9216:18;;;1979:66;625:8884:73;;;9181:67:48;8399:40;9181:67;;2867:4;2174:66;2867:4;;625:8884:73;1979:66:48;;2867:4;1979:66;;;2867:4;1979:66;9181:67;;;;;;:::i;9043:513::-;2556:4;9266:28;;2556:4;;9443:15;;;1979:66;625:8884:73;;;9414:58:48;8399:40;9414:58;;2867:4;1979:66;2867:4;;625:8884:73;1979:66:48;;2867:4;1979:66;;;2867:4;1979:66;9414:58;;;;;;:::i;9262:294::-;9523:26;625:8884:73;9523:26:48;;2763:4;2482;625:8884:73;9523:26:48;625:8884:73;;;;;;;8399:40:48;625:8884:73;;;;;;-1:-1:-1;625:8884:73;;;;;;;","linkReferences":{}},"methodIdentifiers":{"IS_TEST()":"fa7626d4","excludeArtifacts()":"b5508aa9","excludeContracts()":"e20c9f71","excludeSelectors()":"b0464fdc","excludeSenders()":"1ed7831c","failed()":"ba414fa6","guest()":"9a04f704","setUp()":"0a9254e4","targetArtifactSelectors()":"66d9a9a0","targetArtifacts()":"85226c81","targetContracts()":"3f7286f4","targetInterfaces()":"2ade3880","targetSelectors()":"916a17c6","targetSenders()":"3e5e3c23","test_callFailsWithAbortBehavior((bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint160,uint56),uint256)":"25c71d57","test_callFailsWithIgnoreBehavior((bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint160,uint56),uint256)":"2cefdb98","test_callFailsWithRevertBehavior((bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint160,uint56),uint256)":"c5a48a0a","test_delegateCallNotAllowed((bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint160,uint56),uint256)":"b4973a1f","test_fallback((bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint160,uint56))":"c14cf832","test_forwardPayment(uint256,uint256)":"8efe7cce","test_notEnoughGas((bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint160,uint56),uint256)":"495500e1"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"}],\"name\":\"InvalidKind\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_returnData\",\"type\":\"bytes\"}],\"name\":\"CallAborted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_returnData\",\"type\":\"bytes\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"CallSkipped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"CallSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"IS_TEST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"excludedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"guest\",\"outputs\":[{\"internalType\":\"contract Guest\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setUp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifactSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"artifact\",\"type\":\"string\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzArtifactSelector[]\",\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"targetedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetInterfaces\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"artifacts\",\"type\":\"string[]\"}],\"internalType\":\"struct StdInvariant.FuzzInterface[]\",\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint160\",\"name\":\"space\",\"type\":\"uint160\"},{\"internalType\":\"uint56\",\"name\":\"nonce\",\"type\":\"uint56\"}],\"internalType\":\"struct GuestPayload\",\"name\":\"p\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"callIndex\",\"type\":\"uint256\"}],\"name\":\"test_callFailsWithAbortBehavior\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint160\",\"name\":\"space\",\"type\":\"uint160\"},{\"internalType\":\"uint56\",\"name\":\"nonce\",\"type\":\"uint56\"}],\"internalType\":\"struct GuestPayload\",\"name\":\"p\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"callIndex\",\"type\":\"uint256\"}],\"name\":\"test_callFailsWithIgnoreBehavior\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint160\",\"name\":\"space\",\"type\":\"uint160\"},{\"internalType\":\"uint56\",\"name\":\"nonce\",\"type\":\"uint56\"}],\"internalType\":\"struct GuestPayload\",\"name\":\"p\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"callIndex\",\"type\":\"uint256\"}],\"name\":\"test_callFailsWithRevertBehavior\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint160\",\"name\":\"space\",\"type\":\"uint160\"},{\"internalType\":\"uint56\",\"name\":\"nonce\",\"type\":\"uint56\"}],\"internalType\":\"struct GuestPayload\",\"name\":\"p\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"callIndex\",\"type\":\"uint256\"}],\"name\":\"test_delegateCallNotAllowed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint160\",\"name\":\"space\",\"type\":\"uint160\"},{\"internalType\":\"uint56\",\"name\":\"nonce\",\"type\":\"uint56\"}],\"internalType\":\"struct GuestPayload\",\"name\":\"p\",\"type\":\"tuple\"}],\"name\":\"test_fallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_value1\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_value2\",\"type\":\"uint256\"}],\"name\":\"test_forwardPayment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint160\",\"name\":\"space\",\"type\":\"uint160\"},{\"internalType\":\"uint56\",\"name\":\"nonce\",\"type\":\"uint56\"}],\"internalType\":\"struct GuestPayload\",\"name\":\"p\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"callIndex\",\"type\":\"uint256\"}],\"name\":\"test_notEnoughGas\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"InvalidKind(uint8)\":[{\"notice\":\"Error thrown when the kind is invalid\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/Guest.t.sol\":\"GuestTest\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/Guest.sol\":{\"keccak256\":\"0xfd8c9d325f3593965dbc65b7a6fb1fea452d65aeecaf06a328481694876bc60c\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://92180762cdd69f516afc3bebef61fc16273a670ab6a9e9deaa25a9f51e39bcad\",\"dweb:/ipfs/QmXD5iSjnBWdDGH8WcZVzkgaHZKiAg9QgR4raSQ5uRDa5i\"]},\"src/modules/Calls.sol\":{\"keccak256\":\"0xcd0d38d0fd248e4443032dede2b8892ea0ca7e55538cd54082830f6b98d8edb1\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://617bb6d0724b18f3d77347cc454a57c1c916a0818a592552bd7fa226aa41a306\",\"dweb:/ipfs/Qmeet85Ux6cKq9JmC25JnTzFnRrgDpkyRik2svZLWt4fov\"]},\"src/modules/Nonce.sol\":{\"keccak256\":\"0x56fbf6dc9b34ab60ae8a32ffb6f583c003bb8f4a5223ce704e982400fa403fab\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://492f53628633b862702cf8f9b726067a722c94028133a8a4c4fcf3d0e73ad803\",\"dweb:/ipfs/QmTHNy4XbH47YZaqKDpknb5aApjRH9HVAREHN7N5vEFWEV\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/Storage.sol\":{\"keccak256\":\"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da\",\"dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn\"]},\"src/modules/auth/BaseAuth.sol\":{\"keccak256\":\"0xbf2e40def03fcb5f4a5129b2f5803e21951325b92e00126cbe1427b7c25cfefd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://b560905fcc4b957d27c2abed78a1e82529c89fa472e91b3d108fbfd91aa7c3f7\",\"dweb:/ipfs/QmRjLLtTWE6dFX2kBQCgLz7ossfMxhAFgDC8Jx9XuGL6Wy\"]},\"src/modules/auth/BaseSig.sol\":{\"keccak256\":\"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8\",\"dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3\"]},\"src/modules/auth/SelfAuth.sol\":{\"keccak256\":\"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42\",\"dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W\"]},\"src/modules/interfaces/IAuth.sol\":{\"keccak256\":\"0xf6fa30af2ec91d5fbeac17c9b1f2aa73b7883c9ac98745605007e57666394b91\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://6e90a87978519462f9612f4a17e38fddc1c7bcf700ff834a1de7dce326f30353\",\"dweb:/ipfs/QmXmWAsRRK6t4jPs4VcXrouyokxdALM28D3odX7ub48WEp\"]},\"src/modules/interfaces/ICheckpointer.sol\":{\"keccak256\":\"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1\",\"dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t\"]},\"src/modules/interfaces/IDelegatedExtension.sol\":{\"keccak256\":\"0xa2ae897e90fd70dd4a9e172bc04d019ba9c512e72c2df65fcb6daf87dd5ceb90\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://cdf4b7c3dfb0aef6c9dbe8b2a0542018dc756ef2252d7101bcb3186192da0a11\",\"dweb:/ipfs/QmPHCVu1DJ7fBrPBYA5y3hoF3a3XFEBwYCZ1ErGaxPhcYL\"]},\"src/modules/interfaces/IERC1271.sol\":{\"keccak256\":\"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b\",\"dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF\"]},\"src/modules/interfaces/IPartialAuth.sol\":{\"keccak256\":\"0x0d1aa021615d8e90696e71a9468331457a1babfa2ffe169654b7456e5bcb7a73\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://bbacd149a6358ab0d4b9c588d2e3a55fc71ed4723269150d7b91ca70092f6519\",\"dweb:/ipfs/QmUSwtrYCrRcRFsy5rCzdMPrw1FCU7ZoeXdsW6kK9yc8FK\"]},\"src/modules/interfaces/ISapient.sol\":{\"keccak256\":\"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489\",\"dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"src/utils/LibOptim.sol\":{\"keccak256\":\"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81\",\"dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x\"]},\"test/Guest.t.sol\":{\"keccak256\":\"0x8ff3b5a243d72d079c2718f6383519ee3bfb411f3a48607b54f5fda084bf999b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a62d955294d18653e53ec6073d09635b5aa527d138081aca7fc71808b36768c2\",\"dweb:/ipfs/QmeqBJU7BGhonqYyxvgufKxnCnDWakeLGz7Fxafic7QfpT\"]},\"test/utils/PrimitivesRPC.sol\":{\"keccak256\":\"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe\",\"dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv\"]},\"test/utils/TestUtils.sol\":{\"keccak256\":\"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad\",\"dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint8","name":"kind","type":"uint8"}],"type":"error","name":"InvalidKind"},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_index","type":"uint256","indexed":false},{"internalType":"bytes","name":"_returnData","type":"bytes","indexed":false}],"type":"event","name":"CallAborted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_index","type":"uint256","indexed":false},{"internalType":"bytes","name":"_returnData","type":"bytes","indexed":false}],"type":"event","name":"CallFailed","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_index","type":"uint256","indexed":false}],"type":"event","name":"CallSkipped","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_index","type":"uint256","indexed":false}],"type":"event","name":"CallSucceeded","anonymous":false},{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log","anonymous":false},{"inputs":[{"internalType":"address","name":"","type":"address","indexed":false}],"type":"event","name":"log_address","anonymous":false},{"inputs":[{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"log_bytes","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32","indexed":false}],"type":"event","name":"log_bytes32","anonymous":false},{"inputs":[{"internalType":"int256","name":"","type":"int256","indexed":false}],"type":"event","name":"log_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address","name":"val","type":"address","indexed":false}],"type":"event","name":"log_named_address","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes","name":"val","type":"bytes","indexed":false}],"type":"event","name":"log_named_bytes","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes32","name":"val","type":"bytes32","indexed":false}],"type":"event","name":"log_named_bytes32","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false}],"type":"event","name":"log_named_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"string","name":"val","type":"string","indexed":false}],"type":"event","name":"log_named_string","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false}],"type":"event","name":"log_named_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log_string","anonymous":false},{"inputs":[{"internalType":"uint256","name":"","type":"uint256","indexed":false}],"type":"event","name":"log_uint","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"logs","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"IS_TEST","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeArtifacts","outputs":[{"internalType":"string[]","name":"excludedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeContracts","outputs":[{"internalType":"address[]","name":"excludedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"excludedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSenders","outputs":[{"internalType":"address[]","name":"excludedSenders_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"failed","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"guest","outputs":[{"internalType":"contract Guest","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"setUp"},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifactSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzArtifactSelector[]","name":"targetedArtifactSelectors_","type":"tuple[]","components":[{"internalType":"string","name":"artifact","type":"string"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifacts","outputs":[{"internalType":"string[]","name":"targetedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetContracts","outputs":[{"internalType":"address[]","name":"targetedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetInterfaces","outputs":[{"internalType":"struct StdInvariant.FuzzInterface[]","name":"targetedInterfaces_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"string[]","name":"artifacts","type":"string[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"targetedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSenders","outputs":[{"internalType":"address[]","name":"targetedSenders_","type":"address[]"}]},{"inputs":[{"internalType":"struct GuestPayload","name":"p","type":"tuple","components":[{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint160","name":"space","type":"uint160"},{"internalType":"uint56","name":"nonce","type":"uint56"}]},{"internalType":"uint256","name":"callIndex","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"test_callFailsWithAbortBehavior"},{"inputs":[{"internalType":"struct GuestPayload","name":"p","type":"tuple","components":[{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint160","name":"space","type":"uint160"},{"internalType":"uint56","name":"nonce","type":"uint56"}]},{"internalType":"uint256","name":"callIndex","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"test_callFailsWithIgnoreBehavior"},{"inputs":[{"internalType":"struct GuestPayload","name":"p","type":"tuple","components":[{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint160","name":"space","type":"uint160"},{"internalType":"uint56","name":"nonce","type":"uint56"}]},{"internalType":"uint256","name":"callIndex","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"test_callFailsWithRevertBehavior"},{"inputs":[{"internalType":"struct GuestPayload","name":"p","type":"tuple","components":[{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint160","name":"space","type":"uint160"},{"internalType":"uint56","name":"nonce","type":"uint56"}]},{"internalType":"uint256","name":"callIndex","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"test_delegateCallNotAllowed"},{"inputs":[{"internalType":"struct GuestPayload","name":"p","type":"tuple","components":[{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint160","name":"space","type":"uint160"},{"internalType":"uint56","name":"nonce","type":"uint56"}]}],"stateMutability":"nonpayable","type":"function","name":"test_fallback"},{"inputs":[{"internalType":"uint256","name":"_value1","type":"uint256"},{"internalType":"uint256","name":"_value2","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"test_forwardPayment"},{"inputs":[{"internalType":"struct GuestPayload","name":"p","type":"tuple","components":[{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint160","name":"space","type":"uint160"},{"internalType":"uint56","name":"nonce","type":"uint56"}]},{"internalType":"uint256","name":"callIndex","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"test_notEnoughGas"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/Guest.t.sol":"GuestTest"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/Guest.sol":{"keccak256":"0xfd8c9d325f3593965dbc65b7a6fb1fea452d65aeecaf06a328481694876bc60c","urls":["bzz-raw://92180762cdd69f516afc3bebef61fc16273a670ab6a9e9deaa25a9f51e39bcad","dweb:/ipfs/QmXD5iSjnBWdDGH8WcZVzkgaHZKiAg9QgR4raSQ5uRDa5i"],"license":"Apache-2.0"},"src/modules/Calls.sol":{"keccak256":"0xcd0d38d0fd248e4443032dede2b8892ea0ca7e55538cd54082830f6b98d8edb1","urls":["bzz-raw://617bb6d0724b18f3d77347cc454a57c1c916a0818a592552bd7fa226aa41a306","dweb:/ipfs/Qmeet85Ux6cKq9JmC25JnTzFnRrgDpkyRik2svZLWt4fov"],"license":"Apache-2.0"},"src/modules/Nonce.sol":{"keccak256":"0x56fbf6dc9b34ab60ae8a32ffb6f583c003bb8f4a5223ce704e982400fa403fab","urls":["bzz-raw://492f53628633b862702cf8f9b726067a722c94028133a8a4c4fcf3d0e73ad803","dweb:/ipfs/QmTHNy4XbH47YZaqKDpknb5aApjRH9HVAREHN7N5vEFWEV"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/Storage.sol":{"keccak256":"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f","urls":["bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da","dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn"],"license":"Apache-2.0"},"src/modules/auth/BaseAuth.sol":{"keccak256":"0xbf2e40def03fcb5f4a5129b2f5803e21951325b92e00126cbe1427b7c25cfefd","urls":["bzz-raw://b560905fcc4b957d27c2abed78a1e82529c89fa472e91b3d108fbfd91aa7c3f7","dweb:/ipfs/QmRjLLtTWE6dFX2kBQCgLz7ossfMxhAFgDC8Jx9XuGL6Wy"],"license":"Apache-2.0"},"src/modules/auth/BaseSig.sol":{"keccak256":"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa","urls":["bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8","dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3"],"license":"Apache-2.0"},"src/modules/auth/SelfAuth.sol":{"keccak256":"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c","urls":["bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42","dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W"],"license":"Apache-2.0"},"src/modules/interfaces/IAuth.sol":{"keccak256":"0xf6fa30af2ec91d5fbeac17c9b1f2aa73b7883c9ac98745605007e57666394b91","urls":["bzz-raw://6e90a87978519462f9612f4a17e38fddc1c7bcf700ff834a1de7dce326f30353","dweb:/ipfs/QmXmWAsRRK6t4jPs4VcXrouyokxdALM28D3odX7ub48WEp"],"license":"Apache-2.0"},"src/modules/interfaces/ICheckpointer.sol":{"keccak256":"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513","urls":["bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1","dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t"],"license":"Apache-2.0"},"src/modules/interfaces/IDelegatedExtension.sol":{"keccak256":"0xa2ae897e90fd70dd4a9e172bc04d019ba9c512e72c2df65fcb6daf87dd5ceb90","urls":["bzz-raw://cdf4b7c3dfb0aef6c9dbe8b2a0542018dc756ef2252d7101bcb3186192da0a11","dweb:/ipfs/QmPHCVu1DJ7fBrPBYA5y3hoF3a3XFEBwYCZ1ErGaxPhcYL"],"license":"Apache-2.0"},"src/modules/interfaces/IERC1271.sol":{"keccak256":"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9","urls":["bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b","dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF"],"license":"Apache-2.0"},"src/modules/interfaces/IPartialAuth.sol":{"keccak256":"0x0d1aa021615d8e90696e71a9468331457a1babfa2ffe169654b7456e5bcb7a73","urls":["bzz-raw://bbacd149a6358ab0d4b9c588d2e3a55fc71ed4723269150d7b91ca70092f6519","dweb:/ipfs/QmUSwtrYCrRcRFsy5rCzdMPrw1FCU7ZoeXdsW6kK9yc8FK"],"license":"Apache-2.0"},"src/modules/interfaces/ISapient.sol":{"keccak256":"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359","urls":["bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489","dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"src/utils/LibOptim.sol":{"keccak256":"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde","urls":["bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81","dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x"],"license":"Apache-2.0"},"test/Guest.t.sol":{"keccak256":"0x8ff3b5a243d72d079c2718f6383519ee3bfb411f3a48607b54f5fda084bf999b","urls":["bzz-raw://a62d955294d18653e53ec6073d09635b5aa527d138081aca7fc71808b36768c2","dweb:/ipfs/QmeqBJU7BGhonqYyxvgufKxnCnDWakeLGz7Fxafic7QfpT"],"license":"Apache-2.0"},"test/utils/PrimitivesRPC.sol":{"keccak256":"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe","urls":["bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe","dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv"],"license":"Apache-2.0"},"test/utils/TestUtils.sol":{"keccak256":"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79","urls":["bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad","dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa"],"license":"Apache-2.0"}},"version":1},"id":73} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Hooks.sol/Hooks.json b/contracts/artifacts/wallet-contracts-v3/Hooks.sol/Hooks.json new file mode 100644 index 00000000..1e950b00 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Hooks.sol/Hooks.json @@ -0,0 +1 @@ +{"abi":[{"type":"fallback","stateMutability":"payable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"addHook","inputs":[{"name":"selector","type":"bytes4","internalType":"bytes4"},{"name":"implementation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"onERC1155BatchReceived","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256[]","internalType":"uint256[]"},{"name":"","type":"uint256[]","internalType":"uint256[]"},{"name":"","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"pure"},{"type":"function","name":"onERC1155Received","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"pure"},{"type":"function","name":"onERC721Received","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"pure"},{"type":"function","name":"readHook","inputs":[{"name":"selector","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"removeHook","inputs":[{"name":"selector","type":"bytes4","internalType":"bytes4"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"tokenReceived","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"pure"},{"type":"function","name":"tokensReceived","inputs":[{"name":"operator","type":"address","internalType":"address"},{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"operatorData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"DefinedHook","inputs":[{"name":"selector","type":"bytes4","indexed":false,"internalType":"bytes4"},{"name":"implementation","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"error","name":"HookAlreadyExists","inputs":[{"name":"selector","type":"bytes4","internalType":"bytes4"}]},{"type":"error","name":"HookDoesNotExist","inputs":[{"name":"selector","type":"bytes4","internalType":"bytes4"}]},{"type":"error","name":"OnlySelf","inputs":[{"name":"_sender","type":"address","internalType":"address"}]}],"bytecode":{"object":"0x60808060405234601557610a4d908161001b8239f35b600080fdfe6080604052600436101561001e575b361561001c5761001c6108ce565b005b60003560e01c806223de291461009d578063150b7a02146100985780631a9b2337146100935780634fcf3eca1461008e5780638943ec0214610089578063b93ea7ad14610084578063bc197c811461007f5763f23a6e610361000e5761076e565b61069c565b610506565b610482565b6102e0565b610281565b6101c5565b346101295760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610129576100d461012e565b506100dd610151565b506100e6610174565b5060843567ffffffffffffffff811161012957610107903690600401610197565b505060a43567ffffffffffffffff81116101295761001c903690600401610197565b600080fd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361012957565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361012957565b6044359073ffffffffffffffffffffffffffffffffffffffff8216820361012957565b9181601f840112156101295782359167ffffffffffffffff8311610129576020838186019501011161012957565b346101295760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610129576101fc61012e565b50610205610151565b5060643567ffffffffffffffff811161012957610226903690600401610197565b505060206040517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b600435907fffffffff000000000000000000000000000000000000000000000000000000008216820361012957565b346101295760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101295760206102c26102bd610252565b610997565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012957610312610252565b3033036104545773ffffffffffffffffffffffffffffffffffffffff61033782610997565b16156104045760407fffffffff000000000000000000000000000000000000000000000000000000007f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed192166000825160208101906103f1816103c586859190602060408401937fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a12081520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261082a565b51902055815190815260006020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f1c3812cc000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b7fa19dbf00000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b346101295760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610129576104b961012e565b5060443567ffffffffffffffff8111610129576104da903690600401610197565b505060206040517f8943ec02000000000000000000000000000000000000000000000000000000008152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012957610538610252565b610540610151565b903033036104545773ffffffffffffffffffffffffffffffffffffffff61056682610997565b1661061b577f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19173ffffffffffffffffffffffffffffffffffffffff7fffffffff00000000000000000000000000000000000000000000000000000000604093169116808351602081019061060a816103c587859190602060408401937fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a12081520152565b5190205582519182526020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f5b4d6d6a000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b9181601f840112156101295782359167ffffffffffffffff8311610129576020808501948460051b01011161012957565b346101295760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610129576106d361012e565b506106dc610151565b5060443567ffffffffffffffff8111610129576106fd90369060040161066b565b505060643567ffffffffffffffff81116101295761071f90369060040161066b565b505060843567ffffffffffffffff811161012957610741903690600401610197565b50506040517fbc197c81000000000000000000000000000000000000000000000000000000008152602090f35b346101295760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610129576107a561012e565b506107ae610151565b5060843567ffffffffffffffff8111610129576107cf903690600401610197565b505060206040517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761086b57604052565b6107fb565b3d156108c9573d9067ffffffffffffffff821161086b57604051916108bd60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116018461082a565b82523d6000602084013e565b606090565b6004361080156108db5750565b610911906000357fffffffff00000000000000000000000000000000000000000000000000000000811691610963575b50610997565b73ffffffffffffffffffffffffffffffffffffffff811661092f5750565b60008091604051368382378036810184815203915af461094d610870565b901561095b57602081519101f35b602081519101fd5b7fffffffff000000000000000000000000000000000000000000000000000000008092503660040360031b1b16163861090b565b73ffffffffffffffffffffffffffffffffffffffff90604051610a0f816103c57fffffffff00000000000000000000000000000000000000000000000000000000602083019516859190602060408401937fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a12081520152565b51902054169056fea2646970667358221220ed44c5036c08b0280c8000b5142f494d7443994b19b4f51b5966a25687eb12d764736f6c634300081c0033","sourceMap":"551:3552:45:-:0;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436101561001e575b361561001c5761001c6108ce565b005b60003560e01c806223de291461009d578063150b7a02146100985780631a9b2337146100935780634fcf3eca1461008e5780638943ec0214610089578063b93ea7ad14610084578063bc197c811461007f5763f23a6e610361000e5761076e565b61069c565b610506565b610482565b6102e0565b610281565b6101c5565b346101295760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610129576100d461012e565b506100dd610151565b506100e6610174565b5060843567ffffffffffffffff811161012957610107903690600401610197565b505060a43567ffffffffffffffff81116101295761001c903690600401610197565b600080fd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361012957565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361012957565b6044359073ffffffffffffffffffffffffffffffffffffffff8216820361012957565b9181601f840112156101295782359167ffffffffffffffff8311610129576020838186019501011161012957565b346101295760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610129576101fc61012e565b50610205610151565b5060643567ffffffffffffffff811161012957610226903690600401610197565b505060206040517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b600435907fffffffff000000000000000000000000000000000000000000000000000000008216820361012957565b346101295760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101295760206102c26102bd610252565b610997565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012957610312610252565b3033036104545773ffffffffffffffffffffffffffffffffffffffff61033782610997565b16156104045760407fffffffff000000000000000000000000000000000000000000000000000000007f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed192166000825160208101906103f1816103c586859190602060408401937fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a12081520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261082a565b51902055815190815260006020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f1c3812cc000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b7fa19dbf00000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b346101295760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610129576104b961012e565b5060443567ffffffffffffffff8111610129576104da903690600401610197565b505060206040517f8943ec02000000000000000000000000000000000000000000000000000000008152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012957610538610252565b610540610151565b903033036104545773ffffffffffffffffffffffffffffffffffffffff61056682610997565b1661061b577f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19173ffffffffffffffffffffffffffffffffffffffff7fffffffff00000000000000000000000000000000000000000000000000000000604093169116808351602081019061060a816103c587859190602060408401937fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a12081520152565b5190205582519182526020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f5b4d6d6a000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b9181601f840112156101295782359167ffffffffffffffff8311610129576020808501948460051b01011161012957565b346101295760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610129576106d361012e565b506106dc610151565b5060443567ffffffffffffffff8111610129576106fd90369060040161066b565b505060643567ffffffffffffffff81116101295761071f90369060040161066b565b505060843567ffffffffffffffff811161012957610741903690600401610197565b50506040517fbc197c81000000000000000000000000000000000000000000000000000000008152602090f35b346101295760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610129576107a561012e565b506107ae610151565b5060843567ffffffffffffffff8111610129576107cf903690600401610197565b505060206040517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761086b57604052565b6107fb565b3d156108c9573d9067ffffffffffffffff821161086b57604051916108bd60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116018461082a565b82523d6000602084013e565b606090565b6004361080156108db5750565b610911906000357fffffffff00000000000000000000000000000000000000000000000000000000811691610963575b50610997565b73ffffffffffffffffffffffffffffffffffffffff811661092f5750565b60008091604051368382378036810184815203915af461094d610870565b901561095b57602081519101f35b602081519101fd5b7fffffffff000000000000000000000000000000000000000000000000000000008092503660040360031b1b16163861090b565b73ffffffffffffffffffffffffffffffffffffffff90604051610a0f816103c57fffffffff00000000000000000000000000000000000000000000000000000000602083019516859190602060408401937fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a12081520152565b51902054169056fea2646970667358221220ed44c5036c08b0280c8000b5142f494d7443994b19b4f51b5966a25687eb12d764736f6c634300081c0033","sourceMap":"551:3552:45:-:0;;;;;;;;;-1:-1:-1;551:3552:45;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;3351:31;551:3552;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;1358:19;551:3552;;:::i;:::-;1358:19;:::i;:::-;551:3552;;;;;;;;;;;;;;;;;;:::i;:::-;401:4:52;379:10;:27;375:75;;551:3552:45;2005:19;;;:::i;:::-;551:3552;2005:33;2001:87;;551:3552;;2492:37;551:3552;;-1:-1:-1;551:3552:45;;;552:25:49;;;;;;;;551:3552:45;;;;;;;753:66;551:3552;;;;;552:25:49;;;;;;;;;:::i;:::-;551:3552:45;542:36:49;;584:40;551:3552:45;;;;;-1:-1:-1;551:3552:45;;;;2492:37;551:3552;2001:87;551:3552;2055:26;;-1:-1:-1;2055:26:45;551:3552;;;;-1:-1:-1;2055:26:45;375:75:52;423:20;-1:-1:-1;423:20:52;379:10;551:3552:45;;;-1:-1:-1;423:20:52;551:3552:45;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;3526:28;551:3552;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;401:4:52;;379:10;:27;375:75;;551:3552:45;1667:19;;;:::i;:::-;551:3552;1663:88;;2492:37;551:3552;;;;;;;;;;;552:25:49;;;;;;;;;551:3552:45;;;;;;;753:66;551:3552;;;;;552:25:49;551:3552:45;542:36:49;;584:40;551:3552:45;;;;;552:25:49;551:3552:45;;;2492:37;551:3552;1663:88;551:3552;1717:27;;-1:-1:-1;1717:27:45;551:3552;;;;-1:-1:-1;1717:27:45;551:3552;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;551:3552:45;;2946:37;551:3552;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;2696:32;551:3552;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;551:3552:45;;;;:::o;:::-;;;:::o;3638:392::-;3695:1;3676:8;:20;;;3672:354;;3638:392;:::o;3672:354::-;3723:27;3733:16;3676:8;551:3552;;;;;;;3672:354;3723:27;;:::i;:::-;551:3552;;;3758:262;;3638:392;:::o;3758:262::-;3676:8;551:3552;;;;3676:8;551:3552;;;3676:8;;551:3552;;;;;3832:29;;;;;;:::i;:::-;3871:141;;;;;;;;;;;;;;;;;551:3552;;3676:8;;;;3695:1;551:3552;;;;;;;;;2134:172;551:3552;2134:172;551:3552;;753:25:49;;;551:3552:45;753:25:49;;;551:3552:45;;753:25:49;551:3552:45;;;;;;;753:66;551:3552;;;;;753:25:49;551:3552:45;743:36:49;;785:40;551:3552:45;2134:172;:::o","linkReferences":{}},"methodIdentifiers":{"addHook(bytes4,address)":"b93ea7ad","onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)":"bc197c81","onERC1155Received(address,address,uint256,uint256,bytes)":"f23a6e61","onERC721Received(address,address,uint256,bytes)":"150b7a02","readHook(bytes4)":"1a9b2337","removeHook(bytes4)":"4fcf3eca","tokenReceived(address,uint256,bytes)":"8943ec02","tokensReceived(address,address,address,uint256,bytes,bytes)":"0023de29"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"HookAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"HookDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"DefinedHook\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"addHook\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"readHook\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"removeHook\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"tokenReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"operatorData\",\"type\":\"bytes\"}],\"name\":\"tokensReceived\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"Agustin Aguilar, Michael Standen\",\"kind\":\"dev\",\"methods\":{\"addHook(bytes4,address)\":{\"details\":\"Callable only by the contract itself\",\"params\":{\"implementation\":\"The implementation address of the hook\",\"selector\":\"The selector of the hook\"}},\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\":{\"params\":{\"data\":\"Additional data with no specified format\",\"from\":\"The address which previously owned the token\",\"ids\":\"The list of token IDs being transferred\",\"operator\":\"The address which initiated the transfer\",\"values\":\"The amounts of each token being transferred\"},\"returns\":{\"_0\":\"On a success, the selector of the function that was called\"}},\"onERC1155Received(address,address,uint256,uint256,bytes)\":{\"params\":{\"data\":\"Additional data with no specified format\",\"from\":\"The address which previously owned the token\",\"operator\":\"The address which initiated the transfer\",\"tokenId\":\"The ID of the token being transferred\",\"value\":\"The amount of token being transferred\"},\"returns\":{\"_0\":\"On a success, the selector of the function that was called\"}},\"onERC721Received(address,address,uint256,bytes)\":{\"params\":{\"data\":\"Additional data with no specified format\",\"from\":\"The address which previously owned the token\",\"operator\":\"The address which initiated the transfer\",\"tokenId\":\"The ID of the token being transferred\"},\"returns\":{\"_0\":\"On a success, the selector of the function that was called\"}},\"readHook(bytes4)\":{\"params\":{\"selector\":\"The selector of the hook\"},\"returns\":{\"_0\":\"implementation The implementation address of the hook\"}},\"removeHook(bytes4)\":{\"details\":\"Callable only by the contract itself\",\"params\":{\"selector\":\"The selector of the hook\"}},\"tokenReceived(address,uint256,bytes)\":{\"params\":{\"data\":\"Transaction metadata\",\"from\":\"The address which previously owned the tokens\",\"value\":\"The amount of tokens being transferred\"},\"returns\":{\"_0\":\"The signature of the function to be called\"}},\"tokensReceived(address,address,address,uint256,bytes,bytes)\":{\"params\":{\"amount\":\"The amount of tokens being transferred\",\"data\":\"Additional data with no specified format\",\"from\":\"The address which previously owned the tokens\",\"operator\":\"The address which initiated the transfer\",\"operatorData\":\"Additional data with no specified format\",\"to\":\"The address which is receiving the tokens\"}}},\"stateVariables\":{\"HOOKS_KEY\":{\"details\":\"keccak256(\\\"org.arcadeum.module.hooks.hooks\\\")\"}},\"title\":\"Hooks\",\"version\":1},\"userdoc\":{\"errors\":{\"HookAlreadyExists(bytes4)\":[{\"notice\":\"Error thrown when a hook already exists\"}],\"HookDoesNotExist(bytes4)\":[{\"notice\":\"Error thrown when a hook does not exist\"}],\"OnlySelf(address)\":[{\"notice\":\"Error thrown when the caller is not the same as the contract\"}]},\"events\":{\"DefinedHook(bytes4,address)\":{\"notice\":\"Emitted when a hook is defined\"}},\"kind\":\"user\",\"methods\":{\"addHook(bytes4,address)\":{\"notice\":\"Add a hook\"},\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\":{\"notice\":\"Called when multiple ERC1155 tokens are transferred to this contract\"},\"onERC1155Received(address,address,uint256,uint256,bytes)\":{\"notice\":\"Called when a single ERC1155 token is transferred to this contract\"},\"onERC721Received(address,address,uint256,bytes)\":{\"notice\":\"Called when a single ERC721 token is transferred to this contract\"},\"readHook(bytes4)\":{\"notice\":\"Read a hook\"},\"removeHook(bytes4)\":{\"notice\":\"Remove a hook\"},\"tokenReceived(address,uint256,bytes)\":{\"notice\":\"Called when ERC223 tokens are received by this contract\"},\"tokensReceived(address,address,address,uint256,bytes,bytes)\":{\"notice\":\"Called when tokens are received by this contract\"}},\"notice\":\"Enables extension of the wallet by adding hooks\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/modules/Hooks.sol\":\"Hooks\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/modules/Hooks.sol\":{\"keccak256\":\"0xd1f9de45b83ae5f9f32a4d1c709d7a2b6543b1cddd09bf69d401dcdf1d154ab7\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://bf3161edf37479825588e07039752b79792666455cc0beb1ca0e873b3be31ad4\",\"dweb:/ipfs/QmYYpJeSsRgRx2oHcpvhqsNs7ZtDhVnxLmFpXz5eYcS8g4\"]},\"src/modules/Storage.sol\":{\"keccak256\":\"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da\",\"dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn\"]},\"src/modules/auth/SelfAuth.sol\":{\"keccak256\":\"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42\",\"dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W\"]},\"src/modules/interfaces/IERC1155Receiver.sol\":{\"keccak256\":\"0xa23d0bc29233a91085922ea8a7e2cbe8b5f3358d3f2c3cdc58adade9a171d9c1\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2f06b8f3ae7a45441cc26da5b2ddd15ba76d1664178958f63f536e6c5e4fd0fb\",\"dweb:/ipfs/QmR1Rnk8ciSn5s5wNLGvpE1QNRDsBVDfDT1ZXhei2brmFj\"]},\"src/modules/interfaces/IERC223Receiver.sol\":{\"keccak256\":\"0x426221c0d48b651ed692edfa5388d6e5304e94f48598a71748134b2659e3890d\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://9e1ed2fd5e390b5b943dc07c2e0ea9e524eb37263dc72c482365c159fc3659e5\",\"dweb:/ipfs/QmWRDBvb1cthVPm4BSzKX3J5GpGGSBuDokkpRK9x5aA7JR\"]},\"src/modules/interfaces/IERC721Receiver.sol\":{\"keccak256\":\"0xbe14c3b727f283a467dc2f2221d3322c5a69cd64a3aacad85acab05e94438f35\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://43ef086c509b8b88cae78f67c4bd979fd427736972cfe56f7423371ccc154e63\",\"dweb:/ipfs/Qmc7Yp7Z1dQ925gzEZYVNUXnWr3YomvWkXfaGYLZpoy8J3\"]},\"src/modules/interfaces/IERC777Receiver.sol\":{\"keccak256\":\"0xd9144d439a96b0c6439cd9a186701aa530f4f782ff09fdbf6c3ef16b78b0d4e5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d1f17484eda7184db4a00106b4952f15c1517872cbfe19663d6fce4e042729b2\",\"dweb:/ipfs/QmWdhYmLNkUpgvPpSyGHstxrFwMfhRTVmxDpe4frkUu1Qh\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"type":"error","name":"HookAlreadyExists"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"type":"error","name":"HookDoesNotExist"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"}],"type":"error","name":"OnlySelf"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4","indexed":false},{"internalType":"address","name":"implementation","type":"address","indexed":false}],"type":"event","name":"DefinedHook","anonymous":false},{"inputs":[],"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"},{"internalType":"address","name":"implementation","type":"address"}],"stateMutability":"payable","type":"function","name":"addHook"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function","name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function","name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function","name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"stateMutability":"view","type":"function","name":"readHook","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"stateMutability":"payable","type":"function","name":"removeHook"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function","name":"tokenReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes","name":"operatorData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"tokensReceived"},{"inputs":[],"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"addHook(bytes4,address)":{"details":"Callable only by the contract itself","params":{"implementation":"The implementation address of the hook","selector":"The selector of the hook"}},"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)":{"params":{"data":"Additional data with no specified format","from":"The address which previously owned the token","ids":"The list of token IDs being transferred","operator":"The address which initiated the transfer","values":"The amounts of each token being transferred"},"returns":{"_0":"On a success, the selector of the function that was called"}},"onERC1155Received(address,address,uint256,uint256,bytes)":{"params":{"data":"Additional data with no specified format","from":"The address which previously owned the token","operator":"The address which initiated the transfer","tokenId":"The ID of the token being transferred","value":"The amount of token being transferred"},"returns":{"_0":"On a success, the selector of the function that was called"}},"onERC721Received(address,address,uint256,bytes)":{"params":{"data":"Additional data with no specified format","from":"The address which previously owned the token","operator":"The address which initiated the transfer","tokenId":"The ID of the token being transferred"},"returns":{"_0":"On a success, the selector of the function that was called"}},"readHook(bytes4)":{"params":{"selector":"The selector of the hook"},"returns":{"_0":"implementation The implementation address of the hook"}},"removeHook(bytes4)":{"details":"Callable only by the contract itself","params":{"selector":"The selector of the hook"}},"tokenReceived(address,uint256,bytes)":{"params":{"data":"Transaction metadata","from":"The address which previously owned the tokens","value":"The amount of tokens being transferred"},"returns":{"_0":"The signature of the function to be called"}},"tokensReceived(address,address,address,uint256,bytes,bytes)":{"params":{"amount":"The amount of tokens being transferred","data":"Additional data with no specified format","from":"The address which previously owned the tokens","operator":"The address which initiated the transfer","operatorData":"Additional data with no specified format","to":"The address which is receiving the tokens"}}},"version":1},"userdoc":{"kind":"user","methods":{"addHook(bytes4,address)":{"notice":"Add a hook"},"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)":{"notice":"Called when multiple ERC1155 tokens are transferred to this contract"},"onERC1155Received(address,address,uint256,uint256,bytes)":{"notice":"Called when a single ERC1155 token is transferred to this contract"},"onERC721Received(address,address,uint256,bytes)":{"notice":"Called when a single ERC721 token is transferred to this contract"},"readHook(bytes4)":{"notice":"Read a hook"},"removeHook(bytes4)":{"notice":"Remove a hook"},"tokenReceived(address,uint256,bytes)":{"notice":"Called when ERC223 tokens are received by this contract"},"tokensReceived(address,address,address,uint256,bytes,bytes)":{"notice":"Called when tokens are received by this contract"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/modules/Hooks.sol":"Hooks"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/modules/Hooks.sol":{"keccak256":"0xd1f9de45b83ae5f9f32a4d1c709d7a2b6543b1cddd09bf69d401dcdf1d154ab7","urls":["bzz-raw://bf3161edf37479825588e07039752b79792666455cc0beb1ca0e873b3be31ad4","dweb:/ipfs/QmYYpJeSsRgRx2oHcpvhqsNs7ZtDhVnxLmFpXz5eYcS8g4"],"license":"Apache-2.0"},"src/modules/Storage.sol":{"keccak256":"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f","urls":["bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da","dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn"],"license":"Apache-2.0"},"src/modules/auth/SelfAuth.sol":{"keccak256":"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c","urls":["bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42","dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W"],"license":"Apache-2.0"},"src/modules/interfaces/IERC1155Receiver.sol":{"keccak256":"0xa23d0bc29233a91085922ea8a7e2cbe8b5f3358d3f2c3cdc58adade9a171d9c1","urls":["bzz-raw://2f06b8f3ae7a45441cc26da5b2ddd15ba76d1664178958f63f536e6c5e4fd0fb","dweb:/ipfs/QmR1Rnk8ciSn5s5wNLGvpE1QNRDsBVDfDT1ZXhei2brmFj"],"license":"Apache-2.0"},"src/modules/interfaces/IERC223Receiver.sol":{"keccak256":"0x426221c0d48b651ed692edfa5388d6e5304e94f48598a71748134b2659e3890d","urls":["bzz-raw://9e1ed2fd5e390b5b943dc07c2e0ea9e524eb37263dc72c482365c159fc3659e5","dweb:/ipfs/QmWRDBvb1cthVPm4BSzKX3J5GpGGSBuDokkpRK9x5aA7JR"],"license":"Apache-2.0"},"src/modules/interfaces/IERC721Receiver.sol":{"keccak256":"0xbe14c3b727f283a467dc2f2221d3322c5a69cd64a3aacad85acab05e94438f35","urls":["bzz-raw://43ef086c509b8b88cae78f67c4bd979fd427736972cfe56f7423371ccc154e63","dweb:/ipfs/Qmc7Yp7Z1dQ925gzEZYVNUXnWr3YomvWkXfaGYLZpoy8J3"],"license":"Apache-2.0"},"src/modules/interfaces/IERC777Receiver.sol":{"keccak256":"0xd9144d439a96b0c6439cd9a186701aa530f4f782ff09fdbf6c3ef16b78b0d4e5","urls":["bzz-raw://d1f17484eda7184db4a00106b4952f15c1517872cbfe19663d6fce4e042729b2","dweb:/ipfs/QmWdhYmLNkUpgvPpSyGHstxrFwMfhRTVmxDpe4frkUu1Qh"],"license":"Apache-2.0"}},"version":1},"id":45} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Hooks.t.sol/HooksTest.json b/contracts/artifacts/wallet-contracts-v3/Hooks.t.sol/HooksTest.json new file mode 100644 index 00000000..18fe703c --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Hooks.t.sol/HooksTest.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"TEST_IMPLEMENTATION","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"excludeArtifacts","inputs":[],"outputs":[{"name":"excludedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"excludeContracts","inputs":[],"outputs":[{"name":"excludedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"excludeSelectors","inputs":[],"outputs":[{"name":"excludedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"excludeSenders","inputs":[],"outputs":[{"name":"excludedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"factory","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract Factory"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"hooks","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract Hooks"}],"stateMutability":"view"},{"type":"function","name":"setUp","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"targetArtifactSelectors","inputs":[],"outputs":[{"name":"targetedArtifactSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzArtifactSelector[]","components":[{"name":"artifact","type":"string","internalType":"string"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetArtifacts","inputs":[],"outputs":[{"name":"targetedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"targetContracts","inputs":[],"outputs":[{"name":"targetedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"targetInterfaces","inputs":[],"outputs":[{"name":"targetedInterfaces_","type":"tuple[]","internalType":"struct StdInvariant.FuzzInterface[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"artifacts","type":"string[]","internalType":"string[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSelectors","inputs":[],"outputs":[{"name":"targetedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSenders","inputs":[],"outputs":[{"name":"targetedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"test_addHook","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_addHook_revertWhenHookExists","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_addHook_revertWhenNotSelf","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fallback","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fallbackRevertWhenHookNotPayable","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_onERC1155BatchReceived","inputs":[{"name":"_from","type":"address","internalType":"address"},{"name":"_to","type":"address","internalType":"address"},{"name":"_ids","type":"uint256[]","internalType":"uint256[]"},{"name":"_values","type":"uint256[]","internalType":"uint256[]"},{"name":"_data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_onERC1155Received","inputs":[{"name":"_from","type":"address","internalType":"address"},{"name":"_to","type":"address","internalType":"address"},{"name":"_id","type":"uint256","internalType":"uint256"},{"name":"_value","type":"uint256","internalType":"uint256"},{"name":"_data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_onERC721Received","inputs":[{"name":"_from","type":"address","internalType":"address"},{"name":"_to","type":"address","internalType":"address"},{"name":"_tokenId","type":"uint256","internalType":"uint256"},{"name":"_data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_payableFallback","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_receive","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_removeHook","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_removeHook_revertWhenHookDoesNotExist","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_tokenReceived","inputs":[{"name":"_from","type":"address","internalType":"address"},{"name":"_value","type":"uint256","internalType":"uint256"},{"name":"_data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_tokensReceived","inputs":[{"name":"_operator","type":"address","internalType":"address"},{"name":"_from","type":"address","internalType":"address"},{"name":"_to","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"},{"name":"_data","type":"bytes","internalType":"bytes"},{"name":"_operatorData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false}],"bytecode":{"object":"0x60808060405234602f57600160ff19600c541617600c55600160ff19601f541617601f55614c2190816100358239f35b600080fdfe608080604052600436101561001357600080fd5b600090813560e01c9081630a9254e414613187575080631d31c39714612e065780631ed7831c14612d5d5780632ade388014612b315780633e5e3c2314612a885780633f7286f4146129df57806349dc8a00146125f95780634a6d481b146123395780634e70d5b61461223757806366d9a9a0146120dc5780636f53d0c214611d6c5780637aea0b8514611ac957806385226c8114611a215780638f23cc7c14611730578063916a17c61461165b57806394d72b271461140f5780639ceee4d8146113d4578063a34b205b14611118578063b0464fdc14611043578063b1a8b23314610deb578063b4295bca14610c4e578063b5508aa914610ba6578063ba414fa614610b63578063c45a015514610b12578063cd7033c414610abd578063d3b676a71461082e578063e20c9f7114610775578063efe2d293146104b6578063fa7626d4146104755763ff1c4cf51461016b57600080fd5b346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f1576040519060f0918281019281841067ffffffffffffffff8511176104485782938291614afc8339039082f0801561043b5773ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561041757604051907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152828160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811561043057839161041b575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b15610417576040517fb93ea7ad0000000000000000000000000000000000000000000000000000000081527fe16b4a9b00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff92909216602483015282908290604490829084905af180156103f457610402575b50808073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051670de0b6b3a764000060208201917fe16b4a9b0000000000000000000000000000000000000000000000000000000083526004815261036160248261367e565b51925af161036d61380a565b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103ff57604051907fa5982885000000000000000000000000000000000000000000000000000000008252151560048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156103f4576103e05750f35b816103ea9161367e565b6103f15780f35b80fd5b6040513d84823e3d90fd5b50fd5b8161040c9161367e565b6103f15780386102ff565b5050fd5b816104259161367e565b6103ff578138610258565b6040513d85823e3d90fd5b50604051903d90823e3d90fd5b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f157602060ff601f54166040519015158152f35b50346103f15760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f157806104ef613466565b6104f761348e565b60643567ffffffffffffffff8111610770576105179036906004016134e2565b9092737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610761576040517f7c84c69b0000000000000000000000000000000000000000000000000000000081527f150b7a020000000000000000000000000000000000000000000000000000000060048201527f150b7a020000000000000000000000000000000000000000000000000000000060248201528581604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115610765578691610746575b50509073ffffffffffffffffffffffffffffffffffffffff6020939261064c829683601f5460081c1694604051988997889687967f150b7a020000000000000000000000000000000000000000000000000000000088521660048701521660248501526044356044850152608060648501526084840191613b84565b03915afa9081156103f4578291610717575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103ff577fffffffff00000000000000000000000000000000000000000000000000000000604051917f7c84c69b0000000000000000000000000000000000000000000000000000000083521660048201527f150b7a020000000000000000000000000000000000000000000000000000000060248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156103f4576103e05750f35b610739915060203d60201161073f575b610731818361367e565b810190613b0f565b3861065e565b503d610727565b81610754919594939561367e565b61076157909184386105d0565b8480fd5b6040513d88823e3d90fd5b505050fd5b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f15760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b818110610802576107fe856107f28187038261367e565b60405191829182613361565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016107db565b50346103f15760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f15780610867613466565b60443567ffffffffffffffff8111610417576108879036906004016134e2565b737109709ecfa91a80626ff3989d68f67f5b1dd12d9291923b15610770576040517f7c84c69b0000000000000000000000000000000000000000000000000000000081527f8943ec020000000000000000000000000000000000000000000000000000000060048201527f8943ec020000000000000000000000000000000000000000000000000000000060248201528481604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115610ab2578591610a9d575b505060209173ffffffffffffffffffffffffffffffffffffffff80601f5460081c16916109b3604051968795869485947f8943ec020000000000000000000000000000000000000000000000000000000086521660048501526024356024850152606060448501526064840191613b84565b03915afa9081156103f4578291610a7e575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103ff577fffffffff00000000000000000000000000000000000000000000000000000000604051917f7c84c69b0000000000000000000000000000000000000000000000000000000083521660048201527f8943ec020000000000000000000000000000000000000000000000000000000060248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156103f4576103e05750f35b610a97915060203d60201161073f57610731818361367e565b386109c5565b81610aa79161367e565b610770578338610941565b6040513d87823e3d90fd5b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f157602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051908152f35b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f157602073ffffffffffffffffffffffffffffffffffffffff815416604051908152f35b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f1576020610b9c613bc3565b6040519015158152f35b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f157601954610be1816136eb565b91610bef604051938461367e565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b838310610c3157604051806107fe8782613510565b600160208192610c4085613703565b815201920192019190610c1c565b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f157806040517fa19dbf0000000000000000000000000000000000000000000000000000000000602082015230602482015260248152610cbc60448261367e565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103ff5781610d1791604051809381927ff28dceb30000000000000000000000000000000000000000000000000000000083526020600484015260248301906133b1565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156103f457610dd6575b5073ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b156103ff578160405180927fb93ea7ad000000000000000000000000000000000000000000000000000000008252818381610dc56004820190610123602060408401937fe16b4a9b0000000000000000000000000000000000000000000000000000000081520152565b03925af180156103f4576103e05750f35b81610de09161367e565b6103f1578038610d3c565b50346103f15760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f15780610e24613466565b610e2c61348e565b6044359073ffffffffffffffffffffffffffffffffffffffff82168092036107705760843567ffffffffffffffff811161076157610e6e9036906004016134e2565b909260a43567ffffffffffffffff811161103f57610e909036906004016134e2565b949095737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15611030576040517f7c84c69b0000000000000000000000000000000000000000000000000000000081527e23de290000000000000000000000000000000000000000000000000000000060048201527e23de290000000000000000000000000000000000000000000000000000000060248201528881604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561103457899161101b575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c1693843b156110175773ffffffffffffffffffffffffffffffffffffffff978997610fe78995610dc5948c986040519d8e9c8d9b8c9a7e23de29000000000000000000000000000000000000000000000000000000008c521660048b01521660248901526044880152606435606488015260c0608488015260c4870191613b84565b917ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8584030160a4860152613b84565b8880fd5b816110259161367e565b611030578738610f48565b8780fd5b6040513d8b823e3d90fd5b8680fd5b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f157601c5461107e816136eb565b9161108c604051938461367e565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b8383106110ce57604051806107fe878261358e565b600260206001926040516110e181613633565b73ffffffffffffffffffffffffffffffffffffffff8654168152611106858701613868565b838201528152019201920191906110b9565b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f1578073ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103ff57604051907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156103f4576113bf575b5073ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b156103ff578160405180927fb93ea7ad00000000000000000000000000000000000000000000000000000000825281838161125c6004820190610123602060408401937fe16b4a9b0000000000000000000000000000000000000000000000000000000081520152565b03925af180156103f4576113aa575b506024602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051928380927f1a9b23370000000000000000000000000000000000000000000000000000000082527fe16b4a9b0000000000000000000000000000000000000000000000000000000060048301525afa9081156103f457829161137b575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103ff5773ffffffffffffffffffffffffffffffffffffffff604051917f515361f600000000000000000000000000000000000000000000000000000000835216600482015261012360248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156103f4576103e05750f35b61139d915060203d6020116113a3575b611395818361367e565b8101906136bf565b386112ec565b503d61138b565b816113b49161367e565b6103f157803861126b565b816113c99161367e565b6103f15780386111d3565b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f15760206040516101238152f35b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f157806040517f1c3812cc0000000000000000000000000000000000000000000000000000000060208201527fe16b4a9b0000000000000000000000000000000000000000000000000000000060248201526024815261149d60448261367e565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103ff57816114f891604051809381927ff28dceb30000000000000000000000000000000000000000000000000000000083526020600484015260248301906133b1565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156103f457611646575b5073ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103ff57604051907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156103f457611631575b5073ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b156103ff578180916024604051809481937f4fcf3eca0000000000000000000000000000000000000000000000000000000083527fe16b4a9b0000000000000000000000000000000000000000000000000000000060048401525af180156103f4576103e05750f35b8161163b9161367e565b6103f15780386115a9565b816116509161367e565b6103f157803861151d565b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f157601d54611696816136eb565b916116a4604051938461367e565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b8383106116e657604051806107fe878261358e565b600260206001926040516116f981613633565b73ffffffffffffffffffffffffffffffffffffffff865416815261171e858701613868565b838201528152019201920191906116d1565b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f1576040519060f0918281019281841067ffffffffffffffff8511176104485782938291614afc8339039082f0801561043b5773ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561041757604051907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152828160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115610430578391611a0c575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c1690813b156104175773ffffffffffffffffffffffffffffffffffffffff604484928360405195869485937fb93ea7ad0000000000000000000000000000000000000000000000000000000085527ffaeb94500000000000000000000000000000000000000000000000000000000060048601521660248401525af180156103f4576119f7575b508061195b9173ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051670de0b6b3a764000060208201917ffaeb94500000000000000000000000000000000000000000000000000000000083526004815261192760248261367e565b51925af161193c61193661380a565b91613ca9565b60405190600160208301526020825261195660408361367e565b613d27565b8073ffffffffffffffffffffffffffffffffffffffff601f5460081c1631737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103ff57604051907f98296c540000000000000000000000000000000000000000000000000000000082526004820152670de0b6b3a764000060248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156103f4576103e05750f35b81611a019161367e565b6103f15780386118c2565b81611a169161367e565b6103ff57813861181e565b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f157601a54611a5c816136eb565b91611a6a604051938461367e565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b838310611aac57604051806107fe8782613510565b600160208192611abb85613703565b815201920192019190611a97565b50346103f15760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f15780611b02613466565b611b0a61348e565b60843567ffffffffffffffff811161077057611b2a9036906004016134e2565b9092737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610761576040517f7c84c69b0000000000000000000000000000000000000000000000000000000081527ff23a6e610000000000000000000000000000000000000000000000000000000060048201527ff23a6e610000000000000000000000000000000000000000000000000000000060248201528581604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115610765578691611d51575b50509073ffffffffffffffffffffffffffffffffffffffff60209392611c67829683601f5460081c1694604051988997889687967ff23a6e610000000000000000000000000000000000000000000000000000000088521660048701521660248501526044356044850152606435606485015260a0608485015260a4840191613b84565b03915afa9081156103f4578291611d32575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103ff577fffffffff00000000000000000000000000000000000000000000000000000000604051917f7c84c69b0000000000000000000000000000000000000000000000000000000083521660048201527ff23a6e610000000000000000000000000000000000000000000000000000000060248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156103f4576103e05750f35b611d4b915060203d60201161073f57610731818361367e565b38611c79565b81611d5f919594939561367e565b6107615790918438611be3565b50346103f15760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f15780611da5613466565b611dad61348e565b9060443567ffffffffffffffff811161077057611dce9036906004016134b1565b92909160643567ffffffffffffffff81116120d857611df19036906004016134b1565b9060843567ffffffffffffffff811161103057611e129036906004016134e2565b919092737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15611017576040517f7c84c69b0000000000000000000000000000000000000000000000000000000081527fbc197c810000000000000000000000000000000000000000000000000000000060048201527fbc197c810000000000000000000000000000000000000000000000000000000060248201528981604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156120cd578a916120b8575b5050601f5460081c73ffffffffffffffffffffffffffffffffffffffff169660405198899788977fbc197c8100000000000000000000000000000000000000000000000000000000895273ffffffffffffffffffffffffffffffffffffffff16600489015273ffffffffffffffffffffffffffffffffffffffff1660248801526044870160a0905260a4870190611f6292613b47565b908582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc016064870152611f9692613b47565b908382037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc016084850152611fca92613b84565b03815a93602094fa9081156103f4578291612099575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103ff577fffffffff00000000000000000000000000000000000000000000000000000000604051917f7c84c69b0000000000000000000000000000000000000000000000000000000083521660048201527fbc197c810000000000000000000000000000000000000000000000000000000060248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156103f4576103e05750f35b6120b2915060203d60201161073f57610731818361367e565b38611fe0565b816120c29161367e565b611017578838611ecc565b6040513d8c823e3d90fd5b8580fd5b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f157601b54612117816136eb565b612124604051918261367e565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b8383106121fc57868587604051928392602084019060208552518091526040840160408260051b8601019392905b82821061219157505050500390f35b919360206121ec827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc06001959799849503018652885190836121dc83516040845260408401906133b1565b9201519084818403910152613410565b9601920192018594939192612182565b6002602060019260405161220f81613633565b61221886613703565b8152612225858701613868565b83820152815201920192019190612154565b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f157737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103f157806040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152670de0b6b3a76400006024820152818160448183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156103f457612324575b5080808061232193670de0b6b3a764000073ffffffffffffffffffffffffffffffffffffffff601f5460081c165af161231b61380a565b50613ca9565b80f35b8161232e9161367e565b6103f15780386122e4565b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f1576040519060f0918281019281841067ffffffffffffffff8511176104485782938291614afc8339039082f0801561043b5773ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561041757604051907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152828160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156104305783916125e4575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b15610417576040517fb93ea7ad0000000000000000000000000000000000000000000000000000000081527fe16b4a9b00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff92909216602483015282908290604490829084905af180156103f4576125cf575b508061252b9173ffffffffffffffffffffffffffffffffffffffff601f5460081c166040518260208201917fe16b4a9b0000000000000000000000000000000000000000000000000000000083526004815261192760248261367e565b6004602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051928380927fe16b4a9b0000000000000000000000000000000000000000000000000000000082525afa80156103f457829061258e575b6123219150613ca9565b506020813d6020116125c7575b816125a86020938361367e565b810103126125c3575180151581036125c35761232190612584565b5080fd5b3d915061259b565b816125d99161367e565b6103f15780386124ce565b816125ee9161367e565b6103ff578138612427565b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f1578073ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103ff57604051907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156103f4576129ca575b5073ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b156103ff578160405180927fb93ea7ad00000000000000000000000000000000000000000000000000000000825281838161273d6004820190610123602060408401937fe16b4a9b0000000000000000000000000000000000000000000000000000000081520152565b03925af180156103f4576129b5575b5073ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103ff57604051907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156103f4576129a0575b5073ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b156103ff578180916024604051809481937f4fcf3eca0000000000000000000000000000000000000000000000000000000083527fe16b4a9b0000000000000000000000000000000000000000000000000000000060048401525af180156103f45761298b575b506024602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051928380927f1a9b23370000000000000000000000000000000000000000000000000000000082527fe16b4a9b0000000000000000000000000000000000000000000000000000000060048301525afa9081156103f457829161296c575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103ff5773ffffffffffffffffffffffffffffffffffffffff604051917f515361f60000000000000000000000000000000000000000000000000000000083521660048201528160248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156103f4576103e05750f35b612985915060203d6020116113a357611395818361367e565b386128df565b816129959161367e565b6103f157803861285e565b816129aa9161367e565b6103f15780386127d8565b816129bf9161367e565b6103f157803861274c565b816129d49161367e565b6103f15780386126b4565b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f15760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b818110612a5c576107fe856107f28187038261367e565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201612a45565b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f15760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b818110612b05576107fe856107f28187038261367e565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201612aee565b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f157601e54612b6c816136eb565b612b79604051918261367e565b818152601e83526020810191837f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350845b838310612cc75786858760405192839260208401906020855251809152604084019160408260051b8601019392815b838310612be55786860387f35b9193957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09086929496030183528551906020604082019273ffffffffffffffffffffffffffffffffffffffff81511683520151916040602083015282518091526060820190602060608260051b850101940192855b828110612c7e57505050505060208060019297019301930190928695949293612bd8565b9091929394602080612cba837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0876001960301895289516133b1565b9701950193929101612c5a565b604051612cd381613633565b73ffffffffffffffffffffffffffffffffffffffff8354168152600183018054612cfc816136eb565b91612d0a604051938461367e565b8183528a526020808b20908b9084015b838210612d40575050505060019282602092836002950152815201920192019190612ba9565b600160208192612d4f86613703565b815201930191019091612d1a565b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f15760405180916020601654928381520191601682527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289915b818110612dda576107fe856107f28187038261367e565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201612dc3565b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f15773ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156125c357604051907fca669fa7000000000000000000000000000000000000000000000000000000008252600482015281808260248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561043b57613177575b905073ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b156103ff578160405180927fb93ea7ad000000000000000000000000000000000000000000000000000000008252818381612f4b6004820190610123602060408401937fe16b4a9b0000000000000000000000000000000000000000000000000000000081520152565b03925af180156103f457613162575b506040517f5b4d6d6a0000000000000000000000000000000000000000000000000000000060208201527fe16b4a9b00000000000000000000000000000000000000000000000000000000602482015260248152612fb960448261367e565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103ff578161301491604051809381927ff28dceb30000000000000000000000000000000000000000000000000000000083526020600484015260248301906133b1565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156103f45761314d575b5073ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103ff57604051907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156103f457610dd6575073ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b156103ff578160405180927fb93ea7ad000000000000000000000000000000000000000000000000000000008252818381610dc56004820190610123602060408401937fe16b4a9b0000000000000000000000000000000000000000000000000000000081520152565b816131579161367e565b6103f1578038613039565b8161316c9161367e565b6103f1578038612f5a565b6131809161367e565b3881612ec1565b9050346125c357817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126125c357610a688082019082821067ffffffffffffffff83111761333457908291613dde8339039082f0801561043b576040516102b68082019082821067ffffffffffffffff831117613307579082916148468339039083f080156103f45773ffffffffffffffffffffffffffffffffffffffff6044816020931693847fffffffffffffffffffffffff00000000000000000000000000000000000000008554161784558560405195869485937f32c02a140000000000000000000000000000000000000000000000000000000085521660048401528160248401525af19081156103f45782916132e8575b507fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00601f549260081b16911617601f5580f35b613301915060203d6020116113a357611395818361367e565b3861329f565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b602060408183019282815284518094520192019060005b8181106133855750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101613378565b919082519283825260005b8481106133fb5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b806020809284010151828286010152016133bc565b906020808351928381520192019060005b81811061342e5750505090565b82517fffffffff0000000000000000000000000000000000000000000000000000000016845260209384019390920191600101613421565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361348957565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361348957565b9181601f840112156134895782359167ffffffffffffffff8311613489576020808501948460051b01011161348957565b9181601f840112156134895782359167ffffffffffffffff8311613489576020838186019501011161348957565b602081016020825282518091526040820191602060408360051b8301019401926000915b83831061354357505050505090565b909192939460208061357f837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0866001960301875289516133b1565b97019301930191939290613534565b602081016020825282518091526040820191602060408360051b8301019401926000915b8383106135c157505050505090565b9091929394602080613624837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190613410565b970193019301919392906135b2565b6040810190811067ffffffffffffffff82111761364f57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761364f57604052565b90816020910312613489575173ffffffffffffffffffffffffffffffffffffffff811681036134895790565b67ffffffffffffffff811161364f5760051b60200190565b906040519160008154918260011c92600181168015613800575b6020851081146137d357848752869392918115613793575060011461374c575b5061374a9250038361367e565b565b90506000929192526020600020906000915b81831061377757505090602061374a928201013861373d565b602091935080600191548385890101520191019091849261375e565b6020935061374a9592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201013861373d565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f169361371d565b3d15613863573d9067ffffffffffffffff821161364f576040519161385760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116018461367e565b82523d6000602084013e565b606090565b90604051918281549182825260208201906000526020600020926000905b806007830110613a825761374a945491818110613a4c575b818110613a16575b8181106139e0575b8181106139aa575b818110613974575b81811061393e575b818110613909575b106138dc575b50038361367e565b7fffffffff00000000000000000000000000000000000000000000000000000000168152602001386138d4565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b1681520193016138ce565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b1681520193016138c6565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b1681520193016138be565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b1681520193016138b6565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b1681520193016138ae565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b1681520193016138a6565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b16815201930161389e565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e0820152019401920185929391613886565b9081602091031261348957517fffffffff00000000000000000000000000000000000000000000000000000000811681036134895790565b90918281527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83116134895760209260051b809284830137010190565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b60085460ff168015613bd25790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115613c9d57600091613c6b575b50151590565b90506020813d602011613c95575b81613c866020938361367e565b81010312613489575138613c65565b3d9150613c79565b6040513d6000823e3d90fd5b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561348957604051907f0c9fd58100000000000000000000000000000000000000000000000000000000825215156004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015613c9d57613d1c5750565b600061374a9161367e565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561348957613d87600091613db760405194859384937f976246310000000000000000000000000000000000000000000000000000000085526040600486015260448501906133b1565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8483030160248501526133b1565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015613c9d57613d1c575056fe60808060405234601557610a4d908161001b8239f35b600080fdfe6080604052600436101561001e575b361561001c5761001c6108ce565b005b60003560e01c806223de291461009d578063150b7a02146100985780631a9b2337146100935780634fcf3eca1461008e5780638943ec0214610089578063b93ea7ad14610084578063bc197c811461007f5763f23a6e610361000e5761076e565b61069c565b610506565b610482565b6102e0565b610281565b6101c5565b346101295760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610129576100d461012e565b506100dd610151565b506100e6610174565b5060843567ffffffffffffffff811161012957610107903690600401610197565b505060a43567ffffffffffffffff81116101295761001c903690600401610197565b600080fd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361012957565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361012957565b6044359073ffffffffffffffffffffffffffffffffffffffff8216820361012957565b9181601f840112156101295782359167ffffffffffffffff8311610129576020838186019501011161012957565b346101295760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610129576101fc61012e565b50610205610151565b5060643567ffffffffffffffff811161012957610226903690600401610197565b505060206040517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b600435907fffffffff000000000000000000000000000000000000000000000000000000008216820361012957565b346101295760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101295760206102c26102bd610252565b610997565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012957610312610252565b3033036104545773ffffffffffffffffffffffffffffffffffffffff61033782610997565b16156104045760407fffffffff000000000000000000000000000000000000000000000000000000007f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed192166000825160208101906103f1816103c586859190602060408401937fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a12081520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261082a565b51902055815190815260006020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f1c3812cc000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b7fa19dbf00000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b346101295760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610129576104b961012e565b5060443567ffffffffffffffff8111610129576104da903690600401610197565b505060206040517f8943ec02000000000000000000000000000000000000000000000000000000008152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012957610538610252565b610540610151565b903033036104545773ffffffffffffffffffffffffffffffffffffffff61056682610997565b1661061b577f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19173ffffffffffffffffffffffffffffffffffffffff7fffffffff00000000000000000000000000000000000000000000000000000000604093169116808351602081019061060a816103c587859190602060408401937fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a12081520152565b5190205582519182526020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f5b4d6d6a000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b9181601f840112156101295782359167ffffffffffffffff8311610129576020808501948460051b01011161012957565b346101295760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610129576106d361012e565b506106dc610151565b5060443567ffffffffffffffff8111610129576106fd90369060040161066b565b505060643567ffffffffffffffff81116101295761071f90369060040161066b565b505060843567ffffffffffffffff811161012957610741903690600401610197565b50506040517fbc197c81000000000000000000000000000000000000000000000000000000008152602090f35b346101295760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610129576107a561012e565b506107ae610151565b5060843567ffffffffffffffff8111610129576107cf903690600401610197565b505060206040517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761086b57604052565b6107fb565b3d156108c9573d9067ffffffffffffffff821161086b57604051916108bd60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116018461082a565b82523d6000602084013e565b606090565b6004361080156108db5750565b610911906000357fffffffff00000000000000000000000000000000000000000000000000000000811691610963575b50610997565b73ffffffffffffffffffffffffffffffffffffffff811661092f5750565b60008091604051368382378036810184815203915af461094d610870565b901561095b57602081519101f35b602081519101fd5b7fffffffff000000000000000000000000000000000000000000000000000000008092503660040360031b1b16163861090b565b73ffffffffffffffffffffffffffffffffffffffff90604051610a0f816103c57fffffffff00000000000000000000000000000000000000000000000000000000602083019516859190602060408401937fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a12081520152565b51902054169056fea2646970667358221220ed44c5036c08b0280c8000b5142f494d7443994b19b4f51b5966a25687eb12d764736f6c634300081c00336080806040523460155761029b908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c6332c02a141461002757600080fd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019f5760043573ffffffffffffffffffffffffffffffffffffffff811680820361019f5760243580916100eb6101176040519261008a846101d3565b602f84527f6041600e3d396021805130553df33d3d36153402601f57363d3d373d363d305460208501527f5af43d82803e903d91601f57fd5bf300000000000000000000000000000000006040850152604051928391602083019586610235565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826101f4565b519034f59173ffffffffffffffffffffffffffffffffffffffff8316156101595760405173ffffffffffffffffffffffffffffffffffffffff84168152602090f35b7f8caac8050000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff1660045260245260446000fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6060810190811067ffffffffffffffff8211176101ef57604052565b6101a4565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176101ef57604052565b9291909283519060005b8281106102525750019081526020019150565b806020809288010151818401520161023f56fea2646970667358221220be04d6b1fea99f8da63c42ae89d7f45bd43865e722cddb9cb70f1713011e9fe264736f6c634300081c00336080806040523460135760d7908160198239f35b600080fdfe6080806040526004361015601257600080fd5b60003560e01c908163e16b4a9b14606b575063faeb945014603257600080fd5b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112606657602060405160018152f35b600080fd5b3460665760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011260665780600160209252f3fea2646970667358221220475144d5737975f098d59b6def708aef8475a7fe8d5224f69418686ffb25560164736f6c634300081c0033a26469706673582212202f7238a797960bc3daf46915a2a74dbb4d0af393524597fb0ca45bdd91363d9264736f6c634300081c0033","sourceMap":"352:5669:91:-:0;;;;;;;3166:4:5;352:5669:91;;3166:4:5;352:5669:91;;;3166:4:5;352:5669:91;3166:4:5;352:5669:91;;1087:4:16;352:5669:91;;;1087:4:16;352:5669:91;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608080604052600436101561001357600080fd5b600090813560e01c9081630a9254e414613187575080631d31c39714612e065780631ed7831c14612d5d5780632ade388014612b315780633e5e3c2314612a885780633f7286f4146129df57806349dc8a00146125f95780634a6d481b146123395780634e70d5b61461223757806366d9a9a0146120dc5780636f53d0c214611d6c5780637aea0b8514611ac957806385226c8114611a215780638f23cc7c14611730578063916a17c61461165b57806394d72b271461140f5780639ceee4d8146113d4578063a34b205b14611118578063b0464fdc14611043578063b1a8b23314610deb578063b4295bca14610c4e578063b5508aa914610ba6578063ba414fa614610b63578063c45a015514610b12578063cd7033c414610abd578063d3b676a71461082e578063e20c9f7114610775578063efe2d293146104b6578063fa7626d4146104755763ff1c4cf51461016b57600080fd5b346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f1576040519060f0918281019281841067ffffffffffffffff8511176104485782938291614afc8339039082f0801561043b5773ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561041757604051907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152828160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811561043057839161041b575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b15610417576040517fb93ea7ad0000000000000000000000000000000000000000000000000000000081527fe16b4a9b00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff92909216602483015282908290604490829084905af180156103f457610402575b50808073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051670de0b6b3a764000060208201917fe16b4a9b0000000000000000000000000000000000000000000000000000000083526004815261036160248261367e565b51925af161036d61380a565b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103ff57604051907fa5982885000000000000000000000000000000000000000000000000000000008252151560048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156103f4576103e05750f35b816103ea9161367e565b6103f15780f35b80fd5b6040513d84823e3d90fd5b50fd5b8161040c9161367e565b6103f15780386102ff565b5050fd5b816104259161367e565b6103ff578138610258565b6040513d85823e3d90fd5b50604051903d90823e3d90fd5b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f157602060ff601f54166040519015158152f35b50346103f15760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f157806104ef613466565b6104f761348e565b60643567ffffffffffffffff8111610770576105179036906004016134e2565b9092737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610761576040517f7c84c69b0000000000000000000000000000000000000000000000000000000081527f150b7a020000000000000000000000000000000000000000000000000000000060048201527f150b7a020000000000000000000000000000000000000000000000000000000060248201528581604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115610765578691610746575b50509073ffffffffffffffffffffffffffffffffffffffff6020939261064c829683601f5460081c1694604051988997889687967f150b7a020000000000000000000000000000000000000000000000000000000088521660048701521660248501526044356044850152608060648501526084840191613b84565b03915afa9081156103f4578291610717575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103ff577fffffffff00000000000000000000000000000000000000000000000000000000604051917f7c84c69b0000000000000000000000000000000000000000000000000000000083521660048201527f150b7a020000000000000000000000000000000000000000000000000000000060248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156103f4576103e05750f35b610739915060203d60201161073f575b610731818361367e565b810190613b0f565b3861065e565b503d610727565b81610754919594939561367e565b61076157909184386105d0565b8480fd5b6040513d88823e3d90fd5b505050fd5b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f15760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b818110610802576107fe856107f28187038261367e565b60405191829182613361565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016107db565b50346103f15760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f15780610867613466565b60443567ffffffffffffffff8111610417576108879036906004016134e2565b737109709ecfa91a80626ff3989d68f67f5b1dd12d9291923b15610770576040517f7c84c69b0000000000000000000000000000000000000000000000000000000081527f8943ec020000000000000000000000000000000000000000000000000000000060048201527f8943ec020000000000000000000000000000000000000000000000000000000060248201528481604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115610ab2578591610a9d575b505060209173ffffffffffffffffffffffffffffffffffffffff80601f5460081c16916109b3604051968795869485947f8943ec020000000000000000000000000000000000000000000000000000000086521660048501526024356024850152606060448501526064840191613b84565b03915afa9081156103f4578291610a7e575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103ff577fffffffff00000000000000000000000000000000000000000000000000000000604051917f7c84c69b0000000000000000000000000000000000000000000000000000000083521660048201527f8943ec020000000000000000000000000000000000000000000000000000000060248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156103f4576103e05750f35b610a97915060203d60201161073f57610731818361367e565b386109c5565b81610aa79161367e565b610770578338610941565b6040513d87823e3d90fd5b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f157602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051908152f35b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f157602073ffffffffffffffffffffffffffffffffffffffff815416604051908152f35b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f1576020610b9c613bc3565b6040519015158152f35b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f157601954610be1816136eb565b91610bef604051938461367e565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b838310610c3157604051806107fe8782613510565b600160208192610c4085613703565b815201920192019190610c1c565b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f157806040517fa19dbf0000000000000000000000000000000000000000000000000000000000602082015230602482015260248152610cbc60448261367e565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103ff5781610d1791604051809381927ff28dceb30000000000000000000000000000000000000000000000000000000083526020600484015260248301906133b1565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156103f457610dd6575b5073ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b156103ff578160405180927fb93ea7ad000000000000000000000000000000000000000000000000000000008252818381610dc56004820190610123602060408401937fe16b4a9b0000000000000000000000000000000000000000000000000000000081520152565b03925af180156103f4576103e05750f35b81610de09161367e565b6103f1578038610d3c565b50346103f15760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f15780610e24613466565b610e2c61348e565b6044359073ffffffffffffffffffffffffffffffffffffffff82168092036107705760843567ffffffffffffffff811161076157610e6e9036906004016134e2565b909260a43567ffffffffffffffff811161103f57610e909036906004016134e2565b949095737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15611030576040517f7c84c69b0000000000000000000000000000000000000000000000000000000081527e23de290000000000000000000000000000000000000000000000000000000060048201527e23de290000000000000000000000000000000000000000000000000000000060248201528881604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561103457899161101b575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c1693843b156110175773ffffffffffffffffffffffffffffffffffffffff978997610fe78995610dc5948c986040519d8e9c8d9b8c9a7e23de29000000000000000000000000000000000000000000000000000000008c521660048b01521660248901526044880152606435606488015260c0608488015260c4870191613b84565b917ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8584030160a4860152613b84565b8880fd5b816110259161367e565b611030578738610f48565b8780fd5b6040513d8b823e3d90fd5b8680fd5b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f157601c5461107e816136eb565b9161108c604051938461367e565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b8383106110ce57604051806107fe878261358e565b600260206001926040516110e181613633565b73ffffffffffffffffffffffffffffffffffffffff8654168152611106858701613868565b838201528152019201920191906110b9565b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f1578073ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103ff57604051907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156103f4576113bf575b5073ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b156103ff578160405180927fb93ea7ad00000000000000000000000000000000000000000000000000000000825281838161125c6004820190610123602060408401937fe16b4a9b0000000000000000000000000000000000000000000000000000000081520152565b03925af180156103f4576113aa575b506024602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051928380927f1a9b23370000000000000000000000000000000000000000000000000000000082527fe16b4a9b0000000000000000000000000000000000000000000000000000000060048301525afa9081156103f457829161137b575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103ff5773ffffffffffffffffffffffffffffffffffffffff604051917f515361f600000000000000000000000000000000000000000000000000000000835216600482015261012360248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156103f4576103e05750f35b61139d915060203d6020116113a3575b611395818361367e565b8101906136bf565b386112ec565b503d61138b565b816113b49161367e565b6103f157803861126b565b816113c99161367e565b6103f15780386111d3565b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f15760206040516101238152f35b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f157806040517f1c3812cc0000000000000000000000000000000000000000000000000000000060208201527fe16b4a9b0000000000000000000000000000000000000000000000000000000060248201526024815261149d60448261367e565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103ff57816114f891604051809381927ff28dceb30000000000000000000000000000000000000000000000000000000083526020600484015260248301906133b1565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156103f457611646575b5073ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103ff57604051907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156103f457611631575b5073ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b156103ff578180916024604051809481937f4fcf3eca0000000000000000000000000000000000000000000000000000000083527fe16b4a9b0000000000000000000000000000000000000000000000000000000060048401525af180156103f4576103e05750f35b8161163b9161367e565b6103f15780386115a9565b816116509161367e565b6103f157803861151d565b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f157601d54611696816136eb565b916116a4604051938461367e565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b8383106116e657604051806107fe878261358e565b600260206001926040516116f981613633565b73ffffffffffffffffffffffffffffffffffffffff865416815261171e858701613868565b838201528152019201920191906116d1565b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f1576040519060f0918281019281841067ffffffffffffffff8511176104485782938291614afc8339039082f0801561043b5773ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561041757604051907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152828160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115610430578391611a0c575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c1690813b156104175773ffffffffffffffffffffffffffffffffffffffff604484928360405195869485937fb93ea7ad0000000000000000000000000000000000000000000000000000000085527ffaeb94500000000000000000000000000000000000000000000000000000000060048601521660248401525af180156103f4576119f7575b508061195b9173ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051670de0b6b3a764000060208201917ffaeb94500000000000000000000000000000000000000000000000000000000083526004815261192760248261367e565b51925af161193c61193661380a565b91613ca9565b60405190600160208301526020825261195660408361367e565b613d27565b8073ffffffffffffffffffffffffffffffffffffffff601f5460081c1631737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103ff57604051907f98296c540000000000000000000000000000000000000000000000000000000082526004820152670de0b6b3a764000060248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156103f4576103e05750f35b81611a019161367e565b6103f15780386118c2565b81611a169161367e565b6103ff57813861181e565b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f157601a54611a5c816136eb565b91611a6a604051938461367e565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b838310611aac57604051806107fe8782613510565b600160208192611abb85613703565b815201920192019190611a97565b50346103f15760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f15780611b02613466565b611b0a61348e565b60843567ffffffffffffffff811161077057611b2a9036906004016134e2565b9092737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610761576040517f7c84c69b0000000000000000000000000000000000000000000000000000000081527ff23a6e610000000000000000000000000000000000000000000000000000000060048201527ff23a6e610000000000000000000000000000000000000000000000000000000060248201528581604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115610765578691611d51575b50509073ffffffffffffffffffffffffffffffffffffffff60209392611c67829683601f5460081c1694604051988997889687967ff23a6e610000000000000000000000000000000000000000000000000000000088521660048701521660248501526044356044850152606435606485015260a0608485015260a4840191613b84565b03915afa9081156103f4578291611d32575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103ff577fffffffff00000000000000000000000000000000000000000000000000000000604051917f7c84c69b0000000000000000000000000000000000000000000000000000000083521660048201527ff23a6e610000000000000000000000000000000000000000000000000000000060248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156103f4576103e05750f35b611d4b915060203d60201161073f57610731818361367e565b38611c79565b81611d5f919594939561367e565b6107615790918438611be3565b50346103f15760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f15780611da5613466565b611dad61348e565b9060443567ffffffffffffffff811161077057611dce9036906004016134b1565b92909160643567ffffffffffffffff81116120d857611df19036906004016134b1565b9060843567ffffffffffffffff811161103057611e129036906004016134e2565b919092737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15611017576040517f7c84c69b0000000000000000000000000000000000000000000000000000000081527fbc197c810000000000000000000000000000000000000000000000000000000060048201527fbc197c810000000000000000000000000000000000000000000000000000000060248201528981604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156120cd578a916120b8575b5050601f5460081c73ffffffffffffffffffffffffffffffffffffffff169660405198899788977fbc197c8100000000000000000000000000000000000000000000000000000000895273ffffffffffffffffffffffffffffffffffffffff16600489015273ffffffffffffffffffffffffffffffffffffffff1660248801526044870160a0905260a4870190611f6292613b47565b908582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc016064870152611f9692613b47565b908382037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc016084850152611fca92613b84565b03815a93602094fa9081156103f4578291612099575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103ff577fffffffff00000000000000000000000000000000000000000000000000000000604051917f7c84c69b0000000000000000000000000000000000000000000000000000000083521660048201527fbc197c810000000000000000000000000000000000000000000000000000000060248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156103f4576103e05750f35b6120b2915060203d60201161073f57610731818361367e565b38611fe0565b816120c29161367e565b611017578838611ecc565b6040513d8c823e3d90fd5b8580fd5b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f157601b54612117816136eb565b612124604051918261367e565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b8383106121fc57868587604051928392602084019060208552518091526040840160408260051b8601019392905b82821061219157505050500390f35b919360206121ec827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc06001959799849503018652885190836121dc83516040845260408401906133b1565b9201519084818403910152613410565b9601920192018594939192612182565b6002602060019260405161220f81613633565b61221886613703565b8152612225858701613868565b83820152815201920192019190612154565b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f157737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103f157806040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152670de0b6b3a76400006024820152818160448183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156103f457612324575b5080808061232193670de0b6b3a764000073ffffffffffffffffffffffffffffffffffffffff601f5460081c165af161231b61380a565b50613ca9565b80f35b8161232e9161367e565b6103f15780386122e4565b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f1576040519060f0918281019281841067ffffffffffffffff8511176104485782938291614afc8339039082f0801561043b5773ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561041757604051907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152828160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156104305783916125e4575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b15610417576040517fb93ea7ad0000000000000000000000000000000000000000000000000000000081527fe16b4a9b00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff92909216602483015282908290604490829084905af180156103f4576125cf575b508061252b9173ffffffffffffffffffffffffffffffffffffffff601f5460081c166040518260208201917fe16b4a9b0000000000000000000000000000000000000000000000000000000083526004815261192760248261367e565b6004602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051928380927fe16b4a9b0000000000000000000000000000000000000000000000000000000082525afa80156103f457829061258e575b6123219150613ca9565b506020813d6020116125c7575b816125a86020938361367e565b810103126125c3575180151581036125c35761232190612584565b5080fd5b3d915061259b565b816125d99161367e565b6103f15780386124ce565b816125ee9161367e565b6103ff578138612427565b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f1578073ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103ff57604051907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156103f4576129ca575b5073ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b156103ff578160405180927fb93ea7ad00000000000000000000000000000000000000000000000000000000825281838161273d6004820190610123602060408401937fe16b4a9b0000000000000000000000000000000000000000000000000000000081520152565b03925af180156103f4576129b5575b5073ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103ff57604051907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156103f4576129a0575b5073ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b156103ff578180916024604051809481937f4fcf3eca0000000000000000000000000000000000000000000000000000000083527fe16b4a9b0000000000000000000000000000000000000000000000000000000060048401525af180156103f45761298b575b506024602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051928380927f1a9b23370000000000000000000000000000000000000000000000000000000082527fe16b4a9b0000000000000000000000000000000000000000000000000000000060048301525afa9081156103f457829161296c575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103ff5773ffffffffffffffffffffffffffffffffffffffff604051917f515361f60000000000000000000000000000000000000000000000000000000083521660048201528160248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156103f4576103e05750f35b612985915060203d6020116113a357611395818361367e565b386128df565b816129959161367e565b6103f157803861285e565b816129aa9161367e565b6103f15780386127d8565b816129bf9161367e565b6103f157803861274c565b816129d49161367e565b6103f15780386126b4565b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f15760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b818110612a5c576107fe856107f28187038261367e565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201612a45565b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f15760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b818110612b05576107fe856107f28187038261367e565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201612aee565b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f157601e54612b6c816136eb565b612b79604051918261367e565b818152601e83526020810191837f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350845b838310612cc75786858760405192839260208401906020855251809152604084019160408260051b8601019392815b838310612be55786860387f35b9193957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09086929496030183528551906020604082019273ffffffffffffffffffffffffffffffffffffffff81511683520151916040602083015282518091526060820190602060608260051b850101940192855b828110612c7e57505050505060208060019297019301930190928695949293612bd8565b9091929394602080612cba837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0876001960301895289516133b1565b9701950193929101612c5a565b604051612cd381613633565b73ffffffffffffffffffffffffffffffffffffffff8354168152600183018054612cfc816136eb565b91612d0a604051938461367e565b8183528a526020808b20908b9084015b838210612d40575050505060019282602092836002950152815201920192019190612ba9565b600160208192612d4f86613703565b815201930191019091612d1a565b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f15760405180916020601654928381520191601682527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289915b818110612dda576107fe856107f28187038261367e565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201612dc3565b50346103f157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f15773ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156125c357604051907fca669fa7000000000000000000000000000000000000000000000000000000008252600482015281808260248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561043b57613177575b905073ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b156103ff578160405180927fb93ea7ad000000000000000000000000000000000000000000000000000000008252818381612f4b6004820190610123602060408401937fe16b4a9b0000000000000000000000000000000000000000000000000000000081520152565b03925af180156103f457613162575b506040517f5b4d6d6a0000000000000000000000000000000000000000000000000000000060208201527fe16b4a9b00000000000000000000000000000000000000000000000000000000602482015260248152612fb960448261367e565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103ff578161301491604051809381927ff28dceb30000000000000000000000000000000000000000000000000000000083526020600484015260248301906133b1565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156103f45761314d575b5073ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103ff57604051907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156103f457610dd6575073ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b156103ff578160405180927fb93ea7ad000000000000000000000000000000000000000000000000000000008252818381610dc56004820190610123602060408401937fe16b4a9b0000000000000000000000000000000000000000000000000000000081520152565b816131579161367e565b6103f1578038613039565b8161316c9161367e565b6103f1578038612f5a565b6131809161367e565b3881612ec1565b9050346125c357817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126125c357610a688082019082821067ffffffffffffffff83111761333457908291613dde8339039082f0801561043b576040516102b68082019082821067ffffffffffffffff831117613307579082916148468339039083f080156103f45773ffffffffffffffffffffffffffffffffffffffff6044816020931693847fffffffffffffffffffffffff00000000000000000000000000000000000000008554161784558560405195869485937f32c02a140000000000000000000000000000000000000000000000000000000085521660048401528160248401525af19081156103f45782916132e8575b507fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00601f549260081b16911617601f5580f35b613301915060203d6020116113a357611395818361367e565b3861329f565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b602060408183019282815284518094520192019060005b8181106133855750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101613378565b919082519283825260005b8481106133fb5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b806020809284010151828286010152016133bc565b906020808351928381520192019060005b81811061342e5750505090565b82517fffffffff0000000000000000000000000000000000000000000000000000000016845260209384019390920191600101613421565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361348957565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361348957565b9181601f840112156134895782359167ffffffffffffffff8311613489576020808501948460051b01011161348957565b9181601f840112156134895782359167ffffffffffffffff8311613489576020838186019501011161348957565b602081016020825282518091526040820191602060408360051b8301019401926000915b83831061354357505050505090565b909192939460208061357f837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0866001960301875289516133b1565b97019301930191939290613534565b602081016020825282518091526040820191602060408360051b8301019401926000915b8383106135c157505050505090565b9091929394602080613624837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190613410565b970193019301919392906135b2565b6040810190811067ffffffffffffffff82111761364f57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761364f57604052565b90816020910312613489575173ffffffffffffffffffffffffffffffffffffffff811681036134895790565b67ffffffffffffffff811161364f5760051b60200190565b906040519160008154918260011c92600181168015613800575b6020851081146137d357848752869392918115613793575060011461374c575b5061374a9250038361367e565b565b90506000929192526020600020906000915b81831061377757505090602061374a928201013861373d565b602091935080600191548385890101520191019091849261375e565b6020935061374a9592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201013861373d565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f169361371d565b3d15613863573d9067ffffffffffffffff821161364f576040519161385760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116018461367e565b82523d6000602084013e565b606090565b90604051918281549182825260208201906000526020600020926000905b806007830110613a825761374a945491818110613a4c575b818110613a16575b8181106139e0575b8181106139aa575b818110613974575b81811061393e575b818110613909575b106138dc575b50038361367e565b7fffffffff00000000000000000000000000000000000000000000000000000000168152602001386138d4565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b1681520193016138ce565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b1681520193016138c6565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b1681520193016138be565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b1681520193016138b6565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b1681520193016138ae565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b1681520193016138a6565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b16815201930161389e565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e0820152019401920185929391613886565b9081602091031261348957517fffffffff00000000000000000000000000000000000000000000000000000000811681036134895790565b90918281527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83116134895760209260051b809284830137010190565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b60085460ff168015613bd25790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115613c9d57600091613c6b575b50151590565b90506020813d602011613c95575b81613c866020938361367e565b81010312613489575138613c65565b3d9150613c79565b6040513d6000823e3d90fd5b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561348957604051907f0c9fd58100000000000000000000000000000000000000000000000000000000825215156004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015613c9d57613d1c5750565b600061374a9161367e565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561348957613d87600091613db760405194859384937f976246310000000000000000000000000000000000000000000000000000000085526040600486015260448501906133b1565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8483030160248501526133b1565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015613c9d57613d1c575056fe60808060405234601557610a4d908161001b8239f35b600080fdfe6080604052600436101561001e575b361561001c5761001c6108ce565b005b60003560e01c806223de291461009d578063150b7a02146100985780631a9b2337146100935780634fcf3eca1461008e5780638943ec0214610089578063b93ea7ad14610084578063bc197c811461007f5763f23a6e610361000e5761076e565b61069c565b610506565b610482565b6102e0565b610281565b6101c5565b346101295760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610129576100d461012e565b506100dd610151565b506100e6610174565b5060843567ffffffffffffffff811161012957610107903690600401610197565b505060a43567ffffffffffffffff81116101295761001c903690600401610197565b600080fd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361012957565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361012957565b6044359073ffffffffffffffffffffffffffffffffffffffff8216820361012957565b9181601f840112156101295782359167ffffffffffffffff8311610129576020838186019501011161012957565b346101295760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610129576101fc61012e565b50610205610151565b5060643567ffffffffffffffff811161012957610226903690600401610197565b505060206040517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b600435907fffffffff000000000000000000000000000000000000000000000000000000008216820361012957565b346101295760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101295760206102c26102bd610252565b610997565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012957610312610252565b3033036104545773ffffffffffffffffffffffffffffffffffffffff61033782610997565b16156104045760407fffffffff000000000000000000000000000000000000000000000000000000007f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed192166000825160208101906103f1816103c586859190602060408401937fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a12081520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261082a565b51902055815190815260006020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f1c3812cc000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b7fa19dbf00000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b346101295760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610129576104b961012e565b5060443567ffffffffffffffff8111610129576104da903690600401610197565b505060206040517f8943ec02000000000000000000000000000000000000000000000000000000008152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012957610538610252565b610540610151565b903033036104545773ffffffffffffffffffffffffffffffffffffffff61056682610997565b1661061b577f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19173ffffffffffffffffffffffffffffffffffffffff7fffffffff00000000000000000000000000000000000000000000000000000000604093169116808351602081019061060a816103c587859190602060408401937fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a12081520152565b5190205582519182526020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f5b4d6d6a000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b9181601f840112156101295782359167ffffffffffffffff8311610129576020808501948460051b01011161012957565b346101295760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610129576106d361012e565b506106dc610151565b5060443567ffffffffffffffff8111610129576106fd90369060040161066b565b505060643567ffffffffffffffff81116101295761071f90369060040161066b565b505060843567ffffffffffffffff811161012957610741903690600401610197565b50506040517fbc197c81000000000000000000000000000000000000000000000000000000008152602090f35b346101295760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610129576107a561012e565b506107ae610151565b5060843567ffffffffffffffff8111610129576107cf903690600401610197565b505060206040517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761086b57604052565b6107fb565b3d156108c9573d9067ffffffffffffffff821161086b57604051916108bd60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116018461082a565b82523d6000602084013e565b606090565b6004361080156108db5750565b610911906000357fffffffff00000000000000000000000000000000000000000000000000000000811691610963575b50610997565b73ffffffffffffffffffffffffffffffffffffffff811661092f5750565b60008091604051368382378036810184815203915af461094d610870565b901561095b57602081519101f35b602081519101fd5b7fffffffff000000000000000000000000000000000000000000000000000000008092503660040360031b1b16163861090b565b73ffffffffffffffffffffffffffffffffffffffff90604051610a0f816103c57fffffffff00000000000000000000000000000000000000000000000000000000602083019516859190602060408401937fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a12081520152565b51902054169056fea2646970667358221220ed44c5036c08b0280c8000b5142f494d7443994b19b4f51b5966a25687eb12d764736f6c634300081c00336080806040523460155761029b908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c6332c02a141461002757600080fd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019f5760043573ffffffffffffffffffffffffffffffffffffffff811680820361019f5760243580916100eb6101176040519261008a846101d3565b602f84527f6041600e3d396021805130553df33d3d36153402601f57363d3d373d363d305460208501527f5af43d82803e903d91601f57fd5bf300000000000000000000000000000000006040850152604051928391602083019586610235565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826101f4565b519034f59173ffffffffffffffffffffffffffffffffffffffff8316156101595760405173ffffffffffffffffffffffffffffffffffffffff84168152602090f35b7f8caac8050000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff1660045260245260446000fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6060810190811067ffffffffffffffff8211176101ef57604052565b6101a4565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176101ef57604052565b9291909283519060005b8281106102525750019081526020019150565b806020809288010151818401520161023f56fea2646970667358221220be04d6b1fea99f8da63c42ae89d7f45bd43865e722cddb9cb70f1713011e9fe264736f6c634300081c00336080806040523460135760d7908160198239f35b600080fdfe6080806040526004361015601257600080fd5b60003560e01c908163e16b4a9b14606b575063faeb945014603257600080fd5b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112606657602060405160018152f35b600080fd5b3460665760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011260665780600160209252f3fea2646970667358221220475144d5737975f098d59b6def708aef8475a7fe8d5224f69418686ffb25560164736f6c634300081c0033a26469706673582212202f7238a797960bc3daf46915a2a74dbb4d0af393524597fb0ca45bdd91363d9264736f6c634300081c0033","sourceMap":"352:5669:91:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;473:22;352:5669;473:22;;;352:5669;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5126:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;352:5669;5174:5;2024:14:2;;;352:5669:91;336:42:2;5157:24:91;;;;352:5669;;5157:24;352:5669;5157:24;;352:5669;5157:24;;352:5669;5157:24;;;;;336:42:2;5157:24:91;;;;;;;;;;;352:5669;2024:14:2;;352:5669:91;5174:5;2024:14:2;;;352:5669:91;5187:44;;;;;352:5669;;;5187:44;;352:5669;;5187:44;;352:5669;;;;;;2024:14:2;;;352:5669:91;;;;;2024:14:2;;352:5669:91;;;;5187:44;;;;;;;;352:5669;2024:14:2;;;352:5669:91;5174:5;2024:14:2;;;352:5669:91;;;5284:7;352:5669;5294:33;;;352:5669;5294:33;;352:5669;5294:33;;;5157:24;5294:33;;:::i;:::-;5256:72;;;;;;:::i;:::-;;336:42:2;1872:20:4;;;;352:5669:91;;1872:20:4;352:5669:91;1872:20:4;;352:5669:91;;;1872:20:4;;352:5669:91;1872:20:4;;5157:24:91;1872:20:4;336:42:2;1872:20:4;;;;;;;;352:5669:91;;1872:20:4;;;;;:::i;:::-;352:5669:91;;1872:20:4;352:5669:91;;;;1872:20:4;352:5669:91;;;;;;;;;1872:20:4;352:5669:91;;5187:44;;;;;:::i;:::-;352:5669;;5187:44;;;;;352:5669;;;5157:24;;;;;:::i;:::-;352:5669;;5157:24;;;;;352:5669;;;;;;;;;5126:24;352:5669;;;;;;;;;;;5126:24;352:5669;;;;;;;;;;;;;;;;;;;;;;;1065:26:16;352:5669:91;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;3789:24:4;;352:5669:91;3789:24:4;;;;352:5669:91;;;3789:24:4;;352:5669:91;;3789:24:4;;352:5669:91;;;;;;3789:24:4;;352:5669:91;3789:24:4;352:5669:91;3789:24:4;;;;;;;;;;;352:5669:91;2024:14:2;;;352:5669:91;;2024:14:2;;352:5669:91;2024:14:2;;;3953:5:91;2024:14:2;;;352:5669:91;;;;3953:51;;;;;;;352:5669;3953:51;;352:5669;;3953:51;;352:5669;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3953:51;;;;;;;;;;;;;352:5669;3789:24:4;352:5669:91;3789:24:4;;;;352:5669:91;;;3789:24:4;352:5669:91;3789:24:4;;352:5669:91;;3789:24:4;;352:5669:91;;;;;;3789:24:4;;352:5669:91;3789:24:4;352:5669:91;3789:24:4;;;;;;;;352:5669:91;;3953:51;;;;352:5669;3953:51;352:5669;3953:51;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;3789:24:4;;;;;;;;;:::i;:::-;352:5669:91;;3789:24:4;;;;;;352:5669:91;;;;3789:24:4;352:5669:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2723:18:9;352:5669:91;;;;;;;2723:18:9;352:5669:91;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;3789:24:4;;;;;;;352:5669:91;;;3789:24:4;;352:5669:91;;3789:24:4;;352:5669:91;;;;;;3789:24:4;;352:5669:91;3789:24:4;352:5669:91;3789:24:4;;;;;;;;;;;352:5669:91;2024:14:2;;352:5669:91;2024:14:2;352:5669:91;2024:14:2;4344:5:91;2024:14:2;;;352:5669:91;;;;;4344:41;;;;;;;352:5669;4344:41;;352:5669;;4344:41;;352:5669;;;;;;;;;;;;;;;;;:::i;:::-;4344:41;;;;;;;;;;;;;352:5669;3789:24:4;352:5669:91;3789:24:4;;;;352:5669:91;;;3789:24:4;352:5669:91;3789:24:4;;352:5669:91;;3789:24:4;;352:5669:91;;;;;;3789:24:4;;352:5669:91;3789:24:4;352:5669:91;3789:24:4;;;;;;;;352:5669:91;;4344:41;;;;352:5669;4344:41;352:5669;4344:41;;;;;;;:::i;:::-;;;;3789:24:4;;;;;:::i;:::-;352:5669:91;;3789:24:4;;;;;352:5669:91;;;;;;;;;;;;;;;;;;;;;;;387:18;352:5669;;;;;;;;;;;;;;;;;;;;;;473:22;352:5669;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2575:18:9;352:5669:91;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;2575:18:9;352:5669:91;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;1505:26;1482:65;;;;1541:4;1482:65;;;352:5669;1482:65;;;;;;;:::i;:::-;336:42:2;1466:82:91;;;;352:5669;2024:14:2;352:5669:91;;;1466:82;;;;352:5669;1466:82;;1482:65;352:5669;1466:82;;2024:14:2;1482:65:91;2024:14:2;;;;:::i;:::-;1466:82:91;;;336:42:2;1466:82:91;;;;;;;;352:5669;2024:14:2;352:5669:91;1554:5;2024:14:2;;;352:5669:91;1554:45;;;;;352:5669;;;1554:45;;352:5669;1554:45;;;;;;352:5669;1554:45;;2024:14:2;352:5669:91;2024:14:2;;;;352:5669:91;;;;2024:14:2;352:5669:91;2024:14:2;1554:45:91;;;;;;;;;;;352:5669;;1466:82;;;;;:::i;:::-;352:5669;;1466:82;;;;352:5669;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;3789:24:4;;;352:5669:91;3789:24:4;;;;352:5669:91;;;3789:24:4;;352:5669:91;;3789:24:4;;352:5669:91;;;;;;3789:24:4;;352:5669:91;3789:24:4;352:5669:91;3789:24:4;;;;;;;;;;;352:5669:91;2024:14:2;;352:5669:91;3544:5;2024:14:2;;;352:5669:91;3544:74;;;;;;352:5669;;;;;;;;;;;;;3544:74;;;;;;;352:5669;3544:74;;352:5669;;3544:74;;352:5669;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;3544:74::-;352:5669;;;3789:24:4;;;;;:::i;:::-;352:5669:91;;3789:24:4;;;;352:5669:91;;;;3789:24:4;352:5669:91;;;;;;;;;;;;;;;;;;;;;;;;;2876:18:9;352:5669:91;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;2876:18:9;352:5669:91;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;2024:14:2;352:5669:91;849:5;2024:14:2;;;352:5669:91;336:42:2;832:24:91;;;;352:5669;;832:24;352:5669;832:24;;352:5669;832:24;;352:5669;832:24;;;;;336:42:2;832:24:91;;;;;;;;352:5669;2024:14:2;352:5669:91;849:5;2024:14:2;;;352:5669:91;862:45;;;;;352:5669;;;862:45;;352:5669;862:45;;;;;;352:5669;862:45;;2024:14:2;352:5669:91;2024:14:2;;;;352:5669:91;;;;2024:14:2;352:5669:91;2024:14:2;862:45:91;;;;;;;;;;;352:5669;2024:14:2;832:24:91;352:5669;;849:5;2024:14:2;;;352:5669:91;;;922:25;;;;352:5669;922:25;;352:5669;;922:25;;352:5669;922:25;;;;;;;;;;;352:5669;3533:24:4;336:42:2;3533:24:4;;;;352:5669:91;;;3533:24:4;352:5669:91;3533:24:4;;352:5669:91;;3533:24:4;;352:5669:91;;832:24;352:5669;;;3533:24:4;;;;336:42:2;3533:24:4;;;;;;;;352:5669:91;;922:25;;;;352:5669;922:25;352:5669;922:25;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;862:45;;;;;:::i;:::-;352:5669;;862:45;;;;832:24;;;;;:::i;:::-;352:5669;;832:24;;;;352:5669;;;;;;;;;;;;;;;463:5;352:5669;;;;;;;;;;;;;;;;;;2074:31;2051:66;;;;352:5669;2051:66;;;352:5669;2051:66;;;;;;;:::i;:::-;336:42:2;2035:83:91;;;;352:5669;2024:14:2;352:5669:91;;;2035:83;;;;352:5669;2035:83;;2051:66;352:5669;2035:83;;2024:14:2;2051:66:91;2024:14:2;;;;:::i;:::-;2035:83:91;;;336:42:2;2035:83:91;;;;;;;;352:5669;2024:14:2;352:5669:91;2141:5;2024:14:2;;;352:5669:91;336:42:2;2124:24:91;;;;352:5669;;2124:24;352:5669;2124:24;;352:5669;2124:24;;352:5669;2124:24;;2051:66;2124:24;;336:42:2;2124:24:91;;;;;;;;352:5669;2024:14:2;352:5669:91;2141:5;2024:14:2;;;352:5669:91;2154:27;;;;;352:5669;;;2051:66;352:5669;;2154:27;;;;352:5669;2154:27;;352:5669;;2154:27;;352:5669;2154:27;;;;;;;;352:5669;;2124:24;;;;;:::i;:::-;352:5669;;2124:24;;;;2035:83;;;;;:::i;:::-;352:5669;;2035:83;;;;352:5669;;;;;;;;;;;;3653:18:9;352:5669:91;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;3653:18:9;352:5669:91;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5512:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;352:5669;5560:5;2024:14:2;;;352:5669:91;336:42:2;5543:24:91;;;;352:5669;;5543:24;352:5669;5543:24;;352:5669;5543:24;;352:5669;5543:24;;;;;336:42:2;5543:24:91;;;;;;;;;;;352:5669;2024:14:2;;352:5669:91;5560:5;2024:14:2;;;352:5669:91;5573:44;;;;;;352:5669;5573:44;352:5669;;;;;5573:44;;;;;352:5669;5573:44;;352:5669;;5573:44;;352:5669;;5543:24;2024:14:2;;352:5669:91;5573:44;;;;;;;;352:5669;2024:14:2;;5782:16:91;2024:14:2;352:5669:91;5560:5;2024:14:2;;;352:5669:91;;;5690:7;352:5669;5700:33;;;352:5669;5700:33;;352:5669;5700:33;;;5543:24;5700:33;;:::i;:::-;5662:72;;;;5751:7;5662:72;;:::i;:::-;5751:7;;:::i;:::-;352:5669;;5782:16;5793:4;352:5669;5782:16;;352:5669;;5782:16;;;352:5669;5782:16;;:::i;:::-;;:::i;:::-;2024:14:2;352:5669:91;5560:5;2024:14:2;;;352:5669:91;5814:22;336:42:2;2349:24:4;;;;352:5669:91;;2349:24:4;352:5669:91;2349:24:4;;352:5669:91;2349:24:4;;352:5669:91;5690:7;5543:24;352:5669;;;2349:24:4;;5573:44:91;2349:24:4;336:42:2;2349:24:4;;;;;;;;352:5669:91;;5573:44;;;;;:::i;:::-;352:5669;;5573:44;;;;5543:24;;;;;:::i;:::-;352:5669;;5543:24;;;;352:5669;;;;;;;;;;;;3162:18:9;352:5669:91;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;3162:18:9;352:5669:91;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;3789:24:4;;352:5669:91;3789:24:4;;;;352:5669:91;;;3789:24:4;;352:5669:91;;3789:24:4;;352:5669:91;;;;;;3789:24:4;;352:5669:91;3789:24:4;352:5669:91;3789:24:4;;;;;;;;;;;352:5669:91;2024:14:2;;;352:5669:91;;2024:14:2;;352:5669:91;2024:14:2;;;2564:5:91;2024:14:2;;;352:5669:91;;;;2564:55;;;;;;;352:5669;2564:55;;352:5669;;2564:55;;352:5669;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2564:55;;;;;;;;;;;;;352:5669;3789:24:4;352:5669:91;3789:24:4;;;;352:5669:91;;;3789:24:4;352:5669:91;3789:24:4;;352:5669:91;;3789:24:4;;352:5669:91;;;;;;3789:24:4;;352:5669:91;3789:24:4;352:5669:91;3789:24:4;;;;;;;;352:5669:91;;2564:55;;;;352:5669;2564:55;352:5669;2564:55;;;;;;;:::i;:::-;;;;3789:24:4;;;;;;;;;:::i;:::-;352:5669:91;;3789:24:4;;;;;;352:5669:91;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;3789:24:4;;;352:5669:91;3789:24:4;;;;352:5669:91;;;3789:24:4;;352:5669:91;;3789:24:4;;352:5669:91;;;;;;3789:24:4;;352:5669:91;3789:24:4;352:5669:91;3789:24:4;;;;;;;;;;;352:5669:91;2024:14:2;;3054:5:91;2024:14:2;;;352:5669:91;;;;;3054:62;;;;;352:5669;3054:62;;352:5669;;;3054:62;;352:5669;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;3054:62;;;;352:5669;3054:62;;;;;;;;;;;352:5669;3789:24:4;352:5669:91;3789:24:4;;;;352:5669:91;;;3789:24:4;352:5669:91;3789:24:4;;352:5669:91;;3789:24:4;;352:5669:91;;;;;;3789:24:4;;352:5669:91;3789:24:4;352:5669:91;3789:24:4;;;;;;;;352:5669:91;;3054:62;;;;352:5669;3054:62;352:5669;3054:62;;;;;;;:::i;:::-;;;;3789:24:4;;;;;:::i;:::-;352:5669:91;;3789:24:4;;;;;352:5669:91;;;;;;;;;;;;;;;;;;;;;;;;;3346:26:9;352:5669:91;;;;:::i;:::-;;;;;;;:::i;:::-;;;;3346:26:9;352:5669:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;336:42:2;5892:31:91;;;;352:5669;;;;5892:31;;5908:4;352:5669;5892:31;;352:5669;5915:7;352:5669;;;;5892:31;;;;;336:42:2;5892:31:91;;;;;;;;352:5669;2024:14:2;;;;6005:7:91;2024:14:2;5915:7:91;352:5669;5955:5;2024:14:2;;;352:5669:91;5947:41;;;;:::i;:::-;;6005:7;:::i;:::-;352:5669;;5892:31;;;;;:::i;:::-;352:5669;;5892:31;;;;352:5669;;;;;;;;;;;;;;4598:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;352:5669;4646:5;2024:14:2;;;352:5669:91;336:42:2;4629:24:91;;;;352:5669;;4629:24;352:5669;4629:24;;352:5669;4629:24;;352:5669;4629:24;;;;;336:42:2;4629:24:91;;;;;;;;;;;352:5669;2024:14:2;;352:5669:91;4646:5;2024:14:2;;;352:5669:91;4659:44;;;;;352:5669;;;4659:44;;352:5669;;4659:44;;352:5669;;;;;;2024:14:2;;;352:5669:91;;;;;2024:14:2;;352:5669:91;;;;4659:44;;;;;;;;352:5669;2024:14:2;;4850:16:91;2024:14:2;352:5669:91;4646:5;2024:14:2;;;352:5669:91;;;4768:33;352:5669;4768:33;;;352:5669;4768:33;;352:5669;4768:33;;;4629:24;4768:33;;:::i;4850:16::-;352:5669;;;4646:5;2024:14:2;;;352:5669:91;;;4884:49;;;;352:5669;4884:49;;;;;;;;;;;;352:5669;4950:7;;;;:::i;4884:49::-;;352:5669;4884:49;;352:5669;4884:49;;;;;;352:5669;4884:49;;;:::i;:::-;;;352:5669;;;;;;;;;;;;4950:7;4884:49;;;352:5669;;;;4884:49;;;-1:-1:-1;4884:49:91;;4659:44;;;;;:::i;:::-;352:5669;;4659:44;;;;4629:24;;;;;:::i;:::-;352:5669;;4629:24;;;;352:5669;;;;;;;;;;;;2024:14:2;352:5669:91;1725:5;2024:14:2;;;352:5669:91;336:42:2;1708:24:91;;;;352:5669;;1708:24;352:5669;1708:24;;352:5669;1708:24;;352:5669;1708:24;;;;;336:42:2;1708:24:91;;;;;;;;352:5669;2024:14:2;352:5669:91;1725:5;2024:14:2;;;352:5669:91;1738:45;;;;;352:5669;;;1738:45;;352:5669;1738:45;;;;;;352:5669;1738:45;;2024:14:2;352:5669:91;2024:14:2;;;;352:5669:91;;;;2024:14:2;352:5669:91;2024:14:2;1738:45:91;;;;;;;;;;;352:5669;2024:14:2;352:5669:91;1725:5;2024:14:2;;;352:5669:91;336:42:2;1789:24:91;;;;352:5669;;1789:24;352:5669;1789:24;;352:5669;1789:24;;352:5669;1789:24;;1708;1789;;336:42:2;1789:24:91;;;;;;;;352:5669;2024:14:2;352:5669:91;1725:5;2024:14:2;;;352:5669:91;1819:27;;;;;352:5669;;;1708:24;352:5669;;1819:27;;;;352:5669;1819:27;;352:5669;;1819:27;;352:5669;1819:27;;;;;;;;352:5669;2024:14:2;1708:24:91;352:5669;;1725:5;2024:14:2;;;352:5669:91;;;1861:25;;;;352:5669;1861:25;;352:5669;;1861:25;;352:5669;1861:25;;;;;;;;;;;352:5669;3533:24:4;336:42:2;3533:24:4;;;;352:5669:91;;;3533:24:4;352:5669:91;3533:24:4;;352:5669:91;;3533:24:4;;352:5669:91;;1708:24;352:5669;;;3533:24:4;;;;336:42:2;3533:24:4;;;;;;;;352:5669:91;;1861:25;;;;352:5669;1861:25;352:5669;1861:25;;;;;;;:::i;:::-;;;;1819:27;;;;;:::i;:::-;352:5669;;1819:27;;;;1789:24;;;;;:::i;:::-;352:5669;;1789:24;;;;1738:45;;;;;:::i;:::-;352:5669;;1738:45;;;;1708:24;;;;;:::i;:::-;352:5669;;1708:24;;;;352:5669;;;;;;;;;;;;;;;;;3501:18:9;352:5669:91;;;;;;;3501:18:9;352:5669:91;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3794:16:9;352:5669:91;;;;;;;3794:16:9;352:5669:91;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3948:19:9;352:5669:91;;;;:::i;:::-;;;;;;;:::i;:::-;;;;3948:19:9;352:5669:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3018:16:9;352:5669:91;;;;;;;3018:16:9;352:5669:91;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1113:5;2024:14:2;;;352:5669:91;336:42:2;1096:24:91;;;;352:5669;;1096:24;352:5669;1096:24;;352:5669;1096:24;;352:5669;1096:24;;;;;;336:42:2;1096:24:91;;;;;;;;352:5669;2024:14:2;;352:5669:91;1113:5;2024:14:2;;;352:5669:91;1126:45;;;;;352:5669;;;1126:45;;352:5669;1126:45;;;;;;352:5669;1126:45;;2024:14:2;352:5669:91;2024:14:2;;;;352:5669:91;;;;2024:14:2;352:5669:91;2024:14:2;1126:45:91;;;;;;;;;;;352:5669;;;;1216:32;352:5669;1193:67;;;352:5669;1096:24;1193:67;;352:5669;1096:24;1193:67;;;;;;:::i;:::-;336:42:2;1177:84:91;;;;352:5669;2024:14:2;352:5669:91;;;1177:84;;;;352:5669;1177:84;;352:5669;;1177:84;;2024:14:2;1096:24:91;2024:14:2;;;;:::i;:::-;1177:84:91;;;336:42:2;1177:84:91;;;;;;;;352:5669;2024:14:2;352:5669:91;1113:5;2024:14:2;;;352:5669:91;336:42:2;1267:24:91;;;;352:5669;;1267:24;352:5669;1267:24;;352:5669;1267:24;;352:5669;1267:24;;1096;1267;;336:42:2;1267:24:91;;;;;;;;2024:14:2;352:5669:91;1113:5;2024:14:2;;;352:5669:91;1297:45;;;;;352:5669;;;1297:45;;352:5669;1297:45;;;;;;352:5669;1297:45;;2024:14:2;352:5669:91;2024:14:2;;;;352:5669:91;;;;2024:14:2;352:5669:91;2024:14:2;1177:84:91;;;;;:::i;:::-;352:5669;;1177:84;;;;1126:45;;;;;:::i;:::-;352:5669;;1126:45;;;;1096:24;;;;:::i;:::-;;;;;352:5669;;;;;;;;;;;;;588:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;352:5669;;615:13;;;;;;;;588:11;615:13;;;;;;;;;;;;;;;;;;;352:5669;656:41;352:5669;605:23;352:5669;;;;;;;;;;;;;;656:41;;;;;352:5669;656:41;;352:5669;;656:41;;352:5669;;;;;;656:41;;;;;;;;;;;352:5669;;;;634:65;352:5669;;;;;;;;634:65;352:5669;;;656:41;;;;605:23;656:41;605:23;656:41;;;;;;;:::i;:::-;;;;615:13;352:5669;;;;;;;;;588:11;352:5669;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;352:5669:91;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;352:5669:91;;;;;-1:-1:-1;352:5669:91;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;-1:-1:-1;352:5669:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;;;-1:-1:-1;352:5669:91;;;;;-1:-1:-1;352:5669:91;;-1:-1:-1;352:5669:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;352:5669:91;;;;:::o;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;-1:-1:-1;352:5669:91;;-1:-1:-1;352:5669:91;;-1:-1:-1;352:5669:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;352:5669:91;;;;;;;;;;;:::o;1243:204:4:-;1302:7;352:5669:91;;;;;;;1325:14:4;:::o;1298:143::-;352:5669:91;;;;1377:39:4;;352:5669:91;1377:39:4;;;352:5669:91;192:59:4;352:5669:91;;;;;1377:39:4;;;352:5669:91;1377:39:4;;;;;;;352:5669:91;1377:39:4;;;1298:143;1377:53;;;1370:60;:::o;1377:39::-;;;352:5669:91;1377:39:4;;352:5669:91;1377:39:4;;;;;;352:5669:91;1377:39:4;;;:::i;:::-;;;192:59;;;;;1377:39;;;;;;-1:-1:-1;1377:39:4;;;352:5669:91;;;;;;;;;1594:89:4;352:5669:91;1657:19:4;;;;352:5669:91;;1657:19:4;352:5669:91;1657:19:4;;352:5669:91;;1657:19:4;;;352:5669:91;-1:-1:-1;1657:19:4;;;352:5669:91;1657:19:4;;;;;;;;1594:89;:::o;1657:19::-;-1:-1:-1;1657:19:4;;;:::i;4500:120::-;352:5669:91;4589:24:4;;;;352:5669:91;-1:-1:-1;352:5669:91;;;;4589:24:4;;;;;352:5669:91;4589:24:4;;352:5669:91;4589:24:4;;;352:5669:91;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;4589:24:4;;352:5669:91;4589:24:4;;;;;;;;4500:120;:::o","linkReferences":{}},"methodIdentifiers":{"IS_TEST()":"fa7626d4","TEST_IMPLEMENTATION()":"9ceee4d8","excludeArtifacts()":"b5508aa9","excludeContracts()":"e20c9f71","excludeSelectors()":"b0464fdc","excludeSenders()":"1ed7831c","factory()":"c45a0155","failed()":"ba414fa6","hooks()":"cd7033c4","setUp()":"0a9254e4","targetArtifactSelectors()":"66d9a9a0","targetArtifacts()":"85226c81","targetContracts()":"3f7286f4","targetInterfaces()":"2ade3880","targetSelectors()":"916a17c6","targetSenders()":"3e5e3c23","test_addHook()":"a34b205b","test_addHook_revertWhenHookExists()":"1d31c397","test_addHook_revertWhenNotSelf()":"b4295bca","test_fallback()":"4a6d481b","test_fallbackRevertWhenHookNotPayable()":"ff1c4cf5","test_onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)":"6f53d0c2","test_onERC1155Received(address,address,uint256,uint256,bytes)":"7aea0b85","test_onERC721Received(address,address,uint256,bytes)":"efe2d293","test_payableFallback()":"8f23cc7c","test_receive()":"4e70d5b6","test_removeHook()":"49dc8a00","test_removeHook_revertWhenHookDoesNotExist()":"94d72b27","test_tokenReceived(address,uint256,bytes)":"d3b676a7","test_tokensReceived(address,address,address,uint256,bytes,bytes)":"b1a8b233"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"IS_TEST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TEST_IMPLEMENTATION\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"excludedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"contract Factory\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"hooks\",\"outputs\":[{\"internalType\":\"contract Hooks\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setUp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifactSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"artifact\",\"type\":\"string\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzArtifactSelector[]\",\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"targetedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetInterfaces\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"artifacts\",\"type\":\"string[]\"}],\"internalType\":\"struct StdInvariant.FuzzInterface[]\",\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"test_addHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"test_addHook_revertWhenHookExists\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"test_addHook_revertWhenNotSelf\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"test_fallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"test_fallbackRevertWhenHookNotPayable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"_ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_values\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"test_onERC1155BatchReceived\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"test_onERC1155Received\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"test_onERC721Received\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"test_payableFallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"test_receive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"test_removeHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"test_removeHook_revertWhenHookDoesNotExist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"test_tokenReceived\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_operatorData\",\"type\":\"bytes\"}],\"name\":\"test_tokensReceived\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/modules/Hooks.t.sol\":\"HooksTest\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/Factory.sol\":{\"keccak256\":\"0x5924fe583809e9c148d47c871866f6094599bb07a4d1fc2d60c814fda9c37f46\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e24d3575bf2606cd5f0f6da093e420118e018549eeb3a4ccb94f57c0e285e123\",\"dweb:/ipfs/QmRvWQt91YLJEgk5hgnRkPjDdB39tUHLYtxijYyXKdCm5J\"]},\"src/Wallet.sol\":{\"keccak256\":\"0xe01e9e937dd8d7572976ccc8ec3ec87e4a557069dafb05f85977a7b71f5c58d5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2e9ab78d33655f8e822258dff3f2d5ad01e84f6dc90174840d5a283b8e6413c1\",\"dweb:/ipfs/QmNMyYe3C1fs3cxKmUZ3S9VU5EE4WVWPVcwiGbgvbS1vrH\"]},\"src/modules/Hooks.sol\":{\"keccak256\":\"0xd1f9de45b83ae5f9f32a4d1c709d7a2b6543b1cddd09bf69d401dcdf1d154ab7\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://bf3161edf37479825588e07039752b79792666455cc0beb1ca0e873b3be31ad4\",\"dweb:/ipfs/QmYYpJeSsRgRx2oHcpvhqsNs7ZtDhVnxLmFpXz5eYcS8g4\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/Storage.sol\":{\"keccak256\":\"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da\",\"dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn\"]},\"src/modules/auth/SelfAuth.sol\":{\"keccak256\":\"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42\",\"dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W\"]},\"src/modules/interfaces/IERC1155Receiver.sol\":{\"keccak256\":\"0xa23d0bc29233a91085922ea8a7e2cbe8b5f3358d3f2c3cdc58adade9a171d9c1\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2f06b8f3ae7a45441cc26da5b2ddd15ba76d1664178958f63f536e6c5e4fd0fb\",\"dweb:/ipfs/QmR1Rnk8ciSn5s5wNLGvpE1QNRDsBVDfDT1ZXhei2brmFj\"]},\"src/modules/interfaces/IERC223Receiver.sol\":{\"keccak256\":\"0x426221c0d48b651ed692edfa5388d6e5304e94f48598a71748134b2659e3890d\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://9e1ed2fd5e390b5b943dc07c2e0ea9e524eb37263dc72c482365c159fc3659e5\",\"dweb:/ipfs/QmWRDBvb1cthVPm4BSzKX3J5GpGGSBuDokkpRK9x5aA7JR\"]},\"src/modules/interfaces/IERC721Receiver.sol\":{\"keccak256\":\"0xbe14c3b727f283a467dc2f2221d3322c5a69cd64a3aacad85acab05e94438f35\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://43ef086c509b8b88cae78f67c4bd979fd427736972cfe56f7423371ccc154e63\",\"dweb:/ipfs/Qmc7Yp7Z1dQ925gzEZYVNUXnWr3YomvWkXfaGYLZpoy8J3\"]},\"src/modules/interfaces/IERC777Receiver.sol\":{\"keccak256\":\"0xd9144d439a96b0c6439cd9a186701aa530f4f782ff09fdbf6c3ef16b78b0d4e5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d1f17484eda7184db4a00106b4952f15c1517872cbfe19663d6fce4e042729b2\",\"dweb:/ipfs/QmWdhYmLNkUpgvPpSyGHstxrFwMfhRTVmxDpe4frkUu1Qh\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"test/modules/Hooks.t.sol\":{\"keccak256\":\"0x2e377588509b29ca05761ec697baca48a9dfbbb180a132ad887e5e9199a9f597\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://99cc73bf9259877a9cbd85dc29167efec67f41d371a2594fc5220ef7bec3329a\",\"dweb:/ipfs/QmYC2jRnVmcvHUzn8V6e9qFSq69Kck3VCJFqnQWTEYEV8B\"]},\"test/utils/TestUtils.sol\":{\"keccak256\":\"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad\",\"dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log","anonymous":false},{"inputs":[{"internalType":"address","name":"","type":"address","indexed":false}],"type":"event","name":"log_address","anonymous":false},{"inputs":[{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"log_bytes","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32","indexed":false}],"type":"event","name":"log_bytes32","anonymous":false},{"inputs":[{"internalType":"int256","name":"","type":"int256","indexed":false}],"type":"event","name":"log_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address","name":"val","type":"address","indexed":false}],"type":"event","name":"log_named_address","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes","name":"val","type":"bytes","indexed":false}],"type":"event","name":"log_named_bytes","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes32","name":"val","type":"bytes32","indexed":false}],"type":"event","name":"log_named_bytes32","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false}],"type":"event","name":"log_named_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"string","name":"val","type":"string","indexed":false}],"type":"event","name":"log_named_string","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false}],"type":"event","name":"log_named_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log_string","anonymous":false},{"inputs":[{"internalType":"uint256","name":"","type":"uint256","indexed":false}],"type":"event","name":"log_uint","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"logs","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"IS_TEST","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"TEST_IMPLEMENTATION","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeArtifacts","outputs":[{"internalType":"string[]","name":"excludedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeContracts","outputs":[{"internalType":"address[]","name":"excludedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"excludedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSenders","outputs":[{"internalType":"address[]","name":"excludedSenders_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"factory","outputs":[{"internalType":"contract Factory","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"failed","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"hooks","outputs":[{"internalType":"contract Hooks","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"setUp"},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifactSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzArtifactSelector[]","name":"targetedArtifactSelectors_","type":"tuple[]","components":[{"internalType":"string","name":"artifact","type":"string"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifacts","outputs":[{"internalType":"string[]","name":"targetedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetContracts","outputs":[{"internalType":"address[]","name":"targetedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetInterfaces","outputs":[{"internalType":"struct StdInvariant.FuzzInterface[]","name":"targetedInterfaces_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"string[]","name":"artifacts","type":"string[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"targetedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSenders","outputs":[{"internalType":"address[]","name":"targetedSenders_","type":"address[]"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"test_addHook"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"test_addHook_revertWhenHookExists"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"test_addHook_revertWhenNotSelf"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"test_fallback"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"test_fallbackRevertWhenHookNotPayable"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_values","type":"uint256[]"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"view","type":"function","name":"test_onERC1155BatchReceived"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"view","type":"function","name":"test_onERC1155Received"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"view","type":"function","name":"test_onERC721Received"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"test_payableFallback"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"test_receive"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"test_removeHook"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"test_removeHook_revertWhenHookDoesNotExist"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"view","type":"function","name":"test_tokenReceived"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes","name":"_operatorData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"test_tokensReceived"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/modules/Hooks.t.sol":"HooksTest"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/Factory.sol":{"keccak256":"0x5924fe583809e9c148d47c871866f6094599bb07a4d1fc2d60c814fda9c37f46","urls":["bzz-raw://e24d3575bf2606cd5f0f6da093e420118e018549eeb3a4ccb94f57c0e285e123","dweb:/ipfs/QmRvWQt91YLJEgk5hgnRkPjDdB39tUHLYtxijYyXKdCm5J"],"license":"Apache-2.0"},"src/Wallet.sol":{"keccak256":"0xe01e9e937dd8d7572976ccc8ec3ec87e4a557069dafb05f85977a7b71f5c58d5","urls":["bzz-raw://2e9ab78d33655f8e822258dff3f2d5ad01e84f6dc90174840d5a283b8e6413c1","dweb:/ipfs/QmNMyYe3C1fs3cxKmUZ3S9VU5EE4WVWPVcwiGbgvbS1vrH"],"license":"Apache-2.0"},"src/modules/Hooks.sol":{"keccak256":"0xd1f9de45b83ae5f9f32a4d1c709d7a2b6543b1cddd09bf69d401dcdf1d154ab7","urls":["bzz-raw://bf3161edf37479825588e07039752b79792666455cc0beb1ca0e873b3be31ad4","dweb:/ipfs/QmYYpJeSsRgRx2oHcpvhqsNs7ZtDhVnxLmFpXz5eYcS8g4"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/Storage.sol":{"keccak256":"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f","urls":["bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da","dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn"],"license":"Apache-2.0"},"src/modules/auth/SelfAuth.sol":{"keccak256":"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c","urls":["bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42","dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W"],"license":"Apache-2.0"},"src/modules/interfaces/IERC1155Receiver.sol":{"keccak256":"0xa23d0bc29233a91085922ea8a7e2cbe8b5f3358d3f2c3cdc58adade9a171d9c1","urls":["bzz-raw://2f06b8f3ae7a45441cc26da5b2ddd15ba76d1664178958f63f536e6c5e4fd0fb","dweb:/ipfs/QmR1Rnk8ciSn5s5wNLGvpE1QNRDsBVDfDT1ZXhei2brmFj"],"license":"Apache-2.0"},"src/modules/interfaces/IERC223Receiver.sol":{"keccak256":"0x426221c0d48b651ed692edfa5388d6e5304e94f48598a71748134b2659e3890d","urls":["bzz-raw://9e1ed2fd5e390b5b943dc07c2e0ea9e524eb37263dc72c482365c159fc3659e5","dweb:/ipfs/QmWRDBvb1cthVPm4BSzKX3J5GpGGSBuDokkpRK9x5aA7JR"],"license":"Apache-2.0"},"src/modules/interfaces/IERC721Receiver.sol":{"keccak256":"0xbe14c3b727f283a467dc2f2221d3322c5a69cd64a3aacad85acab05e94438f35","urls":["bzz-raw://43ef086c509b8b88cae78f67c4bd979fd427736972cfe56f7423371ccc154e63","dweb:/ipfs/Qmc7Yp7Z1dQ925gzEZYVNUXnWr3YomvWkXfaGYLZpoy8J3"],"license":"Apache-2.0"},"src/modules/interfaces/IERC777Receiver.sol":{"keccak256":"0xd9144d439a96b0c6439cd9a186701aa530f4f782ff09fdbf6c3ef16b78b0d4e5","urls":["bzz-raw://d1f17484eda7184db4a00106b4952f15c1517872cbfe19663d6fce4e042729b2","dweb:/ipfs/QmWdhYmLNkUpgvPpSyGHstxrFwMfhRTVmxDpe4frkUu1Qh"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"test/modules/Hooks.t.sol":{"keccak256":"0x2e377588509b29ca05761ec697baca48a9dfbbb180a132ad887e5e9199a9f597","urls":["bzz-raw://99cc73bf9259877a9cbd85dc29167efec67f41d371a2594fc5220ef7bec3329a","dweb:/ipfs/QmYC2jRnVmcvHUzn8V6e9qFSq69Kck3VCJFqnQWTEYEV8B"],"license":"Apache-2.0"},"test/utils/TestUtils.sol":{"keccak256":"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79","urls":["bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad","dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa"],"license":"Apache-2.0"}},"version":1},"id":91} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Hooks.t.sol/MockImplementation.json b/contracts/artifacts/wallet-contracts-v3/Hooks.t.sol/MockImplementation.json new file mode 100644 index 00000000..dcea4a2e --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Hooks.t.sol/MockImplementation.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"testFunction","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"testPayableFunction","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"payable"}],"bytecode":{"object":"0x6080806040523460135760d7908160198239f35b600080fdfe6080806040526004361015601257600080fd5b60003560e01c908163e16b4a9b14606b575063faeb945014603257600080fd5b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112606657602060405160018152f35b600080fd5b3460665760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011260665780600160209252f3fea2646970667358221220475144d5737975f098d59b6def708aef8475a7fe8d5224f69418686ffb25560164736f6c634300081c0033","sourceMap":"6023:200:91:-:0;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080806040526004361015601257600080fd5b60003560e01c908163e16b4a9b14606b575063faeb945014603257600080fd5b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112606657602060405160018152f35b600080fd5b3460665760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011260665780600160209252f3fea2646970667358221220475144d5737975f098d59b6def708aef8475a7fe8d5224f69418686ffb25560164736f6c634300081c0033","sourceMap":"6023:200:91:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6122:4;6023:200;;;;;;;;;;;;;;;;;;;6122:4;6023:200;;;","linkReferences":{}},"methodIdentifiers":{"testFunction()":"e16b4a9b","testPayableFunction()":"faeb9450"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"testFunction\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"testPayableFunction\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/modules/Hooks.t.sol\":\"MockImplementation\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/Factory.sol\":{\"keccak256\":\"0x5924fe583809e9c148d47c871866f6094599bb07a4d1fc2d60c814fda9c37f46\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e24d3575bf2606cd5f0f6da093e420118e018549eeb3a4ccb94f57c0e285e123\",\"dweb:/ipfs/QmRvWQt91YLJEgk5hgnRkPjDdB39tUHLYtxijYyXKdCm5J\"]},\"src/Wallet.sol\":{\"keccak256\":\"0xe01e9e937dd8d7572976ccc8ec3ec87e4a557069dafb05f85977a7b71f5c58d5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2e9ab78d33655f8e822258dff3f2d5ad01e84f6dc90174840d5a283b8e6413c1\",\"dweb:/ipfs/QmNMyYe3C1fs3cxKmUZ3S9VU5EE4WVWPVcwiGbgvbS1vrH\"]},\"src/modules/Hooks.sol\":{\"keccak256\":\"0xd1f9de45b83ae5f9f32a4d1c709d7a2b6543b1cddd09bf69d401dcdf1d154ab7\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://bf3161edf37479825588e07039752b79792666455cc0beb1ca0e873b3be31ad4\",\"dweb:/ipfs/QmYYpJeSsRgRx2oHcpvhqsNs7ZtDhVnxLmFpXz5eYcS8g4\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/Storage.sol\":{\"keccak256\":\"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da\",\"dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn\"]},\"src/modules/auth/SelfAuth.sol\":{\"keccak256\":\"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42\",\"dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W\"]},\"src/modules/interfaces/IERC1155Receiver.sol\":{\"keccak256\":\"0xa23d0bc29233a91085922ea8a7e2cbe8b5f3358d3f2c3cdc58adade9a171d9c1\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2f06b8f3ae7a45441cc26da5b2ddd15ba76d1664178958f63f536e6c5e4fd0fb\",\"dweb:/ipfs/QmR1Rnk8ciSn5s5wNLGvpE1QNRDsBVDfDT1ZXhei2brmFj\"]},\"src/modules/interfaces/IERC223Receiver.sol\":{\"keccak256\":\"0x426221c0d48b651ed692edfa5388d6e5304e94f48598a71748134b2659e3890d\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://9e1ed2fd5e390b5b943dc07c2e0ea9e524eb37263dc72c482365c159fc3659e5\",\"dweb:/ipfs/QmWRDBvb1cthVPm4BSzKX3J5GpGGSBuDokkpRK9x5aA7JR\"]},\"src/modules/interfaces/IERC721Receiver.sol\":{\"keccak256\":\"0xbe14c3b727f283a467dc2f2221d3322c5a69cd64a3aacad85acab05e94438f35\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://43ef086c509b8b88cae78f67c4bd979fd427736972cfe56f7423371ccc154e63\",\"dweb:/ipfs/Qmc7Yp7Z1dQ925gzEZYVNUXnWr3YomvWkXfaGYLZpoy8J3\"]},\"src/modules/interfaces/IERC777Receiver.sol\":{\"keccak256\":\"0xd9144d439a96b0c6439cd9a186701aa530f4f782ff09fdbf6c3ef16b78b0d4e5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d1f17484eda7184db4a00106b4952f15c1517872cbfe19663d6fce4e042729b2\",\"dweb:/ipfs/QmWdhYmLNkUpgvPpSyGHstxrFwMfhRTVmxDpe4frkUu1Qh\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"test/modules/Hooks.t.sol\":{\"keccak256\":\"0x2e377588509b29ca05761ec697baca48a9dfbbb180a132ad887e5e9199a9f597\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://99cc73bf9259877a9cbd85dc29167efec67f41d371a2594fc5220ef7bec3329a\",\"dweb:/ipfs/QmYC2jRnVmcvHUzn8V6e9qFSq69Kck3VCJFqnQWTEYEV8B\"]},\"test/utils/TestUtils.sol\":{\"keccak256\":\"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad\",\"dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"pure","type":"function","name":"testFunction","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"payable","type":"function","name":"testPayableFunction","outputs":[{"internalType":"bool","name":"","type":"bool"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/modules/Hooks.t.sol":"MockImplementation"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/Factory.sol":{"keccak256":"0x5924fe583809e9c148d47c871866f6094599bb07a4d1fc2d60c814fda9c37f46","urls":["bzz-raw://e24d3575bf2606cd5f0f6da093e420118e018549eeb3a4ccb94f57c0e285e123","dweb:/ipfs/QmRvWQt91YLJEgk5hgnRkPjDdB39tUHLYtxijYyXKdCm5J"],"license":"Apache-2.0"},"src/Wallet.sol":{"keccak256":"0xe01e9e937dd8d7572976ccc8ec3ec87e4a557069dafb05f85977a7b71f5c58d5","urls":["bzz-raw://2e9ab78d33655f8e822258dff3f2d5ad01e84f6dc90174840d5a283b8e6413c1","dweb:/ipfs/QmNMyYe3C1fs3cxKmUZ3S9VU5EE4WVWPVcwiGbgvbS1vrH"],"license":"Apache-2.0"},"src/modules/Hooks.sol":{"keccak256":"0xd1f9de45b83ae5f9f32a4d1c709d7a2b6543b1cddd09bf69d401dcdf1d154ab7","urls":["bzz-raw://bf3161edf37479825588e07039752b79792666455cc0beb1ca0e873b3be31ad4","dweb:/ipfs/QmYYpJeSsRgRx2oHcpvhqsNs7ZtDhVnxLmFpXz5eYcS8g4"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/Storage.sol":{"keccak256":"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f","urls":["bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da","dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn"],"license":"Apache-2.0"},"src/modules/auth/SelfAuth.sol":{"keccak256":"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c","urls":["bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42","dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W"],"license":"Apache-2.0"},"src/modules/interfaces/IERC1155Receiver.sol":{"keccak256":"0xa23d0bc29233a91085922ea8a7e2cbe8b5f3358d3f2c3cdc58adade9a171d9c1","urls":["bzz-raw://2f06b8f3ae7a45441cc26da5b2ddd15ba76d1664178958f63f536e6c5e4fd0fb","dweb:/ipfs/QmR1Rnk8ciSn5s5wNLGvpE1QNRDsBVDfDT1ZXhei2brmFj"],"license":"Apache-2.0"},"src/modules/interfaces/IERC223Receiver.sol":{"keccak256":"0x426221c0d48b651ed692edfa5388d6e5304e94f48598a71748134b2659e3890d","urls":["bzz-raw://9e1ed2fd5e390b5b943dc07c2e0ea9e524eb37263dc72c482365c159fc3659e5","dweb:/ipfs/QmWRDBvb1cthVPm4BSzKX3J5GpGGSBuDokkpRK9x5aA7JR"],"license":"Apache-2.0"},"src/modules/interfaces/IERC721Receiver.sol":{"keccak256":"0xbe14c3b727f283a467dc2f2221d3322c5a69cd64a3aacad85acab05e94438f35","urls":["bzz-raw://43ef086c509b8b88cae78f67c4bd979fd427736972cfe56f7423371ccc154e63","dweb:/ipfs/Qmc7Yp7Z1dQ925gzEZYVNUXnWr3YomvWkXfaGYLZpoy8J3"],"license":"Apache-2.0"},"src/modules/interfaces/IERC777Receiver.sol":{"keccak256":"0xd9144d439a96b0c6439cd9a186701aa530f4f782ff09fdbf6c3ef16b78b0d4e5","urls":["bzz-raw://d1f17484eda7184db4a00106b4952f15c1517872cbfe19663d6fce4e042729b2","dweb:/ipfs/QmWdhYmLNkUpgvPpSyGHstxrFwMfhRTVmxDpe4frkUu1Qh"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"test/modules/Hooks.t.sol":{"keccak256":"0x2e377588509b29ca05761ec697baca48a9dfbbb180a132ad887e5e9199a9f597","urls":["bzz-raw://99cc73bf9259877a9cbd85dc29167efec67f41d371a2594fc5220ef7bec3329a","dweb:/ipfs/QmYC2jRnVmcvHUzn8V6e9qFSq69Kck3VCJFqnQWTEYEV8B"],"license":"Apache-2.0"},"test/utils/TestUtils.sol":{"keccak256":"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79","urls":["bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad","dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa"],"license":"Apache-2.0"}},"version":1},"id":91} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/IAccount.sol/IAccount.json b/contracts/artifacts/wallet-contracts-v3/IAccount.sol/IAccount.json new file mode 100644 index 00000000..40e8bf14 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/IAccount.sol/IAccount.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"validateUserOp","inputs":[{"name":"userOp","type":"tuple","internalType":"struct PackedUserOperation","components":[{"name":"sender","type":"address","internalType":"address"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"initCode","type":"bytes","internalType":"bytes"},{"name":"callData","type":"bytes","internalType":"bytes"},{"name":"accountGasLimits","type":"bytes32","internalType":"bytes32"},{"name":"preVerificationGas","type":"uint256","internalType":"uint256"},{"name":"gasFees","type":"bytes32","internalType":"bytes32"},{"name":"paymasterAndData","type":"bytes","internalType":"bytes"},{"name":"signature","type":"bytes","internalType":"bytes"}]},{"name":"userOpHash","type":"bytes32","internalType":"bytes32"},{"name":"missingAccountFunds","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"validationData","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)":"19822f7c"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"accountGasLimits\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"gasFees\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct PackedUserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"userOpHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"missingAccountFunds\",\"type\":\"uint256\"}],\"name\":\"validateUserOp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"validationData\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)\":{\"details\":\"Must validate caller is the entryPoint. Must validate the signature and nonce\",\"params\":{\"missingAccountFunds\":\"- Missing funds on the account's deposit in the entrypoint. This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call. The excess is left as a deposit in the entrypoint for future calls. Can be withdrawn anytime using \\\"entryPoint.withdrawTo()\\\". In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.\",\"userOp\":\"- The operation that is about to be executed.\",\"userOpHash\":\"- Hash of the user's request data. can be used as the basis for signature.\"},\"returns\":{\"validationData\":\" - Packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode. <20-byte> aggregatorOrSigFail - 0 for valid signature, 1 to mark signature failure, otherwise, an address of an \\\"aggregator\\\" contract. <6-byte> validUntil - Last timestamp this operation is valid at, or 0 for \\\"indefinitely\\\" <6-byte> validAfter - First timestamp this operation is valid If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure. Note that the validation code cannot use block.timestamp (or block.number) directly.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)\":{\"notice\":\"Validate user's signature and nonce the entryPoint will make the call to the recipient only if this validation call returns successfully. signature failure should be reported by returning SIG_VALIDATION_FAILED (1). This allows making a \\\"simulation call\\\" without a valid signature Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/modules/interfaces/IAccount.sol\":\"IAccount\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/modules/interfaces/IAccount.sol\":{\"keccak256\":\"0x64ca3bb59ec4fc0a60d80402802365e2d5226afe7e7aabe3b21df936c84f2bcb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ccfd2381e1874cdec2f473a9a17799a3b57360c0593d68ee66fcea9c16eb39b4\",\"dweb:/ipfs/QmcjbJpGz3Exmu4fsj953Y2bG8rtQaVMEFUgT6W2dUXomr\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"struct PackedUserOperation","name":"userOp","type":"tuple","components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"initCode","type":"bytes"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"bytes32","name":"accountGasLimits","type":"bytes32"},{"internalType":"uint256","name":"preVerificationGas","type":"uint256"},{"internalType":"bytes32","name":"gasFees","type":"bytes32"},{"internalType":"bytes","name":"paymasterAndData","type":"bytes"},{"internalType":"bytes","name":"signature","type":"bytes"}]},{"internalType":"bytes32","name":"userOpHash","type":"bytes32"},{"internalType":"uint256","name":"missingAccountFunds","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"validateUserOp","outputs":[{"internalType":"uint256","name":"validationData","type":"uint256"}]}],"devdoc":{"kind":"dev","methods":{"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)":{"details":"Must validate caller is the entryPoint. Must validate the signature and nonce","params":{"missingAccountFunds":"- Missing funds on the account's deposit in the entrypoint. This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call. The excess is left as a deposit in the entrypoint for future calls. Can be withdrawn anytime using \"entryPoint.withdrawTo()\". In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.","userOp":"- The operation that is about to be executed.","userOpHash":"- Hash of the user's request data. can be used as the basis for signature."},"returns":{"validationData":" - Packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode. <20-byte> aggregatorOrSigFail - 0 for valid signature, 1 to mark signature failure, otherwise, an address of an \"aggregator\" contract. <6-byte> validUntil - Last timestamp this operation is valid at, or 0 for \"indefinitely\" <6-byte> validAfter - First timestamp this operation is valid If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure. Note that the validation code cannot use block.timestamp (or block.number) directly."}}},"version":1},"userdoc":{"kind":"user","methods":{"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)":{"notice":"Validate user's signature and nonce the entryPoint will make the call to the recipient only if this validation call returns successfully. signature failure should be reported by returning SIG_VALIDATION_FAILED (1). This allows making a \"simulation call\" without a valid signature Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure."}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/modules/interfaces/IAccount.sol":"IAccount"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/modules/interfaces/IAccount.sol":{"keccak256":"0x64ca3bb59ec4fc0a60d80402802365e2d5226afe7e7aabe3b21df936c84f2bcb","urls":["bzz-raw://ccfd2381e1874cdec2f473a9a17799a3b57360c0593d68ee66fcea9c16eb39b4","dweb:/ipfs/QmcjbJpGz3Exmu4fsj953Y2bG8rtQaVMEFUgT6W2dUXomr"],"license":"MIT"}},"version":1},"id":55} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/IAuth.sol/IAuth.json b/contracts/artifacts/wallet-contracts-v3/IAuth.sol/IAuth.json new file mode 100644 index 00000000..0fc31201 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/IAuth.sol/IAuth.json @@ -0,0 +1 @@ +{"abi":[],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Agustin Aguilar, Michael Standen, William Hua\",\"kind\":\"dev\",\"methods\":{},\"title\":\"IAuth\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Internal interface for the auth modules\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/modules/interfaces/IAuth.sol\":\"IAuth\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/modules/interfaces/IAuth.sol\":{\"keccak256\":\"0xf6fa30af2ec91d5fbeac17c9b1f2aa73b7883c9ac98745605007e57666394b91\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://6e90a87978519462f9612f4a17e38fddc1c7bcf700ff834a1de7dce326f30353\",\"dweb:/ipfs/QmXmWAsRRK6t4jPs4VcXrouyokxdALM28D3odX7ub48WEp\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/modules/interfaces/IAuth.sol":"IAuth"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/modules/interfaces/IAuth.sol":{"keccak256":"0xf6fa30af2ec91d5fbeac17c9b1f2aa73b7883c9ac98745605007e57666394b91","urls":["bzz-raw://6e90a87978519462f9612f4a17e38fddc1c7bcf700ff834a1de7dce326f30353","dweb:/ipfs/QmXmWAsRRK6t4jPs4VcXrouyokxdALM28D3odX7ub48WEp"],"license":"Apache-2.0"}},"version":1},"id":56} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/ICheckpointer.sol/ICheckpointer.json b/contracts/artifacts/wallet-contracts-v3/ICheckpointer.sol/ICheckpointer.json new file mode 100644 index 00000000..648363a5 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/ICheckpointer.sol/ICheckpointer.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"snapshotFor","inputs":[{"name":"_wallet","type":"address","internalType":"address"},{"name":"_proof","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"snapshot","type":"tuple","internalType":"struct Snapshot","components":[{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"checkpoint","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"snapshotFor(address,bytes)":"ccce3bc8"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_wallet\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_proof\",\"type\":\"bytes\"}],\"name\":\"snapshotFor\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"checkpoint\",\"type\":\"uint256\"}],\"internalType\":\"struct Snapshot\",\"name\":\"snapshot\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Agustin Aguilar\",\"kind\":\"dev\",\"methods\":{\"snapshotFor(address,bytes)\":{\"params\":{\"_proof\":\"The proof\",\"_wallet\":\"The wallet address\"},\"returns\":{\"snapshot\":\"The snapshot\"}}},\"title\":\"ICheckpointer\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"snapshotFor(address,bytes)\":{\"notice\":\"Get the snapshot for a specific wallet\"}},\"notice\":\"Interface for the checkpointer module\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/modules/interfaces/ICheckpointer.sol\":\"ICheckpointer\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/interfaces/ICheckpointer.sol\":{\"keccak256\":\"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1\",\"dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"bytes","name":"_proof","type":"bytes"}],"stateMutability":"view","type":"function","name":"snapshotFor","outputs":[{"internalType":"struct Snapshot","name":"snapshot","type":"tuple","components":[{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"uint256","name":"checkpoint","type":"uint256"}]}]}],"devdoc":{"kind":"dev","methods":{"snapshotFor(address,bytes)":{"params":{"_proof":"The proof","_wallet":"The wallet address"},"returns":{"snapshot":"The snapshot"}}},"version":1},"userdoc":{"kind":"user","methods":{"snapshotFor(address,bytes)":{"notice":"Get the snapshot for a specific wallet"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/modules/interfaces/ICheckpointer.sol":"ICheckpointer"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/interfaces/ICheckpointer.sol":{"keccak256":"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513","urls":["bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1","dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"}},"version":1},"id":57} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/IDelegatedExtension.sol/IDelegatedExtension.json b/contracts/artifacts/wallet-contracts-v3/IDelegatedExtension.sol/IDelegatedExtension.json new file mode 100644 index 00000000..5408aaae --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/IDelegatedExtension.sol/IDelegatedExtension.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"handleSequenceDelegateCall","inputs":[{"name":"_opHash","type":"bytes32","internalType":"bytes32"},{"name":"_startingGas","type":"uint256","internalType":"uint256"},{"name":"_index","type":"uint256","internalType":"uint256"},{"name":"_numCalls","type":"uint256","internalType":"uint256"},{"name":"_space","type":"uint256","internalType":"uint256"},{"name":"_data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"handleSequenceDelegateCall(bytes32,uint256,uint256,uint256,uint256,bytes)":"4c4e814c"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_startingGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_numCalls\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_space\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"handleSequenceDelegateCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Agustin Aguilar\",\"kind\":\"dev\",\"methods\":{\"handleSequenceDelegateCall(bytes32,uint256,uint256,uint256,uint256,bytes)\":{\"params\":{\"_data\":\"The data\",\"_index\":\"The index\",\"_numCalls\":\"The number of calls\",\"_opHash\":\"The operation hash\",\"_space\":\"The space\",\"_startingGas\":\"The starting gas\"}}},\"title\":\"IDelegatedExtension\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"handleSequenceDelegateCall(bytes32,uint256,uint256,uint256,uint256,bytes)\":{\"notice\":\"Handle a sequence delegate call\"}},\"notice\":\"Interface for the delegated extension module\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/modules/interfaces/IDelegatedExtension.sol\":\"IDelegatedExtension\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/modules/interfaces/IDelegatedExtension.sol\":{\"keccak256\":\"0xa2ae897e90fd70dd4a9e172bc04d019ba9c512e72c2df65fcb6daf87dd5ceb90\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://cdf4b7c3dfb0aef6c9dbe8b2a0542018dc756ef2252d7101bcb3186192da0a11\",\"dweb:/ipfs/QmPHCVu1DJ7fBrPBYA5y3hoF3a3XFEBwYCZ1ErGaxPhcYL\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32"},{"internalType":"uint256","name":"_startingGas","type":"uint256"},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_numCalls","type":"uint256"},{"internalType":"uint256","name":"_space","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"handleSequenceDelegateCall"}],"devdoc":{"kind":"dev","methods":{"handleSequenceDelegateCall(bytes32,uint256,uint256,uint256,uint256,bytes)":{"params":{"_data":"The data","_index":"The index","_numCalls":"The number of calls","_opHash":"The operation hash","_space":"The space","_startingGas":"The starting gas"}}},"version":1},"userdoc":{"kind":"user","methods":{"handleSequenceDelegateCall(bytes32,uint256,uint256,uint256,uint256,bytes)":{"notice":"Handle a sequence delegate call"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/modules/interfaces/IDelegatedExtension.sol":"IDelegatedExtension"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/modules/interfaces/IDelegatedExtension.sol":{"keccak256":"0xa2ae897e90fd70dd4a9e172bc04d019ba9c512e72c2df65fcb6daf87dd5ceb90","urls":["bzz-raw://cdf4b7c3dfb0aef6c9dbe8b2a0542018dc756ef2252d7101bcb3186192da0a11","dweb:/ipfs/QmPHCVu1DJ7fBrPBYA5y3hoF3a3XFEBwYCZ1ErGaxPhcYL"],"license":"Apache-2.0"}},"version":1},"id":58} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/IERC1155Receiver.sol/IERC1155Receiver.json b/contracts/artifacts/wallet-contracts-v3/IERC1155Receiver.sol/IERC1155Receiver.json new file mode 100644 index 00000000..daf270d1 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/IERC1155Receiver.sol/IERC1155Receiver.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"onERC1155BatchReceived","inputs":[{"name":"operator","type":"address","internalType":"address"},{"name":"from","type":"address","internalType":"address"},{"name":"ids","type":"uint256[]","internalType":"uint256[]"},{"name":"values","type":"uint256[]","internalType":"uint256[]"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"magicValue","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"},{"type":"function","name":"onERC1155Received","inputs":[{"name":"operator","type":"address","internalType":"address"},{"name":"from","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"magicValue","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)":"bc197c81","onERC1155Received(address,address,uint256,uint256,bytes)":"f23a6e61"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"magicValue\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"magicValue\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\":{\"params\":{\"data\":\"Additional data with no specified format\",\"from\":\"The address which previously owned the token\",\"ids\":\"The list of token IDs being transferred\",\"operator\":\"The address which initiated the transfer\",\"values\":\"The amounts of each token being transferred\"},\"returns\":{\"magicValue\":\"On a success, the selector of the function that was called\"}},\"onERC1155Received(address,address,uint256,uint256,bytes)\":{\"params\":{\"data\":\"Additional data with no specified format\",\"from\":\"The address which previously owned the token\",\"operator\":\"The address which initiated the transfer\",\"tokenId\":\"The ID of the token being transferred\",\"value\":\"The amount of token being transferred\"},\"returns\":{\"magicValue\":\"On a success, the selector of the function that was called\"}}},\"title\":\"IERC1155Receiver\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\":{\"notice\":\"Called when multiple ERC1155 tokens are transferred to this contract\"},\"onERC1155Received(address,address,uint256,uint256,bytes)\":{\"notice\":\"Called when a single ERC1155 token is transferred to this contract\"}},\"notice\":\"Interface for the ERC1155 receiver module\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/modules/interfaces/IERC1155Receiver.sol\":\"IERC1155Receiver\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/modules/interfaces/IERC1155Receiver.sol\":{\"keccak256\":\"0xa23d0bc29233a91085922ea8a7e2cbe8b5f3358d3f2c3cdc58adade9a171d9c1\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2f06b8f3ae7a45441cc26da5b2ddd15ba76d1664178958f63f536e6c5e4fd0fb\",\"dweb:/ipfs/QmR1Rnk8ciSn5s5wNLGvpE1QNRDsBVDfDT1ZXhei2brmFj\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"magicValue","type":"bytes4"}]},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"magicValue","type":"bytes4"}]}],"devdoc":{"kind":"dev","methods":{"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)":{"params":{"data":"Additional data with no specified format","from":"The address which previously owned the token","ids":"The list of token IDs being transferred","operator":"The address which initiated the transfer","values":"The amounts of each token being transferred"},"returns":{"magicValue":"On a success, the selector of the function that was called"}},"onERC1155Received(address,address,uint256,uint256,bytes)":{"params":{"data":"Additional data with no specified format","from":"The address which previously owned the token","operator":"The address which initiated the transfer","tokenId":"The ID of the token being transferred","value":"The amount of token being transferred"},"returns":{"magicValue":"On a success, the selector of the function that was called"}}},"version":1},"userdoc":{"kind":"user","methods":{"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)":{"notice":"Called when multiple ERC1155 tokens are transferred to this contract"},"onERC1155Received(address,address,uint256,uint256,bytes)":{"notice":"Called when a single ERC1155 token is transferred to this contract"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/modules/interfaces/IERC1155Receiver.sol":"IERC1155Receiver"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/modules/interfaces/IERC1155Receiver.sol":{"keccak256":"0xa23d0bc29233a91085922ea8a7e2cbe8b5f3358d3f2c3cdc58adade9a171d9c1","urls":["bzz-raw://2f06b8f3ae7a45441cc26da5b2ddd15ba76d1664178958f63f536e6c5e4fd0fb","dweb:/ipfs/QmR1Rnk8ciSn5s5wNLGvpE1QNRDsBVDfDT1ZXhei2brmFj"],"license":"Apache-2.0"}},"version":1},"id":59} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/IERC1271.sol/IERC1271.json b/contracts/artifacts/wallet-contracts-v3/IERC1271.sol/IERC1271.json new file mode 100644 index 00000000..ab2ea0b6 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/IERC1271.sol/IERC1271.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"isValidSignature","inputs":[{"name":"_hash","type":"bytes32","internalType":"bytes32"},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"magicValue","type":"bytes4","internalType":"bytes4"}],"stateMutability":"view"}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"isValidSignature(bytes32,bytes)":"1626ba7e"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"magicValue\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"isValidSignature(bytes32,bytes)\":{\"details\":\"MUST return the correct magic value if the signature provided is valid for the provided hash > The bytes4 magic value to return when signature is valid is 0x1626ba7e : bytes4(keccak256(\\\"isValidSignature(bytes32,bytes)\\\") > This function MAY modify Ethereum's state\",\"params\":{\"_hash\":\"keccak256 hash that was signed\",\"_signature\":\"Signature byte array associated with _data\"},\"returns\":{\"magicValue\":\"Magic value 0x1626ba7e if the signature is valid and 0x0 otherwise\"}}},\"title\":\"IERC1271\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"isValidSignature(bytes32,bytes)\":{\"notice\":\"Verifies whether the provided signature is valid with respect to the provided hash\"}},\"notice\":\"Interface for ERC1271\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/modules/interfaces/IERC1271.sol\":\"IERC1271\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/modules/interfaces/IERC1271.sol\":{\"keccak256\":\"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b\",\"dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"view","type":"function","name":"isValidSignature","outputs":[{"internalType":"bytes4","name":"magicValue","type":"bytes4"}]}],"devdoc":{"kind":"dev","methods":{"isValidSignature(bytes32,bytes)":{"details":"MUST return the correct magic value if the signature provided is valid for the provided hash > The bytes4 magic value to return when signature is valid is 0x1626ba7e : bytes4(keccak256(\"isValidSignature(bytes32,bytes)\") > This function MAY modify Ethereum's state","params":{"_hash":"keccak256 hash that was signed","_signature":"Signature byte array associated with _data"},"returns":{"magicValue":"Magic value 0x1626ba7e if the signature is valid and 0x0 otherwise"}}},"version":1},"userdoc":{"kind":"user","methods":{"isValidSignature(bytes32,bytes)":{"notice":"Verifies whether the provided signature is valid with respect to the provided hash"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/modules/interfaces/IERC1271.sol":"IERC1271"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/modules/interfaces/IERC1271.sol":{"keccak256":"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9","urls":["bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b","dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF"],"license":"Apache-2.0"}},"version":1},"id":60} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/IERC1271.sol/IERC1271Data.json b/contracts/artifacts/wallet-contracts-v3/IERC1271.sol/IERC1271Data.json new file mode 100644 index 00000000..582efb10 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/IERC1271.sol/IERC1271Data.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"isValidSignature","inputs":[{"name":"_data","type":"bytes","internalType":"bytes"},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"magicValue","type":"bytes4","internalType":"bytes4"}],"stateMutability":"view"}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"isValidSignature(bytes,bytes)":"20c13b0b"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"magicValue\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"isValidSignature(bytes,bytes)\":{\"details\":\"MUST return the correct magic value if the signature provided is valid for the provided hash > The bytes4 magic value to return when signature is valid is 0x20c13b0b : bytes4(keccak256(\\\"isValidSignature(bytes,bytes)\\\") > This function MAY modify Ethereum's state\",\"params\":{\"_data\":\"Data that was signed\",\"_signature\":\"Signature byte array associated with _data\"},\"returns\":{\"magicValue\":\"Magic value 0x20c13b0b if the signature is valid and 0x0 otherwise\"}}},\"title\":\"IERC1271Data\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"isValidSignature(bytes,bytes)\":{\"notice\":\"Verifies whether the provided signature is valid with respect to the provided hash\"}},\"notice\":\"Deprecated interface for ERC1271 using bytes instead of bytes32\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/modules/interfaces/IERC1271.sol\":\"IERC1271Data\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/modules/interfaces/IERC1271.sol\":{\"keccak256\":\"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b\",\"dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"view","type":"function","name":"isValidSignature","outputs":[{"internalType":"bytes4","name":"magicValue","type":"bytes4"}]}],"devdoc":{"kind":"dev","methods":{"isValidSignature(bytes,bytes)":{"details":"MUST return the correct magic value if the signature provided is valid for the provided hash > The bytes4 magic value to return when signature is valid is 0x20c13b0b : bytes4(keccak256(\"isValidSignature(bytes,bytes)\") > This function MAY modify Ethereum's state","params":{"_data":"Data that was signed","_signature":"Signature byte array associated with _data"},"returns":{"magicValue":"Magic value 0x20c13b0b if the signature is valid and 0x0 otherwise"}}},"version":1},"userdoc":{"kind":"user","methods":{"isValidSignature(bytes,bytes)":{"notice":"Verifies whether the provided signature is valid with respect to the provided hash"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/modules/interfaces/IERC1271.sol":"IERC1271Data"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/modules/interfaces/IERC1271.sol":{"keccak256":"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9","urls":["bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b","dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF"],"license":"Apache-2.0"}},"version":1},"id":60} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/IERC223Receiver.sol/IERC223Receiver.json b/contracts/artifacts/wallet-contracts-v3/IERC223Receiver.sol/IERC223Receiver.json new file mode 100644 index 00000000..545aad03 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/IERC223Receiver.sol/IERC223Receiver.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"tokenReceived","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"signature","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"tokenReceived(address,uint256,bytes)":"8943ec02"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"tokenReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"signature\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"tokenReceived(address,uint256,bytes)\":{\"params\":{\"data\":\"Transaction metadata\",\"from\":\"The address which previously owned the tokens\",\"value\":\"The amount of tokens being transferred\"},\"returns\":{\"signature\":\"The signature of the function to be called\"}}},\"title\":\"IERC223Receiver\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"tokenReceived(address,uint256,bytes)\":{\"notice\":\"Called when ERC223 tokens are received by this contract\"}},\"notice\":\"Interface for the ERC223 receiver module\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/modules/interfaces/IERC223Receiver.sol\":\"IERC223Receiver\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/modules/interfaces/IERC223Receiver.sol\":{\"keccak256\":\"0x426221c0d48b651ed692edfa5388d6e5304e94f48598a71748134b2659e3890d\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://9e1ed2fd5e390b5b943dc07c2e0ea9e524eb37263dc72c482365c159fc3659e5\",\"dweb:/ipfs/QmWRDBvb1cthVPm4BSzKX3J5GpGGSBuDokkpRK9x5aA7JR\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"tokenReceived","outputs":[{"internalType":"bytes4","name":"signature","type":"bytes4"}]}],"devdoc":{"kind":"dev","methods":{"tokenReceived(address,uint256,bytes)":{"params":{"data":"Transaction metadata","from":"The address which previously owned the tokens","value":"The amount of tokens being transferred"},"returns":{"signature":"The signature of the function to be called"}}},"version":1},"userdoc":{"kind":"user","methods":{"tokenReceived(address,uint256,bytes)":{"notice":"Called when ERC223 tokens are received by this contract"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/modules/interfaces/IERC223Receiver.sol":"IERC223Receiver"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/modules/interfaces/IERC223Receiver.sol":{"keccak256":"0x426221c0d48b651ed692edfa5388d6e5304e94f48598a71748134b2659e3890d","urls":["bzz-raw://9e1ed2fd5e390b5b943dc07c2e0ea9e524eb37263dc72c482365c159fc3659e5","dweb:/ipfs/QmWRDBvb1cthVPm4BSzKX3J5GpGGSBuDokkpRK9x5aA7JR"],"license":"Apache-2.0"}},"version":1},"id":61} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/IERC721Receiver.sol/IERC721Receiver.json b/contracts/artifacts/wallet-contracts-v3/IERC721Receiver.sol/IERC721Receiver.json new file mode 100644 index 00000000..096f61fe --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/IERC721Receiver.sol/IERC721Receiver.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"onERC721Received","inputs":[{"name":"operator","type":"address","internalType":"address"},{"name":"from","type":"address","internalType":"address"},{"name":"tokenId","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"magicValue","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"onERC721Received(address,address,uint256,bytes)":"150b7a02"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"magicValue\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"onERC721Received(address,address,uint256,bytes)\":{\"params\":{\"data\":\"Additional data with no specified format\",\"from\":\"The address which previously owned the token\",\"operator\":\"The address which initiated the transfer\",\"tokenId\":\"The ID of the token being transferred\"},\"returns\":{\"magicValue\":\"On a success, the selector of the function that was called\"}}},\"title\":\"IERC721Receiver\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"onERC721Received(address,address,uint256,bytes)\":{\"notice\":\"Called when a single ERC721 token is transferred to this contract\"}},\"notice\":\"Interface for the ERC721 receiver module\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/modules/interfaces/IERC721Receiver.sol\":\"IERC721Receiver\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/modules/interfaces/IERC721Receiver.sol\":{\"keccak256\":\"0xbe14c3b727f283a467dc2f2221d3322c5a69cd64a3aacad85acab05e94438f35\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://43ef086c509b8b88cae78f67c4bd979fd427736972cfe56f7423371ccc154e63\",\"dweb:/ipfs/Qmc7Yp7Z1dQ925gzEZYVNUXnWr3YomvWkXfaGYLZpoy8J3\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"magicValue","type":"bytes4"}]}],"devdoc":{"kind":"dev","methods":{"onERC721Received(address,address,uint256,bytes)":{"params":{"data":"Additional data with no specified format","from":"The address which previously owned the token","operator":"The address which initiated the transfer","tokenId":"The ID of the token being transferred"},"returns":{"magicValue":"On a success, the selector of the function that was called"}}},"version":1},"userdoc":{"kind":"user","methods":{"onERC721Received(address,address,uint256,bytes)":{"notice":"Called when a single ERC721 token is transferred to this contract"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/modules/interfaces/IERC721Receiver.sol":"IERC721Receiver"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/modules/interfaces/IERC721Receiver.sol":{"keccak256":"0xbe14c3b727f283a467dc2f2221d3322c5a69cd64a3aacad85acab05e94438f35","urls":["bzz-raw://43ef086c509b8b88cae78f67c4bd979fd427736972cfe56f7423371ccc154e63","dweb:/ipfs/Qmc7Yp7Z1dQ925gzEZYVNUXnWr3YomvWkXfaGYLZpoy8J3"],"license":"Apache-2.0"}},"version":1},"id":62} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/IERC777Receiver.sol/IERC777Receiver.json b/contracts/artifacts/wallet-contracts-v3/IERC777Receiver.sol/IERC777Receiver.json new file mode 100644 index 00000000..3a8f2d8c --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/IERC777Receiver.sol/IERC777Receiver.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"tokensReceived","inputs":[{"name":"operator","type":"address","internalType":"address"},{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"operatorData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"tokensReceived(address,address,address,uint256,bytes,bytes)":"0023de29"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"operatorData\",\"type\":\"bytes\"}],\"name\":\"tokensReceived\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"tokensReceived(address,address,address,uint256,bytes,bytes)\":{\"params\":{\"amount\":\"The amount of tokens being transferred\",\"data\":\"Additional data with no specified format\",\"from\":\"The address which previously owned the tokens\",\"operator\":\"The address which initiated the transfer\",\"operatorData\":\"Additional data with no specified format\",\"to\":\"The address which is receiving the tokens\"}}},\"title\":\"IERC777Receiver\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"tokensReceived(address,address,address,uint256,bytes,bytes)\":{\"notice\":\"Called when tokens are received by this contract\"}},\"notice\":\"Interface for the ERC777 receiver module\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/modules/interfaces/IERC777Receiver.sol\":\"IERC777Receiver\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/modules/interfaces/IERC777Receiver.sol\":{\"keccak256\":\"0xd9144d439a96b0c6439cd9a186701aa530f4f782ff09fdbf6c3ef16b78b0d4e5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d1f17484eda7184db4a00106b4952f15c1517872cbfe19663d6fce4e042729b2\",\"dweb:/ipfs/QmWdhYmLNkUpgvPpSyGHstxrFwMfhRTVmxDpe4frkUu1Qh\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes","name":"operatorData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"tokensReceived"}],"devdoc":{"kind":"dev","methods":{"tokensReceived(address,address,address,uint256,bytes,bytes)":{"params":{"amount":"The amount of tokens being transferred","data":"Additional data with no specified format","from":"The address which previously owned the tokens","operator":"The address which initiated the transfer","operatorData":"Additional data with no specified format","to":"The address which is receiving the tokens"}}},"version":1},"userdoc":{"kind":"user","methods":{"tokensReceived(address,address,address,uint256,bytes,bytes)":{"notice":"Called when tokens are received by this contract"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/modules/interfaces/IERC777Receiver.sol":"IERC777Receiver"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/modules/interfaces/IERC777Receiver.sol":{"keccak256":"0xd9144d439a96b0c6439cd9a186701aa530f4f782ff09fdbf6c3ef16b78b0d4e5","urls":["bzz-raw://d1f17484eda7184db4a00106b4952f15c1517872cbfe19663d6fce4e042729b2","dweb:/ipfs/QmWdhYmLNkUpgvPpSyGHstxrFwMfhRTVmxDpe4frkUu1Qh"],"license":"Apache-2.0"}},"version":1},"id":63} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/IEntryPoint.sol/IEntryPoint.json b/contracts/artifacts/wallet-contracts-v3/IEntryPoint.sol/IEntryPoint.json new file mode 100644 index 00000000..a5aa29f2 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/IEntryPoint.sol/IEntryPoint.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"depositTo","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"payable"}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"depositTo(address)":"b760faf9"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"depositTo\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/modules/interfaces/IEntryPoint.sol\":\"IEntryPoint\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/modules/interfaces/IEntryPoint.sol\":{\"keccak256\":\"0xd19922ea7a8ae09072a721138dc93e175fa77ecaa3ac6f2d759d5e5e944fb665\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://20ecea69ddd4d8787c0bdc4487dea03e90f63f4296674a12728e331a78e62620\",\"dweb:/ipfs/QmZUrX8zEqfHZEJQjNtDUXGS47bj2UuRCLfbkLPrXsot1c\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"payable","type":"function","name":"depositTo"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/modules/interfaces/IEntryPoint.sol":"IEntryPoint"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/modules/interfaces/IEntryPoint.sol":{"keccak256":"0xd19922ea7a8ae09072a721138dc93e175fa77ecaa3ac6f2d759d5e5e944fb665","urls":["bzz-raw://20ecea69ddd4d8787c0bdc4487dea03e90f63f4296674a12728e331a78e62620","dweb:/ipfs/QmZUrX8zEqfHZEJQjNtDUXGS47bj2UuRCLfbkLPrXsot1c"],"license":"MIT"}},"version":1},"id":64} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/IExplicitSessionManager.sol/IExplicitSessionManager.json b/contracts/artifacts/wallet-contracts-v3/IExplicitSessionManager.sol/IExplicitSessionManager.json new file mode 100644 index 00000000..6a23fd9a --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/IExplicitSessionManager.sol/IExplicitSessionManager.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"incrementUsageLimit","inputs":[{"name":"limits","type":"tuple[]","internalType":"struct UsageLimit[]","components":[{"name":"usageHash","type":"bytes32","internalType":"bytes32"},{"name":"usageAmount","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"incrementUsageLimit((bytes32,uint256)[])":"42de1418"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"usageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"usageAmount\",\"type\":\"uint256\"}],\"internalType\":\"struct UsageLimit[]\",\"name\":\"limits\",\"type\":\"tuple[]\"}],\"name\":\"incrementUsageLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Agustin Aguilar, Michael Standen\",\"kind\":\"dev\",\"methods\":{\"incrementUsageLimit((bytes32,uint256)[])\":{\"params\":{\"limits\":\"Array of limit/session/target combinations\"}}},\"title\":\"IExplicitSessionManager\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"incrementUsageLimit((bytes32,uint256)[])\":{\"notice\":\"Increment usage for a caller's given session and target\"}},\"notice\":\"Interface for the explicit session manager\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/extensions/sessions/explicit/IExplicitSessionManager.sol\":\"IExplicitSessionManager\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/extensions/sessions/explicit/IExplicitSessionManager.sol\":{\"keccak256\":\"0xae940e96cf0677c9b0df0daee07db0293c55a21cec0b893d82eefd122815602b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://62ee98f92121ad54f78d375ec3003aab73719adec852b0d12518fe99fc6f66c6\",\"dweb:/ipfs/QmPuAX7tdga5Su1xua6LS6jR9DsV7GyCwyZLeRC8upPTKY\"]},\"src/extensions/sessions/explicit/Permission.sol\":{\"keccak256\":\"0x0bc35a04da3830c64ec13c32b57f88be6b980228f6b387e800cf70919cdcfb16\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://fcb304612f894699f8e1e40cf134abebe8f7135795bea479b04e967551c59948\",\"dweb:/ipfs/Qme4mD8dh3xU9wbscQwvL4cQcZ2Wv8Fobo2fmU29B3DirV\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"struct UsageLimit[]","name":"limits","type":"tuple[]","components":[{"internalType":"bytes32","name":"usageHash","type":"bytes32"},{"internalType":"uint256","name":"usageAmount","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"incrementUsageLimit"}],"devdoc":{"kind":"dev","methods":{"incrementUsageLimit((bytes32,uint256)[])":{"params":{"limits":"Array of limit/session/target combinations"}}},"version":1},"userdoc":{"kind":"user","methods":{"incrementUsageLimit((bytes32,uint256)[])":{"notice":"Increment usage for a caller's given session and target"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/extensions/sessions/explicit/IExplicitSessionManager.sol":"IExplicitSessionManager"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/extensions/sessions/explicit/IExplicitSessionManager.sol":{"keccak256":"0xae940e96cf0677c9b0df0daee07db0293c55a21cec0b893d82eefd122815602b","urls":["bzz-raw://62ee98f92121ad54f78d375ec3003aab73719adec852b0d12518fe99fc6f66c6","dweb:/ipfs/QmPuAX7tdga5Su1xua6LS6jR9DsV7GyCwyZLeRC8upPTKY"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/Permission.sol":{"keccak256":"0x0bc35a04da3830c64ec13c32b57f88be6b980228f6b387e800cf70919cdcfb16","urls":["bzz-raw://fcb304612f894699f8e1e40cf134abebe8f7135795bea479b04e967551c59948","dweb:/ipfs/Qme4mD8dh3xU9wbscQwvL4cQcZ2Wv8Fobo2fmU29B3DirV"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"}},"version":1},"id":37} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/IMulticall3.sol/IMulticall3.json b/contracts/artifacts/wallet-contracts-v3/IMulticall3.sol/IMulticall3.json new file mode 100644 index 00000000..b55d0a84 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/IMulticall3.sol/IMulticall3.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"aggregate","inputs":[{"name":"calls","type":"tuple[]","internalType":"struct IMulticall3.Call[]","components":[{"name":"target","type":"address","internalType":"address"},{"name":"callData","type":"bytes","internalType":"bytes"}]}],"outputs":[{"name":"blockNumber","type":"uint256","internalType":"uint256"},{"name":"returnData","type":"bytes[]","internalType":"bytes[]"}],"stateMutability":"payable"},{"type":"function","name":"aggregate3","inputs":[{"name":"calls","type":"tuple[]","internalType":"struct IMulticall3.Call3[]","components":[{"name":"target","type":"address","internalType":"address"},{"name":"allowFailure","type":"bool","internalType":"bool"},{"name":"callData","type":"bytes","internalType":"bytes"}]}],"outputs":[{"name":"returnData","type":"tuple[]","internalType":"struct IMulticall3.Result[]","components":[{"name":"success","type":"bool","internalType":"bool"},{"name":"returnData","type":"bytes","internalType":"bytes"}]}],"stateMutability":"payable"},{"type":"function","name":"aggregate3Value","inputs":[{"name":"calls","type":"tuple[]","internalType":"struct IMulticall3.Call3Value[]","components":[{"name":"target","type":"address","internalType":"address"},{"name":"allowFailure","type":"bool","internalType":"bool"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"callData","type":"bytes","internalType":"bytes"}]}],"outputs":[{"name":"returnData","type":"tuple[]","internalType":"struct IMulticall3.Result[]","components":[{"name":"success","type":"bool","internalType":"bool"},{"name":"returnData","type":"bytes","internalType":"bytes"}]}],"stateMutability":"payable"},{"type":"function","name":"blockAndAggregate","inputs":[{"name":"calls","type":"tuple[]","internalType":"struct IMulticall3.Call[]","components":[{"name":"target","type":"address","internalType":"address"},{"name":"callData","type":"bytes","internalType":"bytes"}]}],"outputs":[{"name":"blockNumber","type":"uint256","internalType":"uint256"},{"name":"blockHash","type":"bytes32","internalType":"bytes32"},{"name":"returnData","type":"tuple[]","internalType":"struct IMulticall3.Result[]","components":[{"name":"success","type":"bool","internalType":"bool"},{"name":"returnData","type":"bytes","internalType":"bytes"}]}],"stateMutability":"payable"},{"type":"function","name":"getBasefee","inputs":[],"outputs":[{"name":"basefee","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getBlockHash","inputs":[{"name":"blockNumber","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"blockHash","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getBlockNumber","inputs":[],"outputs":[{"name":"blockNumber","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getChainId","inputs":[],"outputs":[{"name":"chainid","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getCurrentBlockCoinbase","inputs":[],"outputs":[{"name":"coinbase","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getCurrentBlockDifficulty","inputs":[],"outputs":[{"name":"difficulty","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getCurrentBlockGasLimit","inputs":[],"outputs":[{"name":"gaslimit","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getCurrentBlockTimestamp","inputs":[],"outputs":[{"name":"timestamp","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getEthBalance","inputs":[{"name":"addr","type":"address","internalType":"address"}],"outputs":[{"name":"balance","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getLastBlockHash","inputs":[],"outputs":[{"name":"blockHash","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"tryAggregate","inputs":[{"name":"requireSuccess","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct IMulticall3.Call[]","components":[{"name":"target","type":"address","internalType":"address"},{"name":"callData","type":"bytes","internalType":"bytes"}]}],"outputs":[{"name":"returnData","type":"tuple[]","internalType":"struct IMulticall3.Result[]","components":[{"name":"success","type":"bool","internalType":"bool"},{"name":"returnData","type":"bytes","internalType":"bytes"}]}],"stateMutability":"payable"},{"type":"function","name":"tryBlockAndAggregate","inputs":[{"name":"requireSuccess","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct IMulticall3.Call[]","components":[{"name":"target","type":"address","internalType":"address"},{"name":"callData","type":"bytes","internalType":"bytes"}]}],"outputs":[{"name":"blockNumber","type":"uint256","internalType":"uint256"},{"name":"blockHash","type":"bytes32","internalType":"bytes32"},{"name":"returnData","type":"tuple[]","internalType":"struct IMulticall3.Result[]","components":[{"name":"success","type":"bool","internalType":"bool"},{"name":"returnData","type":"bytes","internalType":"bytes"}]}],"stateMutability":"payable"}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"aggregate((address,bytes)[])":"252dba42","aggregate3((address,bool,bytes)[])":"82ad56cb","aggregate3Value((address,bool,uint256,bytes)[])":"174dea71","blockAndAggregate((address,bytes)[])":"c3077fa9","getBasefee()":"3e64a696","getBlockHash(uint256)":"ee82ac5e","getBlockNumber()":"42cbb15c","getChainId()":"3408e470","getCurrentBlockCoinbase()":"a8b0574e","getCurrentBlockDifficulty()":"72425d9d","getCurrentBlockGasLimit()":"86d516e8","getCurrentBlockTimestamp()":"0f28c97d","getEthBalance(address)":"4d2301cc","getLastBlockHash()":"27e86d6e","tryAggregate(bool,(address,bytes)[])":"bce38bd7","tryBlockAndAggregate(bool,(address,bytes)[])":"399542e9"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct IMulticall3.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"}],\"name\":\"aggregate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes[]\",\"name\":\"returnData\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowFailure\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct IMulticall3.Call3[]\",\"name\":\"calls\",\"type\":\"tuple[]\"}],\"name\":\"aggregate3\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"internalType\":\"struct IMulticall3.Result[]\",\"name\":\"returnData\",\"type\":\"tuple[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowFailure\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct IMulticall3.Call3Value[]\",\"name\":\"calls\",\"type\":\"tuple[]\"}],\"name\":\"aggregate3Value\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"internalType\":\"struct IMulticall3.Result[]\",\"name\":\"returnData\",\"type\":\"tuple[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct IMulticall3.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"}],\"name\":\"blockAndAggregate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"internalType\":\"struct IMulticall3.Result[]\",\"name\":\"returnData\",\"type\":\"tuple[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBasefee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"basefee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"}],\"name\":\"getBlockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getChainId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"chainid\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentBlockCoinbase\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"coinbase\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentBlockDifficulty\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"difficulty\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentBlockGasLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"gaslimit\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentBlockTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"getEthBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastBlockHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"requireSuccess\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct IMulticall3.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"}],\"name\":\"tryAggregate\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"internalType\":\"struct IMulticall3.Result[]\",\"name\":\"returnData\",\"type\":\"tuple[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"requireSuccess\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"internalType\":\"struct IMulticall3.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"}],\"name\":\"tryBlockAndAggregate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"internalType\":\"struct IMulticall3.Result[]\",\"name\":\"returnData\",\"type\":\"tuple[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/forge-std/src/interfaces/IMulticall3.sol\":\"IMulticall3\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"struct IMulticall3.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"callData","type":"bytes"}]}],"stateMutability":"payable","type":"function","name":"aggregate","outputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"bytes[]","name":"returnData","type":"bytes[]"}]},{"inputs":[{"internalType":"struct IMulticall3.Call3[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"allowFailure","type":"bool"},{"internalType":"bytes","name":"callData","type":"bytes"}]}],"stateMutability":"payable","type":"function","name":"aggregate3","outputs":[{"internalType":"struct IMulticall3.Result[]","name":"returnData","type":"tuple[]","components":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"bytes","name":"returnData","type":"bytes"}]}]},{"inputs":[{"internalType":"struct IMulticall3.Call3Value[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"allowFailure","type":"bool"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"callData","type":"bytes"}]}],"stateMutability":"payable","type":"function","name":"aggregate3Value","outputs":[{"internalType":"struct IMulticall3.Result[]","name":"returnData","type":"tuple[]","components":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"bytes","name":"returnData","type":"bytes"}]}]},{"inputs":[{"internalType":"struct IMulticall3.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"callData","type":"bytes"}]}],"stateMutability":"payable","type":"function","name":"blockAndAggregate","outputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"bytes32","name":"blockHash","type":"bytes32"},{"internalType":"struct IMulticall3.Result[]","name":"returnData","type":"tuple[]","components":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"bytes","name":"returnData","type":"bytes"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getBasefee","outputs":[{"internalType":"uint256","name":"basefee","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"stateMutability":"view","type":"function","name":"getBlockHash","outputs":[{"internalType":"bytes32","name":"blockHash","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getBlockNumber","outputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getChainId","outputs":[{"internalType":"uint256","name":"chainid","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getCurrentBlockCoinbase","outputs":[{"internalType":"address","name":"coinbase","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getCurrentBlockDifficulty","outputs":[{"internalType":"uint256","name":"difficulty","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getCurrentBlockGasLimit","outputs":[{"internalType":"uint256","name":"gaslimit","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getCurrentBlockTimestamp","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"stateMutability":"view","type":"function","name":"getEthBalance","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getLastBlockHash","outputs":[{"internalType":"bytes32","name":"blockHash","type":"bytes32"}]},{"inputs":[{"internalType":"bool","name":"requireSuccess","type":"bool"},{"internalType":"struct IMulticall3.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"callData","type":"bytes"}]}],"stateMutability":"payable","type":"function","name":"tryAggregate","outputs":[{"internalType":"struct IMulticall3.Result[]","name":"returnData","type":"tuple[]","components":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"bytes","name":"returnData","type":"bytes"}]}]},{"inputs":[{"internalType":"bool","name":"requireSuccess","type":"bool"},{"internalType":"struct IMulticall3.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"callData","type":"bytes"}]}],"stateMutability":"payable","type":"function","name":"tryBlockAndAggregate","outputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"bytes32","name":"blockHash","type":"bytes32"},{"internalType":"struct IMulticall3.Result[]","name":"returnData","type":"tuple[]","components":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"bytes","name":"returnData","type":"bytes"}]}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"lib/forge-std/src/interfaces/IMulticall3.sol":"IMulticall3"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"}},"version":1},"id":20} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/IPartialAuth.sol/IPartialAuth.json b/contracts/artifacts/wallet-contracts-v3/IPartialAuth.sol/IPartialAuth.json new file mode 100644 index 00000000..5f50efd4 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/IPartialAuth.sol/IPartialAuth.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"recoverPartialSignature","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"threshold","type":"uint256","internalType":"uint256"},{"name":"weight","type":"uint256","internalType":"uint256"},{"name":"isValidImage","type":"bool","internalType":"bool"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"checkpoint","type":"uint256","internalType":"uint256"},{"name":"opHash","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":"ad55366b"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"recoverPartialSignature\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isValidImage\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"checkpoint\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"opHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Agustin Aguilar\",\"kind\":\"dev\",\"methods\":{\"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"params\":{\"_payload\":\"The payload\",\"_signature\":\"The signature to recover\"},\"returns\":{\"checkpoint\":\"The checkpoint identifier\",\"imageHash\":\"The derived image hash\",\"isValidImage\":\"Whether the image hash is valid\",\"opHash\":\"The hash of the payload\",\"threshold\":\"The signature threshold\",\"weight\":\"The derived weight\"}}},\"title\":\"IPartialAuth\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"notice\":\"Recover the partial signature\"}},\"notice\":\"Interface for the partial auth module\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/modules/interfaces/IPartialAuth.sol\":\"IPartialAuth\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/interfaces/IPartialAuth.sol\":{\"keccak256\":\"0x0d1aa021615d8e90696e71a9468331457a1babfa2ffe169654b7456e5bcb7a73\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://bbacd149a6358ab0d4b9c588d2e3a55fc71ed4723269150d7b91ca70092f6519\",\"dweb:/ipfs/QmUSwtrYCrRcRFsy5rCzdMPrw1FCU7ZoeXdsW6kK9yc8FK\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"view","type":"function","name":"recoverPartialSignature","outputs":[{"internalType":"uint256","name":"threshold","type":"uint256"},{"internalType":"uint256","name":"weight","type":"uint256"},{"internalType":"bool","name":"isValidImage","type":"bool"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"uint256","name":"checkpoint","type":"uint256"},{"internalType":"bytes32","name":"opHash","type":"bytes32"}]}],"devdoc":{"kind":"dev","methods":{"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"params":{"_payload":"The payload","_signature":"The signature to recover"},"returns":{"checkpoint":"The checkpoint identifier","imageHash":"The derived image hash","isValidImage":"Whether the image hash is valid","opHash":"The hash of the payload","threshold":"The signature threshold","weight":"The derived weight"}}},"version":1},"userdoc":{"kind":"user","methods":{"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"notice":"Recover the partial signature"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/modules/interfaces/IPartialAuth.sol":"IPartialAuth"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/interfaces/IPartialAuth.sol":{"keccak256":"0x0d1aa021615d8e90696e71a9468331457a1babfa2ffe169654b7456e5bcb7a73","urls":["bzz-raw://bbacd149a6358ab0d4b9c588d2e3a55fc71ed4723269150d7b91ca70092f6519","dweb:/ipfs/QmUSwtrYCrRcRFsy5rCzdMPrw1FCU7ZoeXdsW6kK9yc8FK"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"}},"version":1},"id":65} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/ISapient.sol/ISapient.json b/contracts/artifacts/wallet-contracts-v3/ISapient.sol/ISapient.json new file mode 100644 index 00000000..a11a924c --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/ISapient.sol/ISapient.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"recoverSapientSignature","inputs":[{"name":"payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"imageHash","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":"13792a4a"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"recoverSapientSignature\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Agustin Aguilar, Michael Standen\",\"details\":\"The consumer of this signer must validate if the imageHash is valid or not, for the desired configuration\",\"kind\":\"dev\",\"methods\":{\"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"params\":{\"payload\":\"The payload to recover the signature from\",\"signature\":\"The signature to recover the image hash from\"},\"returns\":{\"imageHash\":\"The recovered image hash\"}}},\"title\":\"ISapient\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"notice\":\"Recovers the image hash of a given signature\"}},\"notice\":\"Sapient signers take an explicit payload and return their own \\\"imageHash\\\" as result\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/modules/interfaces/ISapient.sol\":\"ISapient\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/interfaces/ISapient.sol\":{\"keccak256\":\"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489\",\"dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"struct Payload.Decoded","name":"payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"signature","type":"bytes"}],"stateMutability":"view","type":"function","name":"recoverSapientSignature","outputs":[{"internalType":"bytes32","name":"imageHash","type":"bytes32"}]}],"devdoc":{"kind":"dev","methods":{"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"params":{"payload":"The payload to recover the signature from","signature":"The signature to recover the image hash from"},"returns":{"imageHash":"The recovered image hash"}}},"version":1},"userdoc":{"kind":"user","methods":{"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"notice":"Recovers the image hash of a given signature"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/modules/interfaces/ISapient.sol":"ISapient"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/interfaces/ISapient.sol":{"keccak256":"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359","urls":["bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489","dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"}},"version":1},"id":66} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/ISapient.sol/ISapientCompact.json b/contracts/artifacts/wallet-contracts-v3/ISapient.sol/ISapientCompact.json new file mode 100644 index 00000000..dde5aa61 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/ISapient.sol/ISapientCompact.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"recoverSapientSignatureCompact","inputs":[{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"imageHash","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"recoverSapientSignatureCompact(bytes32,bytes)":"898bd921"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"recoverSapientSignatureCompact\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Agustin Aguilar, Michael Standen\",\"details\":\"The consumer of this signer must validate if the imageHash is valid or not, for the desired configuration\",\"kind\":\"dev\",\"methods\":{\"recoverSapientSignatureCompact(bytes32,bytes)\":{\"params\":{\"digest\":\"The digest of the payload\",\"signature\":\"The signature to recover the image hash from\"},\"returns\":{\"imageHash\":\"The recovered image hash\"}}},\"title\":\"ISapientCompact\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"recoverSapientSignatureCompact(bytes32,bytes)\":{\"notice\":\"Recovers the image hash of a given signature, using a hashed payload\"}},\"notice\":\"Sapient signers take a compacted payload and return their own \\\"imageHash\\\" as result\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/modules/interfaces/ISapient.sol\":\"ISapientCompact\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/interfaces/ISapient.sol\":{\"keccak256\":\"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489\",\"dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"bytes","name":"signature","type":"bytes"}],"stateMutability":"view","type":"function","name":"recoverSapientSignatureCompact","outputs":[{"internalType":"bytes32","name":"imageHash","type":"bytes32"}]}],"devdoc":{"kind":"dev","methods":{"recoverSapientSignatureCompact(bytes32,bytes)":{"params":{"digest":"The digest of the payload","signature":"The signature to recover the image hash from"},"returns":{"imageHash":"The recovered image hash"}}},"version":1},"userdoc":{"kind":"user","methods":{"recoverSapientSignatureCompact(bytes32,bytes)":{"notice":"Recovers the image hash of a given signature, using a hashed payload"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/modules/interfaces/ISapient.sol":"ISapientCompact"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/interfaces/ISapient.sol":{"keccak256":"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359","urls":["bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489","dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"}},"version":1},"id":66} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/ISignalsImplicitMode.sol/ISignalsImplicitMode.json b/contracts/artifacts/wallet-contracts-v3/ISignalsImplicitMode.sol/ISignalsImplicitMode.json new file mode 100644 index 00000000..4aa3eb67 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/ISignalsImplicitMode.sol/ISignalsImplicitMode.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"acceptImplicitRequest","inputs":[{"name":"wallet","type":"address","internalType":"address"},{"name":"attestation","type":"tuple","internalType":"struct Attestation","components":[{"name":"approvedSigner","type":"address","internalType":"address"},{"name":"identityType","type":"bytes4","internalType":"bytes4"},{"name":"issuerHash","type":"bytes32","internalType":"bytes32"},{"name":"audienceHash","type":"bytes32","internalType":"bytes32"},{"name":"applicationData","type":"bytes","internalType":"bytes"},{"name":"authData","type":"tuple","internalType":"struct AuthData","components":[{"name":"redirectUrl","type":"string","internalType":"string"},{"name":"issuedAt","type":"uint64","internalType":"uint64"}]}]},{"name":"call","type":"tuple","internalType":"struct Payload.Call","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]}],"outputs":[{"name":"magic","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"acceptImplicitRequest(address,(address,bytes4,bytes32,bytes32,bytes,(string,uint64)),(address,uint256,bytes,uint256,bool,bool,uint256))":"9d043a66"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"wallet\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"approvedSigner\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"identityType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes32\",\"name\":\"issuerHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"audienceHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"applicationData\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"redirectUrl\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"issuedAt\",\"type\":\"uint64\"}],\"internalType\":\"struct AuthData\",\"name\":\"authData\",\"type\":\"tuple\"}],\"internalType\":\"struct Attestation\",\"name\":\"attestation\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call\",\"name\":\"call\",\"type\":\"tuple\"}],\"name\":\"acceptImplicitRequest\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"magic\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Agustin Aguilar, Michael Standen\",\"kind\":\"dev\",\"methods\":{\"acceptImplicitRequest(address,(address,bytes4,bytes32,bytes32,bytes,(string,uint64)),(address,uint256,bytes,uint256,bool,bool,uint256))\":{\"params\":{\"attestation\":\"The attestation data\",\"call\":\"The call to validate\",\"wallet\":\"The wallet's address\"},\"returns\":{\"magic\":\"The hash of the implicit request if valid\"}}},\"title\":\"ISignalsImplicitMode\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"acceptImplicitRequest(address,(address,bytes4,bytes32,bytes32,bytes,(string,uint64)),(address,uint256,bytes,uint256,bool,bool,uint256))\":{\"notice\":\"Determines if an implicit request is valid\"}},\"notice\":\"Interface for the contracts that support implicit mode validation\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/extensions/sessions/implicit/ISignalsImplicitMode.sol\":\"ISignalsImplicitMode\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/extensions/sessions/implicit/Attestation.sol\":{\"keccak256\":\"0xcaa44022b5eb4bc7ab487b3b1a0125da67e2e891cee983ef6cdb6814f045efc8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://94829782b6dcb482d7c002511c590d1ad8de3b21e5e72575df18be73565b3638\",\"dweb:/ipfs/QmZ4u9FxALzMzKR7auW8FmFkhGVw8kRDeDRJ1PKwKaWNWF\"]},\"src/extensions/sessions/implicit/ISignalsImplicitMode.sol\":{\"keccak256\":\"0x6cb48f50c49bcb3c7071306fe9fac6c102bc9eabf73d9909e19ab3b9a835d0a8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://15297e969f64fc1152654d1cefbe276c15a0ecfc11f86b4c276bb0b454fe700a\",\"dweb:/ipfs/QmeehNFYBPPtJePwUcqiYCgiuFotur4VVVCV1KvegdCCZ4\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"struct Attestation","name":"attestation","type":"tuple","components":[{"internalType":"address","name":"approvedSigner","type":"address"},{"internalType":"bytes4","name":"identityType","type":"bytes4"},{"internalType":"bytes32","name":"issuerHash","type":"bytes32"},{"internalType":"bytes32","name":"audienceHash","type":"bytes32"},{"internalType":"bytes","name":"applicationData","type":"bytes"},{"internalType":"struct AuthData","name":"authData","type":"tuple","components":[{"internalType":"string","name":"redirectUrl","type":"string"},{"internalType":"uint64","name":"issuedAt","type":"uint64"}]}]},{"internalType":"struct Payload.Call","name":"call","type":"tuple","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]}],"stateMutability":"view","type":"function","name":"acceptImplicitRequest","outputs":[{"internalType":"bytes32","name":"magic","type":"bytes32"}]}],"devdoc":{"kind":"dev","methods":{"acceptImplicitRequest(address,(address,bytes4,bytes32,bytes32,bytes,(string,uint64)),(address,uint256,bytes,uint256,bool,bool,uint256))":{"params":{"attestation":"The attestation data","call":"The call to validate","wallet":"The wallet's address"},"returns":{"magic":"The hash of the implicit request if valid"}}},"version":1},"userdoc":{"kind":"user","methods":{"acceptImplicitRequest(address,(address,bytes4,bytes32,bytes32,bytes,(string,uint64)),(address,uint256,bytes,uint256,bool,bool,uint256))":{"notice":"Determines if an implicit request is valid"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/extensions/sessions/implicit/ISignalsImplicitMode.sol":"ISignalsImplicitMode"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/extensions/sessions/implicit/Attestation.sol":{"keccak256":"0xcaa44022b5eb4bc7ab487b3b1a0125da67e2e891cee983ef6cdb6814f045efc8","urls":["bzz-raw://94829782b6dcb482d7c002511c590d1ad8de3b21e5e72575df18be73565b3638","dweb:/ipfs/QmZ4u9FxALzMzKR7auW8FmFkhGVw8kRDeDRJ1PKwKaWNWF"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/ISignalsImplicitMode.sol":{"keccak256":"0x6cb48f50c49bcb3c7071306fe9fac6c102bc9eabf73d9909e19ab3b9a835d0a8","urls":["bzz-raw://15297e969f64fc1152654d1cefbe276c15a0ecfc11f86b4c276bb0b454fe700a","dweb:/ipfs/QmeehNFYBPPtJePwUcqiYCgiuFotur4VVVCV1KvegdCCZ4"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"}},"version":1},"id":41} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/ISingletonFactory.sol/ISingletonFactory.json b/contracts/artifacts/wallet-contracts-v3/ISingletonFactory.sol/ISingletonFactory.json new file mode 100644 index 00000000..974d3f86 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/ISingletonFactory.sol/ISingletonFactory.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"deploy","inputs":[{"name":"_initCode","type":"bytes","internalType":"bytes"},{"name":"_salt","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"createdContract","type":"address","internalType":"address payable"}],"stateMutability":"nonpayable"}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"deploy(bytes,bytes32)":"4af63f02"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"}],\"name\":\"deploy\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"createdContract\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/erc2470-libs/src/ISingletonFactory.sol\":\"ISingletonFactory\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/erc2470-libs/src/ISingletonFactory.sol\":{\"keccak256\":\"0x0a17871e1017f36a664b877f5b0db297dc998fdf8b0ab82d00ca50d5bdde88f7\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://160bc0d890492792f85dfea939160290d90562b27154f64c39c2a615243518a6\",\"dweb:/ipfs/QmbxmqPpTAH7X45G75UjmLh3RSTDj7trMtmkGU6RXmRyEJ\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"bytes","name":"_initCode","type":"bytes"},{"internalType":"bytes32","name":"_salt","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"deploy","outputs":[{"internalType":"address payable","name":"createdContract","type":"address"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"lib/erc2470-libs/src/ISingletonFactory.sol":"ISingletonFactory"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/erc2470-libs/src/ISingletonFactory.sol":{"keccak256":"0x0a17871e1017f36a664b877f5b0db297dc998fdf8b0ab82d00ca50d5bdde88f7","urls":["bzz-raw://160bc0d890492792f85dfea939160290d90562b27154f64c39c2a615243518a6","dweb:/ipfs/QmbxmqPpTAH7X45G75UjmLh3RSTDj7trMtmkGU6RXmRyEJ"],"license":"UNLICENSED"}},"version":1},"id":1} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Implementation.sol/Implementation.json b/contracts/artifacts/wallet-contracts-v3/Implementation.sol/Implementation.json new file mode 100644 index 00000000..bda09b8b --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Implementation.sol/Implementation.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"getImplementation","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"updateImplementation","inputs":[{"name":"_implementation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"payable"},{"type":"event","name":"ImplementationUpdated","inputs":[{"name":"newImplementation","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"error","name":"OnlySelf","inputs":[{"name":"_sender","type":"address","internalType":"address"}]}],"bytecode":{"object":"0x6080806040523460155761016e908161001b8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c908163025b22bc1461008b575063aaf10f421461003557600080fd5b346100865760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610086576020305473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b600080fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100865760043573ffffffffffffffffffffffffffffffffffffffff8116918282036100865730330361010a577f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca039260209230558152a1005b7fa19dbf00000000000000000000000000000000000000000000000000000000006000523360045260246000fdfea2646970667358221220dcf327073c174a3ac959acd99756d42912803b6fa4b279f0d077ed0b98f7a7a964736f6c634300081c0033","sourceMap":"237:1069:46:-:0;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608080604052600436101561001357600080fd5b60003560e01c908163025b22bc1461008b575063aaf10f421461003557600080fd5b346100865760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610086576020305473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b600080fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100865760043573ffffffffffffffffffffffffffffffffffffffff8116918282036100865730330361010a577f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca039260209230558152a1005b7fa19dbf00000000000000000000000000000000000000000000000000000000006000523360045260246000fdfea2646970667358221220dcf327073c174a3ac959acd99756d42912803b6fa4b279f0d077ed0b98f7a7a964736f6c634300081c0033","sourceMap":"237:1069:46:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1252:47;;237:1069;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;401:4:52;379:10;:27;375:75;;1013:38:46;401:4:52;237:1069:46;401:4:52;;1125:46:46;237:1069;;1013:38;237:1069;375:75:52;423:20;237:1069:46;423:20:52;379:10;237:1069:46;;;;423:20:52","linkReferences":{}},"methodIdentifiers":{"getImplementation()":"aaf10f42","updateImplementation(address)":"025b22bc"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"ImplementationUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"getImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"}],\"name\":\"updateImplementation\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Agustin Aguilar\",\"kind\":\"dev\",\"methods\":{\"getImplementation()\":{\"returns\":{\"_0\":\"implementation The implementation\"}},\"updateImplementation(address)\":{\"details\":\"Callable only by the contract itself\",\"params\":{\"_implementation\":\"The new implementation\"}}},\"title\":\"Implementation\",\"version\":1},\"userdoc\":{\"errors\":{\"OnlySelf(address)\":[{\"notice\":\"Error thrown when the caller is not the same as the contract\"}]},\"events\":{\"ImplementationUpdated(address)\":{\"notice\":\"Emitted when the implementation is updated\"}},\"kind\":\"user\",\"methods\":{\"getImplementation()\":{\"notice\":\"Get the implementation\"},\"updateImplementation(address)\":{\"notice\":\"Update the implementation\"}},\"notice\":\"Manages the implementation address of the proxy contract\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/modules/Implementation.sol\":\"Implementation\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/modules/Implementation.sol\":{\"keccak256\":\"0x16546d4be07865808890308750916b0a9a55e7a994a458c01edde4618f29b4e6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1b1f9785b08c9f29d6849ba2d3dee89fa3ea5f3c2feec4a59a6d1040e3fbe040\",\"dweb:/ipfs/QmU2Pm5C3Ztky7RQdCZggavyq7Eh1eS1HFqVz9jZKiMUML\"]},\"src/modules/auth/SelfAuth.sol\":{\"keccak256\":\"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42\",\"dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_sender","type":"address"}],"type":"error","name":"OnlySelf"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address","indexed":false}],"type":"event","name":"ImplementationUpdated","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"getImplementation","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"_implementation","type":"address"}],"stateMutability":"payable","type":"function","name":"updateImplementation"}],"devdoc":{"kind":"dev","methods":{"getImplementation()":{"returns":{"_0":"implementation The implementation"}},"updateImplementation(address)":{"details":"Callable only by the contract itself","params":{"_implementation":"The new implementation"}}},"version":1},"userdoc":{"kind":"user","methods":{"getImplementation()":{"notice":"Get the implementation"},"updateImplementation(address)":{"notice":"Update the implementation"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/modules/Implementation.sol":"Implementation"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/modules/Implementation.sol":{"keccak256":"0x16546d4be07865808890308750916b0a9a55e7a994a458c01edde4618f29b4e6","urls":["bzz-raw://1b1f9785b08c9f29d6849ba2d3dee89fa3ea5f3c2feec4a59a6d1040e3fbe040","dweb:/ipfs/QmU2Pm5C3Ztky7RQdCZggavyq7Eh1eS1HFqVz9jZKiMUML"],"license":"Apache-2.0"},"src/modules/auth/SelfAuth.sol":{"keccak256":"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c","urls":["bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42","dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W"],"license":"Apache-2.0"}},"version":1},"id":46} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Implementation.t.sol/ImplementationTest.json b/contracts/artifacts/wallet-contracts-v3/Implementation.t.sol/ImplementationTest.json new file mode 100644 index 00000000..bb306bac --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Implementation.t.sol/ImplementationTest.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"excludeArtifacts","inputs":[],"outputs":[{"name":"excludedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"excludeContracts","inputs":[],"outputs":[{"name":"excludedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"excludeSelectors","inputs":[],"outputs":[{"name":"excludedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"excludeSenders","inputs":[],"outputs":[{"name":"excludedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"implementation","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract Implementation"}],"stateMutability":"view"},{"type":"function","name":"setUp","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"targetArtifactSelectors","inputs":[],"outputs":[{"name":"targetedArtifactSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzArtifactSelector[]","components":[{"name":"artifact","type":"string","internalType":"string"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetArtifacts","inputs":[],"outputs":[{"name":"targetedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"targetContracts","inputs":[],"outputs":[{"name":"targetedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"targetInterfaces","inputs":[],"outputs":[{"name":"targetedInterfaces_","type":"tuple[]","internalType":"struct StdInvariant.FuzzInterface[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"artifacts","type":"string[]","internalType":"string[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSelectors","inputs":[],"outputs":[{"name":"targetedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSenders","inputs":[],"outputs":[{"name":"targetedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"test_updateImplementation","inputs":[{"name":"_implementation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_updateImplementation_revertWhenNotSelf","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false}],"bytecode":{"object":"0x60808060405234602f57600160ff19600c541617600c55600160ff19601f541617601f5561192a90816100358239f35b600080fdfe608080604052600436101561001357600080fd5b600090813560e01c9081630a9254e414610f31575080631ed7831c14610e885780632ade388014610c5c5780633e5e3c2314610bb35780633f7286f414610b0a5780634a689b5f146109965780635c60da1b1461094157806366d9a9a0146107e657806385226c811461073e578063916a17c614610669578063b0464fdc14610594578063b5508aa9146104ec578063ba414fa6146104a9578063be949496146101cd578063e20c9f71146101145763fa7626d4146100d157600080fd5b3461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011157602060ff601f54166040519015158152f35b80fd5b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101115760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b8181106101a15761019d8561019181870382611279565b60405191829182611006565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff1684526020909301926001928301920161017a565b50346101115760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610111578060043573ffffffffffffffffffffffffffffffffffffffff81168091036104915773ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561041c57604051907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152828160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115610471578391610494575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b1561041c578280916024604051809481937f025b22bc0000000000000000000000000000000000000000000000000000000083528760048401525af190811561047157839161047c575b5050600490602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051938480927faaf10f420000000000000000000000000000000000000000000000000000000082525afa918215610471578392610420575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561041c5773ffffffffffffffffffffffffffffffffffffffff604051927f515361f600000000000000000000000000000000000000000000000000000000845216600483015260248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610411576104005750f35b8161040a91611279565b6101115780f35b6040513d84823e3d90fd5b5050fd5b9091506020813d602011610469575b8161043c60209383611279565b8101031261041c575173ffffffffffffffffffffffffffffffffffffffff8116810361041c579038610374565b3d915061042f565b6040513d85823e3d90fd5b8161048691611279565b610491578138610317565b50fd5b8161049e91611279565b6104915781386102ad565b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101115760206104e2611680565b6040519015158152f35b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011157601954610527816112ba565b916105356040519384611279565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b838310610577576040518061019d878261110b565b600160208192610586856112d2565b815201920192019190610562565b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011157601c546105cf816112ba565b916105dd6040519384611279565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b83831061061f576040518061019d8782611189565b600260206001926040516106328161122e565b73ffffffffffffffffffffffffffffffffffffffff86541681526106578587016113d9565b8382015281520192019201919061060a565b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011157601d546106a4816112ba565b916106b26040519384611279565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b8383106106f4576040518061019d8782611189565b600260206001926040516107078161122e565b73ffffffffffffffffffffffffffffffffffffffff865416815261072c8587016113d9565b838201528152019201920191906106df565b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011157601a54610779816112ba565b916107876040519384611279565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b8383106107c9576040518061019d878261110b565b6001602081926107d8856112d2565b8152019201920191906107b4565b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011157601b54610821816112ba565b61082e6040519182611279565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b83831061090657868587604051928392602084019060208552518091526040840160408260051b8601019392905b82821061089b57505050500390f35b919360206108f6827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc06001959799849503018652885190836108e68351604084526040840190611056565b92015190848184039101526110b5565b960192019201859493919261088c565b600260206001926040516109198161122e565b610922866112d2565b815261092f8587016113d9565b8382015281520192019201919061085e565b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011157602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051908152f35b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610111576040517fa19dbf0000000000000000000000000000000000000000000000000000000000602082015230602482015260248152610a03604482611279565b81737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101115780610a5f92604051809481927ff28dceb3000000000000000000000000000000000000000000000000000000008352602060048401526024830190611056565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015610afd57610aed575b905073ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b15610491578180916024604051809481937f025b22bc0000000000000000000000000000000000000000000000000000000083523060048401525af18015610411576104005750f35b610af691611279565b3881610a84565b50604051903d90823e3d90fd5b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101115760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b818110610b875761019d8561019181870382611279565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610b70565b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101115760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b818110610c305761019d8561019181870382611279565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610c19565b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011157601e54610c97816112ba565b610ca46040519182611279565b818152601e83526020810191837f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350845b838310610df25786858760405192839260208401906020855251809152604084019160408260051b8601019392815b838310610d105786860387f35b9193957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09086929496030183528551906020604082019273ffffffffffffffffffffffffffffffffffffffff81511683520151916040602083015282518091526060820190602060608260051b850101940192855b828110610da957505050505060208060019297019301930190928695949293610d03565b9091929394602080610de5837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa087600196030189528951611056565b9701950193929101610d85565b604051610dfe8161122e565b73ffffffffffffffffffffffffffffffffffffffff8354168152600183018054610e27816112ba565b91610e356040519384611279565b8183528a526020808b20908b9084015b838210610e6b575050505060019282602092836002950152815201920192019190610cd4565b600160208192610e7a866112d2565b815201930191019091610e45565b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101115760405180916020601654928381520191601682527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289915b818110610f055761019d8561019181870382611279565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610eee565b90503461100257817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112611002576101898082019082821067ffffffffffffffff831117610fd55790829161176c8339039082f08015610afd577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00601f549260081b16911617601f5580f35b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b5080fd5b602060408183019282815284518094520192019060005b81811061102a5750505090565b825173ffffffffffffffffffffffffffffffffffffffff1684526020938401939092019160010161101d565b919082519283825260005b8481106110a05750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201611061565b906020808351928381520192019060005b8181106110d35750505090565b82517fffffffff00000000000000000000000000000000000000000000000000000000168452602093840193909201916001016110c6565b602081016020825282518091526040820191602060408360051b8301019401926000915b83831061113e57505050505090565b909192939460208061117a837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187528951611056565b9701930193019193929061112f565b602081016020825282518091526040820191602060408360051b8301019401926000915b8383106111bc57505050505090565b909192939460208061121f837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff8151168452015191818582015201906110b5565b970193019301919392906111ad565b6040810190811067ffffffffffffffff82111761124a57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761124a57604052565b67ffffffffffffffff811161124a5760051b60200190565b906040519160008154918260011c926001811680156113cf575b6020851081146113a257848752869392918115611362575060011461131b575b5061131992500383611279565b565b90506000929192526020600020906000915b818310611346575050906020611319928201013861130c565b602091935080600191548385890101520191019091849261132d565b602093506113199592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201013861130c565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f16936112ec565b90604051918281549182825260208201906000526020600020926000905b8060078301106115f3576113199454918181106115bd575b818110611587575b818110611551575b81811061151b575b8181106114e5575b8181106114af575b81811061147a575b1061144d575b500383611279565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260200138611445565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b16815201930161143f565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b168152019301611437565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b16815201930161142f565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b168152019301611427565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b16815201930161141f565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b168152019301611417565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b16815201930161140f565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e08201520194019201859293916113f7565b60085460ff16801561168f5790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561175f57600091611728575b50151590565b90506020813d602011611757575b8161174360209383611279565b81010312611752575138611722565b600080fd5b3d9150611736565b6040513d6000823e3d90fdfe6080806040523460155761016e908161001b8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c908163025b22bc1461008b575063aaf10f421461003557600080fd5b346100865760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610086576020305473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b600080fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100865760043573ffffffffffffffffffffffffffffffffffffffff8116918282036100865730330361010a577f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca039260209230558152a1005b7fa19dbf00000000000000000000000000000000000000000000000000000000006000523360045260246000fdfea2646970667358221220dcf327073c174a3ac959acd99756d42912803b6fa4b279f0d077ed0b98f7a7a964736f6c634300081c0033a2646970667358221220e4728569994ca907f4c503ff494d09d1e6b54ff18098bea5fdceb9e80f1b37f564736f6c634300081c0033","sourceMap":"293:623:92:-:0;;;;;;;3166:4:5;293:623:92;;3166:4:5;293:623:92;;;3166:4:5;293:623:92;3166:4:5;293:623:92;;1087:4:16;293:623:92;;;1087:4:16;293:623:92;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608080604052600436101561001357600080fd5b600090813560e01c9081630a9254e414610f31575080631ed7831c14610e885780632ade388014610c5c5780633e5e3c2314610bb35780633f7286f414610b0a5780634a689b5f146109965780635c60da1b1461094157806366d9a9a0146107e657806385226c811461073e578063916a17c614610669578063b0464fdc14610594578063b5508aa9146104ec578063ba414fa6146104a9578063be949496146101cd578063e20c9f71146101145763fa7626d4146100d157600080fd5b3461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011157602060ff601f54166040519015158152f35b80fd5b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101115760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b8181106101a15761019d8561019181870382611279565b60405191829182611006565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff1684526020909301926001928301920161017a565b50346101115760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610111578060043573ffffffffffffffffffffffffffffffffffffffff81168091036104915773ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561041c57604051907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152828160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115610471578391610494575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b1561041c578280916024604051809481937f025b22bc0000000000000000000000000000000000000000000000000000000083528760048401525af190811561047157839161047c575b5050600490602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051938480927faaf10f420000000000000000000000000000000000000000000000000000000082525afa918215610471578392610420575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561041c5773ffffffffffffffffffffffffffffffffffffffff604051927f515361f600000000000000000000000000000000000000000000000000000000845216600483015260248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610411576104005750f35b8161040a91611279565b6101115780f35b6040513d84823e3d90fd5b5050fd5b9091506020813d602011610469575b8161043c60209383611279565b8101031261041c575173ffffffffffffffffffffffffffffffffffffffff8116810361041c579038610374565b3d915061042f565b6040513d85823e3d90fd5b8161048691611279565b610491578138610317565b50fd5b8161049e91611279565b6104915781386102ad565b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101115760206104e2611680565b6040519015158152f35b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011157601954610527816112ba565b916105356040519384611279565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b838310610577576040518061019d878261110b565b600160208192610586856112d2565b815201920192019190610562565b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011157601c546105cf816112ba565b916105dd6040519384611279565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b83831061061f576040518061019d8782611189565b600260206001926040516106328161122e565b73ffffffffffffffffffffffffffffffffffffffff86541681526106578587016113d9565b8382015281520192019201919061060a565b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011157601d546106a4816112ba565b916106b26040519384611279565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b8383106106f4576040518061019d8782611189565b600260206001926040516107078161122e565b73ffffffffffffffffffffffffffffffffffffffff865416815261072c8587016113d9565b838201528152019201920191906106df565b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011157601a54610779816112ba565b916107876040519384611279565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b8383106107c9576040518061019d878261110b565b6001602081926107d8856112d2565b8152019201920191906107b4565b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011157601b54610821816112ba565b61082e6040519182611279565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b83831061090657868587604051928392602084019060208552518091526040840160408260051b8601019392905b82821061089b57505050500390f35b919360206108f6827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc06001959799849503018652885190836108e68351604084526040840190611056565b92015190848184039101526110b5565b960192019201859493919261088c565b600260206001926040516109198161122e565b610922866112d2565b815261092f8587016113d9565b8382015281520192019201919061085e565b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011157602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051908152f35b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610111576040517fa19dbf0000000000000000000000000000000000000000000000000000000000602082015230602482015260248152610a03604482611279565b81737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101115780610a5f92604051809481927ff28dceb3000000000000000000000000000000000000000000000000000000008352602060048401526024830190611056565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015610afd57610aed575b905073ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b15610491578180916024604051809481937f025b22bc0000000000000000000000000000000000000000000000000000000083523060048401525af18015610411576104005750f35b610af691611279565b3881610a84565b50604051903d90823e3d90fd5b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101115760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b818110610b875761019d8561019181870382611279565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610b70565b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101115760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b818110610c305761019d8561019181870382611279565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610c19565b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011157601e54610c97816112ba565b610ca46040519182611279565b818152601e83526020810191837f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350845b838310610df25786858760405192839260208401906020855251809152604084019160408260051b8601019392815b838310610d105786860387f35b9193957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09086929496030183528551906020604082019273ffffffffffffffffffffffffffffffffffffffff81511683520151916040602083015282518091526060820190602060608260051b850101940192855b828110610da957505050505060208060019297019301930190928695949293610d03565b9091929394602080610de5837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa087600196030189528951611056565b9701950193929101610d85565b604051610dfe8161122e565b73ffffffffffffffffffffffffffffffffffffffff8354168152600183018054610e27816112ba565b91610e356040519384611279565b8183528a526020808b20908b9084015b838210610e6b575050505060019282602092836002950152815201920192019190610cd4565b600160208192610e7a866112d2565b815201930191019091610e45565b503461011157807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101115760405180916020601654928381520191601682527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289915b818110610f055761019d8561019181870382611279565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610eee565b90503461100257817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112611002576101898082019082821067ffffffffffffffff831117610fd55790829161176c8339039082f08015610afd577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00601f549260081b16911617601f5580f35b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b5080fd5b602060408183019282815284518094520192019060005b81811061102a5750505090565b825173ffffffffffffffffffffffffffffffffffffffff1684526020938401939092019160010161101d565b919082519283825260005b8481106110a05750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201611061565b906020808351928381520192019060005b8181106110d35750505090565b82517fffffffff00000000000000000000000000000000000000000000000000000000168452602093840193909201916001016110c6565b602081016020825282518091526040820191602060408360051b8301019401926000915b83831061113e57505050505090565b909192939460208061117a837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187528951611056565b9701930193019193929061112f565b602081016020825282518091526040820191602060408360051b8301019401926000915b8383106111bc57505050505090565b909192939460208061121f837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff8151168452015191818582015201906110b5565b970193019301919392906111ad565b6040810190811067ffffffffffffffff82111761124a57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761124a57604052565b67ffffffffffffffff811161124a5760051b60200190565b906040519160008154918260011c926001811680156113cf575b6020851081146113a257848752869392918115611362575060011461131b575b5061131992500383611279565b565b90506000929192526020600020906000915b818310611346575050906020611319928201013861130c565b602091935080600191548385890101520191019091849261132d565b602093506113199592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201013861130c565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f16936112ec565b90604051918281549182825260208201906000526020600020926000905b8060078301106115f3576113199454918181106115bd575b818110611587575b818110611551575b81811061151b575b8181106114e5575b8181106114af575b81811061147a575b1061144d575b500383611279565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260200138611445565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b16815201930161143f565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b168152019301611437565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b16815201930161142f565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b168152019301611427565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b16815201930161141f565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b168152019301611417565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b16815201930161140f565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e08201520194019201859293916113f7565b60085460ff16801561168f5790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561175f57600091611728575b50151590565b90506020813d602011611757575b8161174360209383611279565b81010312611752575138611722565b600080fd5b3d9150611736565b6040513d6000823e3d90fdfe6080806040523460155761016e908161001b8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c908163025b22bc1461008b575063aaf10f421461003557600080fd5b346100865760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610086576020305473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b600080fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100865760043573ffffffffffffffffffffffffffffffffffffffff8116918282036100865730330361010a577f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca039260209230558152a1005b7fa19dbf00000000000000000000000000000000000000000000000000000000006000523360045260246000fdfea2646970667358221220dcf327073c174a3ac959acd99756d42912803b6fa4b279f0d077ed0b98f7a7a964736f6c634300081c0033a2646970667358221220e4728569994ca907f4c503ff494d09d1e6b54ff18098bea5fdceb9e80f1b37f564736f6c634300081c0033","sourceMap":"293:623:92:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1065:26:16;293:623:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2723:18:9;293:623:92;;;;;;;2723:18:9;293:623:92;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;552:14;2024::2;;;293:623:92;336:42:2;535:33:92;;;;293:623;;535:33;2024:14:2;535:33:92;;293:623;535:33;;293:623;535:33;;;;;336:42:2;535:33:92;;;;;;;;;;;293:623;2024:14:2;;293:623:92;552:14;2024::2;;;293:623:92;574:52;;;;;293:623;;;535:33;293:623;;574:52;;;;2024:14:2;574:52:92;;;293:623;574:52;;293:623;574:52;;;;;;;;;;;293:623;2024:14:2;;293:623:92;2024:14:2;293:623:92;;552:14;2024::2;;;293:623:92;;;641:34;;;;2024:14:2;641:34:92;;;;;;;;;;;;;293:623;3533:24:4;336:42:2;3533:24:4;;;;293:623:92;;;3533:24:4;2024:14:2;3533:24:4;;293:623:92;;3533:24:4;;293:623:92;535:33;293:623;;;3533:24:4;;;;336:42:2;3533:24:4;;;;;;;;293:623:92;;3533:24:4;;;;;:::i;:::-;293:623:92;;3533:24:4;293:623:92;3533:24:4;293:623:92;;;;;;;;;3533:24:4;293:623:92;;;641:34;;;;293:623;641:34;;293:623;641:34;;;;;;293:623;641:34;;;:::i;:::-;;;293:623;;;;;;;;;;;;641:34;;;;;;;-1:-1:-1;641:34:92;;;293:623;;;;;;;;;574:52;;;;;:::i;:::-;293:623;;574:52;;;;293:623;;;535:33;;;;;:::i;:::-;293:623;;535:33;;;;293:623;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2575:18:9;293:623:92;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;2575:18:9;293:623:92;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;2876:18:9;293:623:92;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;2876:18:9;293:623:92;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;3653:18:9;293:623:92;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;3653:18:9;293:623:92;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;3162:18:9;293:623:92;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;3162:18:9;293:623:92;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;3346:26:9;293:623:92;;;;:::i;:::-;;;;;;;:::i;:::-;;;;3346:26:9;293:623:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;337:36;293:623;;;;;;;;;;;;;;;;;;;;;;;;809:26;786:65;;;;845:4;786:65;;;293:623;786:65;;;;;;;:::i;:::-;770:82;336:42:2;770:82:92;;;;293:623;2024:14:2;293:623:92;;;770:82;;;;2024:14:2;770:82:92;;786:65;293:623;770:82;;2024:14:2;786:65:92;2024:14:2;;;;:::i;:::-;770:82:92;;;336:42:2;770:82:92;;;;;;;;293:623;2024:14:2;;293:623:92;858:14;2024::2;;;293:623:92;858:50;;;;;293:623;;;786:65;293:623;;858:50;;;;2024:14:2;858:50:92;;845:4;293:623;858:50;;293:623;858:50;;;;;;;;293:623;;770:82;;;;:::i;:::-;;;;;;293:623;;;;;;;;;;;;;;;;;;;;;;;;;;;;3501:18:9;293:623:92;;;;;;;3501:18:9;293:623:92;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3794:16:9;293:623:92;;;;;;;3794:16:9;293:623:92;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3948:19:9;293:623:92;;;;:::i;:::-;;;;;;;:::i;:::-;;;;3948:19:9;293:623:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3018:16:9;293:623:92;;;;;;;3018:16:9;293:623:92;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;425:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;293:623;;408:37;293:623;;;;;;;;408:37;293:623;;;425:20;293:623;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;293:623:92;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;293:623:92;;;;;-1:-1:-1;293:623:92;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;-1:-1:-1;293:623:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;;;-1:-1:-1;293:623:92;;;;;-1:-1:-1;293:623:92;;-1:-1:-1;293:623:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;293:623:92;;-1:-1:-1;293:623:92;;-1:-1:-1;293:623:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2024:14:2;293:623:92;;;;;;;;2024:14:2;293:623:92;;2024:14:2;293:623:92;2024:14:2;;;;293:623:92;;;;;;;;2024:14:2;293:623:92;;2024:14:2;293:623:92;2024:14:2;293:623:92;2024:14:2;;293:623:92;;;;;;;;2024:14:2;293:623:92;;2024:14:2;293:623:92;2024:14:2;293:623:92;2024:14:2;;293:623:92;;;;;;;;2024:14:2;293:623:92;;2024:14:2;293:623:92;2024:14:2;293:623:92;2024:14:2;;293:623:92;;;;;;;;2024:14:2;293:623:92;;2024:14:2;293:623:92;2024:14:2;293:623:92;2024:14:2;;293:623:92;;;;;;;;2024:14:2;293:623:92;;2024:14:2;293:623:92;2024:14:2;293:623:92;2024:14:2;;293:623:92;;;;;;;;2024:14:2;293:623:92;;2024:14:2;293:623:92;2024:14:2;;;293:623:92;;;;;;;;;;;;;;;;;;;;2024:14:2;;;;293:623:92;;;2024:14:2;;293:623:92;2024:14:2;;293:623:92;;;;2024:14:2;;293:623:92;2024:14:2;;293:623:92;;;;2024:14:2;;293:623:92;2024:14:2;;293:623:92;;;;2024:14:2;;293:623:92;2024:14:2;;293:623:92;;;;2024:14:2;;293:623:92;2024:14:2;;293:623:92;;;;2024:14:2;;293:623:92;2024:14:2;;293:623:92;;;;2024:14:2;;293:623:92;;;;;;;;;;;;;;1243:204:4;1302:7;293:623:92;;;;;;;1325:14:4;:::o;1298:143::-;293:623:92;;;2024:14:2;1377:39:4;;293:623:92;1377:39:4;;;293:623:92;192:59:4;;;;;;1377:39;;;293:623:92;1377:39:4;;;;;;;293:623:92;1377:39:4;;;1298:143;1377:53;;;1370:60;:::o;1377:39::-;;;192:59;1377:39;;192:59;1377:39;;;;;;192:59;1377:39;;;:::i;:::-;;;192:59;;;;;1377:39;;;192:59;293:623:92;;;1377:39:4;;;-1:-1:-1;1377:39:4;;;293:623:92;;;;;;;;","linkReferences":{}},"methodIdentifiers":{"IS_TEST()":"fa7626d4","excludeArtifacts()":"b5508aa9","excludeContracts()":"e20c9f71","excludeSelectors()":"b0464fdc","excludeSenders()":"1ed7831c","failed()":"ba414fa6","implementation()":"5c60da1b","setUp()":"0a9254e4","targetArtifactSelectors()":"66d9a9a0","targetArtifacts()":"85226c81","targetContracts()":"3f7286f4","targetInterfaces()":"2ade3880","targetSelectors()":"916a17c6","targetSenders()":"3e5e3c23","test_updateImplementation(address)":"be949496","test_updateImplementation_revertWhenNotSelf()":"4a689b5f"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"IS_TEST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"excludedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"contract Implementation\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setUp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifactSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"artifact\",\"type\":\"string\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzArtifactSelector[]\",\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"targetedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetInterfaces\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"artifacts\",\"type\":\"string[]\"}],\"internalType\":\"struct StdInvariant.FuzzInterface[]\",\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"}],\"name\":\"test_updateImplementation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"test_updateImplementation_revertWhenNotSelf\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/modules/Implementation.t.sol\":\"ImplementationTest\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/modules/Implementation.sol\":{\"keccak256\":\"0x16546d4be07865808890308750916b0a9a55e7a994a458c01edde4618f29b4e6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1b1f9785b08c9f29d6849ba2d3dee89fa3ea5f3c2feec4a59a6d1040e3fbe040\",\"dweb:/ipfs/QmU2Pm5C3Ztky7RQdCZggavyq7Eh1eS1HFqVz9jZKiMUML\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/auth/SelfAuth.sol\":{\"keccak256\":\"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42\",\"dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"test/modules/Implementation.t.sol\":{\"keccak256\":\"0xc74148b81638df1f53227b52bd83475c8e84f2a1b89560bbf59298792783747b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://83cd8f92c4691b99b9cd6ee1fda6f76e1a7664bace7ae9b5bdc6b4a6cbda01e9\",\"dweb:/ipfs/QmXCwkXapg2CHt7uFZxEHBaCnr3y7syW2D5dv7SheYKqzw\"]},\"test/utils/TestUtils.sol\":{\"keccak256\":\"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad\",\"dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log","anonymous":false},{"inputs":[{"internalType":"address","name":"","type":"address","indexed":false}],"type":"event","name":"log_address","anonymous":false},{"inputs":[{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"log_bytes","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32","indexed":false}],"type":"event","name":"log_bytes32","anonymous":false},{"inputs":[{"internalType":"int256","name":"","type":"int256","indexed":false}],"type":"event","name":"log_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address","name":"val","type":"address","indexed":false}],"type":"event","name":"log_named_address","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes","name":"val","type":"bytes","indexed":false}],"type":"event","name":"log_named_bytes","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes32","name":"val","type":"bytes32","indexed":false}],"type":"event","name":"log_named_bytes32","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false}],"type":"event","name":"log_named_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"string","name":"val","type":"string","indexed":false}],"type":"event","name":"log_named_string","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false}],"type":"event","name":"log_named_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log_string","anonymous":false},{"inputs":[{"internalType":"uint256","name":"","type":"uint256","indexed":false}],"type":"event","name":"log_uint","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"logs","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"IS_TEST","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeArtifacts","outputs":[{"internalType":"string[]","name":"excludedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeContracts","outputs":[{"internalType":"address[]","name":"excludedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"excludedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSenders","outputs":[{"internalType":"address[]","name":"excludedSenders_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"failed","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"implementation","outputs":[{"internalType":"contract Implementation","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"setUp"},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifactSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzArtifactSelector[]","name":"targetedArtifactSelectors_","type":"tuple[]","components":[{"internalType":"string","name":"artifact","type":"string"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifacts","outputs":[{"internalType":"string[]","name":"targetedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetContracts","outputs":[{"internalType":"address[]","name":"targetedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetInterfaces","outputs":[{"internalType":"struct StdInvariant.FuzzInterface[]","name":"targetedInterfaces_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"string[]","name":"artifacts","type":"string[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"targetedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSenders","outputs":[{"internalType":"address[]","name":"targetedSenders_","type":"address[]"}]},{"inputs":[{"internalType":"address","name":"_implementation","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"test_updateImplementation"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"test_updateImplementation_revertWhenNotSelf"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/modules/Implementation.t.sol":"ImplementationTest"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/modules/Implementation.sol":{"keccak256":"0x16546d4be07865808890308750916b0a9a55e7a994a458c01edde4618f29b4e6","urls":["bzz-raw://1b1f9785b08c9f29d6849ba2d3dee89fa3ea5f3c2feec4a59a6d1040e3fbe040","dweb:/ipfs/QmU2Pm5C3Ztky7RQdCZggavyq7Eh1eS1HFqVz9jZKiMUML"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/auth/SelfAuth.sol":{"keccak256":"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c","urls":["bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42","dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"test/modules/Implementation.t.sol":{"keccak256":"0xc74148b81638df1f53227b52bd83475c8e84f2a1b89560bbf59298792783747b","urls":["bzz-raw://83cd8f92c4691b99b9cd6ee1fda6f76e1a7664bace7ae9b5bdc6b4a6cbda01e9","dweb:/ipfs/QmXCwkXapg2CHt7uFZxEHBaCnr3y7syW2D5dv7SheYKqzw"],"license":"Apache-2.0"},"test/utils/TestUtils.sol":{"keccak256":"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79","urls":["bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad","dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa"],"license":"Apache-2.0"}},"version":1},"id":92} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/ImplicitSessionManager.sol/ImplicitSessionManager.json b/contracts/artifacts/wallet-contracts-v3/ImplicitSessionManager.sol/ImplicitSessionManager.json new file mode 100644 index 00000000..b300adfa --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/ImplicitSessionManager.sol/ImplicitSessionManager.json @@ -0,0 +1 @@ +{"abi":[],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Agustin Aguilar, Michael Standen\",\"kind\":\"dev\",\"methods\":{},\"title\":\"ImplicitSessionManager\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Manager for implicit sessions\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/extensions/sessions/implicit/ImplicitSessionManager.sol\":\"ImplicitSessionManager\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/extensions/sessions/SessionErrors.sol\":{\"keccak256\":\"0xa7642b4ef1d2ac8e41bd6dca88c5a644cac21b3ebe79deb5013e21fb4aaab405\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ef80768f6c509a54ea5d3fb92cbf46363f945f071cc3664710770c09b3d2a978\",\"dweb:/ipfs/QmbRpicAiPSYQbKpjoDbanap9q5hYsqEMS1u7w7sqKEYTY\"]},\"src/extensions/sessions/implicit/Attestation.sol\":{\"keccak256\":\"0xcaa44022b5eb4bc7ab487b3b1a0125da67e2e891cee983ef6cdb6814f045efc8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://94829782b6dcb482d7c002511c590d1ad8de3b21e5e72575df18be73565b3638\",\"dweb:/ipfs/QmZ4u9FxALzMzKR7auW8FmFkhGVw8kRDeDRJ1PKwKaWNWF\"]},\"src/extensions/sessions/implicit/ISignalsImplicitMode.sol\":{\"keccak256\":\"0x6cb48f50c49bcb3c7071306fe9fac6c102bc9eabf73d9909e19ab3b9a835d0a8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://15297e969f64fc1152654d1cefbe276c15a0ecfc11f86b4c276bb0b454fe700a\",\"dweb:/ipfs/QmeehNFYBPPtJePwUcqiYCgiuFotur4VVVCV1KvegdCCZ4\"]},\"src/extensions/sessions/implicit/ImplicitSessionManager.sol\":{\"keccak256\":\"0xe0d4f9f9c242e1e5781ba3a2eb4c4485b16de53769dacf7f448be01649d9997b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://f6f28cfeca83fffc74e63440243fcb0a7f9a7d5ac5efae21fa8e96926c1d0fae\",\"dweb:/ipfs/Qmdnw9PrjjpUjWij9VDxBRe6besuJvpwiGaPewVcR2G9C1\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/extensions/sessions/implicit/ImplicitSessionManager.sol":"ImplicitSessionManager"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/extensions/sessions/SessionErrors.sol":{"keccak256":"0xa7642b4ef1d2ac8e41bd6dca88c5a644cac21b3ebe79deb5013e21fb4aaab405","urls":["bzz-raw://ef80768f6c509a54ea5d3fb92cbf46363f945f071cc3664710770c09b3d2a978","dweb:/ipfs/QmbRpicAiPSYQbKpjoDbanap9q5hYsqEMS1u7w7sqKEYTY"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/Attestation.sol":{"keccak256":"0xcaa44022b5eb4bc7ab487b3b1a0125da67e2e891cee983ef6cdb6814f045efc8","urls":["bzz-raw://94829782b6dcb482d7c002511c590d1ad8de3b21e5e72575df18be73565b3638","dweb:/ipfs/QmZ4u9FxALzMzKR7auW8FmFkhGVw8kRDeDRJ1PKwKaWNWF"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/ISignalsImplicitMode.sol":{"keccak256":"0x6cb48f50c49bcb3c7071306fe9fac6c102bc9eabf73d9909e19ab3b9a835d0a8","urls":["bzz-raw://15297e969f64fc1152654d1cefbe276c15a0ecfc11f86b4c276bb0b454fe700a","dweb:/ipfs/QmeehNFYBPPtJePwUcqiYCgiuFotur4VVVCV1KvegdCCZ4"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/ImplicitSessionManager.sol":{"keccak256":"0xe0d4f9f9c242e1e5781ba3a2eb4c4485b16de53769dacf7f448be01649d9997b","urls":["bzz-raw://f6f28cfeca83fffc74e63440243fcb0a7f9a7d5ac5efae21fa8e96926c1d0fae","dweb:/ipfs/Qmdnw9PrjjpUjWij9VDxBRe6besuJvpwiGaPewVcR2G9C1"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"}},"version":1},"id":42} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/ImplicitSessionManager.t.sol/ImplicitSessionManagerHarness.json b/contracts/artifacts/wallet-contracts-v3/ImplicitSessionManager.t.sol/ImplicitSessionManagerHarness.json new file mode 100644 index 00000000..f32e23f1 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/ImplicitSessionManager.t.sol/ImplicitSessionManagerHarness.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"isAddressBlacklisted","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"blacklist","type":"address[]","internalType":"address[]"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"validateImplicitCall","inputs":[{"name":"call","type":"tuple","internalType":"struct Payload.Call","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"wallet","type":"address","internalType":"address"},{"name":"sessionSigner","type":"address","internalType":"address"},{"name":"attestation","type":"tuple","internalType":"struct Attestation","components":[{"name":"approvedSigner","type":"address","internalType":"address"},{"name":"identityType","type":"bytes4","internalType":"bytes4"},{"name":"issuerHash","type":"bytes32","internalType":"bytes32"},{"name":"audienceHash","type":"bytes32","internalType":"bytes32"},{"name":"applicationData","type":"bytes","internalType":"bytes"},{"name":"authData","type":"tuple","internalType":"struct AuthData","components":[{"name":"redirectUrl","type":"string","internalType":"string"},{"name":"issuedAt","type":"uint64","internalType":"uint64"}]}]},{"name":"blacklist","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"view"},{"type":"error","name":"BlacklistedAddress","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"InvalidDelegateCall","inputs":[]},{"type":"error","name":"InvalidImplicitResult","inputs":[]},{"type":"error","name":"InvalidSessionSigner","inputs":[{"name":"invalidSigner","type":"address","internalType":"address"}]},{"type":"error","name":"InvalidValue","inputs":[]}],"bytecode":{"object":"0x60808060405234601557610b8d908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c806380c95a31146107a15763e10daf111461003257600080fd5b3461065f5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261065f5760043567ffffffffffffffff811161065f5780600401908036039160e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc84011261065f576024359073ffffffffffffffffffffffffffffffffffffffff821680830361065f576044359373ffffffffffffffffffffffffffffffffffffffff85169182860361065f576064359567ffffffffffffffff871161065f5760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc883603011261065f576040519760c0890189811067ffffffffffffffff8211176107725760405261015488600401610826565b895260248801357fffffffff000000000000000000000000000000000000000000000000000000008116810361065f5760208a0190815260408a019660448a0135885260608b019960648101358b52608481013567ffffffffffffffff811161065f5781013660238201121561065f576101d89036906024600482013591016108f8565b9060808d0191825260a48101359067ffffffffffffffff821161065f57019760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8a3603011261065f576040519860408a018a811067ffffffffffffffff82111761077257604052600481013567ffffffffffffffff811161065f576004908201019036601f8301121561065f5761027a60249236906020813591016108f8565b8b52013567ffffffffffffffff8116810361065f5760208a015260a08d019889526084359067ffffffffffffffff821161065f5773ffffffffffffffffffffffffffffffffffffffff6102d28f933690600401610888565b92511681036107455760848901968735801515810361065f5761071b57826102f9916109bc565b6106ee57506103109061030b84610aca565b6109bc565b6106a257602487013592836106785761032883610aca565b73ffffffffffffffffffffffffffffffffffffffff16966040519d8e917f9d043a66000000000000000000000000000000000000000000000000000000008352600483015260248201606090525173ffffffffffffffffffffffffffffffffffffffff169060640152517fffffffff000000000000000000000000000000000000000000000000000000001660848d0152885160a48d01528a5160c48d01525160e48c0160c090526101248c016103de91610aeb565b9651968b81037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c016101048d01528751604082526040820161041f91610aeb565b976020015167ffffffffffffffff1690602001528a87037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0160448c015261046690610826565b73ffffffffffffffffffffffffffffffffffffffff16865260208601526044840135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd0181121561065f5783016024600482013591019167ffffffffffffffff821161065f57813603831361065f57857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460c48e996105368b9997610100998b9960209f604060e09101528160e08b01528b8a013760008a868a01015260648301356060890152610b4a565b1515608087015261054960a48201610b4a565b151560a0870152013560c08501520116010301915afa93841561066c57600094610633575b5060405160208101907f616363657074496d706c696369745265717565737400000000000000000000008252601581526105a9603582610847565b51902092519051907fffffffffffffffffffffffffffffffffffffffff000000000000000000000000604051936020850195865260601b16604084015260548301526074820152607481526105ff609482610847565b5190200361060957005b7f0881ad5d0000000000000000000000000000000000000000000000000000000060005260046000fd5b9093506020813d602011610664575b8161064f60209383610847565b8101031261065f5751923861056e565b600080fd5b3d9150610642565b6040513d6000823e3d90fd5b7faa7feadc0000000000000000000000000000000000000000000000000000000060005260046000fd5b73ffffffffffffffffffffffffffffffffffffffff6106c083610aca565b7fd33f19e7000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b7fd33f19e70000000000000000000000000000000000000000000000000000000060005260045260246000fd5b7faa25f2ad0000000000000000000000000000000000000000000000000000000060005260046000fd5b7fc1e84ed60000000000000000000000000000000000000000000000000000000060005260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b3461065f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261065f5760043573ffffffffffffffffffffffffffffffffffffffff8116810361065f5760243567ffffffffffffffff811161065f5760209161081661081c923690600401610888565b906109bc565b6040519015158152f35b359073ffffffffffffffffffffffffffffffffffffffff8216820361065f57565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761077257604052565b9080601f8301121561065f5781359167ffffffffffffffff8311610772578260051b90604051936108bc6020840186610847565b845260208085019282010192831161065f57602001905b8282106108e05750505090565b602080916108ed84610826565b8152019101906108d3565b92919267ffffffffffffffff82116107725760405191610940601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200184610847565b82948184528183011161065f578281602093846000960137010152565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821360011661098d57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000916109c9815161095d565b925b838113156109dc5750505050600090565b60008112908115818603868113821687821285161761098d5760029005928383019384129081151691161761098d578251821015610a9b5773ffffffffffffffffffffffffffffffffffffffff60208360051b850101511673ffffffffffffffffffffffffffffffffffffffff851690818114600014610a625750505050505050600190565b1015610a8b57506001810190600060018312911290801582169115161761098d57925b926109cb565b9350610a969061095d565b610a85565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b3573ffffffffffffffffffffffffffffffffffffffff8116810361065f5790565b919082519283825260005b848110610b355750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201610af6565b3590811515820361065f5756fea2646970667358221220914f098ecfe412420796205c67c00ebda96665de1d631997b41cbaada8f0305164736f6c634300081c0033","sourceMap":"7493:648:85:-:0;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436101561001257600080fd5b60003560e01c806380c95a31146107a15763e10daf111461003257600080fd5b3461065f5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261065f5760043567ffffffffffffffff811161065f5780600401908036039160e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc84011261065f576024359073ffffffffffffffffffffffffffffffffffffffff821680830361065f576044359373ffffffffffffffffffffffffffffffffffffffff85169182860361065f576064359567ffffffffffffffff871161065f5760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc883603011261065f576040519760c0890189811067ffffffffffffffff8211176107725760405261015488600401610826565b895260248801357fffffffff000000000000000000000000000000000000000000000000000000008116810361065f5760208a0190815260408a019660448a0135885260608b019960648101358b52608481013567ffffffffffffffff811161065f5781013660238201121561065f576101d89036906024600482013591016108f8565b9060808d0191825260a48101359067ffffffffffffffff821161065f57019760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8a3603011261065f576040519860408a018a811067ffffffffffffffff82111761077257604052600481013567ffffffffffffffff811161065f576004908201019036601f8301121561065f5761027a60249236906020813591016108f8565b8b52013567ffffffffffffffff8116810361065f5760208a015260a08d019889526084359067ffffffffffffffff821161065f5773ffffffffffffffffffffffffffffffffffffffff6102d28f933690600401610888565b92511681036107455760848901968735801515810361065f5761071b57826102f9916109bc565b6106ee57506103109061030b84610aca565b6109bc565b6106a257602487013592836106785761032883610aca565b73ffffffffffffffffffffffffffffffffffffffff16966040519d8e917f9d043a66000000000000000000000000000000000000000000000000000000008352600483015260248201606090525173ffffffffffffffffffffffffffffffffffffffff169060640152517fffffffff000000000000000000000000000000000000000000000000000000001660848d0152885160a48d01528a5160c48d01525160e48c0160c090526101248c016103de91610aeb565b9651968b81037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c016101048d01528751604082526040820161041f91610aeb565b976020015167ffffffffffffffff1690602001528a87037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0160448c015261046690610826565b73ffffffffffffffffffffffffffffffffffffffff16865260208601526044840135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd0181121561065f5783016024600482013591019167ffffffffffffffff821161065f57813603831361065f57857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460c48e996105368b9997610100998b9960209f604060e09101528160e08b01528b8a013760008a868a01015260648301356060890152610b4a565b1515608087015261054960a48201610b4a565b151560a0870152013560c08501520116010301915afa93841561066c57600094610633575b5060405160208101907f616363657074496d706c696369745265717565737400000000000000000000008252601581526105a9603582610847565b51902092519051907fffffffffffffffffffffffffffffffffffffffff000000000000000000000000604051936020850195865260601b16604084015260548301526074820152607481526105ff609482610847565b5190200361060957005b7f0881ad5d0000000000000000000000000000000000000000000000000000000060005260046000fd5b9093506020813d602011610664575b8161064f60209383610847565b8101031261065f5751923861056e565b600080fd5b3d9150610642565b6040513d6000823e3d90fd5b7faa7feadc0000000000000000000000000000000000000000000000000000000060005260046000fd5b73ffffffffffffffffffffffffffffffffffffffff6106c083610aca565b7fd33f19e7000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b7fd33f19e70000000000000000000000000000000000000000000000000000000060005260045260246000fd5b7faa25f2ad0000000000000000000000000000000000000000000000000000000060005260046000fd5b7fc1e84ed60000000000000000000000000000000000000000000000000000000060005260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b3461065f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261065f5760043573ffffffffffffffffffffffffffffffffffffffff8116810361065f5760243567ffffffffffffffff811161065f5760209161081661081c923690600401610888565b906109bc565b6040519015158152f35b359073ffffffffffffffffffffffffffffffffffffffff8216820361065f57565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761077257604052565b9080601f8301121561065f5781359167ffffffffffffffff8311610772578260051b90604051936108bc6020840186610847565b845260208085019282010192831161065f57602001905b8282106108e05750505090565b602080916108ed84610826565b8152019101906108d3565b92919267ffffffffffffffff82116107725760405191610940601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200184610847565b82948184528183011161065f578281602093846000960137010152565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821360011661098d57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000916109c9815161095d565b925b838113156109dc5750505050600090565b60008112908115818603868113821687821285161761098d5760029005928383019384129081151691161761098d578251821015610a9b5773ffffffffffffffffffffffffffffffffffffffff60208360051b850101511673ffffffffffffffffffffffffffffffffffffffff851690818114600014610a625750505050505050600190565b1015610a8b57506001810190600060018312911290801582169115161761098d57925b926109cb565b9350610a969061095d565b610a85565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b3573ffffffffffffffffffffffffffffffffffffffff8116810361065f5790565b919082519283825260005b848110610b355750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201610af6565b3590811515820361065f5756fea2646970667358221220914f098ecfe412420796205c67c00ebda96665de1d631997b41cbaada8f0305164736f6c634300081c0033","sourceMap":"7493:648:85:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;1001:43:42;;997:120;;7493:648:85;1165:17:42;;7493:648:85;;;;;;;;;;1161:80:42;;1292:47;;;;:::i;:::-;1288:122;;1491:7;1469:41;1491:7;;;;:::i;:::-;1469:41;:::i;:::-;1465:110;;7493:648:85;1600:10:42;;7493:648:85;1600:14:42;;1596:70;;1747:7;;;:::i;:::-;7493:648:85;;;;;1726:78:42;;;7493:648:85;1726:78:42;;7493:648:85;1726:78:42;;7493:648:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1726:78:42;;;;;;;;;;7493:648:85;1726:78:42;;;7493:648:85;;;;;284:41:41;;7493:648:85;;;;284:41:41;;;;;;;:::i;:::-;7493:648:85;274:52:41;;;;;;7493:648:85;274:52:41;7493:648:85;;4476:112:40;7493:648:85;4476:112:40;;7493:648:85;;;;274:52:41;;7493:648:85;274:52:41;;;;;;7493:648:85;274:52:41;;;7493:648:85;274:52:41;4476:112:40;;;;;;:::i;:::-;7493:648:85;4459:135:40;;1895:26:42;1891:91;;7493:648:85;1891:91:42;1938:37;7493:648:85;1938:37:42;7493:648:85;;1938:37:42;1726:78;;;;7493:648:85;1726:78:42;;7493:648:85;1726:78:42;;;;;;7493:648:85;1726:78:42;;;:::i;:::-;;;7493:648:85;;;;;1726:78:42;;;;7493:648:85;;;;1726:78:42;;;-1:-1:-1;1726:78:42;;;7493:648:85;;;;;;;;;1596:70:42;1631:28;7493:648:85;1631:28:42;7493:648:85;;1631:28:42;1465:110;7493:648:85;1560:7:42;;;:::i;:::-;1527:41;7493:648:85;1527:41:42;7493:648:85;;;;;1527:41:42;1288:122;1356:47;7493:648:85;1356:47:42;7493:648:85;;;;1356:47:42;1161:80;1199:35;7493:648:85;1199:35:42;7493:648:85;;1199:35:42;997:120;1061:49;7493:648:85;1061:49:42;7493:648:85;;;;1061:49:42;7493:648:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8093:40;7493:648;;;;;;:::i;:::-;8093:40;;:::i;:::-;7493:648;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;7493:648:85;;;;;;:::o;:::-;;;;;;;;2415:1:42;7493:648:85;;;:::o;:::-;;;;;;;;;;2242:511:42;7493:648:85;;2388:28:42;7493:648:85;;2388:28:42;:::i;:::-;2423:307;2430:13;;;;;;;2736:12;;;;7493:648:85;2242:511:42;:::o;2423:307::-;7493:648:85;;;;;;;;;;;;;;;;;;;;;;2490:1:42;7493:648:85;;2466:25:42;7493:648:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2560:24:42;;;;2556:168;2560:24;;;2596:11;;;;;;;2415:1;2596:11;:::o;2556:168::-;2626:23;;;;2668:7;2415:1;7493:648:85;;;;2415:1:42;7493:648:85;;;;;;;;;;;;;;;2622:102:42;;2423:307;;;2622:102;2708:7;;;;;:::i;:::-;2622:102;;7493:648:85;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o","linkReferences":{}},"methodIdentifiers":{"isAddressBlacklisted(address,address[])":"80c95a31","validateImplicitCall((address,uint256,bytes,uint256,bool,bool,uint256),address,address,(address,bytes4,bytes32,bytes32,bytes,(string,uint64)),address[])":"e10daf11"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"BlacklistedAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidImplicitResult\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"invalidSigner\",\"type\":\"address\"}],\"name\":\"InvalidSessionSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidValue\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"blacklist\",\"type\":\"address[]\"}],\"name\":\"isAddressBlacklisted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call\",\"name\":\"call\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"wallet\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sessionSigner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"approvedSigner\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"identityType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes32\",\"name\":\"issuerHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"audienceHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"applicationData\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"redirectUrl\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"issuedAt\",\"type\":\"uint64\"}],\"internalType\":\"struct AuthData\",\"name\":\"authData\",\"type\":\"tuple\"}],\"internalType\":\"struct Attestation\",\"name\":\"attestation\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"blacklist\",\"type\":\"address[]\"}],\"name\":\"validateImplicitCall\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"BlacklistedAddress(address)\":[{\"notice\":\"Blacklisted address\"}],\"InvalidDelegateCall()\":[{\"notice\":\"Invalid delegate call\"}],\"InvalidImplicitResult()\":[{\"notice\":\"Invalid implicit result\"}],\"InvalidSessionSigner(address)\":[{\"notice\":\"Invalid session signer\"}],\"InvalidValue()\":[{\"notice\":\"Invalid value\"}]},\"kind\":\"user\",\"methods\":{\"isAddressBlacklisted(address,address[])\":{\"notice\":\"Exposes the internal _isAddressBlacklisted function.\"},\"validateImplicitCall((address,uint256,bytes,uint256,bool,bool,uint256),address,address,(address,bytes4,bytes32,bytes32,bytes,(string,uint64)),address[])\":{\"notice\":\"Exposes the internal _validateImplicitCall function.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/extensions/sessions/implicit/ImplicitSessionManager.t.sol\":\"ImplicitSessionManagerHarness\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/extensions/sessions/SessionErrors.sol\":{\"keccak256\":\"0xa7642b4ef1d2ac8e41bd6dca88c5a644cac21b3ebe79deb5013e21fb4aaab405\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ef80768f6c509a54ea5d3fb92cbf46363f945f071cc3664710770c09b3d2a978\",\"dweb:/ipfs/QmbRpicAiPSYQbKpjoDbanap9q5hYsqEMS1u7w7sqKEYTY\"]},\"src/extensions/sessions/SessionManager.sol\":{\"keccak256\":\"0x796e8db3b2dc58842aca5c7fe76897527dd60279a8146ee107f651d876fccbd9\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2ee4d968a8bd5d007cccc67108509470677f4f5ce59dce7005b1da7d9b243609\",\"dweb:/ipfs/QmVUz8Q4BwNsbeLZdsWHg87MCVF6aAJL6UYzWWWAoxjvS7\"]},\"src/extensions/sessions/SessionSig.sol\":{\"keccak256\":\"0x7c44eabacfd2b4758fa8f54574f7479d8ef0209551ad824b3fc497c215a9609a\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://845b301783b1f069fa0b01d47ca2de1a79b0d4c3e14881973421a718c4d823df\",\"dweb:/ipfs/QmcDgiqjENAL3L7MjQ7HgitmsJ2PVNUm3ibnL2DZRU1VAL\"]},\"src/extensions/sessions/explicit/ExplicitSessionManager.sol\":{\"keccak256\":\"0x08405cc3def78d4172267a2e607e303b5f222d8cb85ba009deab58e0110088b0\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e2e073fdb5794f59ee6d7eb5e04074b1452e5d0824e4117259835071199f3d32\",\"dweb:/ipfs/Qmbi56yfELF88ezZ2tczegLmeB6Gb3HxDX11bzx3rpDgJZ\"]},\"src/extensions/sessions/explicit/IExplicitSessionManager.sol\":{\"keccak256\":\"0xae940e96cf0677c9b0df0daee07db0293c55a21cec0b893d82eefd122815602b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://62ee98f92121ad54f78d375ec3003aab73719adec852b0d12518fe99fc6f66c6\",\"dweb:/ipfs/QmPuAX7tdga5Su1xua6LS6jR9DsV7GyCwyZLeRC8upPTKY\"]},\"src/extensions/sessions/explicit/Permission.sol\":{\"keccak256\":\"0x0bc35a04da3830c64ec13c32b57f88be6b980228f6b387e800cf70919cdcfb16\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://fcb304612f894699f8e1e40cf134abebe8f7135795bea479b04e967551c59948\",\"dweb:/ipfs/Qme4mD8dh3xU9wbscQwvL4cQcZ2Wv8Fobo2fmU29B3DirV\"]},\"src/extensions/sessions/explicit/PermissionValidator.sol\":{\"keccak256\":\"0xe970e1ce931ef3779e3ddc9525b40820b7f63746828a440306ff9c984da42234\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://9154a986b7a5565119b2c0993dd9bc9e6e9b3e07eede034c8fde1c9f39a56a30\",\"dweb:/ipfs/QmXbgsr6kYYK5gmge6sosgwbHnFnQW5ntCZCyeNTQqTndD\"]},\"src/extensions/sessions/implicit/Attestation.sol\":{\"keccak256\":\"0xcaa44022b5eb4bc7ab487b3b1a0125da67e2e891cee983ef6cdb6814f045efc8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://94829782b6dcb482d7c002511c590d1ad8de3b21e5e72575df18be73565b3638\",\"dweb:/ipfs/QmZ4u9FxALzMzKR7auW8FmFkhGVw8kRDeDRJ1PKwKaWNWF\"]},\"src/extensions/sessions/implicit/ISignalsImplicitMode.sol\":{\"keccak256\":\"0x6cb48f50c49bcb3c7071306fe9fac6c102bc9eabf73d9909e19ab3b9a835d0a8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://15297e969f64fc1152654d1cefbe276c15a0ecfc11f86b4c276bb0b454fe700a\",\"dweb:/ipfs/QmeehNFYBPPtJePwUcqiYCgiuFotur4VVVCV1KvegdCCZ4\"]},\"src/extensions/sessions/implicit/ImplicitSessionManager.sol\":{\"keccak256\":\"0xe0d4f9f9c242e1e5781ba3a2eb4c4485b16de53769dacf7f448be01649d9997b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://f6f28cfeca83fffc74e63440243fcb0a7f9a7d5ac5efae21fa8e96926c1d0fae\",\"dweb:/ipfs/Qmdnw9PrjjpUjWij9VDxBRe6besuJvpwiGaPewVcR2G9C1\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/interfaces/ISapient.sol\":{\"keccak256\":\"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489\",\"dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"src/utils/LibOptim.sol\":{\"keccak256\":\"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81\",\"dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x\"]},\"test/extensions/sessions/SessionTestBase.sol\":{\"keccak256\":\"0x96ed18b2829a94a4e2fa0331b595e931ba48114679aa9765799aa9583713a1e7\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1f5dc74df056ea0b6722898060c5f467d47c7961335d474d93a3d45a75575894\",\"dweb:/ipfs/QmPT1ArcYmBUASEr2iL5TnRRkwShMahRh8YWurcbGkwJa4\"]},\"test/extensions/sessions/implicit/ImplicitSessionManager.t.sol\":{\"keccak256\":\"0x8a2dfffae1d4f0f852520302cbd931e45b82247a2d92b4e49e464441d46594e8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://525f94a8e30bc0efc9964625f7fe743e4e9b147ec46883ec7af1ea7403cf6896\",\"dweb:/ipfs/QmNREMnVfJNsXkpJtWWRTBZqHXatvRyUeTLnmysR1Bn52j\"]},\"test/mocks/Emitter.sol\":{\"keccak256\":\"0xb3fe3585f667c0af3e9deaaf6f7e68b16067014c9363367b4548c91abf367b27\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e6985271645ec1df625995837c2afb23f7042d7a4c18c992f5f1c9ff1c89b160\",\"dweb:/ipfs/QmTwQRRY95Z73vDP5EuamAQxTaSprwGy3piLRrWDf9FnoU\"]},\"test/utils/PrimitivesRPC.sol\":{\"keccak256\":\"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe\",\"dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv\"]},\"test/utils/TestUtils.sol\":{\"keccak256\":\"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad\",\"dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"BlacklistedAddress"},{"inputs":[],"type":"error","name":"InvalidDelegateCall"},{"inputs":[],"type":"error","name":"InvalidImplicitResult"},{"inputs":[{"internalType":"address","name":"invalidSigner","type":"address"}],"type":"error","name":"InvalidSessionSigner"},{"inputs":[],"type":"error","name":"InvalidValue"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"address[]","name":"blacklist","type":"address[]"}],"stateMutability":"pure","type":"function","name":"isAddressBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"struct Payload.Call","name":"call","type":"tuple","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"address","name":"wallet","type":"address"},{"internalType":"address","name":"sessionSigner","type":"address"},{"internalType":"struct Attestation","name":"attestation","type":"tuple","components":[{"internalType":"address","name":"approvedSigner","type":"address"},{"internalType":"bytes4","name":"identityType","type":"bytes4"},{"internalType":"bytes32","name":"issuerHash","type":"bytes32"},{"internalType":"bytes32","name":"audienceHash","type":"bytes32"},{"internalType":"bytes","name":"applicationData","type":"bytes"},{"internalType":"struct AuthData","name":"authData","type":"tuple","components":[{"internalType":"string","name":"redirectUrl","type":"string"},{"internalType":"uint64","name":"issuedAt","type":"uint64"}]}]},{"internalType":"address[]","name":"blacklist","type":"address[]"}],"stateMutability":"view","type":"function","name":"validateImplicitCall"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{"isAddressBlacklisted(address,address[])":{"notice":"Exposes the internal _isAddressBlacklisted function."},"validateImplicitCall((address,uint256,bytes,uint256,bool,bool,uint256),address,address,(address,bytes4,bytes32,bytes32,bytes,(string,uint64)),address[])":{"notice":"Exposes the internal _validateImplicitCall function."}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/extensions/sessions/implicit/ImplicitSessionManager.t.sol":"ImplicitSessionManagerHarness"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/extensions/sessions/SessionErrors.sol":{"keccak256":"0xa7642b4ef1d2ac8e41bd6dca88c5a644cac21b3ebe79deb5013e21fb4aaab405","urls":["bzz-raw://ef80768f6c509a54ea5d3fb92cbf46363f945f071cc3664710770c09b3d2a978","dweb:/ipfs/QmbRpicAiPSYQbKpjoDbanap9q5hYsqEMS1u7w7sqKEYTY"],"license":"Apache-2.0"},"src/extensions/sessions/SessionManager.sol":{"keccak256":"0x796e8db3b2dc58842aca5c7fe76897527dd60279a8146ee107f651d876fccbd9","urls":["bzz-raw://2ee4d968a8bd5d007cccc67108509470677f4f5ce59dce7005b1da7d9b243609","dweb:/ipfs/QmVUz8Q4BwNsbeLZdsWHg87MCVF6aAJL6UYzWWWAoxjvS7"],"license":"Apache-2.0"},"src/extensions/sessions/SessionSig.sol":{"keccak256":"0x7c44eabacfd2b4758fa8f54574f7479d8ef0209551ad824b3fc497c215a9609a","urls":["bzz-raw://845b301783b1f069fa0b01d47ca2de1a79b0d4c3e14881973421a718c4d823df","dweb:/ipfs/QmcDgiqjENAL3L7MjQ7HgitmsJ2PVNUm3ibnL2DZRU1VAL"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/ExplicitSessionManager.sol":{"keccak256":"0x08405cc3def78d4172267a2e607e303b5f222d8cb85ba009deab58e0110088b0","urls":["bzz-raw://e2e073fdb5794f59ee6d7eb5e04074b1452e5d0824e4117259835071199f3d32","dweb:/ipfs/Qmbi56yfELF88ezZ2tczegLmeB6Gb3HxDX11bzx3rpDgJZ"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/IExplicitSessionManager.sol":{"keccak256":"0xae940e96cf0677c9b0df0daee07db0293c55a21cec0b893d82eefd122815602b","urls":["bzz-raw://62ee98f92121ad54f78d375ec3003aab73719adec852b0d12518fe99fc6f66c6","dweb:/ipfs/QmPuAX7tdga5Su1xua6LS6jR9DsV7GyCwyZLeRC8upPTKY"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/Permission.sol":{"keccak256":"0x0bc35a04da3830c64ec13c32b57f88be6b980228f6b387e800cf70919cdcfb16","urls":["bzz-raw://fcb304612f894699f8e1e40cf134abebe8f7135795bea479b04e967551c59948","dweb:/ipfs/Qme4mD8dh3xU9wbscQwvL4cQcZ2Wv8Fobo2fmU29B3DirV"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/PermissionValidator.sol":{"keccak256":"0xe970e1ce931ef3779e3ddc9525b40820b7f63746828a440306ff9c984da42234","urls":["bzz-raw://9154a986b7a5565119b2c0993dd9bc9e6e9b3e07eede034c8fde1c9f39a56a30","dweb:/ipfs/QmXbgsr6kYYK5gmge6sosgwbHnFnQW5ntCZCyeNTQqTndD"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/Attestation.sol":{"keccak256":"0xcaa44022b5eb4bc7ab487b3b1a0125da67e2e891cee983ef6cdb6814f045efc8","urls":["bzz-raw://94829782b6dcb482d7c002511c590d1ad8de3b21e5e72575df18be73565b3638","dweb:/ipfs/QmZ4u9FxALzMzKR7auW8FmFkhGVw8kRDeDRJ1PKwKaWNWF"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/ISignalsImplicitMode.sol":{"keccak256":"0x6cb48f50c49bcb3c7071306fe9fac6c102bc9eabf73d9909e19ab3b9a835d0a8","urls":["bzz-raw://15297e969f64fc1152654d1cefbe276c15a0ecfc11f86b4c276bb0b454fe700a","dweb:/ipfs/QmeehNFYBPPtJePwUcqiYCgiuFotur4VVVCV1KvegdCCZ4"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/ImplicitSessionManager.sol":{"keccak256":"0xe0d4f9f9c242e1e5781ba3a2eb4c4485b16de53769dacf7f448be01649d9997b","urls":["bzz-raw://f6f28cfeca83fffc74e63440243fcb0a7f9a7d5ac5efae21fa8e96926c1d0fae","dweb:/ipfs/Qmdnw9PrjjpUjWij9VDxBRe6besuJvpwiGaPewVcR2G9C1"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/interfaces/ISapient.sol":{"keccak256":"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359","urls":["bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489","dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"src/utils/LibOptim.sol":{"keccak256":"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde","urls":["bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81","dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x"],"license":"Apache-2.0"},"test/extensions/sessions/SessionTestBase.sol":{"keccak256":"0x96ed18b2829a94a4e2fa0331b595e931ba48114679aa9765799aa9583713a1e7","urls":["bzz-raw://1f5dc74df056ea0b6722898060c5f467d47c7961335d474d93a3d45a75575894","dweb:/ipfs/QmPT1ArcYmBUASEr2iL5TnRRkwShMahRh8YWurcbGkwJa4"],"license":"Apache-2.0"},"test/extensions/sessions/implicit/ImplicitSessionManager.t.sol":{"keccak256":"0x8a2dfffae1d4f0f852520302cbd931e45b82247a2d92b4e49e464441d46594e8","urls":["bzz-raw://525f94a8e30bc0efc9964625f7fe743e4e9b147ec46883ec7af1ea7403cf6896","dweb:/ipfs/QmNREMnVfJNsXkpJtWWRTBZqHXatvRyUeTLnmysR1Bn52j"],"license":"Apache-2.0"},"test/mocks/Emitter.sol":{"keccak256":"0xb3fe3585f667c0af3e9deaaf6f7e68b16067014c9363367b4548c91abf367b27","urls":["bzz-raw://e6985271645ec1df625995837c2afb23f7042d7a4c18c992f5f1c9ff1c89b160","dweb:/ipfs/QmTwQRRY95Z73vDP5EuamAQxTaSprwGy3piLRrWDf9FnoU"],"license":"Apache-2.0"},"test/utils/PrimitivesRPC.sol":{"keccak256":"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe","urls":["bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe","dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv"],"license":"Apache-2.0"},"test/utils/TestUtils.sol":{"keccak256":"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79","urls":["bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad","dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa"],"license":"Apache-2.0"}},"version":1},"id":85} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/ImplicitSessionManager.t.sol/ImplicitSessionManagerTest.json b/contracts/artifacts/wallet-contracts-v3/ImplicitSessionManager.t.sol/ImplicitSessionManagerTest.json new file mode 100644 index 00000000..e04d3473 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/ImplicitSessionManager.t.sol/ImplicitSessionManagerTest.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"emitter","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract Emitter"}],"stateMutability":"view"},{"type":"function","name":"excludeArtifacts","inputs":[],"outputs":[{"name":"excludedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"excludeContracts","inputs":[],"outputs":[{"name":"excludedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"excludeSelectors","inputs":[],"outputs":[{"name":"excludedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"excludeSenders","inputs":[],"outputs":[{"name":"excludedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"identityWallet","inputs":[],"outputs":[{"name":"addr","type":"address","internalType":"address"},{"name":"publicKeyX","type":"uint256","internalType":"uint256"},{"name":"publicKeyY","type":"uint256","internalType":"uint256"},{"name":"privateKey","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"sessionManager","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract ImplicitSessionManagerHarness"}],"stateMutability":"view"},{"type":"function","name":"sessionWallet","inputs":[],"outputs":[{"name":"addr","type":"address","internalType":"address"},{"name":"publicKeyX","type":"uint256","internalType":"uint256"},{"name":"publicKeyY","type":"uint256","internalType":"uint256"},{"name":"privateKey","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"setUp","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"targetArtifactSelectors","inputs":[],"outputs":[{"name":"targetedArtifactSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzArtifactSelector[]","components":[{"name":"artifact","type":"string","internalType":"string"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetArtifacts","inputs":[],"outputs":[{"name":"targetedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"targetContracts","inputs":[],"outputs":[{"name":"targetedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"targetInterfaces","inputs":[],"outputs":[{"name":"targetedInterfaces_","type":"tuple[]","internalType":"struct StdInvariant.FuzzInterface[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"artifacts","type":"string[]","internalType":"string[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSelectors","inputs":[],"outputs":[{"name":"targetedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSenders","inputs":[],"outputs":[{"name":"targetedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"test_blacklistedAddressNotAllowed","inputs":[{"name":"randomIdx","type":"uint256","internalType":"uint256"},{"name":"attestation","type":"tuple","internalType":"struct Attestation","components":[{"name":"approvedSigner","type":"address","internalType":"address"},{"name":"identityType","type":"bytes4","internalType":"bytes4"},{"name":"issuerHash","type":"bytes32","internalType":"bytes32"},{"name":"audienceHash","type":"bytes32","internalType":"bytes32"},{"name":"applicationData","type":"bytes","internalType":"bytes"},{"name":"authData","type":"tuple","internalType":"struct AuthData","components":[{"name":"redirectUrl","type":"string","internalType":"string"},{"name":"issuedAt","type":"uint64","internalType":"uint64"}]}]},{"name":"blacklist","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_blacklistedSessionSignerNotAllowed","inputs":[{"name":"randomIdx","type":"uint256","internalType":"uint256"},{"name":"attestation","type":"tuple","internalType":"struct Attestation","components":[{"name":"approvedSigner","type":"address","internalType":"address"},{"name":"identityType","type":"bytes4","internalType":"bytes4"},{"name":"issuerHash","type":"bytes32","internalType":"bytes32"},{"name":"audienceHash","type":"bytes32","internalType":"bytes32"},{"name":"applicationData","type":"bytes","internalType":"bytes"},{"name":"authData","type":"tuple","internalType":"struct AuthData","components":[{"name":"redirectUrl","type":"string","internalType":"string"},{"name":"issuedAt","type":"uint64","internalType":"uint64"}]}]},{"name":"blacklist","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_delegateCallNotAllowed","inputs":[{"name":"attestation","type":"tuple","internalType":"struct Attestation","components":[{"name":"approvedSigner","type":"address","internalType":"address"},{"name":"identityType","type":"bytes4","internalType":"bytes4"},{"name":"issuerHash","type":"bytes32","internalType":"bytes32"},{"name":"audienceHash","type":"bytes32","internalType":"bytes32"},{"name":"applicationData","type":"bytes","internalType":"bytes"},{"name":"authData","type":"tuple","internalType":"struct AuthData","components":[{"name":"redirectUrl","type":"string","internalType":"string"},{"name":"issuedAt","type":"uint64","internalType":"uint64"}]}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_invalidImplicitResult","inputs":[{"name":"attestation","type":"tuple","internalType":"struct Attestation","components":[{"name":"approvedSigner","type":"address","internalType":"address"},{"name":"identityType","type":"bytes4","internalType":"bytes4"},{"name":"issuerHash","type":"bytes32","internalType":"bytes32"},{"name":"audienceHash","type":"bytes32","internalType":"bytes32"},{"name":"applicationData","type":"bytes","internalType":"bytes"},{"name":"authData","type":"tuple","internalType":"struct AuthData","components":[{"name":"redirectUrl","type":"string","internalType":"string"},{"name":"issuedAt","type":"uint64","internalType":"uint64"}]}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_nonZeroValueNotAllowed","inputs":[{"name":"attestation","type":"tuple","internalType":"struct Attestation","components":[{"name":"approvedSigner","type":"address","internalType":"address"},{"name":"identityType","type":"bytes4","internalType":"bytes4"},{"name":"issuerHash","type":"bytes32","internalType":"bytes32"},{"name":"audienceHash","type":"bytes32","internalType":"bytes32"},{"name":"applicationData","type":"bytes","internalType":"bytes"},{"name":"authData","type":"tuple","internalType":"struct AuthData","components":[{"name":"redirectUrl","type":"string","internalType":"string"},{"name":"issuedAt","type":"uint64","internalType":"uint64"}]}]},{"name":"nonZeroValue","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_validImplicitCall","inputs":[{"name":"attestation","type":"tuple","internalType":"struct Attestation","components":[{"name":"approvedSigner","type":"address","internalType":"address"},{"name":"identityType","type":"bytes4","internalType":"bytes4"},{"name":"issuerHash","type":"bytes32","internalType":"bytes32"},{"name":"audienceHash","type":"bytes32","internalType":"bytes32"},{"name":"applicationData","type":"bytes","internalType":"bytes"},{"name":"authData","type":"tuple","internalType":"struct AuthData","components":[{"name":"redirectUrl","type":"string","internalType":"string"},{"name":"issuedAt","type":"uint64","internalType":"uint64"}]}]},{"name":"blacklist","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_validImplicitCall_invalidSessionSigner","inputs":[{"name":"attestation","type":"tuple","internalType":"struct Attestation","components":[{"name":"approvedSigner","type":"address","internalType":"address"},{"name":"identityType","type":"bytes4","internalType":"bytes4"},{"name":"issuerHash","type":"bytes32","internalType":"bytes32"},{"name":"audienceHash","type":"bytes32","internalType":"bytes32"},{"name":"applicationData","type":"bytes","internalType":"bytes"},{"name":"authData","type":"tuple","internalType":"struct AuthData","components":[{"name":"redirectUrl","type":"string","internalType":"string"},{"name":"issuedAt","type":"uint64","internalType":"uint64"}]}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"wallet","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"event","name":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false}],"bytecode":{"object":"0x60808060405234602f57600160ff19600c541617600c55600160ff19601f541617601f5561460090816100358239f35b600080fdfe608080604052600436101561001357600080fd5b600090813560e01c9081630a9254e414611f13575080631ed7831c14611e6a5780632aa7856c14611dfb5780632ade388014611bcf578063320e7b63146119345780633e092074146116d45780633e5e3c231461162b5780633f7286f414611582578063521eb2731461153057806366d9a9a0146113d55780636ba4271b146111bf5780636e183b1a14610fbc57806377680a2f14610ce557806385226c8114610c3d578063916a17c614610b68578063b0464fdc14610a93578063b5508aa9146109eb578063b7b13f7914610996578063ba414fa614610953578063bd3f030a14610711578063ca8a0912146102f8578063dce11375146102a7578063de184e2214610238578063e20c9f71146101775763fa7626d41461013457600080fd5b3461017457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017457602060ff601f54166040519015158152f35b80fd5b503461017457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101745760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b81811061020c57610208856101f481870382612461565b604051918291602083526020830190612351565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016101dd565b503461017457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610174576022546023546024546025546040805173ffffffffffffffffffffffffffffffffffffffff90951685526020850193909352918301526060820152608090f35b503461017457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017457602073ffffffffffffffffffffffffffffffffffffffff815416604051908152f35b503461017457610307366126dc565b90918382511515737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561070d57604051907f4c63e56200000000000000000000000000000000000000000000000000000000825260048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610693576106f8575b50508151907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82019182116106cb576103dc9392916103ba91613042565b73ffffffffffffffffffffffffffffffffffffffff6020541693849183612bb1565b5283809273ffffffffffffffffffffffffffffffffffffffff60225416935b83518110156104cb578473ffffffffffffffffffffffffffffffffffffffff6104248387612bb1565b51161415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156104c757604051907f4c63e56200000000000000000000000000000000000000000000000000000000825260048201528381602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156104bc5784916104a3575b50506001016103fb565b816104ad91612461565b6104b8578238610499565b8280fd5b6040513d86823e3d90fd5b8380fd5b5083856104d8849561311e565b91835261051c6040517feca9b31a00000000000000000000000000000000000000000000000000000000602082015260048152610516602482612461565b82612fbd565b90604051907fd33f19e700000000000000000000000000000000000000000000000000000000602083015260248201526024815261055b604482612461565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106c757846105b691604051809381927ff28dceb300000000000000000000000000000000000000000000000000000000835260206004840152602483019061239b565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156106bc5785916106a2575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c1673ffffffffffffffffffffffffffffffffffffffff6021541673ffffffffffffffffffffffffffffffffffffffff6022541692823b1561069e576106718795604051978896879586957fe10daf1100000000000000000000000000000000000000000000000000000000875260048701612a69565b03915afa8015610693576106825750f35b8161068c91612461565b6101745780f35b6040513d84823e3d90fd5b8680fd5b816106ac91612461565b6106b75783866105de565b505050fd5b6040513d87823e3d90fd5b8480fd5b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b8161070291612461565b6104c757833861037c565b5080fd5b50346101745760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610174578060043567ffffffffffffffff81116109505761076290369060040161252d565b73ffffffffffffffffffffffffffffffffffffffff6022541681526107d773ffffffffffffffffffffffffffffffffffffffff60205416604051907f0c0340fc000000000000000000000000000000000000000000000000000000006020830152600482526107d2602483612461565b612fbd565b604051906107e6602083612461565b83825260003681376040517f0881ad5d00000000000000000000000000000000000000000000000000000000602082015260048152610826602482612461565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106c7578461088191604051809381927ff28dceb300000000000000000000000000000000000000000000000000000000835260206004840152602483019061239b565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156106bc57859161093b57505073ffffffffffffffffffffffffffffffffffffffff601f5460081c1673ffffffffffffffffffffffffffffffffffffffff6021541673ffffffffffffffffffffffffffffffffffffffff6022541692823b1561069e576106718795604051978896879586957fe10daf1100000000000000000000000000000000000000000000000000000000875260048701612a69565b8161094591612461565b6106b75783386105de565b50fd5b503461017457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017457602061098c612ed7565b6040519015158152f35b503461017457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017457602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051908152f35b503461017457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017457601954610a268161265f565b91610a346040519384612461565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b838310610a76576040518061020887826127a2565b600160208192610a8585612962565b815201920192019190610a61565b503461017457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017457601c54610ace8161265f565b91610adc6040519384612461565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b838310610b1e57604051806102088782612820565b60026020600192604051610b31816123fa565b73ffffffffffffffffffffffffffffffffffffffff8654168152610b56858701612c30565b83820152815201920192019190610b09565b503461017457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017457601d54610ba38161265f565b91610bb16040519384612461565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b838310610bf357604051806102088782612820565b60026020600192604051610c06816123fa565b73ffffffffffffffffffffffffffffffffffffffff8654168152610c2b858701612c30565b83820152815201920192019190610bde565b503461017457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017457601a54610c788161265f565b91610c866040519384612461565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b838310610cc8576040518061020887826127a2565b600160208192610cd785612962565b815201920192019190610cb3565b50346101745760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101745760043567ffffffffffffffff811161070d57610d3590369060040161252d565b60243567ffffffffffffffff81116104b857610d55903690600401612677565b829073ffffffffffffffffffffffffffffffffffffffff602254168473ffffffffffffffffffffffffffffffffffffffff60205416935b8351811015610f00578273ffffffffffffffffffffffffffffffffffffffff610db58387612bb1565b51161415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156104b857604051907f4c63e56200000000000000000000000000000000000000000000000000000000825260048201528281602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115610ee0578391610eeb575b50508473ffffffffffffffffffffffffffffffffffffffff610e4c8387612bb1565b51161415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156104b857604051907f4c63e56200000000000000000000000000000000000000000000000000000000825260048201528281602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115610ee0578391610ecb575b5050600101610d8c565b81610ed591612461565b61070d578138610ec1565b6040513d85823e3d90fd5b81610ef591612461565b61070d578138610e2a565b509392610f4390828552604051907feca9b31a000000000000000000000000000000000000000000000000000000006020830152600482526107d2602483612461565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c169073ffffffffffffffffffffffffffffffffffffffff6021541690823b1561069e576106718795604051978896879586957fe10daf1100000000000000000000000000000000000000000000000000000000875260048701612a69565b50346101745760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610174578060043567ffffffffffffffff81116109505761100d90369060040161252d565b602435737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156111bb576040517f4c63e56200000000000000000000000000000000000000000000000000000000815281151560048201528381602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156104bc5784916111a6575b505073ffffffffffffffffffffffffffffffffffffffff60225416825273ffffffffffffffffffffffffffffffffffffffff6020541690604051907feca9b31a000000000000000000000000000000000000000000000000000000006020830152600482526110f3602483612461565b8460c060405161110281612445565b828152826020820152606060408201528260608201528260808201528260a082015201526040519261113384612445565b8352602083015260408201528260608201528260808201528260a08201528260c082015260405190611166602083612461565b83825260003681376040517faa7feadc00000000000000000000000000000000000000000000000000000000602082015260048152610826602482612461565b816111b091612461565b6111bb578238611083565b5050fd5b50346101745760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610174578060043567ffffffffffffffff81116109505761121090369060040161252d565b73ffffffffffffffffffffffffffffffffffffffff81511673ffffffffffffffffffffffffffffffffffffffff6022541690737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106b75781604051917f4c63e562000000000000000000000000000000000000000000000000000000008352141560048201528381602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156104bc5784916113c0575b50506020604051916112c88284612461565b848352600036813761132373ffffffffffffffffffffffffffffffffffffffff835416604051907feca9b31a0000000000000000000000000000000000000000000000000000000085830152600482526107d2602483612461565b91604051917fc1e84ed60000000000000000000000000000000000000000000000000000000082840152602483015260248252611361604483612461565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156113bc5761088191869160405193849283927ff28dceb30000000000000000000000000000000000000000000000000000000084526004840152602483019061239b565b8580fd5b816113ca91612461565b6111bb5782386112b6565b503461017457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017457601b546114108161265f565b61141d6040519182612461565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b8383106114f557868587604051928392602084019060208552518091526040840160408260051b8601019392905b82821061148a57505050500390f35b919360206114e5827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc06001959799849503018652885190836114d5835160408452604084019061239b565b920151908481840391015261274c565b960192019201859493919261147b565b60026020600192604051611508816123fa565b61151186612962565b815261151e858701612c30565b8382015281520192019201919061144d565b503461017457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017457602073ffffffffffffffffffffffffffffffffffffffff60215416604051908152f35b503461017457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101745760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b8181106115ff57610208856101f481870382612461565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016115e8565b503461017457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101745760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b8181106116a857610208856101f481870382612461565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201611691565b5034610174576116e3366126dc565b8381939293511515737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561070d57604051907f4c63e56200000000000000000000000000000000000000000000000000000000825260048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156106935761191f575b509291929173ffffffffffffffffffffffffffffffffffffffff60205416925b825181101561183457858473ffffffffffffffffffffffffffffffffffffffff6117a38487612bb1565b51161415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561070d57604051907f4c63e56200000000000000000000000000000000000000000000000000000000825260048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156106935761181f575b5050600101611779565b8161182991612461565b6113bc578538611815565b50919093928451907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82019182116106cb576118a3859661187b61189d946118e094613042565b73ffffffffffffffffffffffffffffffffffffffff6022541694859183612bb1565b5261311e565b92828552604051907feca9b31a000000000000000000000000000000000000000000000000000000006020830152600482526107d2602483612461565b90604051907fd33f19e7000000000000000000000000000000000000000000000000000000006020830152602482015260248152610826604482612461565b8161192991612461565b6104c7578338611759565b50346101745760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101745760043567ffffffffffffffff811161070d5761198490369060040161252d565b9073ffffffffffffffffffffffffffffffffffffffff60225416825273ffffffffffffffffffffffffffffffffffffffff60205416916040517feca9b31a000000000000000000000000000000000000000000000000000000006020820152600481526119f2602482612461565b8260c0604051611a0181612445565b828152826020820152606060408201528260608201528260808201528260a0820152015260405193611a3285612445565b84528260208501526040840152816060840152600160808401528160a08401528160c0840152604051611a66602082612461565b82815282368137604051937faa25f2ad00000000000000000000000000000000000000000000000000000000602086015260048552611aa6602486612461565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156104c75783611b0195604051809781927ff28dceb300000000000000000000000000000000000000000000000000000000835260206004840152602483019061239b565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156104bc57611bba575b83945073ffffffffffffffffffffffffffffffffffffffff601f5460081c1673ffffffffffffffffffffffffffffffffffffffff6021541673ffffffffffffffffffffffffffffffffffffffff6022541692823b1561069e576106718795604051978896879586957fe10daf1100000000000000000000000000000000000000000000000000000000875260048701612a69565b92909381611bc791612461565b918390611b26565b503461017457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017457601e54611c0a8161265f565b611c176040519182612461565b818152601e83526020810191837f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350845b838310611d655786858760405192839260208401906020855251809152604084019160408260051b8601019392815b838310611c835786860387f35b9193957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09086929496030183528551906020604082019273ffffffffffffffffffffffffffffffffffffffff81511683520151916040602083015282518091526060820190602060608260051b850101940192855b828110611d1c57505050505060208060019297019301930190928695949293611c76565b9091929394602080611d58837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08760019603018952895161239b565b9701950193929101611cf8565b604051611d71816123fa565b73ffffffffffffffffffffffffffffffffffffffff8354168152600183018054611d9a8161265f565b91611da86040519384612461565b8183528a526020808b20908b9084015b838210611dde575050505060019282602092836002950152815201920192019190611c47565b600160208192611ded86612962565b815201930191019091611db8565b503461017457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610174576026546027546028546029546040805173ffffffffffffffffffffffffffffffffffffffff90951685526020850193909352918301526060820152608090f35b503461017457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101745760405180916020601654928381520191601682527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289915b818110611ee757610208856101f481870382612461565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201611ed0565b90503461070d57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261070d57610ba88082019082821067ffffffffffffffff831117612324579082916134528339039082f08015612317577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00601f549260081b16911617601f556040516105d18082019082821067ffffffffffffffff83111761232457908291613ffa8339039082f080156123175773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff000000000000000000000000000000000000000060205416176020556040517f7404f1d200000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f77616c6c65740000000000000000000000000000000000000000000000000000604482015260808160648185737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156106935773ffffffffffffffffffffffffffffffffffffffff9183916122f8575b5051167fffffffffffffffffffffffff000000000000000000000000000000000000000060215416176021556040517f7404f1d200000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f73657373696f6e00000000000000000000000000000000000000000000000000604482015260808160648185737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156106935760609183916122d9575b5073ffffffffffffffffffffffffffffffffffffffff8151167fffffffffffffffffffffffff000000000000000000000000000000000000000060225416176022556020810151602355604081015160245501516025556040517f7404f1d200000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f6964656e74697479000000000000000000000000000000000000000000000000604482015260808160648185737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156106935760609183916122aa575b5073ffffffffffffffffffffffffffffffffffffffff8151167fffffffffffffffffffffffff0000000000000000000000000000000000000000602654161760265560208101516027556040810151602855015160295580f35b6122cc915060803d6080116122d2575b6122c48183612461565b8101906128c5565b38612250565b503d6122ba565b6122f2915060803d6080116122d2576122c48183612461565b38612171565b612311915060803d6080116122d2576122c48183612461565b386120bd565b50604051903d90823e3d90fd5b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b906020808351928381520192019060005b81811061236f5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101612362565b919082519283825260005b8481106123e55750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b806020809284010151828286010152016123a6565b6040810190811067ffffffffffffffff82111761241657604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff82111761241657604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761241657604052565b359073ffffffffffffffffffffffffffffffffffffffff821682036124c357565b600080fd5b92919267ffffffffffffffff82116124165760405191612510601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200184612461565b8294818452818301116124c3578281602093846000960137010152565b919060c0838203126124c35760405160c0810181811067ffffffffffffffff821117612416576040528093612561816124a2565b825260208101357fffffffff00000000000000000000000000000000000000000000000000000000811681036124c35760208301526040810135604083015260608101356060830152608081013567ffffffffffffffff81116124c357810183601f820112156124c357838160206125db933591016124c8565b608083015260a08101359067ffffffffffffffff82116124c35701916040838203126124c3576040519261260e846123fa565b803567ffffffffffffffff81116124c357810182601f820112156124c357602092818461263d933591016124c8565b845201359067ffffffffffffffff821682036124c35760a09160208401520152565b67ffffffffffffffff81116124165760051b60200190565b9080601f830112156124c357813561268e8161265f565b9261269c6040519485612461565b81845260208085019260051b8201019283116124c357602001905b8282106126c45750505090565b602080916126d1846124a2565b8152019101906126b7565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126124c3576004359160243567ffffffffffffffff81116124c357826127299160040161252d565b916044359067ffffffffffffffff82116124c35761274991600401612677565b90565b906020808351928381520192019060005b81811061276a5750505090565b82517fffffffff000000000000000000000000000000000000000000000000000000001684526020938401939092019160010161275d565b602081016020825282518091526040820191602060408360051b8301019401926000915b8383106127d557505050505090565b9091929394602080612811837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08660019603018752895161239b565b970193019301919392906127c6565b602081016020825282518091526040820191602060408360051b8301019401926000915b83831061285357505050505090565b90919293946020806128b6837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff81511684520151918185820152019061274c565b97019301930191939290612844565b908160809103126124c3576040519060006080830167ffffffffffffffff8111848210176129355760405281519073ffffffffffffffffffffffffffffffffffffffff82168203610174575090606091835260208101516020840152604081015160408401520151606082015290565b6024827f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b906040519160008154918260011c92600181168015612a5f575b602085108114612a32578487528693929181156129f257506001146129ab575b506129a992500383612461565b565b90506000929192526020600020906000915b8183106129d65750509060206129a9928201013861299c565b60209193508060019154838589010152019101909184926129bd565b602093506129a99592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201013861299c565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f169361297c565b91612749959373ffffffffffffffffffffffffffffffffffffffff809296939660a086528188511660a0870152602088015160c087015260c0612abb60408a015160e0808a015261018089019061239b565b9860608101516101008901526080810151151561012089015260a081015115156101408901520151610160870152166020850152166040830152818403606083015273ffffffffffffffffffffffffffffffffffffffff81511684527fffffffff000000000000000000000000000000000000000000000000000000006020820151166020850152604081015160408501526060810151606085015260a0612b72608083015160c0608088015260c087019061239b565b9101519360a0818303910152602067ffffffffffffffff81612b9d875160408652604086019061239b565b960151169101526080818403910152612351565b8051821015612bc55760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b91908203918211612c0157565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90604051918281549182825260208201906000526020600020926000905b806007830110612e4a576129a9945491818110612e14575b818110612dde575b818110612da8575b818110612d72575b818110612d3c575b818110612d06575b818110612cd1575b10612ca4575b500383612461565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260200138612c9c565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b168152019301612c96565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b168152019301612c8e565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b168152019301612c86565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b168152019301612c7e565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b168152019301612c76565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b168152019301612c6e565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b168152019301612c66565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e0820152019401920185929391612c4e565b60085460ff168015612ee65790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115612fb157600091612f7f575b50151590565b90506020813d602011612fa9575b81612f9a60209383612461565b810103126124c3575138612f79565b3d9150612f8d565b6040513d6000823e3d90fd5b90600060c0604051612fce81612445565b828152826020820152606060408201528260608201528260808201528260a0820152015273ffffffffffffffffffffffffffffffffffffffff6040519261301484612445565b1682526000602083015260408201526000606082015260006080820152600060a0820152600060c082015290565b90600061304e92613272565b9060008060406130cc6130fe82516130668482612461565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152835192839160208301957fb60e72cc0000000000000000000000000000000000000000000000000000000087526024840152606483019061239b565b886044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612461565b51906a636f6e736f6c652e6c6f675afa50565b91908201809211612c0157565b906000905b82518210156132355760005b61313a838551612bf4565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111612c015781101561322a5773ffffffffffffffffffffffffffffffffffffffff61318a8286612bb1565b51169060018101808211612c015760019273ffffffffffffffffffffffffffffffffffffffff6131ba8389612bb1565b5116106131c9575b500161312f565b61322373ffffffffffffffffffffffffffffffffffffffff6131eb8489612bb1565b511691600073ffffffffffffffffffffffffffffffffffffffff61320f838b612bb1565b511661321b868b612bb1565b525087612bb1565b52386131c2565b509060010190613123565b9050565b8115613243570690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000908383116133cd57828110918215806133c3575b6133bb576132968486612bf4565b9260018401809411612c01576003831115806133b2575b6133a3577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83101580613399575b613388578583111561333f575050906132f7846132fc93612bf4565b613239565b90811561333a5761330d9250613111565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111612c015790565b505090565b959492919095613350575b50505050565b839495506132f7906133629394612bf4565b90811561333a576133739250612bf4565b60018101809111612c0157903880808061334a565b505090506127499291501990612bf4565b50821984116132db565b50509190506127499250613111565b508284116132ad565b509250505090565b5084821115613288565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374645574696c7320626f756e642875696e743235362c75696e743235362c7560448201527f696e74323536293a204d6178206973206c657373207468616e206d696e2e00006064820152fdfe60808060405234601557610b8d908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c806380c95a31146107a15763e10daf111461003257600080fd5b3461065f5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261065f5760043567ffffffffffffffff811161065f5780600401908036039160e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc84011261065f576024359073ffffffffffffffffffffffffffffffffffffffff821680830361065f576044359373ffffffffffffffffffffffffffffffffffffffff85169182860361065f576064359567ffffffffffffffff871161065f5760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc883603011261065f576040519760c0890189811067ffffffffffffffff8211176107725760405261015488600401610826565b895260248801357fffffffff000000000000000000000000000000000000000000000000000000008116810361065f5760208a0190815260408a019660448a0135885260608b019960648101358b52608481013567ffffffffffffffff811161065f5781013660238201121561065f576101d89036906024600482013591016108f8565b9060808d0191825260a48101359067ffffffffffffffff821161065f57019760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8a3603011261065f576040519860408a018a811067ffffffffffffffff82111761077257604052600481013567ffffffffffffffff811161065f576004908201019036601f8301121561065f5761027a60249236906020813591016108f8565b8b52013567ffffffffffffffff8116810361065f5760208a015260a08d019889526084359067ffffffffffffffff821161065f5773ffffffffffffffffffffffffffffffffffffffff6102d28f933690600401610888565b92511681036107455760848901968735801515810361065f5761071b57826102f9916109bc565b6106ee57506103109061030b84610aca565b6109bc565b6106a257602487013592836106785761032883610aca565b73ffffffffffffffffffffffffffffffffffffffff16966040519d8e917f9d043a66000000000000000000000000000000000000000000000000000000008352600483015260248201606090525173ffffffffffffffffffffffffffffffffffffffff169060640152517fffffffff000000000000000000000000000000000000000000000000000000001660848d0152885160a48d01528a5160c48d01525160e48c0160c090526101248c016103de91610aeb565b9651968b81037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c016101048d01528751604082526040820161041f91610aeb565b976020015167ffffffffffffffff1690602001528a87037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0160448c015261046690610826565b73ffffffffffffffffffffffffffffffffffffffff16865260208601526044840135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd0181121561065f5783016024600482013591019167ffffffffffffffff821161065f57813603831361065f57857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460c48e996105368b9997610100998b9960209f604060e09101528160e08b01528b8a013760008a868a01015260648301356060890152610b4a565b1515608087015261054960a48201610b4a565b151560a0870152013560c08501520116010301915afa93841561066c57600094610633575b5060405160208101907f616363657074496d706c696369745265717565737400000000000000000000008252601581526105a9603582610847565b51902092519051907fffffffffffffffffffffffffffffffffffffffff000000000000000000000000604051936020850195865260601b16604084015260548301526074820152607481526105ff609482610847565b5190200361060957005b7f0881ad5d0000000000000000000000000000000000000000000000000000000060005260046000fd5b9093506020813d602011610664575b8161064f60209383610847565b8101031261065f5751923861056e565b600080fd5b3d9150610642565b6040513d6000823e3d90fd5b7faa7feadc0000000000000000000000000000000000000000000000000000000060005260046000fd5b73ffffffffffffffffffffffffffffffffffffffff6106c083610aca565b7fd33f19e7000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b7fd33f19e70000000000000000000000000000000000000000000000000000000060005260045260246000fd5b7faa25f2ad0000000000000000000000000000000000000000000000000000000060005260046000fd5b7fc1e84ed60000000000000000000000000000000000000000000000000000000060005260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b3461065f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261065f5760043573ffffffffffffffffffffffffffffffffffffffff8116810361065f5760243567ffffffffffffffff811161065f5760209161081661081c923690600401610888565b906109bc565b6040519015158152f35b359073ffffffffffffffffffffffffffffffffffffffff8216820361065f57565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761077257604052565b9080601f8301121561065f5781359167ffffffffffffffff8311610772578260051b90604051936108bc6020840186610847565b845260208085019282010192831161065f57602001905b8282106108e05750505090565b602080916108ed84610826565b8152019101906108d3565b92919267ffffffffffffffff82116107725760405191610940601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200184610847565b82948184528183011161065f578281602093846000960137010152565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821360011661098d57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000916109c9815161095d565b925b838113156109dc5750505050600090565b60008112908115818603868113821687821285161761098d5760029005928383019384129081151691161761098d578251821015610a9b5773ffffffffffffffffffffffffffffffffffffffff60208360051b850101511673ffffffffffffffffffffffffffffffffffffffff851690818114600014610a625750505050505050600190565b1015610a8b57506001810190600060018312911290801582169115161761098d57925b926109cb565b9350610a969061095d565b610a85565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b3573ffffffffffffffffffffffffffffffffffffffff8116810361065f5790565b919082519283825260005b848110610b355750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201610af6565b3590811515820361065f5756fea2646970667358221220914f098ecfe412420796205c67c00ebda96665de1d631997b41cbaada8f0305164736f6c634300081c0033608080604052346015576105b6908161001b8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c9081630c0340fc14610188575080639d043a66146100a05763eca9b31a1461004057600080fd5b3461009b5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009b577f721b5e17196ee8f054e1c6084536bdfe64f23e747e9bb98627db351b3286f7bf6020604051338152a1005b600080fd5b3461009b5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009b5760043573ffffffffffffffffffffffffffffffffffffffff8116810361009b5760243567ffffffffffffffff811161009b5760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011261009b576044359067ffffffffffffffff821161009b5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc833603011261009b57602092610180926004019160040190610307565b604051908152f35b3461009b5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009b5760207fed94f157df493252d8e5700fc6b9bf2466c66387b3c1a19816847dfa9f31005791338152a1005b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561009b570180359067ffffffffffffffff821161009b5760200191813603831361009b57565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761027357604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b92919267ffffffffffffffff821161027357604051916102ea601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200184610232565b82948184528183011161009b578281602093846000960137010152565b909160408101600461031982846101e1565b90501491821592610522575b505061051b5760c08236031261009b5760405160c0810181811067ffffffffffffffff82111761027357604052823573ffffffffffffffffffffffffffffffffffffffff8116810361009b57815260208301357fffffffff000000000000000000000000000000000000000000000000000000008116810361009b576020820152604081019060408401358252606081019360608101358552608081013567ffffffffffffffff811161009b57810136601f8201121561009b576103f09036906020813591016102a2565b608083015260a08101359067ffffffffffffffff821161009b57019060408236031261009b57604051916040830183811067ffffffffffffffff82111761027357604052803567ffffffffffffffff811161009b5781019036601f8301121561009b57610465602092369084813591016102a2565b845201359067ffffffffffffffff8216820361009b5760a0916020840152015260405160208101907f616363657074496d706c696369745265717565737400000000000000000000008252601581526104bf603582610232565b51902092519051907fffffffffffffffffffffffffffffffffffffffff000000000000000000000000604051936020850195865260601b1660408401526054830152607482015260748152610515609482610232565b51902090565b5050600090565b61052c92506101e1565b60041161009b57357fffffffff00000000000000000000000000000000000000000000000000000000167feca9b31a000000000000000000000000000000000000000000000000000000001415388061032556fea2646970667358221220b244c0331517bebc589a2a51667c56df4245db1deb284e6da3f0e5a41bbd9d1664736f6c634300081c0033a2646970667358221220a5f2c054137331774a082d2e74ba6f664254a3ab2dad904ad90684a6b1101a2564736f6c634300081c0033","sourceMap":"844:6647:85:-:0;;;;;;;3166:4:5;844:6647:85;;3166:4:5;844:6647:85;;;3166:4:5;844:6647:85;3166:4:5;844:6647:85;;1087:4:16;844:6647:85;;;1087:4:16;844:6647:85;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608080604052600436101561001357600080fd5b600090813560e01c9081630a9254e414611f13575080631ed7831c14611e6a5780632aa7856c14611dfb5780632ade388014611bcf578063320e7b63146119345780633e092074146116d45780633e5e3c231461162b5780633f7286f414611582578063521eb2731461153057806366d9a9a0146113d55780636ba4271b146111bf5780636e183b1a14610fbc57806377680a2f14610ce557806385226c8114610c3d578063916a17c614610b68578063b0464fdc14610a93578063b5508aa9146109eb578063b7b13f7914610996578063ba414fa614610953578063bd3f030a14610711578063ca8a0912146102f8578063dce11375146102a7578063de184e2214610238578063e20c9f71146101775763fa7626d41461013457600080fd5b3461017457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017457602060ff601f54166040519015158152f35b80fd5b503461017457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101745760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b81811061020c57610208856101f481870382612461565b604051918291602083526020830190612351565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016101dd565b503461017457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610174576022546023546024546025546040805173ffffffffffffffffffffffffffffffffffffffff90951685526020850193909352918301526060820152608090f35b503461017457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017457602073ffffffffffffffffffffffffffffffffffffffff815416604051908152f35b503461017457610307366126dc565b90918382511515737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561070d57604051907f4c63e56200000000000000000000000000000000000000000000000000000000825260048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610693576106f8575b50508151907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82019182116106cb576103dc9392916103ba91613042565b73ffffffffffffffffffffffffffffffffffffffff6020541693849183612bb1565b5283809273ffffffffffffffffffffffffffffffffffffffff60225416935b83518110156104cb578473ffffffffffffffffffffffffffffffffffffffff6104248387612bb1565b51161415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156104c757604051907f4c63e56200000000000000000000000000000000000000000000000000000000825260048201528381602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156104bc5784916104a3575b50506001016103fb565b816104ad91612461565b6104b8578238610499565b8280fd5b6040513d86823e3d90fd5b8380fd5b5083856104d8849561311e565b91835261051c6040517feca9b31a00000000000000000000000000000000000000000000000000000000602082015260048152610516602482612461565b82612fbd565b90604051907fd33f19e700000000000000000000000000000000000000000000000000000000602083015260248201526024815261055b604482612461565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106c757846105b691604051809381927ff28dceb300000000000000000000000000000000000000000000000000000000835260206004840152602483019061239b565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156106bc5785916106a2575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c1673ffffffffffffffffffffffffffffffffffffffff6021541673ffffffffffffffffffffffffffffffffffffffff6022541692823b1561069e576106718795604051978896879586957fe10daf1100000000000000000000000000000000000000000000000000000000875260048701612a69565b03915afa8015610693576106825750f35b8161068c91612461565b6101745780f35b6040513d84823e3d90fd5b8680fd5b816106ac91612461565b6106b75783866105de565b505050fd5b6040513d87823e3d90fd5b8480fd5b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b8161070291612461565b6104c757833861037c565b5080fd5b50346101745760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610174578060043567ffffffffffffffff81116109505761076290369060040161252d565b73ffffffffffffffffffffffffffffffffffffffff6022541681526107d773ffffffffffffffffffffffffffffffffffffffff60205416604051907f0c0340fc000000000000000000000000000000000000000000000000000000006020830152600482526107d2602483612461565b612fbd565b604051906107e6602083612461565b83825260003681376040517f0881ad5d00000000000000000000000000000000000000000000000000000000602082015260048152610826602482612461565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106c7578461088191604051809381927ff28dceb300000000000000000000000000000000000000000000000000000000835260206004840152602483019061239b565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156106bc57859161093b57505073ffffffffffffffffffffffffffffffffffffffff601f5460081c1673ffffffffffffffffffffffffffffffffffffffff6021541673ffffffffffffffffffffffffffffffffffffffff6022541692823b1561069e576106718795604051978896879586957fe10daf1100000000000000000000000000000000000000000000000000000000875260048701612a69565b8161094591612461565b6106b75783386105de565b50fd5b503461017457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017457602061098c612ed7565b6040519015158152f35b503461017457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017457602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051908152f35b503461017457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017457601954610a268161265f565b91610a346040519384612461565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b838310610a76576040518061020887826127a2565b600160208192610a8585612962565b815201920192019190610a61565b503461017457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017457601c54610ace8161265f565b91610adc6040519384612461565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b838310610b1e57604051806102088782612820565b60026020600192604051610b31816123fa565b73ffffffffffffffffffffffffffffffffffffffff8654168152610b56858701612c30565b83820152815201920192019190610b09565b503461017457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017457601d54610ba38161265f565b91610bb16040519384612461565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b838310610bf357604051806102088782612820565b60026020600192604051610c06816123fa565b73ffffffffffffffffffffffffffffffffffffffff8654168152610c2b858701612c30565b83820152815201920192019190610bde565b503461017457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017457601a54610c788161265f565b91610c866040519384612461565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b838310610cc8576040518061020887826127a2565b600160208192610cd785612962565b815201920192019190610cb3565b50346101745760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101745760043567ffffffffffffffff811161070d57610d3590369060040161252d565b60243567ffffffffffffffff81116104b857610d55903690600401612677565b829073ffffffffffffffffffffffffffffffffffffffff602254168473ffffffffffffffffffffffffffffffffffffffff60205416935b8351811015610f00578273ffffffffffffffffffffffffffffffffffffffff610db58387612bb1565b51161415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156104b857604051907f4c63e56200000000000000000000000000000000000000000000000000000000825260048201528281602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115610ee0578391610eeb575b50508473ffffffffffffffffffffffffffffffffffffffff610e4c8387612bb1565b51161415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156104b857604051907f4c63e56200000000000000000000000000000000000000000000000000000000825260048201528281602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115610ee0578391610ecb575b5050600101610d8c565b81610ed591612461565b61070d578138610ec1565b6040513d85823e3d90fd5b81610ef591612461565b61070d578138610e2a565b509392610f4390828552604051907feca9b31a000000000000000000000000000000000000000000000000000000006020830152600482526107d2602483612461565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c169073ffffffffffffffffffffffffffffffffffffffff6021541690823b1561069e576106718795604051978896879586957fe10daf1100000000000000000000000000000000000000000000000000000000875260048701612a69565b50346101745760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610174578060043567ffffffffffffffff81116109505761100d90369060040161252d565b602435737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156111bb576040517f4c63e56200000000000000000000000000000000000000000000000000000000815281151560048201528381602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156104bc5784916111a6575b505073ffffffffffffffffffffffffffffffffffffffff60225416825273ffffffffffffffffffffffffffffffffffffffff6020541690604051907feca9b31a000000000000000000000000000000000000000000000000000000006020830152600482526110f3602483612461565b8460c060405161110281612445565b828152826020820152606060408201528260608201528260808201528260a082015201526040519261113384612445565b8352602083015260408201528260608201528260808201528260a08201528260c082015260405190611166602083612461565b83825260003681376040517faa7feadc00000000000000000000000000000000000000000000000000000000602082015260048152610826602482612461565b816111b091612461565b6111bb578238611083565b5050fd5b50346101745760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610174578060043567ffffffffffffffff81116109505761121090369060040161252d565b73ffffffffffffffffffffffffffffffffffffffff81511673ffffffffffffffffffffffffffffffffffffffff6022541690737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106b75781604051917f4c63e562000000000000000000000000000000000000000000000000000000008352141560048201528381602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156104bc5784916113c0575b50506020604051916112c88284612461565b848352600036813761132373ffffffffffffffffffffffffffffffffffffffff835416604051907feca9b31a0000000000000000000000000000000000000000000000000000000085830152600482526107d2602483612461565b91604051917fc1e84ed60000000000000000000000000000000000000000000000000000000082840152602483015260248252611361604483612461565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156113bc5761088191869160405193849283927ff28dceb30000000000000000000000000000000000000000000000000000000084526004840152602483019061239b565b8580fd5b816113ca91612461565b6111bb5782386112b6565b503461017457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017457601b546114108161265f565b61141d6040519182612461565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b8383106114f557868587604051928392602084019060208552518091526040840160408260051b8601019392905b82821061148a57505050500390f35b919360206114e5827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc06001959799849503018652885190836114d5835160408452604084019061239b565b920151908481840391015261274c565b960192019201859493919261147b565b60026020600192604051611508816123fa565b61151186612962565b815261151e858701612c30565b8382015281520192019201919061144d565b503461017457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017457602073ffffffffffffffffffffffffffffffffffffffff60215416604051908152f35b503461017457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101745760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b8181106115ff57610208856101f481870382612461565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016115e8565b503461017457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101745760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b8181106116a857610208856101f481870382612461565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201611691565b5034610174576116e3366126dc565b8381939293511515737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561070d57604051907f4c63e56200000000000000000000000000000000000000000000000000000000825260048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156106935761191f575b509291929173ffffffffffffffffffffffffffffffffffffffff60205416925b825181101561183457858473ffffffffffffffffffffffffffffffffffffffff6117a38487612bb1565b51161415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561070d57604051907f4c63e56200000000000000000000000000000000000000000000000000000000825260048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156106935761181f575b5050600101611779565b8161182991612461565b6113bc578538611815565b50919093928451907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82019182116106cb576118a3859661187b61189d946118e094613042565b73ffffffffffffffffffffffffffffffffffffffff6022541694859183612bb1565b5261311e565b92828552604051907feca9b31a000000000000000000000000000000000000000000000000000000006020830152600482526107d2602483612461565b90604051907fd33f19e7000000000000000000000000000000000000000000000000000000006020830152602482015260248152610826604482612461565b8161192991612461565b6104c7578338611759565b50346101745760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101745760043567ffffffffffffffff811161070d5761198490369060040161252d565b9073ffffffffffffffffffffffffffffffffffffffff60225416825273ffffffffffffffffffffffffffffffffffffffff60205416916040517feca9b31a000000000000000000000000000000000000000000000000000000006020820152600481526119f2602482612461565b8260c0604051611a0181612445565b828152826020820152606060408201528260608201528260808201528260a0820152015260405193611a3285612445565b84528260208501526040840152816060840152600160808401528160a08401528160c0840152604051611a66602082612461565b82815282368137604051937faa25f2ad00000000000000000000000000000000000000000000000000000000602086015260048552611aa6602486612461565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156104c75783611b0195604051809781927ff28dceb300000000000000000000000000000000000000000000000000000000835260206004840152602483019061239b565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156104bc57611bba575b83945073ffffffffffffffffffffffffffffffffffffffff601f5460081c1673ffffffffffffffffffffffffffffffffffffffff6021541673ffffffffffffffffffffffffffffffffffffffff6022541692823b1561069e576106718795604051978896879586957fe10daf1100000000000000000000000000000000000000000000000000000000875260048701612a69565b92909381611bc791612461565b918390611b26565b503461017457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017457601e54611c0a8161265f565b611c176040519182612461565b818152601e83526020810191837f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350845b838310611d655786858760405192839260208401906020855251809152604084019160408260051b8601019392815b838310611c835786860387f35b9193957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09086929496030183528551906020604082019273ffffffffffffffffffffffffffffffffffffffff81511683520151916040602083015282518091526060820190602060608260051b850101940192855b828110611d1c57505050505060208060019297019301930190928695949293611c76565b9091929394602080611d58837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08760019603018952895161239b565b9701950193929101611cf8565b604051611d71816123fa565b73ffffffffffffffffffffffffffffffffffffffff8354168152600183018054611d9a8161265f565b91611da86040519384612461565b8183528a526020808b20908b9084015b838210611dde575050505060019282602092836002950152815201920192019190611c47565b600160208192611ded86612962565b815201930191019091611db8565b503461017457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610174576026546027546028546029546040805173ffffffffffffffffffffffffffffffffffffffff90951685526020850193909352918301526060820152608090f35b503461017457807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101745760405180916020601654928381520191601682527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289915b818110611ee757610208856101f481870382612461565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201611ed0565b90503461070d57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261070d57610ba88082019082821067ffffffffffffffff831117612324579082916134528339039082f08015612317577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00601f549260081b16911617601f556040516105d18082019082821067ffffffffffffffff83111761232457908291613ffa8339039082f080156123175773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff000000000000000000000000000000000000000060205416176020556040517f7404f1d200000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f77616c6c65740000000000000000000000000000000000000000000000000000604482015260808160648185737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156106935773ffffffffffffffffffffffffffffffffffffffff9183916122f8575b5051167fffffffffffffffffffffffff000000000000000000000000000000000000000060215416176021556040517f7404f1d200000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f73657373696f6e00000000000000000000000000000000000000000000000000604482015260808160648185737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156106935760609183916122d9575b5073ffffffffffffffffffffffffffffffffffffffff8151167fffffffffffffffffffffffff000000000000000000000000000000000000000060225416176022556020810151602355604081015160245501516025556040517f7404f1d200000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f6964656e74697479000000000000000000000000000000000000000000000000604482015260808160648185737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156106935760609183916122aa575b5073ffffffffffffffffffffffffffffffffffffffff8151167fffffffffffffffffffffffff0000000000000000000000000000000000000000602654161760265560208101516027556040810151602855015160295580f35b6122cc915060803d6080116122d2575b6122c48183612461565b8101906128c5565b38612250565b503d6122ba565b6122f2915060803d6080116122d2576122c48183612461565b38612171565b612311915060803d6080116122d2576122c48183612461565b386120bd565b50604051903d90823e3d90fd5b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b906020808351928381520192019060005b81811061236f5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101612362565b919082519283825260005b8481106123e55750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b806020809284010151828286010152016123a6565b6040810190811067ffffffffffffffff82111761241657604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff82111761241657604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761241657604052565b359073ffffffffffffffffffffffffffffffffffffffff821682036124c357565b600080fd5b92919267ffffffffffffffff82116124165760405191612510601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200184612461565b8294818452818301116124c3578281602093846000960137010152565b919060c0838203126124c35760405160c0810181811067ffffffffffffffff821117612416576040528093612561816124a2565b825260208101357fffffffff00000000000000000000000000000000000000000000000000000000811681036124c35760208301526040810135604083015260608101356060830152608081013567ffffffffffffffff81116124c357810183601f820112156124c357838160206125db933591016124c8565b608083015260a08101359067ffffffffffffffff82116124c35701916040838203126124c3576040519261260e846123fa565b803567ffffffffffffffff81116124c357810182601f820112156124c357602092818461263d933591016124c8565b845201359067ffffffffffffffff821682036124c35760a09160208401520152565b67ffffffffffffffff81116124165760051b60200190565b9080601f830112156124c357813561268e8161265f565b9261269c6040519485612461565b81845260208085019260051b8201019283116124c357602001905b8282106126c45750505090565b602080916126d1846124a2565b8152019101906126b7565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126124c3576004359160243567ffffffffffffffff81116124c357826127299160040161252d565b916044359067ffffffffffffffff82116124c35761274991600401612677565b90565b906020808351928381520192019060005b81811061276a5750505090565b82517fffffffff000000000000000000000000000000000000000000000000000000001684526020938401939092019160010161275d565b602081016020825282518091526040820191602060408360051b8301019401926000915b8383106127d557505050505090565b9091929394602080612811837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08660019603018752895161239b565b970193019301919392906127c6565b602081016020825282518091526040820191602060408360051b8301019401926000915b83831061285357505050505090565b90919293946020806128b6837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff81511684520151918185820152019061274c565b97019301930191939290612844565b908160809103126124c3576040519060006080830167ffffffffffffffff8111848210176129355760405281519073ffffffffffffffffffffffffffffffffffffffff82168203610174575090606091835260208101516020840152604081015160408401520151606082015290565b6024827f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b906040519160008154918260011c92600181168015612a5f575b602085108114612a32578487528693929181156129f257506001146129ab575b506129a992500383612461565b565b90506000929192526020600020906000915b8183106129d65750509060206129a9928201013861299c565b60209193508060019154838589010152019101909184926129bd565b602093506129a99592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201013861299c565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f169361297c565b91612749959373ffffffffffffffffffffffffffffffffffffffff809296939660a086528188511660a0870152602088015160c087015260c0612abb60408a015160e0808a015261018089019061239b565b9860608101516101008901526080810151151561012089015260a081015115156101408901520151610160870152166020850152166040830152818403606083015273ffffffffffffffffffffffffffffffffffffffff81511684527fffffffff000000000000000000000000000000000000000000000000000000006020820151166020850152604081015160408501526060810151606085015260a0612b72608083015160c0608088015260c087019061239b565b9101519360a0818303910152602067ffffffffffffffff81612b9d875160408652604086019061239b565b960151169101526080818403910152612351565b8051821015612bc55760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b91908203918211612c0157565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90604051918281549182825260208201906000526020600020926000905b806007830110612e4a576129a9945491818110612e14575b818110612dde575b818110612da8575b818110612d72575b818110612d3c575b818110612d06575b818110612cd1575b10612ca4575b500383612461565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260200138612c9c565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b168152019301612c96565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b168152019301612c8e565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b168152019301612c86565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b168152019301612c7e565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b168152019301612c76565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b168152019301612c6e565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b168152019301612c66565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e0820152019401920185929391612c4e565b60085460ff168015612ee65790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115612fb157600091612f7f575b50151590565b90506020813d602011612fa9575b81612f9a60209383612461565b810103126124c3575138612f79565b3d9150612f8d565b6040513d6000823e3d90fd5b90600060c0604051612fce81612445565b828152826020820152606060408201528260608201528260808201528260a0820152015273ffffffffffffffffffffffffffffffffffffffff6040519261301484612445565b1682526000602083015260408201526000606082015260006080820152600060a0820152600060c082015290565b90600061304e92613272565b9060008060406130cc6130fe82516130668482612461565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152835192839160208301957fb60e72cc0000000000000000000000000000000000000000000000000000000087526024840152606483019061239b565b886044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612461565b51906a636f6e736f6c652e6c6f675afa50565b91908201809211612c0157565b906000905b82518210156132355760005b61313a838551612bf4565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111612c015781101561322a5773ffffffffffffffffffffffffffffffffffffffff61318a8286612bb1565b51169060018101808211612c015760019273ffffffffffffffffffffffffffffffffffffffff6131ba8389612bb1565b5116106131c9575b500161312f565b61322373ffffffffffffffffffffffffffffffffffffffff6131eb8489612bb1565b511691600073ffffffffffffffffffffffffffffffffffffffff61320f838b612bb1565b511661321b868b612bb1565b525087612bb1565b52386131c2565b509060010190613123565b9050565b8115613243570690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000908383116133cd57828110918215806133c3575b6133bb576132968486612bf4565b9260018401809411612c01576003831115806133b2575b6133a3577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83101580613399575b613388578583111561333f575050906132f7846132fc93612bf4565b613239565b90811561333a5761330d9250613111565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111612c015790565b505090565b959492919095613350575b50505050565b839495506132f7906133629394612bf4565b90811561333a576133739250612bf4565b60018101809111612c0157903880808061334a565b505090506127499291501990612bf4565b50821984116132db565b50509190506127499250613111565b508284116132ad565b509250505090565b5084821115613288565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374645574696c7320626f756e642875696e743235362c75696e743235362c7560448201527f696e74323536293a204d6178206973206c657373207468616e206d696e2e00006064820152fdfe60808060405234601557610b8d908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c806380c95a31146107a15763e10daf111461003257600080fd5b3461065f5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261065f5760043567ffffffffffffffff811161065f5780600401908036039160e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc84011261065f576024359073ffffffffffffffffffffffffffffffffffffffff821680830361065f576044359373ffffffffffffffffffffffffffffffffffffffff85169182860361065f576064359567ffffffffffffffff871161065f5760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc883603011261065f576040519760c0890189811067ffffffffffffffff8211176107725760405261015488600401610826565b895260248801357fffffffff000000000000000000000000000000000000000000000000000000008116810361065f5760208a0190815260408a019660448a0135885260608b019960648101358b52608481013567ffffffffffffffff811161065f5781013660238201121561065f576101d89036906024600482013591016108f8565b9060808d0191825260a48101359067ffffffffffffffff821161065f57019760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8a3603011261065f576040519860408a018a811067ffffffffffffffff82111761077257604052600481013567ffffffffffffffff811161065f576004908201019036601f8301121561065f5761027a60249236906020813591016108f8565b8b52013567ffffffffffffffff8116810361065f5760208a015260a08d019889526084359067ffffffffffffffff821161065f5773ffffffffffffffffffffffffffffffffffffffff6102d28f933690600401610888565b92511681036107455760848901968735801515810361065f5761071b57826102f9916109bc565b6106ee57506103109061030b84610aca565b6109bc565b6106a257602487013592836106785761032883610aca565b73ffffffffffffffffffffffffffffffffffffffff16966040519d8e917f9d043a66000000000000000000000000000000000000000000000000000000008352600483015260248201606090525173ffffffffffffffffffffffffffffffffffffffff169060640152517fffffffff000000000000000000000000000000000000000000000000000000001660848d0152885160a48d01528a5160c48d01525160e48c0160c090526101248c016103de91610aeb565b9651968b81037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c016101048d01528751604082526040820161041f91610aeb565b976020015167ffffffffffffffff1690602001528a87037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0160448c015261046690610826565b73ffffffffffffffffffffffffffffffffffffffff16865260208601526044840135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd0181121561065f5783016024600482013591019167ffffffffffffffff821161065f57813603831361065f57857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460c48e996105368b9997610100998b9960209f604060e09101528160e08b01528b8a013760008a868a01015260648301356060890152610b4a565b1515608087015261054960a48201610b4a565b151560a0870152013560c08501520116010301915afa93841561066c57600094610633575b5060405160208101907f616363657074496d706c696369745265717565737400000000000000000000008252601581526105a9603582610847565b51902092519051907fffffffffffffffffffffffffffffffffffffffff000000000000000000000000604051936020850195865260601b16604084015260548301526074820152607481526105ff609482610847565b5190200361060957005b7f0881ad5d0000000000000000000000000000000000000000000000000000000060005260046000fd5b9093506020813d602011610664575b8161064f60209383610847565b8101031261065f5751923861056e565b600080fd5b3d9150610642565b6040513d6000823e3d90fd5b7faa7feadc0000000000000000000000000000000000000000000000000000000060005260046000fd5b73ffffffffffffffffffffffffffffffffffffffff6106c083610aca565b7fd33f19e7000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b7fd33f19e70000000000000000000000000000000000000000000000000000000060005260045260246000fd5b7faa25f2ad0000000000000000000000000000000000000000000000000000000060005260046000fd5b7fc1e84ed60000000000000000000000000000000000000000000000000000000060005260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b3461065f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261065f5760043573ffffffffffffffffffffffffffffffffffffffff8116810361065f5760243567ffffffffffffffff811161065f5760209161081661081c923690600401610888565b906109bc565b6040519015158152f35b359073ffffffffffffffffffffffffffffffffffffffff8216820361065f57565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761077257604052565b9080601f8301121561065f5781359167ffffffffffffffff8311610772578260051b90604051936108bc6020840186610847565b845260208085019282010192831161065f57602001905b8282106108e05750505090565b602080916108ed84610826565b8152019101906108d3565b92919267ffffffffffffffff82116107725760405191610940601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200184610847565b82948184528183011161065f578281602093846000960137010152565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821360011661098d57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000916109c9815161095d565b925b838113156109dc5750505050600090565b60008112908115818603868113821687821285161761098d5760029005928383019384129081151691161761098d578251821015610a9b5773ffffffffffffffffffffffffffffffffffffffff60208360051b850101511673ffffffffffffffffffffffffffffffffffffffff851690818114600014610a625750505050505050600190565b1015610a8b57506001810190600060018312911290801582169115161761098d57925b926109cb565b9350610a969061095d565b610a85565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b3573ffffffffffffffffffffffffffffffffffffffff8116810361065f5790565b919082519283825260005b848110610b355750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201610af6565b3590811515820361065f5756fea2646970667358221220914f098ecfe412420796205c67c00ebda96665de1d631997b41cbaada8f0305164736f6c634300081c0033608080604052346015576105b6908161001b8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c9081630c0340fc14610188575080639d043a66146100a05763eca9b31a1461004057600080fd5b3461009b5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009b577f721b5e17196ee8f054e1c6084536bdfe64f23e747e9bb98627db351b3286f7bf6020604051338152a1005b600080fd5b3461009b5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009b5760043573ffffffffffffffffffffffffffffffffffffffff8116810361009b5760243567ffffffffffffffff811161009b5760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011261009b576044359067ffffffffffffffff821161009b5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc833603011261009b57602092610180926004019160040190610307565b604051908152f35b3461009b5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009b5760207fed94f157df493252d8e5700fc6b9bf2466c66387b3c1a19816847dfa9f31005791338152a1005b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561009b570180359067ffffffffffffffff821161009b5760200191813603831361009b57565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761027357604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b92919267ffffffffffffffff821161027357604051916102ea601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200184610232565b82948184528183011161009b578281602093846000960137010152565b909160408101600461031982846101e1565b90501491821592610522575b505061051b5760c08236031261009b5760405160c0810181811067ffffffffffffffff82111761027357604052823573ffffffffffffffffffffffffffffffffffffffff8116810361009b57815260208301357fffffffff000000000000000000000000000000000000000000000000000000008116810361009b576020820152604081019060408401358252606081019360608101358552608081013567ffffffffffffffff811161009b57810136601f8201121561009b576103f09036906020813591016102a2565b608083015260a08101359067ffffffffffffffff821161009b57019060408236031261009b57604051916040830183811067ffffffffffffffff82111761027357604052803567ffffffffffffffff811161009b5781019036601f8301121561009b57610465602092369084813591016102a2565b845201359067ffffffffffffffff8216820361009b5760a0916020840152015260405160208101907f616363657074496d706c696369745265717565737400000000000000000000008252601581526104bf603582610232565b51902092519051907fffffffffffffffffffffffffffffffffffffffff000000000000000000000000604051936020850195865260601b1660408401526054830152607482015260748152610515609482610232565b51902090565b5050600090565b61052c92506101e1565b60041161009b57357fffffffff00000000000000000000000000000000000000000000000000000000167feca9b31a000000000000000000000000000000000000000000000000000000001415388061032556fea2646970667358221220b244c0331517bebc589a2a51667c56df4245db1deb284e6da3f0e5a41bbd9d1664736f6c634300081c0033a2646970667358221220a5f2c054137331774a082d2e74ba6f664254a3ab2dad904ad90684a6b1101a2564736f6c634300081c0033","sourceMap":"844:6647:85:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1000:22;844:6647;1000:22;;;844:6647;;;;;;;;;;;;;;;;;;;;;;;;;1065:26:16;844:6647:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2723:18:9;844:6647:85;;;;;;;2723:18:9;844:6647:85;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1051:30;844:6647;1051:30;844:6647;1051:30;844:6647;1051:30;844:6647;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1000:22;844:6647;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;5442:20;;336:42:2;5432:31:85;;;;844:6647;;5432:31;2024:14:2;5432:31:85;;844:6647;5432:31;;844:6647;5432:31;;;;336:42:2;5432:31:85;;;;;;;;844:6647;;;;;;;;;;;;;;5528:39;5481:41;;;;;;:::i;:::-;844:6647;;;;5528:39;;;;;:::i;:::-;844:6647;5621:13;;844:6647;;5697:13;844:6647;;5616:107;5658:3;844:6647;;5636:20;;;;;5681:12;844:6647;5681:12;;;;:::i;:::-;2024:14:2;844:6647:85;5681:34;;336:42:2;5671:45:85;;;;844:6647;;5671:45;2024:14:2;5671:45:85;;844:6647;5671:45;;844:6647;5671:45;;5432:31;5671:45;336:42:2;5671:45:85;;;;;;;;;;;5658:3;;;5520:1;844:6647;5621:13;;5671:45;;;;;:::i;:::-;844:6647;;5671:45;;;;844:6647;;;;5671:45;844:6647;;;;;;;;;5671:45;844:6647;;;5636:20;;;;5821:31;5636:20;;5821:31;:::i;:::-;844:6647;;;5945:94;844:6647;;6008:29;844:6647;5985:53;;;844:6647;5985:53;;;5432:31;5985:53;;:::i;:::-;5945:94;;:::i;:::-;844:6647;;;6062:83;6085:41;844:6647;6062:83;;;5432:31;6062:83;;844:6647;5432:31;6062:83;;;;;;:::i;:::-;336:42:2;6046:100:85;;;;844:6647;;;;;6046:100;;;;2024:14:2;6046:100:85;;844:6647;;6046:100;;844:6647;5432:31;844:6647;;;;:::i;:::-;6046:100;;;336:42:2;6046:100:85;;;;;;;;;;;5616:107;844:6647;;;6152:14;844:6647;;;;;6194:6;844:6647;;;5697:13;844:6647;;6152:93;;;;;;;844:6647;;;;6152:93;;;;;;;2024:14:2;6152:93:85;;844:6647;6152:93;;;:::i;:::-;;;;;;;;;;;844:6647;;6152:93;;;;;:::i;:::-;844:6647;;6152:93;844:6647;6152:93;844:6647;;;;;;;;;6152:93;844:6647;;;6046:100;;;;;:::i;:::-;844:6647;;6046:100;;;;844:6647;;;;;6046:100;844:6647;;;;;;;;;6046:100;844:6647;;;;5432:31;844:6647;;;;;;;;5432:31;;;;;:::i;:::-;844:6647;;5432:31;;;;;844:6647;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6372:13;844:6647;;;;6467:94;844:6647;;;;;;6507:53;6530:29;844:6647;6507:53;;;844:6647;6507:53;;;;;;:::i;:::-;6467:94;:::i;:::-;844:6647;;;;;;;:::i;:::-;;;;;;;;;;6663:44;844:6647;6640:68;;;844:6647;6640:68;;;6507:53;6640:68;;:::i;:::-;336:42:2;6624:85:85;;;;844:6647;;;;;6624:85;;;;2024:14:2;6624:85:85;;844:6647;;6624:85;;844:6647;6507:53;844:6647;;;;:::i;:::-;6624:85;;;336:42:2;6624:85:85;;;;;;;;;;;844:6647;;;6715:14;844:6647;;;;;6757:6;844:6647;;;6372:13;844:6647;;6715:98;;;;;;;844:6647;;;;6715:98;;;;;;;2024:14:2;6715:98:85;;844:6647;6715:98;;;:::i;6624:85::-;;;;;:::i;:::-;844:6647;;6624:85;;;;844:6647;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;945:51;844:6647;;;;;;;;;;;;;;;;;;;;;;2575:18:9;844:6647:85;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;2575:18:9;844:6647:85;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;2876:18:9;844:6647:85;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;2876:18:9;844:6647:85;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;3653:18:9;844:6647:85;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;3653:18:9;844:6647:85;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;3162:18:9;844:6647:85;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;3162:18:9;844:6647:85;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;1996:13;844:6647;;2072:13;844:6647;;;;;;;1991:158;2033:3;844:6647;;2011:20;;;;;2056:12;844:6647;2056:12;;;;:::i;:::-;2024:14:2;844:6647:85;2056:34;;336:42:2;2046:45:85;;;;844:6647;;2046:45;2024:14:2;2046:45:85;;844:6647;2046:45;;844:6647;2046:45;;844:6647;2046:45;336:42:2;2046:45:85;;;;;;;;;;;2033:3;2109:12;;;844:6647;2109:12;;;;:::i;:::-;2024:14:2;844:6647:85;2109:32;;336:42:2;2099:43:85;;;;844:6647;;2099:43;2024:14:2;2099:43:85;;844:6647;2099:43;;844:6647;2099:43;;844:6647;2099:43;336:42:2;2099:43:85;;;;;;;;;;;2033:3;;;844:6647;;1996:13;;2099:43;;;;;:::i;:::-;844:6647;;2099:43;;;;;844:6647;;;;;;;;;2046:45;;;;;:::i;:::-;844:6647;;2046:45;;;;2011:20;;;;2241:94;2011:20;844:6647;;;;;2281:53;2304:29;844:6647;2281:53;;;844:6647;2281:53;;;844:6647;2281:53;;:::i;2241:94::-;844:6647;2367:14;844:6647;;;;;;2409:6;844:6647;;2367:93;;;;;;;844:6647;;;;2367:93;;;;;;;2024:14:2;2367:93:85;;844:6647;2367:93;;;:::i;844:6647::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;336:42:2;4750:27:85;;;;844:6647;;2024:14:2;4750:27:85;;4760:16;;;844:6647;4750:27;;844:6647;4750:27;;844:6647;4750:27;336:42:2;4750:27:85;;;;;;;;;;;844:6647;;;;4812:13;844:6647;;;;;;;;;;;4920:53;4943:29;844:6647;4920:53;;;844:6647;4920:53;;;844:6647;4920:53;;:::i;:::-;844:6647;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;1596:206;;844:6647;;1596:206;;844:6647;1596:206;844:6647;1596:206;;844:6647;1596:206;844:6647;1596:206;;2657:4:48;1596:206:85;844:6647;1596:206;;2657:4:48;1596:206:85;844:6647;1596:206;;844:6647;;;;;;;;:::i;:::-;;;;;;;;;;5076:35;844:6647;5053:59;;;844:6647;5053:59;;;844:6647;5053:59;;:::i;4750:27::-;;;;;:::i;:::-;844:6647;;4750:27;;;;844:6647;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2024:14:2;;844:6647:85;;2615:13;844:6647;;2575:59;336:42:2;2575:59:85;;;;844:6647;;;2575:59;2024:14:2;2575:59:85;;2585:48;;844:6647;2575:59;;844:6647;2575:59;;;;336:42:2;2575:59:85;;;;;;;;;;;844:6647;;;;;;;;;;;:::i;:::-;;;;;;;;2724:94;844:6647;;;;;;2764:53;2787:29;2764:53;;;;844:6647;2764:53;;;2575:59;2764:53;;:::i;2724:94::-;844:6647;;;2866:87;2889:43;2866:87;;;;2575:59;2866:87;;844:6647;2575:59;2866:87;;;;;;:::i;:::-;336:42:2;2850:104:85;;;;844:6647;;;;;;2850:104;;;;;2024:14:2;2850:104:85;;844:6647;2850:104;;844:6647;2575:59;844:6647;;;;:::i;2850:104::-;844:6647;;;2575:59;;;;;:::i;:::-;844:6647;;2575:59;;;;844:6647;;;;;;;;;;;;3346:26:9;844:6647:85;;;;:::i;:::-;;;;;;;:::i;:::-;;;;3346:26:9;844:6647:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1026:21;844:6647;;;;;;;;;;;;;;;;;;;;;;;;;3501:18:9;844:6647:85;;;;;;;3501:18:9;844:6647:85;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3794:16:9;844:6647:85;;;;;;;3794:16:9;844:6647:85;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;3265:20;;336:42:2;3255:31:85;;;;844:6647;;3255:31;2024:14:2;3255:31:85;;844:6647;3255:31;;844:6647;3255:31;;;;336:42:2;3255:31:85;;;;;;;;844:6647;3349:13;;;;844:6647;;;;;3344:105;3386:3;844:6647;;3364:20;;;;;3409:12;;844:6647;3409:12;;;;:::i;:::-;2024:14:2;844:6647:85;3409:32;;336:42:2;3399:43:85;;;;844:6647;;3399:43;2024:14:2;3399:43:85;;844:6647;3399:43;;844:6647;3399:43;;3255:31;3399:43;336:42:2;3399:43:85;;;;;;;;3386:3;;;844:6647;;3349:13;;3399:43;;;;;:::i;:::-;844:6647;;3399:43;;;;3364:20;;;;;;844:6647;;;;;;;;;;;3634:31;3502:41;;;3549;3502;3758:94;3502:41;;:::i;:::-;844:6647;3572:13;844:6647;;3549:41;;;;;:::i;:::-;844:6647;3634:31;:::i;:::-;844:6647;;;;;;3798:53;3821:29;844:6647;3798:53;;;844:6647;3798:53;;;3255:31;3798:53;;:::i;3758:94::-;844:6647;;;3875:85;3898:41;844:6647;3875:85;;;3255:31;3875:85;;844:6647;3255:31;3875:85;;;;;;:::i;3255:31::-;;;;;:::i;:::-;844:6647;;3255:31;;;;844:6647;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;4237:13;844:6647;;;;;;;;;;;4356:29;844:6647;4333:53;;;844:6647;4333:53;;;;;;:::i;:::-;844:6647;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;1596:206;844:6647;1596:206;;844:6647;;1596:206;;844:6647;1596:206;844:6647;1596:206;;844:6647;4324:4;844:6647;1596:206;;2657:4:48;1596:206:85;844:6647;1596:206;;2657:4:48;1596:206:85;844:6647;1596:206;;844:6647;;;;;;;:::i;:::-;;;;;;;;;;4466:66;4489:42;844:6647;4466:66;;;844:6647;4466:66;;;4333:53;4466:66;;:::i;:::-;336:42:2;4450:83:85;;;;844:6647;;;;;4450:83;;;;2024:14:2;4450:83:85;;844:6647;;4450:83;;844:6647;4333:53;844:6647;;;;:::i;:::-;4450:83;;;336:42:2;4450:83:85;;;;;;;;844:6647;;;;;4539:14;844:6647;;;;;4581:6;844:6647;;;4237:13;844:6647;;4539:98;;;;;;;844:6647;;;;4539:98;;;;;;;2024:14:2;4539:98:85;;844:6647;4539:98;;;:::i;4450:83::-;;;;;;;;:::i;:::-;;;;;;844:6647;;;;;;;;;;;;3948:19:9;844:6647:85;;;;:::i;:::-;;;;;;;:::i;:::-;;;;3948:19:9;844:6647:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;1085:31;844:6647;1085:31;844:6647;1085:31;844:6647;1085:31;844:6647;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3018:16:9;844:6647:85;;;;;;;3018:16:9;844:6647:85;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1168:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;844:6647;;1151:52;844:6647;;;;;;;;1151:52;844:6647;;;1219:13;;;;;;;;1168:35;1219:13;;;;;;;;;;;;;;;;;;;844:6647;;;1209:23;844:6647;;;1209:23;844:6647;;;2024:14:2;1247:25:85;;1209:23;844:6647;1247:25;;2024:14:2;;;;;844:6647:85;2024:14:2;844:6647:85;;;2024:14:2;1247:25:85;;;;;336:42:2;1247:25:85;;;;;;844:6647;1247:25;;;;;844:6647;2024:14:2;;844:6647:85;;1238:39;844:6647;;;1238:39;844:6647;;;2024:14:2;1299:26:85;;1209:23;844:6647;1299:26;;2024:14:2;;;;;844:6647:85;2024:14:2;844:6647:85;;;2024:14:2;1247:25:85;1299:26;1247:25;1299:26;;336:42:2;1299:26:85;;;;;;2024:14:2;1299:26:85;;;;;844:6647;2024:14:2;844:6647:85;2024:14:2;;844:6647:85;;1283:42;844:6647;;;1283:42;844:6647;1209:23;2024:14:2;;;;;844:6647:85;2024:14:2;;;;;;;;;844:6647:85;;2024:14:2;1348:27:85;;1209:23;844:6647;1348:27;;2024:14:2;844:6647:85;2024:14:2;;;844:6647:85;2024:14:2;844:6647:85;;;2024:14:2;1247:25:85;1348:27;1247:25;1348:27;;336:42:2;1348:27:85;;;;;;2024:14:2;1348:27:85;;;;;844:6647;2024:14:2;844:6647:85;2024:14:2;;844:6647:85;;1331:44;844:6647;;;1331:44;844:6647;1209:23;2024:14:2;;;;;844:6647:85;2024:14:2;;;;;;;;;844:6647:85;;1348:27;;;;1247:25;1348:27;1247:25;1348:27;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;1299:26;;;;1247:25;1299:26;1247:25;1299:26;;;;;;;:::i;:::-;;;;1247:25;;;;;;;;;;;;;;:::i;:::-;;;;1219:13;844:6647;;;;;;;;;;;1219:13;844:6647;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;844:6647:85;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;844:6647:85;;;;;-1:-1:-1;844:6647:85;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;844:6647:85;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;-1:-1:-1;844:6647:85;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2024:14:2;;;;;;;;;844:6647:85;;;-1:-1:-1;2024:14:2;844:6647:85;;;;;;;;;;;;;2024:14:2;;844:6647:85;;;;;;;;2024:14:2;;;;;;;;;;;;;;844:6647:85;2024:14:2;;;844:6647:85;2024:14:2;;;;;;;;;;:::o;844:6647:85:-;;;;;;;;;;;;;;;-1:-1:-1;844:6647:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;;;-1:-1:-1;844:6647:85;;;;;-1:-1:-1;844:6647:85;;-1:-1:-1;844:6647:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;844:6647:85;;-1:-1:-1;844:6647:85;;-1:-1:-1;844:6647:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2024:14:2;844:6647:85;;;;;;;;2024:14:2;844:6647:85;;2024:14:2;844:6647:85;2024:14:2;;;;844:6647:85;;;;;;;;2024:14:2;844:6647:85;;2024:14:2;844:6647:85;2024:14:2;844:6647:85;2024:14:2;;844:6647:85;;;;;;;;2024:14:2;844:6647:85;;2024:14:2;844:6647:85;2024:14:2;844:6647:85;2024:14:2;;844:6647:85;;;;;;;;2024:14:2;844:6647:85;;2024:14:2;844:6647:85;2024:14:2;844:6647:85;2024:14:2;;844:6647:85;;;;;;;;2024:14:2;844:6647:85;;2024:14:2;844:6647:85;2024:14:2;844:6647:85;2024:14:2;;844:6647:85;;;;;;;;2024:14:2;844:6647:85;;2024:14:2;844:6647:85;2024:14:2;844:6647:85;2024:14:2;;844:6647:85;;;;;;;;2024:14:2;844:6647:85;;2024:14:2;844:6647:85;2024:14:2;;;844:6647:85;;;;;;;;;;;;;;;;;;;;2024:14:2;;;;844:6647:85;;;2024:14:2;;844:6647:85;2024:14:2;;844:6647:85;;;;2024:14:2;;844:6647:85;2024:14:2;;844:6647:85;;;;2024:14:2;;844:6647:85;2024:14:2;;844:6647:85;;;;2024:14:2;;844:6647:85;2024:14:2;;844:6647:85;;;;2024:14:2;;844:6647:85;2024:14:2;;844:6647:85;;;;2024:14:2;;844:6647:85;2024:14:2;;844:6647:85;;;;2024:14:2;;844:6647:85;;;;;;;;;;;;;;1243:204:4;1302:7;844:6647:85;;;;;;;1325:14:4;:::o;1298:143::-;844:6647:85;;;2024:14:2;1377:39:4;;844:6647:85;1377:39:4;;;844:6647:85;192:59:4;;;;844:6647:85;192:59:4;1377:39;;;844:6647:85;1377:39:4;;;;;;;844:6647:85;1377:39:4;;;1298:143;1377:53;;;1370:60;:::o;1377:39::-;;;192:59;1377:39;;192:59;1377:39;;;;;;192:59;1377:39;;;:::i;:::-;;;192:59;;;;;1377:39;;;;;;-1:-1:-1;1377:39:4;;;844:6647:85;;;;;;;;;1428:379;;844:6647;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;1596:206;;844:6647;;1596:206;;844:6647;;;1596:206;;844:6647;;;1596:206;;2657:4:48;844:6647:85;;1596:206;;2657:4:48;844:6647:85;;1596:206;;844:6647;1428:379;:::o;2815:199:15:-;;844:6647:85;2933:19:15;2815:199;2933:19;:::i;:::-;844:6647:85;;;;;9786:54:15;844:6647:85;;;;;;:::i;:::-;;;;;;;;;;;9786:54:15;;;844:6647:85;9786:54:15;;;;;;;;;844:6647:85;;;;;;:::i;:::-;;;;;;9786:54:15;;;;;;;;:::i;:::-;844:6647:85;9371:159:15;679:42;9371:159;;;2815:199::o;844:6647:85:-;;;;;;;;;;:::o;7005:483::-;;7180:1;7163:299;7205:3;844:6647;;7183:20;;;;;7180:1;7268:3;7242:20;844:6647;;;7242:20;:::i;:::-;844:6647;;;;;;;;7238:28;;;;;844:6647;7287:12;;;;:::i;:::-;2024:14:2;844:6647:85;;7265:1;844:6647;;;;;;;7265:1;7302:16;844:6647;7302:16;;;;:::i;:::-;2024:14:2;844:6647:85;-1:-1:-1;7283:165:85;;7268:3;;844:6647;7223:13;;7283:165;7414:23;844:6647;7347:12;;;;:::i;:::-;2024:14:2;844:6647:85;;7180:1;844:6647;7386:16;;;;:::i;:::-;2024:14:2;844:6647:85;7371:31;;;;:::i;:::-;844:6647;7414:23;;;:::i;:::-;844:6647;7283:165;;;7238:28;;;7265:1;844:6647;7168:13;;;7183:20;;-1:-1:-1;7005:483:85:o;1042:78:15:-;;;;;;;:::o;:::-;;;;;;;;;;1546:1263;844:6647:85;1664:10:15;;;;844:6647:85;;1970:8:15;;;;;;:20;;;1546:1263;1966:34;;2026:9;;;;:::i;:::-;844:6647:85;2038:1:15;844:6647:85;;;;;;;2234:1:15;2229:6;;;:18;;;1546:1263;2225:38;;844:6647:85;2277:20:15;;;:46;;;1546:1263;2273:82;;2455:7;;;;;;2493;;;;;2528:11;2493:7;;:::i;:::-;2528:11;:::i;:::-;2557:8;;;2553:24;;2600:9;;;;:::i;:::-;1042:78;844:6647:85;;;;;;;2451:352:15;1546:1263::o;2553:24::-;2567:10;;;:::o;2451:352::-;2630:173;;;;;;;;2451:352;;;;;1546:1263::o;2630:173::-;2672:7;;;;;;2707:11;2672:7;;;:::i;2707:11::-;2736:8;;;2732:24;;2779:9;;;;:::i;:::-;2038:1;844:6647:85;;;;;;;2630:173:15;;;;;;;2273:82;844:6647:85;;;;2332:23:15;844:6647:85;;;;2332:23:15;;:::i;2277:46::-;844:6647:85;;;2301:22:15;;2277:46;;2225:38;2256:7;;;;;;;;;:::i;2229:18::-;2239:8;;;;2229:18;;1966:34;1992:8;;;;;;:::o;1970:20::-;1982:8;;;;;1970:20;;844:6647:85;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"methodIdentifiers":{"IS_TEST()":"fa7626d4","emitter()":"dce11375","excludeArtifacts()":"b5508aa9","excludeContracts()":"e20c9f71","excludeSelectors()":"b0464fdc","excludeSenders()":"1ed7831c","failed()":"ba414fa6","identityWallet()":"2aa7856c","sessionManager()":"b7b13f79","sessionWallet()":"de184e22","setUp()":"0a9254e4","targetArtifactSelectors()":"66d9a9a0","targetArtifacts()":"85226c81","targetContracts()":"3f7286f4","targetInterfaces()":"2ade3880","targetSelectors()":"916a17c6","targetSenders()":"3e5e3c23","test_blacklistedAddressNotAllowed(uint256,(address,bytes4,bytes32,bytes32,bytes,(string,uint64)),address[])":"ca8a0912","test_blacklistedSessionSignerNotAllowed(uint256,(address,bytes4,bytes32,bytes32,bytes,(string,uint64)),address[])":"3e092074","test_delegateCallNotAllowed((address,bytes4,bytes32,bytes32,bytes,(string,uint64)))":"320e7b63","test_invalidImplicitResult((address,bytes4,bytes32,bytes32,bytes,(string,uint64)))":"bd3f030a","test_nonZeroValueNotAllowed((address,bytes4,bytes32,bytes32,bytes,(string,uint64)),uint256)":"6e183b1a","test_validImplicitCall((address,bytes4,bytes32,bytes32,bytes,(string,uint64)),address[])":"77680a2f","test_validImplicitCall_invalidSessionSigner((address,bytes4,bytes32,bytes32,bytes,(string,uint64)))":"6ba4271b","wallet()":"521eb273"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"IS_TEST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"emitter\",\"outputs\":[{\"internalType\":\"contract Emitter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"excludedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"identityWallet\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyX\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sessionManager\",\"outputs\":[{\"internalType\":\"contract ImplicitSessionManagerHarness\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sessionWallet\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyX\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setUp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifactSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"artifact\",\"type\":\"string\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzArtifactSelector[]\",\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"targetedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetInterfaces\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"artifacts\",\"type\":\"string[]\"}],\"internalType\":\"struct StdInvariant.FuzzInterface[]\",\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"randomIdx\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"approvedSigner\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"identityType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes32\",\"name\":\"issuerHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"audienceHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"applicationData\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"redirectUrl\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"issuedAt\",\"type\":\"uint64\"}],\"internalType\":\"struct AuthData\",\"name\":\"authData\",\"type\":\"tuple\"}],\"internalType\":\"struct Attestation\",\"name\":\"attestation\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"blacklist\",\"type\":\"address[]\"}],\"name\":\"test_blacklistedAddressNotAllowed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"randomIdx\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"approvedSigner\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"identityType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes32\",\"name\":\"issuerHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"audienceHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"applicationData\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"redirectUrl\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"issuedAt\",\"type\":\"uint64\"}],\"internalType\":\"struct AuthData\",\"name\":\"authData\",\"type\":\"tuple\"}],\"internalType\":\"struct Attestation\",\"name\":\"attestation\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"blacklist\",\"type\":\"address[]\"}],\"name\":\"test_blacklistedSessionSignerNotAllowed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"approvedSigner\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"identityType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes32\",\"name\":\"issuerHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"audienceHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"applicationData\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"redirectUrl\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"issuedAt\",\"type\":\"uint64\"}],\"internalType\":\"struct AuthData\",\"name\":\"authData\",\"type\":\"tuple\"}],\"internalType\":\"struct Attestation\",\"name\":\"attestation\",\"type\":\"tuple\"}],\"name\":\"test_delegateCallNotAllowed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"approvedSigner\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"identityType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes32\",\"name\":\"issuerHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"audienceHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"applicationData\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"redirectUrl\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"issuedAt\",\"type\":\"uint64\"}],\"internalType\":\"struct AuthData\",\"name\":\"authData\",\"type\":\"tuple\"}],\"internalType\":\"struct Attestation\",\"name\":\"attestation\",\"type\":\"tuple\"}],\"name\":\"test_invalidImplicitResult\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"approvedSigner\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"identityType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes32\",\"name\":\"issuerHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"audienceHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"applicationData\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"redirectUrl\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"issuedAt\",\"type\":\"uint64\"}],\"internalType\":\"struct AuthData\",\"name\":\"authData\",\"type\":\"tuple\"}],\"internalType\":\"struct Attestation\",\"name\":\"attestation\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"nonZeroValue\",\"type\":\"uint256\"}],\"name\":\"test_nonZeroValueNotAllowed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"approvedSigner\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"identityType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes32\",\"name\":\"issuerHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"audienceHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"applicationData\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"redirectUrl\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"issuedAt\",\"type\":\"uint64\"}],\"internalType\":\"struct AuthData\",\"name\":\"authData\",\"type\":\"tuple\"}],\"internalType\":\"struct Attestation\",\"name\":\"attestation\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"blacklist\",\"type\":\"address[]\"}],\"name\":\"test_validImplicitCall\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"approvedSigner\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"identityType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes32\",\"name\":\"issuerHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"audienceHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"applicationData\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"redirectUrl\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"issuedAt\",\"type\":\"uint64\"}],\"internalType\":\"struct AuthData\",\"name\":\"authData\",\"type\":\"tuple\"}],\"internalType\":\"struct Attestation\",\"name\":\"attestation\",\"type\":\"tuple\"}],\"name\":\"test_validImplicitCall_invalidSessionSigner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wallet\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"test_delegateCallNotAllowed((address,bytes4,bytes32,bytes32,bytes,(string,uint64)))\":{\"notice\":\"Test for delegateCall not allowed.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/extensions/sessions/implicit/ImplicitSessionManager.t.sol\":\"ImplicitSessionManagerTest\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/extensions/sessions/SessionErrors.sol\":{\"keccak256\":\"0xa7642b4ef1d2ac8e41bd6dca88c5a644cac21b3ebe79deb5013e21fb4aaab405\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ef80768f6c509a54ea5d3fb92cbf46363f945f071cc3664710770c09b3d2a978\",\"dweb:/ipfs/QmbRpicAiPSYQbKpjoDbanap9q5hYsqEMS1u7w7sqKEYTY\"]},\"src/extensions/sessions/SessionManager.sol\":{\"keccak256\":\"0x796e8db3b2dc58842aca5c7fe76897527dd60279a8146ee107f651d876fccbd9\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2ee4d968a8bd5d007cccc67108509470677f4f5ce59dce7005b1da7d9b243609\",\"dweb:/ipfs/QmVUz8Q4BwNsbeLZdsWHg87MCVF6aAJL6UYzWWWAoxjvS7\"]},\"src/extensions/sessions/SessionSig.sol\":{\"keccak256\":\"0x7c44eabacfd2b4758fa8f54574f7479d8ef0209551ad824b3fc497c215a9609a\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://845b301783b1f069fa0b01d47ca2de1a79b0d4c3e14881973421a718c4d823df\",\"dweb:/ipfs/QmcDgiqjENAL3L7MjQ7HgitmsJ2PVNUm3ibnL2DZRU1VAL\"]},\"src/extensions/sessions/explicit/ExplicitSessionManager.sol\":{\"keccak256\":\"0x08405cc3def78d4172267a2e607e303b5f222d8cb85ba009deab58e0110088b0\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e2e073fdb5794f59ee6d7eb5e04074b1452e5d0824e4117259835071199f3d32\",\"dweb:/ipfs/Qmbi56yfELF88ezZ2tczegLmeB6Gb3HxDX11bzx3rpDgJZ\"]},\"src/extensions/sessions/explicit/IExplicitSessionManager.sol\":{\"keccak256\":\"0xae940e96cf0677c9b0df0daee07db0293c55a21cec0b893d82eefd122815602b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://62ee98f92121ad54f78d375ec3003aab73719adec852b0d12518fe99fc6f66c6\",\"dweb:/ipfs/QmPuAX7tdga5Su1xua6LS6jR9DsV7GyCwyZLeRC8upPTKY\"]},\"src/extensions/sessions/explicit/Permission.sol\":{\"keccak256\":\"0x0bc35a04da3830c64ec13c32b57f88be6b980228f6b387e800cf70919cdcfb16\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://fcb304612f894699f8e1e40cf134abebe8f7135795bea479b04e967551c59948\",\"dweb:/ipfs/Qme4mD8dh3xU9wbscQwvL4cQcZ2Wv8Fobo2fmU29B3DirV\"]},\"src/extensions/sessions/explicit/PermissionValidator.sol\":{\"keccak256\":\"0xe970e1ce931ef3779e3ddc9525b40820b7f63746828a440306ff9c984da42234\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://9154a986b7a5565119b2c0993dd9bc9e6e9b3e07eede034c8fde1c9f39a56a30\",\"dweb:/ipfs/QmXbgsr6kYYK5gmge6sosgwbHnFnQW5ntCZCyeNTQqTndD\"]},\"src/extensions/sessions/implicit/Attestation.sol\":{\"keccak256\":\"0xcaa44022b5eb4bc7ab487b3b1a0125da67e2e891cee983ef6cdb6814f045efc8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://94829782b6dcb482d7c002511c590d1ad8de3b21e5e72575df18be73565b3638\",\"dweb:/ipfs/QmZ4u9FxALzMzKR7auW8FmFkhGVw8kRDeDRJ1PKwKaWNWF\"]},\"src/extensions/sessions/implicit/ISignalsImplicitMode.sol\":{\"keccak256\":\"0x6cb48f50c49bcb3c7071306fe9fac6c102bc9eabf73d9909e19ab3b9a835d0a8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://15297e969f64fc1152654d1cefbe276c15a0ecfc11f86b4c276bb0b454fe700a\",\"dweb:/ipfs/QmeehNFYBPPtJePwUcqiYCgiuFotur4VVVCV1KvegdCCZ4\"]},\"src/extensions/sessions/implicit/ImplicitSessionManager.sol\":{\"keccak256\":\"0xe0d4f9f9c242e1e5781ba3a2eb4c4485b16de53769dacf7f448be01649d9997b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://f6f28cfeca83fffc74e63440243fcb0a7f9a7d5ac5efae21fa8e96926c1d0fae\",\"dweb:/ipfs/Qmdnw9PrjjpUjWij9VDxBRe6besuJvpwiGaPewVcR2G9C1\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/interfaces/ISapient.sol\":{\"keccak256\":\"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489\",\"dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"src/utils/LibOptim.sol\":{\"keccak256\":\"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81\",\"dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x\"]},\"test/extensions/sessions/SessionTestBase.sol\":{\"keccak256\":\"0x96ed18b2829a94a4e2fa0331b595e931ba48114679aa9765799aa9583713a1e7\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1f5dc74df056ea0b6722898060c5f467d47c7961335d474d93a3d45a75575894\",\"dweb:/ipfs/QmPT1ArcYmBUASEr2iL5TnRRkwShMahRh8YWurcbGkwJa4\"]},\"test/extensions/sessions/implicit/ImplicitSessionManager.t.sol\":{\"keccak256\":\"0x8a2dfffae1d4f0f852520302cbd931e45b82247a2d92b4e49e464441d46594e8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://525f94a8e30bc0efc9964625f7fe743e4e9b147ec46883ec7af1ea7403cf6896\",\"dweb:/ipfs/QmNREMnVfJNsXkpJtWWRTBZqHXatvRyUeTLnmysR1Bn52j\"]},\"test/mocks/Emitter.sol\":{\"keccak256\":\"0xb3fe3585f667c0af3e9deaaf6f7e68b16067014c9363367b4548c91abf367b27\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e6985271645ec1df625995837c2afb23f7042d7a4c18c992f5f1c9ff1c89b160\",\"dweb:/ipfs/QmTwQRRY95Z73vDP5EuamAQxTaSprwGy3piLRrWDf9FnoU\"]},\"test/utils/PrimitivesRPC.sol\":{\"keccak256\":\"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe\",\"dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv\"]},\"test/utils/TestUtils.sol\":{\"keccak256\":\"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad\",\"dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log","anonymous":false},{"inputs":[{"internalType":"address","name":"","type":"address","indexed":false}],"type":"event","name":"log_address","anonymous":false},{"inputs":[{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"log_bytes","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32","indexed":false}],"type":"event","name":"log_bytes32","anonymous":false},{"inputs":[{"internalType":"int256","name":"","type":"int256","indexed":false}],"type":"event","name":"log_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address","name":"val","type":"address","indexed":false}],"type":"event","name":"log_named_address","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes","name":"val","type":"bytes","indexed":false}],"type":"event","name":"log_named_bytes","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes32","name":"val","type":"bytes32","indexed":false}],"type":"event","name":"log_named_bytes32","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false}],"type":"event","name":"log_named_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"string","name":"val","type":"string","indexed":false}],"type":"event","name":"log_named_string","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false}],"type":"event","name":"log_named_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log_string","anonymous":false},{"inputs":[{"internalType":"uint256","name":"","type":"uint256","indexed":false}],"type":"event","name":"log_uint","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"logs","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"IS_TEST","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"emitter","outputs":[{"internalType":"contract Emitter","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeArtifacts","outputs":[{"internalType":"string[]","name":"excludedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeContracts","outputs":[{"internalType":"address[]","name":"excludedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"excludedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSenders","outputs":[{"internalType":"address[]","name":"excludedSenders_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"failed","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"identityWallet","outputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"publicKeyX","type":"uint256"},{"internalType":"uint256","name":"publicKeyY","type":"uint256"},{"internalType":"uint256","name":"privateKey","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"sessionManager","outputs":[{"internalType":"contract ImplicitSessionManagerHarness","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"sessionWallet","outputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"publicKeyX","type":"uint256"},{"internalType":"uint256","name":"publicKeyY","type":"uint256"},{"internalType":"uint256","name":"privateKey","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"setUp"},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifactSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzArtifactSelector[]","name":"targetedArtifactSelectors_","type":"tuple[]","components":[{"internalType":"string","name":"artifact","type":"string"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifacts","outputs":[{"internalType":"string[]","name":"targetedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetContracts","outputs":[{"internalType":"address[]","name":"targetedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetInterfaces","outputs":[{"internalType":"struct StdInvariant.FuzzInterface[]","name":"targetedInterfaces_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"string[]","name":"artifacts","type":"string[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"targetedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSenders","outputs":[{"internalType":"address[]","name":"targetedSenders_","type":"address[]"}]},{"inputs":[{"internalType":"uint256","name":"randomIdx","type":"uint256"},{"internalType":"struct Attestation","name":"attestation","type":"tuple","components":[{"internalType":"address","name":"approvedSigner","type":"address"},{"internalType":"bytes4","name":"identityType","type":"bytes4"},{"internalType":"bytes32","name":"issuerHash","type":"bytes32"},{"internalType":"bytes32","name":"audienceHash","type":"bytes32"},{"internalType":"bytes","name":"applicationData","type":"bytes"},{"internalType":"struct AuthData","name":"authData","type":"tuple","components":[{"internalType":"string","name":"redirectUrl","type":"string"},{"internalType":"uint64","name":"issuedAt","type":"uint64"}]}]},{"internalType":"address[]","name":"blacklist","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"test_blacklistedAddressNotAllowed"},{"inputs":[{"internalType":"uint256","name":"randomIdx","type":"uint256"},{"internalType":"struct Attestation","name":"attestation","type":"tuple","components":[{"internalType":"address","name":"approvedSigner","type":"address"},{"internalType":"bytes4","name":"identityType","type":"bytes4"},{"internalType":"bytes32","name":"issuerHash","type":"bytes32"},{"internalType":"bytes32","name":"audienceHash","type":"bytes32"},{"internalType":"bytes","name":"applicationData","type":"bytes"},{"internalType":"struct AuthData","name":"authData","type":"tuple","components":[{"internalType":"string","name":"redirectUrl","type":"string"},{"internalType":"uint64","name":"issuedAt","type":"uint64"}]}]},{"internalType":"address[]","name":"blacklist","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"test_blacklistedSessionSignerNotAllowed"},{"inputs":[{"internalType":"struct Attestation","name":"attestation","type":"tuple","components":[{"internalType":"address","name":"approvedSigner","type":"address"},{"internalType":"bytes4","name":"identityType","type":"bytes4"},{"internalType":"bytes32","name":"issuerHash","type":"bytes32"},{"internalType":"bytes32","name":"audienceHash","type":"bytes32"},{"internalType":"bytes","name":"applicationData","type":"bytes"},{"internalType":"struct AuthData","name":"authData","type":"tuple","components":[{"internalType":"string","name":"redirectUrl","type":"string"},{"internalType":"uint64","name":"issuedAt","type":"uint64"}]}]}],"stateMutability":"nonpayable","type":"function","name":"test_delegateCallNotAllowed"},{"inputs":[{"internalType":"struct Attestation","name":"attestation","type":"tuple","components":[{"internalType":"address","name":"approvedSigner","type":"address"},{"internalType":"bytes4","name":"identityType","type":"bytes4"},{"internalType":"bytes32","name":"issuerHash","type":"bytes32"},{"internalType":"bytes32","name":"audienceHash","type":"bytes32"},{"internalType":"bytes","name":"applicationData","type":"bytes"},{"internalType":"struct AuthData","name":"authData","type":"tuple","components":[{"internalType":"string","name":"redirectUrl","type":"string"},{"internalType":"uint64","name":"issuedAt","type":"uint64"}]}]}],"stateMutability":"nonpayable","type":"function","name":"test_invalidImplicitResult"},{"inputs":[{"internalType":"struct Attestation","name":"attestation","type":"tuple","components":[{"internalType":"address","name":"approvedSigner","type":"address"},{"internalType":"bytes4","name":"identityType","type":"bytes4"},{"internalType":"bytes32","name":"issuerHash","type":"bytes32"},{"internalType":"bytes32","name":"audienceHash","type":"bytes32"},{"internalType":"bytes","name":"applicationData","type":"bytes"},{"internalType":"struct AuthData","name":"authData","type":"tuple","components":[{"internalType":"string","name":"redirectUrl","type":"string"},{"internalType":"uint64","name":"issuedAt","type":"uint64"}]}]},{"internalType":"uint256","name":"nonZeroValue","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"test_nonZeroValueNotAllowed"},{"inputs":[{"internalType":"struct Attestation","name":"attestation","type":"tuple","components":[{"internalType":"address","name":"approvedSigner","type":"address"},{"internalType":"bytes4","name":"identityType","type":"bytes4"},{"internalType":"bytes32","name":"issuerHash","type":"bytes32"},{"internalType":"bytes32","name":"audienceHash","type":"bytes32"},{"internalType":"bytes","name":"applicationData","type":"bytes"},{"internalType":"struct AuthData","name":"authData","type":"tuple","components":[{"internalType":"string","name":"redirectUrl","type":"string"},{"internalType":"uint64","name":"issuedAt","type":"uint64"}]}]},{"internalType":"address[]","name":"blacklist","type":"address[]"}],"stateMutability":"view","type":"function","name":"test_validImplicitCall"},{"inputs":[{"internalType":"struct Attestation","name":"attestation","type":"tuple","components":[{"internalType":"address","name":"approvedSigner","type":"address"},{"internalType":"bytes4","name":"identityType","type":"bytes4"},{"internalType":"bytes32","name":"issuerHash","type":"bytes32"},{"internalType":"bytes32","name":"audienceHash","type":"bytes32"},{"internalType":"bytes","name":"applicationData","type":"bytes"},{"internalType":"struct AuthData","name":"authData","type":"tuple","components":[{"internalType":"string","name":"redirectUrl","type":"string"},{"internalType":"uint64","name":"issuedAt","type":"uint64"}]}]}],"stateMutability":"nonpayable","type":"function","name":"test_validImplicitCall_invalidSessionSigner"},{"inputs":[],"stateMutability":"view","type":"function","name":"wallet","outputs":[{"internalType":"address","name":"","type":"address"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{"test_delegateCallNotAllowed((address,bytes4,bytes32,bytes32,bytes,(string,uint64)))":{"notice":"Test for delegateCall not allowed."}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/extensions/sessions/implicit/ImplicitSessionManager.t.sol":"ImplicitSessionManagerTest"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/extensions/sessions/SessionErrors.sol":{"keccak256":"0xa7642b4ef1d2ac8e41bd6dca88c5a644cac21b3ebe79deb5013e21fb4aaab405","urls":["bzz-raw://ef80768f6c509a54ea5d3fb92cbf46363f945f071cc3664710770c09b3d2a978","dweb:/ipfs/QmbRpicAiPSYQbKpjoDbanap9q5hYsqEMS1u7w7sqKEYTY"],"license":"Apache-2.0"},"src/extensions/sessions/SessionManager.sol":{"keccak256":"0x796e8db3b2dc58842aca5c7fe76897527dd60279a8146ee107f651d876fccbd9","urls":["bzz-raw://2ee4d968a8bd5d007cccc67108509470677f4f5ce59dce7005b1da7d9b243609","dweb:/ipfs/QmVUz8Q4BwNsbeLZdsWHg87MCVF6aAJL6UYzWWWAoxjvS7"],"license":"Apache-2.0"},"src/extensions/sessions/SessionSig.sol":{"keccak256":"0x7c44eabacfd2b4758fa8f54574f7479d8ef0209551ad824b3fc497c215a9609a","urls":["bzz-raw://845b301783b1f069fa0b01d47ca2de1a79b0d4c3e14881973421a718c4d823df","dweb:/ipfs/QmcDgiqjENAL3L7MjQ7HgitmsJ2PVNUm3ibnL2DZRU1VAL"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/ExplicitSessionManager.sol":{"keccak256":"0x08405cc3def78d4172267a2e607e303b5f222d8cb85ba009deab58e0110088b0","urls":["bzz-raw://e2e073fdb5794f59ee6d7eb5e04074b1452e5d0824e4117259835071199f3d32","dweb:/ipfs/Qmbi56yfELF88ezZ2tczegLmeB6Gb3HxDX11bzx3rpDgJZ"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/IExplicitSessionManager.sol":{"keccak256":"0xae940e96cf0677c9b0df0daee07db0293c55a21cec0b893d82eefd122815602b","urls":["bzz-raw://62ee98f92121ad54f78d375ec3003aab73719adec852b0d12518fe99fc6f66c6","dweb:/ipfs/QmPuAX7tdga5Su1xua6LS6jR9DsV7GyCwyZLeRC8upPTKY"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/Permission.sol":{"keccak256":"0x0bc35a04da3830c64ec13c32b57f88be6b980228f6b387e800cf70919cdcfb16","urls":["bzz-raw://fcb304612f894699f8e1e40cf134abebe8f7135795bea479b04e967551c59948","dweb:/ipfs/Qme4mD8dh3xU9wbscQwvL4cQcZ2Wv8Fobo2fmU29B3DirV"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/PermissionValidator.sol":{"keccak256":"0xe970e1ce931ef3779e3ddc9525b40820b7f63746828a440306ff9c984da42234","urls":["bzz-raw://9154a986b7a5565119b2c0993dd9bc9e6e9b3e07eede034c8fde1c9f39a56a30","dweb:/ipfs/QmXbgsr6kYYK5gmge6sosgwbHnFnQW5ntCZCyeNTQqTndD"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/Attestation.sol":{"keccak256":"0xcaa44022b5eb4bc7ab487b3b1a0125da67e2e891cee983ef6cdb6814f045efc8","urls":["bzz-raw://94829782b6dcb482d7c002511c590d1ad8de3b21e5e72575df18be73565b3638","dweb:/ipfs/QmZ4u9FxALzMzKR7auW8FmFkhGVw8kRDeDRJ1PKwKaWNWF"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/ISignalsImplicitMode.sol":{"keccak256":"0x6cb48f50c49bcb3c7071306fe9fac6c102bc9eabf73d9909e19ab3b9a835d0a8","urls":["bzz-raw://15297e969f64fc1152654d1cefbe276c15a0ecfc11f86b4c276bb0b454fe700a","dweb:/ipfs/QmeehNFYBPPtJePwUcqiYCgiuFotur4VVVCV1KvegdCCZ4"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/ImplicitSessionManager.sol":{"keccak256":"0xe0d4f9f9c242e1e5781ba3a2eb4c4485b16de53769dacf7f448be01649d9997b","urls":["bzz-raw://f6f28cfeca83fffc74e63440243fcb0a7f9a7d5ac5efae21fa8e96926c1d0fae","dweb:/ipfs/Qmdnw9PrjjpUjWij9VDxBRe6besuJvpwiGaPewVcR2G9C1"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/interfaces/ISapient.sol":{"keccak256":"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359","urls":["bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489","dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"src/utils/LibOptim.sol":{"keccak256":"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde","urls":["bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81","dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x"],"license":"Apache-2.0"},"test/extensions/sessions/SessionTestBase.sol":{"keccak256":"0x96ed18b2829a94a4e2fa0331b595e931ba48114679aa9765799aa9583713a1e7","urls":["bzz-raw://1f5dc74df056ea0b6722898060c5f467d47c7961335d474d93a3d45a75575894","dweb:/ipfs/QmPT1ArcYmBUASEr2iL5TnRRkwShMahRh8YWurcbGkwJa4"],"license":"Apache-2.0"},"test/extensions/sessions/implicit/ImplicitSessionManager.t.sol":{"keccak256":"0x8a2dfffae1d4f0f852520302cbd931e45b82247a2d92b4e49e464441d46594e8","urls":["bzz-raw://525f94a8e30bc0efc9964625f7fe743e4e9b147ec46883ec7af1ea7403cf6896","dweb:/ipfs/QmNREMnVfJNsXkpJtWWRTBZqHXatvRyUeTLnmysR1Bn52j"],"license":"Apache-2.0"},"test/mocks/Emitter.sol":{"keccak256":"0xb3fe3585f667c0af3e9deaaf6f7e68b16067014c9363367b4548c91abf367b27","urls":["bzz-raw://e6985271645ec1df625995837c2afb23f7042d7a4c18c992f5f1c9ff1c89b160","dweb:/ipfs/QmTwQRRY95Z73vDP5EuamAQxTaSprwGy3piLRrWDf9FnoU"],"license":"Apache-2.0"},"test/utils/PrimitivesRPC.sol":{"keccak256":"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe","urls":["bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe","dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv"],"license":"Apache-2.0"},"test/utils/TestUtils.sol":{"keccak256":"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79","urls":["bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad","dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa"],"license":"Apache-2.0"}},"version":1},"id":85} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/LibBytes.sol/LibBytes.json b/contracts/artifacts/wallet-contracts-v3/LibBytes.sol/LibBytes.json new file mode 100644 index 00000000..02f32e91 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/LibBytes.sol/LibBytes.json @@ -0,0 +1 @@ +{"abi":[],"bytecode":{"object":"0x60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea264697066735822122046d8a01b3844da611e9907006b57c10cd84b33b27be6f191cede7f98dfc1951964736f6c634300081c0033","sourceMap":"432:3576:68:-:0;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x600080fdfea264697066735822122046d8a01b3844da611e9907006b57c10cd84b33b27be6f191cede7f98dfc1951964736f6c634300081c0033","sourceMap":"432:3576:68:-:0;;","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Agustin Aguilar (aa@horizon.io), Michael Standen (mstan@horizon.io)\",\"details\":\"These functions do not check if the input index is within the bounds of the data array.Reading out of bounds may return dirty values.\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Library for reading data from bytes arrays\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"This library contains functions for reading data from bytes arrays.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/utils/LibBytes.sol\":\"LibBytes\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/utils/LibBytes.sol":"LibBytes"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"}},"version":1},"id":68} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/LibBytes.t.sol/LibBytesImp.json b/contracts/artifacts/wallet-contracts-v3/LibBytes.t.sol/LibBytesImp.json new file mode 100644 index 00000000..1cc6a131 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/LibBytes.t.sol/LibBytesImp.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"readAddress","inputs":[{"name":"data","type":"bytes","internalType":"bytes"},{"name":"index","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"a","type":"address","internalType":"address"},{"name":"newPointer","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"readBytes32","inputs":[{"name":"data","type":"bytes","internalType":"bytes"},{"name":"pointer","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"a","type":"bytes32","internalType":"bytes32"},{"name":"newPointer","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"readBytes4","inputs":[{"name":"data","type":"bytes","internalType":"bytes"},{"name":"pointer","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"a","type":"bytes4","internalType":"bytes4"},{"name":"newPointer","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"readFirstUint8","inputs":[{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"a","type":"uint8","internalType":"uint8"},{"name":"newPointer","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"readRSVCompact","inputs":[{"name":"data","type":"bytes","internalType":"bytes"},{"name":"index","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"},{"name":"v","type":"uint8","internalType":"uint8"},{"name":"newPointer","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"readUint16","inputs":[{"name":"data","type":"bytes","internalType":"bytes"},{"name":"index","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"a","type":"uint16","internalType":"uint16"},{"name":"newPointer","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"readUint160","inputs":[{"name":"data","type":"bytes","internalType":"bytes"},{"name":"index","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"a","type":"uint160","internalType":"uint160"},{"name":"newPointer","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"readUint24","inputs":[{"name":"data","type":"bytes","internalType":"bytes"},{"name":"index","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"a","type":"uint24","internalType":"uint24"},{"name":"newPointer","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"readUint256","inputs":[{"name":"data","type":"bytes","internalType":"bytes"},{"name":"index","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"a","type":"uint256","internalType":"uint256"},{"name":"newPointer","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"readUint64","inputs":[{"name":"data","type":"bytes","internalType":"bytes"},{"name":"index","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"a","type":"uint64","internalType":"uint64"},{"name":"newPointer","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"readUint8","inputs":[{"name":"data","type":"bytes","internalType":"bytes"},{"name":"index","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"a","type":"uint8","internalType":"uint8"},{"name":"newPointer","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"readUintX","inputs":[{"name":"data","type":"bytes","internalType":"bytes"},{"name":"index","type":"uint256","internalType":"uint256"},{"name":"length","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"a","type":"uint256","internalType":"uint256"},{"name":"newPointer","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"}],"bytecode":{"object":"0x60808060405234601557610434908161001b8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c9081631a8211481461031d575080635663060f146102d457806384cfc10f14610238578063a23ccef61461020e578063a98917a7146101e4578063aa277f28146101ba578063af500fb7146100f9578063bcf18296146100cf578063cab8581814610120578063e02da327146100f9578063f0e9da23146100cf5763f21a7fe7146100a357600080fd5b346100ca5760016100b3366103ad565b604080519382013560f81c84529301602083015250f35b600080fd5b346100ca57604060146100e1366103ad565b905083929192519281013560601c8352016020820152f35b346100ca576040602061010b366103ad565b90508392919251928101358352016020820152f35b346100ca5761012e366103ad565b8092915001602081013591601b8360ff1c019060ff821161018b5760ff6040927f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6080968551963587521660208601521682840152016060820152f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b346100ca57604060036101cc366103ad565b905083929192519281013560e81c8352016020820152f35b346100ca57604060086101f6366103ad565b905083929192519281013560c01c8352016020820152f35b346100ca5760406002610220366103ad565b905083929192519281013560f01c8352016020820152f35b346100ca5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ca5760043567ffffffffffffffff81116100ca57610289604091369060040161037f565b50602435604435908160031b928451937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019183013590610100031c168352016020820152f35b346100ca57604060046102e6366103ad565b90507fffffffff00000000000000000000000000000000000000000000000000000000849392935193820135168352016020820152f35b346100ca5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ca5760043567ffffffffffffffff81116100ca5761036c90369060040161037f565b503560f81c815260016020820152604090f35b9181601f840112156100ca5782359167ffffffffffffffff83116100ca57602083818601950101116100ca57565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126100ca576004359067ffffffffffffffff82116100ca576103f69160040161037f565b90916024359056fea26469706673582212202a45ff3a27978ba40df4be6762ee5cf494b0bec01f3d543515d1c9f2252ac50464736f6c634300081c0033","sourceMap":"213:2071:96:-:0;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608080604052600436101561001357600080fd5b60003560e01c9081631a8211481461031d575080635663060f146102d457806384cfc10f14610238578063a23ccef61461020e578063a98917a7146101e4578063aa277f28146101ba578063af500fb7146100f9578063bcf18296146100cf578063cab8581814610120578063e02da327146100f9578063f0e9da23146100cf5763f21a7fe7146100a357600080fd5b346100ca5760016100b3366103ad565b604080519382013560f81c84529301602083015250f35b600080fd5b346100ca57604060146100e1366103ad565b905083929192519281013560601c8352016020820152f35b346100ca576040602061010b366103ad565b90508392919251928101358352016020820152f35b346100ca5761012e366103ad565b8092915001602081013591601b8360ff1c019060ff821161018b5760ff6040927f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6080968551963587521660208601521682840152016060820152f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b346100ca57604060036101cc366103ad565b905083929192519281013560e81c8352016020820152f35b346100ca57604060086101f6366103ad565b905083929192519281013560c01c8352016020820152f35b346100ca5760406002610220366103ad565b905083929192519281013560f01c8352016020820152f35b346100ca5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ca5760043567ffffffffffffffff81116100ca57610289604091369060040161037f565b50602435604435908160031b928451937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019183013590610100031c168352016020820152f35b346100ca57604060046102e6366103ad565b90507fffffffff00000000000000000000000000000000000000000000000000000000849392935193820135168352016020820152f35b346100ca5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ca5760043567ffffffffffffffff81116100ca5761036c90369060040161037f565b503560f81c815260016020820152604090f35b9181601f840112156100ca5782359167ffffffffffffffff83116100ca57602083818601950101116100ca57565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126100ca576004359067ffffffffffffffff82116100ca576103f69160040161037f565b90916024359056fea26469706673582212202a45ff3a27978ba40df4be6762ee5cf494b0bec01f3d543515d1c9f2252ac50464736f6c634300081c0033","sourceMap":"213:2071:96:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;798:135:68;213:2071:96;;;:::i;:::-;;;;798:135:68;;;;;;213:2071:96;;798:135:68;;213:2071:96;;;;-1:-1:-1;213:2071:96;;;;;;;;;;1840:135:68;213:2071:96;;;:::i;:::-;;;;;;;;1840:135:68;;;;;;213:2071:96;;1840:135:68;213:2071:96;;;;;;;;;;3047:107:68;213:2071:96;;;:::i;:::-;;;;;;;;3047:107:68;;;;213:2071:96;;3047:107:68;;213:2071:96;;;;;;;;;;;:::i;:::-;3690:173:68;;;;;;;;;213:2071:96;3998:2:68;213:2071:96;;;;;;;;;;;;;3955:14:68;213:2071:96;;;;3690:173:68;;213:2071:96;;3931:39:68;3690:173;213:2071:96;;;;;;;;3690:173:68;213:2071:96;;;;;;;;;;;;;;;;;;;;1318:135:68;213:2071:96;;;:::i;:::-;;;;;;;;1318:135:68;;;;;;213:2071:96;;1318:135:68;213:2071:96;;;;;;;;;;1578:135:68;213:2071:96;;;:::i;:::-;;;;;;;;1578:135:68;;;;;;213:2071:96;;1578:135:68;213:2071:96;;;;;;;;;;1058:135:68;213:2071:96;;;:::i;:::-;;;;;;;;1058:135:68;;;;;;213:2071:96;;1058:135:68;213:2071:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;2363:226:68;;;;213:2071:96;;;2363:226:68;;213:2071:96;2363:226:68;;;;;;;;;;;;213:2071:96;;2363:226:68;213:2071:96;;;;;;;;;;;;;;:::i;:::-;;;2716:202:68;213:2071:96;;;;;2716:202:68;;;;;213:2071:96;;2716:202:68;213:2071:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;566:109:68;;;213:2071:96;;566:109:68;213:2071:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::o","linkReferences":{}},"methodIdentifiers":{"readAddress(bytes,uint256)":"f0e9da23","readBytes32(bytes,uint256)":"af500fb7","readBytes4(bytes,uint256)":"5663060f","readFirstUint8(bytes)":"1a821148","readRSVCompact(bytes,uint256)":"cab85818","readUint16(bytes,uint256)":"a23ccef6","readUint160(bytes,uint256)":"bcf18296","readUint24(bytes,uint256)":"aa277f28","readUint256(bytes,uint256)":"e02da327","readUint64(bytes,uint256)":"a98917a7","readUint8(bytes,uint256)":"f21a7fe7","readUintX(bytes,uint256,uint256)":"84cfc10f"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"readAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"a\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newPointer\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"pointer\",\"type\":\"uint256\"}],\"name\":\"readBytes32\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"a\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"newPointer\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"pointer\",\"type\":\"uint256\"}],\"name\":\"readBytes4\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"a\",\"type\":\"bytes4\"},{\"internalType\":\"uint256\",\"name\":\"newPointer\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"readFirstUint8\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"a\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"newPointer\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"readRSVCompact\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"newPointer\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"readUint16\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"a\",\"type\":\"uint16\"},{\"internalType\":\"uint256\",\"name\":\"newPointer\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"readUint160\",\"outputs\":[{\"internalType\":\"uint160\",\"name\":\"a\",\"type\":\"uint160\"},{\"internalType\":\"uint256\",\"name\":\"newPointer\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"readUint24\",\"outputs\":[{\"internalType\":\"uint24\",\"name\":\"a\",\"type\":\"uint24\"},{\"internalType\":\"uint256\",\"name\":\"newPointer\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"readUint256\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"a\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newPointer\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"readUint64\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"a\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"newPointer\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"readUint8\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"a\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"newPointer\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"readUintX\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"a\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newPointer\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/utils/LibBytes.t.sol\":\"LibBytesImp\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"test/utils/LibBytes.t.sol\":{\"keccak256\":\"0xcb0d546754d2fd162bfd60f67c5bf2de1460b8bd7007efcecf78f388f0bdbf54\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ab1cb0cc744a2008f4a96b2183d4d0452492a338b13e97f496132f623dc7b520\",\"dweb:/ipfs/Qmf5S5HYZ4pnvjdLjsUvpjiorHt9sdCM7b1TkwEzMCAX92\"]},\"test/utils/TestUtils.sol\":{\"keccak256\":\"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad\",\"dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"pure","type":"function","name":"readAddress","outputs":[{"internalType":"address","name":"a","type":"address"},{"internalType":"uint256","name":"newPointer","type":"uint256"}]},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"pointer","type":"uint256"}],"stateMutability":"pure","type":"function","name":"readBytes32","outputs":[{"internalType":"bytes32","name":"a","type":"bytes32"},{"internalType":"uint256","name":"newPointer","type":"uint256"}]},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"pointer","type":"uint256"}],"stateMutability":"pure","type":"function","name":"readBytes4","outputs":[{"internalType":"bytes4","name":"a","type":"bytes4"},{"internalType":"uint256","name":"newPointer","type":"uint256"}]},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"pure","type":"function","name":"readFirstUint8","outputs":[{"internalType":"uint8","name":"a","type":"uint8"},{"internalType":"uint256","name":"newPointer","type":"uint256"}]},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"pure","type":"function","name":"readRSVCompact","outputs":[{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"uint256","name":"newPointer","type":"uint256"}]},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"pure","type":"function","name":"readUint16","outputs":[{"internalType":"uint16","name":"a","type":"uint16"},{"internalType":"uint256","name":"newPointer","type":"uint256"}]},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"pure","type":"function","name":"readUint160","outputs":[{"internalType":"uint160","name":"a","type":"uint160"},{"internalType":"uint256","name":"newPointer","type":"uint256"}]},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"pure","type":"function","name":"readUint24","outputs":[{"internalType":"uint24","name":"a","type":"uint24"},{"internalType":"uint256","name":"newPointer","type":"uint256"}]},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"pure","type":"function","name":"readUint256","outputs":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256","name":"newPointer","type":"uint256"}]},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"pure","type":"function","name":"readUint64","outputs":[{"internalType":"uint64","name":"a","type":"uint64"},{"internalType":"uint256","name":"newPointer","type":"uint256"}]},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"pure","type":"function","name":"readUint8","outputs":[{"internalType":"uint8","name":"a","type":"uint8"},{"internalType":"uint256","name":"newPointer","type":"uint256"}]},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"length","type":"uint256"}],"stateMutability":"pure","type":"function","name":"readUintX","outputs":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256","name":"newPointer","type":"uint256"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/utils/LibBytes.t.sol":"LibBytesImp"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"test/utils/LibBytes.t.sol":{"keccak256":"0xcb0d546754d2fd162bfd60f67c5bf2de1460b8bd7007efcecf78f388f0bdbf54","urls":["bzz-raw://ab1cb0cc744a2008f4a96b2183d4d0452492a338b13e97f496132f623dc7b520","dweb:/ipfs/Qmf5S5HYZ4pnvjdLjsUvpjiorHt9sdCM7b1TkwEzMCAX92"],"license":"Apache-2.0"},"test/utils/TestUtils.sol":{"keccak256":"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79","urls":["bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad","dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa"],"license":"Apache-2.0"}},"version":1},"id":96} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/LibBytes.t.sol/LibBytesTest.json b/contracts/artifacts/wallet-contracts-v3/LibBytes.t.sol/LibBytesTest.json new file mode 100644 index 00000000..c7bde7a2 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/LibBytes.t.sol/LibBytesTest.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"bytesImp","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract LibBytesImp"}],"stateMutability":"view"},{"type":"function","name":"excludeArtifacts","inputs":[],"outputs":[{"name":"excludedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"excludeContracts","inputs":[],"outputs":[{"name":"excludedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"excludeSelectors","inputs":[],"outputs":[{"name":"excludedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"excludeSenders","inputs":[],"outputs":[{"name":"excludedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"setUp","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"targetArtifactSelectors","inputs":[],"outputs":[{"name":"targetedArtifactSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzArtifactSelector[]","components":[{"name":"artifact","type":"string","internalType":"string"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetArtifacts","inputs":[],"outputs":[{"name":"targetedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"targetContracts","inputs":[],"outputs":[{"name":"targetedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"targetInterfaces","inputs":[],"outputs":[{"name":"targetedInterfaces_","type":"tuple[]","internalType":"struct StdInvariant.FuzzInterface[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"artifacts","type":"string[]","internalType":"string[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSelectors","inputs":[],"outputs":[{"name":"targetedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSenders","inputs":[],"outputs":[{"name":"targetedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"test_readAddress","inputs":[{"name":"prefix","type":"bytes","internalType":"bytes"},{"name":"value","type":"address","internalType":"address"},{"name":"suffix","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_readAddress_outOfBounds","inputs":[{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_readBytes32","inputs":[{"name":"prefix","type":"bytes","internalType":"bytes"},{"name":"value","type":"bytes32","internalType":"bytes32"},{"name":"suffix","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_readBytes32_outOfBounds","inputs":[{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_readBytes4","inputs":[{"name":"prefix","type":"bytes","internalType":"bytes"},{"name":"value","type":"bytes4","internalType":"bytes4"},{"name":"suffix","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_readBytes4_outOfBounds","inputs":[{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_readFirstUint8","inputs":[{"name":"suffix","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_readFirstUint8_emptyData","inputs":[],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_readRSVCompact","inputs":[{"name":"prefix","type":"bytes","internalType":"bytes"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"sWithParity","type":"uint256","internalType":"uint256"},{"name":"suffix","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_readRSVCompact_outOfBounds","inputs":[{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_readUint16","inputs":[{"name":"prefix","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint16","internalType":"uint16"},{"name":"suffix","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_readUint160","inputs":[{"name":"prefix","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint160","internalType":"uint160"},{"name":"suffix","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_readUint160_outOfBounds","inputs":[{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_readUint16_outOfBounds","inputs":[{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_readUint24","inputs":[{"name":"prefix","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint24","internalType":"uint24"},{"name":"suffix","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_readUint24_outOfBounds","inputs":[{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_readUint256","inputs":[{"name":"prefix","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"suffix","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_readUint256_outOfBounds","inputs":[{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_readUint64","inputs":[{"name":"prefix","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint64","internalType":"uint64"},{"name":"suffix","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_readUint64_outOfBounds","inputs":[{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_readUint8","inputs":[{"name":"prefix","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint8","internalType":"uint8"},{"name":"suffix","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_readUint8_outOfBounds","inputs":[{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_readUintX","inputs":[{"name":"prefix","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"length","type":"uint256","internalType":"uint256"},{"name":"suffix","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"event","name":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false}],"bytecode":{"object":"0x60808060405234602f57600160ff19600c541617600c55600160ff19601f541617601f55614a6090816100358239f35b600080fdfe608080604052600436101561001357600080fd5b600090813560e01c90816305d0c40514613877575080630a9254e4146137a45780631779e1411461350e5780631b556de6146134b95780631ed7831c146134105780632ade3880146132535780633e5e3c23146131aa5780633f7286f41461310157806342f9937214612f225780634444928414612db15780634526428714612c4957806356e3186114612b1157806366d9a9a0146129b65780637cb0471a146128a25780637e1cd479146126eb57806385226c811461263b578063916a17c61461256657806393d7f84514611a0857806399b7355e146118a0578063a8f575d9146116d7578063b0464fdc14611602578063b3d13c06146114ca578063b441bf7614611362578063b4e0b38a1461128b578063b5508aa9146111db578063ba414fa614611198578063c3d42ee914610ef4578063d683a9a314610d7c578063dec4398d14610c14578063e20c9f7114610b5b578063ebe75025146109c8578063ee8b7b6514610850578063f12a8e31146106ba578063f7d8818c14610578578063f94859c9146103ec578063f9e866f3146101fb5763fa7626d4146101b857600080fd5b346101f857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f857602060ff601f54166040519015158152f35b80fd5b50346101f85760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e85761024b9036906004016139f8565b906024359067ffffffffffffffff8216908183036103e4576044359067ffffffffffffffff82116103e0576102d48580926103259661029060409636906004016139f8565b9390927fffffffffffffffff00000000000000000000000000000000000000000000000088519360c01b166020840152600883526102cf602884613c9e565b613cdf565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c169083518096819482937fa98917a700000000000000000000000000000000000000000000000000000000845260048401613d73565b03915afa9081156103d55784928592610393575b5067ffffffffffffffff61034e929316614392565b60088201809211610366579061036391614392565b80f35b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b67ffffffffffffffff935061034e92506103c49060403d6040116103ce575b6103bc8183613c9e565b81019061436a565b9390939250610339565b503d6103b2565b6040513d86823e3d90fd5b8580fd5b8480fd5b5080fd5b50346101f85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e85761043c9036906004016139f8565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561057457826040517f4c63e5620000000000000000000000000000000000000000000000000000000081526020831060048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156105545761055f575b505061050f9160409173ffffffffffffffffffffffffffffffffffffffff601f5460081c169083518095819482937faf500fb70000000000000000000000000000000000000000000000000000000084528760048501526044840191613f03565b87602483015203915afa801561055457610527575080f35b6105489060403d60401161054d575b6105408183613c9e565b81019061420b565b505080f35b503d610536565b6040513d84823e3d90fd5b8161056991613c9e565b6105745782386104ae565b8280fd5b50346101f85760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e8576105c89036906004016139f8565b9060243560443567ffffffffffffffff81116103e4578361060f610660946105f660409436906004016139f8565b9184865191886020840152602083526102cf8884613c9e565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c169083518096819482937fe02da32700000000000000000000000000000000000000000000000000000000845260048401613d73565b03915afa9182156103d55784908593610694575b509061067f91614392565b60208201809211610366579061036391614392565b61067f9293506106b3915060403d60401161054d576105408183613c9e565b9291610674565b50346101f85760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e85761070a9036906004016139f8565b906024359062ffffff8216908183036103e4576044359067ffffffffffffffff82116103e0576107898580926107da9661074a60409636906004016139f8565b9390927fffffff000000000000000000000000000000000000000000000000000000000088519360e81b166020840152600383526102cf602384613c9e565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c169083518096819482937faa277f2800000000000000000000000000000000000000000000000000000000845260048401613d73565b03915afa9081156103d55784928592610813575b5062ffffff6107fe929316614392565b60038201809211610366579061036391614392565b62ffffff93506107fe925061083f9060403d604011610849575b6108378183613c9e565b810190614261565b93909392506107ee565b503d61082d565b50346101f85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e8576108a09036906004016139f8565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561057457826040517f4c63e56200000000000000000000000000000000000000000000000000000000815283151560048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610554576109b3575b505061097360409173ffffffffffffffffffffffffffffffffffffffff601f5460081c169083518095819482937ff21a7fe7000000000000000000000000000000000000000000000000000000008452876004850152826044850191613f03565b90602483015203915afa80156105545761098b575080f35b6105489060403d6040116109ac575b6109a48183613c9e565b810190613d56565b503d61099a565b816109bd91613c9e565b610574578238610912565b50346101f85760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e857610a189036906004016139f8565b906024359061ffff8216908183036103e4576044359067ffffffffffffffff82116103e057610a96858092610ae796610a5760409636906004016139f8565b9390927fffff00000000000000000000000000000000000000000000000000000000000088519360f01b166020840152600283526102cf602284613c9e565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c169083518096819482937fa23ccef600000000000000000000000000000000000000000000000000000000845260048401613d73565b03915afa9081156103d55784928592610b1f575b5061ffff610b0a929316614392565b60028201809211610366579061036391614392565b61ffff9350610b0a9250610b4a9060403d604011610b54575b610b428183613c9e565b810190613f42565b9390939250610afb565b503d610b38565b50346101f857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b818110610be857610be485610bd881870382613c9e565b60405191829182613a2b565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610bc1565b50346101f85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e857610c649036906004016139f8565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561057457826040517f4c63e5620000000000000000000000000000000000000000000000000000000081526008831060048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561055457610d67575b5050610d379160409173ffffffffffffffffffffffffffffffffffffffff601f5460081c169083518095819482937fa98917a70000000000000000000000000000000000000000000000000000000084528760048501526044840191613f03565b87602483015203915afa801561055457610d4f575080f35b6105489060403d6040116103ce576103bc8183613c9e565b81610d7191613c9e565b610574578238610cd6565b50346101f85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e857610dcc9036906004016139f8565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561057457826040517f4c63e5620000000000000000000000000000000000000000000000000000000081526004831060048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561055457610edf575b5050610e9f9160409173ffffffffffffffffffffffffffffffffffffffff601f5460081c169083518095819482937f5663060f0000000000000000000000000000000000000000000000000000000084528760048501526044840191613f03565b87602483015203915afa801561055457610eb7575080f35b6105489060403d604011610ed8575b610ed08183613c9e565b810190614221565b503d610ec6565b81610ee991613c9e565b610574578238610e3e565b50346101f85760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e857610f449036906004016139f8565b90602435604435916064359167ffffffffffffffff83116103e057610f6e859336906004016139f8565b9092907f800000000000000000000000000000000000000000000000000000000000000086161561119057601c935b81604051602081019086825260208152610fb8604082613c9e565b8b6040519160208301938c855260208452610fd4604085613c9e565b6040519b8c9960208b01378d89019160208301938452518093610ff692613a7b565b0160200191829151809361100992613a7b565b0191823701878152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810184526110419084613c9e565b601f5460081c73ffffffffffffffffffffffffffffffffffffffff166040518080957fcab8581800000000000000000000000000000000000000000000000000000000825288600483019161109592613d73565b03815a93608094fa93841561118557869187928895899761110e575b5060ff937f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85946110ea6110f99998956110f195614414565b1690614414565b169116614392565b60408201809211610366579061036391614392565b6110ea97506110f9965060ff94506110f19150917f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6111678695979460803d60801161117e575b61115f8183613c9e565b810190613ee0565b9b5099509497949694955091939192506110b19050565b503d611155565b6040513d88823e3d90fd5b601b93610f9d565b50346101f857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760206111d1614284565b6040519015158152f35b50346101f857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760195461121681613d8f565b916112246040519384613c9e565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b83831061126e5760405160208082528190610be490820188613ae1565b60016020819261127d85613da7565b815201920192019190611251565b50346101f857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f857611350604060208151906112ce8183613c9e565b8482527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101368284013773ffffffffffffffffffffffffffffffffffffffff601f5460081c169083518095819482937f1a82114800000000000000000000000000000000000000000000000000000000845260048401526024830190613a9e565b03915afa80156105545761098b575080f35b50346101f85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e8576113b29036906004016139f8565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561057457826040517f4c63e5620000000000000000000000000000000000000000000000000000000081526003831060048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610554576114b5575b50506114859160409173ffffffffffffffffffffffffffffffffffffffff601f5460081c169083518095819482937faa277f280000000000000000000000000000000000000000000000000000000084528760048501526044840191613f03565b87602483015203915afa80156105545761149d575080f35b6105489060403d604011610849576108378183613c9e565b816114bf91613c9e565b610574578238611424565b50346101f85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e85761151a9036906004016139f8565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561057457826040517f4c63e5620000000000000000000000000000000000000000000000000000000081526020831060048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610554576115ed575b505061050f9160409173ffffffffffffffffffffffffffffffffffffffff601f5460081c169083518095819482937fe02da3270000000000000000000000000000000000000000000000000000000084528760048501526044840191613f03565b816115f791613c9e565b61057457823861158c565b50346101f857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f857601c5461163d81613d8f565b9161164b6040519384613c9e565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b83831061168d5760405180610be48782613bae565b600260206001926040516116a081613c53565b73ffffffffffffffffffffffffffffffffffffffff86541681526116c5858701613f64565b83820152815201920192019190611678565b50346101f85760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e8576117279036906004016139f8565b906024359073ffffffffffffffffffffffffffffffffffffffff8216908183036103e4576044359067ffffffffffffffff82116103e0576117b78580926118089661177860409636906004016139f8565b9390927fffffffffffffffffffffffffffffffffffffffff00000000000000000000000088519360601b166020840152601483526102cf603484613c9e565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c169083518096819482937fbcf1829600000000000000000000000000000000000000000000000000000000845260048401613d73565b03915afa9081156103d55784928592611852575b5073ffffffffffffffffffffffffffffffffffffffff61183d929316614392565b60148201809211610366579061036391614392565b73ffffffffffffffffffffffffffffffffffffffff935061183d925061188f9060403d604011611899575b6118878183613c9e565b810190613eac565b939093925061181c565b503d61187d565b50346101f85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e8576118f09036906004016139f8565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561057457826040517f4c63e5620000000000000000000000000000000000000000000000000000000081526014831060048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610554576119f3575b50506119c39160409173ffffffffffffffffffffffffffffffffffffffff601f5460081c169083518095819482937fbcf182960000000000000000000000000000000000000000000000000000000084528760048501526044840191613f03565b87602483015203915afa8015610554576119db575080f35b6105489060403d604011611899576118878183613c9e565b816119fd91613c9e565b610574578238611962565b50346101f85760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e857611a589036906004016139f8565b60649291923567ffffffffffffffff811161057457611a7b9036906004016139f8565b93611a8760443561448b565b9160409085808351611a998582613c9e565b600c81527f426f756e6420726573756c74000000000000000000000000000000000000000060208201528451611b3681611b0460208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528960248401526064830190613a9e565b8a6044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282613c9e565b51906a636f6e736f6c652e6c6f675afa50602084036124e957611bcb611c22969783927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b602435169560018803611cbd578885517fff000000000000000000000000000000000000000000000000000000000000008960f81b16602082015260018152611bc5602182613c9e565b91613cdf565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c16825180809981947f84cfc10f000000000000000000000000000000000000000000000000000000008352606060048401526064830190613a9e565b89602483015288604483015203915afa948515611cb35786918796611c8f575b505090611c4e91614392565b8101809111611c605761036391614392565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b611c4e939650611cab9250803d1061054d576105408183613c9e565b949138611c42565b81513d88823e3d90fd5b60028803611d02578885517fffff0000000000000000000000000000000000000000000000000000000000008960f01b16602082015260028152611bc5602282613c9e565b60038803611d47578885517fffffff00000000000000000000000000000000000000000000000000000000008960e81b16602082015260038152611bc5602382613c9e565b60048803611d8c578885517fffffffff000000000000000000000000000000000000000000000000000000008960e01b16602082015260048152611bc5602482613c9e565b60058803611dd1578885517fffffffffff0000000000000000000000000000000000000000000000000000008960d81b16602082015260058152611bc5602582613c9e565b60068803611e16578885517fffffffffffff00000000000000000000000000000000000000000000000000008960d01b16602082015260068152611bc5602682613c9e565b60078803611e5b578885517fffffffffffffff000000000000000000000000000000000000000000000000008960c81b16602082015260078152611bc5602782613c9e565b60088803611ea0578885517fffffffffffffffff0000000000000000000000000000000000000000000000008960c01b16602082015260088152611bc5602882613c9e565b60098803611ee5578885517fffffffffffffffffff00000000000000000000000000000000000000000000008960b81b16602082015260098152611bc5602982613c9e565b600a8803611f2a578885517fffffffffffffffffffff000000000000000000000000000000000000000000008960b01b166020820152600a8152611bc5602a82613c9e565b600b8803611f6f578885517fffffffffffffffffffffff0000000000000000000000000000000000000000008960a81b166020820152600b8152611bc5602b82613c9e565b600c8803611fb4578885517fffffffffffffffffffffffff00000000000000000000000000000000000000008960a01b166020820152600c8152611bc5602c82613c9e565b600d8803611ff9578885517fffffffffffffffffffffffffff000000000000000000000000000000000000008960981b166020820152600d8152611bc5602d82613c9e565b600e880361203e578885517fffffffffffffffffffffffffffff0000000000000000000000000000000000008960901b166020820152600e8152611bc5602e82613c9e565b600f8803612083578885517fffffffffffffffffffffffffffffff00000000000000000000000000000000008960881b166020820152600f8152611bc5602f82613c9e565b601088036120c8578885517fffffffffffffffffffffffffffffffff000000000000000000000000000000008960801b16602082015260108152611bc5603082613c9e565b6011880361210d578885517fffffffffffffffffffffffffffffffffff0000000000000000000000000000008960781b16602082015260118152611bc5603182613c9e565b60128803612152578885517fffffffffffffffffffffffffffffffffffff00000000000000000000000000008960701b16602082015260128152611bc5603282613c9e565b60138803612197578885517fffffffffffffffffffffffffffffffffffffff000000000000000000000000008960681b16602082015260138152611bc5603382613c9e565b601488036121dc578885517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008960601b16602082015260148152611bc5603482613c9e565b60158803612221578885517fffffffffffffffffffffffffffffffffffffffffff00000000000000000000008960581b16602082015260158152611bc5603582613c9e565b60168803612266578885517fffffffffffffffffffffffffffffffffffffffffffff000000000000000000008960501b16602082015260168152611bc5603682613c9e565b601788036122ab578885517fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000008960481b16602082015260178152611bc5603782613c9e565b601888036122ef578885517fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000089881b16602082015260188152611bc5603882613c9e565b60198803612334578885517fffffffffffffffffffffffffffffffffffffffffffffffffff000000000000008960381b16602082015260198152611bc5603982613c9e565b601a8803612379578885517fffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000008960301b166020820152601a8152611bc5603a82613c9e565b601b88036123be578885517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000008960281b166020820152601b8152611bc5603b82613c9e565b601c8803612403578885517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008960201b166020820152601c8152611bc5603c82613c9e565b601d8803612448578885517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008960181b166020820152601d8152611bc5603d82613c9e565b601e880361248d578885517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00008960101b166020820152601e8152611bc5603e82613c9e565b601f88036124d2578885517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008960081b166020820152601f8152611bc5603f82613c9e565b88855188602082015260208152611bc58782613c9e565b8360031b84810460081485151715612539576001901b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811161253957611c2296978392611bcb92611b7b565b6024877f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b50346101f857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f857601d546125a181613d8f565b916125af6040519384613c9e565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b8383106125f15760405180610be48782613bae565b6002602060019260405161260481613c53565b73ffffffffffffffffffffffffffffffffffffffff8654168152612629858701613f64565b838201528152019201920191906125dc565b50346101f857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f857601a5461267681613d8f565b916126846040519384613c9e565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b8383106126ce5760405160208082528190610be490820188613ae1565b6001602081926126dd85613da7565b8152019201920191906126b1565b50346101f85760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e85761273b9036906004016139f8565b906024357fffffffff00000000000000000000000000000000000000000000000000000000811680910361289e5760443567ffffffffffffffff81116103e457836127ad6127fe9461279360409436906004016139f8565b9184865191886020840152600483526102cf602484613c9e565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c169083518096819482937f5663060f00000000000000000000000000000000000000000000000000000000845260048401613d73565b03915afa9081156103d55784928592612854575b507fffffffff0000000000000000000000000000000000000000000000000000000061283f929316614414565b60048201809211610366579061036391614392565b7fffffffff00000000000000000000000000000000000000000000000000000000935061283f92506128949060403d604011610ed857610ed08183613c9e565b9390939250612812565b8380fd5b50346101f85760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e8576128f29036906004016139f8565b9060243560443567ffffffffffffffff81116103e45783612920612971946105f660409436906004016139f8565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c169083518096819482937faf500fb700000000000000000000000000000000000000000000000000000000845260048401613d73565b03915afa9182156103d55784908593612990575b509061067f91614414565b61067f9293506129af915060403d60401161054d576105408183613c9e565b9291612985565b50346101f857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f857601b546129f181613d8f565b6129fe6040519182613c9e565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b838310612ad657868587604051928392602084019060208552518091526040840160408260051b8601019392905b828210612a6b57505050500390f35b91936020612ac6827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0600195979984950301865288519083612ab68351604084526040840190613a9e565b9201519084818403910152613b58565b9601920192018594939192612a5c565b60026020600192604051612ae981613c53565b612af286613da7565b8152612aff858701613f64565b83820152815201920192019190612a2e565b50346101f85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e857612b619036906004016139f8565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561057457826040517f4c63e5620000000000000000000000000000000000000000000000000000000081526014831060048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561055457612c34575b50506119c39160409173ffffffffffffffffffffffffffffffffffffffff601f5460081c169083518095819482937ff0e9da230000000000000000000000000000000000000000000000000000000084528760048501526044840191613f03565b81612c3e91613c9e565b610574578238612bd3565b50346101f85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e857612c999036906004016139f8565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561057457826040517f4c63e5620000000000000000000000000000000000000000000000000000000081526002831060048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561055457612d9c575b5050612d6c9160409173ffffffffffffffffffffffffffffffffffffffff601f5460081c169083518095819482937fa23ccef60000000000000000000000000000000000000000000000000000000084528760048501526044840191613f03565b87602483015203915afa801561055457612d84575080f35b6105489060403d604011610b5457610b428183613c9e565b81612da691613c9e565b610574578238612d0b565b50346101f85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e857612e019036906004016139f8565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561057457826040517f4c63e5620000000000000000000000000000000000000000000000000000000081526040831060048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561055457612f0d575b5050612ed69160809173ffffffffffffffffffffffffffffffffffffffff601f5460081c16906040518095819482937fcab85818000000000000000000000000000000000000000000000000000000008452604060048501526044840191613f03565b87602483015203915afa801561055457612eee575080f35b612f069060803d60801161117e5761115f8183613c9e565b5050505080f35b81612f1791613c9e565b610574578238612e73565b50346101f85760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e857612f729036906004016139f8565b908260243573ffffffffffffffffffffffffffffffffffffffff811692838203610574576044359067ffffffffffffffff821161289e57612fc38680926130149561177860409636906004016139f8565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c169083518095819482937ff0e9da2300000000000000000000000000000000000000000000000000000000845260048401613d73565b03915afa92831561055457829183946130de575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156105745773ffffffffffffffffffffffffffffffffffffffff604051927f515361f600000000000000000000000000000000000000000000000000000000845216600483015260248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610554576130c9575b505060148201809211610366579061036391614392565b816130d391613c9e565b6105745782386130b2565b9093506130fa915060403d604011611899576118878183613c9e565b9238613028565b50346101f857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b81811061317e57610be485610bd881870382613c9e565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201613167565b50346101f857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b81811061322757610be485610bd881870382613c9e565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201613210565b50346101f857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f857601e5461328e81613d8f565b61329b6040519182613c9e565b818152601e83526020810191837f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350845b83831061337a57868587604051928392602084019060208552518091526040840160408260051b8601019392905b82821061330857505050500390f35b9193602061336a827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc060019597998495030186526040838a5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190613ae1565b96019201920185949391926132f9565b60405161338681613c53565b73ffffffffffffffffffffffffffffffffffffffff83541681526001830180546133af81613d8f565b916133bd6040519384613c9e565b8183528a526020808b20908b9084015b8382106133f35750505050600192826020928360029501528152019201920191906132cb565b60016020819261340286613da7565b8152019301910190916133cd565b50346101f857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760405180916020601654928381520191601682527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289915b81811061348d57610be485610bd881870382613c9e565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201613476565b50346101f857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f857602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051908152f35b50346101f85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e8579060406135b96135f1602061356c6136489636906004016139f8565b859291925192818385017f12000000000000000000000000000000000000000000000000000000000000008152600186526135a8602187613c9e565b885197889651809287890190613a7b565b850191848301370101858152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282613c9e565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c16825180809681947f1a821148000000000000000000000000000000000000000000000000000000008352602060048401526024830190613a9e565b03915afa9182156137975781908293613773575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103e85760ff604051917f98296c54000000000000000000000000000000000000000000000000000000008352166004820152601260248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561055457613763575b508091737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561376057604051907f98296c540000000000000000000000000000000000000000000000000000000082526004820152600160248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156105545761374f5750f35b8161375991613c9e565b6101f85780f35b50fd5b8161376d91613c9e565b386136d5565b905061378f91925060403d6040116109ac576109a48183613c9e565b91903861365c565b50604051903d90823e3d90fd5b50346101f857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760405161044f8082019082821067ffffffffffffffff83111761384a579082916145dc8339039082f08015613797577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00601f549260081b16911617601f5580f35b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b9050346103e85760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103e85760043567ffffffffffffffff8111610574576138c89036906004016139f8565b9160243560ff8116918282036103e05760443567ffffffffffffffff81116139f4577fff00000000000000000000000000000000000000000000000000000000000000604093879384613992986139266139419636906004016139f8565b95909460f81b166020840152600183526102cf602184613c9e565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c169083518096819482937ff21a7fe700000000000000000000000000000000000000000000000000000000845260048401613d73565b03915afa9081156103d557849285926139c9575b5060ff6139b4929316614392565b60018201809211610366579061036391614392565b60ff93506139b492506139ea9060403d6040116109ac576109a48183613c9e565b93909392506139a6565b8680fd5b9181601f84011215613a265782359167ffffffffffffffff8311613a265760208381860195010111613a2657565b600080fd5b602060408183019282815284518094520192019060005b818110613a4f5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101613a42565b60005b838110613a8e5750506000910152565b8181015183820152602001613a7e565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093613ada81518092818752878088019101613a7b565b0116010190565b9080602083519182815201916020808360051b8301019401926000915b838310613b0d57505050505090565b9091929394602080613b49837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086600196030187528951613a9e565b97019301930191939290613afe565b906020808351928381520192019060005b818110613b765750505090565b82517fffffffff0000000000000000000000000000000000000000000000000000000016845260209384019390920191600101613b69565b602081016020825282518091526040820191602060408360051b8301019401926000915b838310613be157505050505090565b9091929394602080613c44837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190613b58565b97019301930191939290613bd2565b6040810190811067ffffffffffffffff821117613c6f57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117613c6f57604052565b919284602080613d469698979498613d108a6040519b8c99858b013788019183830160008152815194859201613a7b565b01019182370160008152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101845283613c9e565b565b519060ff82168203613a2657565b9190826040910312613a26576020613d6d83613d48565b92015190565b929190613d8a602091604086526040860190613a9e565b930152565b67ffffffffffffffff8111613c6f5760051b60200190565b906040519160008154918260011c92600181168015613ea2575b602085108114613e7557848752869392918115613e355750600114613dee575b50613d4692500383613c9e565b90506000929192526020600020906000915b818310613e19575050906020613d469282010138613de1565b6020919350806001915483858901015201910190918492613e00565b60209350613d469592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b82010138613de1565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f1693613dc1565b9190826040910312613a2657815173ffffffffffffffffffffffffffffffffffffffff81168103613a265760209092015190565b9190826080910312613a26578151916020810151916060613d6d60408401613d48565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b9190826040910312613a2657815161ffff81168103613a265760209092015190565b90604051918281549182825260208201906000526020600020926000905b80600783011061417e57613d46945491818110614148575b818110614112575b8181106140dc575b8181106140a6575b818110614070575b81811061403a575b818110614005575b10613fd8575b500383613c9e565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260200138613fd0565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b168152019301613fca565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b168152019301613fc2565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b168152019301613fba565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b168152019301613fb2565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b168152019301613faa565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b168152019301613fa2565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b168152019301613f9a565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e0820152019401920185929391613f82565b9190826040910312613a26576020825192015190565b9190826040910312613a265781517fffffffff0000000000000000000000000000000000000000000000000000000081168103613a265760209092015190565b9190826040910312613a2657815162ffffff81168103613a265760209092015190565b60085460ff1680156142935790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561435e5760009161432c575b50151590565b90506020813d602011614356575b8161434760209383613c9e565b81010312613a26575138614326565b3d915061433a565b6040513d6000823e3d90fd5b9190826040910312613a2657815167ffffffffffffffff81168103613a265760209092015190565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15613a2657604051917f98296c5400000000000000000000000000000000000000000000000000000000835260048301526024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561435e576144095750565b6000613d4691613c9e565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15613a2657604051917f7c84c69b00000000000000000000000000000000000000000000000000000000835260048301526024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561435e576144095750565b602081119060008083156145ca57926003831115806145d1575b6145ca577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc831015806145bf575b6145ac57156145a657507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019081116145795760219006908115614572578061454557507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111611c605790565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526011600452fd5b5050602090565b6024827f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b92915050565b5050196020039060208211614545575090565b5082196021116144d3565b5050905090565b50826021116144a556fe60808060405234601557610434908161001b8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c9081631a8211481461031d575080635663060f146102d457806384cfc10f14610238578063a23ccef61461020e578063a98917a7146101e4578063aa277f28146101ba578063af500fb7146100f9578063bcf18296146100cf578063cab8581814610120578063e02da327146100f9578063f0e9da23146100cf5763f21a7fe7146100a357600080fd5b346100ca5760016100b3366103ad565b604080519382013560f81c84529301602083015250f35b600080fd5b346100ca57604060146100e1366103ad565b905083929192519281013560601c8352016020820152f35b346100ca576040602061010b366103ad565b90508392919251928101358352016020820152f35b346100ca5761012e366103ad565b8092915001602081013591601b8360ff1c019060ff821161018b5760ff6040927f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6080968551963587521660208601521682840152016060820152f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b346100ca57604060036101cc366103ad565b905083929192519281013560e81c8352016020820152f35b346100ca57604060086101f6366103ad565b905083929192519281013560c01c8352016020820152f35b346100ca5760406002610220366103ad565b905083929192519281013560f01c8352016020820152f35b346100ca5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ca5760043567ffffffffffffffff81116100ca57610289604091369060040161037f565b50602435604435908160031b928451937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019183013590610100031c168352016020820152f35b346100ca57604060046102e6366103ad565b90507fffffffff00000000000000000000000000000000000000000000000000000000849392935193820135168352016020820152f35b346100ca5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ca5760043567ffffffffffffffff81116100ca5761036c90369060040161037f565b503560f81c815260016020820152604090f35b9181601f840112156100ca5782359167ffffffffffffffff83116100ca57602083818601950101116100ca57565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126100ca576004359067ffffffffffffffff82116100ca576103f69160040161037f565b90916024359056fea26469706673582212202a45ff3a27978ba40df4be6762ee5cf494b0bec01f3d543515d1c9f2252ac50464736f6c634300081c0033a2646970667358221220a7b241246ec56e63185a94541e0691d7b985ed15e6c4a0efa63bcf30962d9e7564736f6c634300081c0033","sourceMap":"2286:9745:96:-:0;;;;;;;3166:4:5;2286:9745:96;;3166:4:5;2286:9745:96;;;3166:4:5;2286:9745:96;3166:4:5;2286:9745:96;;1087:4:16;2286:9745:96;;;1087:4:16;2286:9745:96;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608080604052600436101561001357600080fd5b600090813560e01c90816305d0c40514613877575080630a9254e4146137a45780631779e1411461350e5780631b556de6146134b95780631ed7831c146134105780632ade3880146132535780633e5e3c23146131aa5780633f7286f41461310157806342f9937214612f225780634444928414612db15780634526428714612c4957806356e3186114612b1157806366d9a9a0146129b65780637cb0471a146128a25780637e1cd479146126eb57806385226c811461263b578063916a17c61461256657806393d7f84514611a0857806399b7355e146118a0578063a8f575d9146116d7578063b0464fdc14611602578063b3d13c06146114ca578063b441bf7614611362578063b4e0b38a1461128b578063b5508aa9146111db578063ba414fa614611198578063c3d42ee914610ef4578063d683a9a314610d7c578063dec4398d14610c14578063e20c9f7114610b5b578063ebe75025146109c8578063ee8b7b6514610850578063f12a8e31146106ba578063f7d8818c14610578578063f94859c9146103ec578063f9e866f3146101fb5763fa7626d4146101b857600080fd5b346101f857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f857602060ff601f54166040519015158152f35b80fd5b50346101f85760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e85761024b9036906004016139f8565b906024359067ffffffffffffffff8216908183036103e4576044359067ffffffffffffffff82116103e0576102d48580926103259661029060409636906004016139f8565b9390927fffffffffffffffff00000000000000000000000000000000000000000000000088519360c01b166020840152600883526102cf602884613c9e565b613cdf565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c169083518096819482937fa98917a700000000000000000000000000000000000000000000000000000000845260048401613d73565b03915afa9081156103d55784928592610393575b5067ffffffffffffffff61034e929316614392565b60088201809211610366579061036391614392565b80f35b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b67ffffffffffffffff935061034e92506103c49060403d6040116103ce575b6103bc8183613c9e565b81019061436a565b9390939250610339565b503d6103b2565b6040513d86823e3d90fd5b8580fd5b8480fd5b5080fd5b50346101f85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e85761043c9036906004016139f8565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561057457826040517f4c63e5620000000000000000000000000000000000000000000000000000000081526020831060048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156105545761055f575b505061050f9160409173ffffffffffffffffffffffffffffffffffffffff601f5460081c169083518095819482937faf500fb70000000000000000000000000000000000000000000000000000000084528760048501526044840191613f03565b87602483015203915afa801561055457610527575080f35b6105489060403d60401161054d575b6105408183613c9e565b81019061420b565b505080f35b503d610536565b6040513d84823e3d90fd5b8161056991613c9e565b6105745782386104ae565b8280fd5b50346101f85760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e8576105c89036906004016139f8565b9060243560443567ffffffffffffffff81116103e4578361060f610660946105f660409436906004016139f8565b9184865191886020840152602083526102cf8884613c9e565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c169083518096819482937fe02da32700000000000000000000000000000000000000000000000000000000845260048401613d73565b03915afa9182156103d55784908593610694575b509061067f91614392565b60208201809211610366579061036391614392565b61067f9293506106b3915060403d60401161054d576105408183613c9e565b9291610674565b50346101f85760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e85761070a9036906004016139f8565b906024359062ffffff8216908183036103e4576044359067ffffffffffffffff82116103e0576107898580926107da9661074a60409636906004016139f8565b9390927fffffff000000000000000000000000000000000000000000000000000000000088519360e81b166020840152600383526102cf602384613c9e565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c169083518096819482937faa277f2800000000000000000000000000000000000000000000000000000000845260048401613d73565b03915afa9081156103d55784928592610813575b5062ffffff6107fe929316614392565b60038201809211610366579061036391614392565b62ffffff93506107fe925061083f9060403d604011610849575b6108378183613c9e565b810190614261565b93909392506107ee565b503d61082d565b50346101f85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e8576108a09036906004016139f8565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561057457826040517f4c63e56200000000000000000000000000000000000000000000000000000000815283151560048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610554576109b3575b505061097360409173ffffffffffffffffffffffffffffffffffffffff601f5460081c169083518095819482937ff21a7fe7000000000000000000000000000000000000000000000000000000008452876004850152826044850191613f03565b90602483015203915afa80156105545761098b575080f35b6105489060403d6040116109ac575b6109a48183613c9e565b810190613d56565b503d61099a565b816109bd91613c9e565b610574578238610912565b50346101f85760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e857610a189036906004016139f8565b906024359061ffff8216908183036103e4576044359067ffffffffffffffff82116103e057610a96858092610ae796610a5760409636906004016139f8565b9390927fffff00000000000000000000000000000000000000000000000000000000000088519360f01b166020840152600283526102cf602284613c9e565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c169083518096819482937fa23ccef600000000000000000000000000000000000000000000000000000000845260048401613d73565b03915afa9081156103d55784928592610b1f575b5061ffff610b0a929316614392565b60028201809211610366579061036391614392565b61ffff9350610b0a9250610b4a9060403d604011610b54575b610b428183613c9e565b810190613f42565b9390939250610afb565b503d610b38565b50346101f857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b818110610be857610be485610bd881870382613c9e565b60405191829182613a2b565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610bc1565b50346101f85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e857610c649036906004016139f8565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561057457826040517f4c63e5620000000000000000000000000000000000000000000000000000000081526008831060048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561055457610d67575b5050610d379160409173ffffffffffffffffffffffffffffffffffffffff601f5460081c169083518095819482937fa98917a70000000000000000000000000000000000000000000000000000000084528760048501526044840191613f03565b87602483015203915afa801561055457610d4f575080f35b6105489060403d6040116103ce576103bc8183613c9e565b81610d7191613c9e565b610574578238610cd6565b50346101f85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e857610dcc9036906004016139f8565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561057457826040517f4c63e5620000000000000000000000000000000000000000000000000000000081526004831060048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561055457610edf575b5050610e9f9160409173ffffffffffffffffffffffffffffffffffffffff601f5460081c169083518095819482937f5663060f0000000000000000000000000000000000000000000000000000000084528760048501526044840191613f03565b87602483015203915afa801561055457610eb7575080f35b6105489060403d604011610ed8575b610ed08183613c9e565b810190614221565b503d610ec6565b81610ee991613c9e565b610574578238610e3e565b50346101f85760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e857610f449036906004016139f8565b90602435604435916064359167ffffffffffffffff83116103e057610f6e859336906004016139f8565b9092907f800000000000000000000000000000000000000000000000000000000000000086161561119057601c935b81604051602081019086825260208152610fb8604082613c9e565b8b6040519160208301938c855260208452610fd4604085613c9e565b6040519b8c9960208b01378d89019160208301938452518093610ff692613a7b565b0160200191829151809361100992613a7b565b0191823701878152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810184526110419084613c9e565b601f5460081c73ffffffffffffffffffffffffffffffffffffffff166040518080957fcab8581800000000000000000000000000000000000000000000000000000000825288600483019161109592613d73565b03815a93608094fa93841561118557869187928895899761110e575b5060ff937f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85946110ea6110f99998956110f195614414565b1690614414565b169116614392565b60408201809211610366579061036391614392565b6110ea97506110f9965060ff94506110f19150917f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6111678695979460803d60801161117e575b61115f8183613c9e565b810190613ee0565b9b5099509497949694955091939192506110b19050565b503d611155565b6040513d88823e3d90fd5b601b93610f9d565b50346101f857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760206111d1614284565b6040519015158152f35b50346101f857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760195461121681613d8f565b916112246040519384613c9e565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b83831061126e5760405160208082528190610be490820188613ae1565b60016020819261127d85613da7565b815201920192019190611251565b50346101f857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f857611350604060208151906112ce8183613c9e565b8482527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101368284013773ffffffffffffffffffffffffffffffffffffffff601f5460081c169083518095819482937f1a82114800000000000000000000000000000000000000000000000000000000845260048401526024830190613a9e565b03915afa80156105545761098b575080f35b50346101f85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e8576113b29036906004016139f8565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561057457826040517f4c63e5620000000000000000000000000000000000000000000000000000000081526003831060048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610554576114b5575b50506114859160409173ffffffffffffffffffffffffffffffffffffffff601f5460081c169083518095819482937faa277f280000000000000000000000000000000000000000000000000000000084528760048501526044840191613f03565b87602483015203915afa80156105545761149d575080f35b6105489060403d604011610849576108378183613c9e565b816114bf91613c9e565b610574578238611424565b50346101f85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e85761151a9036906004016139f8565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561057457826040517f4c63e5620000000000000000000000000000000000000000000000000000000081526020831060048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610554576115ed575b505061050f9160409173ffffffffffffffffffffffffffffffffffffffff601f5460081c169083518095819482937fe02da3270000000000000000000000000000000000000000000000000000000084528760048501526044840191613f03565b816115f791613c9e565b61057457823861158c565b50346101f857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f857601c5461163d81613d8f565b9161164b6040519384613c9e565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b83831061168d5760405180610be48782613bae565b600260206001926040516116a081613c53565b73ffffffffffffffffffffffffffffffffffffffff86541681526116c5858701613f64565b83820152815201920192019190611678565b50346101f85760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e8576117279036906004016139f8565b906024359073ffffffffffffffffffffffffffffffffffffffff8216908183036103e4576044359067ffffffffffffffff82116103e0576117b78580926118089661177860409636906004016139f8565b9390927fffffffffffffffffffffffffffffffffffffffff00000000000000000000000088519360601b166020840152601483526102cf603484613c9e565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c169083518096819482937fbcf1829600000000000000000000000000000000000000000000000000000000845260048401613d73565b03915afa9081156103d55784928592611852575b5073ffffffffffffffffffffffffffffffffffffffff61183d929316614392565b60148201809211610366579061036391614392565b73ffffffffffffffffffffffffffffffffffffffff935061183d925061188f9060403d604011611899575b6118878183613c9e565b810190613eac565b939093925061181c565b503d61187d565b50346101f85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e8576118f09036906004016139f8565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561057457826040517f4c63e5620000000000000000000000000000000000000000000000000000000081526014831060048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610554576119f3575b50506119c39160409173ffffffffffffffffffffffffffffffffffffffff601f5460081c169083518095819482937fbcf182960000000000000000000000000000000000000000000000000000000084528760048501526044840191613f03565b87602483015203915afa8015610554576119db575080f35b6105489060403d604011611899576118878183613c9e565b816119fd91613c9e565b610574578238611962565b50346101f85760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e857611a589036906004016139f8565b60649291923567ffffffffffffffff811161057457611a7b9036906004016139f8565b93611a8760443561448b565b9160409085808351611a998582613c9e565b600c81527f426f756e6420726573756c74000000000000000000000000000000000000000060208201528451611b3681611b0460208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528960248401526064830190613a9e565b8a6044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282613c9e565b51906a636f6e736f6c652e6c6f675afa50602084036124e957611bcb611c22969783927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b602435169560018803611cbd578885517fff000000000000000000000000000000000000000000000000000000000000008960f81b16602082015260018152611bc5602182613c9e565b91613cdf565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c16825180809981947f84cfc10f000000000000000000000000000000000000000000000000000000008352606060048401526064830190613a9e565b89602483015288604483015203915afa948515611cb35786918796611c8f575b505090611c4e91614392565b8101809111611c605761036391614392565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b611c4e939650611cab9250803d1061054d576105408183613c9e565b949138611c42565b81513d88823e3d90fd5b60028803611d02578885517fffff0000000000000000000000000000000000000000000000000000000000008960f01b16602082015260028152611bc5602282613c9e565b60038803611d47578885517fffffff00000000000000000000000000000000000000000000000000000000008960e81b16602082015260038152611bc5602382613c9e565b60048803611d8c578885517fffffffff000000000000000000000000000000000000000000000000000000008960e01b16602082015260048152611bc5602482613c9e565b60058803611dd1578885517fffffffffff0000000000000000000000000000000000000000000000000000008960d81b16602082015260058152611bc5602582613c9e565b60068803611e16578885517fffffffffffff00000000000000000000000000000000000000000000000000008960d01b16602082015260068152611bc5602682613c9e565b60078803611e5b578885517fffffffffffffff000000000000000000000000000000000000000000000000008960c81b16602082015260078152611bc5602782613c9e565b60088803611ea0578885517fffffffffffffffff0000000000000000000000000000000000000000000000008960c01b16602082015260088152611bc5602882613c9e565b60098803611ee5578885517fffffffffffffffffff00000000000000000000000000000000000000000000008960b81b16602082015260098152611bc5602982613c9e565b600a8803611f2a578885517fffffffffffffffffffff000000000000000000000000000000000000000000008960b01b166020820152600a8152611bc5602a82613c9e565b600b8803611f6f578885517fffffffffffffffffffffff0000000000000000000000000000000000000000008960a81b166020820152600b8152611bc5602b82613c9e565b600c8803611fb4578885517fffffffffffffffffffffffff00000000000000000000000000000000000000008960a01b166020820152600c8152611bc5602c82613c9e565b600d8803611ff9578885517fffffffffffffffffffffffffff000000000000000000000000000000000000008960981b166020820152600d8152611bc5602d82613c9e565b600e880361203e578885517fffffffffffffffffffffffffffff0000000000000000000000000000000000008960901b166020820152600e8152611bc5602e82613c9e565b600f8803612083578885517fffffffffffffffffffffffffffffff00000000000000000000000000000000008960881b166020820152600f8152611bc5602f82613c9e565b601088036120c8578885517fffffffffffffffffffffffffffffffff000000000000000000000000000000008960801b16602082015260108152611bc5603082613c9e565b6011880361210d578885517fffffffffffffffffffffffffffffffffff0000000000000000000000000000008960781b16602082015260118152611bc5603182613c9e565b60128803612152578885517fffffffffffffffffffffffffffffffffffff00000000000000000000000000008960701b16602082015260128152611bc5603282613c9e565b60138803612197578885517fffffffffffffffffffffffffffffffffffffff000000000000000000000000008960681b16602082015260138152611bc5603382613c9e565b601488036121dc578885517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008960601b16602082015260148152611bc5603482613c9e565b60158803612221578885517fffffffffffffffffffffffffffffffffffffffffff00000000000000000000008960581b16602082015260158152611bc5603582613c9e565b60168803612266578885517fffffffffffffffffffffffffffffffffffffffffffff000000000000000000008960501b16602082015260168152611bc5603682613c9e565b601788036122ab578885517fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000008960481b16602082015260178152611bc5603782613c9e565b601888036122ef578885517fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000089881b16602082015260188152611bc5603882613c9e565b60198803612334578885517fffffffffffffffffffffffffffffffffffffffffffffffffff000000000000008960381b16602082015260198152611bc5603982613c9e565b601a8803612379578885517fffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000008960301b166020820152601a8152611bc5603a82613c9e565b601b88036123be578885517fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000008960281b166020820152601b8152611bc5603b82613c9e565b601c8803612403578885517fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008960201b166020820152601c8152611bc5603c82613c9e565b601d8803612448578885517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008960181b166020820152601d8152611bc5603d82613c9e565b601e880361248d578885517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00008960101b166020820152601e8152611bc5603e82613c9e565b601f88036124d2578885517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008960081b166020820152601f8152611bc5603f82613c9e565b88855188602082015260208152611bc58782613c9e565b8360031b84810460081485151715612539576001901b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811161253957611c2296978392611bcb92611b7b565b6024877f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b50346101f857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f857601d546125a181613d8f565b916125af6040519384613c9e565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b8383106125f15760405180610be48782613bae565b6002602060019260405161260481613c53565b73ffffffffffffffffffffffffffffffffffffffff8654168152612629858701613f64565b838201528152019201920191906125dc565b50346101f857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f857601a5461267681613d8f565b916126846040519384613c9e565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b8383106126ce5760405160208082528190610be490820188613ae1565b6001602081926126dd85613da7565b8152019201920191906126b1565b50346101f85760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e85761273b9036906004016139f8565b906024357fffffffff00000000000000000000000000000000000000000000000000000000811680910361289e5760443567ffffffffffffffff81116103e457836127ad6127fe9461279360409436906004016139f8565b9184865191886020840152600483526102cf602484613c9e565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c169083518096819482937f5663060f00000000000000000000000000000000000000000000000000000000845260048401613d73565b03915afa9081156103d55784928592612854575b507fffffffff0000000000000000000000000000000000000000000000000000000061283f929316614414565b60048201809211610366579061036391614392565b7fffffffff00000000000000000000000000000000000000000000000000000000935061283f92506128949060403d604011610ed857610ed08183613c9e565b9390939250612812565b8380fd5b50346101f85760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e8576128f29036906004016139f8565b9060243560443567ffffffffffffffff81116103e45783612920612971946105f660409436906004016139f8565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c169083518096819482937faf500fb700000000000000000000000000000000000000000000000000000000845260048401613d73565b03915afa9182156103d55784908593612990575b509061067f91614414565b61067f9293506129af915060403d60401161054d576105408183613c9e565b9291612985565b50346101f857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f857601b546129f181613d8f565b6129fe6040519182613c9e565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b838310612ad657868587604051928392602084019060208552518091526040840160408260051b8601019392905b828210612a6b57505050500390f35b91936020612ac6827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0600195979984950301865288519083612ab68351604084526040840190613a9e565b9201519084818403910152613b58565b9601920192018594939192612a5c565b60026020600192604051612ae981613c53565b612af286613da7565b8152612aff858701613f64565b83820152815201920192019190612a2e565b50346101f85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e857612b619036906004016139f8565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561057457826040517f4c63e5620000000000000000000000000000000000000000000000000000000081526014831060048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561055457612c34575b50506119c39160409173ffffffffffffffffffffffffffffffffffffffff601f5460081c169083518095819482937ff0e9da230000000000000000000000000000000000000000000000000000000084528760048501526044840191613f03565b81612c3e91613c9e565b610574578238612bd3565b50346101f85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e857612c999036906004016139f8565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561057457826040517f4c63e5620000000000000000000000000000000000000000000000000000000081526002831060048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561055457612d9c575b5050612d6c9160409173ffffffffffffffffffffffffffffffffffffffff601f5460081c169083518095819482937fa23ccef60000000000000000000000000000000000000000000000000000000084528760048501526044840191613f03565b87602483015203915afa801561055457612d84575080f35b6105489060403d604011610b5457610b428183613c9e565b81612da691613c9e565b610574578238612d0b565b50346101f85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e857612e019036906004016139f8565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561057457826040517f4c63e5620000000000000000000000000000000000000000000000000000000081526040831060048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561055457612f0d575b5050612ed69160809173ffffffffffffffffffffffffffffffffffffffff601f5460081c16906040518095819482937fcab85818000000000000000000000000000000000000000000000000000000008452604060048501526044840191613f03565b87602483015203915afa801561055457612eee575080f35b612f069060803d60801161117e5761115f8183613c9e565b5050505080f35b81612f1791613c9e565b610574578238612e73565b50346101f85760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e857612f729036906004016139f8565b908260243573ffffffffffffffffffffffffffffffffffffffff811692838203610574576044359067ffffffffffffffff821161289e57612fc38680926130149561177860409636906004016139f8565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c169083518095819482937ff0e9da2300000000000000000000000000000000000000000000000000000000845260048401613d73565b03915afa92831561055457829183946130de575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156105745773ffffffffffffffffffffffffffffffffffffffff604051927f515361f600000000000000000000000000000000000000000000000000000000845216600483015260248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610554576130c9575b505060148201809211610366579061036391614392565b816130d391613c9e565b6105745782386130b2565b9093506130fa915060403d604011611899576118878183613c9e565b9238613028565b50346101f857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b81811061317e57610be485610bd881870382613c9e565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201613167565b50346101f857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b81811061322757610be485610bd881870382613c9e565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201613210565b50346101f857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f857601e5461328e81613d8f565b61329b6040519182613c9e565b818152601e83526020810191837f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350845b83831061337a57868587604051928392602084019060208552518091526040840160408260051b8601019392905b82821061330857505050500390f35b9193602061336a827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc060019597998495030186526040838a5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190613ae1565b96019201920185949391926132f9565b60405161338681613c53565b73ffffffffffffffffffffffffffffffffffffffff83541681526001830180546133af81613d8f565b916133bd6040519384613c9e565b8183528a526020808b20908b9084015b8382106133f35750505050600192826020928360029501528152019201920191906132cb565b60016020819261340286613da7565b8152019301910190916133cd565b50346101f857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760405180916020601654928381520191601682527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289915b81811061348d57610be485610bd881870382613c9e565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201613476565b50346101f857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f857602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051908152f35b50346101f85760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760043567ffffffffffffffff81116103e8579060406135b96135f1602061356c6136489636906004016139f8565b859291925192818385017f12000000000000000000000000000000000000000000000000000000000000008152600186526135a8602187613c9e565b885197889651809287890190613a7b565b850191848301370101858152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282613c9e565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c16825180809681947f1a821148000000000000000000000000000000000000000000000000000000008352602060048401526024830190613a9e565b03915afa9182156137975781908293613773575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103e85760ff604051917f98296c54000000000000000000000000000000000000000000000000000000008352166004820152601260248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561055457613763575b508091737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561376057604051907f98296c540000000000000000000000000000000000000000000000000000000082526004820152600160248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156105545761374f5750f35b8161375991613c9e565b6101f85780f35b50fd5b8161376d91613c9e565b386136d5565b905061378f91925060403d6040116109ac576109a48183613c9e565b91903861365c565b50604051903d90823e3d90fd5b50346101f857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101f85760405161044f8082019082821067ffffffffffffffff83111761384a579082916145dc8339039082f08015613797577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00601f549260081b16911617601f5580f35b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b9050346103e85760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103e85760043567ffffffffffffffff8111610574576138c89036906004016139f8565b9160243560ff8116918282036103e05760443567ffffffffffffffff81116139f4577fff00000000000000000000000000000000000000000000000000000000000000604093879384613992986139266139419636906004016139f8565b95909460f81b166020840152600183526102cf602184613c9e565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c169083518096819482937ff21a7fe700000000000000000000000000000000000000000000000000000000845260048401613d73565b03915afa9081156103d557849285926139c9575b5060ff6139b4929316614392565b60018201809211610366579061036391614392565b60ff93506139b492506139ea9060403d6040116109ac576109a48183613c9e565b93909392506139a6565b8680fd5b9181601f84011215613a265782359167ffffffffffffffff8311613a265760208381860195010111613a2657565b600080fd5b602060408183019282815284518094520192019060005b818110613a4f5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101613a42565b60005b838110613a8e5750506000910152565b8181015183820152602001613a7e565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093613ada81518092818752878088019101613a7b565b0116010190565b9080602083519182815201916020808360051b8301019401926000915b838310613b0d57505050505090565b9091929394602080613b49837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086600196030187528951613a9e565b97019301930191939290613afe565b906020808351928381520192019060005b818110613b765750505090565b82517fffffffff0000000000000000000000000000000000000000000000000000000016845260209384019390920191600101613b69565b602081016020825282518091526040820191602060408360051b8301019401926000915b838310613be157505050505090565b9091929394602080613c44837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190613b58565b97019301930191939290613bd2565b6040810190811067ffffffffffffffff821117613c6f57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117613c6f57604052565b919284602080613d469698979498613d108a6040519b8c99858b013788019183830160008152815194859201613a7b565b01019182370160008152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101845283613c9e565b565b519060ff82168203613a2657565b9190826040910312613a26576020613d6d83613d48565b92015190565b929190613d8a602091604086526040860190613a9e565b930152565b67ffffffffffffffff8111613c6f5760051b60200190565b906040519160008154918260011c92600181168015613ea2575b602085108114613e7557848752869392918115613e355750600114613dee575b50613d4692500383613c9e565b90506000929192526020600020906000915b818310613e19575050906020613d469282010138613de1565b6020919350806001915483858901015201910190918492613e00565b60209350613d469592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b82010138613de1565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f1693613dc1565b9190826040910312613a2657815173ffffffffffffffffffffffffffffffffffffffff81168103613a265760209092015190565b9190826080910312613a26578151916020810151916060613d6d60408401613d48565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b9190826040910312613a2657815161ffff81168103613a265760209092015190565b90604051918281549182825260208201906000526020600020926000905b80600783011061417e57613d46945491818110614148575b818110614112575b8181106140dc575b8181106140a6575b818110614070575b81811061403a575b818110614005575b10613fd8575b500383613c9e565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260200138613fd0565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b168152019301613fca565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b168152019301613fc2565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b168152019301613fba565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b168152019301613fb2565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b168152019301613faa565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b168152019301613fa2565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b168152019301613f9a565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e0820152019401920185929391613f82565b9190826040910312613a26576020825192015190565b9190826040910312613a265781517fffffffff0000000000000000000000000000000000000000000000000000000081168103613a265760209092015190565b9190826040910312613a2657815162ffffff81168103613a265760209092015190565b60085460ff1680156142935790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561435e5760009161432c575b50151590565b90506020813d602011614356575b8161434760209383613c9e565b81010312613a26575138614326565b3d915061433a565b6040513d6000823e3d90fd5b9190826040910312613a2657815167ffffffffffffffff81168103613a265760209092015190565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15613a2657604051917f98296c5400000000000000000000000000000000000000000000000000000000835260048301526024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561435e576144095750565b6000613d4691613c9e565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15613a2657604051917f7c84c69b00000000000000000000000000000000000000000000000000000000835260048301526024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561435e576144095750565b602081119060008083156145ca57926003831115806145d1575b6145ca577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc831015806145bf575b6145ac57156145a657507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019081116145795760219006908115614572578061454557507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111611c605790565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526011600452fd5b5050602090565b6024827f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b92915050565b5050196020039060208211614545575090565b5082196021116144d3565b5050905090565b50826021116144a556fe60808060405234601557610434908161001b8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c9081631a8211481461031d575080635663060f146102d457806384cfc10f14610238578063a23ccef61461020e578063a98917a7146101e4578063aa277f28146101ba578063af500fb7146100f9578063bcf18296146100cf578063cab8581814610120578063e02da327146100f9578063f0e9da23146100cf5763f21a7fe7146100a357600080fd5b346100ca5760016100b3366103ad565b604080519382013560f81c84529301602083015250f35b600080fd5b346100ca57604060146100e1366103ad565b905083929192519281013560601c8352016020820152f35b346100ca576040602061010b366103ad565b90508392919251928101358352016020820152f35b346100ca5761012e366103ad565b8092915001602081013591601b8360ff1c019060ff821161018b5760ff6040927f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6080968551963587521660208601521682840152016060820152f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b346100ca57604060036101cc366103ad565b905083929192519281013560e81c8352016020820152f35b346100ca57604060086101f6366103ad565b905083929192519281013560c01c8352016020820152f35b346100ca5760406002610220366103ad565b905083929192519281013560f01c8352016020820152f35b346100ca5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ca5760043567ffffffffffffffff81116100ca57610289604091369060040161037f565b50602435604435908160031b928451937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019183013590610100031c168352016020820152f35b346100ca57604060046102e6366103ad565b90507fffffffff00000000000000000000000000000000000000000000000000000000849392935193820135168352016020820152f35b346100ca5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ca5760043567ffffffffffffffff81116100ca5761036c90369060040161037f565b503560f81c815260016020820152604090f35b9181601f840112156100ca5782359167ffffffffffffffff83116100ca57602083818601950101116100ca57565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126100ca576004359067ffffffffffffffff82116100ca576103f69160040161037f565b90916024359056fea26469706673582212202a45ff3a27978ba40df4be6762ee5cf494b0bec01f3d543515d1c9f2252ac50464736f6c634300081c0033a2646970667358221220a7b241246ec56e63185a94541e0691d7b985ed15e6c4a0efa63bcf30962d9e7564736f6c634300081c0033","sourceMap":"2286:9745:96:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1065:26:16;2286:9745:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;7847:53;2286:9745;;;7979:36;2286:9745;;;;;;;;;:::i;:::-;;;;;;;;;;;;7868:23;;2286:9745;;7868:23;;;;;;:::i;:::-;7847:53;:::i;:::-;2286:9745;7979:8;2286:9745;;;;;;;7979:36;;;;;;2286:9745;7979:36;;2286:9745;7979:36;;;:::i;:::-;;;;;;;;;;;2286:9745;;7979:36;;;2286:9745;;;8021:23;2286:9745;;;8021:23;:::i;:::-;2286:9745;;;;;;;;8071:9;;;;:::i;:::-;2286:9745;;;;;;;;;;;;7979:36;2286:9745;7979:36;;8021:23;7979:36;;;;2286:9745;7979:36;2286:9745;7979:36;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;2286:9745;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;336:42:2;11481:27:96;;;;2286:9745;;;;11481:27;;2286:9745;11491:16;;2286:9745;11481:27;;2286:9745;11481:27;;;;336:42:2;11481:27:96;;;;;;;;2286:9745;;;2024:14:2;2286:9745:96;;;;11514:8;2286:9745;;;;;;;11514:29;;;;;;2286:9745;11514:29;;;2286:9745;11514:29;;2024:14:2;;;;;;:::i;:::-;;11481:27:96;2024:14:2;;2286:9745:96;11514:29;;;;;;;;;;2286:9745;;;11514:29;;;2286:9745;11514:29;2286:9745;11514:29;;;;;;;;:::i;:::-;;;;;:::i;:::-;;2286:9745;;;11514:29;;;;;;2286:9745;;;;;;;;;11481:27;;;;;:::i;:::-;2286:9745;;11481:27;;;;2286:9745;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;8982:53;9115:37;2286:9745;;;;;;;;;:::i;:::-;;;;;9003:23;;2286:9745;9003:23;;2286:9745;;9003:23;;;;;;:::i;8982:53::-;2286:9745;9115:8;2286:9745;;;;;;;9115:37;;;;;;2286:9745;9115:37;;2286:9745;9115:37;;;:::i;:::-;;;;;;;;;;;2286:9745;;9115:37;;;2286:9745;9175:5;;;;;:::i;:::-;2286:9745;;;;;;;;9208:10;;;;:::i;9115:37::-;9175:5;9115:37;;;;;;2286:9745;9115:37;2286:9745;9115:37;;;;;;;:::i;:::-;;;;;2286:9745;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;7475:53;2286:9745;;;7607:36;2286:9745;;;;;;;;;:::i;:::-;;;;;;;;;;;;7496:23;;2286:9745;;7496:23;;;;;;:::i;7475:53::-;2286:9745;7607:8;2286:9745;;;;;;;7607:36;;;;;;2286:9745;7607:36;;2286:9745;7607:36;;;:::i;:::-;;;;;;;;;;;2286:9745;;7607:36;;;2286:9745;;;7649:23;2286:9745;;;7649:23;:::i;:::-;2286:9745;;;;;;;;7699:9;;;;:::i;7607:36::-;2286:9745;7607:36;;7649:23;7607:36;;;;2286:9745;7607:36;2286:9745;7607:36;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;2286:9745;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10538:26;336:42:2;10538:26:96;;;;2286:9745;;;;10538:26;;10548:15;;;2286:9745;10538:26;;2286:9745;10538:26;;;;336:42:2;10538:26:96;;;;;;;;2286:9745;;;;;;;10570:8;2286:9745;;;;;;;10570:37;;;;;;2286:9745;10570:37;;;2286:9745;10570:37;;2286:9745;;;;;;;:::i;:::-;;10538:26;2286:9745;;;10570:37;;;;;;;;;;2286:9745;;;10570:37;;;2286:9745;10570:37;2286:9745;10570:37;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;10538:26;;;;;:::i;:::-;2286:9745;;10538:26;;;;2286:9745;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;3613:53;2286:9745;;;3745:36;2286:9745;;;;;;;;;:::i;:::-;;;;;;;;;;;;3634:23;;2286:9745;;3634:23;;;;;;:::i;3613:53::-;2286:9745;3745:8;2286:9745;;;;;;;3745:36;;;;;;2286:9745;3745:36;;2286:9745;3745:36;;;:::i;:::-;;;;;;;;;;;2286:9745;;3745:36;;;2286:9745;;;3787:23;2286:9745;;;3787:23;:::i;:::-;2286:9745;;;;;;;;3837:9;;;;:::i;3745:36::-;2286:9745;3745:36;;3787:23;3745:36;;;;2286:9745;3745:36;2286:9745;3745:36;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;2286:9745;;;;;;;;;;;;;;;;;2723:18:9;2286:9745:96;;;;;;;2723:18:9;2286:9745:96;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;336:42:2;11170:26:96;;;;2286:9745;;;;11170:26;;11194:1;11180:15;;2286:9745;11170:26;;2286:9745;11170:26;;;;336:42:2;11170:26:96;;;;;;;;2286:9745;;;2024:14:2;2286:9745:96;;;;11202:8;2286:9745;11194:1;2286:9745;;;;;11202:28;;;;;;2286:9745;11202:28;;;2286:9745;11202:28;;2024:14:2;;;;;;:::i;:::-;;11170:26:96;2024:14:2;;2286:9745:96;11202:28;;;;;;;;;;2286:9745;;;11202:28;;;2286:9745;11202:28;2286:9745;11202:28;;;;;;;:::i;11170:26::-;;;;;:::i;:::-;2286:9745;;11170:26;;;;2286:9745;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;336:42:2;11325:26:96;;;;2286:9745;;;;11325:26;;2286:9745;11335:15;;2286:9745;11325:26;;2286:9745;11325:26;;;;336:42:2;11325:26:96;;;;;;;;2286:9745;;;2024:14:2;2286:9745:96;;;;11357:8;2286:9745;;;;;;;11357:28;;;;;;2286:9745;11357:28;;;2286:9745;11357:28;;2024:14:2;;;;;;:::i;:::-;;11325:26:96;2024:14:2;;2286:9745:96;11357:28;;;;;;;;;;2286:9745;;;11357:28;;;2286:9745;11357:28;2286:9745;11357:28;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;11325:26;;;;;:::i;:::-;2286:9745;;11325:26;;;;2286:9745;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9880:19;;;9785:8;9770:24;;9769:30;9785:8;;9892:2;9880:19;;2286:9745;;;;9951:19;;2286:9745;;;;;9951:19;;;2286:9745;9951:19;;:::i;:::-;2286:9745;;;9972:38;2286:9745;9972:38;;2286:9745;;;;;9972:38;;;2286:9745;9972:38;;:::i;:::-;2286:9745;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9951:19;2286:9745;;;;;;;;:::i;:::-;10132:8;2286:9745;;;;;;;10132:40;;;2286:9745;10132:40;;;2286:9745;10132:40;;;;;;:::i;:::-;;;;;2286:9745;10132:40;;;;;;;;2286:9745;;;;;;10132:40;;;9880:19;10197:1;2286:9745;10197:1;9840:14;10197:1;;;10231:28;10197:1;;;10223;10197;;:::i;:::-;9825:30;10223:1;;:::i;:::-;2286:9745;;;10231:28;:::i;:::-;2286:9745;;;;;;;;10286:10;;;;:::i;10132:40::-;10197:1;10132:40;;10231:28;10132:40;;2286:9745;10132:40;;10223:1;10132:40;;;9840:14;10132:40;;;;;2286:9745;10132:40;2286:9745;10132:40;;;;;;;;:::i;:::-;;;;;:::i;:::-;;-1:-1:-1;10132:40:96;-1:-1:-1;10132:40:96;;;;;;-1:-1:-1;10132:40:96;;;;-1:-1:-1;10132:40:96;;-1:-1:-1;10132:40:96;;;;;;;2286:9745;;;;;;;;;9880:19;9897:2;9880:19;;;2286:9745;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2575:18:9;2286:9745:96;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;2575:18:9;2286:9745:96;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10410:8;2286:9745;;;;;;;10410:34;;;;;;2286:9745;10410:34;;2286:9745;10410:34;;2286:9745;;;;;;:::i;:::-;10410:34;;;;;;;;;;2286:9745;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;336:42:2;11015:26:96;;;;2286:9745;;;;11015:26;;11039:1;11025:15;;2286:9745;11015:26;;2286:9745;11015:26;;;;336:42:2;11015:26:96;;;;;;;;2286:9745;;;2024:14:2;2286:9745:96;;;;11047:8;2286:9745;;;;;;;11047:28;;;;;;2286:9745;11047:28;;;2286:9745;11047:28;;2024:14:2;;;;;;:::i;:::-;;11015:26:96;2024:14:2;;2286:9745:96;11047:28;;;;;;;;;;2286:9745;;;11047:28;;;2286:9745;11047:28;2286:9745;11047:28;;;;;;;:::i;11015:26::-;;;;;:::i;:::-;2286:9745;;11015:26;;;;2286:9745;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;336:42:2;11639:27:96;;;;2286:9745;;;;11639:27;;2286:9745;11649:16;;2286:9745;11639:27;;2286:9745;11639:27;;;;336:42:2;11639:27:96;;;;;;;;2286:9745;;;2024:14:2;2286:9745:96;;;;11672:8;2286:9745;;;;;;;11672:29;;;;;;2286:9745;11672:29;;;2286:9745;11672:29;;2024:14:2;;;;;;:::i;11639:27:96:-;;;;;:::i;:::-;2286:9745;;11639:27;;;;2286:9745;;;;;;;;;;;;2876:18:9;2286:9745:96;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;2876:18:9;2286:9745:96;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;9359:53;2286:9745;;;9492:37;2286:9745;;;;;;;;;:::i;:::-;;;;;;;;;;;;9380:23;;2286:9745;;9380:23;;;;;;:::i;9359:53::-;2286:9745;9492:8;2286:9745;;;;;;;9492:37;;;;;;2286:9745;9492:37;;2286:9745;9492:37;;;:::i;:::-;;;;;;;;;;;2286:9745;;9492:37;;;2286:9745;;;9535:23;2286:9745;;;9535:23;:::i;:::-;2286:9745;;;;;;;;9585:10;;;;:::i;9492:37::-;2286:9745;9492:37;;9535:23;9492:37;;;;2286:9745;9492:37;2286:9745;9492:37;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;2286:9745;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;336:42:2;11797:27:96;;;;2286:9745;;;;11797:27;;11821:2;11807:16;;2286:9745;11797:27;;2286:9745;11797:27;;;;336:42:2;11797:27:96;;;;;;;;2286:9745;;;2024:14:2;2286:9745:96;;;;11830:8;2286:9745;;;;;;;11830:29;;;;;;2286:9745;11830:29;;;2286:9745;11830:29;;2024:14:2;;;;;;:::i;:::-;;11797:27:96;2024:14:2;;2286:9745:96;11830:29;;;;;;;;;;2286:9745;;;11830:29;;;2286:9745;11830:29;2286:9745;11830:29;;;;;;;:::i;11797:27::-;;;;;:::i;:::-;2286:9745;;11797:27;;;;2286:9745;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;2933:19:15;2286:9745:96;;2933:19:15;:::i;:::-;2286:9745:96;;;;;;;;;;;:::i;:::-;;;;;;;;;;;9786:54:15;;2286:9745:96;;9786:54:15;;;;;;;2286:9745:96;9786:54:15;;2286:9745:96;;;;;;:::i;:::-;;;;;;9786:54:15;2286:9745:96;9786:54:15;;;;;;:::i;:::-;2286:9745:96;9371:159:15;679:42;9371:159;;-1:-1:-1;2286:9745:96;4028:12;;2286:9745;;7094:42;2286:9745;4028:60;;;;4043:17;4028:60;2286:9745;;4116:12;;2286:9745;4170:11;;2286:9745;;;;;;;;;;;4206:36;;2286:9745;;4206:36;;;;;;:::i;:::-;4166:2898;7094:42;:::i;:::-;2286:9745;;;;;;;;7216:43;;;;;2286:9745;7216:43;;2286:9745;;7216:43;;2286:9745;;;;;;:::i;:::-;;;;;;;;;;;7216:43;;;;;;;;;;2286:9745;;7216:43;;;4166:2898;7283:11;;;;;;:::i;:::-;2286:9745;;;;;;;7322:14;;;:::i;2286:9745::-;;;;;;;;;;7216:43;7283:11;7216:43;;;;;;;;-1:-1:-1;7216:43:96;;;;;;:::i;:::-;;;;;;;2286:9745;;;;;;;;;4166:2898;4269:1;4259:11;;4269:1;;2286:9745;;;;;;;;;4295:37;;2286:9745;4269:1;4295:37;;;;;;:::i;4255:2809::-;4359:1;4349:11;;4359:1;;2286:9745;;;;;;;;;4385:37;;2286:9745;4359:1;4385:37;;;;;;:::i;4345:2719::-;2286:9745;4439:11;;2286:9745;;;;;;;;;;;4475:37;;2286:9745;;4475:37;;;2286:9745;4475:37;;:::i;4435:2629::-;4539:1;4529:11;;4539:1;;2286:9745;;;;;;;;;4565:37;;2286:9745;4539:1;4565:37;;;;;;:::i;4525:2539::-;4629:1;4619:11;;4629:1;;2286:9745;;;;;;;;;4655:37;;2286:9745;4629:1;4655:37;;;;;;:::i;4615:2449::-;4719:1;4709:11;;4719:1;;2286:9745;;;;;;;;;4745:37;;2286:9745;4719:1;4745:37;;;;;;:::i;4705:2359::-;4809:1;4799:11;;4809:1;;2286:9745;;;;;;;;;4835:37;;2286:9745;4809:1;4835:37;;;;;;:::i;4795:2269::-;4899:1;4889:11;;4899:1;;2286:9745;;;;;;;;;4925:37;;2286:9745;4899:1;4925:37;;;;;;:::i;4885:2179::-;4989:2;4979:12;;4989:2;;2286:9745;;;;;;;;;5016:37;;2286:9745;4989:2;5016:37;;;;;;:::i;4975:2089::-;5080:2;5070:12;;5080:2;;2286:9745;;;;;;;;;5107:37;;2286:9745;5080:2;5107:37;;;2286:9745;5107:37;;:::i;5066:1998::-;2286:9745;5161:12;;2286:9745;;;;;;;;;;;5198:37;;2286:9745;;5198:37;;;;;;:::i;5157:1907::-;5262:2;5252:12;;5262:2;;2286:9745;;;;;;;;;5289:38;;2286:9745;5262:2;5289:38;;;;;;:::i;5248:1816::-;5354:2;5344:12;;5354:2;;2286:9745;;;;;;;;;5381:38;;2286:9745;5354:2;5381:38;;;;;;:::i;5340:1724::-;5446:2;5436:12;;5446:2;;2286:9745;;;;;;;;;5473:38;;2286:9745;5446:2;5473:38;;;;;;:::i;5432:1632::-;5538:2;5528:12;;5538:2;;2286:9745;;;;;;;;;5565:38;;2286:9745;5538:2;5565:38;;;;;;:::i;5524:1540::-;5630:2;5620:12;;5630:2;;2286:9745;;;;;;;;;5657:38;;2286:9745;5630:2;5657:38;;;;;;:::i;5616:1448::-;5722:2;5712:12;;5722:2;;2286:9745;;;;;;;;;5749:38;;2286:9745;5722:2;5749:38;;;;;;:::i;5708:1356::-;5814:2;5804:12;;5814:2;;2286:9745;;;;;;;;;5841:38;;2286:9745;5814:2;5841:38;;;;;;:::i;5800:1264::-;5906:2;5896:12;;5906:2;;2286:9745;;;;;;;;;5933:38;;2286:9745;5906:2;5933:38;;;;;;:::i;5892:1172::-;5998:2;5988:12;;5998:2;;2286:9745;;;;;;;;;6025:38;;2286:9745;5998:2;6025:38;;;;;;:::i;5984:1080::-;6090:2;6080:12;;6090:2;;2286:9745;;;;;;;;;6117:38;;2286:9745;6090:2;6117:38;;;;;;:::i;6076:988::-;6182:2;6172:12;;6182:2;;2286:9745;;;;;;;;;6209:38;;2286:9745;6182:2;6209:38;;;;;;:::i;6168:896::-;6274:2;6264:12;;6274:2;;2286:9745;;;;;;;;;6301:38;;2286:9745;6274:2;6301:38;;;;;;:::i;6260:804::-;6366:2;6356:12;;6366:2;;2286:9745;;;;;;;;;6393:38;;2286:9745;6366:2;6393:38;;;;;;:::i;6352:712::-;6458:2;6448:12;;6458:2;;2286:9745;;;;;;;;;6485:38;;2286:9745;6458:2;6485:38;;;;;;:::i;6444:620::-;6550:2;6540:12;;6550:2;;2286:9745;;;;;;;;;6577:38;;2286:9745;6550:2;6577:38;;;;;;:::i;6536:528::-;6642:2;6632:12;;6642:2;;2286:9745;;;;;;;;;6669:38;;2286:9745;6642:2;6669:38;;;;;;:::i;6628:436::-;6734:2;6724:12;;6734:2;;2286:9745;;;;;6274:2;2286:9745;;;6761:38;;2286:9745;6734:2;6761:38;;;;;;:::i;6720:344::-;6826:2;6816:12;;6826:2;;2286:9745;;;;;5538:2;2286:9745;;;6853:38;;2286:9745;6826:2;6853:38;;;;;;:::i;6812:252::-;2286:9745;6908:12;;2286:9745;;;;;;;4809:1;2286:9745;;;6945:38;;2286:9745;;6945:38;;;;;;:::i;6904:160::-;2286:9745;;;7019:38;2286:9745;7019:38;;2286:9745;;7019:38;;;;;;:::i;4028:60::-;2286:9745;;;;;;4080:1;2286:9745;;;;;;;;;;;;;;;;;;;4028:60;;;;7094:42;4028:60;;;2286:9745;;;;;;;;;;;;;;;;;;;;;;3653:18:9;2286:9745:96;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;3653:18:9;2286:9745:96;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;3162:18:9;2286:9745:96;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;3162:18:9;2286:9745:96;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;8219:53;8353:38;2286:9745;;;;;;;;;:::i;:::-;;;;;8240:23;;2286:9745;8240:23;;2286:9745;;8240:23;;;2286:9745;8240:23;;:::i;8219:53::-;2286:9745;8353:8;2286:9745;;;;;;;8353:38;;;;;;2286:9745;8353:38;;2286:9745;8353:38;;;:::i;:::-;;;;;;;;;;;2286:9745;;8353:38;;;2286:9745;;;8397:23;2286:9745;;;8397:23;:::i;:::-;2286:9745;;;;;;;;8447:11;;;;:::i;8353:38::-;2286:9745;8353:38;;8397:23;8353:38;;;;2286:9745;8353:38;2286:9745;8353:38;;;;;;;:::i;:::-;;;;;;;;2286:9745;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;8599:53;8734:39;2286:9745;;;;;;;;;:::i;8599:53::-;2286:9745;8734:8;2286:9745;;;;;;;8734:39;;;;;;2286:9745;8734:39;;2286:9745;8734:39;;;:::i;:::-;;;;;;;;;;;2286:9745;;8734:39;;;2286:9745;8796:5;;;;;:::i;8734:39::-;8796:5;8734:39;;;;;;2286:9745;8734:39;2286:9745;8734:39;;;;;;;:::i;:::-;;;;;2286:9745;;;;;;;;;;;;3346:26:9;2286:9745:96;;;;:::i;:::-;;;;;;;:::i;:::-;;;;3346:26:9;2286:9745:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;336:42:2;10703:27:96;;;;2286:9745;;;;10703:27;;10727:2;10713:16;;2286:9745;10703:27;;2286:9745;10703:27;;;;336:42:2;10703:27:96;;;;;;;;2286:9745;;;2024:14:2;2286:9745:96;;;;10736:8;2286:9745;;;;;;;10736:29;;;;;;2286:9745;10736:29;;;2286:9745;10736:29;;2024:14:2;;;;;;:::i;10703:27:96:-;;;;;:::i;:::-;2286:9745;;10703:27;;;;2286:9745;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;336:42:2;10860:26:96;;;;2286:9745;;;;10860:26;;10884:1;10870:15;;2286:9745;10860:26;;2286:9745;10860:26;;;;336:42:2;10860:26:96;;;;;;;;2286:9745;;;2024:14:2;2286:9745:96;;;;10892:8;2286:9745;;;;;;;10892:28;;;;;;2286:9745;10892:28;;;2286:9745;10892:28;;2024:14:2;;;;;;:::i;:::-;;10860:26:96;2024:14:2;;2286:9745:96;10892:28;;;;;;;;;;2286:9745;;;10892:28;;;2286:9745;10892:28;2286:9745;10892:28;;;;;;;:::i;10860:26::-;;;;;:::i;:::-;2286:9745;;10860:26;;;;2286:9745;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;336:42:2;11958:27:96;;;;2286:9745;;;;11958:27;;2286:9745;11968:16;;2286:9745;11958:27;;2286:9745;11958:27;;;;336:42:2;11958:27:96;;;;;;;;2286:9745;;;2024:14:2;2286:9745:96;11991:32;2286:9745;;11991:8;2286:9745;;;;;;;11991:32;;;;;;2286:9745;11991:32;;2286:9745;;11991:32;;2024:14:2;;;;;;:::i;:::-;;11958:27:96;2024:14:2;;2286:9745:96;11991:32;;;;;;;;;;2286:9745;;;11991:32;;;;;;;;;;;;;:::i;:::-;;;;2286:9745;;;11958:27;;;;;:::i;:::-;2286:9745;;11958:27;;;;2286:9745;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;3238:53;2286:9745;;;3371:37;2286:9745;;;;;;;;;:::i;3238:53::-;2286:9745;3371:8;2286:9745;;;;;;;3371:37;;;;;;2286:9745;3371:37;;2286:9745;3371:37;;;:::i;:::-;;;;;;;;;;;2286:9745;;3371:37;;;2286:9745;3533:24:4;2286:9745:96;3533:24:4;;;;2286:9745:96;;;3533:24:4;2286:9745:96;3533:24:4;;2286:9745:96;;3533:24:4;;2286:9745:96;;;;;3533:24:4;;2286:9745:96;3533:24:4;2286:9745:96;3533:24:4;;;;;;;;2286:9745:96;;;;;;;;;;;3464:10;;;;:::i;3533:24:4:-;;;;;:::i;:::-;2286:9745:96;;3533:24:4;;;;3371:37:96;;;;;;;2286:9745;3371:37;2286:9745;3371:37;;;;;;;:::i;:::-;;;;;2286:9745;;;;;;;;;;;;;;;;;3501:18:9;2286:9745:96;;;;;;;3501:18:9;2286:9745:96;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3794:16:9;2286:9745:96;;;;;;;3794:16:9;2286:9745:96;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3948:19:9;2286:9745:96;;;;:::i;:::-;;;;;;;:::i;:::-;;;;3948:19:9;2286:9745:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3018:16:9;2286:9745:96;;;;;;;3018:16:9;2286:9745:96;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2324:27;2286:9745;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;2564:23;;;;;2286:9745;;;2564:23;;;;;;;:::i;:::-;2286:9745;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;2564:23;2286:9745;;;;;;:::i;:::-;;2639:8;2286:9745;;;;;;2639:33;;;;;2286:9745;2639:33;;2286:9745;;2639:33;;2286:9745;;;;;;:::i;:::-;2639:33;;;;;;;;;;2286:9745;;2639:33;;;2286:9745;2349:24:4;2286:9745:96;2349:24:4;;;;2286:9745:96;;;2349:24:4;2286:9745:96;2349:24:4;;2286:9745:96;;2349:24:4;;2286:9745:96;;;;;;2349:24:4;;;;2286:9745:96;2349:24:4;;;;;;;;2286:9745:96;2349:24:4;;;2286:9745:96;2349:24:4;;;;2286:9745:96;;2349:24:4;2286:9745:96;2349:24:4;;2286:9745:96;2349:24:4;;2286:9745:96;2564:23;2286:9745;;;;2349:24:4;;;;2286:9745:96;2349:24:4;;;;;;;;2286:9745:96;;2349:24:4;;;;;:::i;:::-;2286:9745:96;;2349:24:4;2286:9745:96;2349:24:4;2286:9745:96;;2349:24:4;;;;;:::i;:::-;;;;2639:33:96;;;;;;;2286:9745;2639:33;2286:9745;2639:33;;;;;;;:::i;:::-;;;;;;;2286:9745;;;;;;;;;;;;;;;;;;;;;;;;;2397:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;2286:9745;;2386:28;2286:9745;;;;;;;;2386:28;2286:9745;;;2397:17;2286:9745;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;2997:35;2286:9745;;2866:53;2286:9745;;;;;;:::i;:::-;;;;;;;;2887:23;;2286:9745;;2887:23;;;;;;:::i;2866:53::-;2286:9745;2997:8;2286:9745;;;;;;;2997:35;;;;;;2286:9745;2997:35;;2286:9745;2997:35;;;:::i;:::-;;;;;;;;;;;2286:9745;;2997:35;;;2286:9745;;;3038:23;2286:9745;;;3038:23;:::i;:::-;2286:9745;;;;;;;;3088:9;;;;:::i;2997:35::-;2286:9745;2997:35;;3038:23;2997:35;;;;2286:9745;2997:35;2286:9745;2997:35;;;;;;;:::i;:::-;;;;;;;;2286:9745;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2286:9745:96;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2286:9745:96;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2286:9745:96;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;2286:9745:96;;;;;-1:-1:-1;2286:9745:96;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2286:9745:96;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;2286:9745:96;;;;;;;;;;:::i;:::-;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;-1:-1:-1;2286:9745:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;2286:9745:96;;;;;-1:-1:-1;2286:9745:96;;-1:-1:-1;2286:9745:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2024:14:2:-;;;;;;;;;;;;;;;;;;;2286:9745:96;2024:14:2;;;2286:9745:96;:::i;2024:14:2:-;2286:9745:96;2024:14:2;2286:9745:96;2024:14:2;;2286:9745:96;2024:14:2;2286:9745:96;;;;;;;-1:-1:-1;2286:9745:96;;;;;;;;2024:14:2;;;:::o;2286:9745:96:-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;-1:-1:-1;2286:9745:96;;-1:-1:-1;2286:9745:96;;-1:-1:-1;2286:9745:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2024:14:2;;2286:9745:96;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1243:204:4:-;1302:7;2286:9745:96;;;;;;;1325:14:4;:::o;1298:143::-;2286:9745:96;;;;1377:39:4;;2286:9745:96;1377:39:4;;;2286:9745:96;192:59:4;;;;2286:9745:96;192:59:4;1377:39;;;2286:9745:96;1377:39:4;;;;;;;2286:9745:96;1377:39:4;;;1298:143;1377:53;;;1370:60;:::o;1377:39::-;;;192:59;1377:39;;192:59;1377:39;;;;;;192:59;1377:39;;;:::i;:::-;;;192:59;;;;2024:14:2;1377:39:4;;;;;;-1:-1:-1;1377:39:4;;;2286:9745:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2270:110:4:-;;2286:9745:96;2349:24:4;;;;2286:9745:96;;2349:24:4;2286:9745:96;2349:24:4;;;;;2286:9745:96;;;;;-1:-1:-1;2349:24:4;;;2286:9745:96;2349:24:4;;;;;;;;2270:110;:::o;2349:24::-;-1:-1:-1;2349:24:4;;;:::i;3710:110::-;;2286:9745:96;3789:24:4;;;;2286:9745:96;;3789:24:4;2286:9745:96;3789:24:4;;;;;2286:9745:96;;;;;-1:-1:-1;3789:24:4;;;2286:9745:96;3789:24:4;;;;;;;;3710:110;:::o;1546:1263:15:-;2286:9745:96;1982:8:15;;;2286:9745:96;;1982:8:15;;1966:34;;2286:9745:96;2234:1:15;2229:6;;;:18;;;1546:1263;2225:38;;2286:9745:96;2277:20:15;;;:46;;;1546:1263;2273:82;;2455:7;;;2493;2286:9745:96;;;;;;;;;2528:11:15;1042:78;2557:8;;;2553:24;;2286:9745:96;;;;1042:78:15;2286:9745:96;;;;;;;2451:352:15;1546:1263::o;2286:9745:96:-;;;;;;;;;;2553:24:15;2567:10;;2286:9745:96;2567:10:15;:::o;2286:9745:96:-;;;;;;;;;;2451:352:15;;;;;1546:1263::o;2273:82::-;2332:23;;2286:9745:96;;;;;;;;;2325:30:15;;:::o;2277:46::-;2286:9745:96;;;;2301:22:15;2277:46;;2225:38;2256:7;;;;2249:14;:::o;2229:18::-;2239:8;;2286:9745:96;2239:8:15;2229:18;","linkReferences":{}},"methodIdentifiers":{"IS_TEST()":"fa7626d4","bytesImp()":"1b556de6","excludeArtifacts()":"b5508aa9","excludeContracts()":"e20c9f71","excludeSelectors()":"b0464fdc","excludeSenders()":"1ed7831c","failed()":"ba414fa6","setUp()":"0a9254e4","targetArtifactSelectors()":"66d9a9a0","targetArtifacts()":"85226c81","targetContracts()":"3f7286f4","targetInterfaces()":"2ade3880","targetSelectors()":"916a17c6","targetSenders()":"3e5e3c23","test_readAddress(bytes,address,bytes)":"42f99372","test_readAddress_outOfBounds(bytes)":"56e31861","test_readBytes32(bytes,bytes32,bytes)":"7cb0471a","test_readBytes32_outOfBounds(bytes)":"f94859c9","test_readBytes4(bytes,bytes4,bytes)":"7e1cd479","test_readBytes4_outOfBounds(bytes)":"d683a9a3","test_readFirstUint8(bytes)":"1779e141","test_readFirstUint8_emptyData()":"b4e0b38a","test_readRSVCompact(bytes,bytes32,uint256,bytes)":"c3d42ee9","test_readRSVCompact_outOfBounds(bytes)":"44449284","test_readUint16(bytes,uint16,bytes)":"ebe75025","test_readUint160(bytes,uint160,bytes)":"a8f575d9","test_readUint160_outOfBounds(bytes)":"99b7355e","test_readUint16_outOfBounds(bytes)":"45264287","test_readUint24(bytes,uint24,bytes)":"f12a8e31","test_readUint24_outOfBounds(bytes)":"b441bf76","test_readUint256(bytes,uint256,bytes)":"f7d8818c","test_readUint256_outOfBounds(bytes)":"b3d13c06","test_readUint64(bytes,uint64,bytes)":"f9e866f3","test_readUint64_outOfBounds(bytes)":"dec4398d","test_readUint8(bytes,uint8,bytes)":"05d0c405","test_readUint8_outOfBounds(bytes)":"ee8b7b65","test_readUintX(bytes,uint256,uint256,bytes)":"93d7f845"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"IS_TEST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bytesImp\",\"outputs\":[{\"internalType\":\"contract LibBytesImp\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"excludedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setUp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifactSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"artifact\",\"type\":\"string\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzArtifactSelector[]\",\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"targetedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetInterfaces\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"artifacts\",\"type\":\"string[]\"}],\"internalType\":\"struct StdInvariant.FuzzInterface[]\",\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"prefix\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"value\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"suffix\",\"type\":\"bytes\"}],\"name\":\"test_readAddress\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"test_readAddress_outOfBounds\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"prefix\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"suffix\",\"type\":\"bytes\"}],\"name\":\"test_readBytes32\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"test_readBytes32_outOfBounds\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"prefix\",\"type\":\"bytes\"},{\"internalType\":\"bytes4\",\"name\":\"value\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"suffix\",\"type\":\"bytes\"}],\"name\":\"test_readBytes4\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"test_readBytes4_outOfBounds\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"suffix\",\"type\":\"bytes\"}],\"name\":\"test_readFirstUint8\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"test_readFirstUint8_emptyData\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"prefix\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"sWithParity\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"suffix\",\"type\":\"bytes\"}],\"name\":\"test_readRSVCompact\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"test_readRSVCompact_outOfBounds\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"prefix\",\"type\":\"bytes\"},{\"internalType\":\"uint16\",\"name\":\"value\",\"type\":\"uint16\"},{\"internalType\":\"bytes\",\"name\":\"suffix\",\"type\":\"bytes\"}],\"name\":\"test_readUint16\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"prefix\",\"type\":\"bytes\"},{\"internalType\":\"uint160\",\"name\":\"value\",\"type\":\"uint160\"},{\"internalType\":\"bytes\",\"name\":\"suffix\",\"type\":\"bytes\"}],\"name\":\"test_readUint160\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"test_readUint160_outOfBounds\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"test_readUint16_outOfBounds\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"prefix\",\"type\":\"bytes\"},{\"internalType\":\"uint24\",\"name\":\"value\",\"type\":\"uint24\"},{\"internalType\":\"bytes\",\"name\":\"suffix\",\"type\":\"bytes\"}],\"name\":\"test_readUint24\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"test_readUint24_outOfBounds\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"prefix\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"suffix\",\"type\":\"bytes\"}],\"name\":\"test_readUint256\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"test_readUint256_outOfBounds\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"prefix\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"value\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"suffix\",\"type\":\"bytes\"}],\"name\":\"test_readUint64\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"test_readUint64_outOfBounds\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"prefix\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"value\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"suffix\",\"type\":\"bytes\"}],\"name\":\"test_readUint8\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"test_readUint8_outOfBounds\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"prefix\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"suffix\",\"type\":\"bytes\"}],\"name\":\"test_readUintX\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/utils/LibBytes.t.sol\":\"LibBytesTest\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"test/utils/LibBytes.t.sol\":{\"keccak256\":\"0xcb0d546754d2fd162bfd60f67c5bf2de1460b8bd7007efcecf78f388f0bdbf54\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ab1cb0cc744a2008f4a96b2183d4d0452492a338b13e97f496132f623dc7b520\",\"dweb:/ipfs/Qmf5S5HYZ4pnvjdLjsUvpjiorHt9sdCM7b1TkwEzMCAX92\"]},\"test/utils/TestUtils.sol\":{\"keccak256\":\"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad\",\"dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log","anonymous":false},{"inputs":[{"internalType":"address","name":"","type":"address","indexed":false}],"type":"event","name":"log_address","anonymous":false},{"inputs":[{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"log_bytes","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32","indexed":false}],"type":"event","name":"log_bytes32","anonymous":false},{"inputs":[{"internalType":"int256","name":"","type":"int256","indexed":false}],"type":"event","name":"log_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address","name":"val","type":"address","indexed":false}],"type":"event","name":"log_named_address","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes","name":"val","type":"bytes","indexed":false}],"type":"event","name":"log_named_bytes","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes32","name":"val","type":"bytes32","indexed":false}],"type":"event","name":"log_named_bytes32","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false}],"type":"event","name":"log_named_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"string","name":"val","type":"string","indexed":false}],"type":"event","name":"log_named_string","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false}],"type":"event","name":"log_named_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log_string","anonymous":false},{"inputs":[{"internalType":"uint256","name":"","type":"uint256","indexed":false}],"type":"event","name":"log_uint","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"logs","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"IS_TEST","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"bytesImp","outputs":[{"internalType":"contract LibBytesImp","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeArtifacts","outputs":[{"internalType":"string[]","name":"excludedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeContracts","outputs":[{"internalType":"address[]","name":"excludedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"excludedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSenders","outputs":[{"internalType":"address[]","name":"excludedSenders_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"failed","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"setUp"},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifactSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzArtifactSelector[]","name":"targetedArtifactSelectors_","type":"tuple[]","components":[{"internalType":"string","name":"artifact","type":"string"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifacts","outputs":[{"internalType":"string[]","name":"targetedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetContracts","outputs":[{"internalType":"address[]","name":"targetedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetInterfaces","outputs":[{"internalType":"struct StdInvariant.FuzzInterface[]","name":"targetedInterfaces_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"string[]","name":"artifacts","type":"string[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"targetedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSenders","outputs":[{"internalType":"address[]","name":"targetedSenders_","type":"address[]"}]},{"inputs":[{"internalType":"bytes","name":"prefix","type":"bytes"},{"internalType":"address","name":"value","type":"address"},{"internalType":"bytes","name":"suffix","type":"bytes"}],"stateMutability":"view","type":"function","name":"test_readAddress"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"view","type":"function","name":"test_readAddress_outOfBounds"},{"inputs":[{"internalType":"bytes","name":"prefix","type":"bytes"},{"internalType":"bytes32","name":"value","type":"bytes32"},{"internalType":"bytes","name":"suffix","type":"bytes"}],"stateMutability":"view","type":"function","name":"test_readBytes32"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"view","type":"function","name":"test_readBytes32_outOfBounds"},{"inputs":[{"internalType":"bytes","name":"prefix","type":"bytes"},{"internalType":"bytes4","name":"value","type":"bytes4"},{"internalType":"bytes","name":"suffix","type":"bytes"}],"stateMutability":"view","type":"function","name":"test_readBytes4"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"view","type":"function","name":"test_readBytes4_outOfBounds"},{"inputs":[{"internalType":"bytes","name":"suffix","type":"bytes"}],"stateMutability":"view","type":"function","name":"test_readFirstUint8"},{"inputs":[],"stateMutability":"view","type":"function","name":"test_readFirstUint8_emptyData"},{"inputs":[{"internalType":"bytes","name":"prefix","type":"bytes"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"uint256","name":"sWithParity","type":"uint256"},{"internalType":"bytes","name":"suffix","type":"bytes"}],"stateMutability":"view","type":"function","name":"test_readRSVCompact"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"view","type":"function","name":"test_readRSVCompact_outOfBounds"},{"inputs":[{"internalType":"bytes","name":"prefix","type":"bytes"},{"internalType":"uint16","name":"value","type":"uint16"},{"internalType":"bytes","name":"suffix","type":"bytes"}],"stateMutability":"view","type":"function","name":"test_readUint16"},{"inputs":[{"internalType":"bytes","name":"prefix","type":"bytes"},{"internalType":"uint160","name":"value","type":"uint160"},{"internalType":"bytes","name":"suffix","type":"bytes"}],"stateMutability":"view","type":"function","name":"test_readUint160"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"view","type":"function","name":"test_readUint160_outOfBounds"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"view","type":"function","name":"test_readUint16_outOfBounds"},{"inputs":[{"internalType":"bytes","name":"prefix","type":"bytes"},{"internalType":"uint24","name":"value","type":"uint24"},{"internalType":"bytes","name":"suffix","type":"bytes"}],"stateMutability":"view","type":"function","name":"test_readUint24"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"view","type":"function","name":"test_readUint24_outOfBounds"},{"inputs":[{"internalType":"bytes","name":"prefix","type":"bytes"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"suffix","type":"bytes"}],"stateMutability":"view","type":"function","name":"test_readUint256"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"view","type":"function","name":"test_readUint256_outOfBounds"},{"inputs":[{"internalType":"bytes","name":"prefix","type":"bytes"},{"internalType":"uint64","name":"value","type":"uint64"},{"internalType":"bytes","name":"suffix","type":"bytes"}],"stateMutability":"view","type":"function","name":"test_readUint64"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"view","type":"function","name":"test_readUint64_outOfBounds"},{"inputs":[{"internalType":"bytes","name":"prefix","type":"bytes"},{"internalType":"uint8","name":"value","type":"uint8"},{"internalType":"bytes","name":"suffix","type":"bytes"}],"stateMutability":"view","type":"function","name":"test_readUint8"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"view","type":"function","name":"test_readUint8_outOfBounds"},{"inputs":[{"internalType":"bytes","name":"prefix","type":"bytes"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"length","type":"uint256"},{"internalType":"bytes","name":"suffix","type":"bytes"}],"stateMutability":"view","type":"function","name":"test_readUintX"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/utils/LibBytes.t.sol":"LibBytesTest"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"test/utils/LibBytes.t.sol":{"keccak256":"0xcb0d546754d2fd162bfd60f67c5bf2de1460b8bd7007efcecf78f388f0bdbf54","urls":["bzz-raw://ab1cb0cc744a2008f4a96b2183d4d0452492a338b13e97f496132f623dc7b520","dweb:/ipfs/Qmf5S5HYZ4pnvjdLjsUvpjiorHt9sdCM7b1TkwEzMCAX92"],"license":"Apache-2.0"},"test/utils/TestUtils.sol":{"keccak256":"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79","urls":["bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad","dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa"],"license":"Apache-2.0"}},"version":1},"id":96} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/LibOptim.sol/LibOptim.json b/contracts/artifacts/wallet-contracts-v3/LibOptim.sol/LibOptim.json new file mode 100644 index 00000000..8f070529 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/LibOptim.sol/LibOptim.json @@ -0,0 +1 @@ +{"abi":[],"bytecode":{"object":"0x60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea264697066735822122095ab7517458a7d6495ca65a2c1922a71dc361981c8ffed74f27980c3a050445664736f6c634300081c0033","sourceMap":"162:2030:69:-:0;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x600080fdfea264697066735822122095ab7517458a7d6495ca65a2c1922a71dc361981c8ffed74f27980c3a050445664736f6c634300081c0033","sourceMap":"162:2030:69:-:0;;","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Agustin Aguilar\",\"kind\":\"dev\",\"methods\":{},\"title\":\"LibOptim\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Library for optimized EVM operations\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/utils/LibOptim.sol\":\"LibOptim\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/utils/LibOptim.sol\":{\"keccak256\":\"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81\",\"dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/utils/LibOptim.sol":"LibOptim"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/utils/LibOptim.sol":{"keccak256":"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde","urls":["bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81","dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x"],"license":"Apache-2.0"}},"version":1},"id":69} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/MockPayableReceiver.sol/MockPayableReceiver.json b/contracts/artifacts/wallet-contracts-v3/MockPayableReceiver.sol/MockPayableReceiver.json new file mode 100644 index 00000000..2e877e20 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/MockPayableReceiver.sol/MockPayableReceiver.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"receiveValue","inputs":[],"outputs":[],"stateMutability":"payable"}],"bytecode":{"object":"0x608080604052346013576086908160198239f35b600080fdfe6004361015600c57600080fd5b60003560e01c63f83bac8e14602057600080fd5b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112604b57005b600080fdfea2646970667358221220100fc9bcc754134f93e62c673327a915b7a3a6eaff2cac5e3e3c06438ff2c46b64736f6c634300081c0033","sourceMap":"65:81:87:-:0;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6004361015600c57600080fd5b60003560e01c63f83bac8e14602057600080fd5b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112604b57005b600080fdfea2646970667358221220100fc9bcc754134f93e62c673327a915b7a3a6eaff2cac5e3e3c06438ff2c46b64736f6c634300081c0033","sourceMap":"65:81:87:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"methodIdentifiers":{"receiveValue()":"f83bac8e"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"receiveValue\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/mocks/MockPayableReceiver.sol\":\"MockPayableReceiver\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"test/mocks/MockPayableReceiver.sol\":{\"keccak256\":\"0x8a36cec8723b9150fef169d2fc100008fe6fd1df081672379a20e84185bec9af\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c766b4e08972210153e68f83c12beab110b51091baa72e3bde11f337b0286dea\",\"dweb:/ipfs/QmZvscL63h4tdcRcGmbD6daRkzQTUNH55v4TZe1zSFXZyD\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"payable","type":"function","name":"receiveValue"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/mocks/MockPayableReceiver.sol":"MockPayableReceiver"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"test/mocks/MockPayableReceiver.sol":{"keccak256":"0x8a36cec8723b9150fef169d2fc100008fe6fd1df081672379a20e84185bec9af","urls":["bzz-raw://c766b4e08972210153e68f83c12beab110b51091baa72e3bde11f337b0286dea","dweb:/ipfs/QmZvscL63h4tdcRcGmbD6daRkzQTUNH55v4TZe1zSFXZyD"],"license":"Apache-2.0"}},"version":1},"id":87} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Nonce.sol/Nonce.json b/contracts/artifacts/wallet-contracts-v3/Nonce.sol/Nonce.json new file mode 100644 index 00000000..93df683d --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Nonce.sol/Nonce.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"readNonce","inputs":[{"name":"_space","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"event","name":"NonceChange","inputs":[{"name":"_space","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"_newNonce","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"BadNonce","inputs":[{"name":"_space","type":"uint256","internalType":"uint256"},{"name":"_provided","type":"uint256","internalType":"uint256"},{"name":"_current","type":"uint256","internalType":"uint256"}]}],"bytecode":{"object":"0x60808060405234601557610112908161001b8239f35b600080fdfe60806004361015600e57600080fd5b60003560e01c638c3f556314602257600080fd5b3460d75760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011260d757602081017f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8152600435604083015260408252606082019082821067ffffffffffffffff83111760a85760209282604052519020548152f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fdfea2646970667358221220e35d1c079fdd7edf4b132625fbf73ed4b20514179220e9a5afa3a285613b64c464736f6c634300081c0033","sourceMap":"196:1180:47:-:0;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806004361015600e57600080fd5b60003560e01c638c3f556314602257600080fd5b3460d75760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011260d757602081017f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8152600435604083015260408252606082019082821067ffffffffffffffff83111760a85760209282604052519020548152f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fdfea2646970667358221220e35d1c079fdd7edf4b132625fbf73ed4b20514179220e9a5afa3a285613b64c464736f6c634300081c0033","sourceMap":"196:1180:47:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;753:25:49;;543:66:47;196:1180;;;;;;;;;753:25:49;;;196:1180:47;;;;;;;;;;;;;;;;;;743:36:49;;785:40;196:1180:47;;;;;;;;;;;;;;;;","linkReferences":{}},"methodIdentifiers":{"readNonce(uint256)":"8c3f5563"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_provided\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_current\",\"type\":\"uint256\"}],\"name\":\"BadNonce\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_space\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_newNonce\",\"type\":\"uint256\"}],\"name\":\"NonceChange\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_space\",\"type\":\"uint256\"}],\"name\":\"readNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Agustin Aguilar\",\"kind\":\"dev\",\"methods\":{\"readNonce(uint256)\":{\"params\":{\"_space\":\"The space\"},\"returns\":{\"_0\":\"nonce The nonce\"}}},\"stateVariables\":{\"NONCE_KEY\":{\"details\":\"keccak256(\\\"org.arcadeum.module.calls.nonce\\\")\"}},\"title\":\"Nonce\",\"version\":1},\"userdoc\":{\"errors\":{\"BadNonce(uint256,uint256,uint256)\":[{\"notice\":\"Error thrown when the nonce is bad\"}]},\"events\":{\"NonceChange(uint256,uint256)\":{\"notice\":\"Emitted when the nonce is changed\"}},\"kind\":\"user\",\"methods\":{\"readNonce(uint256)\":{\"notice\":\"Read the nonce\"}},\"notice\":\"Manages the nonce of the wallet\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/modules/Nonce.sol\":\"Nonce\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/modules/Nonce.sol\":{\"keccak256\":\"0x56fbf6dc9b34ab60ae8a32ffb6f583c003bb8f4a5223ce704e982400fa403fab\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://492f53628633b862702cf8f9b726067a722c94028133a8a4c4fcf3d0e73ad803\",\"dweb:/ipfs/QmTHNy4XbH47YZaqKDpknb5aApjRH9HVAREHN7N5vEFWEV\"]},\"src/modules/Storage.sol\":{\"keccak256\":\"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da\",\"dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint256","name":"_space","type":"uint256"},{"internalType":"uint256","name":"_provided","type":"uint256"},{"internalType":"uint256","name":"_current","type":"uint256"}],"type":"error","name":"BadNonce"},{"inputs":[{"internalType":"uint256","name":"_space","type":"uint256","indexed":false},{"internalType":"uint256","name":"_newNonce","type":"uint256","indexed":false}],"type":"event","name":"NonceChange","anonymous":false},{"inputs":[{"internalType":"uint256","name":"_space","type":"uint256"}],"stateMutability":"view","type":"function","name":"readNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]}],"devdoc":{"kind":"dev","methods":{"readNonce(uint256)":{"params":{"_space":"The space"},"returns":{"_0":"nonce The nonce"}}},"version":1},"userdoc":{"kind":"user","methods":{"readNonce(uint256)":{"notice":"Read the nonce"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/modules/Nonce.sol":"Nonce"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/modules/Nonce.sol":{"keccak256":"0x56fbf6dc9b34ab60ae8a32ffb6f583c003bb8f4a5223ce704e982400fa403fab","urls":["bzz-raw://492f53628633b862702cf8f9b726067a722c94028133a8a4c4fcf3d0e73ad803","dweb:/ipfs/QmTHNy4XbH47YZaqKDpknb5aApjRH9HVAREHN7N5vEFWEV"],"license":"Apache-2.0"},"src/modules/Storage.sol":{"keccak256":"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f","urls":["bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da","dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn"],"license":"Apache-2.0"}},"version":1},"id":47} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Nonce.t.sol/NonceImp.json b/contracts/artifacts/wallet-contracts-v3/Nonce.t.sol/NonceImp.json new file mode 100644 index 00000000..b3d565f4 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Nonce.t.sol/NonceImp.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"consumeNonce","inputs":[{"name":"_space","type":"uint256","internalType":"uint256"},{"name":"_nonce","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"readNonce","inputs":[{"name":"_space","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"writeNonce","inputs":[{"name":"_space","type":"uint256","internalType":"uint256"},{"name":"_nonce","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"NonceChange","inputs":[{"name":"_space","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"_newNonce","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"BadNonce","inputs":[{"name":"_space","type":"uint256","internalType":"uint256"},{"name":"_provided","type":"uint256","internalType":"uint256"},{"name":"_current","type":"uint256","internalType":"uint256"}]}],"bytecode":{"object":"0x60808060405234601557610295908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c8063650fb676146101175780638c3f5563146100d35763d91d0e181461003d57600080fd5b346100ce5761004b36610130565b61005482610164565b81810361009a577f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f8816040846001850161008d81836101aa565b82519182526020820152a1005b917f9b6514f40000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b600080fd5b346100ce5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ce57602061010f600435610164565b604051908152f35b346100ce5761012e61012836610130565b906101aa565b005b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60409101126100ce576004359060243590565b60405160208101917f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83526040820152604081526101a36060826101ef565b5190205490565b60405160208101917f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83526040820152604081526101e96060826101ef565b51902055565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761023057604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea264697066735822122021ea5fa39d0762fb0863178c3aa65bb605c33ca431668a14e678ac93a0b1313464736f6c634300081c0033","sourceMap":"275:249:93:-:0;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436101561001257600080fd5b60003560e01c8063650fb676146101175780638c3f5563146100d35763d91d0e181461003d57600080fd5b346100ce5761004b36610130565b61005482610164565b81810361009a577f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f8816040846001850161008d81836101aa565b82519182526020820152a1005b917f9b6514f40000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b600080fd5b346100ce5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ce57602061010f600435610164565b604051908152f35b346100ce5761012e61012836610130565b906101aa565b005b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60409101126100ce576004359060243590565b60405160208101917f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83526040820152604081526101a36060826101ef565b5190205490565b60405160208101917f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83526040820152604081526101e96060826101ef565b51902055565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761023057604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea264697066735822122021ea5fa39d0762fb0863178c3aa65bb605c33ca431668a14e678ac93a0b1313464736f6c634300081c0033","sourceMap":"275:249:93:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1104:17:47;;;:::i;:::-;1131:22;;;1127:88;;1319:29;275:249:93;;1267:1:47;275:249:93;;1297:8:47;;;;:::i;:::-;275:249:93;;;;;;;;;1319:29:47;275:249:93;1127:88:47;1170:38;;275:249:93;1170:38:47;275:249:93;;;;;;;;1170:38:47;275:249:93;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;398:6;275:249;;;:::i;:::-;398:6;;:::i;:::-;275:249;;;;;;;;;;;;;;;:::o;704:158:47:-;275:249:93;;753:25:49;;;275:249:93;543:66:47;275:249:93;;;;;;;753:25:49;;;;;;:::i;:::-;275:249:93;743:36:49;;785:40;704:158:47;:::o;866:141::-;275:249:93;;552:25:49;;;275:249:93;543:66:47;275:249:93;;;;;;;552:25:49;;;;;;:::i;:::-;275:249:93;542:36:49;;584:40;866:141:47:o;275:249:93:-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;275:249:93;;;;;-1:-1:-1;275:249:93","linkReferences":{}},"methodIdentifiers":{"consumeNonce(uint256,uint256)":"d91d0e18","readNonce(uint256)":"8c3f5563","writeNonce(uint256,uint256)":"650fb676"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_provided\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_current\",\"type\":\"uint256\"}],\"name\":\"BadNonce\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_space\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_newNonce\",\"type\":\"uint256\"}],\"name\":\"NonceChange\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"}],\"name\":\"consumeNonce\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_space\",\"type\":\"uint256\"}],\"name\":\"readNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"}],\"name\":\"writeNonce\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"readNonce(uint256)\":{\"params\":{\"_space\":\"The space\"},\"returns\":{\"_0\":\"nonce The nonce\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"BadNonce(uint256,uint256,uint256)\":[{\"notice\":\"Error thrown when the nonce is bad\"}]},\"events\":{\"NonceChange(uint256,uint256)\":{\"notice\":\"Emitted when the nonce is changed\"}},\"kind\":\"user\",\"methods\":{\"readNonce(uint256)\":{\"notice\":\"Read the nonce\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/modules/Nonce.t.sol\":\"NonceImp\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/modules/Nonce.sol\":{\"keccak256\":\"0x56fbf6dc9b34ab60ae8a32ffb6f583c003bb8f4a5223ce704e982400fa403fab\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://492f53628633b862702cf8f9b726067a722c94028133a8a4c4fcf3d0e73ad803\",\"dweb:/ipfs/QmTHNy4XbH47YZaqKDpknb5aApjRH9HVAREHN7N5vEFWEV\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/Storage.sol\":{\"keccak256\":\"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da\",\"dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn\"]},\"src/modules/auth/SelfAuth.sol\":{\"keccak256\":\"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42\",\"dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"test/modules/Nonce.t.sol\":{\"keccak256\":\"0xec53b4e51abf9e0a9925d9643aed757379e635af342af423d8ffaedbeadcde88\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://126ce75d78f18c12374529923b57026834ca6efcfe5e84962ed4dd4eb7d3ff13\",\"dweb:/ipfs/QmRU9PpnPfzs62kxToHoGwher4zFYnVviqscT287RJRbSR\"]},\"test/utils/TestUtils.sol\":{\"keccak256\":\"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad\",\"dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint256","name":"_space","type":"uint256"},{"internalType":"uint256","name":"_provided","type":"uint256"},{"internalType":"uint256","name":"_current","type":"uint256"}],"type":"error","name":"BadNonce"},{"inputs":[{"internalType":"uint256","name":"_space","type":"uint256","indexed":false},{"internalType":"uint256","name":"_newNonce","type":"uint256","indexed":false}],"type":"event","name":"NonceChange","anonymous":false},{"inputs":[{"internalType":"uint256","name":"_space","type":"uint256"},{"internalType":"uint256","name":"_nonce","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"consumeNonce"},{"inputs":[{"internalType":"uint256","name":"_space","type":"uint256"}],"stateMutability":"view","type":"function","name":"readNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"_space","type":"uint256"},{"internalType":"uint256","name":"_nonce","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"writeNonce"}],"devdoc":{"kind":"dev","methods":{"readNonce(uint256)":{"params":{"_space":"The space"},"returns":{"_0":"nonce The nonce"}}},"version":1},"userdoc":{"kind":"user","methods":{"readNonce(uint256)":{"notice":"Read the nonce"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/modules/Nonce.t.sol":"NonceImp"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/modules/Nonce.sol":{"keccak256":"0x56fbf6dc9b34ab60ae8a32ffb6f583c003bb8f4a5223ce704e982400fa403fab","urls":["bzz-raw://492f53628633b862702cf8f9b726067a722c94028133a8a4c4fcf3d0e73ad803","dweb:/ipfs/QmTHNy4XbH47YZaqKDpknb5aApjRH9HVAREHN7N5vEFWEV"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/Storage.sol":{"keccak256":"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f","urls":["bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da","dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn"],"license":"Apache-2.0"},"src/modules/auth/SelfAuth.sol":{"keccak256":"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c","urls":["bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42","dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"test/modules/Nonce.t.sol":{"keccak256":"0xec53b4e51abf9e0a9925d9643aed757379e635af342af423d8ffaedbeadcde88","urls":["bzz-raw://126ce75d78f18c12374529923b57026834ca6efcfe5e84962ed4dd4eb7d3ff13","dweb:/ipfs/QmRU9PpnPfzs62kxToHoGwher4zFYnVviqscT287RJRbSR"],"license":"Apache-2.0"},"test/utils/TestUtils.sol":{"keccak256":"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79","urls":["bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad","dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa"],"license":"Apache-2.0"}},"version":1},"id":93} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Nonce.t.sol/NonceTest.json b/contracts/artifacts/wallet-contracts-v3/Nonce.t.sol/NonceTest.json new file mode 100644 index 00000000..0e155080 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Nonce.t.sol/NonceTest.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"excludeArtifacts","inputs":[],"outputs":[{"name":"excludedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"excludeContracts","inputs":[],"outputs":[{"name":"excludedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"excludeSelectors","inputs":[],"outputs":[{"name":"excludedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"excludeSenders","inputs":[],"outputs":[{"name":"excludedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"nonceImp","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract NonceImp"}],"stateMutability":"view"},{"type":"function","name":"setUp","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"targetArtifactSelectors","inputs":[],"outputs":[{"name":"targetedArtifactSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzArtifactSelector[]","components":[{"name":"artifact","type":"string","internalType":"string"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetArtifacts","inputs":[],"outputs":[{"name":"targetedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"targetContracts","inputs":[],"outputs":[{"name":"targetedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"targetInterfaces","inputs":[],"outputs":[{"name":"targetedInterfaces_","type":"tuple[]","internalType":"struct StdInvariant.FuzzInterface[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"artifacts","type":"string[]","internalType":"string[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSelectors","inputs":[],"outputs":[{"name":"targetedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSenders","inputs":[],"outputs":[{"name":"targetedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"test_consumeNonce","inputs":[{"name":"_space","type":"uint256","internalType":"uint256"},{"name":"_nonce","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_consumeNonce_revertWhenBadNonce","inputs":[{"name":"_space","type":"uint256","internalType":"uint256"},{"name":"_nonce","type":"uint256","internalType":"uint256"},{"name":"_badNonce","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_readNonce","inputs":[{"name":"_space","type":"uint256","internalType":"uint256"},{"name":"_nonce","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false}],"bytecode":{"object":"0x60808060405234602f57600160ff19600c541617600c55600160ff19601f541617601f55611e2090816100358239f35b600080fdfe608080604052600436101561001357600080fd5b600090813560e01c9081630a9254e4146112465750806316836fa51461111a5780631ed7831c146110715780632ade388014610e455780633e5e3c2314610d9c5780633f7286f414610cf357806352458f8f14610a4957806366d9a9a0146108ee5780637e7202261461089957806385226c81146107f1578063916a17c61461071c578063b0464fdc14610647578063b5508aa91461059f578063ba414fa61461055c578063e20c9f71146104a3578063f38336ed1461011f5763fa7626d4146100dc57600080fd5b3461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57602060ff601f54166040519015158152f35b80fd5b503461011c5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c5780604435600435602435737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561042c576040517f4c63e5620000000000000000000000000000000000000000000000000000000081527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe821060048201528481602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561046a57859161048e575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561042c576040517f4c63e5620000000000000000000000000000000000000000000000000000000081528184141560048201528481602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561046a578591610479575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b15610475578480916044604051809481937f650fb6760000000000000000000000000000000000000000000000000000000083528860048401528760248401525af190811561046a578591610455575b5050604051907f9b6514f400000000000000000000000000000000000000000000000000000000602083015282602483015283604483015260648201526064815261031e6084826115cb565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561042c578361037991604051809381927ff28dceb30000000000000000000000000000000000000000000000000000000083526020600484015260248301906113a8565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811561044a578491610431575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c1691823b1561042c57604484928360405195869485937fd91d0e18000000000000000000000000000000000000000000000000000000008552600485015260248401525af18015610421576104105750f35b8161041a916115cb565b61011c5780f35b6040513d84823e3d90fd5b505050fd5b8161043b916115cb565b6104465782386103a1565b5050fd5b6040513d86823e3d90fd5b8161045f916115cb565b61042c5783386102d2565b6040513d87823e3d90fd5b8480fd5b81610483916115cb565b61042c578338610262565b81610498916115cb565b61042c5783386101ec565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c5760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b8181106105305761052c85610520818703826115cb565b60405191829182611358565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610509565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c5760206105956119d2565b6040519015158152f35b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c576019546105da8161160c565b916105e860405193846115cb565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b83831061062a576040518061052c878261145d565b60016020819261063985611624565b815201920192019190610615565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57601c546106828161160c565b9161069060405193846115cb565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b8383106106d2576040518061052c87826114db565b600260206001926040516106e581611580565b73ffffffffffffffffffffffffffffffffffffffff865416815261070a85870161172b565b838201528152019201920191906106bd565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57601d546107578161160c565b9161076560405193846115cb565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b8383106107a7576040518061052c87826114db565b600260206001926040516107ba81611580565b73ffffffffffffffffffffffffffffffffffffffff86541681526107df85870161172b565b83820152815201920192019190610792565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57601a5461082c8161160c565b9161083a60405193846115cb565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b83831061087c576040518061052c878261145d565b60016020819261088b85611624565b815201920192019190610867565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051908152f35b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57601b546109298161160c565b61093660405191826115cb565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b838310610a0e57868587604051928392602084019060208552518091526040840160408260051b8601019392905b8282106109a357505050500390f35b919360206109fe827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc06001959799849503018652885190836109ee83516040845260408401906113a8565b9201519084818403910152611407565b9601920192018594939192610994565b60026020600192604051610a2181611580565b610a2a86611624565b8152610a3785870161172b565b83820152815201920192019190610966565b503461011c57610a5836611324565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610cc157826040517f4c63e5620000000000000000000000000000000000000000000000000000000081527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe841060048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561042157610cde575b5073ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b15610cc5578180916044604051809481937f650fb6760000000000000000000000000000000000000000000000000000000083528860048401528960248401525af1801561042157610cc9575b5073ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b15610cc5578180916044604051809481937fd91d0e180000000000000000000000000000000000000000000000000000000083528860048401528960248401525af1801561042157610cac575b5050602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16916024604051809481937f8c3f556300000000000000000000000000000000000000000000000000000000835260048301525afa908115610ca1578391610c6a575b5060018201809211610c3d5790610c3a91611ab8565b80f35b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b90506020813d602011610c99575b81610c85602093836115cb565b81010312610c94575138610c24565b600080fd5b3d9150610c78565b6040513d85823e3d90fd5b81610cb6916115cb565b610cc1578238610bc2565b8280fd5b5080fd5b81610cd3916115cb565b610cc1578238610b56565b81610ce8916115cb565b610cc1578238610aea565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c5760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b818110610d705761052c85610520818703826115cb565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610d59565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c5760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b818110610e195761052c85610520818703826115cb565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610e02565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57601e54610e808161160c565b610e8d60405191826115cb565b818152601e83526020810191837f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350845b838310610fdb5786858760405192839260208401906020855251809152604084019160408260051b8601019392815b838310610ef95786860387f35b9193957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09086929496030183528551906020604082019273ffffffffffffffffffffffffffffffffffffffff81511683520151916040602083015282518091526060820190602060608260051b850101940192855b828110610f9257505050505060208060019297019301930190928695949293610eec565b9091929394602080610fce837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0876001960301895289516113a8565b9701950193929101610f6e565b604051610fe781611580565b73ffffffffffffffffffffffffffffffffffffffff83541681526001830180546110108161160c565b9161101e60405193846115cb565b8183528a526020808b20908b9084015b838210611054575050505060019282602092836002950152815201920192019190610ebd565b60016020819261106386611624565b81520193019101909161102e565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c5760405180916020601654928381520191601682527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289915b8181106110ee5761052c85610520818703826115cb565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016110d7565b503461011c5761112936611324565b8273ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b15610cc55781906044604051809481937f650fb6760000000000000000000000000000000000000000000000000000000083528860048401528760248401525af1801561044a57611232575b50602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16926024604051809581937f8c3f556300000000000000000000000000000000000000000000000000000000835260048301525afa8015610ca15783906111fe575b610c3a9250611ab8565b506020823d60201161122a575b81611218602093836115cb565b81010312610c9457610c3a91516111f4565b3d915061120b565b8361123f919492946115cb565b9138611194565b905034610cc557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610cc5576102b08082019082821067ffffffffffffffff8311176112f757908291611b3b8339039082f080156112ea577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00601f549260081b16911617601f5580f35b50604051903d90823e3d90fd5b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6040910112610c94576004359060243590565b602060408183019282815284518094520192019060005b81811061137c5750505090565b825173ffffffffffffffffffffffffffffffffffffffff1684526020938401939092019160010161136f565b919082519283825260005b8481106113f25750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b806020809284010151828286010152016113b3565b906020808351928381520192019060005b8181106114255750505090565b82517fffffffff0000000000000000000000000000000000000000000000000000000016845260209384019390920191600101611418565b602081016020825282518091526040820191602060408360051b8301019401926000915b83831061149057505050505090565b90919293946020806114cc837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0866001960301875289516113a8565b97019301930191939290611481565b602081016020825282518091526040820191602060408360051b8301019401926000915b83831061150e57505050505090565b9091929394602080611571837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190611407565b970193019301919392906114ff565b6040810190811067ffffffffffffffff82111761159c57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761159c57604052565b67ffffffffffffffff811161159c5760051b60200190565b906040519160008154918260011c92600181168015611721575b6020851081146116f4578487528693929181156116b4575060011461166d575b5061166b925003836115cb565b565b90506000929192526020600020906000915b81831061169857505090602061166b928201013861165e565b602091935080600191548385890101520191019091849261167f565b6020935061166b9592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201013861165e565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f169361163e565b90604051918281549182825260208201906000526020600020926000905b8060078301106119455761166b94549181811061190f575b8181106118d9575b8181106118a3575b81811061186d575b818110611837575b818110611801575b8181106117cc575b1061179f575b5003836115cb565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260200138611797565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b168152019301611791565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b168152019301611789565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b168152019301611781565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b168152019301611779565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b168152019301611771565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b168152019301611769565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b168152019301611761565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e0820152019401920185929391611749565b60085460ff1680156119e15790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115611aac57600091611a7a575b50151590565b90506020813d602011611aa4575b81611a95602093836115cb565b81010312610c94575138611a74565b3d9150611a88565b6040513d6000823e3d90fd5b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610c9457604051917f98296c5400000000000000000000000000000000000000000000000000000000835260048301526024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015611aac57611b2f5750565b600061166b916115cb56fe60808060405234601557610295908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c8063650fb676146101175780638c3f5563146100d35763d91d0e181461003d57600080fd5b346100ce5761004b36610130565b61005482610164565b81810361009a577f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f8816040846001850161008d81836101aa565b82519182526020820152a1005b917f9b6514f40000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b600080fd5b346100ce5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ce57602061010f600435610164565b604051908152f35b346100ce5761012e61012836610130565b906101aa565b005b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60409101126100ce576004359060243590565b60405160208101917f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83526040820152604081526101a36060826101ef565b5190205490565b60405160208101917f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83526040820152604081526101e96060826101ef565b51902055565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761023057604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea264697066735822122021ea5fa39d0762fb0863178c3aa65bb605c33ca431668a14e678ac93a0b1313464736f6c634300081c0033a2646970667358221220346a586b638ebf4a0009656418710bb0bfd6e3d931e1f3e4215e2cc03b4f6bbd64736f6c634300081c0033","sourceMap":"526:930:93:-:0;;;;;;;3166:4:5;526:930:93;;3166:4:5;526:930:93;;;3166:4:5;526:930:93;3166:4:5;526:930:93;;1087:4:16;526:930:93;;;1087:4:16;526:930:93;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608080604052600436101561001357600080fd5b600090813560e01c9081630a9254e4146112465750806316836fa51461111a5780631ed7831c146110715780632ade388014610e455780633e5e3c2314610d9c5780633f7286f414610cf357806352458f8f14610a4957806366d9a9a0146108ee5780637e7202261461089957806385226c81146107f1578063916a17c61461071c578063b0464fdc14610647578063b5508aa91461059f578063ba414fa61461055c578063e20c9f71146104a3578063f38336ed1461011f5763fa7626d4146100dc57600080fd5b3461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57602060ff601f54166040519015158152f35b80fd5b503461011c5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c5780604435600435602435737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561042c576040517f4c63e5620000000000000000000000000000000000000000000000000000000081527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe821060048201528481602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561046a57859161048e575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561042c576040517f4c63e5620000000000000000000000000000000000000000000000000000000081528184141560048201528481602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561046a578591610479575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b15610475578480916044604051809481937f650fb6760000000000000000000000000000000000000000000000000000000083528860048401528760248401525af190811561046a578591610455575b5050604051907f9b6514f400000000000000000000000000000000000000000000000000000000602083015282602483015283604483015260648201526064815261031e6084826115cb565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561042c578361037991604051809381927ff28dceb30000000000000000000000000000000000000000000000000000000083526020600484015260248301906113a8565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811561044a578491610431575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c1691823b1561042c57604484928360405195869485937fd91d0e18000000000000000000000000000000000000000000000000000000008552600485015260248401525af18015610421576104105750f35b8161041a916115cb565b61011c5780f35b6040513d84823e3d90fd5b505050fd5b8161043b916115cb565b6104465782386103a1565b5050fd5b6040513d86823e3d90fd5b8161045f916115cb565b61042c5783386102d2565b6040513d87823e3d90fd5b8480fd5b81610483916115cb565b61042c578338610262565b81610498916115cb565b61042c5783386101ec565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c5760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b8181106105305761052c85610520818703826115cb565b60405191829182611358565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610509565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c5760206105956119d2565b6040519015158152f35b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c576019546105da8161160c565b916105e860405193846115cb565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b83831061062a576040518061052c878261145d565b60016020819261063985611624565b815201920192019190610615565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57601c546106828161160c565b9161069060405193846115cb565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b8383106106d2576040518061052c87826114db565b600260206001926040516106e581611580565b73ffffffffffffffffffffffffffffffffffffffff865416815261070a85870161172b565b838201528152019201920191906106bd565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57601d546107578161160c565b9161076560405193846115cb565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b8383106107a7576040518061052c87826114db565b600260206001926040516107ba81611580565b73ffffffffffffffffffffffffffffffffffffffff86541681526107df85870161172b565b83820152815201920192019190610792565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57601a5461082c8161160c565b9161083a60405193846115cb565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b83831061087c576040518061052c878261145d565b60016020819261088b85611624565b815201920192019190610867565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051908152f35b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57601b546109298161160c565b61093660405191826115cb565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b838310610a0e57868587604051928392602084019060208552518091526040840160408260051b8601019392905b8282106109a357505050500390f35b919360206109fe827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc06001959799849503018652885190836109ee83516040845260408401906113a8565b9201519084818403910152611407565b9601920192018594939192610994565b60026020600192604051610a2181611580565b610a2a86611624565b8152610a3785870161172b565b83820152815201920192019190610966565b503461011c57610a5836611324565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610cc157826040517f4c63e5620000000000000000000000000000000000000000000000000000000081527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe841060048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561042157610cde575b5073ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b15610cc5578180916044604051809481937f650fb6760000000000000000000000000000000000000000000000000000000083528860048401528960248401525af1801561042157610cc9575b5073ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b15610cc5578180916044604051809481937fd91d0e180000000000000000000000000000000000000000000000000000000083528860048401528960248401525af1801561042157610cac575b5050602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16916024604051809481937f8c3f556300000000000000000000000000000000000000000000000000000000835260048301525afa908115610ca1578391610c6a575b5060018201809211610c3d5790610c3a91611ab8565b80f35b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b90506020813d602011610c99575b81610c85602093836115cb565b81010312610c94575138610c24565b600080fd5b3d9150610c78565b6040513d85823e3d90fd5b81610cb6916115cb565b610cc1578238610bc2565b8280fd5b5080fd5b81610cd3916115cb565b610cc1578238610b56565b81610ce8916115cb565b610cc1578238610aea565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c5760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b818110610d705761052c85610520818703826115cb565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610d59565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c5760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b818110610e195761052c85610520818703826115cb565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610e02565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57601e54610e808161160c565b610e8d60405191826115cb565b818152601e83526020810191837f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350845b838310610fdb5786858760405192839260208401906020855251809152604084019160408260051b8601019392815b838310610ef95786860387f35b9193957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09086929496030183528551906020604082019273ffffffffffffffffffffffffffffffffffffffff81511683520151916040602083015282518091526060820190602060608260051b850101940192855b828110610f9257505050505060208060019297019301930190928695949293610eec565b9091929394602080610fce837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0876001960301895289516113a8565b9701950193929101610f6e565b604051610fe781611580565b73ffffffffffffffffffffffffffffffffffffffff83541681526001830180546110108161160c565b9161101e60405193846115cb565b8183528a526020808b20908b9084015b838210611054575050505060019282602092836002950152815201920192019190610ebd565b60016020819261106386611624565b81520193019101909161102e565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c5760405180916020601654928381520191601682527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289915b8181106110ee5761052c85610520818703826115cb565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016110d7565b503461011c5761112936611324565b8273ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b15610cc55781906044604051809481937f650fb6760000000000000000000000000000000000000000000000000000000083528860048401528760248401525af1801561044a57611232575b50602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16926024604051809581937f8c3f556300000000000000000000000000000000000000000000000000000000835260048301525afa8015610ca15783906111fe575b610c3a9250611ab8565b506020823d60201161122a575b81611218602093836115cb565b81010312610c9457610c3a91516111f4565b3d915061120b565b8361123f919492946115cb565b9138611194565b905034610cc557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610cc5576102b08082019082821067ffffffffffffffff8311176112f757908291611b3b8339039082f080156112ea577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00601f549260081b16911617601f5580f35b50604051903d90823e3d90fd5b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6040910112610c94576004359060243590565b602060408183019282815284518094520192019060005b81811061137c5750505090565b825173ffffffffffffffffffffffffffffffffffffffff1684526020938401939092019160010161136f565b919082519283825260005b8481106113f25750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b806020809284010151828286010152016113b3565b906020808351928381520192019060005b8181106114255750505090565b82517fffffffff0000000000000000000000000000000000000000000000000000000016845260209384019390920191600101611418565b602081016020825282518091526040820191602060408360051b8301019401926000915b83831061149057505050505090565b90919293946020806114cc837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0866001960301875289516113a8565b97019301930191939290611481565b602081016020825282518091526040820191602060408360051b8301019401926000915b83831061150e57505050505090565b9091929394602080611571837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190611407565b970193019301919392906114ff565b6040810190811067ffffffffffffffff82111761159c57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761159c57604052565b67ffffffffffffffff811161159c5760051b60200190565b906040519160008154918260011c92600181168015611721575b6020851081146116f4578487528693929181156116b4575060011461166d575b5061166b925003836115cb565b565b90506000929192526020600020906000915b81831061169857505090602061166b928201013861165e565b602091935080600191548385890101520191019091849261167f565b6020935061166b9592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201013861165e565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f169361163e565b90604051918281549182825260208201906000526020600020926000905b8060078301106119455761166b94549181811061190f575b8181106118d9575b8181106118a3575b81811061186d575b818110611837575b818110611801575b8181106117cc575b1061179f575b5003836115cb565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260200138611797565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b168152019301611791565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b168152019301611789565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b168152019301611781565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b168152019301611779565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b168152019301611771565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b168152019301611769565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b168152019301611761565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e0820152019401920185929391611749565b60085460ff1680156119e15790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115611aac57600091611a7a575b50151590565b90506020813d602011611aa4575b81611a95602093836115cb565b81010312610c94575138611a74565b3d9150611a88565b6040513d6000823e3d90fd5b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610c9457604051917f98296c5400000000000000000000000000000000000000000000000000000000835260048301526024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015611aac57611b2f5750565b600061166b916115cb56fe60808060405234601557610295908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c8063650fb676146101175780638c3f5563146100d35763d91d0e181461003d57600080fd5b346100ce5761004b36610130565b61005482610164565b81810361009a577f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f8816040846001850161008d81836101aa565b82519182526020820152a1005b917f9b6514f40000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b600080fd5b346100ce5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ce57602061010f600435610164565b604051908152f35b346100ce5761012e61012836610130565b906101aa565b005b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60409101126100ce576004359060243590565b60405160208101917f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83526040820152604081526101a36060826101ef565b5190205490565b60405160208101917f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83526040820152604081526101e96060826101ef565b51902055565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761023057604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea264697066735822122021ea5fa39d0762fb0863178c3aa65bb605c33ca431668a14e678ac93a0b1313464736f6c634300081c0033a2646970667358221220346a586b638ebf4a0009656418710bb0bfd6e3d931e1f3e4215e2cc03b4f6bbd64736f6c634300081c0033","sourceMap":"526:930:93:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1065:26:16;526:930:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;336:42:2;1187:41:93;;;;526:930;;;1187:41;;2024:14:2;1197:30:93;;526:930;1187:41;;526:930;1187:41;;526:930;1187:41;336:42:2;1187:41:93;;;;;;;;;;;526:930;1234:30;;336:42:2;1234:30:93;;;;526:930;;;1234:30;;1244:19;;;;526:930;1234:30;;526:930;1234:30;;526:930;1234:30;336:42:2;1234:30:93;;;;;;;;;;;526:930;;;;1270:8;526:930;;;;1270:35;;;;;526:930;;;;;;1270:35;;;;526:930;1270:35;;;526:930;1270:35;;526:930;;;;;;1270:35;;;;;;;;;;;526:930;;;;;1327:74;1350:23;526:930;1327:74;;;;526:930;1327:74;;526:930;;;;;;;;;;;1327:74;;;;;;:::i;:::-;336:42:2;1311:91:93;;;;526:930;;;;;1311:91;;;;526:930;1311:91;;526:930;;1311:91;;526:930;;;;;;:::i;:::-;1311:91;;;336:42:2;1311:91:93;;;;;;;;;;;526:930;;;;1270:8;526:930;;;;1408:40;;;;;;526:930;;;;;;1408:40;;;;;526:930;1408:40;;526:930;1408:40;;526:930;;;;;1408:40;;;;;;;;526:930;;1408:40;;;;;:::i;:::-;526:930;;1408:40;526:930;1408:40;526:930;;;;;;;;;1408:40;526:930;;;;1311:91;;;;;:::i;:::-;526:930;;1311:91;;;;526:930;;;;1311:91;526:930;;;;;;;;;1270:35;;;;;:::i;:::-;526:930;;1270:35;;;;;526:930;;;;;;;;;1270:35;526:930;;;1234:30;;;;;:::i;:::-;526:930;;1234:30;;;;1187:41;;;;;:::i;:::-;526:930;;1187:41;;;;526:930;;;;;;;;;;;;;;;;;2723:18:9;526:930:93;;;;;;;2723:18:9;526:930:93;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2575:18:9;526:930:93;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;2575:18:9;526:930:93;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;2876:18:9;526:930:93;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;2876:18:9;526:930:93;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;3653:18:9;526:930:93;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;3653:18:9;526:930:93;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;3162:18:9;526:930:93;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;3162:18:9;526:930:93;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;561:24;526:930;;;;;;;;;;;;;;;;;;;;;;3346:26:9;526:930:93;;;;:::i;:::-;;;;;;;:::i;:::-;;;;3346:26:9;526:930:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;889:41;336:42:2;889:41:93;;;;526:930;;;;889:41;;2024:14:2;899:30:93;;526:930;889:41;;526:930;889:41;;;;336:42:2;889:41:93;;;;;;;;526:930;;;936:8;526:930;;;;936:35;;;;;526:930;;;936:35;526:930;;936:35;;;;526:930;936:35;;;526:930;936:35;;526:930;;889:41;526:930;;;936:35;;;;;;;;526:930;;;936:8;526:930;;;;977:37;;;;;526:930;;;936:35;526:930;;977:37;;;;526:930;977:37;;;526:930;977:37;;526:930;;889:41;526:930;;;977:37;;;;;;;;526:930;;;;;936:8;526:930;;;;;889:41;526:930;;1029:26;;;;526:930;1029:26;;526:930;1029:26;;526:930;1029:26;;;;;;;;;;;526:930;2024:14:2;928:1:93;2024:14:2;;;;;;;1057:10:93;;;;:::i;:::-;526:930;;2024:14:2;889:41:93;2024:14:2;;;;;526:930:93;2024:14:2;;1029:26:93;;;526:930;1029:26;;526:930;1029:26;;;;;;526:930;1029:26;;;:::i;:::-;;;526:930;;;;;1029:26;;;526:930;-1:-1:-1;526:930:93;;1029:26;;;-1:-1:-1;1029:26:93;;;526:930;;;;;;;;;977:37;;;;;:::i;:::-;526:930;;977:37;;;;526:930;;;;977:37;526:930;;;936:35;;;;;:::i;:::-;526:930;;936:35;;;;889:41;;;;;:::i;:::-;526:930;;889:41;;;;526:930;;;;;;;;;;;;;;;;;3501:18:9;526:930:93;;;;;;;3501:18:9;526:930:93;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3794:16:9;526:930:93;;;;;;;3794:16:9;526:930:93;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3948:19:9;526:930:93;;;;:::i;:::-;;;;;;;:::i;:::-;;;;3948:19:9;526:930:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3018:16:9;526:930:93;;;;;;;3018:16:9;526:930:93;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;723:8;526:930;;;;723:35;;;;;526:930;;723:35;526:930;;723:35;;;;526:930;723:35;;;526:930;723:35;;526:930;;;;;;723:35;;;;;;;;526:930;;;;723:8;526:930;;;;;;;;773:26;;;;526:930;773:26;;526:930;773:26;;526:930;773:26;;;;;;;;;;526:930;801:6;;;;:::i;773:26::-;;526:930;773:26;;526:930;773:26;;;;;;526:930;773:26;;;:::i;:::-;;;526:930;;;;801:6;526:930;;773:26;;;;;-1:-1:-1;773:26:93;;723:35;;;;;;;;:::i;:::-;;;;;526:930;;;;;;;;;;;;;631:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;526:930;;620:25;526:930;;;;;;;;620:25;526:930;;;631:14;526:930;;;;;;;;;;;631:14;526:930;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;526:930:93;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;526:930:93;;;;;-1:-1:-1;526:930:93;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;-1:-1:-1;526:930:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;;;-1:-1:-1;526:930:93;;;;;-1:-1:-1;526:930:93;;-1:-1:-1;526:930:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;526:930:93;;-1:-1:-1;526:930:93;;-1:-1:-1;526:930:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1243:204:4;1302:7;526:930:93;;;;;;;1325:14:4;:::o;1298:143::-;526:930:93;;;;1377:39:4;;526:930:93;1377:39:4;;;526:930:93;192:59:4;;;;526:930:93;192:59:4;1377:39;;;526:930:93;1377:39:4;;;;;;;526:930:93;1377:39:4;;;1298:143;1377:53;;;1370:60;:::o;1377:39::-;;;192:59;1377:39;;192:59;1377:39;;;;;;192:59;1377:39;;;:::i;:::-;;;192:59;;;;;1377:39;;;;;;-1:-1:-1;1377:39:4;;;526:930:93;;;;;;;;;2270:110:4;;526:930:93;2349:24:4;;;;526:930:93;;2349:24:4;526:930:93;2349:24:4;;;;;526:930:93;;;;;-1:-1:-1;2349:24:4;;;526:930:93;2349:24:4;;;;;;;;2270:110;:::o;2349:24::-;-1:-1:-1;2349:24:4;;;:::i","linkReferences":{}},"methodIdentifiers":{"IS_TEST()":"fa7626d4","excludeArtifacts()":"b5508aa9","excludeContracts()":"e20c9f71","excludeSelectors()":"b0464fdc","excludeSenders()":"1ed7831c","failed()":"ba414fa6","nonceImp()":"7e720226","setUp()":"0a9254e4","targetArtifactSelectors()":"66d9a9a0","targetArtifacts()":"85226c81","targetContracts()":"3f7286f4","targetInterfaces()":"2ade3880","targetSelectors()":"916a17c6","targetSenders()":"3e5e3c23","test_consumeNonce(uint256,uint256)":"52458f8f","test_consumeNonce_revertWhenBadNonce(uint256,uint256,uint256)":"f38336ed","test_readNonce(uint256,uint256)":"16836fa5"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"IS_TEST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"excludedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nonceImp\",\"outputs\":[{\"internalType\":\"contract NonceImp\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setUp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifactSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"artifact\",\"type\":\"string\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzArtifactSelector[]\",\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"targetedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetInterfaces\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"artifacts\",\"type\":\"string[]\"}],\"internalType\":\"struct StdInvariant.FuzzInterface[]\",\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"}],\"name\":\"test_consumeNonce\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_badNonce\",\"type\":\"uint256\"}],\"name\":\"test_consumeNonce_revertWhenBadNonce\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"}],\"name\":\"test_readNonce\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/modules/Nonce.t.sol\":\"NonceTest\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/modules/Nonce.sol\":{\"keccak256\":\"0x56fbf6dc9b34ab60ae8a32ffb6f583c003bb8f4a5223ce704e982400fa403fab\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://492f53628633b862702cf8f9b726067a722c94028133a8a4c4fcf3d0e73ad803\",\"dweb:/ipfs/QmTHNy4XbH47YZaqKDpknb5aApjRH9HVAREHN7N5vEFWEV\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/Storage.sol\":{\"keccak256\":\"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da\",\"dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn\"]},\"src/modules/auth/SelfAuth.sol\":{\"keccak256\":\"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42\",\"dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"test/modules/Nonce.t.sol\":{\"keccak256\":\"0xec53b4e51abf9e0a9925d9643aed757379e635af342af423d8ffaedbeadcde88\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://126ce75d78f18c12374529923b57026834ca6efcfe5e84962ed4dd4eb7d3ff13\",\"dweb:/ipfs/QmRU9PpnPfzs62kxToHoGwher4zFYnVviqscT287RJRbSR\"]},\"test/utils/TestUtils.sol\":{\"keccak256\":\"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad\",\"dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log","anonymous":false},{"inputs":[{"internalType":"address","name":"","type":"address","indexed":false}],"type":"event","name":"log_address","anonymous":false},{"inputs":[{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"log_bytes","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32","indexed":false}],"type":"event","name":"log_bytes32","anonymous":false},{"inputs":[{"internalType":"int256","name":"","type":"int256","indexed":false}],"type":"event","name":"log_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address","name":"val","type":"address","indexed":false}],"type":"event","name":"log_named_address","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes","name":"val","type":"bytes","indexed":false}],"type":"event","name":"log_named_bytes","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes32","name":"val","type":"bytes32","indexed":false}],"type":"event","name":"log_named_bytes32","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false}],"type":"event","name":"log_named_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"string","name":"val","type":"string","indexed":false}],"type":"event","name":"log_named_string","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false}],"type":"event","name":"log_named_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log_string","anonymous":false},{"inputs":[{"internalType":"uint256","name":"","type":"uint256","indexed":false}],"type":"event","name":"log_uint","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"logs","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"IS_TEST","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeArtifacts","outputs":[{"internalType":"string[]","name":"excludedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeContracts","outputs":[{"internalType":"address[]","name":"excludedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"excludedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSenders","outputs":[{"internalType":"address[]","name":"excludedSenders_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"failed","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"nonceImp","outputs":[{"internalType":"contract NonceImp","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"setUp"},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifactSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzArtifactSelector[]","name":"targetedArtifactSelectors_","type":"tuple[]","components":[{"internalType":"string","name":"artifact","type":"string"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifacts","outputs":[{"internalType":"string[]","name":"targetedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetContracts","outputs":[{"internalType":"address[]","name":"targetedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetInterfaces","outputs":[{"internalType":"struct StdInvariant.FuzzInterface[]","name":"targetedInterfaces_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"string[]","name":"artifacts","type":"string[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"targetedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSenders","outputs":[{"internalType":"address[]","name":"targetedSenders_","type":"address[]"}]},{"inputs":[{"internalType":"uint256","name":"_space","type":"uint256"},{"internalType":"uint256","name":"_nonce","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"test_consumeNonce"},{"inputs":[{"internalType":"uint256","name":"_space","type":"uint256"},{"internalType":"uint256","name":"_nonce","type":"uint256"},{"internalType":"uint256","name":"_badNonce","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"test_consumeNonce_revertWhenBadNonce"},{"inputs":[{"internalType":"uint256","name":"_space","type":"uint256"},{"internalType":"uint256","name":"_nonce","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"test_readNonce"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/modules/Nonce.t.sol":"NonceTest"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/modules/Nonce.sol":{"keccak256":"0x56fbf6dc9b34ab60ae8a32ffb6f583c003bb8f4a5223ce704e982400fa403fab","urls":["bzz-raw://492f53628633b862702cf8f9b726067a722c94028133a8a4c4fcf3d0e73ad803","dweb:/ipfs/QmTHNy4XbH47YZaqKDpknb5aApjRH9HVAREHN7N5vEFWEV"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/Storage.sol":{"keccak256":"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f","urls":["bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da","dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn"],"license":"Apache-2.0"},"src/modules/auth/SelfAuth.sol":{"keccak256":"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c","urls":["bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42","dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"test/modules/Nonce.t.sol":{"keccak256":"0xec53b4e51abf9e0a9925d9643aed757379e635af342af423d8ffaedbeadcde88","urls":["bzz-raw://126ce75d78f18c12374529923b57026834ca6efcfe5e84962ed4dd4eb7d3ff13","dweb:/ipfs/QmRU9PpnPfzs62kxToHoGwher4zFYnVviqscT287RJRbSR"],"license":"Apache-2.0"},"test/utils/TestUtils.sol":{"keccak256":"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79","urls":["bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad","dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa"],"license":"Apache-2.0"}},"version":1},"id":93} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/P256.sol/P256.json b/contracts/artifacts/wallet-contracts-v3/P256.sol/P256.json new file mode 100644 index 00000000..e3bb07fa --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/P256.sol/P256.json @@ -0,0 +1 @@ +{"abi":[{"type":"error","name":"P256VerificationFailed","inputs":[]}],"bytecode":{"object":"0x60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea26469706673582212209525e1258d2864294ee01db636e2ce4bd4e089c3c710daf431c05fec12d2055e64736f6c634300081c0033","sourceMap":"446:6223:70:-:0;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x600080fdfea26469706673582212209525e1258d2864294ee01db636e2ce4bd4e089c3c710daf431c05fec12d2055e64736f6c634300081c0033","sourceMap":"446:6223:70:-:0;;","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"P256VerificationFailed\",\"type\":\"error\"}],\"devdoc\":{\"author\":\"Solady (https://github.com/vectorized/solady/blob/main/src/utils/P256.sol)Modified from Daimo P256 Verifier (https://github.com/daimo-eth/p256-verifier/blob/master/src/P256.sol)Modified from OpenZeppelin (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/cryptography/P256.sol)\",\"errors\":{\"P256VerificationFailed()\":[{\"details\":\"Unable to verify the P256 signature, due to missing RIP-7212 P256 verifier precompile and missing Solidity P256 verifier.\"}]},\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"N\":{\"details\":\"The order of the secp256r1 elliptic curve.\"},\"RIP_PRECOMPILE\":{\"details\":\"Address of the RIP-7212 P256 verifier precompile. Currently, we don't support EIP-7212's precompile at 0x0b as it has not been finalized. See: https://github.com/ethereum/RIPs/blob/master/RIPS/rip-7212.md\"},\"VERIFIER\":{\"details\":\"Address of the Solidity P256 verifier. Please make sure the contract is deployed onto the chain you are working on. See: https://gist.github.com/Vectorized/599b0d8a94d21bc74700eb1354e2f55c Unlike RIP-7212, this verifier returns `uint256(0)` on failure, to facilitate easier existence check. This verifier will also never revert.\"},\"_HALF_N\":{\"details\":\"`N/2`. Used for checking the malleability of the signature.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Gas optimized P256 wrapper.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/utils/P256.sol\":\"P256\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/utils/P256.sol\":{\"keccak256\":\"0x15f366eef2850bb0e8a608e51f66c1caed19841631000eedc05ff34a0de38d7e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5c9403d13cecb87a232d241226bc921667d958bc68876d012e7a68a2f0df7fb7\",\"dweb:/ipfs/QmeUnWx58EzjRTmBjLAdMzswDjvuAcThP5gaUWQximCukH\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[],"type":"error","name":"P256VerificationFailed"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/utils/P256.sol":"P256"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/utils/P256.sol":{"keccak256":"0x15f366eef2850bb0e8a608e51f66c1caed19841631000eedc05ff34a0de38d7e","urls":["bzz-raw://5c9403d13cecb87a232d241226bc921667d958bc68876d012e7a68a2f0df7fb7","dweb:/ipfs/QmeUnWx58EzjRTmBjLAdMzswDjvuAcThP5gaUWQximCukH"],"license":"MIT"}},"version":1},"id":70} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Passkeys.sol/Passkeys.json b/contracts/artifacts/wallet-contracts-v3/Passkeys.sol/Passkeys.json new file mode 100644 index 00000000..0f38de74 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Passkeys.sol/Passkeys.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"recoverSapientSignatureCompact","inputs":[{"name":"_digest","type":"bytes32","internalType":"bytes32"},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"error","name":"InvalidPasskeySignature","inputs":[{"name":"_webAuthnAuth","type":"tuple","internalType":"struct WebAuthn.WebAuthnAuth","components":[{"name":"authenticatorData","type":"bytes","internalType":"bytes"},{"name":"clientDataJSON","type":"string","internalType":"string"},{"name":"challengeIndex","type":"uint256","internalType":"uint256"},{"name":"typeIndex","type":"uint256","internalType":"uint256"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"}]},{"name":"_requireUserVerification","type":"bool","internalType":"bool"},{"name":"_x","type":"bytes32","internalType":"bytes32"},{"name":"_y","type":"bytes32","internalType":"bytes32"}]}],"bytecode":{"object":"0x60808060405234601557610b7d908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c63898bd9211461002757600080fd5b346100bb5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bb5760043560243567ffffffffffffffff81116100bb57366023820112156100bb57806004013567ffffffffffffffff81116100bb5736602482840101116100bb576100b79260246100a793019061022c565b6040519081529081906020820190565b0390f35b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761013057604052565b6100c0565b919082519283825260005b84811061017f5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201610140565b90926102236060939695946080845260a06101f26101bf835160c06080890152610140880190610135565b60208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808883030184890152610135565b604083015160c08701528683015160e087015260808301516101008701529101516101208501529615156020840152565b60408201520152565b9092919261023861063d565b60009161026e6102488783610681565b357fff000000000000000000000000000000000000000000000000000000000000001690565b957f200000000000000000000000000000000000000000000000000000000000000087166105ed577f01000000000000000000000000000000000000000000000000000000000000008716151596879160f882901c906102e26102dc60f985901c6001165b60010160ff1690565b60ff1690565b6102f56102dc6001600286901c166102d3565b9061031b6102dc6102d3601061031083600160038b901c1684565b971660041c600f1690565b947f4000000000000000000000000000000000000000000000000000000000000000600191166105bd575b6104f06104db6104c66104b1610547996105429e9f9961046c906104fe9f9e9a8f9a61054b9f9a8d61041d610428938f6103d5906105169f6103c86103d5976103dc9288929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9390840180948b896106f4565b369161070c565b905283929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9081019485926106f4565b60208c01528b929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9060408a015289929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b90606088015287602090929192830135920190565b90608087015286602090929192830135920190565b9060a086015285602090929192830135920190565b90998a958201359160200190565b50998a955b6040519283916020830160209181520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826100ef565b610857565b1590565b610581575061057e9394929190600052602052604060002091600052602052604060002090600052602052604060002090565b90565b6105b98387936040519485947f12a693e600000000000000000000000000000000000000000000000000000000865260048601610194565b0390fd5b50989296959397508391948691826105d9856001013590602190565b9c909b975092979498505091979399610346565b610516965061054b949350610547925061060e8161061692610542946106b9565b810190610799565b97939592909687929687929b8c91978893610503565b6040519061063b60c0836100ef565b565b6040519060c0820182811067ffffffffffffffff82111761013057604052600060a08360608152606060208201528260408201528260608201528260808201520152565b901561068a5790565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90929192836001116100bb5783116100bb57600101917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b909392938483116100bb5784116100bb578101920390565b92919267ffffffffffffffff82116101305760405191610754601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016602001846100ef565b8294818452818301116100bb578281602093846000960137010152565b9080601f830112156100bb5781602061057e9335910161070c565b359081151582036100bb57565b9060a0828203126100bb57813567ffffffffffffffff81116100bb5782019060c0828203126100bb576107ca61062c565b91803567ffffffffffffffff81116100bb57826107e8918301610771565b8352602081013567ffffffffffffffff81116100bb5760a09261080c918301610771565b6020840152604081013560408401526060810135606084015260808101356080840152013560a0820152916108436020830161078c565b916040810135916080606083013592013590565b90949392916108676000926109a2565b9560208201519081519060408401516060850151908a51918b600d84017f226368616c6c656e6765223a220000000000000000000000000000000000000060981c82528388019060208160138a600d898b0101106022602d8b8801015160001a141695012092012014169185826014011090821760801c109060207f2274797065223a22776562617574686e2e67657422000000000000000000000060581c918801015160581c1416169952835198895191151560021b6001178060218c015116149060208311161698899384610968575b50505050610948575b50505050565b61095e94955060a0608082015191015191610aaf565b9038808080610942565b60208080959850846001959750840101809882808084519a019601940160025afa831b5afa5192523d156109a0578538808080610939565bfe5b805160609291816109b1575050565b9092506003600284010460021b604051937f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566601f527f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f603f5260208501928286019160208301946020828401019060046003835195600085525b0191603f8351818160121c16516000538181600c1c1651600153818160061c165160025316516003536000518152019087821015610a6e57600490600390610a2b565b5095506000936003936040925201604052066002048093037f3d3d000000000000000000000000000000000000000000000000000000000000815252038252565b9290939193604051938452602084015283604084015260608301526080820152600080526020600060a0836101005afa503d15610b15575b507f7fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a860005160011491111090565b60209060a03d916dd01ea45f9efd5c54f037fa57ea1a5afa503d15610b3a5738610ae7565b63d0d5039b3d526004601cfdfea26469706673582212204d59347ccec10515d14a3270c49d67ccf80be12c8a5f22f758845faf488b169b64736f6c634300081c0033","sourceMap":"406:3926:31:-:0;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436101561001257600080fd5b60003560e01c63898bd9211461002757600080fd5b346100bb5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bb5760043560243567ffffffffffffffff81116100bb57366023820112156100bb57806004013567ffffffffffffffff81116100bb5736602482840101116100bb576100b79260246100a793019061022c565b6040519081529081906020820190565b0390f35b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761013057604052565b6100c0565b919082519283825260005b84811061017f5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201610140565b90926102236060939695946080845260a06101f26101bf835160c06080890152610140880190610135565b60208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808883030184890152610135565b604083015160c08701528683015160e087015260808301516101008701529101516101208501529615156020840152565b60408201520152565b9092919261023861063d565b60009161026e6102488783610681565b357fff000000000000000000000000000000000000000000000000000000000000001690565b957f200000000000000000000000000000000000000000000000000000000000000087166105ed577f01000000000000000000000000000000000000000000000000000000000000008716151596879160f882901c906102e26102dc60f985901c6001165b60010160ff1690565b60ff1690565b6102f56102dc6001600286901c166102d3565b9061031b6102dc6102d3601061031083600160038b901c1684565b971660041c600f1690565b947f4000000000000000000000000000000000000000000000000000000000000000600191166105bd575b6104f06104db6104c66104b1610547996105429e9f9961046c906104fe9f9e9a8f9a61054b9f9a8d61041d610428938f6103d5906105169f6103c86103d5976103dc9288929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9390840180948b896106f4565b369161070c565b905283929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9081019485926106f4565b60208c01528b929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9060408a015289929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b90606088015287602090929192830135920190565b90608087015286602090929192830135920190565b9060a086015285602090929192830135920190565b90998a958201359160200190565b50998a955b6040519283916020830160209181520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826100ef565b610857565b1590565b610581575061057e9394929190600052602052604060002091600052602052604060002090600052602052604060002090565b90565b6105b98387936040519485947f12a693e600000000000000000000000000000000000000000000000000000000865260048601610194565b0390fd5b50989296959397508391948691826105d9856001013590602190565b9c909b975092979498505091979399610346565b610516965061054b949350610547925061060e8161061692610542946106b9565b810190610799565b97939592909687929687929b8c91978893610503565b6040519061063b60c0836100ef565b565b6040519060c0820182811067ffffffffffffffff82111761013057604052600060a08360608152606060208201528260408201528260608201528260808201520152565b901561068a5790565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90929192836001116100bb5783116100bb57600101917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b909392938483116100bb5784116100bb578101920390565b92919267ffffffffffffffff82116101305760405191610754601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016602001846100ef565b8294818452818301116100bb578281602093846000960137010152565b9080601f830112156100bb5781602061057e9335910161070c565b359081151582036100bb57565b9060a0828203126100bb57813567ffffffffffffffff81116100bb5782019060c0828203126100bb576107ca61062c565b91803567ffffffffffffffff81116100bb57826107e8918301610771565b8352602081013567ffffffffffffffff81116100bb5760a09261080c918301610771565b6020840152604081013560408401526060810135606084015260808101356080840152013560a0820152916108436020830161078c565b916040810135916080606083013592013590565b90949392916108676000926109a2565b9560208201519081519060408401516060850151908a51918b600d84017f226368616c6c656e6765223a220000000000000000000000000000000000000060981c82528388019060208160138a600d898b0101106022602d8b8801015160001a141695012092012014169185826014011090821760801c109060207f2274797065223a22776562617574686e2e67657422000000000000000000000060581c918801015160581c1416169952835198895191151560021b6001178060218c015116149060208311161698899384610968575b50505050610948575b50505050565b61095e94955060a0608082015191015191610aaf565b9038808080610942565b60208080959850846001959750840101809882808084519a019601940160025afa831b5afa5192523d156109a0578538808080610939565bfe5b805160609291816109b1575050565b9092506003600284010460021b604051937f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566601f527f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f603f5260208501928286019160208301946020828401019060046003835195600085525b0191603f8351818160121c16516000538181600c1c1651600153818160061c165160025316516003536000518152019087821015610a6e57600490600390610a2b565b5095506000936003936040925201604052066002048093037f3d3d000000000000000000000000000000000000000000000000000000000000815252038252565b9290939193604051938452602084015283604084015260608301526080820152600080526020600060a0836101005afa503d15610b15575b507f7fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a860005160011491111090565b60209060a03d916dd01ea45f9efd5c54f037fa57ea1a5afa503d15610b3a5738610ae7565b63d0d5039b3d526004601cfdfea26469706673582212204d59347ccec10515d14a3270c49d67ccf80be12c8a5f22f758845faf488b169b64736f6c634300081c0033","sourceMap":"406:3926:31:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3745:584::-;;;;;406:3926;;:::i;:::-;-1:-1:-1;1797:13:31;;;;;;:::i;:::-;;406:3926;;;;1797:13;1823:12;406:3926;1823:12;;406:3926;;;1881:12;;1880:19;;;;;406:3926;;;;;1909:60;1937:32;406:3926;;;;;;1938:26;406:3926;;;;;;1937:32;406:3926;;;;1909:60;1979:66;2013:32;406:3926;;;;;;2014:26;406:3926;1979:66;406:3926;2127:57;2152:32;2153:26;2168:4;2055:62;2152:32;406:3926;;;;;;2153:26;406:3926;2055:62;406:3926;;;;;;;;2127:57;2195:19;406:3926;1889:4;2230:12;;2225:112;;1818:1879;2926:232:68;;;2213:380;4064:91:31;2213:380:68;4080:25:31;2213:380:68;;;;;2926:232;2213:380;;;;;4063:92:31;2213:380:68;;;;406:3926:31;2213:380:68;;2577:31:31;2213:380:68;4080:25:31;2213:380:68;;2920:31:31;2213:380:68;406:3926:31;2213:380:68;;;;;;2363:226;;;;;;;;;;;;;;;;;;;2213:380;;;406:3926:31;;;;2577:31;;;;;:::i;:::-;406:3926;;;:::i;:::-;2543:65;;2213:380:68;;;;;2363:226;;;;;;;;;;;;;;;;;;;2213:380;;;406:3926:31;;;2920:31;;;;:::i;406:3926::-;1831:4;2882:28;;:70;2213:380:68;;;;;2363:226;;;;;;;;;;;;;;;;;;;2213:380;;;3007:28:31;2238:4;3007:28;;406:3926;2213:380:68;;;;;2363:226;;;;;;;;;;;;;;;;;;;2213:380;;;3119:23:31;;;;406:3926;2926:232:68;3047:107;2926:232;;;;3047:107;;;;;2926:232;;;3222:15:31;;;;406:3926;2926:232:68;3047:107;2926:232;;;;3047:107;;;;;2926:232;;;3302:15:31;;;;406:3926;2926:232:68;3047:107;2926:232;;;;3047:107;;;;;2926:232;;;3382:57:31;;;;3047:107:68;;;;;;;2926:232;;3449:57:31;1818:1879;;;;406:3926;;4080:25;;;1831:4;4080:25;;406:3926;;;;;;;4080:25;;;;;;;;;:::i;:::-;4064:91;:::i;:::-;4063:92;;406:3926;4063:92;4059:192;;4264:60;;;;647:370;;;-1:-1:-1;545:85:69;;;;-1:-1:-1;545:85:69;;-1:-1:-1;545:85:69;;;;-1:-1:-1;545:85:69;;-1:-1:-1;545:85:69;;;;-1:-1:-1;545:85:69;647:370:31;;4264:60;3745:584;:::o;4059:192::-;4172:72;406:3926;;;;;4172:72;;;;;;;;;;:::i;:::-;;;;2225:112;2926:232:68;;;;;;;;;;;;;;;;1889:4:31;3047:107:68;;;;2926:232;;;2262:64:31;;2225:112;;;;;;;;;;;;;;;1818:1879;4080:25;3615:14;;4063:92;3615:14;;;4064:91;3615:14;;;;3604:84;3615:14;4080:25;3615:14;;:::i;:::-;3604:84;;;;:::i;:::-;3531:157;;;;;;;;;;;;;;1818:1879;;;;;406:3926;;;;;;;;:::i;:::-;:::o;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;406:3926:31;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;:::o;:::-;;;;;;;;;;;;;;;;3626:1;406:3926;;;;;;;3626:1;406:3926;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;406:3926:31;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::o;5082:2996:71:-;;;;;;5315:36;406:3926:31;5315:36:71;;:::i;:::-;5396:2494;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;406:3926:31;5396:2494:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5340:4;5396:2494;;;;;;;;;;;;;;;;;;;;5082:2996;7983:91;;;;;;5082:2996;;;;;:::o;7983:91::-;8012:55;8046:6;;;8054;5396:2494;8046:6;;406:3926:31;8054:6:71;;406:3926:31;8012:55:71;;:::i;:::-;7983:91;;;;;;;5396:2494;;;;;;;;5340:4;5396:2494;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;713:2486:67;869:2326;;406:3926:31;;713:2486:67;869:2326;;;713:2486;;:::o;869:2326::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5340:4:71;869:2326:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;713:2486::o;3963:1207:70:-;;;;;;4152:1014;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3963:1207;4152:1014;;;;;;;;;3963:1207;:::o;4152:1014::-;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"methodIdentifiers":{"recoverSapientSignatureCompact(bytes32,bytes)":"898bd921"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"authenticatorData\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"clientDataJSON\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"challengeIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"typeIndex\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"internalType\":\"struct WebAuthn.WebAuthnAuth\",\"name\":\"_webAuthnAuth\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"_requireUserVerification\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"_x\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_y\",\"type\":\"bytes32\"}],\"name\":\"InvalidPasskeySignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_digest\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"recoverSapientSignatureCompact\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Agustin Aguilar, Michael Standen\",\"kind\":\"dev\",\"methods\":{\"recoverSapientSignatureCompact(bytes32,bytes)\":{\"params\":{\"digest\":\"The digest of the payload\",\"signature\":\"The signature to recover the image hash from\"},\"returns\":{\"_0\":\"The recovered image hash\"}}},\"title\":\"Passkeys\",\"version\":1},\"userdoc\":{\"errors\":{\"InvalidPasskeySignature((bytes,string,uint256,uint256,bytes32,bytes32),bool,bytes32,bytes32)\":[{\"notice\":\"Error thrown when the passkey signature is invalid\"}]},\"kind\":\"user\",\"methods\":{\"recoverSapientSignatureCompact(bytes32,bytes)\":{\"notice\":\"Recovers the image hash of a given signature, using a hashed payload\"}},\"notice\":\"A sapient signer for passkeys\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/extensions/passkeys/Passkeys.sol\":\"Passkeys\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/extensions/passkeys/Passkeys.sol\":{\"keccak256\":\"0xa3c8da3c839300ae585fcadb8f47c0923ca49be4c4abaf53ae385fa80bda3709\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://16b20356cccdf9b5069f222b6eda3037b925b42462aeaef516ca024547f13894\",\"dweb:/ipfs/QmdigoYrscBefb9Lz9hiBsTu54vCw6o7VtkUVKNrbLrXir\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/interfaces/ISapient.sol\":{\"keccak256\":\"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489\",\"dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn\"]},\"src/utils/Base64.sol\":{\"keccak256\":\"0xcac0262a4cd9b8ad3097dbbeeddb715d1bb00de216428328044f2543ef1b7dd1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e53e555db05754733333946af30995887e7274d617744b1205f3cd8648fab3b4\",\"dweb:/ipfs/Qme9hZfFyKCMLNWqA1vK3a82k7kXznkpid4FeBFQdS67WR\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"src/utils/LibOptim.sol\":{\"keccak256\":\"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81\",\"dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x\"]},\"src/utils/P256.sol\":{\"keccak256\":\"0x15f366eef2850bb0e8a608e51f66c1caed19841631000eedc05ff34a0de38d7e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5c9403d13cecb87a232d241226bc921667d958bc68876d012e7a68a2f0df7fb7\",\"dweb:/ipfs/QmeUnWx58EzjRTmBjLAdMzswDjvuAcThP5gaUWQximCukH\"]},\"src/utils/WebAuthn.sol\":{\"keccak256\":\"0x6f825387da39964728d423244ed952709cfdeba164ca7d88a12922aa8159e52b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c8917c9c76d63df994c860f96be1d1ae68620105a35962245ed63d397048bb2e\",\"dweb:/ipfs/QmbHxKsUhc2nEyBinPSXAR9pMjLChKW2wpc9XYfddXU3rG\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"struct WebAuthn.WebAuthnAuth","name":"_webAuthnAuth","type":"tuple","components":[{"internalType":"bytes","name":"authenticatorData","type":"bytes"},{"internalType":"string","name":"clientDataJSON","type":"string"},{"internalType":"uint256","name":"challengeIndex","type":"uint256"},{"internalType":"uint256","name":"typeIndex","type":"uint256"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}]},{"internalType":"bool","name":"_requireUserVerification","type":"bool"},{"internalType":"bytes32","name":"_x","type":"bytes32"},{"internalType":"bytes32","name":"_y","type":"bytes32"}],"type":"error","name":"InvalidPasskeySignature"},{"inputs":[{"internalType":"bytes32","name":"_digest","type":"bytes32"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"view","type":"function","name":"recoverSapientSignatureCompact","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]}],"devdoc":{"kind":"dev","methods":{"recoverSapientSignatureCompact(bytes32,bytes)":{"params":{"digest":"The digest of the payload","signature":"The signature to recover the image hash from"},"returns":{"_0":"The recovered image hash"}}},"version":1},"userdoc":{"kind":"user","methods":{"recoverSapientSignatureCompact(bytes32,bytes)":{"notice":"Recovers the image hash of a given signature, using a hashed payload"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/extensions/passkeys/Passkeys.sol":"Passkeys"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/extensions/passkeys/Passkeys.sol":{"keccak256":"0xa3c8da3c839300ae585fcadb8f47c0923ca49be4c4abaf53ae385fa80bda3709","urls":["bzz-raw://16b20356cccdf9b5069f222b6eda3037b925b42462aeaef516ca024547f13894","dweb:/ipfs/QmdigoYrscBefb9Lz9hiBsTu54vCw6o7VtkUVKNrbLrXir"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/interfaces/ISapient.sol":{"keccak256":"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359","urls":["bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489","dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn"],"license":"Apache-2.0"},"src/utils/Base64.sol":{"keccak256":"0xcac0262a4cd9b8ad3097dbbeeddb715d1bb00de216428328044f2543ef1b7dd1","urls":["bzz-raw://e53e555db05754733333946af30995887e7274d617744b1205f3cd8648fab3b4","dweb:/ipfs/Qme9hZfFyKCMLNWqA1vK3a82k7kXznkpid4FeBFQdS67WR"],"license":"MIT"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"src/utils/LibOptim.sol":{"keccak256":"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde","urls":["bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81","dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x"],"license":"Apache-2.0"},"src/utils/P256.sol":{"keccak256":"0x15f366eef2850bb0e8a608e51f66c1caed19841631000eedc05ff34a0de38d7e","urls":["bzz-raw://5c9403d13cecb87a232d241226bc921667d958bc68876d012e7a68a2f0df7fb7","dweb:/ipfs/QmeUnWx58EzjRTmBjLAdMzswDjvuAcThP5gaUWQximCukH"],"license":"MIT"},"src/utils/WebAuthn.sol":{"keccak256":"0x6f825387da39964728d423244ed952709cfdeba164ca7d88a12922aa8159e52b","urls":["bzz-raw://c8917c9c76d63df994c860f96be1d1ae68620105a35962245ed63d397048bb2e","dweb:/ipfs/QmbHxKsUhc2nEyBinPSXAR9pMjLChKW2wpc9XYfddXU3rG"],"license":"MIT"}},"version":1},"id":31} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Passkeys.t.sol/LibString.json b/contracts/artifacts/wallet-contracts-v3/Passkeys.t.sol/LibString.json new file mode 100644 index 00000000..84541e82 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Passkeys.t.sol/LibString.json @@ -0,0 +1 @@ +{"abi":[],"bytecode":{"object":"0x60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea26469706673582212203ccdc6cdf1ec00d665a2efa8dd35bf8d8a6ec82d11017a6a338a4b13f603da7364736f6c634300081c0033","sourceMap":"22073:607:76:-:0;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x600080fdfea26469706673582212203ccdc6cdf1ec00d665a2efa8dd35bf8d8a6ec82d11017a6a338a4b13f603da7364736f6c634300081c0033","sourceMap":"22073:607:76:-:0;;","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/extensions/passkeys/Passkeys.t.sol\":\"LibString\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/extensions/passkeys/Passkeys.sol\":{\"keccak256\":\"0xa3c8da3c839300ae585fcadb8f47c0923ca49be4c4abaf53ae385fa80bda3709\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://16b20356cccdf9b5069f222b6eda3037b925b42462aeaef516ca024547f13894\",\"dweb:/ipfs/QmdigoYrscBefb9Lz9hiBsTu54vCw6o7VtkUVKNrbLrXir\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/interfaces/ISapient.sol\":{\"keccak256\":\"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489\",\"dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn\"]},\"src/utils/Base64.sol\":{\"keccak256\":\"0xcac0262a4cd9b8ad3097dbbeeddb715d1bb00de216428328044f2543ef1b7dd1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e53e555db05754733333946af30995887e7274d617744b1205f3cd8648fab3b4\",\"dweb:/ipfs/Qme9hZfFyKCMLNWqA1vK3a82k7kXznkpid4FeBFQdS67WR\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"src/utils/LibOptim.sol\":{\"keccak256\":\"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81\",\"dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x\"]},\"src/utils/P256.sol\":{\"keccak256\":\"0x15f366eef2850bb0e8a608e51f66c1caed19841631000eedc05ff34a0de38d7e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5c9403d13cecb87a232d241226bc921667d958bc68876d012e7a68a2f0df7fb7\",\"dweb:/ipfs/QmeUnWx58EzjRTmBjLAdMzswDjvuAcThP5gaUWQximCukH\"]},\"src/utils/WebAuthn.sol\":{\"keccak256\":\"0x6f825387da39964728d423244ed952709cfdeba164ca7d88a12922aa8159e52b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c8917c9c76d63df994c860f96be1d1ae68620105a35962245ed63d397048bb2e\",\"dweb:/ipfs/QmbHxKsUhc2nEyBinPSXAR9pMjLChKW2wpc9XYfddXU3rG\"]},\"test/extensions/passkeys/Passkeys.t.sol\":{\"keccak256\":\"0x2c98295442a0256c9dd22ae59464f2d1c9052bc69e5986e004735e1c7449d6f0\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://55a790bb937dd6621ba90a66543e5080c171651f5555ad907bbf519199567a03\",\"dweb:/ipfs/QmeiCDeAjkoUj2As3yyBJez8F3xKEs3iS6bGJQw7QY6td5\"]},\"test/utils/PrimitivesRPC.sol\":{\"keccak256\":\"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe\",\"dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv\"]},\"test/utils/TestUtils.sol\":{\"keccak256\":\"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad\",\"dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/extensions/passkeys/Passkeys.t.sol":"LibString"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/extensions/passkeys/Passkeys.sol":{"keccak256":"0xa3c8da3c839300ae585fcadb8f47c0923ca49be4c4abaf53ae385fa80bda3709","urls":["bzz-raw://16b20356cccdf9b5069f222b6eda3037b925b42462aeaef516ca024547f13894","dweb:/ipfs/QmdigoYrscBefb9Lz9hiBsTu54vCw6o7VtkUVKNrbLrXir"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/interfaces/ISapient.sol":{"keccak256":"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359","urls":["bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489","dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn"],"license":"Apache-2.0"},"src/utils/Base64.sol":{"keccak256":"0xcac0262a4cd9b8ad3097dbbeeddb715d1bb00de216428328044f2543ef1b7dd1","urls":["bzz-raw://e53e555db05754733333946af30995887e7274d617744b1205f3cd8648fab3b4","dweb:/ipfs/Qme9hZfFyKCMLNWqA1vK3a82k7kXznkpid4FeBFQdS67WR"],"license":"MIT"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"src/utils/LibOptim.sol":{"keccak256":"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde","urls":["bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81","dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x"],"license":"Apache-2.0"},"src/utils/P256.sol":{"keccak256":"0x15f366eef2850bb0e8a608e51f66c1caed19841631000eedc05ff34a0de38d7e","urls":["bzz-raw://5c9403d13cecb87a232d241226bc921667d958bc68876d012e7a68a2f0df7fb7","dweb:/ipfs/QmeUnWx58EzjRTmBjLAdMzswDjvuAcThP5gaUWQximCukH"],"license":"MIT"},"src/utils/WebAuthn.sol":{"keccak256":"0x6f825387da39964728d423244ed952709cfdeba164ca7d88a12922aa8159e52b","urls":["bzz-raw://c8917c9c76d63df994c860f96be1d1ae68620105a35962245ed63d397048bb2e","dweb:/ipfs/QmbHxKsUhc2nEyBinPSXAR9pMjLChKW2wpc9XYfddXU3rG"],"license":"MIT"},"test/extensions/passkeys/Passkeys.t.sol":{"keccak256":"0x2c98295442a0256c9dd22ae59464f2d1c9052bc69e5986e004735e1c7449d6f0","urls":["bzz-raw://55a790bb937dd6621ba90a66543e5080c171651f5555ad907bbf519199567a03","dweb:/ipfs/QmeiCDeAjkoUj2As3yyBJez8F3xKEs3iS6bGJQw7QY6td5"],"license":"Apache-2.0"},"test/utils/PrimitivesRPC.sol":{"keccak256":"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe","urls":["bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe","dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv"],"license":"Apache-2.0"},"test/utils/TestUtils.sol":{"keccak256":"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79","urls":["bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad","dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa"],"license":"Apache-2.0"}},"version":1},"id":76} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Passkeys.t.sol/PasskeysImp.json b/contracts/artifacts/wallet-contracts-v3/Passkeys.t.sol/PasskeysImp.json new file mode 100644 index 00000000..5aa62c40 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Passkeys.t.sol/PasskeysImp.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"decodeSignaturePub","inputs":[{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"_webAuthnAuth","type":"tuple","internalType":"struct WebAuthn.WebAuthnAuth","components":[{"name":"authenticatorData","type":"bytes","internalType":"bytes"},{"name":"clientDataJSON","type":"string","internalType":"string"},{"name":"challengeIndex","type":"uint256","internalType":"uint256"},{"name":"typeIndex","type":"uint256","internalType":"uint256"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"}]},{"name":"_requireUserVerification","type":"bool","internalType":"bool"},{"name":"_x","type":"bytes32","internalType":"bytes32"},{"name":"_y","type":"bytes32","internalType":"bytes32"},{"name":"_metadata","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"type":"function","name":"recoverSapientSignatureCompact","inputs":[{"name":"_digest","type":"bytes32","internalType":"bytes32"},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"rootForPasskeyPub","inputs":[{"name":"_requireUserVerification","type":"bool","internalType":"bool"},{"name":"_x","type":"bytes32","internalType":"bytes32"},{"name":"_y","type":"bytes32","internalType":"bytes32"},{"name":"_metadata","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"type":"error","name":"InvalidPasskeySignature","inputs":[{"name":"_webAuthnAuth","type":"tuple","internalType":"struct WebAuthn.WebAuthnAuth","components":[{"name":"authenticatorData","type":"bytes","internalType":"bytes"},{"name":"clientDataJSON","type":"string","internalType":"string"},{"name":"challengeIndex","type":"uint256","internalType":"uint256"},{"name":"typeIndex","type":"uint256","internalType":"uint256"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"}]},{"name":"_requireUserVerification","type":"bool","internalType":"bool"},{"name":"_x","type":"bytes32","internalType":"bytes32"},{"name":"_y","type":"bytes32","internalType":"bytes32"}]}],"bytecode":{"object":"0x60808060405234601557610c16908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c8063669ad1ec14610047578063898bd921146100425763b933b4991461003d57600080fd5b6103fe565b6101c0565b346100db5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100db5760043567ffffffffffffffff81116100db576100ab61009c6100c09236906004016100e0565b906100a56104ff565b50610739565b9160405195869560a0875260a087019061016d565b93151560208601526040850152606084015260808301520390f35b600080fd5b9181601f840112156100db5782359167ffffffffffffffff83116100db57602083818601950101116100db57565b919082519283825260005b8481106101585750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201610119565b9060a080610199610187855160c0865260c086019061010e565b6020860151858203602087015261010e565b93604081015160408501526060810151606085015260808101516080850152015191015290565b346100db5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100db5760043560243567ffffffffffffffff81116100db5761021561021b9136906004016100e0565b90610739565b939094604093929351906020820152602081526102396040826104a8565b60009086856102488493610a3b565b9260208601519384519560408801516060890151835192600d8401907f226368616c6c656e6765223a220000000000000000000000000000000000000060981c8652838a019060228c600d878901011091602d8885010151901a141691602081601389012092012014169189826014011090821760801c109060207f2274797065223a22776562617574686e2e67657422000000000000000000000060581c918a01015160581c1416169152865180519189151560021b60011780602184015116149060208411161695866103b4575b50505061032f945083610397575b50505015151590565b61035c57600083815260208681526040808320858452878352818420908452825291829020915191825290f35b61039385846040519485947f12a693e600000000000000000000000000000000000000000000000000000000865260048601610543565b0390fd5b6103ac9350608086015160a087015191610b48565b868538610326565b909194506020808095506001945086840101809882808084519a019601940160025afa831b5afa5192523d156103ef57868583388080610318565bfe5b359081151582036100db57565b346100db5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100db5760043580151581036100db57610471602091602435604435906064359190600052602052604060002091600052602052604060002090600052602052604060002090565b604051908152f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176104e957604052565b610479565b604051906104fd60c0836104a8565b565b6040519060c0820182811067ffffffffffffffff8211176104e957604052600060a08360608152606060208201528260408201528260608201528260808201520152565b909261055c60609396959460808452608084019061016d565b951515602083015260408201520152565b90156105765790565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90929192836001116100db5783116100db57600101917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b909392938483116100db5784116100db578101920390565b92919267ffffffffffffffff82116104e95760405191610640601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016602001846104a8565b8294818452818301116100db578281602093846000960137010152565b9080601f830112156100db57816020610678933591016105f8565b90565b9060a0828203126100db57813567ffffffffffffffff81116100db5782019060c0828203126100db576106ac6104ee565b91803567ffffffffffffffff81116100db57826106ca91830161065d565b8352602081013567ffffffffffffffff81116100db5760a0926106ee91830161065d565b6020840152604081013560408401526060810135606084015260808101356080840152013560a082015291610725602083016103f1565b916040810135916080606083013592013590565b6107416104ff565b926000610777610751858561056d565b357fff000000000000000000000000000000000000000000000000000000000000001690565b7f20000000000000000000000000000000000000000000000000000000000000008116610a1a577f0100000000000000000000000000000000000000000000000000000000000000811615159460f882901c9087866107ea6107e460f987901c6001165b60010160ff1690565b60ff1690565b6107fd6107e46001600288901c166107db565b906108236107e46107db601061081883600160038d901c1684565b991660041c600f1690565b967f4000000000000000000000000000000000000000000000000000000000000000600191166109f5575b956109ce956109b995602061091d6108ca886109126109f19e996108ca6109e39f6108bd61095f9c6109a49f926108d193929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290830180938c886105e0565b36916105f8565b885283929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9081019687926105e0565b9101528b929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9060408d015289929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9060608b015287602090929192830135920190565b9060808a015286602090929192830135920190565b9060a089015285602090929192830135920190565b909481013591602090910190565b5091565b509193959092949650610a0c846001013590602190565b90979593919694929061084e565b5050925081610a3492610a2c926105a5565b81019061067b565b9091929394565b80516060929181610a4a575050565b9092506003600284010460021b604051937f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566601f527f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f603f5260208501928286019160208301946020828401019060046003835195600085525b0191603f8351818160121c16516000538181600c1c1651600153818160061c165160025316516003536000518152019087821015610b0757600490600390610ac4565b5095506000936003936040925201604052066002048093037f3d3d000000000000000000000000000000000000000000000000000000000000815252038252565b9290939193604051938452602084015283604084015260608301526080820152600080526020600060a0836101005afa503d15610bae575b507f7fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a860005160011491111090565b60209060a03d916dd01ea45f9efd5c54f037fa57ea1a5afa503d15610bd35738610b80565b63d0d5039b3d526004601cfdfea264697066735822122045a03a8036248a6d022686b10586e475ad0f06c23b143adc039bcc18adad1b9f64736f6c634300081c0033","sourceMap":"474:576:76:-:0;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436101561001257600080fd5b60003560e01c8063669ad1ec14610047578063898bd921146100425763b933b4991461003d57600080fd5b6103fe565b6101c0565b346100db5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100db5760043567ffffffffffffffff81116100db576100ab61009c6100c09236906004016100e0565b906100a56104ff565b50610739565b9160405195869560a0875260a087019061016d565b93151560208601526040850152606084015260808301520390f35b600080fd5b9181601f840112156100db5782359167ffffffffffffffff83116100db57602083818601950101116100db57565b919082519283825260005b8481106101585750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201610119565b9060a080610199610187855160c0865260c086019061010e565b6020860151858203602087015261010e565b93604081015160408501526060810151606085015260808101516080850152015191015290565b346100db5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100db5760043560243567ffffffffffffffff81116100db5761021561021b9136906004016100e0565b90610739565b939094604093929351906020820152602081526102396040826104a8565b60009086856102488493610a3b565b9260208601519384519560408801516060890151835192600d8401907f226368616c6c656e6765223a220000000000000000000000000000000000000060981c8652838a019060228c600d878901011091602d8885010151901a141691602081601389012092012014169189826014011090821760801c109060207f2274797065223a22776562617574686e2e67657422000000000000000000000060581c918a01015160581c1416169152865180519189151560021b60011780602184015116149060208411161695866103b4575b50505061032f945083610397575b50505015151590565b61035c57600083815260208681526040808320858452878352818420908452825291829020915191825290f35b61039385846040519485947f12a693e600000000000000000000000000000000000000000000000000000000865260048601610543565b0390fd5b6103ac9350608086015160a087015191610b48565b868538610326565b909194506020808095506001945086840101809882808084519a019601940160025afa831b5afa5192523d156103ef57868583388080610318565bfe5b359081151582036100db57565b346100db5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100db5760043580151581036100db57610471602091602435604435906064359190600052602052604060002091600052602052604060002090600052602052604060002090565b604051908152f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176104e957604052565b610479565b604051906104fd60c0836104a8565b565b6040519060c0820182811067ffffffffffffffff8211176104e957604052600060a08360608152606060208201528260408201528260608201528260808201520152565b909261055c60609396959460808452608084019061016d565b951515602083015260408201520152565b90156105765790565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90929192836001116100db5783116100db57600101917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b909392938483116100db5784116100db578101920390565b92919267ffffffffffffffff82116104e95760405191610640601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016602001846104a8565b8294818452818301116100db578281602093846000960137010152565b9080601f830112156100db57816020610678933591016105f8565b90565b9060a0828203126100db57813567ffffffffffffffff81116100db5782019060c0828203126100db576106ac6104ee565b91803567ffffffffffffffff81116100db57826106ca91830161065d565b8352602081013567ffffffffffffffff81116100db5760a0926106ee91830161065d565b6020840152604081013560408401526060810135606084015260808101356080840152013560a082015291610725602083016103f1565b916040810135916080606083013592013590565b6107416104ff565b926000610777610751858561056d565b357fff000000000000000000000000000000000000000000000000000000000000001690565b7f20000000000000000000000000000000000000000000000000000000000000008116610a1a577f0100000000000000000000000000000000000000000000000000000000000000811615159460f882901c9087866107ea6107e460f987901c6001165b60010160ff1690565b60ff1690565b6107fd6107e46001600288901c166107db565b906108236107e46107db601061081883600160038d901c1684565b991660041c600f1690565b967f4000000000000000000000000000000000000000000000000000000000000000600191166109f5575b956109ce956109b995602061091d6108ca886109126109f19e996108ca6109e39f6108bd61095f9c6109a49f926108d193929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290830180938c886105e0565b36916105f8565b885283929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9081019687926105e0565b9101528b929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9060408d015289929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9060608b015287602090929192830135920190565b9060808a015286602090929192830135920190565b9060a089015285602090929192830135920190565b909481013591602090910190565b5091565b509193959092949650610a0c846001013590602190565b90979593919694929061084e565b5050925081610a3492610a2c926105a5565b81019061067b565b9091929394565b80516060929181610a4a575050565b9092506003600284010460021b604051937f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566601f527f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f603f5260208501928286019160208301946020828401019060046003835195600085525b0191603f8351818160121c16516000538181600c1c1651600153818160061c165160025316516003536000518152019087821015610b0757600490600390610ac4565b5095506000936003936040925201604052066002048093037f3d3d000000000000000000000000000000000000000000000000000000000000815252038252565b9290939193604051938452602084015283604084015260608301526080820152600080526020600060a0836101005afa503d15610bae575b507f7fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a860005160011491111090565b60209060a03d916dd01ea45f9efd5c54f037fa57ea1a5afa503d15610bd35738610b80565b63d0d5039b3d526004601cfdfea264697066735822122045a03a8036248a6d022686b10586e475ad0f06c23b143adc039bcc18adad1b9f64736f6c634300081c0033","sourceMap":"474:576:76:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;1014:28;474:576;;;;;;;;:::i;:::-;;;;:::i;:::-;;1014:28;:::i;:::-;474:576;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;4024:28:31;474:576:76;;;;;;:::i;:::-;4024:28:31;;:::i;:::-;474:576:76;;;;;;;;4080:25:31;474:576:76;4080:25:31;;474:576:76;;4080:25:31;;;474:576:76;4080:25:31;;:::i;:::-;-1:-1:-1;5266:19:71;;;5315:36;5266:19;5315:36;;:::i;:::-;5396:2494;474:576:76;5396:2494:71;;;;;;;474:576:76;5396:2494:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;474:576:76;5396:2494:71;;;;;;;;;;;;;;;;;;;;;;;474:576:76;5396:2494:71;;;;;;;;;;;;;;;;;;;;;;;;;5340:4;5396:2494;;;;;;;;;474:576:76;5396:2494:71;;;;;;;;474:576:76;7983:91:71;;;4063:92:31;7983:91:71;;;;;474:576:76;4063:92:31;;;;474:576:76;;;;4063:92:31;4059:192;;-1:-1:-1;545:85:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;474:576:76;;;;;545:85:69;474:576:76;4059:192:31;4172:72;474:576:76;;;;4172:72:31;;;;;;474:576:76;4172:72:31;;;:::i;:::-;;;;7983:91:71;8012:55;8046:6;;5396:2494;8046:6;;474:576:76;8054:6:71;;;474:576:76;8012:55:71;;:::i;:::-;7983:91;;;;;5396:2494;;;;;474:576:76;5396:2494:71;;;;5340:4;5396:2494;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;474:576:76;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;678:60;474:576;;;;;;;;;647:370:31;;-1:-1:-1;545:85:69;;;;-1:-1:-1;545:85:69;;-1:-1:-1;545:85:69;;;;-1:-1:-1;545:85:69;;-1:-1:-1;545:85:69;;;;-1:-1:-1;545:85:69;647:370:31;;678:60:76;474:576;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;:::i;:::-;:::o;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;474:576:76;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::o;:::-;;;;;;:::o;:::-;;;;;;;;;;;;;;;;3626:1:31;474:576:76;;;;;;;3626:1:31;474:576:76;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;474:576:76;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::o;1021:2686:31:-;474:576:76;;:::i;:::-;1247:17:31;474:576:76;1797:13:31;;;;;:::i;:::-;;474:576:76;;;;1797:13:31;474:576:76;1823:12:31;;474:576:76;;;1881:12:31;;1880:19;;;474:576:76;;;;;;;1909:60:31;1937:32;474:576:76;;;;;;1938:26:31;474:576:76;;;;;;1937:32:31;474:576:76;;;;1909:60:31;1979:66;2013:32;474:576:76;;;;;;2014:26:31;474:576:76;1979:66:31;474:576:76;2127:57:31;2152:32;2153:26;2168:4;2055:62;2152:32;474:576:76;;;;;;2153:26:31;474:576:76;2055:62:31;474:576:76;;;;;;;;2127:57:31;2195:19;474:576:76;1889:4:31;2230:12;;2225:112;;1818:1879;2213:380:68;2926:232;2213:380;2926:232;2213:380;1831:4:31;474:576:76;2920:31:31;2213:380:68;;2926:232;2213:380;;2577:31:31;2926:232:68;2213:380;;;;;;;474:576:76;2213:380:68;;;;;2363:226;;;;;;;;;;;;;;;;;;;2213:380;;;474:576:76;;;;2577:31:31;;;;;:::i;:::-;474:576:76;;;:::i;:::-;2543:65:31;;2213:380:68;;;;;2363:226;;;;;;;;;;;;;;;;;;;2213:380;;;474:576:76;;;2920:31:31;;;;:::i;474:576:76:-;2882:28:31;;:70;2213:380:68;;;;;2363:226;;;;;;;;;;;;;;;;;;;2213:380;;;3007:28:31;2238:4;3007:28;;474:576:76;2213:380:68;;;;;2363:226;;;;;;;;;;;;;;;;;;;2213:380;;;3119:23:31;;;;474:576:76;2926:232:68;3047:107;2926:232;;;;3047:107;;;;;2926:232;;;3222:15:31;;;;474:576:76;2926:232:68;3047:107;2926:232;;;;3047:107;;;;;2926:232;;;3302:15:31;;;;474:576:76;2926:232:68;3047:107;2926:232;;;;3047:107;;;;;2926:232;;;3382:57:31;;3047:107:68;;;;;;;;;2926:232;;3449:57:31;1818:1879;1021:2686::o;2225:112::-;2926:232:68;;;;;;;;;;;1889:4:31;3047:107:68;;;;2926:232;;;2262:64:31;2225:112;;;;;;;;;;1818:1879;3615:14;;;;;3604:84;3615:14;;;;:::i;:::-;3604:84;;;;:::i;:::-;3531:157;;;;1818:1879;1021:2686::o;713:2486:67:-;869:2326;;474:576:76;;713:2486:67;869:2326;;;713:2486;;:::o;869:2326::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5340:4:71;869:2326:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;713:2486::o;3963:1207:70:-;;;;;;4152:1014;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3963:1207;4152:1014;;;;;;;;;3963:1207;:::o;4152:1014::-;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"methodIdentifiers":{"decodeSignaturePub(bytes)":"669ad1ec","recoverSapientSignatureCompact(bytes32,bytes)":"898bd921","rootForPasskeyPub(bool,bytes32,bytes32,bytes32)":"b933b499"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"authenticatorData\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"clientDataJSON\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"challengeIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"typeIndex\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"internalType\":\"struct WebAuthn.WebAuthnAuth\",\"name\":\"_webAuthnAuth\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"_requireUserVerification\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"_x\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_y\",\"type\":\"bytes32\"}],\"name\":\"InvalidPasskeySignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"decodeSignaturePub\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"authenticatorData\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"clientDataJSON\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"challengeIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"typeIndex\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"internalType\":\"struct WebAuthn.WebAuthnAuth\",\"name\":\"_webAuthnAuth\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"_requireUserVerification\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"_x\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_y\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_metadata\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_digest\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"recoverSapientSignatureCompact\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_requireUserVerification\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"_x\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_y\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_metadata\",\"type\":\"bytes32\"}],\"name\":\"rootForPasskeyPub\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"recoverSapientSignatureCompact(bytes32,bytes)\":{\"params\":{\"digest\":\"The digest of the payload\",\"signature\":\"The signature to recover the image hash from\"},\"returns\":{\"_0\":\"The recovered image hash\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"InvalidPasskeySignature((bytes,string,uint256,uint256,bytes32,bytes32),bool,bytes32,bytes32)\":[{\"notice\":\"Error thrown when the passkey signature is invalid\"}]},\"kind\":\"user\",\"methods\":{\"recoverSapientSignatureCompact(bytes32,bytes)\":{\"notice\":\"Recovers the image hash of a given signature, using a hashed payload\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/extensions/passkeys/Passkeys.t.sol\":\"PasskeysImp\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/extensions/passkeys/Passkeys.sol\":{\"keccak256\":\"0xa3c8da3c839300ae585fcadb8f47c0923ca49be4c4abaf53ae385fa80bda3709\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://16b20356cccdf9b5069f222b6eda3037b925b42462aeaef516ca024547f13894\",\"dweb:/ipfs/QmdigoYrscBefb9Lz9hiBsTu54vCw6o7VtkUVKNrbLrXir\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/interfaces/ISapient.sol\":{\"keccak256\":\"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489\",\"dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn\"]},\"src/utils/Base64.sol\":{\"keccak256\":\"0xcac0262a4cd9b8ad3097dbbeeddb715d1bb00de216428328044f2543ef1b7dd1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e53e555db05754733333946af30995887e7274d617744b1205f3cd8648fab3b4\",\"dweb:/ipfs/Qme9hZfFyKCMLNWqA1vK3a82k7kXznkpid4FeBFQdS67WR\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"src/utils/LibOptim.sol\":{\"keccak256\":\"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81\",\"dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x\"]},\"src/utils/P256.sol\":{\"keccak256\":\"0x15f366eef2850bb0e8a608e51f66c1caed19841631000eedc05ff34a0de38d7e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5c9403d13cecb87a232d241226bc921667d958bc68876d012e7a68a2f0df7fb7\",\"dweb:/ipfs/QmeUnWx58EzjRTmBjLAdMzswDjvuAcThP5gaUWQximCukH\"]},\"src/utils/WebAuthn.sol\":{\"keccak256\":\"0x6f825387da39964728d423244ed952709cfdeba164ca7d88a12922aa8159e52b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c8917c9c76d63df994c860f96be1d1ae68620105a35962245ed63d397048bb2e\",\"dweb:/ipfs/QmbHxKsUhc2nEyBinPSXAR9pMjLChKW2wpc9XYfddXU3rG\"]},\"test/extensions/passkeys/Passkeys.t.sol\":{\"keccak256\":\"0x2c98295442a0256c9dd22ae59464f2d1c9052bc69e5986e004735e1c7449d6f0\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://55a790bb937dd6621ba90a66543e5080c171651f5555ad907bbf519199567a03\",\"dweb:/ipfs/QmeiCDeAjkoUj2As3yyBJez8F3xKEs3iS6bGJQw7QY6td5\"]},\"test/utils/PrimitivesRPC.sol\":{\"keccak256\":\"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe\",\"dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv\"]},\"test/utils/TestUtils.sol\":{\"keccak256\":\"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad\",\"dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"struct WebAuthn.WebAuthnAuth","name":"_webAuthnAuth","type":"tuple","components":[{"internalType":"bytes","name":"authenticatorData","type":"bytes"},{"internalType":"string","name":"clientDataJSON","type":"string"},{"internalType":"uint256","name":"challengeIndex","type":"uint256"},{"internalType":"uint256","name":"typeIndex","type":"uint256"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}]},{"internalType":"bool","name":"_requireUserVerification","type":"bool"},{"internalType":"bytes32","name":"_x","type":"bytes32"},{"internalType":"bytes32","name":"_y","type":"bytes32"}],"type":"error","name":"InvalidPasskeySignature"},{"inputs":[{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"pure","type":"function","name":"decodeSignaturePub","outputs":[{"internalType":"struct WebAuthn.WebAuthnAuth","name":"_webAuthnAuth","type":"tuple","components":[{"internalType":"bytes","name":"authenticatorData","type":"bytes"},{"internalType":"string","name":"clientDataJSON","type":"string"},{"internalType":"uint256","name":"challengeIndex","type":"uint256"},{"internalType":"uint256","name":"typeIndex","type":"uint256"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}]},{"internalType":"bool","name":"_requireUserVerification","type":"bool"},{"internalType":"bytes32","name":"_x","type":"bytes32"},{"internalType":"bytes32","name":"_y","type":"bytes32"},{"internalType":"bytes32","name":"_metadata","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"_digest","type":"bytes32"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"view","type":"function","name":"recoverSapientSignatureCompact","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bool","name":"_requireUserVerification","type":"bool"},{"internalType":"bytes32","name":"_x","type":"bytes32"},{"internalType":"bytes32","name":"_y","type":"bytes32"},{"internalType":"bytes32","name":"_metadata","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"rootForPasskeyPub","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]}],"devdoc":{"kind":"dev","methods":{"recoverSapientSignatureCompact(bytes32,bytes)":{"params":{"digest":"The digest of the payload","signature":"The signature to recover the image hash from"},"returns":{"_0":"The recovered image hash"}}},"version":1},"userdoc":{"kind":"user","methods":{"recoverSapientSignatureCompact(bytes32,bytes)":{"notice":"Recovers the image hash of a given signature, using a hashed payload"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/extensions/passkeys/Passkeys.t.sol":"PasskeysImp"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/extensions/passkeys/Passkeys.sol":{"keccak256":"0xa3c8da3c839300ae585fcadb8f47c0923ca49be4c4abaf53ae385fa80bda3709","urls":["bzz-raw://16b20356cccdf9b5069f222b6eda3037b925b42462aeaef516ca024547f13894","dweb:/ipfs/QmdigoYrscBefb9Lz9hiBsTu54vCw6o7VtkUVKNrbLrXir"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/interfaces/ISapient.sol":{"keccak256":"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359","urls":["bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489","dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn"],"license":"Apache-2.0"},"src/utils/Base64.sol":{"keccak256":"0xcac0262a4cd9b8ad3097dbbeeddb715d1bb00de216428328044f2543ef1b7dd1","urls":["bzz-raw://e53e555db05754733333946af30995887e7274d617744b1205f3cd8648fab3b4","dweb:/ipfs/Qme9hZfFyKCMLNWqA1vK3a82k7kXznkpid4FeBFQdS67WR"],"license":"MIT"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"src/utils/LibOptim.sol":{"keccak256":"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde","urls":["bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81","dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x"],"license":"Apache-2.0"},"src/utils/P256.sol":{"keccak256":"0x15f366eef2850bb0e8a608e51f66c1caed19841631000eedc05ff34a0de38d7e","urls":["bzz-raw://5c9403d13cecb87a232d241226bc921667d958bc68876d012e7a68a2f0df7fb7","dweb:/ipfs/QmeUnWx58EzjRTmBjLAdMzswDjvuAcThP5gaUWQximCukH"],"license":"MIT"},"src/utils/WebAuthn.sol":{"keccak256":"0x6f825387da39964728d423244ed952709cfdeba164ca7d88a12922aa8159e52b","urls":["bzz-raw://c8917c9c76d63df994c860f96be1d1ae68620105a35962245ed63d397048bb2e","dweb:/ipfs/QmbHxKsUhc2nEyBinPSXAR9pMjLChKW2wpc9XYfddXU3rG"],"license":"MIT"},"test/extensions/passkeys/Passkeys.t.sol":{"keccak256":"0x2c98295442a0256c9dd22ae59464f2d1c9052bc69e5986e004735e1c7449d6f0","urls":["bzz-raw://55a790bb937dd6621ba90a66543e5080c171651f5555ad907bbf519199567a03","dweb:/ipfs/QmeiCDeAjkoUj2As3yyBJez8F3xKEs3iS6bGJQw7QY6td5"],"license":"Apache-2.0"},"test/utils/PrimitivesRPC.sol":{"keccak256":"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe","urls":["bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe","dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv"],"license":"Apache-2.0"},"test/utils/TestUtils.sol":{"keccak256":"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79","urls":["bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad","dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa"],"license":"Apache-2.0"}},"version":1},"id":76} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Passkeys.t.sol/PasskeysTest.json b/contracts/artifacts/wallet-contracts-v3/Passkeys.t.sol/PasskeysTest.json new file mode 100644 index 00000000..da2aab89 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Passkeys.t.sol/PasskeysTest.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"excludeArtifacts","inputs":[],"outputs":[{"name":"excludedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"excludeContracts","inputs":[],"outputs":[{"name":"excludedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"excludeSelectors","inputs":[],"outputs":[{"name":"excludedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"excludeSenders","inputs":[],"outputs":[{"name":"excludedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"passkeysImp","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract PasskeysImp"}],"stateMutability":"view"},{"type":"function","name":"setUp","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"targetArtifactSelectors","inputs":[],"outputs":[{"name":"targetedArtifactSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzArtifactSelector[]","components":[{"name":"artifact","type":"string","internalType":"string"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetArtifacts","inputs":[],"outputs":[{"name":"targetedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"targetContracts","inputs":[],"outputs":[{"name":"targetedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"targetInterfaces","inputs":[],"outputs":[{"name":"targetedInterfaces_","type":"tuple[]","internalType":"struct StdInvariant.FuzzInterface[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"artifacts","type":"string[]","internalType":"string[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSelectors","inputs":[],"outputs":[{"name":"targetedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSenders","inputs":[],"outputs":[{"name":"targetedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"test_decodeSignature_abi","inputs":[{"name":"params","type":"tuple","internalType":"struct PasskeysTest.test_decodeSignature_abi_params","components":[{"name":"requireUserVerification","type":"bool","internalType":"bool"},{"name":"x","type":"bytes32","internalType":"bytes32"},{"name":"y","type":"bytes32","internalType":"bytes32"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"},{"name":"authenticatorData","type":"bytes","internalType":"bytes"},{"name":"challengeBytes","type":"bytes","internalType":"bytes"},{"name":"metadataHash","type":"bytes32","internalType":"bytes32"},{"name":"includeMetadata","type":"bool","internalType":"bool"},{"name":"typeValueSeed","type":"uint256","internalType":"uint256"},{"name":"originValueSeed","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_decodeSignature_packed","inputs":[{"name":"params","type":"tuple","internalType":"struct PasskeysTest.test_decodeSignature_packed_params","components":[{"name":"requireUserVerification","type":"bool","internalType":"bool"},{"name":"x","type":"bytes32","internalType":"bytes32"},{"name":"y","type":"bytes32","internalType":"bytes32"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"},{"name":"authenticatorData","type":"bytes","internalType":"bytes"},{"name":"challengeBytes","type":"bytes","internalType":"bytes"},{"name":"metadataHash","type":"bytes32","internalType":"bytes32"},{"name":"embedMetadata","type":"bool","internalType":"bool"},{"name":"typeValueSeed","type":"uint256","internalType":"uint256"},{"name":"originValueSeed","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_recoverSapientSignatureCompact_invalidSignature","inputs":[{"name":"params","type":"tuple","internalType":"struct PasskeysTest.RecoverParams","components":[{"name":"pkSeed","type":"uint256","internalType":"uint256"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"requireUserVerification","type":"bool","internalType":"bool"},{"name":"metadataHash","type":"bytes32","internalType":"bytes32"},{"name":"embedMetadata","type":"bool","internalType":"bool"},{"name":"originValueSeed","type":"uint256","internalType":"uint256"},{"name":"rpIdHash","type":"bytes32","internalType":"bytes32"},{"name":"signCount","type":"uint32","internalType":"uint32"}]},{"name":"wrongSeed","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_recoverSapientSignatureCompact_valid","inputs":[{"name":"params","type":"tuple","internalType":"struct PasskeysTest.RecoverParams","components":[{"name":"pkSeed","type":"uint256","internalType":"uint256"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"requireUserVerification","type":"bool","internalType":"bool"},{"name":"metadataHash","type":"bytes32","internalType":"bytes32"},{"name":"embedMetadata","type":"bool","internalType":"bool"},{"name":"originValueSeed","type":"uint256","internalType":"uint256"},{"name":"rpIdHash","type":"bytes32","internalType":"bytes32"},{"name":"signCount","type":"uint32","internalType":"uint32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_rootForPasskey_credentialId","inputs":[{"name":"requireUserVerification","type":"bool","internalType":"bool"},{"name":"x","type":"bytes32","internalType":"bytes32"},{"name":"y","type":"bytes32","internalType":"bytes32"},{"name":"credentialIdSeed","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_rootForPasskey_metadataHash","inputs":[{"name":"requireUserVerification","type":"bool","internalType":"bool"},{"name":"x","type":"bytes32","internalType":"bytes32"},{"name":"y","type":"bytes32","internalType":"bytes32"},{"name":"metadataHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_rootForPasskey_noMetadata","inputs":[{"name":"requireUserVerification","type":"bool","internalType":"bool"},{"name":"x","type":"bytes32","internalType":"bytes32"},{"name":"y","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false}],"bytecode":{"object":"0x60808060405234602f57600160ff19600c541617600c55600160ff19601f541617601f55617bea90816100358239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c80630a9254e414610167578063191a942e146101625780631ed7831c1461015d5780632940497d146101585780632ade3880146101535780633e5e3c231461014e5780633f7286f414610149578063472c3294146101445780635bbaf1e91461013f57806366d9a9a01461013a5780638002c8241461013557806385226c8114610130578063916a17c61461012b578063b0464fdc14610126578063b5508aa914610121578063b71014a81461011c578063ba414fa614610117578063be068d5414610112578063e20c9f711461010d578063fa123aa6146101085763fa7626d41461010357600080fd5b61349f565b612d08565b612c5d565b612271565b612190565b61206f565b611fc4565b611eeb565b611e12565b611cc2565b611650565b611586565b61143d565b61127b565b6111d0565b611125565b61104c565b610777565b6103ef565b610244565b61017c565b600091031261017757565b600080fd5b346101775760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017757604051610c3180820182811067ffffffffffffffff821117610228578291616f84833903906000f08015610223577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00601f549260081b16911617601f55600080f35b6134e0565b6104aa565b8015150361017757565b35906102428261022d565b565b346101775760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101775760043561027f8161022d565b601f546064359160443591602435906102c59060081c73ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff1690565b6040517fb933b49900000000000000000000000000000000000000000000000000000000815283151560048201526024810183905260448101859052606481018690529490602090869060849082905afa9283156102235761036495600094610366575b5061034c90610356949561033b6134fb565b948552602085015215156040840152565b60808201526158e8565b61035e61354c565b91615ba6565b005b61035694509061039061034c9260203d602011610398575b6103888183610568565b8101906134ec565b945090610329565b503d61037e565b602060408183019282815284518094520192019060005b8181106103c35750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016103b6565b346101775760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101775760405180602060165491828152019060166000527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b51242899060005b81811061047e5761047a8561046e81870382610568565b6040519182918261039f565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610457565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff82111761022857604052565b610100810190811067ffffffffffffffff82111761022857604052565b6101c0810190811067ffffffffffffffff82111761022857604052565b6080810190811067ffffffffffffffff82111761022857604052565b6101a0810190811067ffffffffffffffff82111761022857604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761022857604052565b6040519061024261016083610568565b6040519061024260c083610568565b6040519061024261022083610568565b604051906102426101e083610568565b67ffffffffffffffff811161022857601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b81601f8201121561017757803590610639826105e8565b926106476040519485610568565b8284526020838301011161017757816000926020809301838601378301015290565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101775760043567ffffffffffffffff8111610177576004019060006101608383031261077457506106bf6105a9565b916106c981610237565b83526020810135602084015260408101356040840152606081013560608401526080810135608084015260a081013567ffffffffffffffff81116101775782610713918301610622565b60a084015260c081013567ffffffffffffffff8111610177576101409261073b918301610622565b60c084015260e081013560e08401526107576101008201610237565b610100840152610120810135610120840152013561014082015290565b80fd5b346101775761078536610669565b60a0810151518015159081610ebd575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610177576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529015156004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561022357610ea8575b5060c081018051518015159081610e9d575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610177576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529015156004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561022357610e88575b5060608201511515737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610177576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529015156004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561022357610e73575b5060808201511515737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610177576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529015156004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561022357610e5e575b5061010082019061098e8251151590565b15610e4e5760e0830151151590737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610177576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529115156004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821561022357610a5292610e33575b505b6000610a1d6135f1565b9151604051809481927fc8bd0e4a000000000000000000000000000000000000000000000000000000008352600483016136d4565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561022357610ac3600091610c88948391610e11575b50610aba610a94610120890151615c8e565b916101808601928352610aab6101408a0151615c8e565b90816101a088015283516136fc565b84525151613844565b938460208401526001604084015260a086015194835190606088015190608089015192610aee6105b9565b9889526020890152604088015260016060880152608087015260a0860152846060840152610b82610b1f8751151590565b91610b75602089015197610b4960408b01519960e08c019a8b5191604051988995602087016138c5565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101855284610568565b6080850192835251151590565b8214610e0557610c28610be760405b60201760f81b7fff000000000000000000000000000000000000000000000000000000000000001660a086019081525b517fff000000000000000000000000000000000000000000000000000000000000001690565b915191610bfc604051938492602084016138f5565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610568565b8060c0840152610c546102ac601f5473ffffffffffffffffffffffffffffffffffffffff9060081c1690565b60405180809681947f669ad1ec000000000000000000000000000000000000000000000000000000008352600483016136d4565b03915afa8015610223576103649461016093610d94926000908190829083908490610dd8575b888a0152610140880152610120870152151561010086015290505b60e0840152610cf1610cdf610100850151151590565b82511515610ceb6139fe565b91615de9565b610d07610120840151602083015161035e613a39565b610d1d610140840151604083015161035e613a74565b610d4160e0840151516020815191012060a08301516020815191012061035e613aaf565b610d65602060e085015101516020815191012084516020815191012061035e613b10565b610d7e608060e08501510151606083015161035e613b71565b608060a060e0850151015191015161035e613bac565b610db3604060e083015101516020830151610dad613be7565b91615e55565b610dcc606060e083015101516040830151610dad613c48565b0151905161035e613c83565b50505050610cc991610dfb913d8091833e610df38183610568565b810190613940565b9394508493610cae565b610c28610be783610b91565b610e2d91503d8085833e610e258183610568565b8101906136ae565b38610a82565b80610e426000610e4893610568565b8061016c565b38610a11565b610a5290600060e0850152610a13565b80610e426000610e6d93610568565b3861097d565b80610e426000610e8293610568565b38610904565b80610e426000610e9793610568565b3861088b565b606491501038610819565b80610e426000610eb793610568565b38610807565b61ffff9150111538610795565b60005b838110610edd5750506000910152565b8181015183820152602001610ecd565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093610f2981518092818752878088019101610eca565b0116010190565b9080602083519182815201916020808360051b8301019401926000915b838310610f5c57505050505090565b9091929394602080610f98837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086600196030187528951610eed565b97019301930191939290610f4d565b602081016020825282518091526040820191602060408360051b8301019401926000915b838310610fda57505050505090565b909192939460208061103d837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190610f30565b97019301930191939290610fcb565b346101775760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017757601e5461108781613cbe565b906110956040519283610568565b80825260208201601e6000527f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e3506000915b8383106110db576040518061047a8782610fa7565b600260206001926040516110ee816104d9565b73ffffffffffffffffffffffffffffffffffffffff8654168152611113858701613dd8565b838201528152019201920191906110c6565b346101775760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101775760405180602060185491828152019060186000527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e9060005b8181106111a45761047a8561046e81870382610568565b825473ffffffffffffffffffffffffffffffffffffffff1684526020909301926001928301920161118d565b346101775760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101775760405180602060175491828152019060176000527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c159060005b81811061124f5761047a8561046e81870382610568565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201611238565b346101775760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610177576004356112b68161022d565b60243590604435906112c9606435615c8e565b928351151593737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610177576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529415156004860152600085602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa948515610223576113c495611428575b5060208151818301206113746102ac601f5473ffffffffffffffffffffffffffffffffffffffff9060081c1690565b60405180809981947fb933b4990000000000000000000000000000000000000000000000000000000083528a898b6004860190949392606092608083019615158352602083015260408201520152565b03915afa92831561022357610364956000946113ff575b506113ed906113f7949561033b6134fb565b60608201526158e8565b61035e613e30565b6113f79450906114206113ed9260203d602011610398576103888183610568565b9450906113db565b80610e42600061143793610568565b38611345565b346101775760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017757602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051908152f35b906020808351928381520192019060005b8181106114b05750505090565b82517fffffffff00000000000000000000000000000000000000000000000000000000168452602093840193909201916001016114a3565b602081016020825282518091526040820191602060408360051b8301019401926000915b83831061151b57505050505090565b9091929394602080611577837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08660019603018752895190836115678351604084526040840190610eed565b9201519084818403910152611492565b9701930193019193929061150c565b346101775760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017757601b546115c181613cbe565b906115cf6040519283610568565b80825260208201601b6000527f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc16000915b838310611615576040518061047a87826114e8565b60026020600192604051611628816104d9565b61163186613cd6565b815261163e858701613e91565b83820152815201920192019190611600565b346101775761165e36610669565b60a0810151518015159081611ca1575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610177576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529015156004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561022357611c8c575b5060c08101908151518015159081611c81575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610177576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529015156004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561022357611c6c575b5060608101511515737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610177576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529015156004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561022357611c57575b5060808101511515737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610177576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529015156004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561022357611c42575b506101008101805115611c365760e08201511515737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610177576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529015156004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561022357611c21575b505b61192060006118eb614262565b9451604051809381927fc8bd0e4a000000000000000000000000000000000000000000000000000000008352600483016136d4565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561022357611a829261199c611a22926000948591611c07575b5061198c611966610120890151615c8e565b916101608a0192835261197d6101408a0151615c8e565b90816101808c015283516136fc565b8852600160408901525151613844565b6020870152602085015190606087019182515260408601516020835101526119d36119c78751151590565b60408451019015159052565b805115158015611bfa575b611bea575b611a1c6060870151926080890193845152608088015160208551015260a088015160408551015288516060855101525192519151151590565b9161613f565b8060a0860152611a4e6102ac601f5473ffffffffffffffffffffffffffffffffffffffff9060081c1690565b60405180809581947f669ad1ec000000000000000000000000000000000000000000000000000000008352600483016136d4565b03915afa8015610223576103649360e092610140926000908190829083908490611bc5575b8688015261012086015261010085015215158584015290505b60c0820152611ae0611ad484830151151590565b85511515610ceb6142dc565b611af6610120820151604086015161035e614317565b611b0c610100820151602086015161035e614352565b611b3060c0820151516020815191012060a08601516020815191012061035e61438d565b611b54602060c083015101516020815191012082516020815191012061035e6143ee565b611b6d608060c08301510151606086015161035e61444f565b611b8660a060c08301510151608086015161035e61448a565b611b9f604060c083015101516020830151610dad6144c5565b611bb8606060c083015101516040830151610dad614526565b015191015161035e614587565b50505050611ac091611be0913d8091833e610df38183610568565b9394508493611aa7565b60e08601516080835101526119e3565b5060e086015115156119de565b611c1b91503d8087833e610e258183610568565b38611954565b80610e426000611c3093610568565b386118dc565b600060e08301526118de565b80610e426000611c5193610568565b38611857565b80610e426000611c6693610568565b386117de565b80610e426000611c7b93610568565b38611765565b6064915010386116f3565b80610e426000611c9b93610568565b386116e0565b61ffff915011153861166e565b906020611cbf928181520190610f30565b90565b346101775760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017757601a54611cfd81613cbe565b90611d0b6040519283610568565b808252601a60009081527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b838310611d50576040518061047a8782611cae565b600160208192611d5f85613cd6565b815201920192019190611d3b565b602081016020825282518091526040820191602060408360051b8301019401926000915b838310611da057505050505090565b9091929394602080611e03837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190611492565b97019301930191939290611d91565b346101775760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017757601d54611e4d81613cbe565b90611e5b6040519283610568565b80825260208201601d6000527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f6000915b838310611ea1576040518061047a8782611d6d565b60026020600192604051611eb4816104d9565b73ffffffffffffffffffffffffffffffffffffffff8654168152611ed9858701613e91565b83820152815201920192019190611e8c565b346101775760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017757601c54611f2681613cbe565b90611f346040519283610568565b80825260208201601c6000527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2116000915b838310611f7a576040518061047a8782611d6d565b60026020600192604051611f8d816104d9565b73ffffffffffffffffffffffffffffffffffffffff8654168152611fb2858701613e91565b83820152815201920192019190611f65565b346101775760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017757601954611fff81613cbe565b9061200d6040519283610568565b808252601960009081527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b838310612052576040518061047a8782611cae565b60016020819261206185613cd6565b81520192019201919061203d565b346101775760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610177576004356120aa8161022d565b60243590604435601f5490919060081c73ffffffffffffffffffffffffffffffffffffffff166040517fb933b49900000000000000000000000000000000000000000000000000000000815282151560048201526024810185905260448101849052600060648201529390602090859081806084810103915afa9182156102235761036494600093612167575b5061215a9061215f93946121496134fb565b938452602084015215156040830152565b6158e8565b61035e6145c2565b61215f93509061218861215a9260203d602011610398576103888183610568565b935090612137565b346101775760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101775760206121c9614623565b6040519015158152f35b359063ffffffff8216820361017757565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc610100910112610177576040519061221c826104f5565b81600435815260243560208201526122346044610237565b6040820152606435606082015261224b6084610237565b608082015260a43560a082015260c43560c082015260e061226c60e46121d3565b910152565b34610177576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610177576122aa366121e4565b61010435906122b76146ee565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561017757600061230b91604051809381927fb4d6c782000000000000000000000000000000000000000000000000000000008352600483016150e0565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561022357612c48575b5061234e61233c61512a565b926123478351616504565b8352616504565b8151811415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610177576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529015156004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561022357612c33575b5081516040517f7a675bb600000000000000000000000000000000000000000000000000000000815260048101919091526080816024816000737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19182156102235761246592608092600091612c16575b508552604051809381927f7a675bb6000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03816000737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811561022357600091612be7575b506020830190815260808201926124a68451151590565b15612bd7576060830151151593737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610177576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529415156004860152600085602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9485156102235761256a95612bc2575b505b60406060835101518151809781927fc453949e000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561022357600095600091612b9d575b506060830190815285604084015260808301958651525160208651015260408401926125cf6125c38551151590565b60408851019015159052565b606085015160808751015260608651016125e7613537565b90526001916125f68551151590565b612b94575b61268160c0870151610b4961261760e08a015163ffffffff1690565b6040519687936020850191927fff000000000000000000000000000000000000000000000000000000000000006025947fffffffff0000000000000000000000000000000000000000000000000000000093855260f81b16602084015260e01b1660218201520190565b610200840192835260208601956126e16000610bfc6126ae8a516040519283916020830160209181520190565b604051809381927fc8bd0e4a000000000000000000000000000000000000000000000000000000008352600483016136d4565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561022357600091612b7b575b507f3d000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000612762610bc161275c8551615249565b856152cf565b1614612b50575b60a0860190815261278b60a060c088019361278261530f565b85520151615c8e565b60e087019080825251151592737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610177576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529315156004850152600084602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9384156102235761281994612b3b575b505191519051916136fc565b94610100850186815261012086019660608851015284516040885101526020600061284b8351604051918280926136e5565b039060025afa1561022357602060006128888151806101408b015261287c8951610bfc60405193849288840161534a565b604051918280926136e5565b039060025afa15610223576000516101608701819052935160600151604080517f83211b40000000000000000000000000000000000000000000000000000000008152600481019290925260248201959095529384604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa938415610223576129ec966129356129ad956101e093610b4998600091600091612b0a575b508c51906020820152528c5190611a1c8c519151151590565b986101808201998a52612951845161294b615368565b906165fd565b976101a08301988952612967855161294b6153a3565b90816101c0850152519451985191519060208251920151926129876105b9565b9a8b978852602088015260408701526060860152608085015260a0840152015251151590565b955160208151910151906040519788947f12a693e6000000000000000000000000000000000000000000000000000000006020870152602486016153de565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610177576000612a4093604051809581927ff28dceb3000000000000000000000000000000000000000000000000000000008352600483016136d4565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af191821561022357612acd93602093612af5575b50601f54612a939060081c73ffffffffffffffffffffffffffffffffffffffff166102ac565b90519151916040518095819482937f898bd92100000000000000000000000000000000000000000000000000000000845260048401615408565b03915afa801561022357612add57005b6103649060203d602011610398576103888183610568565b80610e426000612b0493610568565b38612a6d565b9050612b2e915060403d604011612b34575b612b268183610568565b810190615233565b3861291c565b503d612b1c565b80610e426000612b4a93610568565b3861280d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8151018152612769565b612b8e913d8091833e610e258183610568565b38612709565b600592506125fb565b9050612bb991955060403d604011612b3457612b268183610568565b94909438612594565b80610e426000612bd193610568565b38612529565b61256a936000606085015261252b565b612c09915060803d608011612c0f575b612c018183610568565b8101906151d0565b3861248f565b503d612bf7565b612c2d9150833d8511612c0f57612c018183610568565b3861242a565b80610e426000612c4293610568565b386123c4565b80610e426000612c5793610568565b38612330565b346101775760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101775760405180602060155491828152019060156000527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4759060005b818110612cdc5761047a8561046e81870382610568565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201612cc5565b34610177576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017757612d41366121e4565b612d496146ee565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610177576000612d9d91604051809381927fb4d6c782000000000000000000000000000000000000000000000000000000008352600483016150e0565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156102235761348a575b50612dcb61541f565b612e156080612dda8451616504565b808552604051809381927f7a675bb6000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03816000737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156102235760009161346b575b5081526080820191612e518351151590565b1561345b576060810151151592737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610177576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529315156004850152600084602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa93841561022357612f1594613446575b505b60406060845101518151809681927fc453949e000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561022357600094600091613421575b50604084019081528460208501526060840194855152516020855101526040820193612f7a612f6e8651151590565b60408351019015159052565b60608301516080825101526060815101612f92613537565b9052612fa060019551151590565b613418575b61305760c084015161302b612fc160e087015163ffffffff1690565b6040519889936020850191927fff000000000000000000000000000000000000000000000000000000000000006025947fffffffff0000000000000000000000000000000000000000000000000000000093855260f81b16602084015260e01b1660218201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101875286610568565b6101c0840194855260208301926130846000610bfc6126ae87516040519283916020830160209181520190565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115610223576000916133ff575b507f3d000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000006130ff610bc161275c8551615249565b16146133d4575b6080860190815261311e60a08088019361278261530f565b60c087019080825251151592737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610177576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529315156004850152600084602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa938415610223576131ab94612b3b57505191519051916136fc565b94602060006131db60e0880189815261010089019960608b510152845160408b51015251604051918280926136e5565b039060025afa1561022357600061320d60209261287c835191826101208b015251610bfc60405193849288840161534a565b039060025afa15610223576000516101408501819052845160600151604080517f83211b40000000000000000000000000000000000000000000000000000000008152600481019290925260248201929092529081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561022357613355966020946132ec936132dd936000906000926133b2575b50817f7fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a881116133a0575b5083515282518701528451915190511515611a1c565b916101608601928352516158e8565b92610180850193845261331b6102ac601f5473ffffffffffffffffffffffffffffffffffffffff9060081c1690565b90519151916040518097819482937f898bd92100000000000000000000000000000000000000000000000000000000845260048401615408565b03915afa918215610223576103649360009361337d575b506101a0839101525161035e6154a9565b6101a0935061339a9060203d602011610398576103888183610568565b9261336c565b6133ab919250615276565b90386132c7565b90506133cd915060403d604011612b3457612b268183610568565b903861329d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8151018152613106565b613412913d8091833e610e258183610568565b386130ac565b60059450612fa5565b905061343d91945060403d604011612b3457612b268183610568565b93909338612f3f565b80610e42600061345593610568565b38612ed4565b612f159260006060830152612ed6565b613484915060803d608011612c0f57612c018183610568565b38612e3f565b80610e42600061349993610568565b38612dc2565b346101775760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017757602060ff601f54166040519015158152f35b6040513d6000823e3d90fd5b90816020910312610177575190565b6040519060a0820182811067ffffffffffffffff8211176102285760405260006080838281528260208201528260408201526060808201520152565b60405190613546602083610568565b60008252565b6040519061355b606083610568565b604082527f52504320726f6f742068617368207573696e67206d65746164617461486173686040837f436f6e747261637420726f6f7420686173682073686f756c64206d617463682060208201520152565b6040519060c0820182811067ffffffffffffffff82111761022857604052600060a08360608152606060208201528260408201528260608201528260808201520152565b604051906135fe82610512565b60606101a083828152600060208201526000604082015261361d6135ad565b83820152826080820152600060a08201528260c082015261363c6135ad565b60e08201526000610100820152600061012082015260006101408201526000610160820152826101808201520152565b81601f820112156101775760208151910190613687816105e8565b926136956040519485610568565b8184528183011161017757611cbf916020840190610eca565b9060208282031261017757815167ffffffffffffffff811161017757611cbf920161366c565b906020611cbf928181520190610eed565b906136f860209282815194859201610eca565b0190565b600c600291600f61024294969560296040519889947f7b2274797065223a220000000000000000000000000000000000000000000000602087015261374a815180926020868a019101610eca565b85017f222c226368616c6c656e6765223a22000000000000000000000000000000000083820152613785825180936020603885019101610eca565b01017f222c226f726967696e223a220000000000000000000000000000000000000000838201526137c0825180936020601b85019101610eca565b01017f227d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2810185520183610568565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600b019081600b1161385257565b613815565b906001820180921161385257565b9190820180921161385257565b9060a08061389e61388c855160c0865260c0860190610eed565b60208601518582036020870152610eed565b93604081015160408501526060810151606085015260808101516080850152015191015290565b9195949390926138df60809460a0855260a0850190613872565b9615156020840152604083015260608201520152565b7fff00000000000000000000000000000000000000000000000000000000000000600193921681526139308251809360208685019101610eca565b010190565b51906102428261022d565b9060a08282031261017757815167ffffffffffffffff81116101775782019060c082820312610177576139716105b9565b91805167ffffffffffffffff8111610177578261398f91830161366c565b8352602081015167ffffffffffffffff81116101775760a0926139b391830161366c565b6020840152604081015160408401526060810151606084015260808101516080840152015160a0820152916139ea60208301613935565b916040810151916080606083015192015190565b60405190613a0d604083610568565b601882527f414249204465636f64656420525556206d69736d6174636800000000000000006020830152565b60405190613a48604083610568565b601682527f414249204465636f6465642058206d69736d61746368000000000000000000006020830152565b60405190613a83604083610568565b601682527f414249204465636f6465642059206d69736d61746368000000000000000000006020830152565b60405190613abe606083610568565b602682527f736d6174636800000000000000000000000000000000000000000000000000006040837f414249204465636f6465642061757468656e74696361746f7244617461206d6960208201520152565b60405190613b1f606083610568565b602382527f74636800000000000000000000000000000000000000000000000000000000006040837f414249204465636f64656420636c69656e74446174614a534f4e206d69736d6160208201520152565b60405190613b80604083610568565b601682527f414249204465636f6465642052206d69736d61746368000000000000000000006020830152565b60405190613bbb604083610568565b601682527f414249204465636f6465642053206d69736d61746368000000000000000000006020830152565b60405190613bf6606083610568565b602382527f74636800000000000000000000000000000000000000000000000000000000006040837f414249204465636f646564206368616c6c656e6765496e646578206d69736d6160208201520152565b60405190613c57604083610568565b601e82527f414249204465636f6465642074797065496e646578206d69736d6174636800006020830152565b60405190613c92604083610568565b601d82527f414249204465636f646564206d65746164617461206d69736d617463680000006020830152565b67ffffffffffffffff81116102285760051b60200190565b9060405191600081548060011c9260018216918215613dce575b602085108314613da1578487528693926020850192918115613d655750600114613d23575b505061024292500383610568565b613d34919250600052602060002090565b906000915b848310613d4e57506102429350013880613d15565b805482840152869350602090920191600101613d39565b9050610242959293507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009150168252151560051b013880613d15565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f1693613cf0565b908154613de481613cbe565b92613df26040519485610568565b818452602084019060005260206000206000915b838310613e135750505050565b600160208192613e2285613cd6565b815201920192019190613e06565b60405190613e3f606083610568565b604082527f52504320726f6f742068617368207573696e672063726564656e7469616c49646040837f436f6e747261637420726f6f7420686173682073686f756c64206d617463682060208201520152565b60405181548082529092918390613eb16020830191600052602060002090565b926000905b8060078301106140be57610242945491818110614082575b81811061404b575b818110614014575b818110613fdd575b818110613fa6575b818110613f6f575b818110613f39575b10613f0c575b500383610568565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260200138613f04565b602083811b7fffffffff000000000000000000000000000000000000000000000000000000001685529093600191019301613efe565b604083901b7fffffffff00000000000000000000000000000000000000000000000000000000168452926001906020019301613ef6565b606083901b7fffffffff00000000000000000000000000000000000000000000000000000000168452926001906020019301613eee565b608083901b7fffffffff00000000000000000000000000000000000000000000000000000000168452926001906020019301613ee6565b60a083901b7fffffffff00000000000000000000000000000000000000000000000000000000168452926001906020019301613ede565b60c083901b7fffffffff00000000000000000000000000000000000000000000000000000000168452926001906020019301613ed6565b926020816140b66001938660e01b7fffffffff00000000000000000000000000000000000000000000000000000000169052565b019301613ece565b91600891935061010060019161422e87546140fd838260e01b7fffffffff00000000000000000000000000000000000000000000000000000000169052565b60c081901b7fffffffff0000000000000000000000000000000000000000000000000000000016602084015260a081901b7fffffffff00000000000000000000000000000000000000000000000000000000166040840152608081901b7fffffffff00000000000000000000000000000000000000000000000000000000166060840152606081901b7fffffffff00000000000000000000000000000000000000000000000000000000166080840152604081901b7fffffffff000000000000000000000000000000000000000000000000000000001660a0840152602081901b7fffffffff000000000000000000000000000000000000000000000000000000001660c08401527fffffffff000000000000000000000000000000000000000000000000000000001660e0830152565b019401920185929391613eb6565b604051906142498261052f565b6060808360008152600060208201528160408201520152565b6040519061426f8261054b565b606061018083828152600060208201526000604082015261428e6134fb565b8382015261429a61423c565b60808201528260a08201526142ad6135ad565b60c0820152600060e0820152600061010082015260006101208201526000610140820152826101608201520152565b604051906142eb604083610568565b601b82527f5061636b6564204465636f64656420525556206d69736d6174636800000000006020830152565b60405190614326604083610568565b601982527f5061636b6564204465636f6465642059206d69736d61746368000000000000006020830152565b60405190614361604083610568565b601982527f5061636b6564204465636f6465642058206d69736d61746368000000000000006020830152565b6040519061439c606083610568565b602982527f206d69736d6174636800000000000000000000000000000000000000000000006040837f5061636b6564204465636f6465642061757468656e74696361746f724461746160208201520152565b604051906143fd606083610568565b602682527f736d6174636800000000000000000000000000000000000000000000000000006040837f5061636b6564204465636f64656420636c69656e74446174614a534f4e206d6960208201520152565b6040519061445e604083610568565b601982527f5061636b6564204465636f6465642052206d69736d61746368000000000000006020830152565b60405190614499604083610568565b601982527f5061636b6564204465636f6465642053206d69736d61746368000000000000006020830152565b604051906144d4606083610568565b602682527f736d6174636800000000000000000000000000000000000000000000000000006040837f5061636b6564204465636f646564206368616c6c656e6765496e646578206d6960208201520152565b60405190614535606083610568565b602182527f68000000000000000000000000000000000000000000000000000000000000006040837f5061636b6564204465636f6465642074797065496e646578206d69736d61746360208201520152565b60405190614596604083610568565b602082527f5061636b6564204465636f646564206d65746164617461206d69736d617463686020830152565b604051906145d1606083610568565b603e82527f52504320726f6f74206861736820776974686f7574206d6574616461746100006040837f436f6e747261637420726f6f7420686173682073686f756c64206d617463682060208201520152565b60085460ff1680156146325790565b506040517f667f9d7000000000000000000000000000000000000000000000000000000000815260208180600481017f6661696c65640000000000000000000000000000000000000000000000000000846040830192737109709ecfa91a80626ff3989d68f67f5b1dd12d815201520381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115610223576000916146cf575b50151590565b6146e8915060203d602011610398576103888183610568565b386146c9565b604051906146fe61084083610568565b61081282527f1fe3bee27da71e64736f6c634300081a00330000000000000000000000000000610820837f3d604052610216565b60008060006ffffffffeffffffffffffffffffffffff6060208201527f601b19808687098188890982838389096004098384858485093d510985868b8c60408201527f096003090891508384828308850385848509089650838485858609600809850360608201527f85868a880385088509089550505050808188880960020991505093509350939060808201527f50565b81513d83015160408401516ffffffffeffffffffffffffffffffffff6060a08201527f601b19808384098183840982838388096004098384858485093d510985868a8b60c08201527f096003090896508384828308850385898a09089150610102848587890960020960e08201527f85868787880960080987038788878a0387088c0908848b523d8b015260408a016101008201527f52565b505050505050505050565b81513d830151604084015185513d870151606101208201527f408801518361013d578287523d870182905260408701819052610102565b80616101408201527f0157578587523d870185905260408701849052610102565b6ffffffffeffffff6101608201527fffffffffffffffffff60601b19808586098183840982818a09985082838583096101808201527f89099750508188830383838809089450818783038384898509870908935050826101a08201527f6101be57836101be576101b28a89610082565b50505050505050505050565b806101c08201527f8485098181860982828a09985082838a8b0884038483860386898a09080891506101e08201527f6102088384868a0988098485848c09860386878789038f088a0908848d523d8d6102008201527f015260408c0152565b505050505050505050505050565b6020357fffffffff006102208201527cffffffffffffffffbce6faada7179e84f3b9cac2fc6325513d6040357f6102408201527f7fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a86102608201527f8111156102695782035b602061080052602061082052602061084052806108606102808201527f526002830361088052826108a0526ffffffffeffffffffffffffffffffffff606102a08201527f601b198060031860205260603560803560203d60c061080060055afa60203d146102c08201527f16837f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e276102e08201527fd2604b8585873d5189898a0908090884838409148483108585101688871087156103008201527f10898b108b151016609f3611161616166103195760206080f35b60809182523d6103208201527f820152600160c08190527f6b17d1f2e12c4247f8bce6e563a440f277037d812d6103408201527feb33a0f4a13945d898c2966102009081527f4fe342e2fe1a7f9b8ee7eb4a7c0f6103608201527f9e162bce33576b315ececbb6406837bf51f53d909101526102405261038992506103808201527f9050610100610082565b610397610200610400610082565b6103a761010060806103a08201527f61018061010d565b6103b7610200608061028061010d565b6103c861020061016103c08201527e61030061010d565b6103d961020061018061038061010d565b6103e96104006103e08201527f608061048061010d565b6103fa61040061010061050061010d565b61040b61046104008201527e61018061058061010d565b61041c61040061020061060061010d565b61042c6104208201527f610600608061068061010d565b61043d61060061010061070061010d565b61046104408201527f4e61060061018061078061010d565b81815182350982825185098283846fffff6104608201527ffffeffffffffffffffffffffffff60601b193d515b82156105245781858609826104808201527f8485098384838809600409848586848509860986878a8b0960030908858683846104a08201527f088703878384090886878887880960080988038889848b03870885090887888a6104c08201527f8d096002098882830996508881820995508889888509600409945088898a88896104e08201527f098a098a8b86870960030908935088898687088a038a868709089a50888982846105008201527f096002099950505050858687868709600809870387888b8a03860884090898506105208201527f505050505b61018086891b60f71c16610600888a1b60f51c16176040810151806105408201527f1585151715610564578061055357506105fe565b81513d8301519750955093506105608201527f6105fe565b83858609848283098581890986878584098b0991508681880388856105808201527f8851090887838903898a8c88093d8a015109089350836105b957806105b957616105a08201527f05a9898c8c610008565b9a509b50995050505050506105fe565b8781820988816105c08201527f8309898285099350898a8586088b038b838d038d8a8b0908089b50898a8287096105e08201527f8b038b8c8f8e0388088909089c5050508788868b098209985050505050505b506106008201527f82156106af5781858609828485098384838809600409848586848509860986876106208201527f8a8b0960030908858683840887038783840908868788878809600809880388896106408201527f848b03870885090887888a8d09600209888283099650888182099550888988856106608201527f09600409945088898a8889098a098a8b86870960030908935088898687088a036106808201527f8a868709089a50888982840960020999505050508586878687096008098703876106a08201527f888b8a0386088409089850505050505b61018086891b60f51c16610600888a1b6106c08201527f60f31c161760408101518015851517156106ef57806106de5750610789565b816106e08201527f513d830151975095509350610789565b838586098482830985818909868785846107008201527f098b0991508681880388858851090887838903898a8c88093d8a0151090893506107208201527f83610744578061074457610734898c8c610008565b9a509b50995050505050506107408201527f610789565b8781820988818309898285099350898a8586088b038b838d038d8a6107608201527f8b0908089b50898a8287098b038b8c8f8e0388088909089c5050508788868b096107808201527f8209985050505050505b50600488019760fb19016104745750816107a2573d606107a08201527f40f35b81610860526002810361088052806108a0523d3d60c061080060055afa6107c08201527f898983843d513d510987090614163d525050505050505050503d3df3fea264696107e08201527f7066735822122063ce32ec0e56e7893a1f6101795ce2e38aca14dd12adb703c76108008201520152565b906040611cbf926dd01ea45f9efd5c54f037fa57ea1a81528160208201520190610eed565b604051906151128261052f565b60006060838281528260208201528260408201520152565b6151326105c8565b9061513b615105565b8252615145615105565b602083015260006040830152600060608301526151606134fb565b6080830152606060a0830152606060c0830152606060e0830152606061010083015261518a61423c565b61012083015260006101408301526000610160830152606061018083015260006101a083015260006101c08301526151c06135ad565b6101e08301526060610200830152565b90816080910312610177576040519060006151ea8361052f565b815173ffffffffffffffffffffffffffffffffffffffff8116810361522f57906060929184526020820151602085015260408201516040850152500151606082015290565b5080fd5b9190826040910312610177576020825192015190565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821161385257565b7fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255103907fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551821161385257565b9190820391821161385257565b9081518110156152e0570160200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6040519061531e604083610568565b600c82527f776562617574686e2e67657400000000000000000000000000000000000000006020830152565b6020929190615360849282815194859201610eca565b019081520190565b60405190615377604083610568565b600d82527f226368616c6c656e6765223a22000000000000000000000000000000000000006020830152565b604051906153b2604083610568565b600882527f2274797065223a220000000000000000000000000000000000000000000000006020830152565b90926153f7606093969594608084526080840190613872565b951515602083015260408201520152565b604090611cbf939281528160208201520190610eed565b6154276105d8565b90615430615105565b825260006020830152600060408301526154486134fb565b606083015260606080830152606060a0830152606060c0830152606060e083015261547161423c565b610100830152600061012083015260006101408301526060610160830152600061018083015260006101a083015260606101c0830152565b604051906154b8606083610568565b602982527f6374656420726f6f7400000000000000000000000000000000000000000000006040837f5265636f766572656420726f6f742073686f756c64206d61746368206578706560208201520152565b60405190615519604083610568565b600682527f7b2278223a2200000000000000000000000000000000000000000000000000006020830152565b61024290929192602060405194826155668794518092858088019101610eca565b830161557a82518093858085019101610eca565b0101037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101845283610568565b600761024291939293602060405195826155cb8894518092858088019101610eca565b83017f222c2279223a2200000000000000000000000000000000000000000000000000838201526156058251809385602785019101610eca565b010103017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101845283610568565b60405190615643604083610568565b600582527f66616c73650000000000000000000000000000000000000000000000000000006020830152565b6040519061567e604083610568565b600482527f74727565000000000000000000000000000000000000000000000000000000006020830152565b601c61024291939293602060405195826156cd8894518092858088019101610eca565b83017f222c227265717569726555736572566572696669636174696f6e223a00000000838201526156058251809385603c85019101610eca565b60016011610242929493946020604051968261572c8994518092858088019101610eca565b83017f2c226d6574616461746148617368223a22000000000000000000000000000000838201526157668251809385603185019101610eca565b01017f22000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1810185520183610568565b6001601161024292949394602060405196826157e08994518092858088019101610eca565b83017f2c2263726564656e7469616c4964223a22000000000000000000000000000000838201526157668251809385603185019101610eca565b9061024260016020604051856158398297518092858086019101610eca565b81017f7d000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1810185520183610568565b6040906158a7611cbf9493606083526060830190610eed565b908280828403806020850152601485527f706173736b6579735f636f6d70757465526f6f740000000000000000000000006020860152019101520190610eed565b61592f6158f361550a565b60008351604051809481927fb11a19e8000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156102235761596192600092615b89575b50615545565b60208201516040517fb11a19e80000000000000000000000000000000000000000000000000000000081526004810191909152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610223576159e5926159cd92600092615b6c575b506155a8565b604083015115615b64576159df61566f565b906156aa565b606082018051519192909115615ab75750615a0f615a0a615a609360009351906157bb565b61581a565b615a2c737109709ecfa91a80626ff3989d68f67f5b1dd12d61684d565b60405193849283927f0199a2200000000000000000000000000000000000000000000000000000000084526004840161588e565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561022357611cbf91600091615a9c575b50602080825183010191016134ec565b615ab191503d806000833e610e258183610568565b38615a8c565b60809150015180615ad2575b506000615a0f615a609261581a565b6040517fb11a19e8000000000000000000000000000000000000000000000000000000008152600481019190915290600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561022357615b40600092615a0f92615a60958592615b48575b50615707565b925050615ac3565b615b5d9192503d8087833e610e258183610568565b9038615b3a565b6159df615634565b615b829192503d806000833e610e258183610568565b90386159c7565b615b9f9192503d806000833e610e258183610568565b903861595b565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561017757600091615c0e60405194859384937fc1fa1ed000000000000000000000000000000000000000000000000000000000855260048501526024840152606060448401526064830190610eed565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561022357615c345750565b600061024291610568565b90615c49826105e8565b615c566040519182610568565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0615c8482946105e8565b0190602036910137565b615c9790616c03565b615ca081615c3f565b916000905b828210615cb25750505090565b615cbb90616c28565b819080615d0e5750507fff0000000000000000000000000000000000000000000000000000000000000091615cf1600192616cce565b93909360f81b1660001a615d0582876152cf565b535b0190615ca5565b60018103615d5f5750507fff0000000000000000000000000000000000000000000000000000000000000091615d45600192616c9f565b93909360f81b1660001a615d5982876152cf565b53615d07565b600203615d9457507fff0000000000000000000000000000000000000000000000000000000000000091615d45600192616c70565b60019150615da190616c4c565b90929080615db65750605f615d5982876152cf565b808303615dca5750602d615d5982876152cf565b600203615ddd576021615d5982876152cf565b603f615d5982876152cf565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561017757600091615c0e60405194859384937f4db19e7e0000000000000000000000000000000000000000000000000000000085521515600485015215156024840152606060448401526064830190610eed565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561017757600091615c0e60405194859384937f88b44c8500000000000000000000000000000000000000000000000000000000855260048501526024840152606060448401526064830190610eed565b60066102429193929360206040519582615ee08894518092858088019101610eca565b83017f2c2272223a220000000000000000000000000000000000000000000000000000838201526156058251809385602685019101610eca565b60076102429193929360206040519582615f3d8894518092858088019101610eca565b83017f222c2273223a2200000000000000000000000000000000000000000000000000838201526156058251809385602785019101610eca565b60176102429193929360206040519582615f9a8894518092858088019101610eca565b83017f222c2261757468656e74696361746f7244617461223a22000000000000000000838201526156058251809385603785019101610eca565b60136102429193929360206040519582615ff78894518092858088019101610eca565b83017f222c22636c69656e74446174614a736f6e223a00000000000000000000000000838201526156058251809385603385019101610eca565b6001601161024292949394602060405196826160568994518092858088019101610eca565b83017f2c22656d6265644d65746164617461223a000000000000000000000000000000838201526160908251809385603185019101610eca565b01017f7d000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1810185520183610568565b6040906160fe611cbf9493606083526060830190610eed565b908280828403806020850152601885527f706173736b6579735f656e636f64655369676e617475726500000000000000006020860152019101520190610eed565b91909161614d6158f361550a565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156102235761617e92600092615b895750615545565b60208201516040517fb11a19e80000000000000000000000000000000000000000000000000000000081526004810191909152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610223576161e9926159cd92600092615b6c57506155a8565b60608201805151919290911561646c5750616245916162099151906157bb565b60008451604051809481927fb11a19e8000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115610223576162779260009261644f575b50615ebd565b60208301516040517fb11a19e80000000000000000000000000000000000000000000000000000000081526004810191909152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156102235761631e926162e392600092616432575b50615f1a565b9160006040850151604051809481927f71aad10d000000000000000000000000000000000000000000000000000000008352600483016136d4565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610223576163cd94606061635e6163679360009761637c978992616416575b50615f77565b91015190615fd4565b90831461640e5761637661566f565b90616031565b616399737109709ecfa91a80626ff3989d68f67f5b1dd12d61684d565b60405193849283927f0199a220000000000000000000000000000000000000000000000000000000008452600484016160e5565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115610223576000916163f9575090565b611cbf91503d806000833e610e258183610568565b616376615634565b61642b9192503d808b833e610e258183610568565b9038616358565b6164489192503d806000833e610e258183610568565b90386162dd565b6164659192503d806000833e610e258183610568565b9038616271565b60809150015180616482575b5061624590616209565b6040517fb11a19e80000000000000000000000000000000000000000000000000000000081526004810191909152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561022357616245926164e8926000926164ee5750615707565b90616478565b615b5d9192503d806000833e610e258183610568565b61650d90616d88565b600080604061658a6165bc82516165248482610568565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152835192839160208301957fb60e72cc00000000000000000000000000000000000000000000000000000000875260248401526064830190610eed565b876044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610568565b51906a636f6e736f6c652e6c6f675afa5090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146138525760010190565b9080518015616725578251106166ff576000905b61661e83518251906152c2565b82116166d85760019260005b82518110156166ce57616649610bc16166438387613865565b846152cf565b7fff0000000000000000000000000000000000000000000000000000000000000061669f61667a610bc185886152cf565b7fff000000000000000000000000000000000000000000000000000000000000001690565b9116036166ae5760010161662a565b5092509060005b6166c8576166c2906165d0565b90616611565b91505090565b50929190916166b5565b5050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90565b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90565b505050600090565b1561673457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e76616c696420706f72742072616e676500000000000000000000000000006044820152fd5b908160008237016000815290565b81156167aa570690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60206102429294936168208260405197856167fd8a9751809285808b019101610eca565b860161681182518093858085019101610eca565b01019182815194859201610eca565b01037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101845283610568565b73ffffffffffffffffffffffffffffffffffffffff166040517fc1978d1f000000000000000000000000000000000000000000000000000000008152602081806168cc6004820160609060208152601460208201527f5345515f53444b5f5250435f4d494e5f504f525400000000000000000000000060408201520190565b0381855afa90811561022357600091616be4575b50604051907fc1978d1f0000000000000000000000000000000000000000000000000000000082526020828061694b6004820160609060208152601460208201527f5345515f53444b5f5250435f4d41585f504f525400000000000000000000000060408201520190565b0381865afa918215610223576169ed926169e791600091616bc5575b506169748382101561672d565b827fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a6548015616b97575b6169e1916169ae6169dc926165d0565b936169d7857fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a655565b6152c2565b613857565b906167a0565b90613865565b906040517ff877cb1900000000000000000000000000000000000000000000000000000000815260008180616a576004820160609060208152601660208201527f5345515f53444b5f5250435f55524c5f5052454649580000000000000000000060408201520190565b0381855afa90811561022357600091616b7c575b506040517ff877cb1900000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5345515f53444b5f5250435f55524c5f53554646495800000000000000000000604482015292600084606481865afa92831561022357616b2194600094616b5b575b509060009160405180809781947f6900a3ae000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa90811561022357611cbf93600092616b3e575b506167d9565b616b549192503d806000833e610e258183610568565b9038616b38565b600092919450616b74903d8085833e610e258183610568565b939091616ae3565b616b9191503d806000833e610e258183610568565b38616a6b565b506169dc6169e1916169ae6040516020810190616bb881610bfc8436616792565b519020925050915061699e565b616bde915060203d602011610398576103888183610568565b38616967565b616bfd915060203d602011610398576103888183610568565b386168e0565b6040516020810191825260208152616c1c604082610568565b5190209061012d820690565b6040516020810191825260208152616c41604082610568565b519020906005820690565b6040516020810191825260208152616c65604082610568565b519020906003821690565b6040516020810191825260208152616c89604082610568565b51902090600a8206603081018091116138525790565b6040516020810191825260208152616cb8604082610568565b51902090601a8206604181018091116138525790565b6040516020810191825260208152616ce7604082610568565b51902090601a8206606181018091116138525790565b15616d0457565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374645574696c7320626f756e642875696e743235362c75696e743235362c7560448201527f696e74323536293a204d6178206973206c657373207468616e206d696e2e00006064820152fd5b90600091616d966001616cfd565b6001811090811580616f59575b616f5457616dd56169dc60017fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325506152c2565b91600382111580616f4b575b616f3b577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82101580616f31575b616f01577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550821115616eaf5750616e719293507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550616e6c916152c2565b6167a0565b8015616e8a57616e85611cbf916001613865565b615249565b507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255090565b616eb7575050565b616ec8929350616e6c9060016152c2565b8015616efb576169dc611cbf917fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325506152c2565b50600190565b509050611cbf919250197fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325506152c2565b5081198311616e0f565b509050611cbf9192506001613865565b50818311616de1565b925050565b507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550811115616da356fe60808060405234601557610c16908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c8063669ad1ec14610047578063898bd921146100425763b933b4991461003d57600080fd5b6103fe565b6101c0565b346100db5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100db5760043567ffffffffffffffff81116100db576100ab61009c6100c09236906004016100e0565b906100a56104ff565b50610739565b9160405195869560a0875260a087019061016d565b93151560208601526040850152606084015260808301520390f35b600080fd5b9181601f840112156100db5782359167ffffffffffffffff83116100db57602083818601950101116100db57565b919082519283825260005b8481106101585750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201610119565b9060a080610199610187855160c0865260c086019061010e565b6020860151858203602087015261010e565b93604081015160408501526060810151606085015260808101516080850152015191015290565b346100db5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100db5760043560243567ffffffffffffffff81116100db5761021561021b9136906004016100e0565b90610739565b939094604093929351906020820152602081526102396040826104a8565b60009086856102488493610a3b565b9260208601519384519560408801516060890151835192600d8401907f226368616c6c656e6765223a220000000000000000000000000000000000000060981c8652838a019060228c600d878901011091602d8885010151901a141691602081601389012092012014169189826014011090821760801c109060207f2274797065223a22776562617574686e2e67657422000000000000000000000060581c918a01015160581c1416169152865180519189151560021b60011780602184015116149060208411161695866103b4575b50505061032f945083610397575b50505015151590565b61035c57600083815260208681526040808320858452878352818420908452825291829020915191825290f35b61039385846040519485947f12a693e600000000000000000000000000000000000000000000000000000000865260048601610543565b0390fd5b6103ac9350608086015160a087015191610b48565b868538610326565b909194506020808095506001945086840101809882808084519a019601940160025afa831b5afa5192523d156103ef57868583388080610318565bfe5b359081151582036100db57565b346100db5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100db5760043580151581036100db57610471602091602435604435906064359190600052602052604060002091600052602052604060002090600052602052604060002090565b604051908152f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176104e957604052565b610479565b604051906104fd60c0836104a8565b565b6040519060c0820182811067ffffffffffffffff8211176104e957604052600060a08360608152606060208201528260408201528260608201528260808201520152565b909261055c60609396959460808452608084019061016d565b951515602083015260408201520152565b90156105765790565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90929192836001116100db5783116100db57600101917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b909392938483116100db5784116100db578101920390565b92919267ffffffffffffffff82116104e95760405191610640601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016602001846104a8565b8294818452818301116100db578281602093846000960137010152565b9080601f830112156100db57816020610678933591016105f8565b90565b9060a0828203126100db57813567ffffffffffffffff81116100db5782019060c0828203126100db576106ac6104ee565b91803567ffffffffffffffff81116100db57826106ca91830161065d565b8352602081013567ffffffffffffffff81116100db5760a0926106ee91830161065d565b6020840152604081013560408401526060810135606084015260808101356080840152013560a082015291610725602083016103f1565b916040810135916080606083013592013590565b6107416104ff565b926000610777610751858561056d565b357fff000000000000000000000000000000000000000000000000000000000000001690565b7f20000000000000000000000000000000000000000000000000000000000000008116610a1a577f0100000000000000000000000000000000000000000000000000000000000000811615159460f882901c9087866107ea6107e460f987901c6001165b60010160ff1690565b60ff1690565b6107fd6107e46001600288901c166107db565b906108236107e46107db601061081883600160038d901c1684565b991660041c600f1690565b967f4000000000000000000000000000000000000000000000000000000000000000600191166109f5575b956109ce956109b995602061091d6108ca886109126109f19e996108ca6109e39f6108bd61095f9c6109a49f926108d193929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290830180938c886105e0565b36916105f8565b885283929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9081019687926105e0565b9101528b929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9060408d015289929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9060608b015287602090929192830135920190565b9060808a015286602090929192830135920190565b9060a089015285602090929192830135920190565b909481013591602090910190565b5091565b509193959092949650610a0c846001013590602190565b90979593919694929061084e565b5050925081610a3492610a2c926105a5565b81019061067b565b9091929394565b80516060929181610a4a575050565b9092506003600284010460021b604051937f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566601f527f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f603f5260208501928286019160208301946020828401019060046003835195600085525b0191603f8351818160121c16516000538181600c1c1651600153818160061c165160025316516003536000518152019087821015610b0757600490600390610ac4565b5095506000936003936040925201604052066002048093037f3d3d000000000000000000000000000000000000000000000000000000000000815252038252565b9290939193604051938452602084015283604084015260608301526080820152600080526020600060a0836101005afa503d15610bae575b507f7fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a860005160011491111090565b60209060a03d916dd01ea45f9efd5c54f037fa57ea1a5afa503d15610bd35738610b80565b63d0d5039b3d526004601cfdfea264697066735822122045a03a8036248a6d022686b10586e475ad0f06c23b143adc039bcc18adad1b9f64736f6c634300081c0033a264697066735822122071f369a0a126ae18aeacd82a873e8cc409b84cdd45dad51dc3e3c35b7210456164736f6c634300081c0033","sourceMap":"5315:16756:76:-:0;;;;;;;3166:4:5;5315:16756:76;;3166:4:5;5315:16756:76;;;3166:4:5;5315:16756:76;3166:4:5;5315:16756:76;;1087:4:16;5315:16756:76;;;1087:4:16;5315:16756:76;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436101561001257600080fd5b60003560e01c80630a9254e414610167578063191a942e146101625780631ed7831c1461015d5780632940497d146101585780632ade3880146101535780633e5e3c231461014e5780633f7286f414610149578063472c3294146101445780635bbaf1e91461013f57806366d9a9a01461013a5780638002c8241461013557806385226c8114610130578063916a17c61461012b578063b0464fdc14610126578063b5508aa914610121578063b71014a81461011c578063ba414fa614610117578063be068d5414610112578063e20c9f711461010d578063fa123aa6146101085763fa7626d41461010357600080fd5b61349f565b612d08565b612c5d565b612271565b612190565b61206f565b611fc4565b611eeb565b611e12565b611cc2565b611650565b611586565b61143d565b61127b565b6111d0565b611125565b61104c565b610777565b6103ef565b610244565b61017c565b600091031261017757565b600080fd5b346101775760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017757604051610c3180820182811067ffffffffffffffff821117610228578291616f84833903906000f08015610223577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00601f549260081b16911617601f55600080f35b6134e0565b6104aa565b8015150361017757565b35906102428261022d565b565b346101775760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101775760043561027f8161022d565b601f546064359160443591602435906102c59060081c73ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff1690565b6040517fb933b49900000000000000000000000000000000000000000000000000000000815283151560048201526024810183905260448101859052606481018690529490602090869060849082905afa9283156102235761036495600094610366575b5061034c90610356949561033b6134fb565b948552602085015215156040840152565b60808201526158e8565b61035e61354c565b91615ba6565b005b61035694509061039061034c9260203d602011610398575b6103888183610568565b8101906134ec565b945090610329565b503d61037e565b602060408183019282815284518094520192019060005b8181106103c35750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016103b6565b346101775760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101775760405180602060165491828152019060166000527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b51242899060005b81811061047e5761047a8561046e81870382610568565b6040519182918261039f565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610457565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff82111761022857604052565b610100810190811067ffffffffffffffff82111761022857604052565b6101c0810190811067ffffffffffffffff82111761022857604052565b6080810190811067ffffffffffffffff82111761022857604052565b6101a0810190811067ffffffffffffffff82111761022857604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761022857604052565b6040519061024261016083610568565b6040519061024260c083610568565b6040519061024261022083610568565b604051906102426101e083610568565b67ffffffffffffffff811161022857601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b81601f8201121561017757803590610639826105e8565b926106476040519485610568565b8284526020838301011161017757816000926020809301838601378301015290565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101775760043567ffffffffffffffff8111610177576004019060006101608383031261077457506106bf6105a9565b916106c981610237565b83526020810135602084015260408101356040840152606081013560608401526080810135608084015260a081013567ffffffffffffffff81116101775782610713918301610622565b60a084015260c081013567ffffffffffffffff8111610177576101409261073b918301610622565b60c084015260e081013560e08401526107576101008201610237565b610100840152610120810135610120840152013561014082015290565b80fd5b346101775761078536610669565b60a0810151518015159081610ebd575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610177576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529015156004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561022357610ea8575b5060c081018051518015159081610e9d575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610177576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529015156004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561022357610e88575b5060608201511515737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610177576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529015156004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561022357610e73575b5060808201511515737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610177576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529015156004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561022357610e5e575b5061010082019061098e8251151590565b15610e4e5760e0830151151590737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610177576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529115156004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821561022357610a5292610e33575b505b6000610a1d6135f1565b9151604051809481927fc8bd0e4a000000000000000000000000000000000000000000000000000000008352600483016136d4565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561022357610ac3600091610c88948391610e11575b50610aba610a94610120890151615c8e565b916101808601928352610aab6101408a0151615c8e565b90816101a088015283516136fc565b84525151613844565b938460208401526001604084015260a086015194835190606088015190608089015192610aee6105b9565b9889526020890152604088015260016060880152608087015260a0860152846060840152610b82610b1f8751151590565b91610b75602089015197610b4960408b01519960e08c019a8b5191604051988995602087016138c5565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101855284610568565b6080850192835251151590565b8214610e0557610c28610be760405b60201760f81b7fff000000000000000000000000000000000000000000000000000000000000001660a086019081525b517fff000000000000000000000000000000000000000000000000000000000000001690565b915191610bfc604051938492602084016138f5565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610568565b8060c0840152610c546102ac601f5473ffffffffffffffffffffffffffffffffffffffff9060081c1690565b60405180809681947f669ad1ec000000000000000000000000000000000000000000000000000000008352600483016136d4565b03915afa8015610223576103649461016093610d94926000908190829083908490610dd8575b888a0152610140880152610120870152151561010086015290505b60e0840152610cf1610cdf610100850151151590565b82511515610ceb6139fe565b91615de9565b610d07610120840151602083015161035e613a39565b610d1d610140840151604083015161035e613a74565b610d4160e0840151516020815191012060a08301516020815191012061035e613aaf565b610d65602060e085015101516020815191012084516020815191012061035e613b10565b610d7e608060e08501510151606083015161035e613b71565b608060a060e0850151015191015161035e613bac565b610db3604060e083015101516020830151610dad613be7565b91615e55565b610dcc606060e083015101516040830151610dad613c48565b0151905161035e613c83565b50505050610cc991610dfb913d8091833e610df38183610568565b810190613940565b9394508493610cae565b610c28610be783610b91565b610e2d91503d8085833e610e258183610568565b8101906136ae565b38610a82565b80610e426000610e4893610568565b8061016c565b38610a11565b610a5290600060e0850152610a13565b80610e426000610e6d93610568565b3861097d565b80610e426000610e8293610568565b38610904565b80610e426000610e9793610568565b3861088b565b606491501038610819565b80610e426000610eb793610568565b38610807565b61ffff9150111538610795565b60005b838110610edd5750506000910152565b8181015183820152602001610ecd565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093610f2981518092818752878088019101610eca565b0116010190565b9080602083519182815201916020808360051b8301019401926000915b838310610f5c57505050505090565b9091929394602080610f98837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086600196030187528951610eed565b97019301930191939290610f4d565b602081016020825282518091526040820191602060408360051b8301019401926000915b838310610fda57505050505090565b909192939460208061103d837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190610f30565b97019301930191939290610fcb565b346101775760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017757601e5461108781613cbe565b906110956040519283610568565b80825260208201601e6000527f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e3506000915b8383106110db576040518061047a8782610fa7565b600260206001926040516110ee816104d9565b73ffffffffffffffffffffffffffffffffffffffff8654168152611113858701613dd8565b838201528152019201920191906110c6565b346101775760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101775760405180602060185491828152019060186000527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e9060005b8181106111a45761047a8561046e81870382610568565b825473ffffffffffffffffffffffffffffffffffffffff1684526020909301926001928301920161118d565b346101775760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101775760405180602060175491828152019060176000527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c159060005b81811061124f5761047a8561046e81870382610568565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201611238565b346101775760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610177576004356112b68161022d565b60243590604435906112c9606435615c8e565b928351151593737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610177576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529415156004860152600085602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa948515610223576113c495611428575b5060208151818301206113746102ac601f5473ffffffffffffffffffffffffffffffffffffffff9060081c1690565b60405180809981947fb933b4990000000000000000000000000000000000000000000000000000000083528a898b6004860190949392606092608083019615158352602083015260408201520152565b03915afa92831561022357610364956000946113ff575b506113ed906113f7949561033b6134fb565b60608201526158e8565b61035e613e30565b6113f79450906114206113ed9260203d602011610398576103888183610568565b9450906113db565b80610e42600061143793610568565b38611345565b346101775760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017757602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051908152f35b906020808351928381520192019060005b8181106114b05750505090565b82517fffffffff00000000000000000000000000000000000000000000000000000000168452602093840193909201916001016114a3565b602081016020825282518091526040820191602060408360051b8301019401926000915b83831061151b57505050505090565b9091929394602080611577837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08660019603018752895190836115678351604084526040840190610eed565b9201519084818403910152611492565b9701930193019193929061150c565b346101775760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017757601b546115c181613cbe565b906115cf6040519283610568565b80825260208201601b6000527f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc16000915b838310611615576040518061047a87826114e8565b60026020600192604051611628816104d9565b61163186613cd6565b815261163e858701613e91565b83820152815201920192019190611600565b346101775761165e36610669565b60a0810151518015159081611ca1575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610177576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529015156004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561022357611c8c575b5060c08101908151518015159081611c81575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610177576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529015156004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561022357611c6c575b5060608101511515737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610177576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529015156004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561022357611c57575b5060808101511515737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610177576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529015156004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561022357611c42575b506101008101805115611c365760e08201511515737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610177576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529015156004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561022357611c21575b505b61192060006118eb614262565b9451604051809381927fc8bd0e4a000000000000000000000000000000000000000000000000000000008352600483016136d4565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561022357611a829261199c611a22926000948591611c07575b5061198c611966610120890151615c8e565b916101608a0192835261197d6101408a0151615c8e565b90816101808c015283516136fc565b8852600160408901525151613844565b6020870152602085015190606087019182515260408601516020835101526119d36119c78751151590565b60408451019015159052565b805115158015611bfa575b611bea575b611a1c6060870151926080890193845152608088015160208551015260a088015160408551015288516060855101525192519151151590565b9161613f565b8060a0860152611a4e6102ac601f5473ffffffffffffffffffffffffffffffffffffffff9060081c1690565b60405180809581947f669ad1ec000000000000000000000000000000000000000000000000000000008352600483016136d4565b03915afa8015610223576103649360e092610140926000908190829083908490611bc5575b8688015261012086015261010085015215158584015290505b60c0820152611ae0611ad484830151151590565b85511515610ceb6142dc565b611af6610120820151604086015161035e614317565b611b0c610100820151602086015161035e614352565b611b3060c0820151516020815191012060a08601516020815191012061035e61438d565b611b54602060c083015101516020815191012082516020815191012061035e6143ee565b611b6d608060c08301510151606086015161035e61444f565b611b8660a060c08301510151608086015161035e61448a565b611b9f604060c083015101516020830151610dad6144c5565b611bb8606060c083015101516040830151610dad614526565b015191015161035e614587565b50505050611ac091611be0913d8091833e610df38183610568565b9394508493611aa7565b60e08601516080835101526119e3565b5060e086015115156119de565b611c1b91503d8087833e610e258183610568565b38611954565b80610e426000611c3093610568565b386118dc565b600060e08301526118de565b80610e426000611c5193610568565b38611857565b80610e426000611c6693610568565b386117de565b80610e426000611c7b93610568565b38611765565b6064915010386116f3565b80610e426000611c9b93610568565b386116e0565b61ffff915011153861166e565b906020611cbf928181520190610f30565b90565b346101775760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017757601a54611cfd81613cbe565b90611d0b6040519283610568565b808252601a60009081527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b838310611d50576040518061047a8782611cae565b600160208192611d5f85613cd6565b815201920192019190611d3b565b602081016020825282518091526040820191602060408360051b8301019401926000915b838310611da057505050505090565b9091929394602080611e03837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190611492565b97019301930191939290611d91565b346101775760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017757601d54611e4d81613cbe565b90611e5b6040519283610568565b80825260208201601d6000527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f6000915b838310611ea1576040518061047a8782611d6d565b60026020600192604051611eb4816104d9565b73ffffffffffffffffffffffffffffffffffffffff8654168152611ed9858701613e91565b83820152815201920192019190611e8c565b346101775760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017757601c54611f2681613cbe565b90611f346040519283610568565b80825260208201601c6000527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2116000915b838310611f7a576040518061047a8782611d6d565b60026020600192604051611f8d816104d9565b73ffffffffffffffffffffffffffffffffffffffff8654168152611fb2858701613e91565b83820152815201920192019190611f65565b346101775760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017757601954611fff81613cbe565b9061200d6040519283610568565b808252601960009081527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b838310612052576040518061047a8782611cae565b60016020819261206185613cd6565b81520192019201919061203d565b346101775760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610177576004356120aa8161022d565b60243590604435601f5490919060081c73ffffffffffffffffffffffffffffffffffffffff166040517fb933b49900000000000000000000000000000000000000000000000000000000815282151560048201526024810185905260448101849052600060648201529390602090859081806084810103915afa9182156102235761036494600093612167575b5061215a9061215f93946121496134fb565b938452602084015215156040830152565b6158e8565b61035e6145c2565b61215f93509061218861215a9260203d602011610398576103888183610568565b935090612137565b346101775760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101775760206121c9614623565b6040519015158152f35b359063ffffffff8216820361017757565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc610100910112610177576040519061221c826104f5565b81600435815260243560208201526122346044610237565b6040820152606435606082015261224b6084610237565b608082015260a43560a082015260c43560c082015260e061226c60e46121d3565b910152565b34610177576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610177576122aa366121e4565b61010435906122b76146ee565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561017757600061230b91604051809381927fb4d6c782000000000000000000000000000000000000000000000000000000008352600483016150e0565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561022357612c48575b5061234e61233c61512a565b926123478351616504565b8352616504565b8151811415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610177576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529015156004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561022357612c33575b5081516040517f7a675bb600000000000000000000000000000000000000000000000000000000815260048101919091526080816024816000737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19182156102235761246592608092600091612c16575b508552604051809381927f7a675bb6000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03816000737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811561022357600091612be7575b506020830190815260808201926124a68451151590565b15612bd7576060830151151593737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610177576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529415156004860152600085602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9485156102235761256a95612bc2575b505b60406060835101518151809781927fc453949e000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561022357600095600091612b9d575b506060830190815285604084015260808301958651525160208651015260408401926125cf6125c38551151590565b60408851019015159052565b606085015160808751015260608651016125e7613537565b90526001916125f68551151590565b612b94575b61268160c0870151610b4961261760e08a015163ffffffff1690565b6040519687936020850191927fff000000000000000000000000000000000000000000000000000000000000006025947fffffffff0000000000000000000000000000000000000000000000000000000093855260f81b16602084015260e01b1660218201520190565b610200840192835260208601956126e16000610bfc6126ae8a516040519283916020830160209181520190565b604051809381927fc8bd0e4a000000000000000000000000000000000000000000000000000000008352600483016136d4565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561022357600091612b7b575b507f3d000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000612762610bc161275c8551615249565b856152cf565b1614612b50575b60a0860190815261278b60a060c088019361278261530f565b85520151615c8e565b60e087019080825251151592737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610177576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529315156004850152600084602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9384156102235761281994612b3b575b505191519051916136fc565b94610100850186815261012086019660608851015284516040885101526020600061284b8351604051918280926136e5565b039060025afa1561022357602060006128888151806101408b015261287c8951610bfc60405193849288840161534a565b604051918280926136e5565b039060025afa15610223576000516101608701819052935160600151604080517f83211b40000000000000000000000000000000000000000000000000000000008152600481019290925260248201959095529384604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa938415610223576129ec966129356129ad956101e093610b4998600091600091612b0a575b508c51906020820152528c5190611a1c8c519151151590565b986101808201998a52612951845161294b615368565b906165fd565b976101a08301988952612967855161294b6153a3565b90816101c0850152519451985191519060208251920151926129876105b9565b9a8b978852602088015260408701526060860152608085015260a0840152015251151590565b955160208151910151906040519788947f12a693e6000000000000000000000000000000000000000000000000000000006020870152602486016153de565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610177576000612a4093604051809581927ff28dceb3000000000000000000000000000000000000000000000000000000008352600483016136d4565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af191821561022357612acd93602093612af5575b50601f54612a939060081c73ffffffffffffffffffffffffffffffffffffffff166102ac565b90519151916040518095819482937f898bd92100000000000000000000000000000000000000000000000000000000845260048401615408565b03915afa801561022357612add57005b6103649060203d602011610398576103888183610568565b80610e426000612b0493610568565b38612a6d565b9050612b2e915060403d604011612b34575b612b268183610568565b810190615233565b3861291c565b503d612b1c565b80610e426000612b4a93610568565b3861280d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8151018152612769565b612b8e913d8091833e610e258183610568565b38612709565b600592506125fb565b9050612bb991955060403d604011612b3457612b268183610568565b94909438612594565b80610e426000612bd193610568565b38612529565b61256a936000606085015261252b565b612c09915060803d608011612c0f575b612c018183610568565b8101906151d0565b3861248f565b503d612bf7565b612c2d9150833d8511612c0f57612c018183610568565b3861242a565b80610e426000612c4293610568565b386123c4565b80610e426000612c5793610568565b38612330565b346101775760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101775760405180602060155491828152019060156000527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4759060005b818110612cdc5761047a8561046e81870382610568565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201612cc5565b34610177576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017757612d41366121e4565b612d496146ee565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610177576000612d9d91604051809381927fb4d6c782000000000000000000000000000000000000000000000000000000008352600483016150e0565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156102235761348a575b50612dcb61541f565b612e156080612dda8451616504565b808552604051809381927f7a675bb6000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03816000737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156102235760009161346b575b5081526080820191612e518351151590565b1561345b576060810151151592737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610177576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529315156004850152600084602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa93841561022357612f1594613446575b505b60406060845101518151809681927fc453949e000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561022357600094600091613421575b50604084019081528460208501526060840194855152516020855101526040820193612f7a612f6e8651151590565b60408351019015159052565b60608301516080825101526060815101612f92613537565b9052612fa060019551151590565b613418575b61305760c084015161302b612fc160e087015163ffffffff1690565b6040519889936020850191927fff000000000000000000000000000000000000000000000000000000000000006025947fffffffff0000000000000000000000000000000000000000000000000000000093855260f81b16602084015260e01b1660218201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101875286610568565b6101c0840194855260208301926130846000610bfc6126ae87516040519283916020830160209181520190565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115610223576000916133ff575b507f3d000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000006130ff610bc161275c8551615249565b16146133d4575b6080860190815261311e60a08088019361278261530f565b60c087019080825251151592737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610177576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529315156004850152600084602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa938415610223576131ab94612b3b57505191519051916136fc565b94602060006131db60e0880189815261010089019960608b510152845160408b51015251604051918280926136e5565b039060025afa1561022357600061320d60209261287c835191826101208b015251610bfc60405193849288840161534a565b039060025afa15610223576000516101408501819052845160600151604080517f83211b40000000000000000000000000000000000000000000000000000000008152600481019290925260248201929092529081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561022357613355966020946132ec936132dd936000906000926133b2575b50817f7fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a881116133a0575b5083515282518701528451915190511515611a1c565b916101608601928352516158e8565b92610180850193845261331b6102ac601f5473ffffffffffffffffffffffffffffffffffffffff9060081c1690565b90519151916040518097819482937f898bd92100000000000000000000000000000000000000000000000000000000845260048401615408565b03915afa918215610223576103649360009361337d575b506101a0839101525161035e6154a9565b6101a0935061339a9060203d602011610398576103888183610568565b9261336c565b6133ab919250615276565b90386132c7565b90506133cd915060403d604011612b3457612b268183610568565b903861329d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8151018152613106565b613412913d8091833e610e258183610568565b386130ac565b60059450612fa5565b905061343d91945060403d604011612b3457612b268183610568565b93909338612f3f565b80610e42600061345593610568565b38612ed4565b612f159260006060830152612ed6565b613484915060803d608011612c0f57612c018183610568565b38612e3f565b80610e42600061349993610568565b38612dc2565b346101775760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261017757602060ff601f54166040519015158152f35b6040513d6000823e3d90fd5b90816020910312610177575190565b6040519060a0820182811067ffffffffffffffff8211176102285760405260006080838281528260208201528260408201526060808201520152565b60405190613546602083610568565b60008252565b6040519061355b606083610568565b604082527f52504320726f6f742068617368207573696e67206d65746164617461486173686040837f436f6e747261637420726f6f7420686173682073686f756c64206d617463682060208201520152565b6040519060c0820182811067ffffffffffffffff82111761022857604052600060a08360608152606060208201528260408201528260608201528260808201520152565b604051906135fe82610512565b60606101a083828152600060208201526000604082015261361d6135ad565b83820152826080820152600060a08201528260c082015261363c6135ad565b60e08201526000610100820152600061012082015260006101408201526000610160820152826101808201520152565b81601f820112156101775760208151910190613687816105e8565b926136956040519485610568565b8184528183011161017757611cbf916020840190610eca565b9060208282031261017757815167ffffffffffffffff811161017757611cbf920161366c565b906020611cbf928181520190610eed565b906136f860209282815194859201610eca565b0190565b600c600291600f61024294969560296040519889947f7b2274797065223a220000000000000000000000000000000000000000000000602087015261374a815180926020868a019101610eca565b85017f222c226368616c6c656e6765223a22000000000000000000000000000000000083820152613785825180936020603885019101610eca565b01017f222c226f726967696e223a220000000000000000000000000000000000000000838201526137c0825180936020601b85019101610eca565b01017f227d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2810185520183610568565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600b019081600b1161385257565b613815565b906001820180921161385257565b9190820180921161385257565b9060a08061389e61388c855160c0865260c0860190610eed565b60208601518582036020870152610eed565b93604081015160408501526060810151606085015260808101516080850152015191015290565b9195949390926138df60809460a0855260a0850190613872565b9615156020840152604083015260608201520152565b7fff00000000000000000000000000000000000000000000000000000000000000600193921681526139308251809360208685019101610eca565b010190565b51906102428261022d565b9060a08282031261017757815167ffffffffffffffff81116101775782019060c082820312610177576139716105b9565b91805167ffffffffffffffff8111610177578261398f91830161366c565b8352602081015167ffffffffffffffff81116101775760a0926139b391830161366c565b6020840152604081015160408401526060810151606084015260808101516080840152015160a0820152916139ea60208301613935565b916040810151916080606083015192015190565b60405190613a0d604083610568565b601882527f414249204465636f64656420525556206d69736d6174636800000000000000006020830152565b60405190613a48604083610568565b601682527f414249204465636f6465642058206d69736d61746368000000000000000000006020830152565b60405190613a83604083610568565b601682527f414249204465636f6465642059206d69736d61746368000000000000000000006020830152565b60405190613abe606083610568565b602682527f736d6174636800000000000000000000000000000000000000000000000000006040837f414249204465636f6465642061757468656e74696361746f7244617461206d6960208201520152565b60405190613b1f606083610568565b602382527f74636800000000000000000000000000000000000000000000000000000000006040837f414249204465636f64656420636c69656e74446174614a534f4e206d69736d6160208201520152565b60405190613b80604083610568565b601682527f414249204465636f6465642052206d69736d61746368000000000000000000006020830152565b60405190613bbb604083610568565b601682527f414249204465636f6465642053206d69736d61746368000000000000000000006020830152565b60405190613bf6606083610568565b602382527f74636800000000000000000000000000000000000000000000000000000000006040837f414249204465636f646564206368616c6c656e6765496e646578206d69736d6160208201520152565b60405190613c57604083610568565b601e82527f414249204465636f6465642074797065496e646578206d69736d6174636800006020830152565b60405190613c92604083610568565b601d82527f414249204465636f646564206d65746164617461206d69736d617463680000006020830152565b67ffffffffffffffff81116102285760051b60200190565b9060405191600081548060011c9260018216918215613dce575b602085108314613da1578487528693926020850192918115613d655750600114613d23575b505061024292500383610568565b613d34919250600052602060002090565b906000915b848310613d4e57506102429350013880613d15565b805482840152869350602090920191600101613d39565b9050610242959293507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009150168252151560051b013880613d15565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f1693613cf0565b908154613de481613cbe565b92613df26040519485610568565b818452602084019060005260206000206000915b838310613e135750505050565b600160208192613e2285613cd6565b815201920192019190613e06565b60405190613e3f606083610568565b604082527f52504320726f6f742068617368207573696e672063726564656e7469616c49646040837f436f6e747261637420726f6f7420686173682073686f756c64206d617463682060208201520152565b60405181548082529092918390613eb16020830191600052602060002090565b926000905b8060078301106140be57610242945491818110614082575b81811061404b575b818110614014575b818110613fdd575b818110613fa6575b818110613f6f575b818110613f39575b10613f0c575b500383610568565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260200138613f04565b602083811b7fffffffff000000000000000000000000000000000000000000000000000000001685529093600191019301613efe565b604083901b7fffffffff00000000000000000000000000000000000000000000000000000000168452926001906020019301613ef6565b606083901b7fffffffff00000000000000000000000000000000000000000000000000000000168452926001906020019301613eee565b608083901b7fffffffff00000000000000000000000000000000000000000000000000000000168452926001906020019301613ee6565b60a083901b7fffffffff00000000000000000000000000000000000000000000000000000000168452926001906020019301613ede565b60c083901b7fffffffff00000000000000000000000000000000000000000000000000000000168452926001906020019301613ed6565b926020816140b66001938660e01b7fffffffff00000000000000000000000000000000000000000000000000000000169052565b019301613ece565b91600891935061010060019161422e87546140fd838260e01b7fffffffff00000000000000000000000000000000000000000000000000000000169052565b60c081901b7fffffffff0000000000000000000000000000000000000000000000000000000016602084015260a081901b7fffffffff00000000000000000000000000000000000000000000000000000000166040840152608081901b7fffffffff00000000000000000000000000000000000000000000000000000000166060840152606081901b7fffffffff00000000000000000000000000000000000000000000000000000000166080840152604081901b7fffffffff000000000000000000000000000000000000000000000000000000001660a0840152602081901b7fffffffff000000000000000000000000000000000000000000000000000000001660c08401527fffffffff000000000000000000000000000000000000000000000000000000001660e0830152565b019401920185929391613eb6565b604051906142498261052f565b6060808360008152600060208201528160408201520152565b6040519061426f8261054b565b606061018083828152600060208201526000604082015261428e6134fb565b8382015261429a61423c565b60808201528260a08201526142ad6135ad565b60c0820152600060e0820152600061010082015260006101208201526000610140820152826101608201520152565b604051906142eb604083610568565b601b82527f5061636b6564204465636f64656420525556206d69736d6174636800000000006020830152565b60405190614326604083610568565b601982527f5061636b6564204465636f6465642059206d69736d61746368000000000000006020830152565b60405190614361604083610568565b601982527f5061636b6564204465636f6465642058206d69736d61746368000000000000006020830152565b6040519061439c606083610568565b602982527f206d69736d6174636800000000000000000000000000000000000000000000006040837f5061636b6564204465636f6465642061757468656e74696361746f724461746160208201520152565b604051906143fd606083610568565b602682527f736d6174636800000000000000000000000000000000000000000000000000006040837f5061636b6564204465636f64656420636c69656e74446174614a534f4e206d6960208201520152565b6040519061445e604083610568565b601982527f5061636b6564204465636f6465642052206d69736d61746368000000000000006020830152565b60405190614499604083610568565b601982527f5061636b6564204465636f6465642053206d69736d61746368000000000000006020830152565b604051906144d4606083610568565b602682527f736d6174636800000000000000000000000000000000000000000000000000006040837f5061636b6564204465636f646564206368616c6c656e6765496e646578206d6960208201520152565b60405190614535606083610568565b602182527f68000000000000000000000000000000000000000000000000000000000000006040837f5061636b6564204465636f6465642074797065496e646578206d69736d61746360208201520152565b60405190614596604083610568565b602082527f5061636b6564204465636f646564206d65746164617461206d69736d617463686020830152565b604051906145d1606083610568565b603e82527f52504320726f6f74206861736820776974686f7574206d6574616461746100006040837f436f6e747261637420726f6f7420686173682073686f756c64206d617463682060208201520152565b60085460ff1680156146325790565b506040517f667f9d7000000000000000000000000000000000000000000000000000000000815260208180600481017f6661696c65640000000000000000000000000000000000000000000000000000846040830192737109709ecfa91a80626ff3989d68f67f5b1dd12d815201520381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115610223576000916146cf575b50151590565b6146e8915060203d602011610398576103888183610568565b386146c9565b604051906146fe61084083610568565b61081282527f1fe3bee27da71e64736f6c634300081a00330000000000000000000000000000610820837f3d604052610216565b60008060006ffffffffeffffffffffffffffffffffff6060208201527f601b19808687098188890982838389096004098384858485093d510985868b8c60408201527f096003090891508384828308850385848509089650838485858609600809850360608201527f85868a880385088509089550505050808188880960020991505093509350939060808201527f50565b81513d83015160408401516ffffffffeffffffffffffffffffffffff6060a08201527f601b19808384098183840982838388096004098384858485093d510985868a8b60c08201527f096003090896508384828308850385898a09089150610102848587890960020960e08201527f85868787880960080987038788878a0387088c0908848b523d8b015260408a016101008201527f52565b505050505050505050565b81513d830151604084015185513d870151606101208201527f408801518361013d578287523d870182905260408701819052610102565b80616101408201527f0157578587523d870185905260408701849052610102565b6ffffffffeffffff6101608201527fffffffffffffffffff60601b19808586098183840982818a09985082838583096101808201527f89099750508188830383838809089450818783038384898509870908935050826101a08201527f6101be57836101be576101b28a89610082565b50505050505050505050565b806101c08201527f8485098181860982828a09985082838a8b0884038483860386898a09080891506101e08201527f6102088384868a0988098485848c09860386878789038f088a0908848d523d8d6102008201527f015260408c0152565b505050505050505050505050565b6020357fffffffff006102208201527cffffffffffffffffbce6faada7179e84f3b9cac2fc6325513d6040357f6102408201527f7fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a86102608201527f8111156102695782035b602061080052602061082052602061084052806108606102808201527f526002830361088052826108a0526ffffffffeffffffffffffffffffffffff606102a08201527f601b198060031860205260603560803560203d60c061080060055afa60203d146102c08201527f16837f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e276102e08201527fd2604b8585873d5189898a0908090884838409148483108585101688871087156103008201527f10898b108b151016609f3611161616166103195760206080f35b60809182523d6103208201527f820152600160c08190527f6b17d1f2e12c4247f8bce6e563a440f277037d812d6103408201527feb33a0f4a13945d898c2966102009081527f4fe342e2fe1a7f9b8ee7eb4a7c0f6103608201527f9e162bce33576b315ececbb6406837bf51f53d909101526102405261038992506103808201527f9050610100610082565b610397610200610400610082565b6103a761010060806103a08201527f61018061010d565b6103b7610200608061028061010d565b6103c861020061016103c08201527e61030061010d565b6103d961020061018061038061010d565b6103e96104006103e08201527f608061048061010d565b6103fa61040061010061050061010d565b61040b61046104008201527e61018061058061010d565b61041c61040061020061060061010d565b61042c6104208201527f610600608061068061010d565b61043d61060061010061070061010d565b61046104408201527f4e61060061018061078061010d565b81815182350982825185098283846fffff6104608201527ffffeffffffffffffffffffffffff60601b193d515b82156105245781858609826104808201527f8485098384838809600409848586848509860986878a8b0960030908858683846104a08201527f088703878384090886878887880960080988038889848b03870885090887888a6104c08201527f8d096002098882830996508881820995508889888509600409945088898a88896104e08201527f098a098a8b86870960030908935088898687088a038a868709089a50888982846105008201527f096002099950505050858687868709600809870387888b8a03860884090898506105208201527f505050505b61018086891b60f71c16610600888a1b60f51c16176040810151806105408201527f1585151715610564578061055357506105fe565b81513d8301519750955093506105608201527f6105fe565b83858609848283098581890986878584098b0991508681880388856105808201527f8851090887838903898a8c88093d8a015109089350836105b957806105b957616105a08201527f05a9898c8c610008565b9a509b50995050505050506105fe565b8781820988816105c08201527f8309898285099350898a8586088b038b838d038d8a8b0908089b50898a8287096105e08201527f8b038b8c8f8e0388088909089c5050508788868b098209985050505050505b506106008201527f82156106af5781858609828485098384838809600409848586848509860986876106208201527f8a8b0960030908858683840887038783840908868788878809600809880388896106408201527f848b03870885090887888a8d09600209888283099650888182099550888988856106608201527f09600409945088898a8889098a098a8b86870960030908935088898687088a036106808201527f8a868709089a50888982840960020999505050508586878687096008098703876106a08201527f888b8a0386088409089850505050505b61018086891b60f51c16610600888a1b6106c08201527f60f31c161760408101518015851517156106ef57806106de5750610789565b816106e08201527f513d830151975095509350610789565b838586098482830985818909868785846107008201527f098b0991508681880388858851090887838903898a8c88093d8a0151090893506107208201527f83610744578061074457610734898c8c610008565b9a509b50995050505050506107408201527f610789565b8781820988818309898285099350898a8586088b038b838d038d8a6107608201527f8b0908089b50898a8287098b038b8c8f8e0388088909089c5050508788868b096107808201527f8209985050505050505b50600488019760fb19016104745750816107a2573d606107a08201527f40f35b81610860526002810361088052806108a0523d3d60c061080060055afa6107c08201527f898983843d513d510987090614163d525050505050505050503d3df3fea264696107e08201527f7066735822122063ce32ec0e56e7893a1f6101795ce2e38aca14dd12adb703c76108008201520152565b906040611cbf926dd01ea45f9efd5c54f037fa57ea1a81528160208201520190610eed565b604051906151128261052f565b60006060838281528260208201528260408201520152565b6151326105c8565b9061513b615105565b8252615145615105565b602083015260006040830152600060608301526151606134fb565b6080830152606060a0830152606060c0830152606060e0830152606061010083015261518a61423c565b61012083015260006101408301526000610160830152606061018083015260006101a083015260006101c08301526151c06135ad565b6101e08301526060610200830152565b90816080910312610177576040519060006151ea8361052f565b815173ffffffffffffffffffffffffffffffffffffffff8116810361522f57906060929184526020820151602085015260408201516040850152500151606082015290565b5080fd5b9190826040910312610177576020825192015190565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821161385257565b7fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255103907fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551821161385257565b9190820391821161385257565b9081518110156152e0570160200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6040519061531e604083610568565b600c82527f776562617574686e2e67657400000000000000000000000000000000000000006020830152565b6020929190615360849282815194859201610eca565b019081520190565b60405190615377604083610568565b600d82527f226368616c6c656e6765223a22000000000000000000000000000000000000006020830152565b604051906153b2604083610568565b600882527f2274797065223a220000000000000000000000000000000000000000000000006020830152565b90926153f7606093969594608084526080840190613872565b951515602083015260408201520152565b604090611cbf939281528160208201520190610eed565b6154276105d8565b90615430615105565b825260006020830152600060408301526154486134fb565b606083015260606080830152606060a0830152606060c0830152606060e083015261547161423c565b610100830152600061012083015260006101408301526060610160830152600061018083015260006101a083015260606101c0830152565b604051906154b8606083610568565b602982527f6374656420726f6f7400000000000000000000000000000000000000000000006040837f5265636f766572656420726f6f742073686f756c64206d61746368206578706560208201520152565b60405190615519604083610568565b600682527f7b2278223a2200000000000000000000000000000000000000000000000000006020830152565b61024290929192602060405194826155668794518092858088019101610eca565b830161557a82518093858085019101610eca565b0101037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101845283610568565b600761024291939293602060405195826155cb8894518092858088019101610eca565b83017f222c2279223a2200000000000000000000000000000000000000000000000000838201526156058251809385602785019101610eca565b010103017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101845283610568565b60405190615643604083610568565b600582527f66616c73650000000000000000000000000000000000000000000000000000006020830152565b6040519061567e604083610568565b600482527f74727565000000000000000000000000000000000000000000000000000000006020830152565b601c61024291939293602060405195826156cd8894518092858088019101610eca565b83017f222c227265717569726555736572566572696669636174696f6e223a00000000838201526156058251809385603c85019101610eca565b60016011610242929493946020604051968261572c8994518092858088019101610eca565b83017f2c226d6574616461746148617368223a22000000000000000000000000000000838201526157668251809385603185019101610eca565b01017f22000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1810185520183610568565b6001601161024292949394602060405196826157e08994518092858088019101610eca565b83017f2c2263726564656e7469616c4964223a22000000000000000000000000000000838201526157668251809385603185019101610eca565b9061024260016020604051856158398297518092858086019101610eca565b81017f7d000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1810185520183610568565b6040906158a7611cbf9493606083526060830190610eed565b908280828403806020850152601485527f706173736b6579735f636f6d70757465526f6f740000000000000000000000006020860152019101520190610eed565b61592f6158f361550a565b60008351604051809481927fb11a19e8000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156102235761596192600092615b89575b50615545565b60208201516040517fb11a19e80000000000000000000000000000000000000000000000000000000081526004810191909152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610223576159e5926159cd92600092615b6c575b506155a8565b604083015115615b64576159df61566f565b906156aa565b606082018051519192909115615ab75750615a0f615a0a615a609360009351906157bb565b61581a565b615a2c737109709ecfa91a80626ff3989d68f67f5b1dd12d61684d565b60405193849283927f0199a2200000000000000000000000000000000000000000000000000000000084526004840161588e565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561022357611cbf91600091615a9c575b50602080825183010191016134ec565b615ab191503d806000833e610e258183610568565b38615a8c565b60809150015180615ad2575b506000615a0f615a609261581a565b6040517fb11a19e8000000000000000000000000000000000000000000000000000000008152600481019190915290600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561022357615b40600092615a0f92615a60958592615b48575b50615707565b925050615ac3565b615b5d9192503d8087833e610e258183610568565b9038615b3a565b6159df615634565b615b829192503d806000833e610e258183610568565b90386159c7565b615b9f9192503d806000833e610e258183610568565b903861595b565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561017757600091615c0e60405194859384937fc1fa1ed000000000000000000000000000000000000000000000000000000000855260048501526024840152606060448401526064830190610eed565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561022357615c345750565b600061024291610568565b90615c49826105e8565b615c566040519182610568565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0615c8482946105e8565b0190602036910137565b615c9790616c03565b615ca081615c3f565b916000905b828210615cb25750505090565b615cbb90616c28565b819080615d0e5750507fff0000000000000000000000000000000000000000000000000000000000000091615cf1600192616cce565b93909360f81b1660001a615d0582876152cf565b535b0190615ca5565b60018103615d5f5750507fff0000000000000000000000000000000000000000000000000000000000000091615d45600192616c9f565b93909360f81b1660001a615d5982876152cf565b53615d07565b600203615d9457507fff0000000000000000000000000000000000000000000000000000000000000091615d45600192616c70565b60019150615da190616c4c565b90929080615db65750605f615d5982876152cf565b808303615dca5750602d615d5982876152cf565b600203615ddd576021615d5982876152cf565b603f615d5982876152cf565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561017757600091615c0e60405194859384937f4db19e7e0000000000000000000000000000000000000000000000000000000085521515600485015215156024840152606060448401526064830190610eed565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561017757600091615c0e60405194859384937f88b44c8500000000000000000000000000000000000000000000000000000000855260048501526024840152606060448401526064830190610eed565b60066102429193929360206040519582615ee08894518092858088019101610eca565b83017f2c2272223a220000000000000000000000000000000000000000000000000000838201526156058251809385602685019101610eca565b60076102429193929360206040519582615f3d8894518092858088019101610eca565b83017f222c2273223a2200000000000000000000000000000000000000000000000000838201526156058251809385602785019101610eca565b60176102429193929360206040519582615f9a8894518092858088019101610eca565b83017f222c2261757468656e74696361746f7244617461223a22000000000000000000838201526156058251809385603785019101610eca565b60136102429193929360206040519582615ff78894518092858088019101610eca565b83017f222c22636c69656e74446174614a736f6e223a00000000000000000000000000838201526156058251809385603385019101610eca565b6001601161024292949394602060405196826160568994518092858088019101610eca565b83017f2c22656d6265644d65746164617461223a000000000000000000000000000000838201526160908251809385603185019101610eca565b01017f7d000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1810185520183610568565b6040906160fe611cbf9493606083526060830190610eed565b908280828403806020850152601885527f706173736b6579735f656e636f64655369676e617475726500000000000000006020860152019101520190610eed565b91909161614d6158f361550a565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156102235761617e92600092615b895750615545565b60208201516040517fb11a19e80000000000000000000000000000000000000000000000000000000081526004810191909152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610223576161e9926159cd92600092615b6c57506155a8565b60608201805151919290911561646c5750616245916162099151906157bb565b60008451604051809481927fb11a19e8000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115610223576162779260009261644f575b50615ebd565b60208301516040517fb11a19e80000000000000000000000000000000000000000000000000000000081526004810191909152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156102235761631e926162e392600092616432575b50615f1a565b9160006040850151604051809481927f71aad10d000000000000000000000000000000000000000000000000000000008352600483016136d4565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610223576163cd94606061635e6163679360009761637c978992616416575b50615f77565b91015190615fd4565b90831461640e5761637661566f565b90616031565b616399737109709ecfa91a80626ff3989d68f67f5b1dd12d61684d565b60405193849283927f0199a220000000000000000000000000000000000000000000000000000000008452600484016160e5565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115610223576000916163f9575090565b611cbf91503d806000833e610e258183610568565b616376615634565b61642b9192503d808b833e610e258183610568565b9038616358565b6164489192503d806000833e610e258183610568565b90386162dd565b6164659192503d806000833e610e258183610568565b9038616271565b60809150015180616482575b5061624590616209565b6040517fb11a19e80000000000000000000000000000000000000000000000000000000081526004810191909152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561022357616245926164e8926000926164ee5750615707565b90616478565b615b5d9192503d806000833e610e258183610568565b61650d90616d88565b600080604061658a6165bc82516165248482610568565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152835192839160208301957fb60e72cc00000000000000000000000000000000000000000000000000000000875260248401526064830190610eed565b876044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610568565b51906a636f6e736f6c652e6c6f675afa5090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146138525760010190565b9080518015616725578251106166ff576000905b61661e83518251906152c2565b82116166d85760019260005b82518110156166ce57616649610bc16166438387613865565b846152cf565b7fff0000000000000000000000000000000000000000000000000000000000000061669f61667a610bc185886152cf565b7fff000000000000000000000000000000000000000000000000000000000000001690565b9116036166ae5760010161662a565b5092509060005b6166c8576166c2906165d0565b90616611565b91505090565b50929190916166b5565b5050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90565b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90565b505050600090565b1561673457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e76616c696420706f72742072616e676500000000000000000000000000006044820152fd5b908160008237016000815290565b81156167aa570690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60206102429294936168208260405197856167fd8a9751809285808b019101610eca565b860161681182518093858085019101610eca565b01019182815194859201610eca565b01037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101845283610568565b73ffffffffffffffffffffffffffffffffffffffff166040517fc1978d1f000000000000000000000000000000000000000000000000000000008152602081806168cc6004820160609060208152601460208201527f5345515f53444b5f5250435f4d494e5f504f525400000000000000000000000060408201520190565b0381855afa90811561022357600091616be4575b50604051907fc1978d1f0000000000000000000000000000000000000000000000000000000082526020828061694b6004820160609060208152601460208201527f5345515f53444b5f5250435f4d41585f504f525400000000000000000000000060408201520190565b0381865afa918215610223576169ed926169e791600091616bc5575b506169748382101561672d565b827fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a6548015616b97575b6169e1916169ae6169dc926165d0565b936169d7857fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a655565b6152c2565b613857565b906167a0565b90613865565b906040517ff877cb1900000000000000000000000000000000000000000000000000000000815260008180616a576004820160609060208152601660208201527f5345515f53444b5f5250435f55524c5f5052454649580000000000000000000060408201520190565b0381855afa90811561022357600091616b7c575b506040517ff877cb1900000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5345515f53444b5f5250435f55524c5f53554646495800000000000000000000604482015292600084606481865afa92831561022357616b2194600094616b5b575b509060009160405180809781947f6900a3ae000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa90811561022357611cbf93600092616b3e575b506167d9565b616b549192503d806000833e610e258183610568565b9038616b38565b600092919450616b74903d8085833e610e258183610568565b939091616ae3565b616b9191503d806000833e610e258183610568565b38616a6b565b506169dc6169e1916169ae6040516020810190616bb881610bfc8436616792565b519020925050915061699e565b616bde915060203d602011610398576103888183610568565b38616967565b616bfd915060203d602011610398576103888183610568565b386168e0565b6040516020810191825260208152616c1c604082610568565b5190209061012d820690565b6040516020810191825260208152616c41604082610568565b519020906005820690565b6040516020810191825260208152616c65604082610568565b519020906003821690565b6040516020810191825260208152616c89604082610568565b51902090600a8206603081018091116138525790565b6040516020810191825260208152616cb8604082610568565b51902090601a8206604181018091116138525790565b6040516020810191825260208152616ce7604082610568565b51902090601a8206606181018091116138525790565b15616d0457565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374645574696c7320626f756e642875696e743235362c75696e743235362c7560448201527f696e74323536293a204d6178206973206c657373207468616e206d696e2e00006064820152fd5b90600091616d966001616cfd565b6001811090811580616f59575b616f5457616dd56169dc60017fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325506152c2565b91600382111580616f4b575b616f3b577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82101580616f31575b616f01577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550821115616eaf5750616e719293507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550616e6c916152c2565b6167a0565b8015616e8a57616e85611cbf916001613865565b615249565b507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255090565b616eb7575050565b616ec8929350616e6c9060016152c2565b8015616efb576169dc611cbf917fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325506152c2565b50600190565b509050611cbf919250197fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325506152c2565b5081198311616e0f565b509050611cbf9192506001613865565b50818311616de1565b925050565b507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550811115616da356fe60808060405234601557610c16908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c8063669ad1ec14610047578063898bd921146100425763b933b4991461003d57600080fd5b6103fe565b6101c0565b346100db5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100db5760043567ffffffffffffffff81116100db576100ab61009c6100c09236906004016100e0565b906100a56104ff565b50610739565b9160405195869560a0875260a087019061016d565b93151560208601526040850152606084015260808301520390f35b600080fd5b9181601f840112156100db5782359167ffffffffffffffff83116100db57602083818601950101116100db57565b919082519283825260005b8481106101585750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201610119565b9060a080610199610187855160c0865260c086019061010e565b6020860151858203602087015261010e565b93604081015160408501526060810151606085015260808101516080850152015191015290565b346100db5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100db5760043560243567ffffffffffffffff81116100db5761021561021b9136906004016100e0565b90610739565b939094604093929351906020820152602081526102396040826104a8565b60009086856102488493610a3b565b9260208601519384519560408801516060890151835192600d8401907f226368616c6c656e6765223a220000000000000000000000000000000000000060981c8652838a019060228c600d878901011091602d8885010151901a141691602081601389012092012014169189826014011090821760801c109060207f2274797065223a22776562617574686e2e67657422000000000000000000000060581c918a01015160581c1416169152865180519189151560021b60011780602184015116149060208411161695866103b4575b50505061032f945083610397575b50505015151590565b61035c57600083815260208681526040808320858452878352818420908452825291829020915191825290f35b61039385846040519485947f12a693e600000000000000000000000000000000000000000000000000000000865260048601610543565b0390fd5b6103ac9350608086015160a087015191610b48565b868538610326565b909194506020808095506001945086840101809882808084519a019601940160025afa831b5afa5192523d156103ef57868583388080610318565bfe5b359081151582036100db57565b346100db5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100db5760043580151581036100db57610471602091602435604435906064359190600052602052604060002091600052602052604060002090600052602052604060002090565b604051908152f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176104e957604052565b610479565b604051906104fd60c0836104a8565b565b6040519060c0820182811067ffffffffffffffff8211176104e957604052600060a08360608152606060208201528260408201528260608201528260808201520152565b909261055c60609396959460808452608084019061016d565b951515602083015260408201520152565b90156105765790565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90929192836001116100db5783116100db57600101917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b909392938483116100db5784116100db578101920390565b92919267ffffffffffffffff82116104e95760405191610640601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016602001846104a8565b8294818452818301116100db578281602093846000960137010152565b9080601f830112156100db57816020610678933591016105f8565b90565b9060a0828203126100db57813567ffffffffffffffff81116100db5782019060c0828203126100db576106ac6104ee565b91803567ffffffffffffffff81116100db57826106ca91830161065d565b8352602081013567ffffffffffffffff81116100db5760a0926106ee91830161065d565b6020840152604081013560408401526060810135606084015260808101356080840152013560a082015291610725602083016103f1565b916040810135916080606083013592013590565b6107416104ff565b926000610777610751858561056d565b357fff000000000000000000000000000000000000000000000000000000000000001690565b7f20000000000000000000000000000000000000000000000000000000000000008116610a1a577f0100000000000000000000000000000000000000000000000000000000000000811615159460f882901c9087866107ea6107e460f987901c6001165b60010160ff1690565b60ff1690565b6107fd6107e46001600288901c166107db565b906108236107e46107db601061081883600160038d901c1684565b991660041c600f1690565b967f4000000000000000000000000000000000000000000000000000000000000000600191166109f5575b956109ce956109b995602061091d6108ca886109126109f19e996108ca6109e39f6108bd61095f9c6109a49f926108d193929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290830180938c886105e0565b36916105f8565b885283929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9081019687926105e0565b9101528b929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9060408d015289929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9060608b015287602090929192830135920190565b9060808a015286602090929192830135920190565b9060a089015285602090929192830135920190565b909481013591602090910190565b5091565b509193959092949650610a0c846001013590602190565b90979593919694929061084e565b5050925081610a3492610a2c926105a5565b81019061067b565b9091929394565b80516060929181610a4a575050565b9092506003600284010460021b604051937f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566601f527f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f603f5260208501928286019160208301946020828401019060046003835195600085525b0191603f8351818160121c16516000538181600c1c1651600153818160061c165160025316516003536000518152019087821015610b0757600490600390610ac4565b5095506000936003936040925201604052066002048093037f3d3d000000000000000000000000000000000000000000000000000000000000815252038252565b9290939193604051938452602084015283604084015260608301526080820152600080526020600060a0836101005afa503d15610bae575b507f7fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a860005160011491111090565b60209060a03d916dd01ea45f9efd5c54f037fa57ea1a5afa503d15610bd35738610b80565b63d0d5039b3d526004601cfdfea264697066735822122045a03a8036248a6d022686b10586e475ad0f06c23b143adc039bcc18adad1b9f64736f6c634300081c0033a264697066735822122071f369a0a126ae18aeacd82a873e8cc409b84cdd45dad51dc3e3c35b7210456164736f6c634300081c0033","sourceMap":"5315:16756:76:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;5432:17;;;;;;;;;;;;;;;;;;;;5315:16756;5432:17;;;;;5315:16756;;5418:31;5315:16756;;;;;;;;5418:31;5315:16756;;;;5432:17;;:::i;:::-;;:::i;5315:16756::-;;;;;;;:::o;:::-;;;;;;:::i;:::-;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;5720:11;5315:16756;;;;;;;;;;5720:29;;5315:16756;;;;;;;;;5720:29;5315:16756;;;5720:74;;5315:16756;;;;5720:74;;5315:16756;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5720:74;;;;;;;6072:99;5720:74;-1:-1:-1;5720:74:76;;;5315:16756;;5893:58;5315:16756;6018:47;5315:16756;;;;:::i;:::-;;;;;5873:10;;5315:16756;;;;5893:32;;5315:16756;;5893:58;5315:16756;5957:21;;5315:16756;6018:47;:::i;:::-;2024:14:2;;:::i;:::-;6072:99:76;;:::i;:::-;5315:16756;5720:74;6018:47;5720:74;;;;5893:58;5720:74;5315:16756;5720:74;5315:16756;5720:74;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;5315:16756;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3018:16:9;5315:16756:76;;;;;;;3018:16:9;5315:16756:76;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;;;;12290:21;5315:16756;;:::i;:::-;;;;;1175:4137;5315:16756;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;5315:16756:76;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;5315:16756:76;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::i;:::-;12194:24;;;;5315:16756;12194:35;;;:79;;;;5315:16756;12184:90;336:42:2;12184:90:76;;;;5315:16756;;;12184:90;;5315:16756;;;;12184:90;;5315:16756;-1:-1:-1;5315:16756:76;;;336:42:2;12184:90:76;;;;;;;;5315:16756;12290:21;;;;;;5315:16756;12290:32;;;:70;;;;5315:16756;12280:81;336:42:2;12280:81:76;;;;5315:16756;;;12280:81;;5315:16756;;;;12280:81;;5315:16756;-1:-1:-1;5315:16756:76;;;336:42:2;12280:81:76;;;;;;;;5315:16756;12377:8;;;;5315:16756;12377:22;;336:42:2;12367:33:76;;;;5315:16756;;;12367:33;;5315:16756;;;;12367:33;;5315:16756;-1:-1:-1;5315:16756:76;;;336:42:2;12367:33:76;;;;;;;;5315:16756;12416:8;;;;5315:16756;12416:22;;336:42:2;12406:33:76;;;;5315:16756;;;12406:33;;5315:16756;;;;12406:33;;5315:16756;-1:-1:-1;5315:16756:76;;;336:42:2;12406:33:76;;;;;;;;5315:16756;12450:22;;;;5315:16756;;;;;;;;;12450:22;;;5315:16756;12492:19;;5315:16756;12492:33;;12482:44;336:42:2;12482:44:76;;;;5315:16756;;;12482:44;;5315:16756;;;;12482:44;;5315:16756;-1:-1:-1;5315:16756:76;;;336:42:2;12482:44:76;;;;;;;12675:37;12482:44;;;12446:140;;;12228:1;5315:16756;;:::i;:::-;12690:21;;5315:16756;;12675:37;;;;5315:16756;12675:37;;5315:16756;12675:37;;;:::i;:::-;;;336:42:2;12675:37:76;;;;;;13036:33;12228:1;12675:37;13834:61;12675:37;;;;;12446:140;12756:20;12875:133;12735:42;12756:20;;;5315:16756;12735:42;:::i;:::-;12718:14;;;;:59;;;12802:44;12823:22;;;5315:16756;12802:44;:::i;:::-;12783:16;;;;;:63;12909:14;;12875:133;:::i;:::-;12853:155;;13047:14;5315:16756;13036:33;:::i;:::-;13014:19;;;;;5315:16756;13092:1;5315:16756;13075:14;;5315:16756;12194:24;;;13194;13242:19;;;12377:8;;;;5315:16756;12416:8;;;;5315:16756;;;;:::i;:::-;;;;13014:19;13145:237;;5315:16756;;13145:237;;5315:16756;13092:1;12377:8;13145:237;;5315:16756;12416:8;13145:237;;5315:16756;12194:24;13145:237;;5315:16756;13128:14;12377:8;13128:14;;:254;5315:16756;;;;;;;;;13474:8;13415:99;13014:19;13474:8;;5315:16756;13484:8;13415:99;5315:16756;13484:8;;5315:16756;13494:19;5315:16756;13494:19;;5315:16756;;;;;;13415:99;;;13014:19;13415:99;;;:::i;:::-;;;;;;;;;:::i;:::-;12416:8;13389:17;;:125;;;5315:16756;;;;;;13558:50;;;;13648;5315:16756;;13558:50;13014:19;13543:66;5315:16756;;;;12194:24;13520:13;;5315:16756;;;13520:90;5315:16756;;;;;;13680:17;;5315:16756;13648:50;5315:16756;;13648:50;;;13014:19;13648:50;;;:::i;:::-;;13415:99;13648:50;;;;;;:::i;:::-;13616:29;12290:21;13616:29;;:82;13834:30;5315:16756;13834:11;5315:16756;;;;;;;;13834:30;5315:16756;;13834:61;;;;;5315:16756;13834:61;;5315:16756;13834:61;;;:::i;:::-;;;;;;;;;14819:84;13834:61;13804:20;13834:61;14550:64;13834:61;12228:1;;;;;;;;;13834:61;;;13558:50;13804:20;;;5315:16756;12823:22;13789:13;;5315:16756;12756:20;13774:13;;5315:16756;;;12450:22;13757:15;;5315:16756;13804:20;-1:-1:-1;13738:157:76;5315:16756;13739:16;;13738:157;13928:85;5315:16756;12450:22;13757:15;;5315:16756;;;;;;;;;;;;:::i;:::-;13928:85;;:::i;:::-;14019:59;12756:20;13774:13;;5315:16756;13014:19;13474:8;;5315:16756;;;:::i;14019:59::-;14084;12823:22;13789:13;;5315:16756;;13484:8;;5315:16756;;;:::i;14084:59::-;14149:158;5315:16756;13739:16;;14175;:34;13014:19;5315:16756;;;;14165:45;12194:24;;;14228;13014:19;5315:16756;;;;14218:35;5315:16756;;:::i;14149:158::-;14313:161;13014:19;5315:16756;13739:16;;14345;:31;;13014:19;5315:16756;;;;14329:49;14402:19;;13014;5315:16756;;;;14386:37;5315:16756;;:::i;14313:161::-;14480:64;12416:8;5315:16756;13739:16;;14489;:18;5315:16756;12377:8;;;5315:16756;;;:::i;14480:64::-;12416:8;12194:24;5315:16756;13739:16;;14559;:18;5315:16756;12416:8;;5315:16756;;;:::i;14550:64::-;14620:101;5315:16756;;13739:16;;14629;:31;5315:16756;13014:19;;;5315:16756;;;:::i;:::-;14620:101;;:::i;:::-;14727:86;12377:8;5315:16756;13739:16;;14736;:26;5315:16756;;13075:14;;5315:16756;;;:::i;14727:86::-;13804:20;5315:16756;;;;;:::i;13834:61::-;;;;;13738:157;13834:61;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;-1:-1:-1;13834:61:76;;;;13558:50;13648;5315:16756;13558:50;;;12675:37;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;12482:44;;;12228:1;12482:44;;;:::i;:::-;;;:::i;:::-;;;;12446:140;12675:37;12547:19;12228:1;5315:16756;12547:19;;5315:16756;12446:140;;12406:33;;;12228:1;12406:33;;;:::i;:::-;;;;12367;;;12228:1;12367:33;;;:::i;:::-;;;;12280:81;;;12228:1;12280:81;;;:::i;:::-;;;;12290:70;12357:3;12326:34;;;12290:70;;;12184:90;;;12228:1;12184:90;;;:::i;:::-;;;;12194:79;12268:5;12233:40;;;;12194:79;;;5315:16756;;;;;;;;-1:-1:-1;;5315:16756:76;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5315:16756:76;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;3948:19:9;5315:16756:76;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;3948:19:9;5315:16756:76;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3794:16:9;5315:16756:76;;;;;;;3794:16:9;5315:16756:76;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3501:18:9;5315:16756:76;;;;;;;3501:18:9;5315:16756:76;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;6416:38;5315:16756;;6416:38;:::i;:::-;5315:16756;;;6470:30;;6460:41;336:42:2;6460:41:76;;;;5315:16756;;;6460:41;;5315:16756;;;;6460:41;;5315:16756;-1:-1:-1;5315:16756:76;;;336:42:2;6460:41:76;;;;;;;6601:86;6460:41;;;5315:16756;;;;;;;;6542:30;6601:29;5315:16756;6601:11;5315:16756;;;;;;;;6601:29;5315:16756;;6601:86;;;;;5315:16756;6601:86;;;;;5315:16756;6601:86;;5315:16756;;;;;;;;;;;;;;;;;;;;;;;;;6601:86;;;;;;;;;;6965:99;6601:86;-1:-1:-1;6601:86:76;;;5315:16756;;6786:58;5315:16756;6911:47;5315:16756;;;;:::i;6786:58::-;5315:16756;6850:21;;:36;6911:47;:::i;:::-;5315:16756;;:::i;6601:86::-;6911:47;6601:86;;;;6786:58;6601:86;5315:16756;6601:86;5315:16756;6601:86;;;;;;;:::i;:::-;;;;;;6460:41;;;-1:-1:-1;6460:41:76;;;:::i;:::-;;;;5315:16756;;;;;;;;;;;;;5353:30;5315:16756;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5315:16756:76;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;3346:26:9;5315:16756:76;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;3346:26:9;5315:16756:76;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8571:24;;;;5315:16756;8571:35;;;:79;;;;5315:16756;8561:90;336:42:2;8561:90:76;;;;5315:16756;;;8561:90;;5315:16756;;;;8561:90;;5315:16756;-1:-1:-1;5315:16756:76;;;336:42:2;8561:90:76;;;;;;;;5315:16756;8667:21;;;;;;;5315:16756;8667:32;;;:70;;;;5315:16756;8657:81;336:42:2;8657:81:76;;;;5315:16756;;;8657:81;;5315:16756;;;;8657:81;;5315:16756;-1:-1:-1;5315:16756:76;;;336:42:2;8657:81:76;;;;;;;;5315:16756;8754:8;;;;5315:16756;8754:22;;336:42:2;8744:33:76;;;;5315:16756;;;8744:33;;5315:16756;;;;8744:33;;5315:16756;-1:-1:-1;5315:16756:76;;;336:42:2;8744:33:76;;;;;;;;5315:16756;8793:8;;;;5315:16756;8793:22;;336:42:2;8783:33:76;;;;5315:16756;;;8783:33;;5315:16756;;;;8783:33;;5315:16756;-1:-1:-1;5315:16756:76;;;336:42:2;8783:33:76;;;;;;;;5315:16756;-1:-1:-1;8827:20:76;;;5315:16756;;;8827:20;;5315:16756;8867:19;;5315:16756;8867:33;;336:42:2;8857:44:76;;;;5315:16756;;;8857:44;;5315:16756;;;;8857:44;;5315:16756;-1:-1:-1;5315:16756:76;;;336:42:2;8857:44:76;;;;;;;;8823:138;;;9053:37;8605:1;5315:16756;;:::i;:::-;9068:21;;5315:16756;;9053:37;;;;5315:16756;9053:37;;5315:16756;9053:37;;;:::i;:::-;;;336:42:2;9053:37:76;;;;;;10168:53;9053:37;9440:33;9971:94;9053:37;8605:1;9053:37;;;;;8823:138;9135:20;9254:133;9114:42;9135:20;;;5315:16756;9114:42;:::i;:::-;9097:14;;;;:59;;;9181:44;9202:22;;;5315:16756;9181:44;:::i;:::-;9162:16;;;;;:63;9288:14;;9254:133;:::i;:::-;9232:155;;9411:1;5315:16756;9394:14;;5315:16756;9451:14;5315:16756;9440:33;:::i;:::-;9418:19;;;5315:16756;9418:19;9498:8;;5315:16756;9480:13;8754:8;9480:13;;;;;5315:16756;;9530:8;;5315:16756;9418:19;9512:13;;:15;5315:16756;9544:70;5315:16756;;;;;;;;;9544:13;;:37;5315:16756;;;;;;9544:70;5315:16756;;;;9624:57;;;;8823:138;9620:126;;8823:138;5315:16756;8754:8;;;5315:16756;9752:14;8793:8;9752:14;;;;;5315:16756;8793:8;;;5315:16756;9418:19;9785:14;;:16;5315:16756;8571:24;;;9853;5315:16756;9818:14;;:32;:59;9915:19;;8754:8;9883:14;;:29;:51;10013:13;10028:14;;5315:16756;;;;;;;9971:94;;:::i;:::-;9941:21;8571:24;9941:21;;:124;10168:30;5315:16756;10168:11;5315:16756;;;;;;;;10168:30;5315:16756;;10168:53;;;;;5315:16756;10168:53;;5315:16756;10168:53;;;:::i;:::-;;;;;;;;;11146:87;10168:53;5315:16756;10168:53;9202:22;10168:53;8605:1;;;;;;;;;10168:53;;;8823:138;10138:20;;;5315:16756;9135:20;10123:13;;5315:16756;8827:20;10108:13;;5315:16756;;;10091:15;;;5315:16756;10138:20;-1:-1:-1;10072:149:76;8667:21;10073:16;;10072:149;10228:88;5315:16756;10091:15;;;5315:16756;;;;;;;;;;;;:::i;10228:88::-;10322:62;9135:20;10123:13;;5315:16756;;9530:8;;5315:16756;;;:::i;10322:62::-;10390;8827:20;10108:13;;5315:16756;9418:19;9498:8;;5315:16756;;;:::i;10390:62::-;10458:161;8667:21;10073:16;;10484;:34;9418:19;5315:16756;;;;10474:45;8571:24;;;10537;9418:19;5315:16756;;;;10527:35;5315:16756;;:::i;10458:161::-;10625:164;9418:19;8667:21;10073:16;;10657;:31;;9418:19;5315:16756;;;;10641:49;10714:19;;9418;5315:16756;;;;10698:37;5315:16756;;:::i;10625:164::-;10795:67;8793:8;8667:21;10073:16;;10804;:18;5315:16756;8754:8;;;5315:16756;;;:::i;10795:67::-;10868;8571:24;8667:21;10073:16;;10877;:18;5315:16756;8793:8;;;5315:16756;;;:::i;10868:67::-;10941:104;5315:16756;8667:21;10073:16;;10950;:31;5315:16756;9418:19;;;5315:16756;;;:::i;10941:104::-;11051:89;8754:8;8667:21;10073:16;;11060;:26;5315:16756;;9394:14;;5315:16756;;;:::i;11051:89::-;10138:20;5315:16756;11177:19;;5315:16756;;;:::i;10168:53::-;;;;;10072:149;10168:53;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;10168:53:76;;;;9620:126;5315:16756;9720:19;;5315:16756;8793:8;9691:13;;:26;5315:16756;9620:126;;9624:57;9648:19;5315:16756;9648:19;;5315:16756;9648:33;;9624:57;;9053:37;;;;;;;;;;;;;:::i;:::-;;;;8857:44;;;8605:1;8857:44;;;:::i;:::-;;;;8823:138;8605:1;5315:16756;8922:19;;5315:16756;8823:138;;8783:33;;;8605:1;8783:33;;;:::i;:::-;;;;8744;;;8605:1;8744:33;;;:::i;:::-;;;;8657:81;;;8605:1;8657:81;;;:::i;:::-;;;;8667:70;8734:3;8703:34;;;8667:70;;;8561:90;;;8605:1;8561:90;;;:::i;:::-;;;;8571:79;8645:5;8610:40;;;;8571:79;;;5315:16756;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;3162:18:9;5315:16756:76;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;3162:18:9;5315:16756:76;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;3653:18:9;5315:16756:76;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;3653:18:9;5315:16756:76;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;2876:18:9;5315:16756:76;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;2876:18:9;5315:16756:76;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;2575:18:9;5315:16756:76;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;2575:18:9;5315:16756:76;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;7294:11;5315:16756;;;;;;;;;;;7294:76;;5315:16756;;;;7294:76;;5315:16756;;;;;;;;;;;;;7263:1;5315:16756;;;;;;;;;;;;;;;7294:76;;;;;;;;;7606:97;7294:76;-1:-1:-1;7294:76:76;;;5315:16756;;7469:58;5315:16756;7552:47;5315:16756;;;;:::i;:::-;;;;;7449:10;;5315:16756;;;;7469:32;;5315:16756;;7469:58;7552:47;:::i;:::-;5315:16756;;:::i;7294:76::-;7552:47;7294:76;;;;7469:58;7294:76;5315:16756;7294:76;5315:16756;7294:76;;;;;;;:::i;:::-;;;;;;5315:16756;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;:::i;:::-;;;1085:42;;;:::i;:::-;336::2;18992:50:76;;;;-1:-1:-1;18992:50:76;5315:16756;;;18992:50;;;;5315:16756;18992:50;;5315:16756;18992:50;;;:::i;:::-;;;;336:42:2;18992:50:76;;;;;;;;5315:16756;1175:4137;19180:22;1175:4137;;:::i;:::-;5315:16756;19136:26;5315:16756;;19136:26;:::i;:::-;5315:16756;;19180:22;:::i;:::-;5315:16756;;19218:26;;;336:42:2;19208:37:76;;;;5315:16756;;;19208:37;;5315:16756;;;;19208:37;;5315:16756;-1:-1:-1;5315:16756:76;;;336:42:2;19208:37:76;;;;;;;;5315:16756;-1:-1:-1;5315:16756:76;;;;;19266:30;;5315:16756;19266:30;;5315:16756;;;;19266:30;5315:16756;1175:4137;5315:16756;-1:-1:-1;336:42:2;19266:30:76;;;;;;;19321:26;19266:30;;;-1:-1:-1;19266:30:76;;;5315:16756;19252:44;;;5315:16756;;19321:26;;;;5315:16756;19321:26;;5315:16756;19321:26;;1175:4137;;;;;5315:16756;;1175:4137;19321:26;;;-1:-1:-1;336:42:2;19321:26:76;;;;;;;-1:-1:-1;19321:26:76;;;5315:16756;19302:16;;;;:45;;;19266:30;19358:20;;5315:16756;;;;;;;;;19358:20;;;19398:19;;;5315:16756;19398:33;;19388:44;336:42:2;19388:44:76;;;;5315:16756;;;19388:44;;5315:16756;;;;19388:44;;5315:16756;-1:-1:-1;5315:16756:76;;;336:42:2;19388:44:76;;;;;;;19523:40;19388:44;;;19354:138;;;5315:16756;19540:22;:11;;:22;5315:16756;;;19523:40;;;;5315:16756;19523:40;;5315:16756;19523:40;;1175:4137;;;;;5315:16756;;1175:4137;19523:40;;;336:42:2;19523:40:76;;;;;;-1:-1:-1;;;19523:40:76;;;19354:138;19510:9;19540:22;19510:9;;5315:16756;;;19499:9;5315:16756;19499:9;;5315:16756;19266:30;19569:13;;;;;5315:16756;;19302:16;19611:13;;:15;5315:16756;;19693:30;;5315:16756;19653:70;5315:16756;;;;;;;;;19653:13;;:37;5315:16756;;;;;;19653:70;19540:22;19758:19;;5315:16756;19266:30;19729:13;;:26;5315:16756;19540:22;19783:13;;:26;1175:4137;;:::i;:::-;5315:16756;;19835:4;5315:16756;;;;;;;;;19845:64;;19354:138;19948:58;19965:15;;;5315:16756;19948:58;1175:4137;5315:16756;19989:16;;1175:4137;5315:16756;;;;1175:4137;5315:16756;;19948:58;;;19302:16;19948:58;;1175:4137;;5315:16756;1175:4137;;5315:16756;1175:4137;5315:16756;;;;;1175:4137;;;;5315:16756;;;1175:4137;;;;;;;19948:58;19914:31;;;:92;;;19302:16;20065:13;;5315:16756;20033:47;-1:-1:-1;20048:31:76;;5315:16756;;;;20048:31;;;19302:16;20048:31;;5315:16756;;;;;;;20048:31;5315:16756;;20033:47;;;;5315:16756;20033:47;;5315:16756;20033:47;;;:::i;:::-;;;336:42:2;20033:47:76;;;;;;;-1:-1:-1;20033:47:76;;;19354:138;5315:16756;1175:4137;5315:16756;20090:33;;20101:21;5315:16756;;20101:21;:::i;:::-;20090:33;;:::i;:::-;5315:16756;20090:40;20086:118;;19354:138;20209:23;;;:29;;;20300:44;20209:23;19965:15;20244:14;;:31;;;:::i;:::-;5315:16756;;20321:22;5315:16756;20300:44;:::i;:::-;5315:16756;20281:16;;:63;;;;5315:16756;20360:34;;20350:45;336:42:2;20350:45:76;;;;5315:16756;;;20350:45;;5315:16756;;;;20350:45;;5315:16756;-1:-1:-1;5315:16756:76;;;336:42:2;20350:45:76;;;;;;;20424:138;20350:45;;;19354:138;20458:14;;20493:23;;20534:16;;20424:138;;:::i;:::-;20402:19;5315:16756;20402:19;;:160;;;5315:16756;20568:14;;;19540:22;20568:14;;:29;:51;20660:31;;5315:16756;20625:14;;:32;:66;19302:16;-1:-1:-1;1175:4137:76;20737:19;;5315:16756;;1175:4137;;;;;:::i;:::-;20724:34;;;;;;;;19302:16;-1:-1:-1;1175:4137:76;20724:34;;20698:23;;;;5315:16756;20790:74;20807:31;;20790:74;5315:16756;;20790:74;;;;;;;:::i;:::-;5315:16756;;1175:4137;;;;;:::i;:::-;20783:82;;20724:34;20783:82;;;;;-1:-1:-1;20783:82:76;20764:16;;;5315:16756;;;20922:16;;19540:22;20922:27;5315:16756;;;;;20910:58;;5315:16756;20910:58;;5315:16756;;;;1175:4137;;;5315:16756;;;;;;1175:4137;5315:16756;336:42:2;20910:58:76;;;;;;;21579:204;20910:58;21005:94;5315:16756;20910:58;21263:23;20910:58;21579:204;20910:58;-1:-1:-1;;;20910:58:76;;;19354:138;20872:14;;;20890:16;19302;20890;;5315:16756;;21047:13;;21062:14;5315:16756;21062:14;;5315:16756;;;;;;21005:94;20975:21;;;;:124;;;21128:55;21146:19;;1175:4137;;:::i;:::-;21128:55;;:::i;:::-;21106:19;;;;5315:16756;;;21206:50;21224:19;;1175:4137;;:::i;21206:50::-;21189:14;;;;;5315:16756;21338:31;21393:19;;5315:16756;;21499:14;;5315:16756;19302:16;5315:16756;;21526:16;;5315:16756;;;;:::i;:::-;;;;;;19302:16;21289:260;;5315:16756;;21289:260;;5315:16756;19540:22;21289:260;;5315:16756;19266:30;21289:260;;5315:16756;20209:23;21289:260;;5315:16756;21263:23;:286;5315:16756;;;;;;21735:13;;19302:16;5315:16756;;21760:15;;5315:16756;;;;21579:204;;;21611:41;19302:16;21579:204;;;;;;;:::i;:::-;336:42:2;21556:233:76;;;;-1:-1:-1;21556:233:76;5315:16756;;;21556:233;;;;5315:16756;21556:233;;5315:16756;21556:233;;;:::i;:::-;;;;336:42:2;21556:233:76;;;;;;;21795:80;21556:233;19302:16;21556:233;;;19354:138;-1:-1:-1;21795:11:76;5315:16756;21795:42;;5315:16756;;;;;;21795:42;5315:16756;;21853:21;;5315:16756;;;21795:80;;;;;;5315:16756;21795:80;;5315:16756;21795:80;;;:::i;:::-;;;;;;;;;;;5315:16756;21795:80;;;19302:16;21795:80;19302:16;21795:80;;;;;;;:::i;21556:233::-;;;-1:-1:-1;21556:233:76;;;:::i;:::-;;;;20910:58;;;;;;5315:16756;20910:58;5315:16756;20910:58;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;20350:45;;;-1:-1:-1;20350:45:76;;;:::i;:::-;;;;20086:118;20140:58;;;;;;20086:118;;20033:47;;;;;;;;;;;;:::i;:::-;;;;19845:64;19889:13;;-1:-1:-1;19845:64:76;;19523:40;;;;;;;5315:16756;19523:40;5315:16756;19523:40;;;;;;;:::i;:::-;;;;;;;19388:44;;;-1:-1:-1;19388:44:76;;;:::i;:::-;;;;19354:138;19523:40;19453:19;-1:-1:-1;19453:19:76;;;5315:16756;19354:138;;19321:26;;;;19266:30;19321:26;19266:30;19321:26;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;19266:30;;;;;;;;;;;;;;:::i;:::-;;;;19208:37;;;-1:-1:-1;19208:37:76;;;:::i;:::-;;;;18992:50;;;-1:-1:-1;18992:50:76;;;:::i;:::-;;;;5315:16756;;;;;;;;;;;;;;;2723:18:9;5315:16756:76;;;;;;;2723:18:9;5315:16756:76;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1085:42;;:::i;:::-;336::2;15737:50:76;;;;-1:-1:-1;15737:50:76;5315:16756;;;15737:50;;;;5315:16756;15737:50;;5315:16756;15737:50;;;:::i;:::-;;;;336:42:2;15737:50:76;;;;;;;;5315:16756;;;;:::i;:::-;15916:30;;15870:26;5315:16756;;15870:26;:::i;:::-;5315:16756;;;;;15916:30;;;;5315:16756;15916:30;;5315:16756;15916:30;;1175:4137;;;;;5315:16756;;1175:4137;15916:30;;;-1:-1:-1;336:42:2;15916:30:76;;;;;;;-1:-1:-1;15916:30:76;;;5315:16756;15902:44;;;15916:30;15957:20;;5315:16756;;;;;;;;;15957:20;;;15997:19;;;5315:16756;15997:33;;15987:44;336:42:2;15987:44:76;;;;5315:16756;;;15987:44;;5315:16756;;;;15987:44;;5315:16756;-1:-1:-1;5315:16756:76;;;336:42:2;15987:44:76;;;;;;;16122:40;15987:44;;;15953:138;;;5315:16756;16139:22;:11;;:22;5315:16756;;;16122:40;;;;5315:16756;16122:40;;5315:16756;16122:40;;1175:4137;;;;;5315:16756;;1175:4137;16122:40;;;336:42:2;16122:40:76;;;;;;-1:-1:-1;;;16122:40:76;;;15953:138;16109:9;5315:16756;16109:9;;5315:16756;;;16098:9;;;;5315:16756;16139:22;16168:13;;;;;5315:16756;;16098:9;16210:13;;:15;5315:16756;;16292:30;;5315:16756;16252:70;5315:16756;;;;;;;;;16252:13;;:37;5315:16756;;;;;;16252:70;16139:22;16357:19;;5315:16756;15916:30;16328:13;;:26;5315:16756;16139:22;16382:13;;:26;1175:4137;;:::i;:::-;5315:16756;;;16434:4;5315:16756;;;;;;;16444:64;;15953:138;16548:58;16565:15;;;5315:16756;16548:58;1175:4137;5315:16756;16589:16;;1175:4137;5315:16756;;;;1175:4137;5315:16756;;16548:58;;;16098:9;16548:58;;1175:4137;;5315:16756;1175:4137;;5315:16756;1175:4137;5315:16756;;;;;1175:4137;;;;5315:16756;;;1175:4137;;;;;;;16548:58;;;;;;;;;:::i;:::-;16514:31;;;:92;;;16098:9;16665:13;;5315:16756;16633:47;-1:-1:-1;16648:31:76;;5315:16756;;;;16648:31;;;16098:9;16648:31;;5315:16756;;;;;;;16633:47;;;336:42:2;16633:47:76;;;;;;;-1:-1:-1;16633:47:76;;;15953:138;5315:16756;1175:4137;5315:16756;16690:33;;16701:21;5315:16756;;16701:21;:::i;16690:33::-;5315:16756;16690:40;16686:118;;15953:138;15916:30;16809:23;;:29;;;16900:44;16844:14;;;;:31;;;:::i;16900:44::-;16565:15;16881:16;;:63;;;;5315:16756;16960:34;;16950:45;336:42:2;16950:45:76;;;;5315:16756;;;16950:45;;5315:16756;;;;16950:45;;5315:16756;-1:-1:-1;5315:16756:76;;;336:42:2;16950:45:76;;;;;;;17024:138;16950:45;;;17058:14;;17093:23;;17134:16;;17024:138;;:::i;:::-;17002:19;16098:9;-1:-1:-1;1175:4137:76;5315:16756;17002:19;;:160;;;5315:16756;17168:14;;;16139:22;17168:14;;:29;:51;17260:31;;5315:16756;17225:14;;:32;:66;17337:19;5315:16756;;1175:4137;;;;;:::i;:::-;17324:34;;;;;;;;-1:-1:-1;1175:4137:76;16098:9;17324:34;17390:74;17324:34;;17298:23;;;;;5315:16756;17407:31;17390:74;5315:16756;;17390:74;;;;;;;:::i;1175:4137::-;17383:82;;17324:34;17383:82;;;;;-1:-1:-1;17383:82:76;17364:16;;;5315:16756;;;17514:11;;16139:22;17514;5315:16756;;;;;17502:53;;5315:16756;17502:53;;5315:16756;;;;1175:4137;;;5315:16756;;;;;;1175:4137;5315:16756;336:42:2;17502:53:76;;;;;;;18103:80;17502:53;16098:9;17502:53;18023:52;17502:53;17902:94;17502:53;-1:-1:-1;;;17502:53:76;;;15953:138;17471:84;;17586:66;17663:12;;17659:131;;15953:138;-1:-1:-1;17796:14:76;;5315:16756;17834:14;;:16;;5315:16756;17944:13;;17959:14;;5315:16756;;;;;;17902:94;17872:21;;;;:124;;;18061:13;18023:52;:::i;:::-;18003:17;;;;5315:16756;;;18103:42;5315:16756;18103:11;5315:16756;;;;;;;;18103:42;5315:16756;;18161:21;;5315:16756;;;18103:80;;;;;;5315:16756;18103:80;;5315:16756;18103:80;;;:::i;:::-;;;;;;;;;;18189:92;18103:80;-1:-1:-1;18103:80:76;;;15953:138;18082:18;;;;;5315:16756;;;;:::i;18103:80::-;18082:18;18103:80;;;;16098:9;18103:80;16098:9;18103:80;;;;;;;:::i;:::-;;;;17659:131;17700:82;;;;;:::i;:::-;17659:131;;;;17502:53;;;;;;5315:16756;17502:53;5315:16756;17502:53;;;;;;;:::i;:::-;;;;;16686:118;16740:58;;;;;;16686:118;;16633:47;;;;;;;;;;;;:::i;:::-;;;;16444:64;16488:13;;-1:-1:-1;16444:64:76;;16122:40;;;;;;;5315:16756;16122:40;5315:16756;16122:40;;;;;;;:::i;:::-;;;;;;;15987:44;;;-1:-1:-1;15987:44:76;;;:::i;:::-;;;;15953:138;16122:40;16052:19;-1:-1:-1;16052:19:76;;;5315:16756;15953:138;;15916:30;;;;;;;;;;;;;;:::i;:::-;;;;15737:50;;;-1:-1:-1;15737:50:76;;;:::i;:::-;;;;5315:16756;;;;;;;;;;;;;1065:26:16;5315:16756:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;5315:16756:76;;;;;;;;;;;;;;;;;;;;;;:::o;2024:14:2:-;5315:16756:76;;;;;;;:::i;:::-;18992:50;2024:14:2;;:::o;:::-;;5315:16756:76;;;;;;:::i;:::-;2024:14:2;;;;;;;;;;;;;:::o;5315:16756:76:-;;;;;;;;;;;;;;;;;;-1:-1:-1;5315:16756:76;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;5315:16756:76;;;;-1:-1:-1;5315:16756:76;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;5315:16756:76;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;5315:16756:76;;;;-1:-1:-1;5315:16756:76;;;;-1:-1:-1;5315:16756:76;;;;-1:-1:-1;5315:16756:76;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;13036:2;5315:16756;;;13036:2;5315:16756;;;:::o;:::-;;:::i;:::-;;1298:1:97;5315:16756:76;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;2024:14:2;;5315:16756:76;;;;;:::o;:::-;;;;;;;;:::i;:::-;;2024:14:2;;5315:16756:76;;;;;:::o;:::-;;;;;;;;:::i;:::-;;2024:14:2;;5315:16756:76;;;;;:::o;:::-;;;;;;;;:::i;:::-;;2024:14:2;;5315:16756:76;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;2024:14:2;;5315:16756:76;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;2024:14:2;;5315:16756:76;;;;;:::o;:::-;;;;;;;;:::i;:::-;;2024:14:2;;5315:16756:76;;;;;:::o;:::-;;;;;;;;:::i;:::-;;2024:14:2;;5315:16756:76;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;2024:14:2;;5315:16756:76;;;;;:::o;:::-;;;;;;;;:::i;:::-;;2024:14:2;;5315:16756:76;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;-1:-1:-1;5315:16756:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;5315:16756:76;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5315:16756:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;5315:16756:76;;-1:-1:-1;5315:16756:76;-1:-1:-1;5315:16756:76;;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2024:14:2;;5315:16756:76;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5315:16756:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;5315:16756:76;;-1:-1:-1;5315:16756:76;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;5315:16756:76;;;;-1:-1:-1;5315:16756:76;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;5315:16756:76;;;;-1:-1:-1;5315:16756:76;;;;-1:-1:-1;5315:16756:76;;;;-1:-1:-1;5315:16756:76;;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;2024:14:2;;5315:16756:76;;;;;:::o;:::-;;;;;;;;:::i;:::-;;2024:14:2;;5315:16756:76;;;;;:::o;:::-;;;;;;;;:::i;:::-;;2024:14:2;;5315:16756:76;;;;;:::o;:::-;;;;;;;;:::i;:::-;;2024:14:2;;5315:16756:76;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;2024:14:2;;5315:16756:76;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;2024:14:2;;5315:16756:76;;;;;:::o;:::-;;;;;;;;:::i;:::-;;2024:14:2;;5315:16756:76;;;;;:::o;:::-;;;;;;;;:::i;:::-;;2024:14:2;;5315:16756:76;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;2024:14:2;;5315:16756:76;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;2024:14:2;;5315:16756:76;;;;;:::o;:::-;;;;;;;;:::i;:::-;;2024:14:2;;5315:16756:76;;;;;;;;;;:::o;1243:204:4:-;1302:7;5315:16756:76;;;;;;;1325:14:4;:::o;1298:143::-;5315:16756:76;;;;1377:39:4;;;;;;;;192:59;;;;;5315:16756:76;;;;192:59:4;5315:16756:76;1377:39:4;;5315:16756:76;1377:39:4;;;;;;;5315:16756:76;1377:39:4;;;1298:143;1377:53;;;1370:60;:::o;1377:39::-;;;;;;;;;;;;;;:::i;:::-;;;;1085:42:76;5315:16756;;;;;;;:::i;:::-;1085:42;2024:14:2;;1085:42:76;;;;;;;;;5315:16756;1085:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1175:4137::-;;;;;1085:42;5315:16756;;1175:4137;;;;;;;;:::i;:::-;5315:16756;;;;;;:::i;:::-;-1:-1:-1;1175:4137:76;;;;;;;;;;;5315:16756;1175:4137;;;;;:::o;:::-;;;:::i;:::-;;;;:::i;:::-;;;;;:::i;:::-;;;;;5315:16756;1175:4137;;;;5315:16756;1175:4137;;;;5315:16756;;:::i;:::-;1175:4137;;;;;;;;;;;;;;;;;;;;;;;;5315:16756;;:::i;:::-;1175:4137;;;;5315:16756;1175:4137;;;;5315:16756;1175:4137;;;;;;;;;5315:16756;1175:4137;;;;5315:16756;1175:4137;;;;5315:16756;;:::i;:::-;1175:4137;;;;;;;;;:::o;:::-;;;;;;;;;5315:16756;;;-1:-1:-1;5315:16756:76;;;:::i;:::-;1175:4137;;5315:16756;;;1175:4137;;;;;;;;;;;;;5315:16756;1175:4137;;;;5315:16756;1175:4137;;5315:16756;;1175:4137;;;;;5315:16756;1175:4137;;;;;:::o;:::-;;;;;;;;;;;;;;;5315:16756;;;1175:4137;5315:16756;1175:4137;:::o;:::-;;;;;;;;;;:::o;:::-;17700:66;1175:4137;;17700:66;1175:4137;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;5315:16756;;1175:4137;;;;;;;;;:::o;:::-;;;;;;;;;;;5315:16756;;;;;;;:::i;:::-;1175:4137;2024:14:2;;1175:4137:76;;;;;:::o;:::-;5315:16756;1175:4137;;;5315:16756;1175:4137;;5315:16756;;;;;;;;:::i;:::-;;;;;1175:4137;;:::o;:::-;5315:16756;;;;;;;:::i;:::-;1175:4137;2024:14:2;;1175:4137:76;5315:16756;1175:4137;;;:::o;:::-;5315:16756;;;;;;;:::i;:::-;1175:4137;2024:14:2;;1175:4137:76;5315:16756;1175:4137;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;5315:16756;;;1175:4137;;;5315:16756;1175:4137;;;5315:16756;1175:4137;5315:16756;1175:4137::o;:::-;;;;;;5315:16756;;1175:4137;;;;;;;;:::i;5315:16756::-;;;:::i;:::-;1175:4137;;;:::i;:::-;5315:16756;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;2024:14:2;;5315:16756:76;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;2024:14:2;;5315:16756:76;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;2024:14:2;;5315:16756:76;;;;;:::o;:::-;;;;;;;;:::i;:::-;;2024:14:2;;5315:16756:76;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18653:829:97:-;18820:19;5315:16756:76;;:::i;:::-;-1:-1:-1;5315:16756:76;;;;18820:19:97;;;;5315:16756:76;18820:19:97;;;;;1175:4137:76;;;;;5315:16756;;1175:4137;18820:19:97;;;5315:16756:76;18820:19:97;;;;;;;18798:42;18820:19;-1:-1:-1;18820:19:97;;;18653:829;18798:42;;:::i;:::-;18901:5;;;5315:16756:76;;;;18888:19:97;;18820;18888;;5315:16756:76;;;;-1:-1:-1;5315:16756:76;1175:4137;5315:16756;;18888:19:97;;;;;;18923:101;18888:19;18855:53;18888:19;-1:-1:-1;18888:19:97;;;18653:829;18855:53;;:::i;:::-;5315:16756:76;18977:27:97;;5315:16756:76;;18977:46:97;;5315:16756:76;;:::i;:::-;18977:46:97;18923:101;:::i;:::-;19040:16;;;;;5315:16756:76;19040:16:97;;;;19034:34;19040:16;;19130;19318:26;19087:65;19378:52;19130:16;-1:-1:-1;19130:16:97;;19087:65;;:::i;:::-;19318:26;:::i;:::-;19386:11;5315:16756:76;19386:11:97;:::i;:::-;5315:16756:76;;19378:52:97;;;;;5315:16756:76;19378:52:97;;18820:19;19378:52;;;:::i;:::-;;;;5315:16756:76;19378:52:97;;;;;;19443:34;19378:52;-1:-1:-1;19378:52:97;;;19030:274;5315:16756:76;18901:5:97;5315:16756:76;;;19443:34:97;;;;;;:::i;19378:52::-;;;;;;-1:-1:-1;19378:52:97;;;;;;:::i;:::-;;;;19030:274;19169:16;;;;5315:16756:76;19169:30:97;19165:139;;19030:274;;-1:-1:-1;19318:26:97;19378:52;19030:274;19318:26;:::i;19165:139::-;5315:16756:76;;;19261:30:97;;18820:19;19261:30;;5315:16756:76;;;;;-1:-1:-1;5315:16756:76;1175:4137;5315:16756;;19261:30:97;;;;;;;19218:79;-1:-1:-1;19261:30:97;19318:26;19261:30;19378:52;19261:30;;;;;19165:139;19218:79;;:::i;:::-;19165:139;;;;;19261:30;;;;;;;;;;;;;;:::i;:::-;;;;;18977:46;5315:16756:76;;:::i;18888:19:97:-;;;;;;;-1:-1:-1;18888:19:97;;;;;;:::i;:::-;;;;;18820;;;;;;;-1:-1:-1;18820:19:97;;;;;;:::i;:::-;;;;;3826:134:4;;5315:16756:76;3924:29:4;;;;-1:-1:-1;5315:16756:76;;;;3924:29:4;;;;;5315:16756:76;3924:29:4;;;;;5315:16756:76;;;;;;;;;;;;;;;:::i;:::-;3924:29:4;;5315:16756:76;3924:29:4;;;;;;;;3826:134;:::o;3924:29::-;-1:-1:-1;3924:29:4;;;:::i;5315:16756:76:-;;2024:14:2;;;:::i;:::-;5315:16756:76;;;;;;:::i;:::-;2024:14:2;;;5315:16756:76;;;;;:::i;:::-;;;;;;;;:::o;2439:1488:98:-;2569:21;2439:1488;2569:21;:::i;:::-;2618:15;;;:::i;:::-;2726:13;-1:-1:-1;2721:1175:98;2741:8;;;;;;3901:21;;;2439:1488;:::o;2751:3::-;2807:19;;;:::i;:::-;2788:38;;2839:13;;;2941:22;;5315:16756:76;2941:22:98;;5315:16756:76;2941:22:98;;:::i;:::-;2926:37;;5315:16756:76;;;;-1:-1:-1;2973:31:98;;;;;:::i;:::-;;2835:1055;5315:16756:76;2726:13:98;;;2835:1055;5315:16756:76;3023:13:98;;5315:16756:76;;3124:21:98;;5315:16756:76;3124:21:98;;5315:16756:76;3124:21:98;;:::i;:::-;3109:36;;5315:16756:76;;;;-1:-1:-1;3155:31:98;;;;;:::i;:::-;;2835:1055;;3019:871;3217:1;3205:13;3217:1;;3304:21;5315:16756:76;3304:21:98;;5315:16756:76;3304:21:98;;:::i;3201:689::-;5315:16756:76;3484:19:98;;;;;:::i;:::-;3462:41;;;3517:16;;;3547:29;3572:2;3547:29;;;;:::i;3513:369::-;3615:16;;;5315:16756:76;;3645:29:98;3670:2;3645:29;;;;:::i;3611:271::-;3217:1;3709:16;3217:1;;3764:2;3739:29;;;;:::i;3705:177::-;3846:2;3821:29;;;;:::i;2136:128:4:-;;5315:16756:76;2228:29:4;;;;-1:-1:-1;5315:16756:76;;;;2228:29:4;;;;;5315:16756:76;2228:29:4;;5315:16756:76;;2228:29:4;;;5315:16756:76;;;;;;;;;;;;;;;;;:::i;2386:134:4:-;;5315:16756:76;2484:29:4;;;;-1:-1:-1;5315:16756:76;;;;2484:29:4;;;;;5315:16756:76;2484:29:4;;;;;5315:16756:76;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17033:1274:97:-;;;;17290:19;5315:16756:76;;:::i;17290:19:97:-;;;5315:16756:76;17290:19:97;;;;;;;17268:42;17290:19;-1:-1:-1;17290:19:97;;;17268:42;;:::i;:::-;17371:5;;;5315:16756:76;;;;17358:19:97;;17290;17358;;5315:16756:76;;;;-1:-1:-1;5315:16756:76;1175:4137;5315:16756;;17358:19:97;;;;;;17393:101;17358:19;17325:53;17358:19;-1:-1:-1;17358:19:97;;;17325:53;;:::i;17393:101::-;17510:16;;;;;5315:16756:76;17510:16:97;;;;17504:34;17510:16;;17600;17820:20;17600:16;17557:65;17600:16;;17557:65;;:::i;:::-;-1:-1:-1;5315:16756:76;;;;17820:20:97;;;;5315:16756:76;17820:20:97;;17290:19;17820:20;;1175:4137:76;;;;;5315:16756;;1175:4137;17820:20:97;;;5315:16756:76;17820:20:97;;;;;;;17788:53;17820:20;-1:-1:-1;17820:20:97;;;17500:274;17788:53;;:::i;:::-;17371:5;17902:6;;5315:16756:76;;;;17889:20:97;;17290:19;17889:20;;5315:16756:76;;;;-1:-1:-1;5315:16756:76;1175:4137;5315:16756;;17889:20:97;;;;;;17974:36;17889:20;17856:54;17889:20;-1:-1:-1;17889:20:97;;;17500:274;17856:54;;:::i;:::-;17987:22;-1:-1:-1;5315:16756:76;17987:22:97;;;5315:16756:76;;17974:36:97;;;;5315:16756:76;17974:36:97;;17290:19;17974:36;;;:::i;:::-;;;5315:16756:76;17974:36:97;;;;;;18222:56;17974:36;17510:16;17925:86;18026:65;17974:36;-1:-1:-1;17974:36:97;18106:82;17974:36;;;;;17500:274;17925:86;;:::i;:::-;18071:19;;;18026:65;;:::i;:::-;18149:33;;;;;5315:16756:76;;:::i;:::-;18149:33:97;18106:82;:::i;:::-;18230:11;5315:16756:76;18230:11:97;:::i;:::-;5315:16756:76;;18222:56:97;;;;;5315:16756:76;18222:56:97;;17290:19;18222:56;;;:::i;:::-;;;;5315:16756:76;18222:56:97;;;;;;;-1:-1:-1;18222:56:97;;;18284:18;17033:1274;:::o;18222:56::-;;;;;;-1:-1:-1;18222:56:97;;;;;;:::i;18149:33::-;5315:16756:76;;:::i;17974:36:97:-;;;;;;;;;;;;;;:::i;:::-;;;;;17889:20;;;;;;;-1:-1:-1;17889:20:97;;;;;;:::i;:::-;;;;;17820;;;;;;;-1:-1:-1;17820:20:97;;;;;;:::i;:::-;;;;;17500:274;17639:16;;;;5315:16756:76;17639:30:97;17635:139;;17500:274;;17820:20;17500:274;;;17635:139;5315:16756:76;;;17731:30:97;;17290:19;17731:30;;5315:16756:76;;;;-1:-1:-1;5315:16756:76;1175:4137;5315:16756;;17731:30:97;;;;;;17820:20;17731:30;17688:79;17731:30;-1:-1:-1;17731:30:97;;;17688:79;;:::i;:::-;17635:139;;;17731:30;;;;;;;-1:-1:-1;17731:30:97;;;;;;:::i;21884:184:76:-;2933:19:15;21884:184:76;2933:19:15;:::i;:::-;-1:-1:-1;5315:16756:76;;;9786:54:15;5315:16756:76;;;;;;:::i;:::-;;2024:14:2;;5315:16756:76;;;;;;;9786:54:15;;;5315:16756:76;9786:54:15;;;;;;;;;5315:16756:76;;;;;;:::i;:::-;;;;;;9786:54:15;;;;;;;;:::i;:::-;5315:16756:76;9371:159:15;679:42;9371:159;;;21884:184:76;:::o;5315:16756::-;;;;;;;;;:::o;22096:581::-;;5315:16756;;22275:13;;22271:42;;5315:16756;;-1:-1:-1;22318:64:76;;5315:16756;22388:255;22434:3;22413:19;5315:16756;;;;22413:19;;:::i;:::-;22408:24;;;;22456:4;22473:13;5315:16756;22502:3;5315:16756;;22488:12;;;;;22521:8;;22523:5;;;;:::i;:::-;22521:8;;:::i;:::-;5315:16756;22521:16;22533:4;;;;;:::i;:::-;5315:16756;;;;22521:16;5315:16756;;22521:16;22517:71;;22456:4;5315:16756;22473:13;;22517:71;22551:9;;;;5315:16756;22468:128;22603:34;;22434:3;;;:::i;:::-;22393:13;;;22603:34;22620:8;;;;:::o;22488:12::-;;;;;;;;22408:24;;;;22655:17;22096:581;:::o;22318:64::-;22351:24;;22358:17;22351:24;:::o;22271:42::-;22298:8;;;5315:16756;22298:8;:::o;5315:16756::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;232:1:97;;5315:16756:76;-1:-1:-1;5315:16756:76;;;-1:-1:-1;5315:16756:76;;232:1:97;:::o;:::-;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;5315:16756:76;;;;;;;;;;232:1:97;;;;;;5315:16756:76;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;232:1:97;;;;;;;;:::i;701:863::-;5315:16756:76;;;;;798:35:97;;;;;;;;;5315:16756:76;;;;;;;;;;;;;;;;;;798:35:97;;;;;;;;;;;-1:-1:-1;798:35:97;;;701:863;5315:16756:76;;;866:35:97;5315:16756:76;866:35:97;;798;866;;;798;866;;5315:16756:76;;;;;;;;;;;;;;;;;;866:35:97;;;;;;;;;;;1326:27;866:35;1337:15;866:35;-1:-1:-1;866:35:97;;;701:863;916:18;908:49;916:18;;;;908:49;:::i;:::-;462:50;285:44;462:50;1037:32;;1033:109;;701:863;1278:21;1173:9;;1278:17;1173:9;;:::i;:::-;1199:7;;;285:44;644:49;538:159;1199:7;1278:17;:::i;:::-;:21;:::i;:::-;1337:15;;:::i;:::-;1326:27;;:::i;:::-;5315:16756:76;;;;1383:39:97;;-1:-1:-1;1383:39:97;;;798:35;1383:39;;232:1;;;;;;;;;5315:16756:76;232:1:97;5315:16756:76;;;232:1:97;;;;1383:39;;;;;;;;;;;-1:-1:-1;1383:39:97;;;701:863;-1:-1:-1;5315:16756:76;;;1451:39:97;;232:1;798:35;1451:39;;232:1;;;;;5315:16756:76;232:1:97;5315:16756:76;;;232:1:97;5315:16756:76;-1:-1:-1;5315:16756:76;232:1:97;5315:16756:76;1451:39:97;;;;;;;;1526:24;1451:39;-1:-1:-1;1451:39:97;;;701:863;5315:16756:76;;-1:-1:-1;5315:16756:76;;;1526:24:97;;;;;5315:16756:76;1526:24:97;;798:35;1526:24;;1175:4137:76;;;;;5315:16756;;1175:4137;1526:24:97;;;;;;;;;;1504:55;1526:24;-1:-1:-1;1526:24:97;;;701:863;1504:55;;:::i;1526:24::-;;;;;;;-1:-1:-1;1526:24:97;;;;;;:::i;:::-;;;;;1451:39;-1:-1:-1;1451:39:97;;;;;;;;;;;;;;;:::i;:::-;;;;;;1383;;;;;;-1:-1:-1;1383:39:97;;;;;;:::i;:::-;;;;1033:109;5315:16756:76;1278:17:97;:21;5315:16756:76;1173:9:97;5315:16756:76;;798:35:97;1107:26;;1124:8;1107:26;1124:8;232:1;1124:8;;232:1;:::i;1107:26::-;5315:16756:76;1097:37:97;;1033:109;;;;;;;866:35;;;;798;866;798;866;;;;;;;:::i;:::-;;;;798;;;;;;;;;;;;;;:::i;:::-;;;;3931:222:98;5315:16756:76;;4071:17:98;;;5315:16756:76;;;4071:17:98;;;;5315:16756:76;4071:17:98;;:::i;:::-;5315:16756:76;4061:28:98;;;5315:16756:76;232:1:97;;;3931:222:98:o;:::-;5315:16756:76;;4071:17:98;;;5315:16756:76;;;4071:17:98;;;;5315:16756:76;4071:17:98;;:::i;:::-;5315:16756:76;4061:28:98;;;5315:16756:76;232:1:97;;;3931:222:98:o;:::-;5315:16756:76;;4071:17:98;;;5315:16756:76;;;4071:17:98;;;;5315:16756:76;4071:17:98;;:::i;:::-;5315:16756:76;4061:28:98;;;232:1:97;;;;3931:222:98:o;:::-;5315:16756:76;;4071:17:98;;;5315:16756:76;;;4071:17:98;;;;5315:16756:76;4071:17:98;;:::i;:::-;5315:16756:76;4061:28:98;;;5315:16756:76;232:1:97;;3318:2:98;5315:16756:76;;;;;;;3931:222:98;:::o;:::-;5315:16756:76;;4071:17:98;;;5315:16756:76;;;4071:17:98;;;;5315:16756:76;4071:17:98;;:::i;:::-;5315:16756:76;4061:28:98;;;5315:16756:76;232:1:97;;3138:2:98;5315:16756:76;;;;;;;3931:222:98;:::o;:::-;5315:16756:76;;4071:17:98;;;5315:16756:76;;;4071:17:98;;;;5315:16756:76;4071:17:98;;:::i;:::-;5315:16756:76;4061:28:98;;;5315:16756:76;232:1:97;;2955:2:98;5315:16756:76;;;;;;;3931:222:98;:::o;5315:16756:76:-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;1546:1263:15;;5315:16756:76;1656:85:15;;21978:1:76;1656:85:15;:::i;:::-;21978:1:76;1970:8:15;;;;;:20;;;1546:1263;1966:34;;2026:13;:9;21978:1:76;21981:66;2026:9:15;:::i;:13::-;2229:6;2234:1;2229:6;;;:18;;;1546:1263;2225:38;;1175:4137:76;2277:20:15;;;:46;;;1546:1263;2273:82;;21981:66:76;2455:7:15;;21981:66:76;;;2493:7:15;2528:11;2493:7;;;21981:66:76;2493:7:15;;;:::i;:::-;2528:11;:::i;:::-;2557:8;;2553:24;;2600:9;:13;:9;21978:1:76;2600:9:15;:::i;:::-;:13;:::i;2553:24::-;2567:10;21981:66:76;2567:10:15;:::o;2451:352::-;2630:173;;2451:352;;1546:1263::o;2630:173::-;2707:11;2672:7;;;;;21978:1:76;2672:7:15;:::i;2707:11::-;2736:8;;2732:24;;2779:9;:13;:9;21981:66:76;2779:9:15;:::i;2732:24::-;2746:10;21978:1:76;2746:10:15;:::o;2273:82::-;2339:15;;;2332:23;2339:15;;;1175:4137:76;21981:66;2332:23:15;:::i;2277:46::-;2308:15;1175:4137:76;;2301:22:15;;2277:46;;2225:38;2256:7;;;;;;;21978:1:76;2256:7:15;:::i;2229:18::-;2239:8;;;;2229:18;;1966:34;1992:8;-1:-1:-1;;1992:8:15:o;1970:20::-;1982:8;21981:66:76;1982:8:15;;;1970:20;","linkReferences":{}},"methodIdentifiers":{"IS_TEST()":"fa7626d4","excludeArtifacts()":"b5508aa9","excludeContracts()":"e20c9f71","excludeSelectors()":"b0464fdc","excludeSenders()":"1ed7831c","failed()":"ba414fa6","passkeysImp()":"5bbaf1e9","setUp()":"0a9254e4","targetArtifactSelectors()":"66d9a9a0","targetArtifacts()":"85226c81","targetContracts()":"3f7286f4","targetInterfaces()":"2ade3880","targetSelectors()":"916a17c6","targetSenders()":"3e5e3c23","test_decodeSignature_abi((bool,bytes32,bytes32,bytes32,bytes32,bytes,bytes,bytes32,bool,uint256,uint256))":"2940497d","test_decodeSignature_packed((bool,bytes32,bytes32,bytes32,bytes32,bytes,bytes,bytes32,bool,uint256,uint256))":"8002c824","test_recoverSapientSignatureCompact_invalidSignature((uint256,bytes32,bool,bytes32,bool,uint256,bytes32,uint32),uint256)":"be068d54","test_recoverSapientSignatureCompact_valid((uint256,bytes32,bool,bytes32,bool,uint256,bytes32,uint32))":"fa123aa6","test_rootForPasskey_credentialId(bool,bytes32,bytes32,uint256)":"472c3294","test_rootForPasskey_metadataHash(bool,bytes32,bytes32,bytes32)":"191a942e","test_rootForPasskey_noMetadata(bool,bytes32,bytes32)":"b71014a8"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"IS_TEST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"excludedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"passkeysImp\",\"outputs\":[{\"internalType\":\"contract PasskeysImp\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setUp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifactSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"artifact\",\"type\":\"string\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzArtifactSelector[]\",\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"targetedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetInterfaces\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"artifacts\",\"type\":\"string[]\"}],\"internalType\":\"struct StdInvariant.FuzzInterface[]\",\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"requireUserVerification\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"x\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"y\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"authenticatorData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"challengeBytes\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"metadataHash\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeMetadata\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"typeValueSeed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"originValueSeed\",\"type\":\"uint256\"}],\"internalType\":\"struct PasskeysTest.test_decodeSignature_abi_params\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"test_decodeSignature_abi\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"requireUserVerification\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"x\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"y\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"authenticatorData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"challengeBytes\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"metadataHash\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"embedMetadata\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"typeValueSeed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"originValueSeed\",\"type\":\"uint256\"}],\"internalType\":\"struct PasskeysTest.test_decodeSignature_packed_params\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"test_decodeSignature_packed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"pkSeed\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"requireUserVerification\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"metadataHash\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"embedMetadata\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"originValueSeed\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"rpIdHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"signCount\",\"type\":\"uint32\"}],\"internalType\":\"struct PasskeysTest.RecoverParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"wrongSeed\",\"type\":\"uint256\"}],\"name\":\"test_recoverSapientSignatureCompact_invalidSignature\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"pkSeed\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"requireUserVerification\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"metadataHash\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"embedMetadata\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"originValueSeed\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"rpIdHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"signCount\",\"type\":\"uint32\"}],\"internalType\":\"struct PasskeysTest.RecoverParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"test_recoverSapientSignatureCompact_valid\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"requireUserVerification\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"x\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"y\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"credentialIdSeed\",\"type\":\"uint256\"}],\"name\":\"test_rootForPasskey_credentialId\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"requireUserVerification\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"x\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"y\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"metadataHash\",\"type\":\"bytes32\"}],\"name\":\"test_rootForPasskey_metadataHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"requireUserVerification\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"x\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"y\",\"type\":\"bytes32\"}],\"name\":\"test_rootForPasskey_noMetadata\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/extensions/passkeys/Passkeys.t.sol\":\"PasskeysTest\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/extensions/passkeys/Passkeys.sol\":{\"keccak256\":\"0xa3c8da3c839300ae585fcadb8f47c0923ca49be4c4abaf53ae385fa80bda3709\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://16b20356cccdf9b5069f222b6eda3037b925b42462aeaef516ca024547f13894\",\"dweb:/ipfs/QmdigoYrscBefb9Lz9hiBsTu54vCw6o7VtkUVKNrbLrXir\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/interfaces/ISapient.sol\":{\"keccak256\":\"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489\",\"dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn\"]},\"src/utils/Base64.sol\":{\"keccak256\":\"0xcac0262a4cd9b8ad3097dbbeeddb715d1bb00de216428328044f2543ef1b7dd1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e53e555db05754733333946af30995887e7274d617744b1205f3cd8648fab3b4\",\"dweb:/ipfs/Qme9hZfFyKCMLNWqA1vK3a82k7kXznkpid4FeBFQdS67WR\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"src/utils/LibOptim.sol\":{\"keccak256\":\"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81\",\"dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x\"]},\"src/utils/P256.sol\":{\"keccak256\":\"0x15f366eef2850bb0e8a608e51f66c1caed19841631000eedc05ff34a0de38d7e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5c9403d13cecb87a232d241226bc921667d958bc68876d012e7a68a2f0df7fb7\",\"dweb:/ipfs/QmeUnWx58EzjRTmBjLAdMzswDjvuAcThP5gaUWQximCukH\"]},\"src/utils/WebAuthn.sol\":{\"keccak256\":\"0x6f825387da39964728d423244ed952709cfdeba164ca7d88a12922aa8159e52b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c8917c9c76d63df994c860f96be1d1ae68620105a35962245ed63d397048bb2e\",\"dweb:/ipfs/QmbHxKsUhc2nEyBinPSXAR9pMjLChKW2wpc9XYfddXU3rG\"]},\"test/extensions/passkeys/Passkeys.t.sol\":{\"keccak256\":\"0x2c98295442a0256c9dd22ae59464f2d1c9052bc69e5986e004735e1c7449d6f0\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://55a790bb937dd6621ba90a66543e5080c171651f5555ad907bbf519199567a03\",\"dweb:/ipfs/QmeiCDeAjkoUj2As3yyBJez8F3xKEs3iS6bGJQw7QY6td5\"]},\"test/utils/PrimitivesRPC.sol\":{\"keccak256\":\"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe\",\"dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv\"]},\"test/utils/TestUtils.sol\":{\"keccak256\":\"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad\",\"dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log","anonymous":false},{"inputs":[{"internalType":"address","name":"","type":"address","indexed":false}],"type":"event","name":"log_address","anonymous":false},{"inputs":[{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"log_bytes","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32","indexed":false}],"type":"event","name":"log_bytes32","anonymous":false},{"inputs":[{"internalType":"int256","name":"","type":"int256","indexed":false}],"type":"event","name":"log_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address","name":"val","type":"address","indexed":false}],"type":"event","name":"log_named_address","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes","name":"val","type":"bytes","indexed":false}],"type":"event","name":"log_named_bytes","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes32","name":"val","type":"bytes32","indexed":false}],"type":"event","name":"log_named_bytes32","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false}],"type":"event","name":"log_named_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"string","name":"val","type":"string","indexed":false}],"type":"event","name":"log_named_string","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false}],"type":"event","name":"log_named_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log_string","anonymous":false},{"inputs":[{"internalType":"uint256","name":"","type":"uint256","indexed":false}],"type":"event","name":"log_uint","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"logs","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"IS_TEST","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeArtifacts","outputs":[{"internalType":"string[]","name":"excludedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeContracts","outputs":[{"internalType":"address[]","name":"excludedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"excludedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSenders","outputs":[{"internalType":"address[]","name":"excludedSenders_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"failed","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"passkeysImp","outputs":[{"internalType":"contract PasskeysImp","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"setUp"},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifactSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzArtifactSelector[]","name":"targetedArtifactSelectors_","type":"tuple[]","components":[{"internalType":"string","name":"artifact","type":"string"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifacts","outputs":[{"internalType":"string[]","name":"targetedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetContracts","outputs":[{"internalType":"address[]","name":"targetedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetInterfaces","outputs":[{"internalType":"struct StdInvariant.FuzzInterface[]","name":"targetedInterfaces_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"string[]","name":"artifacts","type":"string[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"targetedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSenders","outputs":[{"internalType":"address[]","name":"targetedSenders_","type":"address[]"}]},{"inputs":[{"internalType":"struct PasskeysTest.test_decodeSignature_abi_params","name":"params","type":"tuple","components":[{"internalType":"bool","name":"requireUserVerification","type":"bool"},{"internalType":"bytes32","name":"x","type":"bytes32"},{"internalType":"bytes32","name":"y","type":"bytes32"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"bytes","name":"authenticatorData","type":"bytes"},{"internalType":"bytes","name":"challengeBytes","type":"bytes"},{"internalType":"bytes32","name":"metadataHash","type":"bytes32"},{"internalType":"bool","name":"includeMetadata","type":"bool"},{"internalType":"uint256","name":"typeValueSeed","type":"uint256"},{"internalType":"uint256","name":"originValueSeed","type":"uint256"}]}],"stateMutability":"view","type":"function","name":"test_decodeSignature_abi"},{"inputs":[{"internalType":"struct PasskeysTest.test_decodeSignature_packed_params","name":"params","type":"tuple","components":[{"internalType":"bool","name":"requireUserVerification","type":"bool"},{"internalType":"bytes32","name":"x","type":"bytes32"},{"internalType":"bytes32","name":"y","type":"bytes32"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"bytes","name":"authenticatorData","type":"bytes"},{"internalType":"bytes","name":"challengeBytes","type":"bytes"},{"internalType":"bytes32","name":"metadataHash","type":"bytes32"},{"internalType":"bool","name":"embedMetadata","type":"bool"},{"internalType":"uint256","name":"typeValueSeed","type":"uint256"},{"internalType":"uint256","name":"originValueSeed","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"test_decodeSignature_packed"},{"inputs":[{"internalType":"struct PasskeysTest.RecoverParams","name":"params","type":"tuple","components":[{"internalType":"uint256","name":"pkSeed","type":"uint256"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"bool","name":"requireUserVerification","type":"bool"},{"internalType":"bytes32","name":"metadataHash","type":"bytes32"},{"internalType":"bool","name":"embedMetadata","type":"bool"},{"internalType":"uint256","name":"originValueSeed","type":"uint256"},{"internalType":"bytes32","name":"rpIdHash","type":"bytes32"},{"internalType":"uint32","name":"signCount","type":"uint32"}]},{"internalType":"uint256","name":"wrongSeed","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"test_recoverSapientSignatureCompact_invalidSignature"},{"inputs":[{"internalType":"struct PasskeysTest.RecoverParams","name":"params","type":"tuple","components":[{"internalType":"uint256","name":"pkSeed","type":"uint256"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"bool","name":"requireUserVerification","type":"bool"},{"internalType":"bytes32","name":"metadataHash","type":"bytes32"},{"internalType":"bool","name":"embedMetadata","type":"bool"},{"internalType":"uint256","name":"originValueSeed","type":"uint256"},{"internalType":"bytes32","name":"rpIdHash","type":"bytes32"},{"internalType":"uint32","name":"signCount","type":"uint32"}]}],"stateMutability":"nonpayable","type":"function","name":"test_recoverSapientSignatureCompact_valid"},{"inputs":[{"internalType":"bool","name":"requireUserVerification","type":"bool"},{"internalType":"bytes32","name":"x","type":"bytes32"},{"internalType":"bytes32","name":"y","type":"bytes32"},{"internalType":"uint256","name":"credentialIdSeed","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"test_rootForPasskey_credentialId"},{"inputs":[{"internalType":"bool","name":"requireUserVerification","type":"bool"},{"internalType":"bytes32","name":"x","type":"bytes32"},{"internalType":"bytes32","name":"y","type":"bytes32"},{"internalType":"bytes32","name":"metadataHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"test_rootForPasskey_metadataHash"},{"inputs":[{"internalType":"bool","name":"requireUserVerification","type":"bool"},{"internalType":"bytes32","name":"x","type":"bytes32"},{"internalType":"bytes32","name":"y","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"test_rootForPasskey_noMetadata"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/extensions/passkeys/Passkeys.t.sol":"PasskeysTest"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/extensions/passkeys/Passkeys.sol":{"keccak256":"0xa3c8da3c839300ae585fcadb8f47c0923ca49be4c4abaf53ae385fa80bda3709","urls":["bzz-raw://16b20356cccdf9b5069f222b6eda3037b925b42462aeaef516ca024547f13894","dweb:/ipfs/QmdigoYrscBefb9Lz9hiBsTu54vCw6o7VtkUVKNrbLrXir"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/interfaces/ISapient.sol":{"keccak256":"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359","urls":["bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489","dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn"],"license":"Apache-2.0"},"src/utils/Base64.sol":{"keccak256":"0xcac0262a4cd9b8ad3097dbbeeddb715d1bb00de216428328044f2543ef1b7dd1","urls":["bzz-raw://e53e555db05754733333946af30995887e7274d617744b1205f3cd8648fab3b4","dweb:/ipfs/Qme9hZfFyKCMLNWqA1vK3a82k7kXznkpid4FeBFQdS67WR"],"license":"MIT"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"src/utils/LibOptim.sol":{"keccak256":"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde","urls":["bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81","dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x"],"license":"Apache-2.0"},"src/utils/P256.sol":{"keccak256":"0x15f366eef2850bb0e8a608e51f66c1caed19841631000eedc05ff34a0de38d7e","urls":["bzz-raw://5c9403d13cecb87a232d241226bc921667d958bc68876d012e7a68a2f0df7fb7","dweb:/ipfs/QmeUnWx58EzjRTmBjLAdMzswDjvuAcThP5gaUWQximCukH"],"license":"MIT"},"src/utils/WebAuthn.sol":{"keccak256":"0x6f825387da39964728d423244ed952709cfdeba164ca7d88a12922aa8159e52b","urls":["bzz-raw://c8917c9c76d63df994c860f96be1d1ae68620105a35962245ed63d397048bb2e","dweb:/ipfs/QmbHxKsUhc2nEyBinPSXAR9pMjLChKW2wpc9XYfddXU3rG"],"license":"MIT"},"test/extensions/passkeys/Passkeys.t.sol":{"keccak256":"0x2c98295442a0256c9dd22ae59464f2d1c9052bc69e5986e004735e1c7449d6f0","urls":["bzz-raw://55a790bb937dd6621ba90a66543e5080c171651f5555ad907bbf519199567a03","dweb:/ipfs/QmeiCDeAjkoUj2As3yyBJez8F3xKEs3iS6bGJQw7QY6td5"],"license":"Apache-2.0"},"test/utils/PrimitivesRPC.sol":{"keccak256":"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe","urls":["bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe","dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv"],"license":"Apache-2.0"},"test/utils/TestUtils.sol":{"keccak256":"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79","urls":["bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad","dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa"],"license":"Apache-2.0"}},"version":1},"id":76} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Payload.sol/Payload.json b/contracts/artifacts/wallet-contracts-v3/Payload.sol/Payload.json new file mode 100644 index 00000000..89b1a47c --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Payload.sol/Payload.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"BEHAVIOR_ABORT_ON_ERROR","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"BEHAVIOR_IGNORE_ERROR","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"BEHAVIOR_REVERT_ON_ERROR","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"KIND_CONFIG_UPDATE","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"KIND_DIGEST","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"KIND_MESSAGE","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"KIND_TRANSACTIONS","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"error","name":"InvalidKind","inputs":[{"name":"kind","type":"uint8","internalType":"uint8"}]}],"bytecode":{"object":"0x60808060405234601957610182908161001f823930815050f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c80630739d59a146100ad578063075a3d2d146100a85780633d5c1f9b146100a3578063420b0c25146100ad5780634a7d2aa0146100a85780634e5f5715146100a35763b570180a1461006957600080fd5b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009e57602060405160038152f35b600080fd5b610117565b6100e2565b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009e57602060405160028152f35b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009e57602060405160008152f35b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009e57602060405160018152f3fea2646970667358221220a123d663a63f2b36599c2d9fa05d650a559dc17a9fbbbb07849d0696c800136764736f6c634300081c0033","sourceMap":"275:9850:48:-:0;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436101561001257600080fd5b60003560e01c80630739d59a146100ad578063075a3d2d146100a85780633d5c1f9b146100a3578063420b0c25146100ad5780634a7d2aa0146100a85780634e5f5715146100a35763b570180a1461006957600080fd5b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009e57602060405160038152f35b600080fd5b610117565b6100e2565b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009e57602060405160028152f35b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009e57602060405160008152f35b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009e57602060405160018152f3fea2646970667358221220a123d663a63f2b36599c2d9fa05d650a559dc17a9fbbbb07849d0696c800136764736f6c634300081c0033","sourceMap":"275:9850:48:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2556:4;275:9850;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;2482:4;275:9850;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2395:4;275:9850;;","linkReferences":{}},"methodIdentifiers":{"BEHAVIOR_ABORT_ON_ERROR()":"420b0c25","BEHAVIOR_IGNORE_ERROR()":"4a7d2aa0","BEHAVIOR_REVERT_ON_ERROR()":"4e5f5715","KIND_CONFIG_UPDATE()":"0739d59a","KIND_DIGEST()":"b570180a","KIND_MESSAGE()":"3d5c1f9b","KIND_TRANSACTIONS()":"075a3d2d"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"}],\"name\":\"InvalidKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BEHAVIOR_ABORT_ON_ERROR\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BEHAVIOR_IGNORE_ERROR\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BEHAVIOR_REVERT_ON_ERROR\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"KIND_CONFIG_UPDATE\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"KIND_DIGEST\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"KIND_MESSAGE\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"KIND_TRANSACTIONS\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Agustin Aguilar, Michael Standen, William Hua\",\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"CALLS_TYPEHASH\":{\"details\":\"keccak256(\\\"Calls(Call[] calls,uint256 space,uint256 nonce,address[] wallets)Call(address to,uint256 value,bytes data,uint256 gasLimit,bool delegateCall,bool onlyFallback,uint256 behaviorOnError)\\\")\"},\"CALL_TYPEHASH\":{\"details\":\"keccak256(\\\"Call(address to,uint256 value,bytes data,uint256 gasLimit,bool delegateCall,bool onlyFallback,uint256 behaviorOnError)\\\")\"},\"CONFIG_UPDATE_TYPEHASH\":{\"details\":\"keccak256(\\\"ConfigUpdate(bytes32 imageHash,address[] wallets)\\\")\"},\"EIP712_DOMAIN_NAME_SEQUENCE\":{\"details\":\"keccak256(\\\"Sequence Wallet\\\")\"},\"EIP712_DOMAIN_TYPEHASH\":{\"details\":\"keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\")\"},\"EIP712_DOMAIN_VERSION_SEQUENCE\":{\"details\":\"keccak256(\\\"3\\\")\"},\"MESSAGE_TYPEHASH\":{\"details\":\"keccak256(\\\"Message(bytes message,address[] wallets)\\\")\"}},\"title\":\"Payload\",\"version\":1},\"userdoc\":{\"errors\":{\"InvalidKind(uint8)\":[{\"notice\":\"Error thrown when the kind is invalid\"}]},\"kind\":\"user\",\"methods\":{\"BEHAVIOR_ABORT_ON_ERROR()\":{\"notice\":\"Behavior on error: abort on error\"},\"BEHAVIOR_IGNORE_ERROR()\":{\"notice\":\"Behavior on error: ignore error\"},\"BEHAVIOR_REVERT_ON_ERROR()\":{\"notice\":\"Behavior on error: revert on error\"},\"KIND_CONFIG_UPDATE()\":{\"notice\":\"Kind of config update\"},\"KIND_DIGEST()\":{\"notice\":\"Kind of message\"},\"KIND_MESSAGE()\":{\"notice\":\"Kind of digest\"},\"KIND_TRANSACTIONS()\":{\"notice\":\"Kind of transaction\"}},\"notice\":\"Library for encoding and decoding payloads\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/modules/Payload.sol\":\"Payload\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint8","name":"kind","type":"uint8"}],"type":"error","name":"InvalidKind"},{"inputs":[],"stateMutability":"view","type":"function","name":"BEHAVIOR_ABORT_ON_ERROR","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"BEHAVIOR_IGNORE_ERROR","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"BEHAVIOR_REVERT_ON_ERROR","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"KIND_CONFIG_UPDATE","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"KIND_DIGEST","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"KIND_MESSAGE","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"KIND_TRANSACTIONS","outputs":[{"internalType":"uint8","name":"","type":"uint8"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{"BEHAVIOR_ABORT_ON_ERROR()":{"notice":"Behavior on error: abort on error"},"BEHAVIOR_IGNORE_ERROR()":{"notice":"Behavior on error: ignore error"},"BEHAVIOR_REVERT_ON_ERROR()":{"notice":"Behavior on error: revert on error"},"KIND_CONFIG_UPDATE()":{"notice":"Kind of config update"},"KIND_DIGEST()":{"notice":"Kind of message"},"KIND_MESSAGE()":{"notice":"Kind of digest"},"KIND_TRANSACTIONS()":{"notice":"Kind of transaction"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/modules/Payload.sol":"Payload"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"}},"version":1},"id":48} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Payload.t.sol/PayloadImp.json b/contracts/artifacts/wallet-contracts-v3/Payload.t.sol/PayloadImp.json new file mode 100644 index 00000000..c31614fa --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Payload.t.sol/PayloadImp.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"fromConfigUpdate","inputs":[{"name":"imageHash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]}],"stateMutability":"pure"},{"type":"function","name":"fromDigest","inputs":[{"name":"digest","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]}],"stateMutability":"pure"},{"type":"function","name":"fromMessage","inputs":[{"name":"message","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]}],"stateMutability":"pure"},{"type":"function","name":"fromPackedCalls","inputs":[{"name":"packed","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]}],"stateMutability":"view"},{"type":"function","name":"hash","inputs":[{"name":"payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"toEIP712","inputs":[{"name":"payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"type":"error","name":"InvalidKind","inputs":[{"name":"kind","type":"uint8","internalType":"uint8"}]}],"bytecode":{"object":"0x6080806040523460155761114d908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c806308a5f6b0146104b55780631990d0701461049557806325bfae9014610453578063331044c6146103f8578063685151ff146100c25763dfb49a0d1461005e57600080fd5b346100bd5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bd57610095610c90565b506100b96100a1610c90565b6003815260043560e082015260405191829182610ab7565b0390f35b600080fd5b346100bd576100d0366109e9565b906100d9610c90565b506100e2610c90565b90600082528035928360f81c60019485808316146000146103e157600060608601525b60078160f91c169081610399575b505060108181160361036f575060015b61012c8161067b565b9261013a604051948561062d565b8184527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06101678361067b565b0160005b8181106103275750506040850193845260005b868382101561031957828101359060018260f81c9101986001808316146000146102f65750306101af848951611098565b51525b6002808216146102d9575b600480821614610245575b90602080838986888e60088060019b9a1614610224575b5050505060108082161460806101f6878d51611098565b510152161460a0610208848a51611098565b51015260fe1c60c061021b838951611098565b5101520161017e565b85926060926102369201359451611098565b51019d019c528985888e6101df565b929791908883013560e81c93600384019461026081876110db565b918287116100bd578883116100bd5789856102ca602095948f9a60019a6102c389988e600360406102928a8c51611098565b5101947ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd81369503019201016106b4565b90526110db565b9d5050509293945050506101c8565b838901356020806102eb868b51611098565b51019a0199526101bd565b9850610303838851611098565b5160018560158c019b01013560601c90526101b2565b604051806100b98982610ab7565b602090604051610336816105c5565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c08201528282890101520161016b565b60209081160361038957600284019382013560f01c610123565b600184019382013560f81c610123565b60389060f61c167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b01908588013590610100031c1695019460808501528580610113565b9450601594836001013560601c6060860152610105565b346100bd5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bd5761042f610c90565b506100b961043b610c90565b6002815260043560c082015260405191829182610ab7565b346100bd576100b9610477610467366109e9565b61046f610c90565b5036916106b4565b61047f610c90565b906001825260a082015260405191829182610ab7565b346100bd5760206104ad6104a836610737565b610cd9565b604051908152f35b346100bd5760206104c536610737565b80820151156105bc5761056d60005b604051848101917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408301527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606083015260808201523060a082015260a0815261056460c08261062d565b51902091610cd9565b60405190838201927f1901000000000000000000000000000000000000000000000000000000000000845260228301526042820152604281526105b160628261062d565b519020604051908152f35b61056d466104d4565b60e0810190811067ffffffffffffffff8211176105e157604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610120810190811067ffffffffffffffff8211176105e157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176105e157604052565b359081151582036100bd57565b67ffffffffffffffff81116105e15760051b60200190565b359073ffffffffffffffffffffffffffffffffffffffff821682036100bd57565b92919267ffffffffffffffff82116105e157604051916106fc60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116018461062d565b8294818452818301116100bd578281602093846000960137010152565b9080601f830112156100bd57816020610734933591016106b4565b90565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126100bd576004359067ffffffffffffffff82116100bd576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83830301126100bd57604051916107ae83610610565b806004013560ff811681036100bd5783526107cb6024820161066e565b6020840152604481013567ffffffffffffffff81116100bd578101826023820112156100bd5760048101356107ff8161067b565b9161080d604051938461062d565b818352602060048185019360051b83010101908582116100bd5760248101925b82841061091557505050506040840152606481013560608401526084810135608084015260a481013567ffffffffffffffff81116100bd5782600461087492840101610719565b60a084015260c481013560c084015260e481013560e08401526101048101359067ffffffffffffffff82116100bd570190806023830112156100bd5760048201356108be8161067b565b926108cc604051948561062d565b818452602060048186019360051b830101019283116100bd57602401905b8282106108fd5750505061010082015290565b6020809161090a84610693565b8152019101906108ea565b833567ffffffffffffffff81116100bd5760049083010160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828a0301126100bd5760405191610965836105c5565b61097160208301610693565b83526040820135602084015260608201359267ffffffffffffffff84116100bd5760e0836109a68c6020809881980101610719565b6040840152608081013560608401526109c160a0820161066e565b60808401526109d260c0820161066e565b60a0840152013560c082015281520193019261082d565b9060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126100bd5760043567ffffffffffffffff81116100bd57826023820112156100bd5780600401359267ffffffffffffffff84116100bd57602484830101116100bd576024019190565b919082519283825260005b848110610aa25750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201610a63565b9060208252610140820160ff82511660208401526020820151151560408401526040820151906101206060850152815180915261016084019060206101608260051b8701019301916000905b828210610be85750505050610b5d6101009160608401516080860152608084015160a086015260a08401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08683030160c0870152610a58565b9160c081015160e085015260e0810151828501520151916101207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828403019101526020808351928381520192019060005b818110610bbc5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101610baf565b90919293602080827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea08a6001950301855287519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080610c5a604085015160e0604086015260e0850190610a58565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152960192019201909291610b03565b60405190610c9d82610610565b6060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b61010081015160405160208101818193602081519391019260005b818110611069575050610d2e9250037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261062d565b5190209060ff8151168015600014610f3c575090604082015192835191610d6d610d578461067b565b93610d65604051958661062d565b80855261067b565b937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe060208501950136863760005b8651811015610e6d5780610db160019289611098565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152610e596101208261062d565b519020610e668288611098565b5201610d9b565b5092919450926040519081602081019182945192909260005b818110610f23575050610ec09250037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261062d565b51902091608060608301519201516040519260208401947f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a2865260408501526060840152608083015260a082015260a08152610f1d60c08261062d565b51902090565b8451835260209485019486945090920191600101610e86565b60018103610f96575060a0015160208151910120906040519060208201927fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46684526040830152606082015260608152610f1d60808261062d565b60028103610fe9575060c00151906040519060208201927f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e484526040830152606082015260608152610f1d60808261062d565b6003810361103c575060e00151906040519060208201927fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46684526040830152606082015260608152610f1d60808261062d565b7f048183200000000000000000000000000000000000000000000000000000000060005260045260246000fd5b845173ffffffffffffffffffffffffffffffffffffffff16835260209485019486945090920191600101610cf4565b80518210156110ac5760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b919082018092116110e857565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220068f502f2785fb24737a6edc7c5ed5e13141da76b680187b8f221e2a5a4ea92f64736f6c634300081c0033","sourceMap":"330:961:94:-:0;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436101561001257600080fd5b60003560e01c806308a5f6b0146104b55780631990d0701461049557806325bfae9014610453578063331044c6146103f8578063685151ff146100c25763dfb49a0d1461005e57600080fd5b346100bd5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bd57610095610c90565b506100b96100a1610c90565b6003815260043560e082015260405191829182610ab7565b0390f35b600080fd5b346100bd576100d0366109e9565b906100d9610c90565b506100e2610c90565b90600082528035928360f81c60019485808316146000146103e157600060608601525b60078160f91c169081610399575b505060108181160361036f575060015b61012c8161067b565b9261013a604051948561062d565b8184527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06101678361067b565b0160005b8181106103275750506040850193845260005b868382101561031957828101359060018260f81c9101986001808316146000146102f65750306101af848951611098565b51525b6002808216146102d9575b600480821614610245575b90602080838986888e60088060019b9a1614610224575b5050505060108082161460806101f6878d51611098565b510152161460a0610208848a51611098565b51015260fe1c60c061021b838951611098565b5101520161017e565b85926060926102369201359451611098565b51019d019c528985888e6101df565b929791908883013560e81c93600384019461026081876110db565b918287116100bd578883116100bd5789856102ca602095948f9a60019a6102c389988e600360406102928a8c51611098565b5101947ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd81369503019201016106b4565b90526110db565b9d5050509293945050506101c8565b838901356020806102eb868b51611098565b51019a0199526101bd565b9850610303838851611098565b5160018560158c019b01013560601c90526101b2565b604051806100b98982610ab7565b602090604051610336816105c5565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c08201528282890101520161016b565b60209081160361038957600284019382013560f01c610123565b600184019382013560f81c610123565b60389060f61c167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b01908588013590610100031c1695019460808501528580610113565b9450601594836001013560601c6060860152610105565b346100bd5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bd5761042f610c90565b506100b961043b610c90565b6002815260043560c082015260405191829182610ab7565b346100bd576100b9610477610467366109e9565b61046f610c90565b5036916106b4565b61047f610c90565b906001825260a082015260405191829182610ab7565b346100bd5760206104ad6104a836610737565b610cd9565b604051908152f35b346100bd5760206104c536610737565b80820151156105bc5761056d60005b604051848101917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408301527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606083015260808201523060a082015260a0815261056460c08261062d565b51902091610cd9565b60405190838201927f1901000000000000000000000000000000000000000000000000000000000000845260228301526042820152604281526105b160628261062d565b519020604051908152f35b61056d466104d4565b60e0810190811067ffffffffffffffff8211176105e157604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610120810190811067ffffffffffffffff8211176105e157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176105e157604052565b359081151582036100bd57565b67ffffffffffffffff81116105e15760051b60200190565b359073ffffffffffffffffffffffffffffffffffffffff821682036100bd57565b92919267ffffffffffffffff82116105e157604051916106fc60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116018461062d565b8294818452818301116100bd578281602093846000960137010152565b9080601f830112156100bd57816020610734933591016106b4565b90565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126100bd576004359067ffffffffffffffff82116100bd576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83830301126100bd57604051916107ae83610610565b806004013560ff811681036100bd5783526107cb6024820161066e565b6020840152604481013567ffffffffffffffff81116100bd578101826023820112156100bd5760048101356107ff8161067b565b9161080d604051938461062d565b818352602060048185019360051b83010101908582116100bd5760248101925b82841061091557505050506040840152606481013560608401526084810135608084015260a481013567ffffffffffffffff81116100bd5782600461087492840101610719565b60a084015260c481013560c084015260e481013560e08401526101048101359067ffffffffffffffff82116100bd570190806023830112156100bd5760048201356108be8161067b565b926108cc604051948561062d565b818452602060048186019360051b830101019283116100bd57602401905b8282106108fd5750505061010082015290565b6020809161090a84610693565b8152019101906108ea565b833567ffffffffffffffff81116100bd5760049083010160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828a0301126100bd5760405191610965836105c5565b61097160208301610693565b83526040820135602084015260608201359267ffffffffffffffff84116100bd5760e0836109a68c6020809881980101610719565b6040840152608081013560608401526109c160a0820161066e565b60808401526109d260c0820161066e565b60a0840152013560c082015281520193019261082d565b9060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126100bd5760043567ffffffffffffffff81116100bd57826023820112156100bd5780600401359267ffffffffffffffff84116100bd57602484830101116100bd576024019190565b919082519283825260005b848110610aa25750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201610a63565b9060208252610140820160ff82511660208401526020820151151560408401526040820151906101206060850152815180915261016084019060206101608260051b8701019301916000905b828210610be85750505050610b5d6101009160608401516080860152608084015160a086015260a08401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08683030160c0870152610a58565b9160c081015160e085015260e0810151828501520151916101207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828403019101526020808351928381520192019060005b818110610bbc5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101610baf565b90919293602080827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea08a6001950301855287519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080610c5a604085015160e0604086015260e0850190610a58565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152960192019201909291610b03565b60405190610c9d82610610565b6060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b61010081015160405160208101818193602081519391019260005b818110611069575050610d2e9250037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261062d565b5190209060ff8151168015600014610f3c575090604082015192835191610d6d610d578461067b565b93610d65604051958661062d565b80855261067b565b937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe060208501950136863760005b8651811015610e6d5780610db160019289611098565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152610e596101208261062d565b519020610e668288611098565b5201610d9b565b5092919450926040519081602081019182945192909260005b818110610f23575050610ec09250037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261062d565b51902091608060608301519201516040519260208401947f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a2865260408501526060840152608083015260a082015260a08152610f1d60c08261062d565b51902090565b8451835260209485019486945090920191600101610e86565b60018103610f96575060a0015160208151910120906040519060208201927fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46684526040830152606082015260608152610f1d60808261062d565b60028103610fe9575060c00151906040519060208201927f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e484526040830152606082015260608152610f1d60808261062d565b6003810361103c575060e00151906040519060208201927fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46684526040830152606082015260608152610f1d60808261062d565b7f048183200000000000000000000000000000000000000000000000000000000060005260045260246000fd5b845173ffffffffffffffffffffffffffffffffffffffff16835260209485019486945090920191600101610cf4565b80518210156110ac5760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b919082018092116110e857565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220068f502f2785fb24737a6edc7c5ed5e13141da76b680187b8f221e2a5a4ea92f64736f6c634300081c0033","sourceMap":"330:961:94:-:0;;;;;;;;;;;;;;;;;;;;;;9682:18:48;330:961:94;9682:18:48;;;330:961:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;2556:4:48;330:961:94;;;;;4826:15:48;;330:961:94;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;;;;;566:109:68;;;;;;;5163:17:48;;;;;:25;5159:140;566:109:68;;;330:961:94;5198:14:48;;;330:961:94;5159:140:48;5396:4;330:961:94;;;5376:24:48;5411:13;;5407:122;;5159:140;-1:-1:-1;;5635:4:48;5622:17;;;:25;5635:4;;5657:12;566:109:68;5618:320:48;330:961:94;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;5966:14:48;;330:961:94;5966:14:48;;:37;;;330:961:94;6044:3:48;6030:12;;;;;;;798:135:68;;;;;566:109;798:135;566:109;798:135;;;6227:12:48;566:109:68;6227:12:48;;;:20;6223:226;566:109:68;;;6314:4:48;;6283:17;:14;;;:17;:::i;:::-;;330:961:94;6223:226:48;6529:4;6521:12;;;:20;6517:109;;6223:226;330:961:94;6696:12:48;;;:20;6692:287;;6223:226;7057:12;330:961:94;7057:12:48;;;;;;7065:4;7057:12;566:109:68;7057:12:48;;;:20;7053:112;;6223:226;7275:12;;;;5635:4;7275:12;;;:20;330:961:94;7241:17:48;:14;;;:17;:::i;:::-;;:30;330:961:94;7398:12:48;:20;330:961:94;7364:17:48;:14;;;:17;:::i;:::-;;:30;330:961:94;;;;7494:17:48;:14;;;:17;:::i;:::-;;:33;330:961:94;;6015:13:48;;7053:112;2102:103:68;;330:961:94;2102:103:68;7090:17:48;2102:103:68;;;7090:14:48;;:17;:::i;:::-;;:26;2102:103:68;;330:961:94;;7053:112:48;;;;;;6692:287;1318:135:68;;;;;;;;;;;;;;6914:22:48;;;;;:::i;:::-;330:961:94;;;;;;;;;;;6874:14:48;;6947:23;330:961:94;6874:14:48;;;;566:109:68;6874:14:48;330:961:94;6874:14:48;;;1318:135:68;330:961:94;6874:17:48;:14;;;:17;:::i;:::-;;:22;330:961:94;;;;;;;;;;;:::i;:::-;6874:63:48;;6947:23;:::i;:::-;6692:287;;;;;;;;;;;;6517:109;2102:103:68;;;;330:961:94;6554:14:48;:17;:14;;;:17;:::i;:::-;;:23;2102:103:68;;330:961:94;;6517:109:48;;6223:226;6380:14;;:17;:14;;;:17;:::i;:::-;;566:109:68;1840:135;;;;;;;;330:961:94;1840:135:68;330:961:94;;6223:226:48;;6030:12;330:961:94;;;;6030:12:48;330:961:94;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5618:320:48;5779:4;5766:17;;;:25;5779:4;;1058:135:68;;;;;;;;;5618:320:48;;5762:170;566:109:68;798:135;;;;;;566:109;798:135;5618:320:48;;5407:122;2363:226:68;;;;;;566:109;2363:226;;;;;;;;;;;;;;;5459:14:48;;;;330:961:94;5407:122:48;;;;5159:140;5237:55;;1840:135:68;;;566:109;1840:135;;;;;5238:14:48;;330:961:94;5159:140:48;;330:961:94;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;2482:4:48;330:961:94;;;;4656:18:48;;;330:961:94;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;:::i;:::-;;;:::i;:::-;;2395:4:48;330:961:94;;4474:16:48;;;:26;330:961:94;;;;;;;:::i;:::-;;;;;1129:25;330:961;;;:::i;:::-;1129:25;:::i;:::-;330:961;;;;;;;;;;9682:18:48;330:961:94;;;:::i;:::-;9682:18:48;;;330:961:94;;1206:48:48;;9743:18;330:961:94;1206:48:48;330:961:94;;1077:202:48;;;330:961:94;539:66:48;330:961:94;;709:66:48;330:961:94;868:66:48;;330:961:94;868:66:48;;;;330:961:94;868:66:48;;;330:961:94;9710:4:48;868:66;;;330:961:94;868:66:48;1077:202;;;;;;:::i;:::-;330:961:94;1060:225:48;;9743:18;;:::i;:::-;330:961:94;;9784:48:48;;;;330:961:94;;;;;;;;;;;;;9784:48:48;;;;;;:::i;:::-;330:961:94;9774:59:48;;330:961:94;;;;;;1206:48:48;9743:18;1240:13;1206:48;;330:961:94;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;330:961:94;;;;;-1:-1:-1;330:961:94;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;330:961:94;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;-1:-1:-1;330:961:94;;;;;;;;;;;-1:-1:-1;330:961:94;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;330:961:94;;-1:-1:-1;330:961:94;;;;;;;;;-1:-1:-1;330:961:94;;;;-1:-1:-1;330:961:94;;;;;;;;;-1:-1:-1;330:961:94;;;;-1:-1:-1;330:961:94;;;;;;:::o;8278:1282:48:-;8416:22;;;;330:961:94;;8399:40:48;;;;;330:961:94;8399:40:48;330:961:94;;;;;;;;;;;;;8399:40:48;;;;;;;;;;;;;:::i;:::-;330:961:94;8389:51:48;;330:961:94;;;;;8451:34:48;;8447:1109;330:961:94;;;8525:14:48;;330:961:94;8525:14:48;;;330:961:94;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;:::i;:::-;;8399:40:48;;330:961:94;;;;;;;;8164:3:48;330:961:94;;8146:16:48;;;;;8202:8;;330:961:94;8202:8:48;;;:::i;:::-;;330:961:94;1478:66:48;;330:961:94;7708:7:48;8399:40;7708:7;;1799:66;7727:6;330:961:94;7727:6:48;;;8399:40;330:961:94;;;;7717:17:48;7736:10;;;;1799:66;7748:14;;;330:961:94;;;7764:14:48;7780:17;7764:14;;;330:961:94;;;7780:17:48;;1799:66;330:961:94;;;7667:138:48;8399:40;7667:138;;330:961:94;1478:66:48;330:961:94;;;1478:66:48;;330:961:94;7736:10:48;1478:66;;330:961:94;7748:14:48;1478:66;;330:961:94;7764:14:48;1478:66;;330:961:94;7780:17:48;1478:66;;330:961:94;1478:66:48;;;330:961:94;8416:22:48;1478:66;;330:961:94;8416:22:48;7667:138;;;;;;:::i;:::-;330:961:94;7650:161:48;;8177:34;;;;:::i;:::-;330:961:94;;8131:13:48;;8146:16;;;;;;;330:961:94;;8240:28:48;;8399:40;8240:28;;;;330:961:94;;;;;;;;;;;;8240:28:48;;;;;;8399:40;8240:28;;;;;;:::i;:::-;330:961:94;8230:39:48;;8750:14;7748;7736:10;8750:14;;1799:66;8766:14;;1799:66;330:961:94;;8712:82:48;8399:40;8712:82;;330:961:94;1799:66:48;330:961:94;;;1799:66:48;;330:961:94;7736:10:48;1799:66;;330:961:94;7748:14:48;1799:66;;330:961:94;7764:14:48;1799:66;;330:961:94;7764:14:48;8712:82;;;7780:17;8712:82;;:::i;:::-;330:961:94;8702:93:48;;8695:100;:::o;330:961:94:-;;;;;8399:40:48;330:961:94;;;;;;-1:-1:-1;330:961:94;;;;;;;;8447:1109:48;330:961:94;8812:29:48;;330:961:94;;8998:16:48;;;;8399:40;330:961:94;;;;8988:27:48;330:961:94;;;8959:70:48;8399:40;8959:70;;330:961:94;1979:66:48;330:961:94;;;1979:66:48;;330:961:94;1979:66:48;;;330:961:94;1979:66:48;8959:70;;;;;;:::i;8808:748::-;2482:4;9047:35;;2482:4;;9216:18;;;1979:66;330:961:94;;;9181:67:48;8399:40;9181:67;;330:961:94;2174:66:48;330:961:94;;;1979:66:48;;330:961:94;1979:66:48;;;330:961:94;1979:66:48;9181:67;;;;;;:::i;9043:513::-;2556:4;9266:28;;2556:4;;9443:15;;;1979:66;330:961:94;;;9414:58:48;8399:40;9414:58;;330:961:94;1979:66:48;330:961:94;;;1979:66:48;;330:961:94;1979:66:48;;;330:961:94;1979:66:48;9414:58;;;;;;:::i;9262:294::-;9523:26;330:961:94;9523:26:48;;330:961:94;2556:4:48;330:961:94;9523:26:48;330:961:94;;;;;;;8399:40:48;330:961:94;;;;;;-1:-1:-1;330:961:94;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;","linkReferences":{}},"methodIdentifiers":{"fromConfigUpdate(bytes32)":"331044c6","fromDigest(bytes32)":"dfb49a0d","fromMessage(bytes)":"25bfae90","fromPackedCalls(bytes)":"685151ff","hash((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]))":"08a5f6b0","toEIP712((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]))":"1990d070"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"}],\"name\":\"InvalidKind\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"}],\"name\":\"fromConfigUpdate\",\"outputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"}],\"name\":\"fromDigest\",\"outputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"fromMessage\",\"outputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"packed\",\"type\":\"bytes\"}],\"name\":\"fromPackedCalls\",\"outputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"payload\",\"type\":\"tuple\"}],\"name\":\"hash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"payload\",\"type\":\"tuple\"}],\"name\":\"toEIP712\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"InvalidKind(uint8)\":[{\"notice\":\"Error thrown when the kind is invalid\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/modules/Payload.t.sol\":\"PayloadImp\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"test/modules/Payload.t.sol\":{\"keccak256\":\"0xcd896e0be4c1afaf7116aa3b9ed47c3bda9a53d8e004ef356b4f0edca97ea6d0\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4a1bcda2f7b1bac77b9b8d49a49dc70bee86e9bb23ee072b0718b8f7f7a02795\",\"dweb:/ipfs/QmaBG9nQkH8apNinv5sCo31E7a53NDc84rDYWa9cKAhUbG\"]},\"test/utils/PrimitivesRPC.sol\":{\"keccak256\":\"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe\",\"dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv\"]},\"test/utils/TestUtils.sol\":{\"keccak256\":\"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad\",\"dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint8","name":"kind","type":"uint8"}],"type":"error","name":"InvalidKind"},{"inputs":[{"internalType":"bytes32","name":"imageHash","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"fromConfigUpdate","outputs":[{"internalType":"struct Payload.Decoded","name":"","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]}]},{"inputs":[{"internalType":"bytes32","name":"digest","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"fromDigest","outputs":[{"internalType":"struct Payload.Decoded","name":"","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]}]},{"inputs":[{"internalType":"bytes","name":"message","type":"bytes"}],"stateMutability":"pure","type":"function","name":"fromMessage","outputs":[{"internalType":"struct Payload.Decoded","name":"","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]}]},{"inputs":[{"internalType":"bytes","name":"packed","type":"bytes"}],"stateMutability":"view","type":"function","name":"fromPackedCalls","outputs":[{"internalType":"struct Payload.Decoded","name":"","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]}]},{"inputs":[{"internalType":"struct Payload.Decoded","name":"payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]}],"stateMutability":"view","type":"function","name":"hash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"struct Payload.Decoded","name":"payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]}],"stateMutability":"pure","type":"function","name":"toEIP712","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/modules/Payload.t.sol":"PayloadImp"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"test/modules/Payload.t.sol":{"keccak256":"0xcd896e0be4c1afaf7116aa3b9ed47c3bda9a53d8e004ef356b4f0edca97ea6d0","urls":["bzz-raw://4a1bcda2f7b1bac77b9b8d49a49dc70bee86e9bb23ee072b0718b8f7f7a02795","dweb:/ipfs/QmaBG9nQkH8apNinv5sCo31E7a53NDc84rDYWa9cKAhUbG"],"license":"Apache-2.0"},"test/utils/PrimitivesRPC.sol":{"keccak256":"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe","urls":["bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe","dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv"],"license":"Apache-2.0"},"test/utils/TestUtils.sol":{"keccak256":"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79","urls":["bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad","dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa"],"license":"Apache-2.0"}},"version":1},"id":94} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Payload.t.sol/PayloadTest.json b/contracts/artifacts/wallet-contracts-v3/Payload.t.sol/PayloadTest.json new file mode 100644 index 00000000..a9510d1a --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Payload.t.sol/PayloadTest.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"excludeArtifacts","inputs":[],"outputs":[{"name":"excludedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"excludeContracts","inputs":[],"outputs":[{"name":"excludedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"excludeSelectors","inputs":[],"outputs":[{"name":"excludedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"excludeSenders","inputs":[],"outputs":[{"name":"excludedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"payloadImp","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract PayloadImp"}],"stateMutability":"view"},{"type":"function","name":"setUp","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"targetArtifactSelectors","inputs":[],"outputs":[{"name":"targetedArtifactSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzArtifactSelector[]","components":[{"name":"artifact","type":"string","internalType":"string"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetArtifacts","inputs":[],"outputs":[{"name":"targetedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"targetContracts","inputs":[],"outputs":[{"name":"targetedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"targetInterfaces","inputs":[],"outputs":[{"name":"targetedInterfaces_","type":"tuple[]","internalType":"struct StdInvariant.FuzzInterface[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"artifacts","type":"string[]","internalType":"string[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSelectors","inputs":[],"outputs":[{"name":"targetedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSenders","inputs":[],"outputs":[{"name":"targetedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"test_fromConfigUpdate","inputs":[{"name":"_imageHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_fromDigest","inputs":[{"name":"_digest","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_fromMessage","inputs":[{"name":"_message","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_fromPackedCalls","inputs":[{"name":"_calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"_space","type":"uint256","internalType":"uint256"},{"name":"_nonce","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fromPackedCalls_2bytes","inputs":[{"name":"_call","type":"tuple","internalType":"struct Payload.Call","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fromPackedCalls_self","inputs":[{"name":"_call","type":"tuple","internalType":"struct Payload.Call","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_hashFor_invalidPayload","inputs":[{"name":"_kind","type":"uint8","internalType":"uint8"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_hashFor_kindConfigUpdate","inputs":[{"name":"_imageHash","type":"bytes32","internalType":"bytes32"},{"name":"_parents","type":"address[]","internalType":"address[]"},{"name":"_wallet","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_hashFor_kindMessage","inputs":[{"name":"_message","type":"bytes","internalType":"bytes"},{"name":"_parents","type":"address[]","internalType":"address[]"},{"name":"_wallet","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_hashFor_kindMessage_as_digest","inputs":[{"name":"_message","type":"bytes","internalType":"bytes"},{"name":"_parents","type":"address[]","internalType":"address[]"},{"name":"_wallet","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_hashFor_kindTransactions","inputs":[{"name":"_to","type":"address","internalType":"address"},{"name":"_value","type":"uint256","internalType":"uint256"},{"name":"_data","type":"bytes","internalType":"bytes"},{"name":"_gasLimit","type":"uint256","internalType":"uint256"},{"name":"_delegateCall","type":"bool","internalType":"bool"},{"name":"_onlyFallback","type":"bool","internalType":"bool"},{"name":"_behaviorOnError","type":"uint256","internalType":"uint256"},{"name":"_space","type":"uint256","internalType":"uint256"},{"name":"_nonce","type":"uint256","internalType":"uint256"},{"name":"_parents","type":"address[]","internalType":"address[]"},{"name":"_wallet","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_hashFor_kindTransactions","inputs":[{"name":"_calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"_space","type":"uint256","internalType":"uint256"},{"name":"_nonce","type":"uint256","internalType":"uint256"},{"name":"_parents","type":"address[]","internalType":"address[]"},{"name":"_wallet","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_hash_kindConfigUpdate","inputs":[{"name":"_imageHash","type":"bytes32","internalType":"bytes32"},{"name":"_parents","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_hash_kindMessage","inputs":[{"name":"_message","type":"bytes","internalType":"bytes"},{"name":"_parents","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_hash_kindMessage_as_digest","inputs":[{"name":"_message","type":"bytes","internalType":"bytes"},{"name":"_parents","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_hash_kindTransactions","inputs":[{"name":"_to","type":"address","internalType":"address"},{"name":"_value","type":"uint256","internalType":"uint256"},{"name":"_data","type":"bytes","internalType":"bytes"},{"name":"_gasLimit","type":"uint256","internalType":"uint256"},{"name":"_delegateCall","type":"bool","internalType":"bool"},{"name":"_onlyFallback","type":"bool","internalType":"bool"},{"name":"_behaviorOnError","type":"uint256","internalType":"uint256"},{"name":"_space","type":"uint256","internalType":"uint256"},{"name":"_nonce","type":"uint256","internalType":"uint256"},{"name":"_parents","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"error","name":"InvalidKind","inputs":[{"name":"kind","type":"uint8","internalType":"uint8"}]}],"bytecode":{"object":"0x60808060405234602f57600160ff19600c541617600c55600160ff19601f541617601f55615ecb90816100358239f35b600080fdfe6080604052600436101561001257600080fd5b6000803560e01c80630608b5c5146127bd5780630a9254e4146126ea5780631196bf221461257a5780631d20f132146125255780631ed7831c1461247c57806325dac3ef1461234b5780632ade38801461218e57806336a66f13146120d85780633e5e3c231461202f5780633f7286f414611f865780634acfe6cb14611e1a5780635001832514611d545780635651d1a114611cb85780635f2f2db614611aea57806366d9a9a01461198f5780636be9a365146118c957806380e03978146117de57806385226c811461172e578063916a17c614611659578063a474ffa814611401578063a8f2321414610a4b578063b0464fdc14610976578063b5508aa9146108c6578063ba414fa614610883578063c38f7d0714610642578063e20c9f7114610589578063e40a11fb14610519578063f72bf8a5146103e7578063fa7626d4146103a65763fbc997771461016757600080fd5b346103a35760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a35760043567ffffffffffffffff81116103a1576101b6903690600401612de7565b60643567ffffffffffffffff811161039d576101d6903690600401612916565b6084359173ffffffffffffffffffffffffffffffffffffffff8316830361039957610202604435613f0c565b61020d602435613fce565b610215612e66565b9386855260408501938452606085019182526080850192835261010085015260ff61024260038880614b33565b6102f560406102f08151916102578184612879565b600c83527f426f756e6420726573756c74000000000000000000000000000000000000000060208401526102be81519384927fb60e72cc00000000000000000000000000000000000000000000000000000000602085015260248401526064830190612b38565b856044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612879565b614d12565b168085521561032d575b8561032a8661032487610312838261392d565b9267ffffffffffffffff461690613aa0565b90613e8a565b80f35b61033b819693949651613fce565b90526103478151613f0c565b9052805b82518051821015610386579061037060c061036883600195612f8b565b510151613fee565b60c061037d838751612f8b565b5101520161034b565b5090939150610324905061032a386102ff565b8380fd5b8280fd5b505b80fd5b50346103a357807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a357602060ff601f54166040519015158152f35b50346103a35760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a35760243567ffffffffffffffff81116103a157610437903690600401612916565b61043f612e66565b906002825260043560c083015261010082015273ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051907f08a5f6b0000000000000000000000000000000000000000000000000000000008252602082806104a68660048301612fe8565b0381845afa91821561050e5784926104d3575b5061032a926103249167ffffffffffffffff461690613aa0565b9091506020813d602011610506575b816104ef60209383612879565b8101031261050157519061032a6104b9565b600080fd5b3d91506104e2565b6040513d86823e3d90fd5b50346103a35761032a6103126103246105313661297b565b9491928591610579610544368785612a45565b6020815191012092610554612e66565b936003855260e08501528261010085015261056d612e66565b96600188523691612a45565b60a086015261010085015261392d565b50346103a357807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a35760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b818110610616576106128561060681870382612879565b60405191829182612ac5565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016105ef565b50346103a35760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a35760043567ffffffffffffffff81116103a157610692903690600401612de7565b61069d604435613f0c565b906106a9602435613fce565b91835b82518110156106dc57806106c760c061036860019487612f8b565b60c06106d38387612f8b565b510152016106ac565b50610767926106e9612e66565b92858452604084015260608301526080820152826107068261410b565b61070f8161429b565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c1660405180809681947f685151ff000000000000000000000000000000000000000000000000000000008352602060048401526024830190612b38565b03915afa9081156108785761084b61081f926107e49261032a958792610850575b50610810906107d56040516107d0816107a48760208301612fe8565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612879565b61429b565b60405194859160208301612fe8565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101855284612879565b60405193849160208301612fe8565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101845283612879565b613ffb565b610810919250610871903d808a833e6108698183612879565b810190613240565b9190610788565b6040513d85823e3d90fd5b50346103a357807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a35760206108bc613847565b6040519015158152f35b50346103a357807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a357601954610901816128ba565b9161090f6040519384612879565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b838310610959576040516020808252819061061290820188612b7b565b6001602081926109688561349b565b81520192019201919061093c565b50346103a357807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a357601c546109b1816128ba565b916109bf6040519384612879565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b838310610a0157604051806106128782612d42565b60026020600192604051610a1481612840565b73ffffffffffffffffffffffffffffffffffffffff8654168152610a398587016135a0565b838201528152019201920191906109ec565b50346103a35760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a35760043567ffffffffffffffff81116103a157610a9b903690600401612c5e565b60c08101610aa98151613fee565b9052601f5460081c73ffffffffffffffffffffffffffffffffffffffff1680825290604080519190610adb8184612879565b600183527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001845b818110611390575050610b1582612f3f565b52610b1f81612f3f565b50610b28612e66565b908382526040820152610b8483604051610b49816107a48660208301612fe8565b604051809381927f71aad10d000000000000000000000000000000000000000000000000000000008352602060048401526024830190612b38565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561050e578491611376575b50604051927f56ca623e00000000000000000000000000000000000000000000000000000000845260048401528383602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831561050e578493611350575b506002600c610cdc92602c6040519687927f7b227061796c6f6164223a2200000000000000000000000000000000000000006020850152610c4c8151809260208688019101612b15565b83017f222c2277616c6c6574223a22000000000000000000000000000000000000000083820152610c87825180936020603885019101612b15565b01017f227d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2810185520183612879565b6040517fc1978d1f00000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5345515f53444b5f5250435f4d494e5f504f52540000000000000000000000006044820152602081606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561050e57849161131e575b506040517fc1978d1f00000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5345515f53444b5f5250435f4d41585f504f52540000000000000000000000006044820152602081606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156113135785916112e1575b50818110611283577fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a6548015611233575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461120657826001610e70920192837fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a6556146ae565b90600182018092116112065791610e8b610e919287946146f7565b906146ea565b604051937ff877cb1900000000000000000000000000000000000000000000000000000000855260206004860152601660248601527f5345515f53444b5f5250435f55524c5f5052454649580000000000000000000060448601528285606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9485156108785783956111ea575b506040517ff877cb1900000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5345515f53444b5f5250435f55524c5f5355464649580000000000000000000060448201528381606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561050e5784916111d0575b50604051927f6900a3ae00000000000000000000000000000000000000000000000000000000845260048401528383602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561050e5761109f96859485926111a7575b50602061106b929361103e82604051968561101b899751809285808b019101612b15565b860161102f82518093858085019101612b15565b01019182815194859201612b15565b01037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612879565b60405195869283927f0199a220000000000000000000000000000000000000000000000000000000008452600484016140b1565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561119a57611123938291611178575b5073ffffffffffffffffffffffffffffffffffffffff601f5460081c1660405180809681947f685151ff000000000000000000000000000000000000000000000000000000008352602060048401526024830190612b38565b03915afa9081156108785761084b61081f926107e49261032a958792611158575b506108109060405194859160208301612fe8565b610810919250611171903d808a833e6108698183612879565b9190611144565b61119491503d8084833e61118c8183612879565b810190613a7a565b386110ca565b50604051903d90823e3d90fd5b61106b92506111c96020913d8089833e6111c18183612879565b810190613a43565b9250610ff7565b6111e491503d8086833e6111c18183612879565b38610f9b565b6111ff9195503d8085833e6111c18183612879565b9338610f16565b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b5060405160208101903687833761127b6020823681018a8382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612879565b519020610e18565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e76616c696420706f72742072616e676500000000000000000000000000006044820152fd5b90506020813d60201161130b575b816112fc60209383612879565b81010312610501575138610de7565b3d91506112ef565b6040513d87823e3d90fd5b90506020813d602011611348575b8161133960209383612879565b81010312610501575138610d61565b3d915061132c565b610cdc919350600c61136d6002923d8089833e6111c18183612879565b94925050610c02565b61138a91503d8086833e6111c18183612879565b38610bab565b60209060405161139f81612824565b8781528783820152606060408201528760608201528760808201528760a08201528760c082015282828701015201610b03565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b50346103a35760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a35760043560ff81168091036103a15760ff600461144c92614b33565b9060ff6040926114cc6102be6102f086516114678882612879565b600c81527f426f756e6420726573756c740000000000000000000000000000000000000000602082015287519283917fb60e72cc0000000000000000000000000000000000000000000000000000000060208401528960248401526064830190612b38565b16916114d6612e66565b928084528151907f04818320000000000000000000000000000000000000000000000000000000006020830152602482015260248152611517604482612879565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561039d5782611571918351809381927ff28dceb3000000000000000000000000000000000000000000000000000000008352602060048401526024830190612b38565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561164d57611636575b5060206115ed929373ffffffffffffffffffffffffffffffffffffffff601f5460081c16835180809681947f1990d07000000000000000000000000000000000000000000000000000000000835260048301612fe8565b03915afa90811561162d5750611601575080f35b6116229060203d602011611626575b61161a8183612879565b810190612fd9565b5080f35b503d611610565b513d84823e3d90fd5b826116466115ed94602093612879565b9250611596565b505051903d90823e3d90fd5b50346103a357807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a357601d54611694816128ba565b916116a26040519384612879565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b8383106116e457604051806106128782612d42565b600260206001926040516116f781612840565b73ffffffffffffffffffffffffffffffffffffffff865416815261171c8587016135a0565b838201528152019201920191906116cf565b50346103a357807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a357601a54611769816128ba565b916117776040519384612879565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b8383106117c1576040516020808252819061061290820188612b7b565b6001602081926117d08561349b565b8152019201920191906117a4565b50346103a3576118086117f036612bf2565b916117fc939193612e66565b93600185523691612a45565b60a083015261010082015273ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051907f08a5f6b0000000000000000000000000000000000000000000000000000000008252602082806118678660048301612fe8565b0381845afa91821561050e578492611893575061032a926103249167ffffffffffffffff461690613aa0565b9091506020813d6020116118c1575b816118af60209383612879565b8101031261039957519061032a6104b9565b3d91506118a2565b50346103a35760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a357600435611904612e66565b600281528160c08201528273ffffffffffffffffffffffffffffffffffffffff601f5460081c16926024604051809581937f331044c600000000000000000000000000000000000000000000000000000000835260048301525afa9081156108785761084b61081f926107e49261032a95879261115857506108109060405194859160208301612fe8565b50346103a357807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a357601b546119ca816128ba565b6119d76040519182612879565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b838310611aaf57868587604051928392602084019060208552518091526040840160408260051b8601019392905b828210611a4457505050500390f35b91936020611a9f827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0600195979984950301865288519083611a8f8351604084526040840190612b38565b9201519084818403910152612cec565b9601920192018594939192611a35565b60026020600192604051611ac281612840565b611acb8661349b565b8152611ad88587016135a0565b83820152815201920192019190611a07565b50346103a3576101607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a357611b236128d2565b60443567ffffffffffffffff811161039d57611b43903690600401612a7c565b90611b4c612a9a565b611b54612aa9565b6101243567ffffffffffffffff8111611cb457611b75903690600401612916565b610144359373ffffffffffffffffffffffffffffffffffffffff85168503611cb05761032a95611c9561032495611c45611bb161010435613f0c565b94611bbd60e435613fce565b94611bc6612e66565b988d8a52611bd2612eaf565b9460408b01958652611be560c435613fee565b9273ffffffffffffffffffffffffffffffffffffffff60405195611c0887612824565b16855260243560208601526040850152606435606085015215156080840152151560a083015260c0820152825190611c3f82612f3f565b52612f3f565b5060405190611c5382612824565b3082528a6020830152611c64612f9f565b6040830152620f424060608301528a60808301528a60a08301528a60c08301525190611c8f82612f7b565b52612f7b565b5060608401526080830152610100820152610312838261392d565b8680fd5b8580fd5b50346103a35760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a35760243567ffffffffffffffff81116103a157611d08903690600401612916565b60443573ffffffffffffffffffffffffffffffffffffffff8116810361039d5761032461032a92611d37612e66565b906002825260043560c0830152610100820152610312838261392d565b50346103a35760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a357600435611d8f612e66565b600381528160e08201528273ffffffffffffffffffffffffffffffffffffffff601f5460081c16926024604051809581937fdfb49a0d00000000000000000000000000000000000000000000000000000000835260048301525afa9081156108785761084b61081f926107e49261032a95879261115857506108109060405194859160208301612fe8565b50346103a35760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a35760043567ffffffffffffffff81116103a157611e6a903690600401612c5e565b60c08101611e788151613fee565b90526040519061010190612040611e8f8185612879565b82845267ffffffffffffffff8311611f59577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001845b818110611f17575050835b828110611ef7578461112385611ee4612e66565b9083825260408201528261070f8261410b565b8082611f0560019387612f8b565b52611f108186612f8b565b5001611ed0565b602090604051611f2681612824565b8781528783820152606060408201528760608201528760808201528760a08201528760c082015282828801015201611ec5565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b50346103a357807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a35760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b818110612003576106128561060681870382612879565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201611fec565b50346103a357807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a35760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b8181106120ac576106128561060681870382612879565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201612095565b50346103a3576118676120ea36612bf2565b6121316120fc94939294368685612a45565b602081519101209261210c612e66565b936003855260e085015282610100850152612125612e66565b95600187523691612a45565b60a0850152610100840152602073ffffffffffffffffffffffffffffffffffffffff601f5460081c1691604051809481927f08a5f6b000000000000000000000000000000000000000000000000000000000835260048301612fe8565b50346103a357807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a357601e546121c9816128ba565b6121d66040519182612879565b818152601e83526020810191837f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350845b8383106122b557868587604051928392602084019060208552518091526040840160408260051b8601019392905b82821061224357505050500390f35b919360206122a5827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc060019597998495030186526040838a5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190612b7b565b9601920192018594939192612234565b6040516122c181612840565b73ffffffffffffffffffffffffffffffffffffffff83541681526001830180546122ea816128ba565b916122f86040519384612879565b8183528a526020808b20908b9084015b83821061232e575050505060019282602092836002950152815201920192019190612206565b60016020819261233d8661349b565b815201930191019091612308565b50346103a35760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a3576004358167ffffffffffffffff82116103a35761239e601f9236906004016127f6565b6123a9929192612e66565b92600184526123b9368383612a45565b60a085015281604473ffffffffffffffffffffffffffffffffffffffff875460081c16927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0604051988996879586947f25bfae90000000000000000000000000000000000000000000000000000000008652602060048701528160248701528686013788858286010152011681010301915afa9081156108785761084b61081f926107e49261032a95879261115857506108109060405194859160208301612fe8565b50346103a357807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a35760405180916020601654928381520191601682527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289915b8181106124f9576106128561060681870382612879565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016124e2565b50346103a357807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a357602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051908152f35b50346103a3576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a3576125b36128d2565b60443567ffffffffffffffff811161039d576125d3903690600401612a7c565b906125dc612a9a565b906125e5612aa9565b926101243567ffffffffffffffff8111611cb45761260a612685913690600401612916565b9361263b61261a61010435613f0c565b9461262660e435613fce565b9461262f612e66565b988a8a52611bd2612eaf565b506040519061264982612824565b30825287602083015261265a612f9f565b6040830152620f424060608301528760808301528760a08301528760c08301525190611c8f82612f7b565b506060840152608083015261010082015273ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051907f08a5f6b0000000000000000000000000000000000000000000000000000000008252602082806118678660048301612fe8565b50346103a357807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a3576040516111688082019082821067ffffffffffffffff83111761279057908291614d2e8339039082f0801561119a577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00601f549260081b16911617601f5580f35b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b50346103a35761032a6127e16103246127d53661297b565b949091926117fc612e66565b60a0830152610100820152610312838261392d565b9181601f840112156105015782359167ffffffffffffffff8311610501576020838186019501011161050157565b60e0810190811067ffffffffffffffff8211176113d257604052565b6040810190811067ffffffffffffffff8211176113d257604052565b610120810190811067ffffffffffffffff8211176113d257604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176113d257604052565b67ffffffffffffffff81116113d25760051b60200190565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361050157565b359073ffffffffffffffffffffffffffffffffffffffff8216820361050157565b9080601f8301121561050157813561292d816128ba565b9261293b6040519485612879565b81845260208085019260051b82010192831161050157602001905b8282106129635750505090565b60208091612970846128f5565b815201910190612956565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126105015760043567ffffffffffffffff811161050157816129c4916004016127f6565b929092916024359067ffffffffffffffff8211610501576129e791600401612916565b9060443573ffffffffffffffffffffffffffffffffffffffff811681036105015790565b67ffffffffffffffff81116113d257601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b929192612a5182612a0b565b91612a5f6040519384612879565b829481845281830111610501578281602093846000960137010152565b9080601f8301121561050157816020612a9793359101612a45565b90565b60843590811515820361050157565b60a43590811515820361050157565b3590811515820361050157565b602060408183019282815284518094520192019060005b818110612ae95750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101612adc565b60005b838110612b285750506000910152565b8181015183820152602001612b18565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093612b7481518092818752878088019101612b15565b0116010190565b9080602083519182815201916020808360051b8301019401926000915b838310612ba757505050505090565b9091929394602080612be3837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086600196030187528951612b38565b97019301930191939290612b98565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126105015760043567ffffffffffffffff81116105015781612c3b916004016127f6565b929092916024359067ffffffffffffffff821161050157612a9791600401612916565b91909160e0818403126105015760405190612c7882612824565b8193612c83826128f5565b83526020820135602084015260408201359167ffffffffffffffff831161050157612cb460c0939284938301612a7c565b604085015260608101356060850152612ccf60808201612ab8565b6080850152612ce060a08201612ab8565b60a08501520135910152565b906020808351928381520192019060005b818110612d0a5750505090565b82517fffffffff0000000000000000000000000000000000000000000000000000000016845260209384019390920191600101612cfd565b602081016020825282518091526040820191602060408360051b8301019401926000915b838310612d7557505050505090565b9091929394602080612dd8837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190612cec565b97019301930191939290612d66565b9080601f83011215610501578135612dfe816128ba565b92612e0c6040519485612879565b81845260208085019260051b820101918383116105015760208201905b838210612e3857505050505090565b813567ffffffffffffffff811161050157602091612e5b87848094880101612c5e565b815201910190612e29565b60405190612e738261285c565b6060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b60405160609190612ec08382612879565b60028152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018260005b828110612ef757505050565b602090604051612f0681612824565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c082015282828501015201612eeb565b805115612f4c5760200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805160011015612f4c5760400190565b8051821015612f4c5760209160051b010190565b60405190612fae604083612879565b600382527e112200000000000000000000000000000000000000000000000000000000006020830152565b90816020910312610501575190565b9060208252610140820160ff82511660208401526020820151151560408401526040820151906101206060850152815180915261016084019060206101608260051b8701019301916000905b828210613119575050505061308e6101009160608401516080860152608084015160a086015260a08401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08683030160c0870152612b38565b9160c081015160e085015260e0810151828501520151916101207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828403019101526020808351928381520192019060005b8181106130ed5750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016130e0565b90919293602080827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea08a6001950301855287519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c08061318b604085015160e0604086015260e0850190612b38565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152960192019201909291613034565b5190811515820361050157565b519073ffffffffffffffffffffffffffffffffffffffff8216820361050157565b909291926131fc81612a0b565b9161320a6040519384612879565b829482845282820111610501576020613224930190612b15565b565b9080601f83011215610501578151612a97926020016131ef565b6020818303126105015780519067ffffffffffffffff82116105015701906101208282031261050157604051916132768361285c565b805160ff81168103610501578352613290602082016131c1565b6020840152604081015167ffffffffffffffff811161050157810182601f820112156105015780516132c1816128ba565b916132cf6040519384612879565b81835260208084019260051b820101908582116105015760208101925b8284106133cb57505050506040840152606081015160608401526080810151608084015260a081015167ffffffffffffffff81116105015782613330918301613226565b60a084015260c081015160c084015260e081015160e08401526101008101519067ffffffffffffffff821161050157019080601f83011215610501578151613377816128ba565b926133856040519485612879565b81845260208085019260051b82010192831161050157602001905b8282106133b35750505061010082015290565b602080916133c0846131ce565b8152019101906133a0565b835167ffffffffffffffff811161050157820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828a030112610501576040519161341783612824565b613423602083016131ce565b83526040820151602084015260608201519267ffffffffffffffff84116105015760e0836134588c6020809881980101613226565b60408401526080810151606084015261347360a082016131c1565b608084015261348460c082016131c1565b60a0840152015160c08201528152019301926132ec565b906040519160008154918260011c92600181168015613596575b6020851081146135695784875286939291811561352957506001146134e2575b5061322492500383612879565b90506000929192526020600020906000915b81831061350d57505090602061322492820101386134d5565b60209193508060019154838589010152019101909184926134f4565b602093506132249592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b820101386134d5565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f16936134b5565b90604051918281549182825260208201906000526020600020926000905b8060078301106137ba57613224945491818110613784575b81811061374e575b818110613718575b8181106136e2575b8181106136ac575b818110613676575b818110613641575b10613614575b500383612879565b7fffffffff000000000000000000000000000000000000000000000000000000001681526020013861360c565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b168152019301613606565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b1681520193016135fe565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b1681520193016135f6565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b1681520193016135ee565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b1681520193016135e6565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b1681520193016135de565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b1681520193016135d6565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e08201520194019201859293916135be565b60085460ff1680156138565790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115613921576000916138ef575b50151590565b90506020813d602011613919575b8161390a60209383612879565b810103126105015751386138e9565b3d91506138fd565b6040513d6000823e3d90fd5b602081015190916139f19115613a3c576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a081526139e860c082612879565b519020916142f5565b6040519060208201927f190100000000000000000000000000000000000000000000000000000000000084526022830152604282015260428152613a36606282612879565b51902090565b4690613941565b6020818303126105015780519067ffffffffffffffff821161050157019080601f83011215610501578151612a97926020016131ef565b9060208282031261050157815167ffffffffffffffff811161050157612a979201613226565b9173ffffffffffffffffffffffffffffffffffffffff604051937f56ca623e000000000000000000000000000000000000000000000000000000008552166004840152600083602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831561392157600093613e6d575b5067ffffffffffffffff604051927f6900a3ae000000000000000000000000000000000000000000000000000000008452166004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561392157613bca92600092613e46575b506107a4613b8f60009260405192839160208301612fe8565b604051809481927f71aad10d000000000000000000000000000000000000000000000000000000008352602060048401526024830190612b38565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561392157613d0f6002600d60409681613d6b966000988991613e2c575b50602b8a519788947f7b2277616c6c6574223a220000000000000000000000000000000000000000006020870152613c44815180926020868a019101612b15565b85017f222c22636861696e4964223a220000000000000000000000000000000000000083820152613c7f825180936020603885019101612b15565b01017f222c227061796c6f6164223a220000000000000000000000000000000000000083820152613cba825180936020601a85019101612b15565b01017f227d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2810184520182612879565b613dcf613d2f737109709ecfa91a80626ff3989d68f67f5b1dd12d614730565b91855195869485947f0199a220000000000000000000000000000000000000000000000000000000008652606060048701526064860190612b38565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152600f83527f7061796c6f61645f68617368466f72000000000000000000000000000000000060208401520160448601520190612b38565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811561392157600091613e11575b5060208151918180820193849201010312610501575190565b613e2691503d806000833e61118c8183612879565b38613df8565b613e4091503d808b833e6111c18183612879565b38613c03565b6000919250613b8f613e646107a4923d8086833e6111c18183612879565b93925050613b76565b613e839193503d806000833e6111c18183612879565b9138613b0f565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561050157604051917f7c84c69b00000000000000000000000000000000000000000000000000000000835260048301526024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561392157613f015750565b600061322491612879565b66ffffffffffffff6000613f1f92614b33565b9061322460406102f0815191613f358184612879565b600c83527f426f756e6420726573756c7400000000000000000000000000000000000000006020840152613f9c81519384927fb60e72cc00000000000000000000000000000000000000000000000000000000602085015260248401526064830190612b38565b866044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612879565b73ffffffffffffffffffffffffffffffffffffffff6000613f1f92614b33565b60026000613f1f92614b33565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156105015761405b60009161408b60405194859384937f97624631000000000000000000000000000000000000000000000000000000008552604060048601526044850190612b38565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc848303016024850152612b38565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561392157613f015750565b6040906140ca612a979493606083526060830190612b38565b908280828403806020850152601085527f7061796c6f61645f746f5061636b6564000000000000000000000000000000006020860152019101520190612b38565b60006107a4610b496141269360405192839160208301612fe8565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561392157614240916000918291614281575b506141ef6002602c60405180947f7b227061796c6f6164223a220000000000000000000000000000000000000000602083015261419a8151809260208686019101612b15565b81017f227d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2810184520182612879565b61420c737109709ecfa91a80626ff3989d68f67f5b1dd12d614730565b60405193849283927f0199a220000000000000000000000000000000000000000000000000000000008452600484016140b1565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156139215760009161426c575090565b612a9791503d806000833e61118c8183612879565b61429591503d8084833e6111c18183612879565b38614154565b600080916040516142e2816107a460208201947f0be77f56000000000000000000000000000000000000000000000000000000008652602060248401526044830190612b38565b51906a636f6e736f6c652e6c6f675afa50565b61010081015160405160208101818193602081519391019260005b81811061467f57505061434a9250037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612879565b5190209060ff8151168015600014614552575090604082015192835191614389614373846128ba565b936143816040519586612879565b8085526128ba565b937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe060208501950136863760005b865181101561448957806143cd60019289612f8b565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e0830152610100820152610100815261447561012082612879565b5190206144828288612f8b565b52016143b7565b5092919450926040519081602081019182945192909260005b8181106145395750506144dc9250037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612879565b51902091608060608301519201516040519260208401947f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a2865260408501526060840152608083015260a082015260a08152613a3660c082612879565b84518352602094850194869450909201916001016144a2565b600181036145ac575060a0015160208151910120906040519060208201927fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46684526040830152606082015260608152613a36608082612879565b600281036145ff575060c00151906040519060208201927f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e484526040830152606082015260608152613a36608082612879565b60038103614652575060e00151906040519060208201927fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46684526040830152606082015260608152613a36608082612879565b7f048183200000000000000000000000000000000000000000000000000000000060005260045260246000fd5b845173ffffffffffffffffffffffffffffffffffffffff16835260209485019486945090920191600101614310565b919082039182116146bb57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b919082018092116146bb57565b8115614701570690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff166040517fc1978d1f00000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5345515f53444b5f5250435f4d494e5f504f52540000000000000000000000006044820152602081606481855afa90811561392157600091614b01575b50604051907fc1978d1f00000000000000000000000000000000000000000000000000000000825260206004830152601460248301527f5345515f53444b5f5250435f4d41585f504f52540000000000000000000000006044830152602082606481865afa91821561392157600092614acd575b50808210611283577fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a6548015614a7b575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146146bb578160016148b5920193847fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a6556146ae565b91600183018093116146bb576148ce92610e8b916146f7565b906040517ff877cb1900000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5345515f53444b5f5250435f55524c5f505245464958000000000000000000006044820152600081606481855afa90811561392157600091614a60575b50604051927ff877cb1900000000000000000000000000000000000000000000000000000000845260206004850152601660248501527f5345515f53444b5f5250435f55524c5f535546464958000000000000000000006044850152600084606481865afa93841561392157600094614a41575b506000906024604051809581937f6900a3ae00000000000000000000000000000000000000000000000000000000835260048301525afa91821561392157600092614a1f575b506020612a97929361103e82604051968561101b899751809285808b019101612b15565b612a979250614a3a6020913d806000833e6111c18183612879565b92506149fb565b6000919450614a59903d8084833e6111c18183612879565b93906149b5565b614a7591503d806000833e6111c18183612879565b38614941565b5060405160208101903660008337614ac560208236810160008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612879565b51902061485d565b90916020823d602011614af9575b81614ae860209383612879565b810103126103a3575051903861482c565b3d9150614adb565b906020823d602011614b2b575b81614b1b60209383612879565b810103126103a3575051386147b8565b3d9150614b0e565b600090838311614c8e5782811091821580614c84575b614c7c57614b5784866146ae565b92600184018094116146bb57600383111580614c73575b614c64577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83101580614c5a575b614c495785831115614c0057505090614bb884614bbd936146ae565b6146f7565b908115614bfb57614bce92506146ea565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081116146bb5790565b505090565b959492919095614c11575b50505050565b83949550614bb890614c2393946146ae565b908115614bfb57614c3492506146ae565b600181018091116146bb579038808080614c0b565b50509050612a9792915019906146ae565b5082198411614b9c565b5050919050612a9792506146ea565b50828411614b6e565b509250505090565b5084821115614b49565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374645574696c7320626f756e642875696e743235362c75696e743235362c7560448201527f696e74323536293a204d6178206973206c657373207468616e206d696e2e00006064820152fd5b600080916020815191016a636f6e736f6c652e6c6f675afa5056fe6080806040523460155761114d908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c806308a5f6b0146104b55780631990d0701461049557806325bfae9014610453578063331044c6146103f8578063685151ff146100c25763dfb49a0d1461005e57600080fd5b346100bd5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bd57610095610c90565b506100b96100a1610c90565b6003815260043560e082015260405191829182610ab7565b0390f35b600080fd5b346100bd576100d0366109e9565b906100d9610c90565b506100e2610c90565b90600082528035928360f81c60019485808316146000146103e157600060608601525b60078160f91c169081610399575b505060108181160361036f575060015b61012c8161067b565b9261013a604051948561062d565b8184527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06101678361067b565b0160005b8181106103275750506040850193845260005b868382101561031957828101359060018260f81c9101986001808316146000146102f65750306101af848951611098565b51525b6002808216146102d9575b600480821614610245575b90602080838986888e60088060019b9a1614610224575b5050505060108082161460806101f6878d51611098565b510152161460a0610208848a51611098565b51015260fe1c60c061021b838951611098565b5101520161017e565b85926060926102369201359451611098565b51019d019c528985888e6101df565b929791908883013560e81c93600384019461026081876110db565b918287116100bd578883116100bd5789856102ca602095948f9a60019a6102c389988e600360406102928a8c51611098565b5101947ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd81369503019201016106b4565b90526110db565b9d5050509293945050506101c8565b838901356020806102eb868b51611098565b51019a0199526101bd565b9850610303838851611098565b5160018560158c019b01013560601c90526101b2565b604051806100b98982610ab7565b602090604051610336816105c5565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c08201528282890101520161016b565b60209081160361038957600284019382013560f01c610123565b600184019382013560f81c610123565b60389060f61c167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b01908588013590610100031c1695019460808501528580610113565b9450601594836001013560601c6060860152610105565b346100bd5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bd5761042f610c90565b506100b961043b610c90565b6002815260043560c082015260405191829182610ab7565b346100bd576100b9610477610467366109e9565b61046f610c90565b5036916106b4565b61047f610c90565b906001825260a082015260405191829182610ab7565b346100bd5760206104ad6104a836610737565b610cd9565b604051908152f35b346100bd5760206104c536610737565b80820151156105bc5761056d60005b604051848101917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408301527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606083015260808201523060a082015260a0815261056460c08261062d565b51902091610cd9565b60405190838201927f1901000000000000000000000000000000000000000000000000000000000000845260228301526042820152604281526105b160628261062d565b519020604051908152f35b61056d466104d4565b60e0810190811067ffffffffffffffff8211176105e157604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610120810190811067ffffffffffffffff8211176105e157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176105e157604052565b359081151582036100bd57565b67ffffffffffffffff81116105e15760051b60200190565b359073ffffffffffffffffffffffffffffffffffffffff821682036100bd57565b92919267ffffffffffffffff82116105e157604051916106fc60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116018461062d565b8294818452818301116100bd578281602093846000960137010152565b9080601f830112156100bd57816020610734933591016106b4565b90565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126100bd576004359067ffffffffffffffff82116100bd576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83830301126100bd57604051916107ae83610610565b806004013560ff811681036100bd5783526107cb6024820161066e565b6020840152604481013567ffffffffffffffff81116100bd578101826023820112156100bd5760048101356107ff8161067b565b9161080d604051938461062d565b818352602060048185019360051b83010101908582116100bd5760248101925b82841061091557505050506040840152606481013560608401526084810135608084015260a481013567ffffffffffffffff81116100bd5782600461087492840101610719565b60a084015260c481013560c084015260e481013560e08401526101048101359067ffffffffffffffff82116100bd570190806023830112156100bd5760048201356108be8161067b565b926108cc604051948561062d565b818452602060048186019360051b830101019283116100bd57602401905b8282106108fd5750505061010082015290565b6020809161090a84610693565b8152019101906108ea565b833567ffffffffffffffff81116100bd5760049083010160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828a0301126100bd5760405191610965836105c5565b61097160208301610693565b83526040820135602084015260608201359267ffffffffffffffff84116100bd5760e0836109a68c6020809881980101610719565b6040840152608081013560608401526109c160a0820161066e565b60808401526109d260c0820161066e565b60a0840152013560c082015281520193019261082d565b9060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126100bd5760043567ffffffffffffffff81116100bd57826023820112156100bd5780600401359267ffffffffffffffff84116100bd57602484830101116100bd576024019190565b919082519283825260005b848110610aa25750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201610a63565b9060208252610140820160ff82511660208401526020820151151560408401526040820151906101206060850152815180915261016084019060206101608260051b8701019301916000905b828210610be85750505050610b5d6101009160608401516080860152608084015160a086015260a08401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08683030160c0870152610a58565b9160c081015160e085015260e0810151828501520151916101207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828403019101526020808351928381520192019060005b818110610bbc5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101610baf565b90919293602080827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea08a6001950301855287519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080610c5a604085015160e0604086015260e0850190610a58565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152960192019201909291610b03565b60405190610c9d82610610565b6060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b61010081015160405160208101818193602081519391019260005b818110611069575050610d2e9250037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261062d565b5190209060ff8151168015600014610f3c575090604082015192835191610d6d610d578461067b565b93610d65604051958661062d565b80855261067b565b937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe060208501950136863760005b8651811015610e6d5780610db160019289611098565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152610e596101208261062d565b519020610e668288611098565b5201610d9b565b5092919450926040519081602081019182945192909260005b818110610f23575050610ec09250037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261062d565b51902091608060608301519201516040519260208401947f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a2865260408501526060840152608083015260a082015260a08152610f1d60c08261062d565b51902090565b8451835260209485019486945090920191600101610e86565b60018103610f96575060a0015160208151910120906040519060208201927fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46684526040830152606082015260608152610f1d60808261062d565b60028103610fe9575060c00151906040519060208201927f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e484526040830152606082015260608152610f1d60808261062d565b6003810361103c575060e00151906040519060208201927fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46684526040830152606082015260608152610f1d60808261062d565b7f048183200000000000000000000000000000000000000000000000000000000060005260045260246000fd5b845173ffffffffffffffffffffffffffffffffffffffff16835260209485019486945090920191600101610cf4565b80518210156110ac5760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b919082018092116110e857565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220068f502f2785fb24737a6edc7c5ed5e13141da76b680187b8f221e2a5a4ea92f64736f6c634300081c0033a2646970667358221220713bf079378fd3aa5bc2df8582a5058ab1c433905922d90806219ea18a24403e64736f6c634300081c0033","sourceMap":"1293:11333:94:-:0;;;;;;;3166:4:5;1293:11333:94;;3166:4:5;1293:11333:94;;;3166:4:5;1293:11333:94;3166:4:5;1293:11333:94;;1087:4:16;1293:11333:94;;;1087:4:16;1293:11333:94;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436101561001257600080fd5b6000803560e01c80630608b5c5146127bd5780630a9254e4146126ea5780631196bf221461257a5780631d20f132146125255780631ed7831c1461247c57806325dac3ef1461234b5780632ade38801461218e57806336a66f13146120d85780633e5e3c231461202f5780633f7286f414611f865780634acfe6cb14611e1a5780635001832514611d545780635651d1a114611cb85780635f2f2db614611aea57806366d9a9a01461198f5780636be9a365146118c957806380e03978146117de57806385226c811461172e578063916a17c614611659578063a474ffa814611401578063a8f2321414610a4b578063b0464fdc14610976578063b5508aa9146108c6578063ba414fa614610883578063c38f7d0714610642578063e20c9f7114610589578063e40a11fb14610519578063f72bf8a5146103e7578063fa7626d4146103a65763fbc997771461016757600080fd5b346103a35760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a35760043567ffffffffffffffff81116103a1576101b6903690600401612de7565b60643567ffffffffffffffff811161039d576101d6903690600401612916565b6084359173ffffffffffffffffffffffffffffffffffffffff8316830361039957610202604435613f0c565b61020d602435613fce565b610215612e66565b9386855260408501938452606085019182526080850192835261010085015260ff61024260038880614b33565b6102f560406102f08151916102578184612879565b600c83527f426f756e6420726573756c74000000000000000000000000000000000000000060208401526102be81519384927fb60e72cc00000000000000000000000000000000000000000000000000000000602085015260248401526064830190612b38565b856044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612879565b614d12565b168085521561032d575b8561032a8661032487610312838261392d565b9267ffffffffffffffff461690613aa0565b90613e8a565b80f35b61033b819693949651613fce565b90526103478151613f0c565b9052805b82518051821015610386579061037060c061036883600195612f8b565b510151613fee565b60c061037d838751612f8b565b5101520161034b565b5090939150610324905061032a386102ff565b8380fd5b8280fd5b505b80fd5b50346103a357807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a357602060ff601f54166040519015158152f35b50346103a35760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a35760243567ffffffffffffffff81116103a157610437903690600401612916565b61043f612e66565b906002825260043560c083015261010082015273ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051907f08a5f6b0000000000000000000000000000000000000000000000000000000008252602082806104a68660048301612fe8565b0381845afa91821561050e5784926104d3575b5061032a926103249167ffffffffffffffff461690613aa0565b9091506020813d602011610506575b816104ef60209383612879565b8101031261050157519061032a6104b9565b600080fd5b3d91506104e2565b6040513d86823e3d90fd5b50346103a35761032a6103126103246105313661297b565b9491928591610579610544368785612a45565b6020815191012092610554612e66565b936003855260e08501528261010085015261056d612e66565b96600188523691612a45565b60a086015261010085015261392d565b50346103a357807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a35760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b818110610616576106128561060681870382612879565b60405191829182612ac5565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016105ef565b50346103a35760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a35760043567ffffffffffffffff81116103a157610692903690600401612de7565b61069d604435613f0c565b906106a9602435613fce565b91835b82518110156106dc57806106c760c061036860019487612f8b565b60c06106d38387612f8b565b510152016106ac565b50610767926106e9612e66565b92858452604084015260608301526080820152826107068261410b565b61070f8161429b565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c1660405180809681947f685151ff000000000000000000000000000000000000000000000000000000008352602060048401526024830190612b38565b03915afa9081156108785761084b61081f926107e49261032a958792610850575b50610810906107d56040516107d0816107a48760208301612fe8565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612879565b61429b565b60405194859160208301612fe8565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101855284612879565b60405193849160208301612fe8565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101845283612879565b613ffb565b610810919250610871903d808a833e6108698183612879565b810190613240565b9190610788565b6040513d85823e3d90fd5b50346103a357807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a35760206108bc613847565b6040519015158152f35b50346103a357807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a357601954610901816128ba565b9161090f6040519384612879565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b838310610959576040516020808252819061061290820188612b7b565b6001602081926109688561349b565b81520192019201919061093c565b50346103a357807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a357601c546109b1816128ba565b916109bf6040519384612879565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b838310610a0157604051806106128782612d42565b60026020600192604051610a1481612840565b73ffffffffffffffffffffffffffffffffffffffff8654168152610a398587016135a0565b838201528152019201920191906109ec565b50346103a35760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a35760043567ffffffffffffffff81116103a157610a9b903690600401612c5e565b60c08101610aa98151613fee565b9052601f5460081c73ffffffffffffffffffffffffffffffffffffffff1680825290604080519190610adb8184612879565b600183527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001845b818110611390575050610b1582612f3f565b52610b1f81612f3f565b50610b28612e66565b908382526040820152610b8483604051610b49816107a48660208301612fe8565b604051809381927f71aad10d000000000000000000000000000000000000000000000000000000008352602060048401526024830190612b38565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561050e578491611376575b50604051927f56ca623e00000000000000000000000000000000000000000000000000000000845260048401528383602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831561050e578493611350575b506002600c610cdc92602c6040519687927f7b227061796c6f6164223a2200000000000000000000000000000000000000006020850152610c4c8151809260208688019101612b15565b83017f222c2277616c6c6574223a22000000000000000000000000000000000000000083820152610c87825180936020603885019101612b15565b01017f227d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2810185520183612879565b6040517fc1978d1f00000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5345515f53444b5f5250435f4d494e5f504f52540000000000000000000000006044820152602081606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561050e57849161131e575b506040517fc1978d1f00000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5345515f53444b5f5250435f4d41585f504f52540000000000000000000000006044820152602081606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156113135785916112e1575b50818110611283577fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a6548015611233575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461120657826001610e70920192837fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a6556146ae565b90600182018092116112065791610e8b610e919287946146f7565b906146ea565b604051937ff877cb1900000000000000000000000000000000000000000000000000000000855260206004860152601660248601527f5345515f53444b5f5250435f55524c5f5052454649580000000000000000000060448601528285606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9485156108785783956111ea575b506040517ff877cb1900000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5345515f53444b5f5250435f55524c5f5355464649580000000000000000000060448201528381606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561050e5784916111d0575b50604051927f6900a3ae00000000000000000000000000000000000000000000000000000000845260048401528383602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561050e5761109f96859485926111a7575b50602061106b929361103e82604051968561101b899751809285808b019101612b15565b860161102f82518093858085019101612b15565b01019182815194859201612b15565b01037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612879565b60405195869283927f0199a220000000000000000000000000000000000000000000000000000000008452600484016140b1565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561119a57611123938291611178575b5073ffffffffffffffffffffffffffffffffffffffff601f5460081c1660405180809681947f685151ff000000000000000000000000000000000000000000000000000000008352602060048401526024830190612b38565b03915afa9081156108785761084b61081f926107e49261032a958792611158575b506108109060405194859160208301612fe8565b610810919250611171903d808a833e6108698183612879565b9190611144565b61119491503d8084833e61118c8183612879565b810190613a7a565b386110ca565b50604051903d90823e3d90fd5b61106b92506111c96020913d8089833e6111c18183612879565b810190613a43565b9250610ff7565b6111e491503d8086833e6111c18183612879565b38610f9b565b6111ff9195503d8085833e6111c18183612879565b9338610f16565b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b5060405160208101903687833761127b6020823681018a8382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612879565b519020610e18565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e76616c696420706f72742072616e676500000000000000000000000000006044820152fd5b90506020813d60201161130b575b816112fc60209383612879565b81010312610501575138610de7565b3d91506112ef565b6040513d87823e3d90fd5b90506020813d602011611348575b8161133960209383612879565b81010312610501575138610d61565b3d915061132c565b610cdc919350600c61136d6002923d8089833e6111c18183612879565b94925050610c02565b61138a91503d8086833e6111c18183612879565b38610bab565b60209060405161139f81612824565b8781528783820152606060408201528760608201528760808201528760a08201528760c082015282828701015201610b03565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b50346103a35760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a35760043560ff81168091036103a15760ff600461144c92614b33565b9060ff6040926114cc6102be6102f086516114678882612879565b600c81527f426f756e6420726573756c740000000000000000000000000000000000000000602082015287519283917fb60e72cc0000000000000000000000000000000000000000000000000000000060208401528960248401526064830190612b38565b16916114d6612e66565b928084528151907f04818320000000000000000000000000000000000000000000000000000000006020830152602482015260248152611517604482612879565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561039d5782611571918351809381927ff28dceb3000000000000000000000000000000000000000000000000000000008352602060048401526024830190612b38565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561164d57611636575b5060206115ed929373ffffffffffffffffffffffffffffffffffffffff601f5460081c16835180809681947f1990d07000000000000000000000000000000000000000000000000000000000835260048301612fe8565b03915afa90811561162d5750611601575080f35b6116229060203d602011611626575b61161a8183612879565b810190612fd9565b5080f35b503d611610565b513d84823e3d90fd5b826116466115ed94602093612879565b9250611596565b505051903d90823e3d90fd5b50346103a357807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a357601d54611694816128ba565b916116a26040519384612879565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b8383106116e457604051806106128782612d42565b600260206001926040516116f781612840565b73ffffffffffffffffffffffffffffffffffffffff865416815261171c8587016135a0565b838201528152019201920191906116cf565b50346103a357807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a357601a54611769816128ba565b916117776040519384612879565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b8383106117c1576040516020808252819061061290820188612b7b565b6001602081926117d08561349b565b8152019201920191906117a4565b50346103a3576118086117f036612bf2565b916117fc939193612e66565b93600185523691612a45565b60a083015261010082015273ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051907f08a5f6b0000000000000000000000000000000000000000000000000000000008252602082806118678660048301612fe8565b0381845afa91821561050e578492611893575061032a926103249167ffffffffffffffff461690613aa0565b9091506020813d6020116118c1575b816118af60209383612879565b8101031261039957519061032a6104b9565b3d91506118a2565b50346103a35760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a357600435611904612e66565b600281528160c08201528273ffffffffffffffffffffffffffffffffffffffff601f5460081c16926024604051809581937f331044c600000000000000000000000000000000000000000000000000000000835260048301525afa9081156108785761084b61081f926107e49261032a95879261115857506108109060405194859160208301612fe8565b50346103a357807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a357601b546119ca816128ba565b6119d76040519182612879565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b838310611aaf57868587604051928392602084019060208552518091526040840160408260051b8601019392905b828210611a4457505050500390f35b91936020611a9f827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0600195979984950301865288519083611a8f8351604084526040840190612b38565b9201519084818403910152612cec565b9601920192018594939192611a35565b60026020600192604051611ac281612840565b611acb8661349b565b8152611ad88587016135a0565b83820152815201920192019190611a07565b50346103a3576101607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a357611b236128d2565b60443567ffffffffffffffff811161039d57611b43903690600401612a7c565b90611b4c612a9a565b611b54612aa9565b6101243567ffffffffffffffff8111611cb457611b75903690600401612916565b610144359373ffffffffffffffffffffffffffffffffffffffff85168503611cb05761032a95611c9561032495611c45611bb161010435613f0c565b94611bbd60e435613fce565b94611bc6612e66565b988d8a52611bd2612eaf565b9460408b01958652611be560c435613fee565b9273ffffffffffffffffffffffffffffffffffffffff60405195611c0887612824565b16855260243560208601526040850152606435606085015215156080840152151560a083015260c0820152825190611c3f82612f3f565b52612f3f565b5060405190611c5382612824565b3082528a6020830152611c64612f9f565b6040830152620f424060608301528a60808301528a60a08301528a60c08301525190611c8f82612f7b565b52612f7b565b5060608401526080830152610100820152610312838261392d565b8680fd5b8580fd5b50346103a35760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a35760243567ffffffffffffffff81116103a157611d08903690600401612916565b60443573ffffffffffffffffffffffffffffffffffffffff8116810361039d5761032461032a92611d37612e66565b906002825260043560c0830152610100820152610312838261392d565b50346103a35760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a357600435611d8f612e66565b600381528160e08201528273ffffffffffffffffffffffffffffffffffffffff601f5460081c16926024604051809581937fdfb49a0d00000000000000000000000000000000000000000000000000000000835260048301525afa9081156108785761084b61081f926107e49261032a95879261115857506108109060405194859160208301612fe8565b50346103a35760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a35760043567ffffffffffffffff81116103a157611e6a903690600401612c5e565b60c08101611e788151613fee565b90526040519061010190612040611e8f8185612879565b82845267ffffffffffffffff8311611f59577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001845b818110611f17575050835b828110611ef7578461112385611ee4612e66565b9083825260408201528261070f8261410b565b8082611f0560019387612f8b565b52611f108186612f8b565b5001611ed0565b602090604051611f2681612824565b8781528783820152606060408201528760608201528760808201528760a08201528760c082015282828801015201611ec5565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b50346103a357807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a35760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b818110612003576106128561060681870382612879565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201611fec565b50346103a357807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a35760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b8181106120ac576106128561060681870382612879565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201612095565b50346103a3576118676120ea36612bf2565b6121316120fc94939294368685612a45565b602081519101209261210c612e66565b936003855260e085015282610100850152612125612e66565b95600187523691612a45565b60a0850152610100840152602073ffffffffffffffffffffffffffffffffffffffff601f5460081c1691604051809481927f08a5f6b000000000000000000000000000000000000000000000000000000000835260048301612fe8565b50346103a357807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a357601e546121c9816128ba565b6121d66040519182612879565b818152601e83526020810191837f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350845b8383106122b557868587604051928392602084019060208552518091526040840160408260051b8601019392905b82821061224357505050500390f35b919360206122a5827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc060019597998495030186526040838a5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190612b7b565b9601920192018594939192612234565b6040516122c181612840565b73ffffffffffffffffffffffffffffffffffffffff83541681526001830180546122ea816128ba565b916122f86040519384612879565b8183528a526020808b20908b9084015b83821061232e575050505060019282602092836002950152815201920192019190612206565b60016020819261233d8661349b565b815201930191019091612308565b50346103a35760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a3576004358167ffffffffffffffff82116103a35761239e601f9236906004016127f6565b6123a9929192612e66565b92600184526123b9368383612a45565b60a085015281604473ffffffffffffffffffffffffffffffffffffffff875460081c16927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0604051988996879586947f25bfae90000000000000000000000000000000000000000000000000000000008652602060048701528160248701528686013788858286010152011681010301915afa9081156108785761084b61081f926107e49261032a95879261115857506108109060405194859160208301612fe8565b50346103a357807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a35760405180916020601654928381520191601682527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289915b8181106124f9576106128561060681870382612879565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016124e2565b50346103a357807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a357602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051908152f35b50346103a3576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a3576125b36128d2565b60443567ffffffffffffffff811161039d576125d3903690600401612a7c565b906125dc612a9a565b906125e5612aa9565b926101243567ffffffffffffffff8111611cb45761260a612685913690600401612916565b9361263b61261a61010435613f0c565b9461262660e435613fce565b9461262f612e66565b988a8a52611bd2612eaf565b506040519061264982612824565b30825287602083015261265a612f9f565b6040830152620f424060608301528760808301528760a08301528760c08301525190611c8f82612f7b565b506060840152608083015261010082015273ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051907f08a5f6b0000000000000000000000000000000000000000000000000000000008252602082806118678660048301612fe8565b50346103a357807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a3576040516111688082019082821067ffffffffffffffff83111761279057908291614d2e8339039082f0801561119a577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00601f549260081b16911617601f5580f35b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b50346103a35761032a6127e16103246127d53661297b565b949091926117fc612e66565b60a0830152610100820152610312838261392d565b9181601f840112156105015782359167ffffffffffffffff8311610501576020838186019501011161050157565b60e0810190811067ffffffffffffffff8211176113d257604052565b6040810190811067ffffffffffffffff8211176113d257604052565b610120810190811067ffffffffffffffff8211176113d257604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176113d257604052565b67ffffffffffffffff81116113d25760051b60200190565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361050157565b359073ffffffffffffffffffffffffffffffffffffffff8216820361050157565b9080601f8301121561050157813561292d816128ba565b9261293b6040519485612879565b81845260208085019260051b82010192831161050157602001905b8282106129635750505090565b60208091612970846128f5565b815201910190612956565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126105015760043567ffffffffffffffff811161050157816129c4916004016127f6565b929092916024359067ffffffffffffffff8211610501576129e791600401612916565b9060443573ffffffffffffffffffffffffffffffffffffffff811681036105015790565b67ffffffffffffffff81116113d257601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b929192612a5182612a0b565b91612a5f6040519384612879565b829481845281830111610501578281602093846000960137010152565b9080601f8301121561050157816020612a9793359101612a45565b90565b60843590811515820361050157565b60a43590811515820361050157565b3590811515820361050157565b602060408183019282815284518094520192019060005b818110612ae95750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101612adc565b60005b838110612b285750506000910152565b8181015183820152602001612b18565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093612b7481518092818752878088019101612b15565b0116010190565b9080602083519182815201916020808360051b8301019401926000915b838310612ba757505050505090565b9091929394602080612be3837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086600196030187528951612b38565b97019301930191939290612b98565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126105015760043567ffffffffffffffff81116105015781612c3b916004016127f6565b929092916024359067ffffffffffffffff821161050157612a9791600401612916565b91909160e0818403126105015760405190612c7882612824565b8193612c83826128f5565b83526020820135602084015260408201359167ffffffffffffffff831161050157612cb460c0939284938301612a7c565b604085015260608101356060850152612ccf60808201612ab8565b6080850152612ce060a08201612ab8565b60a08501520135910152565b906020808351928381520192019060005b818110612d0a5750505090565b82517fffffffff0000000000000000000000000000000000000000000000000000000016845260209384019390920191600101612cfd565b602081016020825282518091526040820191602060408360051b8301019401926000915b838310612d7557505050505090565b9091929394602080612dd8837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190612cec565b97019301930191939290612d66565b9080601f83011215610501578135612dfe816128ba565b92612e0c6040519485612879565b81845260208085019260051b820101918383116105015760208201905b838210612e3857505050505090565b813567ffffffffffffffff811161050157602091612e5b87848094880101612c5e565b815201910190612e29565b60405190612e738261285c565b6060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b60405160609190612ec08382612879565b60028152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018260005b828110612ef757505050565b602090604051612f0681612824565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c082015282828501015201612eeb565b805115612f4c5760200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805160011015612f4c5760400190565b8051821015612f4c5760209160051b010190565b60405190612fae604083612879565b600382527e112200000000000000000000000000000000000000000000000000000000006020830152565b90816020910312610501575190565b9060208252610140820160ff82511660208401526020820151151560408401526040820151906101206060850152815180915261016084019060206101608260051b8701019301916000905b828210613119575050505061308e6101009160608401516080860152608084015160a086015260a08401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08683030160c0870152612b38565b9160c081015160e085015260e0810151828501520151916101207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828403019101526020808351928381520192019060005b8181106130ed5750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016130e0565b90919293602080827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea08a6001950301855287519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c08061318b604085015160e0604086015260e0850190612b38565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152960192019201909291613034565b5190811515820361050157565b519073ffffffffffffffffffffffffffffffffffffffff8216820361050157565b909291926131fc81612a0b565b9161320a6040519384612879565b829482845282820111610501576020613224930190612b15565b565b9080601f83011215610501578151612a97926020016131ef565b6020818303126105015780519067ffffffffffffffff82116105015701906101208282031261050157604051916132768361285c565b805160ff81168103610501578352613290602082016131c1565b6020840152604081015167ffffffffffffffff811161050157810182601f820112156105015780516132c1816128ba565b916132cf6040519384612879565b81835260208084019260051b820101908582116105015760208101925b8284106133cb57505050506040840152606081015160608401526080810151608084015260a081015167ffffffffffffffff81116105015782613330918301613226565b60a084015260c081015160c084015260e081015160e08401526101008101519067ffffffffffffffff821161050157019080601f83011215610501578151613377816128ba565b926133856040519485612879565b81845260208085019260051b82010192831161050157602001905b8282106133b35750505061010082015290565b602080916133c0846131ce565b8152019101906133a0565b835167ffffffffffffffff811161050157820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828a030112610501576040519161341783612824565b613423602083016131ce565b83526040820151602084015260608201519267ffffffffffffffff84116105015760e0836134588c6020809881980101613226565b60408401526080810151606084015261347360a082016131c1565b608084015261348460c082016131c1565b60a0840152015160c08201528152019301926132ec565b906040519160008154918260011c92600181168015613596575b6020851081146135695784875286939291811561352957506001146134e2575b5061322492500383612879565b90506000929192526020600020906000915b81831061350d57505090602061322492820101386134d5565b60209193508060019154838589010152019101909184926134f4565b602093506132249592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b820101386134d5565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f16936134b5565b90604051918281549182825260208201906000526020600020926000905b8060078301106137ba57613224945491818110613784575b81811061374e575b818110613718575b8181106136e2575b8181106136ac575b818110613676575b818110613641575b10613614575b500383612879565b7fffffffff000000000000000000000000000000000000000000000000000000001681526020013861360c565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b168152019301613606565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b1681520193016135fe565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b1681520193016135f6565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b1681520193016135ee565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b1681520193016135e6565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b1681520193016135de565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b1681520193016135d6565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e08201520194019201859293916135be565b60085460ff1680156138565790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115613921576000916138ef575b50151590565b90506020813d602011613919575b8161390a60209383612879565b810103126105015751386138e9565b3d91506138fd565b6040513d6000823e3d90fd5b602081015190916139f19115613a3c576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a081526139e860c082612879565b519020916142f5565b6040519060208201927f190100000000000000000000000000000000000000000000000000000000000084526022830152604282015260428152613a36606282612879565b51902090565b4690613941565b6020818303126105015780519067ffffffffffffffff821161050157019080601f83011215610501578151612a97926020016131ef565b9060208282031261050157815167ffffffffffffffff811161050157612a979201613226565b9173ffffffffffffffffffffffffffffffffffffffff604051937f56ca623e000000000000000000000000000000000000000000000000000000008552166004840152600083602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831561392157600093613e6d575b5067ffffffffffffffff604051927f6900a3ae000000000000000000000000000000000000000000000000000000008452166004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561392157613bca92600092613e46575b506107a4613b8f60009260405192839160208301612fe8565b604051809481927f71aad10d000000000000000000000000000000000000000000000000000000008352602060048401526024830190612b38565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561392157613d0f6002600d60409681613d6b966000988991613e2c575b50602b8a519788947f7b2277616c6c6574223a220000000000000000000000000000000000000000006020870152613c44815180926020868a019101612b15565b85017f222c22636861696e4964223a220000000000000000000000000000000000000083820152613c7f825180936020603885019101612b15565b01017f222c227061796c6f6164223a220000000000000000000000000000000000000083820152613cba825180936020601a85019101612b15565b01017f227d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2810184520182612879565b613dcf613d2f737109709ecfa91a80626ff3989d68f67f5b1dd12d614730565b91855195869485947f0199a220000000000000000000000000000000000000000000000000000000008652606060048701526064860190612b38565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152600f83527f7061796c6f61645f68617368466f72000000000000000000000000000000000060208401520160448601520190612b38565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811561392157600091613e11575b5060208151918180820193849201010312610501575190565b613e2691503d806000833e61118c8183612879565b38613df8565b613e4091503d808b833e6111c18183612879565b38613c03565b6000919250613b8f613e646107a4923d8086833e6111c18183612879565b93925050613b76565b613e839193503d806000833e6111c18183612879565b9138613b0f565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561050157604051917f7c84c69b00000000000000000000000000000000000000000000000000000000835260048301526024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561392157613f015750565b600061322491612879565b66ffffffffffffff6000613f1f92614b33565b9061322460406102f0815191613f358184612879565b600c83527f426f756e6420726573756c7400000000000000000000000000000000000000006020840152613f9c81519384927fb60e72cc00000000000000000000000000000000000000000000000000000000602085015260248401526064830190612b38565b866044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612879565b73ffffffffffffffffffffffffffffffffffffffff6000613f1f92614b33565b60026000613f1f92614b33565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156105015761405b60009161408b60405194859384937f97624631000000000000000000000000000000000000000000000000000000008552604060048601526044850190612b38565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc848303016024850152612b38565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561392157613f015750565b6040906140ca612a979493606083526060830190612b38565b908280828403806020850152601085527f7061796c6f61645f746f5061636b6564000000000000000000000000000000006020860152019101520190612b38565b60006107a4610b496141269360405192839160208301612fe8565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561392157614240916000918291614281575b506141ef6002602c60405180947f7b227061796c6f6164223a220000000000000000000000000000000000000000602083015261419a8151809260208686019101612b15565b81017f227d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2810184520182612879565b61420c737109709ecfa91a80626ff3989d68f67f5b1dd12d614730565b60405193849283927f0199a220000000000000000000000000000000000000000000000000000000008452600484016140b1565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156139215760009161426c575090565b612a9791503d806000833e61118c8183612879565b61429591503d8084833e6111c18183612879565b38614154565b600080916040516142e2816107a460208201947f0be77f56000000000000000000000000000000000000000000000000000000008652602060248401526044830190612b38565b51906a636f6e736f6c652e6c6f675afa50565b61010081015160405160208101818193602081519391019260005b81811061467f57505061434a9250037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612879565b5190209060ff8151168015600014614552575090604082015192835191614389614373846128ba565b936143816040519586612879565b8085526128ba565b937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe060208501950136863760005b865181101561448957806143cd60019289612f8b565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e0830152610100820152610100815261447561012082612879565b5190206144828288612f8b565b52016143b7565b5092919450926040519081602081019182945192909260005b8181106145395750506144dc9250037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612879565b51902091608060608301519201516040519260208401947f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a2865260408501526060840152608083015260a082015260a08152613a3660c082612879565b84518352602094850194869450909201916001016144a2565b600181036145ac575060a0015160208151910120906040519060208201927fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46684526040830152606082015260608152613a36608082612879565b600281036145ff575060c00151906040519060208201927f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e484526040830152606082015260608152613a36608082612879565b60038103614652575060e00151906040519060208201927fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46684526040830152606082015260608152613a36608082612879565b7f048183200000000000000000000000000000000000000000000000000000000060005260045260246000fd5b845173ffffffffffffffffffffffffffffffffffffffff16835260209485019486945090920191600101614310565b919082039182116146bb57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b919082018092116146bb57565b8115614701570690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff166040517fc1978d1f00000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5345515f53444b5f5250435f4d494e5f504f52540000000000000000000000006044820152602081606481855afa90811561392157600091614b01575b50604051907fc1978d1f00000000000000000000000000000000000000000000000000000000825260206004830152601460248301527f5345515f53444b5f5250435f4d41585f504f52540000000000000000000000006044830152602082606481865afa91821561392157600092614acd575b50808210611283577fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a6548015614a7b575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146146bb578160016148b5920193847fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a6556146ae565b91600183018093116146bb576148ce92610e8b916146f7565b906040517ff877cb1900000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5345515f53444b5f5250435f55524c5f505245464958000000000000000000006044820152600081606481855afa90811561392157600091614a60575b50604051927ff877cb1900000000000000000000000000000000000000000000000000000000845260206004850152601660248501527f5345515f53444b5f5250435f55524c5f535546464958000000000000000000006044850152600084606481865afa93841561392157600094614a41575b506000906024604051809581937f6900a3ae00000000000000000000000000000000000000000000000000000000835260048301525afa91821561392157600092614a1f575b506020612a97929361103e82604051968561101b899751809285808b019101612b15565b612a979250614a3a6020913d806000833e6111c18183612879565b92506149fb565b6000919450614a59903d8084833e6111c18183612879565b93906149b5565b614a7591503d806000833e6111c18183612879565b38614941565b5060405160208101903660008337614ac560208236810160008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612879565b51902061485d565b90916020823d602011614af9575b81614ae860209383612879565b810103126103a3575051903861482c565b3d9150614adb565b906020823d602011614b2b575b81614b1b60209383612879565b810103126103a3575051386147b8565b3d9150614b0e565b600090838311614c8e5782811091821580614c84575b614c7c57614b5784866146ae565b92600184018094116146bb57600383111580614c73575b614c64577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83101580614c5a575b614c495785831115614c0057505090614bb884614bbd936146ae565b6146f7565b908115614bfb57614bce92506146ea565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081116146bb5790565b505090565b959492919095614c11575b50505050565b83949550614bb890614c2393946146ae565b908115614bfb57614c3492506146ae565b600181018091116146bb579038808080614c0b565b50509050612a9792915019906146ae565b5082198411614b9c565b5050919050612a9792506146ea565b50828411614b6e565b509250505090565b5084821115614b49565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374645574696c7320626f756e642875696e743235362c75696e743235362c7560448201527f696e74323536293a204d6178206973206c657373207468616e206d696e2e00006064820152fd5b600080916020815191016a636f6e736f6c652e6c6f675afa5056fe6080806040523460155761114d908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c806308a5f6b0146104b55780631990d0701461049557806325bfae9014610453578063331044c6146103f8578063685151ff146100c25763dfb49a0d1461005e57600080fd5b346100bd5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bd57610095610c90565b506100b96100a1610c90565b6003815260043560e082015260405191829182610ab7565b0390f35b600080fd5b346100bd576100d0366109e9565b906100d9610c90565b506100e2610c90565b90600082528035928360f81c60019485808316146000146103e157600060608601525b60078160f91c169081610399575b505060108181160361036f575060015b61012c8161067b565b9261013a604051948561062d565b8184527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06101678361067b565b0160005b8181106103275750506040850193845260005b868382101561031957828101359060018260f81c9101986001808316146000146102f65750306101af848951611098565b51525b6002808216146102d9575b600480821614610245575b90602080838986888e60088060019b9a1614610224575b5050505060108082161460806101f6878d51611098565b510152161460a0610208848a51611098565b51015260fe1c60c061021b838951611098565b5101520161017e565b85926060926102369201359451611098565b51019d019c528985888e6101df565b929791908883013560e81c93600384019461026081876110db565b918287116100bd578883116100bd5789856102ca602095948f9a60019a6102c389988e600360406102928a8c51611098565b5101947ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd81369503019201016106b4565b90526110db565b9d5050509293945050506101c8565b838901356020806102eb868b51611098565b51019a0199526101bd565b9850610303838851611098565b5160018560158c019b01013560601c90526101b2565b604051806100b98982610ab7565b602090604051610336816105c5565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c08201528282890101520161016b565b60209081160361038957600284019382013560f01c610123565b600184019382013560f81c610123565b60389060f61c167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b01908588013590610100031c1695019460808501528580610113565b9450601594836001013560601c6060860152610105565b346100bd5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bd5761042f610c90565b506100b961043b610c90565b6002815260043560c082015260405191829182610ab7565b346100bd576100b9610477610467366109e9565b61046f610c90565b5036916106b4565b61047f610c90565b906001825260a082015260405191829182610ab7565b346100bd5760206104ad6104a836610737565b610cd9565b604051908152f35b346100bd5760206104c536610737565b80820151156105bc5761056d60005b604051848101917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408301527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606083015260808201523060a082015260a0815261056460c08261062d565b51902091610cd9565b60405190838201927f1901000000000000000000000000000000000000000000000000000000000000845260228301526042820152604281526105b160628261062d565b519020604051908152f35b61056d466104d4565b60e0810190811067ffffffffffffffff8211176105e157604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610120810190811067ffffffffffffffff8211176105e157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176105e157604052565b359081151582036100bd57565b67ffffffffffffffff81116105e15760051b60200190565b359073ffffffffffffffffffffffffffffffffffffffff821682036100bd57565b92919267ffffffffffffffff82116105e157604051916106fc60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116018461062d565b8294818452818301116100bd578281602093846000960137010152565b9080601f830112156100bd57816020610734933591016106b4565b90565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126100bd576004359067ffffffffffffffff82116100bd576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83830301126100bd57604051916107ae83610610565b806004013560ff811681036100bd5783526107cb6024820161066e565b6020840152604481013567ffffffffffffffff81116100bd578101826023820112156100bd5760048101356107ff8161067b565b9161080d604051938461062d565b818352602060048185019360051b83010101908582116100bd5760248101925b82841061091557505050506040840152606481013560608401526084810135608084015260a481013567ffffffffffffffff81116100bd5782600461087492840101610719565b60a084015260c481013560c084015260e481013560e08401526101048101359067ffffffffffffffff82116100bd570190806023830112156100bd5760048201356108be8161067b565b926108cc604051948561062d565b818452602060048186019360051b830101019283116100bd57602401905b8282106108fd5750505061010082015290565b6020809161090a84610693565b8152019101906108ea565b833567ffffffffffffffff81116100bd5760049083010160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828a0301126100bd5760405191610965836105c5565b61097160208301610693565b83526040820135602084015260608201359267ffffffffffffffff84116100bd5760e0836109a68c6020809881980101610719565b6040840152608081013560608401526109c160a0820161066e565b60808401526109d260c0820161066e565b60a0840152013560c082015281520193019261082d565b9060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126100bd5760043567ffffffffffffffff81116100bd57826023820112156100bd5780600401359267ffffffffffffffff84116100bd57602484830101116100bd576024019190565b919082519283825260005b848110610aa25750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201610a63565b9060208252610140820160ff82511660208401526020820151151560408401526040820151906101206060850152815180915261016084019060206101608260051b8701019301916000905b828210610be85750505050610b5d6101009160608401516080860152608084015160a086015260a08401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08683030160c0870152610a58565b9160c081015160e085015260e0810151828501520151916101207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828403019101526020808351928381520192019060005b818110610bbc5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101610baf565b90919293602080827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea08a6001950301855287519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080610c5a604085015160e0604086015260e0850190610a58565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152960192019201909291610b03565b60405190610c9d82610610565b6060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b61010081015160405160208101818193602081519391019260005b818110611069575050610d2e9250037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261062d565b5190209060ff8151168015600014610f3c575090604082015192835191610d6d610d578461067b565b93610d65604051958661062d565b80855261067b565b937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe060208501950136863760005b8651811015610e6d5780610db160019289611098565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152610e596101208261062d565b519020610e668288611098565b5201610d9b565b5092919450926040519081602081019182945192909260005b818110610f23575050610ec09250037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261062d565b51902091608060608301519201516040519260208401947f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a2865260408501526060840152608083015260a082015260a08152610f1d60c08261062d565b51902090565b8451835260209485019486945090920191600101610e86565b60018103610f96575060a0015160208151910120906040519060208201927fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46684526040830152606082015260608152610f1d60808261062d565b60028103610fe9575060c00151906040519060208201927f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e484526040830152606082015260608152610f1d60808261062d565b6003810361103c575060e00151906040519060208201927fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46684526040830152606082015260608152610f1d60808261062d565b7f048183200000000000000000000000000000000000000000000000000000000060005260045260246000fd5b845173ffffffffffffffffffffffffffffffffffffffff16835260209485019486945090920191600101610cf4565b80518210156110ac5760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b919082018092116110e857565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220068f502f2785fb24737a6edc7c5ed5e13141da76b680187b8f221e2a5a4ea92f64736f6c634300081c0033a2646970667358221220713bf079378fd3aa5bc2df8582a5058ab1c433905922d90806219ea18a24403e64736f6c634300081c0033","sourceMap":"1293:11333:94:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;11776:34;1293:11333;;11776:34;:::i;:::-;11825:35;1293:11333;;11825:35;:::i;:::-;1293:11333;;:::i;:::-;2395:4:48;;;;1293:11333:94;11951:14;;:23;;;1293:11333;11981:14;;2321:4:48;;;1293:11333:94;12010:14;;2321:4:48;;;12039:22:94;;;:33;1293:11333;2933:19:15;1293:11333:94;2933:19:15;;;:::i;:::-;9134:7;1293:11333:94;9786:54:15;1293:11333:94;;;;;;;:::i;:::-;;2657:4:48;;1293:11333:94;;;;;;;;9786:54:15;;;;1293:11333:94;9786:54:15;;;1293:11333:94;9786:54:15;;1293:11333:94;;;;;;:::i;:::-;;;;;2657:4:48;9786:54:15;;;;;;;;:::i;:::-;9134:7;:::i;:::-;1293:11333:94;2395:4:48;;;580:42:98;576:467;;1293:11333:94;12138:34;12303:11;12138:34;12200:74;12138:34;;;;;:::i;:::-;12249:13;1293:11333;12249:13;2024:14:2;12200:74:94;;:::i;:::-;12303:11;;:::i;:::-;1293:11333;;576:467:98;649:43;1293:11333:94;;;;;;649:43:98;:::i;:::-;2321:4:48;;717:42:98;1293:11333:94;;717:42:98;:::i;:::-;2321:4:48;;773:13:98;815:3;792:14;;1293:11333:94;;788:25:98;;;;;883:17;866:162;883:33;:17;;1293:11333:94;883:17:98;;:::i;:::-;;:33;1293:11333:94;866:162:98;:::i;:::-;883:33;830:17;:14;;;:17;:::i;:::-;;:33;2321:4:48;2867;773:13:98;;788:25;-1:-1:-1;788:25:98;;;-1:-1:-1;12200:74:94;;-1:-1:-1;12303:11:94;576:467:98;;;1293:11333:94;;;;;;;;;;;;;;;;;;;;;;;;;;;1065:26:16;1293:11333:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;2395:4:48;2867;2395;;1293:11333:94;;8019:18;;;2321:4:48;8056:22:94;;;:33;1293:11333;8118:10;2657:4:48;;;1293:11333:94;;;8118:25;2657:4:48;8118:25:94;;1293:11333;8118:25;;;;1293:11333;8118:25;;;:::i;:::-;;;;;;;;;;;;;;;1293:11333;8232:13;8286:11;8232:13;8171:86;8232:13;1293:11333;8232:13;2024:14:2;8171:86:94;;:::i;8118:25::-;;;;1293:11333;8118:25;;1293:11333;8118:25;;;;;;2657:4:48;8118:25:94;;;:::i;:::-;;;2657:4:48;;;;;;8286:11:94;8118:25;;2657:4:48;-1:-1:-1;1293:11333:94;;8118:25;;;-1:-1:-1;8118:25:94;;;1293:11333;;;;;;;;;;;;;;7808:18;7617:40;7692:81;1293:11333;;;:::i;:::-;;;;;;2395:4:48;;1293:11333:94;2395:4:48;;;:::i;:::-;1293:11333:94;;;;;7213:19;1293:11333;;;:::i;:::-;2395:4:48;2556;2395;;1293:11333:94;7328:21;;2321:4:48;7364:28:94;;;;:39;1293:11333;;:::i;:::-;2395:4:48;;;;1293:11333:94;2395:4:48;;:::i;:::-;7502:23:94;;;:34;7364:28;7542:29;;:40;7617;:::i;1293:11333::-;;;;;;;;;;;;;;;;;2723:18:9;1293:11333:94;;;;;;;2723:18:9;1293:11333:94;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1585:34;1293:11333;;1585:34;:::i;:::-;1293:11333;1634:35;1293:11333;;1634:35;:::i;:::-;1681:13;;1715:3;1293:11333;;1696:17;;;;;1814:9;1799:130;1814:25;:9;1293:11333;1814:9;;;:::i;1799:130::-;1814:25;1771:9;;;;:::i;:::-;;:25;2321:4:48;2867;1681:13:94;;1696:17;;2867:4:48;1696:17:94;1293:11333;;:::i;:::-;2395:4:48;;;;1293:11333:94;2020:11;;:20;1293:11333;2046:11;;2321:4:48;2072:11:94;;;2321:4:48;2121:40:94;;;;:::i;:::-;2184:6;;;:::i;:::-;1293:11333;2230:10;2657:4:48;;;1293:11333:94;;;2230:34;;;;;2657:4:48;2230:34:94;;1293:11333;;2230:34;;2867:4:48;1293:11333:94;2867:4:48;;;;:::i;:::-;2230:34:94;;;;;;;;;2374:18;;2230:34;2355:17;2230:34;2374:18;2230:34;;;;;1676:260;1293:11333;2355:17;1293:11333;2287:18;1293:11333;;2287:18;;;;1293:11333;2287:18;;;:::i;:::-;;;;;;;;;:::i;:::-;;:::i;:::-;1293:11333;;2355:17;;;1293:11333;2355:17;;;:::i;:::-;;2287:18;2355:17;;;;;;:::i;:::-;1293:11333;;2374:18;;;1293:11333;2374:18;;;:::i;:::-;;2287;2374;;;;;;:::i;:::-;;:::i;2230:34::-;2355:17;2230:34;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;1293:11333;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2575:18:9;1293:11333:94;2321:4:48;;;:::i;:::-;1293:11333:94;;;;;;;:::i;:::-;2321:4:48;;;2575:18:9;1293:11333:94;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;2876:18:9;1293:11333:94;2321:4:48;;;:::i;:::-;1293:11333:94;;;;;;;:::i;:::-;2321:4:48;;;2876:18:9;1293:11333:94;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;2321:4:48;;1293:11333:94;;;;;:::i;:::-;;;;2321:4:48;1293:11333:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3305:21;;;3299:110;1293:11333;;3299:110;:::i;:::-;2321:4:48;;3434:10:94;2657:4:48;;;1293:11333:94;;2321:4:48;;;1293:11333:94;;;;;;;;;;:::i;:::-;3502:1;2321:4:48;;;;;;;;;;;3510:17:94;;;;;:::i;:::-;;;;;:::i;:::-;;1293:11333;;:::i;:::-;2395:4:48;;;;1293:11333:94;3612:11;;:20;2867:4:48;1293:11333:94;;;3567:20:97;;;;1293:11333:94;3567:20:97;;;:::i;:::-;1293:11333:94;;3554:34:97;;;;2657:4:48;3554:34:97;;1293:11333:94;;3554:34:97;;2867:4:48;;;;;;:::i;:::-;3554:34:97;;336:42:2;3554:34:97;;;;;;;;;;;2321:4:48;1293:11333:94;;;3606:21:97;2657:4:48;3606:21:97;;1293:11333:94;3606:21:97;;1293:11333:94;3606:21:97;;2867:4:48;3606:21:97;336:42:2;3606:21:97;;;;;;;;;;;2321:4:48;1293:11333:94;2867:4:48;1293:11333:94;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;2657:4:48;798:35:97;;1293:11333:94;;798:35:97;;1293:11333:94;;2867:4:48;1293:11333:94;;;;;;;;;798:35:97;;;336:42:2;798:35:97;;;;;;;;;;;2321:4:48;1293:11333:94;;;2657:4:48;866:35:97;;1293:11333:94;;866:35:97;;1293:11333:94;;2867:4:48;1293:11333:94;;;;;;;;;866:35:97;798;866;336:42:2;866:35:97;;;;;;;;;;;2321:4:48;916:18:97;;;;1293:11333:94;;285:44:97;462:50;1037:32;;1033:109;;2321:4:48;232:1:97;;;;;;3502::94;1278:17:97;232:1;;644:49;;285:44;644:49;1278:17;:::i;:::-;232:1;3502::94;232::97;;;;;;;1337:15;;1326:27;1337:15;;;;:::i;:::-;1326:27;;:::i;:::-;1293:11333:94;;1383:39:97;2657:4:48;1383:39:97;;1293:11333:94;;1383:39:97;;232:1;;2867:4:48;232:1:97;;1293:11333:94;232:1:97;1293:11333:94;;;232:1:97;1383:39;;798:35;1383:39;336:42:2;1383:39:97;;;;;;;;;;;2321:4:48;1293:11333:94;;;2657:4:48;1451:39:97;;1293:11333:94;;1451:39:97;;232:1;;2867:4:48;232:1:97;;1293:11333:94;232:1:97;1293:11333:94;;;232:1:97;1451:39;;798:35;1451:39;336:42:2;1451:39:97;;;;;;;;;;;2321:4:48;1293:11333:94;;;1526:24:97;2657:4:48;1526:24:97;;1293:11333:94;1526:24:97;;2657:4:48;1526:24:97;;2867:4:48;1526:24:97;336:42:2;1526:24:97;;;;;;3667:48;1526:24;;;;;;;2321:4:48;1293:11333:94;;232:1:97;1293:11333:94;;;;;;;;;;;;232:1:97;;;;;;1293:11333:94;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;232:1:97;2321:4:48;232:1:97;;;;;;:::i;:::-;1293:11333:94;;3667:48:97;;;;;2657:4:48;3667:48:97;;1293:11333:94;3667:48:97;;;:::i;:::-;;;;336:42:2;3667:48:97;;;;;;2867:4:48;3667:48:97;;;;;2321:4:48;2657;1293:11333:94;3434:10;2657:4:48;;;1293:11333:94;;;3769:34;;;;;2657:4:48;3769:34:94;;1293:11333;;3769:34;;2867:4:48;;;;;;:::i;:::-;3769:34:94;;;;;;;;;3837:18;;3769:34;3818:17;3769:34;3837:18;3769:34;;;;;2321:4:48;1293:11333:94;3818:17;1293:11333;;;3818:17;;;1293:11333;3818:17;;;:::i;3769:34::-;3818:17;3769:34;;;;;;;;;;;;;;:::i;:::-;;;;;3667:48:97;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;1293:11333:94;;;;;;;;;;;1526:24:97;232:1;1526:24;;;1293:11333:94;1526:24:97;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;1451:39;;;;;;;;;;;;;:::i;:::-;;;;1383;;;;;;;;;;;;;;:::i;:::-;;;;;232:1;2867:4:48;232:1:97;;;;;1293:11333:94;232:1:97;;1033:109;1293:11333:94;;;;1107:26:97;;1293:11333:94;;;;;1107:26:97;1293:11333:94;;;;;;;;;;1107:26:97;;2321:4:48;1107:26:97;;;;;;:::i;:::-;1293:11333:94;1097:37:97;;1033:109;;1293:11333:94;798:35:97;1293:11333:94;;;;;;;;;;;2867:4:48;1293:11333:94;;;;;;;;;866:35:97;;;1293:11333:94;866:35:97;;1293:11333:94;866:35:97;;;;;;2657:4:48;866:35:97;;;:::i;:::-;;;2657:4:48;;;;;866:35:97;;;;;;-1:-1:-1;866:35:97;;;1293:11333:94;;;;;;;;;798:35:97;;;1293:11333:94;798:35:97;;1293:11333:94;798:35:97;;;;;;2657:4:48;798:35:97;;;:::i;:::-;;;2657:4:48;;;;;798:35:97;;;;;;-1:-1:-1;798:35:97;;3606:21;1293:11333:94;3606:21:97;;;1293:11333:94;3606:21:97;2867:4:48;3606:21:97;;;;;;;;;;:::i;:::-;;;;;;;3554:34;;;;;;;;;;;;;:::i;:::-;;;;2321:4:48;1293:11333:94;;;;;;;:::i;:::-;2321:4:48;;;;;;;;1293:11333:94;;2321:4:48;;;;1293:11333:94;2321:4:48;;;;;;;;;;;;;;3305:21:94;2321:4:48;;;;;;;;;;;;1293:11333:94;;-1:-1:-1;1293:11333:94;;;;;-1:-1:-1;1293:11333:94;;;;;;;;;;;;;;;;;;;;;;;;;2933:19:15;12411:24:94;2933:19:15;:::i;:::-;2657:4:48;1293:11333:94;;;9134:7:15;1293:11333:94;9786:54:15;1293:11333:94;;;;;;:::i;:::-;;2657:4:48;;1293:11333:94;;;;;;;9786:54:15;;;;1293:11333:94;9786:54:15;;;;;;;1293:11333:94;;;;;;:::i;9134:7:15:-;1293:11333:94;;;;:::i;:::-;2395:4:48;;;;1293:11333:94;;12523:59;12546:28;1293:11333;12523:59;;;9786:54:15;12523:59:94;;2657:4:48;9786:54:15;12523:59:94;;;1293:11333;12523:59;;:::i;:::-;336:42:2;12507:76:94;;;;1293:11333;2867:4:48;1293:11333:94;;;12507:76;;;;2657:4:48;12507:76:94;;1293:11333;;12507:76;;2867:4:48;9786:54:15;2867:4:48;;;;:::i;:::-;12507:76:94;;;336:42:2;12507:76:94;;;;;;;;1293:11333;2657:4:48;1293:11333:94;12589:29;2657:4:48;;1293:11333:94;12589:10;2657:4:48;;;1293:11333:94;;;12589:29;;;;;2657:4:48;12589:29:94;;1293:11333;12589:29;;;:::i;:::-;;;;;;;;;;;;;1293:11333;;;12589:29;;;1293:11333;12589:29;1293:11333;12589:29;;;;;;;;:::i;:::-;;;;;:::i;:::-;;1293:11333;;12589:29;;;;;;1293:11333;;;;;;;;12507:76;;;12589:29;12507:76;1293:11333;12507:76;;:::i;:::-;;;;;;1293:11333;;;;;;;;;;;;;;;;;;;;;;;3653:18:9;1293:11333:94;2321:4:48;;;:::i;:::-;1293:11333:94;;;;;;;:::i;:::-;2321:4:48;;;3653:18:9;1293:11333:94;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;2321:4:48;;1293:11333:94;;;;;:::i;:::-;;;;2321:4:48;1293:11333:94;;;;;;;;;;;;;;;;;;;;;;;3162:18:9;1293:11333:94;2321:4:48;;;:::i;:::-;1293:11333:94;;;;;;;:::i;:::-;2321:4:48;;;3162:18:9;1293:11333:94;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;2395:4:48;1293:11333:94;;;:::i;:::-;;;;;;;:::i;:::-;2395:4:48;;;;1293:11333:94;2395:4:48;;:::i;:::-;5533:16:94;;;:27;5566:22;;;:33;1293:11333;5628:10;2657:4:48;;;1293:11333:94;;;5628:25;2657:4:48;5628:25:94;;;;;;;1293:11333;5628:25;;;:::i;:::-;;;;;;;;;;;;;;;5742:13;5796:11;5742:13;5681:86;5742:13;2024:14:2;5742:13:94;2024:14:2;5681:86:94;;:::i;5628:25::-;;;;;;;;;;;;;;2657:4:48;5628:25:94;;;:::i;:::-;;;2657:4:48;;;;;;5796:11:94;5628:25;;;;;-1:-1:-1;5628:25:94;;1293:11333;;;;;;;;;;;;;;;;:::i;:::-;2867:4:48;2395;;4671:19:94;;;;2321:4:48;2657;1293:11333:94;4743:10;2657:4:48;;;1293:11333:94;;4743:39;1293:11333;;4743:39;;;;2657:4:48;4743:39:94;;1293:11333;4743:39;;2657:4:48;4743:39:94;;;;;;;4820:19;;4743:39;4797:21;4743:39;4820:19;4743:39;;;;;1293:11333;4797:21;1293:11333;;;4797:21;;;1293:11333;4797:21;;;:::i;1293:11333::-;;;;;;;;;;;;3346:26:9;1293:11333:94;2321:4:48;;;:::i;:::-;1293:11333:94;;;;;;:::i;:::-;2321:4:48;;;3346:26:9;1293:11333:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;2321:4:48;;1293:11333:94;;;;;:::i;:::-;;;;2321:4:48;1293:11333:94;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;11524:11;1293:11333;10992:239;11421:74;1293:11333;10737:249;10518:34;1293:11333;;10518:34;:::i;:::-;1293:11333;10567:35;1293:11333;;10567:35;:::i;:::-;1293:11333;;;:::i;:::-;2395:4:48;;;;10710:21:94;;:::i;:::-;10693:14;1293:11333;10693:14;;:38;;;10947:32;1293:11333;;10947:32;:::i;:::-;1293:11333;;;;;;;;:::i;:::-;;2321:4:48;;1293:11333:94;;;10757:229;;2321:4:48;1293:11333:94;10757:229;;2321:4:48;1293:11333:94;;;10757:229;;2321:4:48;1293:11333:94;;;10757:229;;2321:4:48;1293:11333:94;;;10757:229;;2321:4:48;1293:11333:94;10757:229;;2321:4:48;10737:14:94;;:249;;;;:::i;:::-;;;:::i;:::-;;1293:11333;;;;;;:::i;:::-;11045:4;2321::48;;11012:219:94;1293:11333;11012:219;;2321:4:48;2657;;:::i;:::-;1293:11333:94;11012:219;;2321:4:48;11109:7:94;1293:11333;11012:219;;2321:4:48;11012:219:94;1293:11333;11012:219;;2321:4:48;11012:219:94;1293:11333;11012:219;;2321:4:48;11012:219:94;1293:11333;11012:219;;2321:4:48;10992:14:94;:239;;;;:::i;:::-;;;:::i;:::-;;1293:11333;11238:14;;2321:4:48;1293:11333:94;11267:14;;2321:4:48;1293:11333:94;11296:22;;:33;11359:34;;;;:::i;1293:11333::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8671:74;8774:11;1293:11333;;;:::i;:::-;2395:4:48;2867;2395;;1293:11333:94;;8510:18;;;2321:4:48;8547:22:94;;;:33;8609:34;;;;:::i;1293:11333::-;;;;;;;;;;;;;;;;:::i;:::-;2556:4:48;2395;;4342:16:94;1293:11333;4342:16;;2321:4:48;2657;1293:11333:94;4408:10;2657:4:48;;;1293:11333:94;;4408:30;1293:11333;;4408:30;;;;2657:4:48;4408:30:94;;1293:11333;4408:30;;2657:4:48;4408:30:94;;;;;;;4476:19;;4408:30;4453:21;4408:30;4476:19;4408:30;;;;;1293:11333;4453:21;1293:11333;;;4453:21;;;1293:11333;4453:21;;;:::i;1293:11333::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2566:21;;;2560:110;1293:11333;;2560:110;:::i;:::-;2321:4:48;;1293:11333:94;;;2727:3;;1293:11333;;;;;:::i;:::-;2321:4:48;;;1293:11333:94;;;;;2321:4:48;;;;;;;;;2742:13:94;;;2757:7;;;;;;1293:11333;2867:4:48;1293:11333:94;;;:::i;:::-;2395:4:48;;;;1293:11333:94;2920:11;;:20;2969:40;;;;:::i;2766:3::-;2812:17;;;2867:4:48;2812:17:94;;;:::i;:::-;;;;;;:::i;:::-;;2867:4:48;2742:13:94;;2321:4:48;1293:11333:94;;;;;;;:::i;:::-;2321:4:48;;;;;;;;1293:11333:94;;2321:4:48;;;;1293:11333:94;2321:4:48;;;;;;;;;;;;;;2566:21:94;2321:4:48;;;;;;;;;;;;1293:11333:94;;;;;;;;;;;;;;;;;;;;;;;;;;;3501:18:9;1293:11333:94;;;;;;;3501:18:9;1293:11333:94;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3794:16:9;1293:11333:94;;;;;;;3794:16:9;1293:11333:94;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;6824:31;1293:11333;;;:::i;:::-;2395:4:48;;1293:11333:94;;;;;2395:4:48;;;:::i;:::-;1293:11333:94;;;;;6420:19;1293:11333;;;:::i;:::-;2395:4:48;2556;2395;;1293:11333:94;6535:21;;2321:4:48;6571:28:94;;;;:39;1293:11333;;:::i;:::-;2395:4:48;;;;1293:11333:94;2395:4:48;;:::i;:::-;6709:23:94;;;:34;6571:28;6749:29;;:40;1293:11333;;6824:10;2657:4:48;;;1293:11333:94;;;;6824:31;;;;2657:4:48;6824:31:94;;1293:11333;6824:31;;;:::i;1293:11333::-;;;;;;;;;;;;3948:19:9;1293:11333:94;2321:4:48;;;:::i;:::-;1293:11333:94;;;;;;:::i;:::-;2321:4:48;;;3948:19:9;1293:11333:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;2321:4:48;;1293:11333:94;;;;;2321:4:48;;;:::i;:::-;1293:11333:94;;;;;;;:::i;:::-;2321:4:48;;;1293:11333:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2321:4:48;1293:11333:94;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4093:10;1293:11333;;;;;;:::i;:::-;;;;;;:::i;:::-;2395:4:48;;;;;1293:11333:94;2395:4:48;;;:::i;:::-;4025:17:94;;;:28;2657:4:48;1293:11333:94;;2657:4:48;;;;1293:11333:94;;;;;4093:32;;;;;;;2657:4:48;4093:32:94;;1293:11333;;4093:32;;1293:11333;;;;;;;;;;;;;;;;;;;;;4093:32;;;;;;;;;;4163:19;;4093:32;4140:21;4093:32;4163:19;4093:32;;;;;1293:11333;4140:21;1293:11333;;;4140:21;;;1293:11333;4140:21;;;:::i;1293:11333::-;;;;;;;;;;;;;;;;;3018:16:9;1293:11333:94;;;;;;;3018:16:9;1293:11333:94;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1330:28;1293:11333;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;9604:239;1293:11333;;;;;;:::i;:::-;;9349:249;9130:34;1293:11333;;9130:34;:::i;:::-;1293:11333;9179:35;1293:11333;;9179:35;:::i;:::-;1293:11333;;;:::i;:::-;2395:4:48;;;;9322:21:94;;:::i;9349:249::-;;1293:11333;;;;;;:::i;:::-;9657:4;2321::48;;9624:219:94;1293:11333;9624:219;;2321:4:48;2657;;:::i;:::-;1293:11333:94;9624:219;;2321:4:48;9721:7:94;1293:11333;9624:219;;2321:4:48;9624:219:94;1293:11333;9624:219;;2321:4:48;9624:219:94;1293:11333;9624:219;;2321:4:48;9624:219:94;1293:11333;9624:219;;2321:4:48;9604:14:94;:239;;;;:::i;:::-;;1293:11333;9849:14;;2321:4:48;1293:11333:94;9878:14;;2321:4:48;1293:11333:94;9907:22;;:33;1293:11333;9970:10;2657:4:48;;;1293:11333:94;;;9970:25;2657:4:48;9970:25:94;;1293:11333;9970:25;;;;1293:11333;9970:25;;;:::i;1293:11333::-;;;;;;;;;;;;;;1406:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;1293:11333;;1393:29;1293:11333;;;;;;;;1393:29;1293:11333;;;1406:16;1293:11333;;;;;;;;;;;;;;6274:11;2395:4:48;6171:74:94;1293:11333;;;:::i;:::-;;;;;;;:::i;2395:4:48:-;6014:16:94;;;:27;6047:22;;;:33;6109:34;;;;:::i;1293:11333::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;1293:11333:94;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1293:11333:94;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1293:11333:94;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;-1:-1:-1;1293:11333:94;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;1293:11333:94;;-1:-1:-1;1293:11333:94;;;;;;;;;-1:-1:-1;1293:11333:94;;;;-1:-1:-1;1293:11333:94;;;;;;;;;-1:-1:-1;1293:11333:94;;;;-1:-1:-1;1293:11333:94;;;;;;:::o;2321:4:48:-;1293:11333:94;;;;;;;;;:::i;:::-;9341:1;2321:4:48;;;;;;-1:-1:-1;2321:4:48;;;;;;;;;:::o;:::-;;1293:11333:94;;;;;;:::i;:::-;-1:-1:-1;2321:4:48;;-1:-1:-1;2321:4:48;;;;1293:11333:94;;2321:4:48;;;-1:-1:-1;1293:11333:94;2321:4:48;;;-1:-1:-1;2321:4:48;;;;-1:-1:-1;2321:4:48;;;;-1:-1:-1;2321:4:48;;;;;;;;;;;;;;1293:11333:94;;2321:4:48;;;;;;:::o;:::-;;1293:11333:94;2321:4:48;;;;;1293:11333:94;2321:4:48;;1293:11333:94;;9619:1;2321:4:48;;;;;;;:::o;:::-;1293:11333:94;;2321:4:48;;;;;;;;;;;;:::o;2657:::-;1293:11333:94;;;;;;;:::i;:::-;2657:4:48;;;;1293:11333:94;2657:4:48;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;1293:11333:94;2657:4:48;;1293:11333:94;2657:4:48;;;;;;;;1293:11333:94;;2657:4:48;;;1293:11333:94;2657:4:48;;;;;;;;;;1293:11333:94;;;;;;;;2657:4:48;;1293:11333:94;2657:4:48;;;;;;1293:11333:94;;2657:4:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1293:11333:94;;;;;;;;;;2657:4:48;;;;;;;;;;;;:::o;:::-;;;1293:11333:94;;;;2657:4:48;1293:11333:94;;;;;;;;2657:4:48;;;;;;;;;;;;;;;;;;;;;;;1293:11333:94;2657:4:48;;1293:11333:94;;;2657:4:48;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;1293:11333:94;;2657:4:48;;;1293:11333:94;2657:4:48;;;;1293:11333:94;;2657:4:48;;;1293:11333:94;2657:4:48;;;;;1293:11333:94;;2657:4:48;;;;;;;;;1293:11333:94;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;2657:4:48;1293:11333:94;;;;;;;2657:4:48;1293:11333:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1293:11333:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;1293:11333:94;;;;;-1:-1:-1;1293:11333:94;;-1:-1:-1;1293:11333:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1293:11333:94;;-1:-1:-1;1293:11333:94;;-1:-1:-1;1293:11333:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2657:4:48;1293:11333:94;;;;;;;;2657:4:48;1293:11333:94;;2657:4:48;1293:11333:94;2657:4:48;;;;1293:11333:94;;;;;;;;2657:4:48;1293:11333:94;;2657:4:48;1293:11333:94;2657:4:48;1293:11333:94;2657:4:48;;1293:11333:94;;;;;;;;2657:4:48;1293:11333:94;;2657:4:48;1293:11333:94;2657:4:48;1293:11333:94;2657:4:48;;1293:11333:94;;;;;;;;2657:4:48;1293:11333:94;;2657:4:48;1293:11333:94;2657:4:48;1293:11333:94;2657:4:48;;1293:11333:94;;;;;;;;2657:4:48;1293:11333:94;;2657:4:48;1293:11333:94;2657:4:48;1293:11333:94;2657:4:48;;1293:11333:94;;;;;;;;2657:4:48;1293:11333:94;;2657:4:48;1293:11333:94;2657:4:48;1293:11333:94;2657:4:48;;1293:11333:94;;;;;;;;2657:4:48;1293:11333:94;;2657:4:48;1293:11333:94;2657:4:48;;;1293:11333:94;;;;;;;;;;;;;;;;;;;;2657:4:48;;;;1293:11333:94;;;2657:4:48;;1293:11333:94;2657:4:48;;1293:11333:94;;;;2657:4:48;;1293:11333:94;2657:4:48;;1293:11333:94;;;;2657:4:48;;1293:11333:94;2657:4:48;;1293:11333:94;;;;2657:4:48;;1293:11333:94;2657:4:48;;1293:11333:94;;;;2657:4:48;;1293:11333:94;2657:4:48;;1293:11333:94;;;;2657:4:48;;1293:11333:94;2657:4:48;;1293:11333:94;;;;2657:4:48;;1293:11333:94;;;;;;;;;;;;;;1243:204:4;1302:7;1293:11333:94;;;;;;;1325:14:4;:::o;1298:143::-;1293:11333:94;;;2657:4:48;1377:39:4;;1293:11333:94;1377:39:4;;;1293:11333:94;192:59:4;;;;2657:4:48;192:59:4;1377:39;;;1293:11333:94;1377:39:4;;;;;;;1293:11333:94;1377:39:4;;;1298:143;1377:53;;;1370:60;:::o;1377:39::-;;;192:59;1377:39;;192:59;1377:39;;;;;;2657:4:48;1377:39:4;;;:::i;:::-;;;2657:4:48;;;;;1377:39:4;;;;;;-1:-1:-1;1377:39:4;;;1293:11333:94;;;;;;;;;9842:280:48;9972:18;;;1293:11333:94;9842:280:48;;10027:18;;1293:11333:94;1206:48:48;;-1:-1:-1;1206:48:48;;1293:11333:94;;;1077:202:48;9972:18;1077:202;;2657:4;539:66;2657:4;;709:66;1293:11333:94;868:66:48;;2657:4;868:66;;;;2657:4;868:66;;;2657:4;1293:11333:94;868:66:48;;;1293:11333:94;868:66:48;1077:202;;;;;;:::i;:::-;1293:11333:94;1060:225:48;;10027:18;;:::i;:::-;1293:11333:94;;10068:48:48;9972:18;10068:48;;1293:11333:94;;;;;;;2657:4:48;1293:11333:94;;;2657:4:48;1293:11333:94;10068:48:48;;;;;;:::i;:::-;1293:11333:94;10058:59:48;;9842:280;:::o;1206:48::-;1240:13;1206:48;;;1293:11333:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;3750:506:97:-;;1293:11333:94;;;3967:21:97;2657:4:48;3967:21:97;;1293:11333:94;3967:21:97;;;1293:11333:94;-1:-1:-1;3967:21:97;;;1293:11333:94;3967:21:97;;;;;;;-1:-1:-1;3967:21:97;;;3750:506;1293:11333:94;2024:14:2;1293:11333:94;;4019:22:97;2657:4:48;4019:22:97;;2024:14:2;3967:21:97;4019:22;;1293:11333:94;-1:-1:-1;4019:22:97;3967:21;4019:22;1293:11333:94;4019:22:97;;;;;;;2867:4:48;4019:22:97;-1:-1:-1;4019:22:97;;;3750:506;1293:11333:94;4085:20:97;;-1:-1:-1;1293:11333:94;;;4085:20:97;;;1293:11333:94;4085:20:97;;;:::i;:::-;1293:11333:94;;4072:34:97;;;;2657:4:48;4072:34:97;;1293:11333:94;3967:21:97;4072:34;;2867:4:48;3967:21:97;2867:4:48;;;;:::i;:::-;4072:34:97;;1293:11333:94;4072:34:97;;;;;;;1293:11333:94;;;;4072:34:97;;1293:11333:94;4072:34:97;-1:-1:-1;4072:34:97;;;;;3750:506;1293:11333:94;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;4165:11:97;1293:11333:94;4165:11:97;:::i;:::-;1293:11333:94;;;4157:47:97;;;;;2657:4:48;4157:47:97;;1293:11333:94;3967:21:97;4157:47;;1293:11333:94;;;;;;:::i;:::-;;;;;;;;3967:21:97;1293:11333:94;;;;;;;;;;;;;;;;;;;:::i;:::-;4157:47:97;;;1293:11333:94;4157:47:97;;;;;;;-1:-1:-1;4157:47:97;;;3750:506;1293:11333:94;2657:4:48;1293:11333:94;;4217:34:97;;;;;;;;;;2657:4:48;;;;;3750:506:97;:::o;4157:47::-;;;;;;-1:-1:-1;4157:47:97;;;;;;:::i;:::-;;;;4072:34;;;;;;;;;;;;;:::i;:::-;;;;4019:22;-1:-1:-1;4019:22:97;;;4085:20;4019:22;4085:20;4019:22;;;;;;;;;;:::i;:::-;;;;;;;3967:21;;;;;;;-1:-1:-1;3967:21:97;;;;;;:::i;:::-;;;;;3710:110:4;;1293:11333:94;3789:24:4;;;;1293:11333:94;;3789:24:4;2657:4:48;3789:24:4;;;;;2657:4:48;1293:11333:94;;;2657:4:48;-1:-1:-1;3789:24:4;;;1293:11333:94;3789:24:4;;;;;;;;3710:110;:::o;3789:24::-;-1:-1:-1;3789:24:4;;;:::i;2815:199:15:-;1293:11333:94;;2933:19:15;2815:199;2933:19;:::i;:::-;2657:4:48;9134:7:15;1293:11333:94;9786:54:15;1293:11333:94;;;;;;;:::i;:::-;;2657:4:48;;1293:11333:94;;;;;;;;9786:54:15;;;;1293:11333:94;9786:54:15;;;;;;1293:11333:94;;;;;;:::i;:::-;;;;;2657:4:48;9786:54:15;;;;;;;;:::i;2815:199::-;1293:11333:94;;2933:19:15;2815:199;2933:19;:::i;2815:199::-;9341:1:94;1293:11333;2933:19:15;2815:199;2933:19;:::i;4500:120:4:-;1293:11333:94;4589:24:4;;;;1293:11333:94;-1:-1:-1;1293:11333:94;;;;4589:24:4;;;;;2657:4:48;4589:24:4;;1293:11333:94;4589:24:4;;;1293:11333:94;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;4589:24:4;;1293:11333:94;4589:24:4;;;;;;;;4500:120;:::o;1293:11333:94:-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3035:310:97:-;-1:-1:-1;3205:20:97;;2867:4:48;3035:310:97;1293:11333:94;;3205:20:97;;;;;;;:::i;2867:4:48:-;3192:34:97;;1293:11333:94;3192:34:97;;;;;;;3266:48;3192:34;-1:-1:-1;3192:34:97;;;;;3035:310;1293:11333:94;;;;;;;;;3205:20:97;1293:11333:94;;;;;;;;3205:20:97;1293:11333:94;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;3274:11:97;1293:11333:94;3274:11:97;:::i;:::-;1293:11333:94;;3266:48:97;;;;;2657:4:48;3266:48:97;;3192:34;3266:48;;;:::i;:::-;;;;1293:11333:94;3266:48:97;;;;;;;-1:-1:-1;3266:48:97;;;3320:20;3035:310;:::o;3266:48::-;;;;;;-1:-1:-1;3266:48:97;;;;;;:::i;3192:34::-;;;;;;;;;;;;;:::i;:::-;;;;1718:124:18;358:279;1718:124;;1293:11333:94;;1793:41:18;;2867:4:48;1793:41:18;;;;;;;;;;;2867:4:48;;;;;;:::i;1793:41:18:-;358:279;;131:42;358:279;;;1718:124::o;8278:1282:48:-;8416:22;;;;1293:11333:94;;8399:40:48;;;;;1293:11333:94;8399:40:48;1293:11333:94;;;;;;;;;;;;;8399:40:48;;;;;;;;;;;;;:::i;:::-;1293:11333:94;8389:51:48;;1293:11333:94;;;;;8451:34:48;;8447:1109;1293:11333:94;;;8525:14:48;;1293:11333:94;8525:14:48;;;1293:11333:94;;;2321:4:48;1293:11333:94;2321:4:48;;;:::i;:::-;1293:11333:94;;;;;;;:::i;:::-;2321:4:48;;;1293:11333:94;:::i;:::-;;8399:40:48;;1293:11333:94;;;;;;;;8164:3:48;1293:11333:94;;8146:16:48;;;;;8202:8;;1293:11333:94;8202:8:48;;;:::i;:::-;;1293:11333:94;1478:66:48;;1293:11333:94;7708:7:48;8399:40;7708:7;;1293:11333:94;7727:6:48;1293:11333:94;7727:6:48;;;8399:40;1293:11333:94;;;;7717:17:48;7736:10;;;;1293:11333:94;7748:14:48;;;1293:11333:94;;;7764:14:48;7780:17;7764:14;;;1293:11333:94;;;7780:17:48;;1293:11333:94;;;;7667:138:48;8399:40;7667:138;;2657:4;1478:66;2657:4;;1293:11333:94;1478:66:48;;1293:11333:94;7736:10:48;1478:66;;2657:4;7748:14;1478:66;;2657:4;7764:14;1478:66;;2657:4;7780:17;1478:66;;1293:11333:94;1478:66:48;;;1293:11333:94;8416:22:48;1478:66;;2657:4;8416:22;7667:138;;;;;;:::i;:::-;1293:11333:94;7650:161:48;;8177:34;;;;:::i;:::-;2321:4;2867;8131:13;;8146:16;;;;;;;1293:11333:94;;8240:28:48;;8399:40;8240:28;;;;1293:11333:94;;;;;;;;;;;;8240:28:48;;;;;;8399:40;8240:28;;;;;;:::i;:::-;1293:11333:94;8230:39:48;;8750:14;7748;7736:10;8750:14;;1293:11333:94;8766:14:48;;1293:11333:94;;;8712:82:48;8399:40;8712:82;;2657:4;1799:66;2657:4;;1293:11333:94;1799:66:48;;2657:4;7736:10;1799:66;;2657:4;7748:14;1799:66;;2657:4;7764:14;1799:66;;2657:4;7764:14;8712:82;;;7780:17;8712:82;;:::i;1293:11333:94:-;;;2657:4:48;;8399:40;1293:11333:94;;;;;;-1:-1:-1;1293:11333:94;;;;;;;;8447:1109:48;1293:11333:94;8812:29:48;;1293:11333:94;;8998:16:48;;;;8399:40;1293:11333:94;;;;8988:27:48;1293:11333:94;;;8959:70:48;8399:40;8959:70;;2657:4;1979:66;2657:4;;1293:11333:94;1979:66:48;;2657:4;1979:66;;;2657:4;1979:66;8959:70;;;;;;:::i;8808:748::-;2867:4;9047:35;;2867:4;;9216:18;;;1979:66;1293:11333:94;;;9181:67:48;8399:40;9181:67;;2657:4;2174:66;2657:4;;1293:11333:94;1979:66:48;;2657:4;1979:66;;;2657:4;1979:66;9181:67;;;;;;:::i;9043:513::-;2556:4;9266:28;;2556:4;;9443:15;;;1979:66;1293:11333:94;;;9414:58:48;8399:40;9414:58;;2657:4;1979:66;2657:4;;1293:11333:94;1979:66:48;;2657:4;1979:66;;;2657:4;1979:66;9414:58;;;;;;:::i;9262:294::-;9523:26;1293:11333:94;9523:26:48;;2657:4;1293:11333:94;;9523:26:48;1293:11333:94;;;;;;;8399:40:48;1293:11333:94;;;;;;-1:-1:-1;1293:11333:94;;;;;;;;232:1:97;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::o;:::-;;;;;;;;;;701:863;1293:11333:94;;;;2657:4:48;798:35:97;;1293:11333:94;798:35:97;;;1293:11333:94;;;;;;;;;;;;798:35:97;;;;;;;;;;;-1:-1:-1;798:35:97;;;701:863;1293:11333:94;;;866:35:97;2657:4:48;866:35:97;;1293:11333:94;798:35:97;866;;1293:11333:94;;;;;;;;;;;;866:35:97;798;866;;;;;;;;;-1:-1:-1;866:35:97;;;701:863;916:18;;;;1293:11333:94;;285:44:97;462:50;1037:32;;1033:109;;701:863;232:1;;;;;;;1278:17;232:1;;644:49;;285:44;644:49;1278:17;:::i;:::-;232:1;;;;;;;;;1326:27;1337:15;;;;:::i;1326:27::-;1293:11333:94;;;2657:4:48;1383:39:97;;1293:11333:94;798:35:97;1383:39;;232:1;;1293:11333:94;232:1:97;;1293:11333:94;232:1:97;1293:11333:94;;;232:1:97;-1:-1:-1;1383:39:97;798:35;1383:39;;;;;;;;;-1:-1:-1;1383:39:97;;;701:863;1293:11333:94;;;1451:39:97;2657:4:48;1451:39:97;;1293:11333:94;798:35:97;1451:39;;232:1;;1293:11333:94;232:1:97;;1293:11333:94;232:1:97;1293:11333:94;;;232:1:97;-1:-1:-1;1451:39:97;798:35;1451:39;;;;;;;;;-1:-1:-1;1451:39:97;;;701:863;1293:11333:94;-1:-1:-1;1293:11333:94;;;;1526:24:97;;;;2657:4:48;1526:24:97;;798:35;1526:24;;2657:4:48;1526:24:97;;;;;;;-1:-1:-1;1526:24:97;;;701:863;1293:11333:94;;232:1:97;1293:11333:94;;;;;;;;;;;;232:1:97;;;;;;1293:11333:94;;;:::i;1526:24:97:-;232:1;1526:24;;;1293:11333:94;1526:24:97;;;-1:-1:-1;1526:24:97;;;;;;:::i;:::-;;;;;1451:39;-1:-1:-1;1451:39:97;;;;;;;;;;;;;;:::i;:::-;;;;;1383;;;;;;-1:-1:-1;1383:39:97;;;;;;:::i;:::-;;;;1033:109;1293:11333:94;;;;1107:26:97;;1124:8;;-1:-1:-1;1293:11333:94;;1107:26:97;1293:11333:94;1124:8:97;;1293:11333:94;;-1:-1:-1;1293:11333:94;;;;1107:26:97;;;;;;;;;:::i;:::-;1293:11333:94;1097:37:97;;1033:109;;866:35;;;1293:11333:94;866:35:97;;1293:11333:94;866:35:97;;;;;;2657:4:48;866:35:97;;;:::i;:::-;;;2657:4:48;;;;;;866:35:97;;;;;;;-1:-1:-1;866:35:97;;798;;1293:11333:94;798:35:97;;1293:11333:94;798:35:97;;;;;;2657:4:48;798:35:97;;;:::i;:::-;;;2657:4:48;;;;;;798:35:97;;;;;;-1:-1:-1;798:35:97;;1546:1263:15;1293:11333:94;1664:10:15;;;;1293:11333:94;;1970:8:15;;;;;;:20;;;1546:1263;1966:34;;2026:9;;;;:::i;:::-;232:1:97;2038::15;232::97;;;;;;;2234::15;2229:6;;;:18;;;1546:1263;2225:38;;232:1:97;2277:20:15;;;:46;;;1546:1263;2273:82;;2455:7;;;;;;2493;;;;;2528:11;2493:7;;:::i;:::-;2528:11;:::i;:::-;2557:8;;;2553:24;;2600:9;;;;:::i;:::-;1042:78;232:1:97;;;;;;;2451:352:15;1546:1263::o;2553:24::-;2567:10;;;:::o;2451:352::-;2630:173;;;;;;;;2451:352;;;;;1546:1263::o;2630:173::-;2672:7;;;;;;2707:11;2672:7;;;:::i;2707:11::-;2736:8;;;2732:24;;2779:9;;;;:::i;:::-;2038:1;232::97;;;;;;;2630:173:15;;;;;;;2273:82;232:1:97;;;;2332:23:15;232:1:97;;;;2332:23:15;;:::i;2277:46::-;232:1:97;;;2301:22:15;;2277:46;;2225:38;2256:7;;;;;;;;;:::i;2229:18::-;2239:8;;;;2229:18;;1966:34;1992:8;;;;;;:::o;1970:20::-;1982:8;;;;;1970:20;;1293:11333:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9371:159:15;1293:11333:94;;9371:159:15;1293:11333:94;;9371:159:15;;131:42:18;9371:159:15;;;1293:11333:94:o","linkReferences":{}},"methodIdentifiers":{"IS_TEST()":"fa7626d4","excludeArtifacts()":"b5508aa9","excludeContracts()":"e20c9f71","excludeSelectors()":"b0464fdc","excludeSenders()":"1ed7831c","failed()":"ba414fa6","payloadImp()":"1d20f132","setUp()":"0a9254e4","targetArtifactSelectors()":"66d9a9a0","targetArtifacts()":"85226c81","targetContracts()":"3f7286f4","targetInterfaces()":"2ade3880","targetSelectors()":"916a17c6","targetSenders()":"3e5e3c23","test_fromConfigUpdate(bytes32)":"6be9a365","test_fromDigest(bytes32)":"50018325","test_fromMessage(bytes)":"25dac3ef","test_fromPackedCalls((address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256)":"c38f7d07","test_fromPackedCalls_2bytes((address,uint256,bytes,uint256,bool,bool,uint256))":"4acfe6cb","test_fromPackedCalls_self((address,uint256,bytes,uint256,bool,bool,uint256))":"a8f23214","test_hashFor_invalidPayload(uint8)":"a474ffa8","test_hashFor_kindConfigUpdate(bytes32,address[],address)":"5651d1a1","test_hashFor_kindMessage(bytes,address[],address)":"0608b5c5","test_hashFor_kindMessage_as_digest(bytes,address[],address)":"e40a11fb","test_hashFor_kindTransactions((address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,address[],address)":"fbc99777","test_hashFor_kindTransactions(address,uint256,bytes,uint256,bool,bool,uint256,uint256,uint256,address[],address)":"5f2f2db6","test_hash_kindConfigUpdate(bytes32,address[])":"f72bf8a5","test_hash_kindMessage(bytes,address[])":"80e03978","test_hash_kindMessage_as_digest(bytes,address[])":"36a66f13","test_hash_kindTransactions(address,uint256,bytes,uint256,bool,bool,uint256,uint256,uint256,address[])":"1196bf22"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"}],\"name\":\"InvalidKind\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"IS_TEST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"excludedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"payloadImp\",\"outputs\":[{\"internalType\":\"contract PayloadImp\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setUp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifactSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"artifact\",\"type\":\"string\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzArtifactSelector[]\",\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"targetedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetInterfaces\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"artifacts\",\"type\":\"string[]\"}],\"internalType\":\"struct StdInvariant.FuzzInterface[]\",\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_imageHash\",\"type\":\"bytes32\"}],\"name\":\"test_fromConfigUpdate\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_digest\",\"type\":\"bytes32\"}],\"name\":\"test_fromDigest\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"}],\"name\":\"test_fromMessage\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"_calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"_space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"}],\"name\":\"test_fromPackedCalls\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call\",\"name\":\"_call\",\"type\":\"tuple\"}],\"name\":\"test_fromPackedCalls_2bytes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call\",\"name\":\"_call\",\"type\":\"tuple\"}],\"name\":\"test_fromPackedCalls_self\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_kind\",\"type\":\"uint8\"}],\"name\":\"test_hashFor_invalidPayload\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"_parents\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"_wallet\",\"type\":\"address\"}],\"name\":\"test_hashFor_kindConfigUpdate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address[]\",\"name\":\"_parents\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"_wallet\",\"type\":\"address\"}],\"name\":\"test_hashFor_kindMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address[]\",\"name\":\"_parents\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"_wallet\",\"type\":\"address\"}],\"name\":\"test_hashFor_kindMessage_as_digest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"_onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"_behaviorOnError\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"_parents\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"_wallet\",\"type\":\"address\"}],\"name\":\"test_hashFor_kindTransactions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"_calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"_space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"_parents\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"_wallet\",\"type\":\"address\"}],\"name\":\"test_hashFor_kindTransactions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"_parents\",\"type\":\"address[]\"}],\"name\":\"test_hash_kindConfigUpdate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address[]\",\"name\":\"_parents\",\"type\":\"address[]\"}],\"name\":\"test_hash_kindMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"address[]\",\"name\":\"_parents\",\"type\":\"address[]\"}],\"name\":\"test_hash_kindMessage_as_digest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"_onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"_behaviorOnError\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_nonce\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"_parents\",\"type\":\"address[]\"}],\"name\":\"test_hash_kindTransactions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"InvalidKind(uint8)\":[{\"notice\":\"Error thrown when the kind is invalid\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/modules/Payload.t.sol\":\"PayloadTest\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"test/modules/Payload.t.sol\":{\"keccak256\":\"0xcd896e0be4c1afaf7116aa3b9ed47c3bda9a53d8e004ef356b4f0edca97ea6d0\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4a1bcda2f7b1bac77b9b8d49a49dc70bee86e9bb23ee072b0718b8f7f7a02795\",\"dweb:/ipfs/QmaBG9nQkH8apNinv5sCo31E7a53NDc84rDYWa9cKAhUbG\"]},\"test/utils/PrimitivesRPC.sol\":{\"keccak256\":\"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe\",\"dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv\"]},\"test/utils/TestUtils.sol\":{\"keccak256\":\"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad\",\"dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint8","name":"kind","type":"uint8"}],"type":"error","name":"InvalidKind"},{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log","anonymous":false},{"inputs":[{"internalType":"address","name":"","type":"address","indexed":false}],"type":"event","name":"log_address","anonymous":false},{"inputs":[{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"log_bytes","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32","indexed":false}],"type":"event","name":"log_bytes32","anonymous":false},{"inputs":[{"internalType":"int256","name":"","type":"int256","indexed":false}],"type":"event","name":"log_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address","name":"val","type":"address","indexed":false}],"type":"event","name":"log_named_address","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes","name":"val","type":"bytes","indexed":false}],"type":"event","name":"log_named_bytes","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes32","name":"val","type":"bytes32","indexed":false}],"type":"event","name":"log_named_bytes32","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false}],"type":"event","name":"log_named_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"string","name":"val","type":"string","indexed":false}],"type":"event","name":"log_named_string","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false}],"type":"event","name":"log_named_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log_string","anonymous":false},{"inputs":[{"internalType":"uint256","name":"","type":"uint256","indexed":false}],"type":"event","name":"log_uint","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"logs","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"IS_TEST","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeArtifacts","outputs":[{"internalType":"string[]","name":"excludedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeContracts","outputs":[{"internalType":"address[]","name":"excludedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"excludedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSenders","outputs":[{"internalType":"address[]","name":"excludedSenders_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"failed","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"payloadImp","outputs":[{"internalType":"contract PayloadImp","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"setUp"},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifactSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzArtifactSelector[]","name":"targetedArtifactSelectors_","type":"tuple[]","components":[{"internalType":"string","name":"artifact","type":"string"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifacts","outputs":[{"internalType":"string[]","name":"targetedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetContracts","outputs":[{"internalType":"address[]","name":"targetedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetInterfaces","outputs":[{"internalType":"struct StdInvariant.FuzzInterface[]","name":"targetedInterfaces_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"string[]","name":"artifacts","type":"string[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"targetedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSenders","outputs":[{"internalType":"address[]","name":"targetedSenders_","type":"address[]"}]},{"inputs":[{"internalType":"bytes32","name":"_imageHash","type":"bytes32"}],"stateMutability":"view","type":"function","name":"test_fromConfigUpdate"},{"inputs":[{"internalType":"bytes32","name":"_digest","type":"bytes32"}],"stateMutability":"view","type":"function","name":"test_fromDigest"},{"inputs":[{"internalType":"bytes","name":"_message","type":"bytes"}],"stateMutability":"view","type":"function","name":"test_fromMessage"},{"inputs":[{"internalType":"struct Payload.Call[]","name":"_calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"_space","type":"uint256"},{"internalType":"uint256","name":"_nonce","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"test_fromPackedCalls"},{"inputs":[{"internalType":"struct Payload.Call","name":"_call","type":"tuple","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"test_fromPackedCalls_2bytes"},{"inputs":[{"internalType":"struct Payload.Call","name":"_call","type":"tuple","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"test_fromPackedCalls_self"},{"inputs":[{"internalType":"uint8","name":"_kind","type":"uint8"}],"stateMutability":"nonpayable","type":"function","name":"test_hashFor_invalidPayload"},{"inputs":[{"internalType":"bytes32","name":"_imageHash","type":"bytes32"},{"internalType":"address[]","name":"_parents","type":"address[]"},{"internalType":"address","name":"_wallet","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"test_hashFor_kindConfigUpdate"},{"inputs":[{"internalType":"bytes","name":"_message","type":"bytes"},{"internalType":"address[]","name":"_parents","type":"address[]"},{"internalType":"address","name":"_wallet","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"test_hashFor_kindMessage"},{"inputs":[{"internalType":"bytes","name":"_message","type":"bytes"},{"internalType":"address[]","name":"_parents","type":"address[]"},{"internalType":"address","name":"_wallet","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"test_hashFor_kindMessage_as_digest"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"uint256","name":"_gasLimit","type":"uint256"},{"internalType":"bool","name":"_delegateCall","type":"bool"},{"internalType":"bool","name":"_onlyFallback","type":"bool"},{"internalType":"uint256","name":"_behaviorOnError","type":"uint256"},{"internalType":"uint256","name":"_space","type":"uint256"},{"internalType":"uint256","name":"_nonce","type":"uint256"},{"internalType":"address[]","name":"_parents","type":"address[]"},{"internalType":"address","name":"_wallet","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"test_hashFor_kindTransactions"},{"inputs":[{"internalType":"struct Payload.Call[]","name":"_calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"_space","type":"uint256"},{"internalType":"uint256","name":"_nonce","type":"uint256"},{"internalType":"address[]","name":"_parents","type":"address[]"},{"internalType":"address","name":"_wallet","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"test_hashFor_kindTransactions"},{"inputs":[{"internalType":"bytes32","name":"_imageHash","type":"bytes32"},{"internalType":"address[]","name":"_parents","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"test_hash_kindConfigUpdate"},{"inputs":[{"internalType":"bytes","name":"_message","type":"bytes"},{"internalType":"address[]","name":"_parents","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"test_hash_kindMessage"},{"inputs":[{"internalType":"bytes","name":"_message","type":"bytes"},{"internalType":"address[]","name":"_parents","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"test_hash_kindMessage_as_digest"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"uint256","name":"_gasLimit","type":"uint256"},{"internalType":"bool","name":"_delegateCall","type":"bool"},{"internalType":"bool","name":"_onlyFallback","type":"bool"},{"internalType":"uint256","name":"_behaviorOnError","type":"uint256"},{"internalType":"uint256","name":"_space","type":"uint256"},{"internalType":"uint256","name":"_nonce","type":"uint256"},{"internalType":"address[]","name":"_parents","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"test_hash_kindTransactions"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/modules/Payload.t.sol":"PayloadTest"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"test/modules/Payload.t.sol":{"keccak256":"0xcd896e0be4c1afaf7116aa3b9ed47c3bda9a53d8e004ef356b4f0edca97ea6d0","urls":["bzz-raw://4a1bcda2f7b1bac77b9b8d49a49dc70bee86e9bb23ee072b0718b8f7f7a02795","dweb:/ipfs/QmaBG9nQkH8apNinv5sCo31E7a53NDc84rDYWa9cKAhUbG"],"license":"Apache-2.0"},"test/utils/PrimitivesRPC.sol":{"keccak256":"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe","urls":["bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe","dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv"],"license":"Apache-2.0"},"test/utils/TestUtils.sol":{"keccak256":"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79","urls":["bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad","dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa"],"license":"Apache-2.0"}},"version":1},"id":94} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Permission.sol/LibPermission.json b/contracts/artifacts/wallet-contracts-v3/Permission.sol/LibPermission.json new file mode 100644 index 00000000..7c026adf --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Permission.sol/LibPermission.json @@ -0,0 +1 @@ +{"abi":[{"type":"error","name":"RulesLengthExceedsMax","inputs":[]}],"bytecode":{"object":"0x60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea2646970667358221220ed69a1c128dc195d77260f16a3031cc2bf940b85d7adf824f3e2c8149e3b202864736f6c634300081c0033","sourceMap":"1326:2532:38:-:0;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x600080fdfea2646970667358221220ed69a1c128dc195d77260f16a3031cc2bf940b85d7adf824f3e2c8149e3b202864736f6c634300081c0033","sourceMap":"1326:2532:38:-:0;;","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"RulesLengthExceedsMax\",\"type\":\"error\"}],\"devdoc\":{\"author\":\"Michael Standen\",\"kind\":\"dev\",\"methods\":{},\"title\":\"LibPermission\",\"version\":1},\"userdoc\":{\"errors\":{\"RulesLengthExceedsMax()\":[{\"notice\":\"Error thrown when the rules length exceeds the maximum\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Library for permission management\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/extensions/sessions/explicit/Permission.sol\":\"LibPermission\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/extensions/sessions/explicit/Permission.sol\":{\"keccak256\":\"0x0bc35a04da3830c64ec13c32b57f88be6b980228f6b387e800cf70919cdcfb16\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://fcb304612f894699f8e1e40cf134abebe8f7135795bea479b04e967551c59948\",\"dweb:/ipfs/Qme4mD8dh3xU9wbscQwvL4cQcZ2Wv8Fobo2fmU29B3DirV\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[],"type":"error","name":"RulesLengthExceedsMax"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/extensions/sessions/explicit/Permission.sol":"LibPermission"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/extensions/sessions/explicit/Permission.sol":{"keccak256":"0x0bc35a04da3830c64ec13c32b57f88be6b980228f6b387e800cf70919cdcfb16","urls":["bzz-raw://fcb304612f894699f8e1e40cf134abebe8f7135795bea479b04e967551c59948","dweb:/ipfs/Qme4mD8dh3xU9wbscQwvL4cQcZ2Wv8Fobo2fmU29B3DirV"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"}},"version":1},"id":38} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Permission.t.sol/LibPermissionHarness.json b/contracts/artifacts/wallet-contracts-v3/Permission.t.sol/LibPermissionHarness.json new file mode 100644 index 00000000..c3367d50 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Permission.t.sol/LibPermissionHarness.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"readPermission","inputs":[{"name":"encoded","type":"bytes","internalType":"bytes"},{"name":"pointer","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"tuple","internalType":"struct Permission","components":[{"name":"target","type":"address","internalType":"address"},{"name":"rules","type":"tuple[]","internalType":"struct ParameterRule[]","components":[{"name":"cumulative","type":"bool","internalType":"bool"},{"name":"operation","type":"uint8","internalType":"enum ParameterOperation"},{"name":"value","type":"bytes32","internalType":"bytes32"},{"name":"offset","type":"uint256","internalType":"uint256"},{"name":"mask","type":"bytes32","internalType":"bytes32"}]}]},{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"toPacked","inputs":[{"name":"permission","type":"tuple","internalType":"struct Permission","components":[{"name":"target","type":"address","internalType":"address"},{"name":"rules","type":"tuple[]","internalType":"struct ParameterRule[]","components":[{"name":"cumulative","type":"bool","internalType":"bool"},{"name":"operation","type":"uint8","internalType":"enum ParameterOperation"},{"name":"value","type":"bytes32","internalType":"bytes32"},{"name":"offset","type":"uint256","internalType":"uint256"},{"name":"mask","type":"bytes32","internalType":"bytes32"}]}]}],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"pure"},{"type":"error","name":"RulesLengthExceedsMax","inputs":[]}],"bytecode":{"object":"0x6080806040523460155761073a908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c8063444bc036146103135763b95579091461003257600080fd5b346102635760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102635760043567ffffffffffffffff8111610263578060040160407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8336030112610263576024600092019160ff6100b684846106b0565b9050116102eb5781359073ffffffffffffffffffffffffffffffffffffffff821682036102e857507fff0000000000000000000000000000000000000000000000000000000000000061010984846106b0565b90507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006040519360601b16602084015260f81b16603482015260158152610151603582610618565b916000925b61016082846106b0565b90508410156102975761017382846106b0565b8510156102685760a0850201602081013560048110156102635760008235801515810361025f576102209361024e938360209360019895506000146102565750608087925b6040519260fe60ff8786019616918b1b161760f81b8452604081013560218401526060810135604184015201356061820152606181526101f9608182610618565b6040519584610211889651809287808a0191016105f5565b850191518093858401906105f5565b0101037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610618565b930192610156565b608090926101b8565b5080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6040601f917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08251938492602084526102df81518092816020880152602088880191016105f5565b01168101030190f35b80fd5b807f6cfebfc60000000000000000000000000000000000000000000000000000000060049252fd5b346102635760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102635760043567ffffffffffffffff8111610263573660238201121561026357806004013567ffffffffffffffff8111610263576024369183010111610263576024359061038b610659565b50610394610659565b9160156038838301602481013560601c8652013560f81c9101906103b781610684565b926103c56040519485610618565b8184527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06103f283610684565b0160005b81811061057957505090602085019384526000915b8183106104eb57505050604051916040835273ffffffffffffffffffffffffffffffffffffffff6080840194511660408401525190604060608401528151809452602060a0840192016000945b80861061046d57505082935060208301520390f35b9092835180511515825260208101519060048210156104bc5782608060a09260209485600197015260408101516040840152606081015160608401520151608082015201940195019490610458565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b90919281810193602485013560018160f81c16151561050b83895161069c565b515260f91c9160048310156104bc57600192602061052a848a5161069c565b5101526025860135604061053f848a5161069c565b51015260458601356060610554848a5161069c565b510152606560616080610568858b5161069c565b51019201960135905201919061040b565b6040519060a082019180831067ffffffffffffffff8411176105c65760209260405260008152600083820152600060408201526000606082015260006080820152828289010152016103f6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60005b8381106106085750506000910152565b81810151838201526020016105f8565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176105c657604052565b604051906040820182811067ffffffffffffffff8211176105c6576040526060602083600081520152565b67ffffffffffffffff81116105c65760051b60200190565b80518210156102685760209160051b010190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610263570180359067ffffffffffffffff8211610263576020019160a08202360383136102635756fea2646970667358221220b9aa5936ef19d229c4f84b11ef27380a7c5064bd28c38e6358834e78ea9fe7d264736f6c634300081c0033","sourceMap":"240:365:79:-:0;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436101561001257600080fd5b60003560e01c8063444bc036146103135763b95579091461003257600080fd5b346102635760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102635760043567ffffffffffffffff8111610263578060040160407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8336030112610263576024600092019160ff6100b684846106b0565b9050116102eb5781359073ffffffffffffffffffffffffffffffffffffffff821682036102e857507fff0000000000000000000000000000000000000000000000000000000000000061010984846106b0565b90507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006040519360601b16602084015260f81b16603482015260158152610151603582610618565b916000925b61016082846106b0565b90508410156102975761017382846106b0565b8510156102685760a0850201602081013560048110156102635760008235801515810361025f576102209361024e938360209360019895506000146102565750608087925b6040519260fe60ff8786019616918b1b161760f81b8452604081013560218401526060810135604184015201356061820152606181526101f9608182610618565b6040519584610211889651809287808a0191016105f5565b850191518093858401906105f5565b0101037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610618565b930192610156565b608090926101b8565b5080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6040601f917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08251938492602084526102df81518092816020880152602088880191016105f5565b01168101030190f35b80fd5b807f6cfebfc60000000000000000000000000000000000000000000000000000000060049252fd5b346102635760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102635760043567ffffffffffffffff8111610263573660238201121561026357806004013567ffffffffffffffff8111610263576024369183010111610263576024359061038b610659565b50610394610659565b9160156038838301602481013560601c8652013560f81c9101906103b781610684565b926103c56040519485610618565b8184527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06103f283610684565b0160005b81811061057957505090602085019384526000915b8183106104eb57505050604051916040835273ffffffffffffffffffffffffffffffffffffffff6080840194511660408401525190604060608401528151809452602060a0840192016000945b80861061046d57505082935060208301520390f35b9092835180511515825260208101519060048210156104bc5782608060a09260209485600197015260408101516040840152606081015160608401520151608082015201940195019490610458565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b90919281810193602485013560018160f81c16151561050b83895161069c565b515260f91c9160048310156104bc57600192602061052a848a5161069c565b5101526025860135604061053f848a5161069c565b51015260458601356060610554848a5161069c565b510152606560616080610568858b5161069c565b51019201960135905201919061040b565b6040519060a082019180831067ffffffffffffffff8411176105c65760209260405260008152600083820152600060408201526000606082015260006080820152828289010152016103f6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60005b8381106106085750506000910152565b81810151838201526020016105f8565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176105c657604052565b604051906040820182811067ffffffffffffffff8211176105c6576040526060602083600081520152565b67ffffffffffffffff81116105c65760051b60200190565b80518210156102685760209160051b010190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610263570180359067ffffffffffffffff8211610263576020019160a08202360383136102635756fea2646970667358221220b9aa5936ef19d229c4f84b11ef27380a7c5064bd28c38e6358834e78ea9fe7d264736f6c634300081c0033","sourceMap":"240:365:79:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3015:16:38;240:365:79;3015:16:38;;;240:365:79;3015:16:38;;;;:::i;:::-;:41;;;3011:92;;240:365:79;;;;;;;;;;3159:16:38;240:365:79;3159:16:38;;;;:::i;:::-;240:365:79;;;;;;;;;;3117:67:38;;240:365:79;;;;;;;;3117:67:38;;;;;;;:::i;:::-;3195:13;240:365:79;3190:137:38;3239:3;3214:16;;;;:::i;:::-;3210:27;;;;;;;3299:16;;;;:::i;:::-;240:365:79;;;;;;;;;;3714:14:38;;240:365:79;;;;;;;;;;;;;;;;;;3739:23:38;3261:59;3739:23;;240:365:79;3739:23:38;240:365:79;3739:23:38;;;;;;;;3840:9;3739:23;;;240:365:79;;3777:73:38;240:365:79;;3777:73:38;;;240:365:79;;;;;;;;;;;;3815:10:38;;240:365:79;;;;;;3827:11:38;;240:365:79;;;;;3840:9:38;240:365:79;;;;;;3777:73:38;;;;;;:::i;:::-;240:365:79;;;;;;;;3261:59:38;;;;;;240:365:79;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;3261:59:38;3117:67;3261:59;;;;;;:::i;:::-;3239:3;240:365:79;3195:13:38;;;3739:23;3840:9;3739:23;;;;240:365:79;;;;;;;;;;;;;;;3015:16:38;240:365:79;;3210:27:38;240:365:79;;3210:27:38;3117:67;240:365:79;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;3011:92:38;3073:23;;240:365:79;3073:23:38;;;240:365:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;3281:184:68;798:135;;3281:184;;;240:365:79;3281:184:68;;;;;240:365:79;;798:135:68;;;;;;240:365:79;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;2071:16:38;;;240:365:79;2071:16:38;;:51;;;240:365:79;2128:579:38;2148:15;;;;;;240:365:79;;;;;;;;;;;;;;;;;;;;;;;3281:184:68;240:365:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3281:184:68;240:365:79;;;3281:184:68;240:365:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;2165:3:38;798:135:68;;;;;;;240:365:79;798:135:68;;;240:365:79;798:135:68;;;2337:23:38;:28;;2304:19;:16;;;:19;:::i;:::-;;240:365:79;;;;;;;;;;;2398:16:38;240:365:79;2398:19:38;:16;;;:19;:::i;:::-;;:29;240:365:79;3047:107:68;;;;240:365:79;2484:19:38;:16;;;:19;:::i;:::-;;:25;240:365:79;3047:107:68;;;;3281:184;2559:19:38;:16;;;:19;:::i;:::-;;:26;240:365:79;3047:107:68;;240:365:79;2635:19:38;:16;;;:19;:::i;:::-;;:24;3047:107:68;;;;;240:365:79;;;2133:13:38;;;;240:365:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3281:184:68;240:365:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;240:365:79;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;240:365:79;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o","linkReferences":{}},"methodIdentifiers":{"readPermission(bytes,uint256)":"444bc036","toPacked((address,(bool,uint8,bytes32,uint256,bytes32)[]))":"b9557909"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"RulesLengthExceedsMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"encoded\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"pointer\",\"type\":\"uint256\"}],\"name\":\"readPermission\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"cumulative\",\"type\":\"bool\"},{\"internalType\":\"enum ParameterOperation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"offset\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"mask\",\"type\":\"bytes32\"}],\"internalType\":\"struct ParameterRule[]\",\"name\":\"rules\",\"type\":\"tuple[]\"}],\"internalType\":\"struct Permission\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"cumulative\",\"type\":\"bool\"},{\"internalType\":\"enum ParameterOperation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"offset\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"mask\",\"type\":\"bytes32\"}],\"internalType\":\"struct ParameterRule[]\",\"name\":\"rules\",\"type\":\"tuple[]\"}],\"internalType\":\"struct Permission\",\"name\":\"permission\",\"type\":\"tuple\"}],\"name\":\"toPacked\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"RulesLengthExceedsMax()\":[{\"notice\":\"Error thrown when the rules length exceeds the maximum\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/extensions/sessions/Permission.t.sol\":\"LibPermissionHarness\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/extensions/sessions/explicit/Permission.sol\":{\"keccak256\":\"0x0bc35a04da3830c64ec13c32b57f88be6b980228f6b387e800cf70919cdcfb16\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://fcb304612f894699f8e1e40cf134abebe8f7135795bea479b04e967551c59948\",\"dweb:/ipfs/Qme4mD8dh3xU9wbscQwvL4cQcZ2Wv8Fobo2fmU29B3DirV\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"test/extensions/sessions/Permission.t.sol\":{\"keccak256\":\"0x7ccef7cdcb2a837467d0eefdfbe335f1879724e9887b1b36158e623db9621780\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://74abf3da86aee7372b25798f7daeafe408bd532a12e520633bd2b022185ed7be\",\"dweb:/ipfs/QmRzaBN15AzhYNLipoVQU39tMEd58GBF5V5C5eCZDekpXE\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[],"type":"error","name":"RulesLengthExceedsMax"},{"inputs":[{"internalType":"bytes","name":"encoded","type":"bytes"},{"internalType":"uint256","name":"pointer","type":"uint256"}],"stateMutability":"pure","type":"function","name":"readPermission","outputs":[{"internalType":"struct Permission","name":"","type":"tuple","components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"struct ParameterRule[]","name":"rules","type":"tuple[]","components":[{"internalType":"bool","name":"cumulative","type":"bool"},{"internalType":"enum ParameterOperation","name":"operation","type":"uint8"},{"internalType":"bytes32","name":"value","type":"bytes32"},{"internalType":"uint256","name":"offset","type":"uint256"},{"internalType":"bytes32","name":"mask","type":"bytes32"}]}]},{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"struct Permission","name":"permission","type":"tuple","components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"struct ParameterRule[]","name":"rules","type":"tuple[]","components":[{"internalType":"bool","name":"cumulative","type":"bool"},{"internalType":"enum ParameterOperation","name":"operation","type":"uint8"},{"internalType":"bytes32","name":"value","type":"bytes32"},{"internalType":"uint256","name":"offset","type":"uint256"},{"internalType":"bytes32","name":"mask","type":"bytes32"}]}]}],"stateMutability":"pure","type":"function","name":"toPacked","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/extensions/sessions/Permission.t.sol":"LibPermissionHarness"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/extensions/sessions/explicit/Permission.sol":{"keccak256":"0x0bc35a04da3830c64ec13c32b57f88be6b980228f6b387e800cf70919cdcfb16","urls":["bzz-raw://fcb304612f894699f8e1e40cf134abebe8f7135795bea479b04e967551c59948","dweb:/ipfs/Qme4mD8dh3xU9wbscQwvL4cQcZ2Wv8Fobo2fmU29B3DirV"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"test/extensions/sessions/Permission.t.sol":{"keccak256":"0x7ccef7cdcb2a837467d0eefdfbe335f1879724e9887b1b36158e623db9621780","urls":["bzz-raw://74abf3da86aee7372b25798f7daeafe408bd532a12e520633bd2b022185ed7be","dweb:/ipfs/QmRzaBN15AzhYNLipoVQU39tMEd58GBF5V5C5eCZDekpXE"],"license":"Apache-2.0"}},"version":1},"id":79} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Permission.t.sol/PermissionTest.json b/contracts/artifacts/wallet-contracts-v3/Permission.t.sol/PermissionTest.json new file mode 100644 index 00000000..f46ef585 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Permission.t.sol/PermissionTest.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"excludeArtifacts","inputs":[],"outputs":[{"name":"excludedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"excludeContracts","inputs":[],"outputs":[{"name":"excludedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"excludeSelectors","inputs":[],"outputs":[{"name":"excludedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"excludeSenders","inputs":[],"outputs":[{"name":"excludedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"setUp","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"targetArtifactSelectors","inputs":[],"outputs":[{"name":"targetedArtifactSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzArtifactSelector[]","components":[{"name":"artifact","type":"string","internalType":"string"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetArtifacts","inputs":[],"outputs":[{"name":"targetedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"targetContracts","inputs":[],"outputs":[{"name":"targetedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"targetInterfaces","inputs":[],"outputs":[{"name":"targetedInterfaces_","type":"tuple[]","internalType":"struct StdInvariant.FuzzInterface[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"artifacts","type":"string[]","internalType":"string[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSelectors","inputs":[],"outputs":[{"name":"targetedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSenders","inputs":[],"outputs":[{"name":"targetedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"test_fail_packRulesLengthExceedsMax","inputs":[{"name":"input","type":"tuple","internalType":"struct PermissionTest.PermissionTestInput","components":[{"name":"target","type":"address","internalType":"address"},{"name":"rules","type":"tuple[]","internalType":"struct PermissionTest.ParameterRuleTestInput[]","components":[{"name":"cumulative","type":"bool","internalType":"bool"},{"name":"operation","type":"uint8","internalType":"uint8"},{"name":"value","type":"bytes32","internalType":"bytes32"},{"name":"offset","type":"uint256","internalType":"uint256"},{"name":"mask","type":"bytes32","internalType":"bytes32"}]}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_packAndRead","inputs":[{"name":"input","type":"tuple","internalType":"struct PermissionTest.PermissionTestInput","components":[{"name":"target","type":"address","internalType":"address"},{"name":"rules","type":"tuple[]","internalType":"struct PermissionTest.ParameterRuleTestInput[]","components":[{"name":"cumulative","type":"bool","internalType":"bool"},{"name":"operation","type":"uint8","internalType":"uint8"},{"name":"value","type":"bytes32","internalType":"bytes32"},{"name":"offset","type":"uint256","internalType":"uint256"},{"name":"mask","type":"bytes32","internalType":"bytes32"}]}]}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_packAndReadAtPointer","inputs":[{"name":"input","type":"tuple","internalType":"struct PermissionTest.PermissionTestInput","components":[{"name":"target","type":"address","internalType":"address"},{"name":"rules","type":"tuple[]","internalType":"struct PermissionTest.ParameterRuleTestInput[]","components":[{"name":"cumulative","type":"bool","internalType":"bool"},{"name":"operation","type":"uint8","internalType":"uint8"},{"name":"value","type":"bytes32","internalType":"bytes32"},{"name":"offset","type":"uint256","internalType":"uint256"},{"name":"mask","type":"bytes32","internalType":"bytes32"}]}]},{"name":"prepend","type":"bytes","internalType":"bytes"},{"name":"append","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"event","name":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false}],"bytecode":{"object":"0x60808060405234602f57600160ff19600c541617600c55600160ff19601f541617601f5561302090816100358239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c80630a9254e4146101175780631890507d146101125780631ed7831c1461010d5780632ade3880146101085780633e5e3c23146101035780633f7286f4146100fe57806366d9a9a0146100f957806374b8294a146100f457806385226c81146100ef578063916a17c6146100ea578063b0464fdc146100e5578063b5508aa9146100e0578063ba414fa6146100db578063c154a026146100d6578063e20c9f71146100d15763fa7626d4146100cc57600080fd5b6117f2565b611747565b61156c565b611529565b61147e565b6113a5565b6112cc565b61117c565b610dba565b610c6f565b610ad0565b610a25565b61094c565b61070f565b610422565b61012c565b600091031261012757565b600080fd5b346101275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101275760405161075580820182811067ffffffffffffffff8211176101d8578291612896833903906000f080156101d3577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00601f549260081b16911617601f55600080f35b611833565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff8211176101d857604052565b60a0810190811067ffffffffffffffff8211176101d857604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176101d857604052565b6040519061028f60a08361023f565b565b6040519061028f60408361023f565b73ffffffffffffffffffffffffffffffffffffffff81160361012757565b67ffffffffffffffff81116101d85760051b60200190565b8015150361012757565b9190604083820312610127576040516102f881610207565b80938035610305816102a0565b825260208101359067ffffffffffffffff8211610127570182601f8201121561012757803590610334826102be565b93610342604051958661023f565b828552602060a081870194028301019181831161012757602001925b82841061036f575050505060200152565b60a084830312610127576040519061038682610223565b8435610391816102d6565b825260208501359060ff8216820361012757826020928360a095015260408701356040820152606087013560608201526080870135608082015281520193019261035e565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112610127576004359067ffffffffffffffff82116101275761041f916004016102e0565b90565b3461012757610430366103d6565b602081015151151590737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610127576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529115156004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156101d3576104b5926106aa575b50612257565b6020810160ff8151511115610616575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610127576040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f6cfebfc60000000000000000000000000000000000000000000000000000000060048201529060008260248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156101d3576105ce926000926105fc575b50601f5461059a9060081c73ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff1690565b60405180809581947fb955790900000000000000000000000000000000000000000000000000000000835260048301611a32565b03915afa80156101d3576105de57005b6105fa903d806000833e6105f2818361023f565b81019061199a565b005b8061060a846106109361023f565b8061011c565b3861055f565b906101006106238161188e565b9160005b8451805182101561065c579061063f8160019361191e565b5161064a828761191e565b52610655818661191e565b5001610627565b505092908151515b81811061067457505052386104c5565b60019061068d8451610687815184611961565b9061191e565b51610698828761191e565b526106a3818661191e565b5001610664565b8061060a60006106b99361023f565b386104af565b602060408183019282815284518094520192019060005b8181106106e35750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016106d6565b346101275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101275760405180602060165491828152019060166000527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b51242899060005b81811061079e5761079a8561078e8187038261023f565b604051918291826106bf565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610777565b60005b8381106107dd5750506000910152565b81810151838201526020016107cd565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093610829815180928187528780880191016107ca565b0116010190565b9080602083519182815201916020808360051b8301019401926000915b83831061085c57505050505090565b9091929394602080610898837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0866001960301875289516107ed565b9701930193019193929061084d565b602081016020825282518091526040820191602060408360051b8301019401926000915b8383106108da57505050505090565b909192939460208061093d837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190610830565b970193019301919392906108cb565b346101275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012757601e54610987816102be565b90610995604051928361023f565b80825260208201601e6000527f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e3506000915b8383106109db576040518061079a87826108a7565b600260206001926040516109ee81610207565b73ffffffffffffffffffffffffffffffffffffffff8654168152610a13858701611bd2565b838201528152019201920191906109c6565b346101275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101275760405180602060185491828152019060186000527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e9060005b818110610aa45761079a8561078e8187038261023f565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610a8d565b346101275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101275760405180602060175491828152019060176000527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c159060005b818110610b4f5761079a8561078e8187038261023f565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610b38565b906020808351928381520192019060005b818110610b995750505090565b82517fffffffff0000000000000000000000000000000000000000000000000000000016845260209384019390920191600101610b8c565b602081016020825282518091526040820191602060408360051b8301019401926000915b838310610c0457505050505090565b9091929394602080610c60837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0866001960301875289519083610c5083516040845260408401906107ed565b9201519084818403910152610b7b565b97019301930191939290610bf5565b346101275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012757601b54610caa816102be565b90610cb8604051928361023f565b80825260208201601b6000527f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc16000915b838310610cfe576040518061079a8782610bd1565b60026020600192604051610d1181610207565b610d1a86611ad0565b8152610d27858701611c2a565b83820152815201920192019190610ce9565b67ffffffffffffffff81116101d857601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b81601f8201121561012757803590610d8a82610d39565b92610d98604051948561023f565b8284526020838301011161012757816000926020809301838601378301015290565b346101275760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101275760043567ffffffffffffffff811161012757610e099036906004016102e0565b60243567ffffffffffffffff811161012757610e29903690600401610d73565b60443567ffffffffffffffff811161012757610e4c610e52913690600401610d73565b92612257565b9160208301928351805160ff8111611157575b5050601f54610e8c9060081c73ffffffffffffffffffffffffffffffffffffffff16610581565b90604051917fb955790900000000000000000000000000000000000000000000000000000000835260008380610ec58560048301611a32565b0381845afa9283156101d35760009361112c575b50610f0a600091610f36610f779596604051938491610f04610efe602085018d611fd5565b8b611fd5565b90611fd5565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810184528361023f565b610f3e611fec565b508651916040518096819482937f444bc0360000000000000000000000000000000000000000000000000000000084526004840161213d565b03915afa80156101d3576020946000936000926110f9575b5090610fa6610fee9495610fac9351905190611881565b90612499565b610fe8610fcd845173ffffffffffffffffffffffffffffffffffffffff1690565b915173ffffffffffffffffffffffffffffffffffffffff1690565b9061251b565b01610ffe81515183515190612499565b60005b8251518110156105fa578061103a61102661101f600194865161191e565b5151151590565b61103461101f84885161191e565b906125ab565b611081611054602061104d84875161191e565b5101612154565b61105d816119f9565b60ff80611070602061104d878b5161191e565b611079816119f9565b169116612499565b6110aa604061109183865161191e565b51015160406110a184885161191e565b51015190612626565b6110d360606110ba83865161191e565b51015160606110ca84885161191e565b51015190612499565b6110f360806110e383865161191e565b51015160806110a184885161191e565b01611001565b610fee9450610fac9250611122610fa6913d806000833e61111a818361023f565b810190612006565b9095509250610f8f565b610f779350600091610f3661114d610f0a933d8087833e6105f2818361023f565b9550509150610ed9565b611160906123bc565b815284523880610e65565b90602061041f928181520190610830565b346101275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012757601a546111b7816102be565b906111c5604051928361023f565b808252601a60009081527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b83831061120a576040518061079a878261116b565b60016020819261121985611ad0565b8152019201920191906111f5565b602081016020825282518091526040820191602060408360051b8301019401926000915b83831061125a57505050505090565b90919293946020806112bd837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190610b7b565b9701930193019193929061124b565b346101275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012757601d54611307816102be565b90611315604051928361023f565b80825260208201601d6000527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f6000915b83831061135b576040518061079a8782611227565b6002602060019260405161136e81610207565b73ffffffffffffffffffffffffffffffffffffffff8654168152611393858701611c2a565b83820152815201920192019190611346565b346101275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012757601c546113e0816102be565b906113ee604051928361023f565b80825260208201601c6000527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2116000915b838310611434576040518061079a8782611227565b6002602060019260405161144781610207565b73ffffffffffffffffffffffffffffffffffffffff865416815261146c858701611c2a565b8382015281520192019201919061141f565b346101275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610127576019546114b9816102be565b906114c7604051928361023f565b808252601960009081527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b83831061150c576040518061079a878261116b565b60016020819261151b85611ad0565b8152019201920191906114f7565b346101275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610127576020611562612170565b6040519015158152f35b346101275761158261157d366103d6565b612257565b60208101908151805160ff8111611733575b5050601f546115bb9060081c73ffffffffffffffffffffffffffffffffffffffff16610581565b604051907fb9557909000000000000000000000000000000000000000000000000000000008252600082806115f38660048301611a32565b0381845afa9182156101d357600092611716575b50611610611fec565b50600060405180927f444bc036000000000000000000000000000000000000000000000000000000008252818061164a8760048301612120565b03915afa9283156101d3576020936000926000916116ee575b50610fac9061167493945190612499565b0161168481515183515190612499565b60005b8251518110156105fa57806116a561102661101f600194865161191e565b6116b8611054602061104d84875161191e565b6116c8604061109183865161191e565b6116d860606110ba83865161191e565b6116e860806110e383865161191e565b01611687565b6116749350610fac915061170c903d806000833e61111a818361023f565b9093909150611663565b61172c9192503d806000833e6105f2818361023f565b9038611607565b61173c906123bc565b815282523880611594565b346101275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101275760405180602060155491828152019060156000527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4759060005b8181106117c65761079a8561078e8187038261023f565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016117af565b346101275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012757602060ff601f54166040519015158152f35b6040513d6000823e3d90fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b906001820180921161187c57565b61183f565b9190820180921161187c57565b90611898826102be565b6118a5604051918261023f565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06118d382946102be565b019060005b8281106118e457505050565b6020906040516118f381610223565b60008152600083820152600060408201526000606082015260006080820152828285010152016118d8565b80518210156119325760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b811561196b570690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6020818303126101275780519067ffffffffffffffff8211610127570181601f820112156101275780516119cd81610d39565b926119db604051948561023f565b818452602082840101116101275761041f91602080850191016107ca565b60041115611a0357565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b90602082526020608081606085019373ffffffffffffffffffffffffffffffffffffffff8151168287015201519360408082015284518094520192019060005b818110611a7f5750505090565b90919283518051151582526020810151906004821015611a035782608060a0926020948560019701526040810151604084015260608101516060840152015160808201520194019101919091611a72565b9060405191600081548060011c9260018216918215611bc8575b602085108314611b9b578487528693926020850192918115611b5f5750600114611b1d575b505061028f9250038361023f565b611b2e919250600052602060002090565b906000915b848310611b48575061028f9350013880611b0f565b805482840152869350602090920191600101611b33565b905061028f959293507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009150168252151560051b013880611b0f565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f1693611aea565b908154611bde816102be565b92611bec604051948561023f565b818452602084019060005260206000206000915b838310611c0d5750505050565b600160208192611c1c85611ad0565b815201920192019190611c00565b60405181548082529092918390611c4a6020830191600052602060002090565b926000905b806007830110611e575761028f945491818110611e1b575b818110611de4575b818110611dad575b818110611d76575b818110611d3f575b818110611d08575b818110611cd2575b10611ca5575b50038361023f565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260200138611c9d565b602083811b7fffffffff000000000000000000000000000000000000000000000000000000001685529093600191019301611c97565b604083901b7fffffffff00000000000000000000000000000000000000000000000000000000168452926001906020019301611c8f565b606083901b7fffffffff00000000000000000000000000000000000000000000000000000000168452926001906020019301611c87565b608083901b7fffffffff00000000000000000000000000000000000000000000000000000000168452926001906020019301611c7f565b60a083901b7fffffffff00000000000000000000000000000000000000000000000000000000168452926001906020019301611c77565b60c083901b7fffffffff00000000000000000000000000000000000000000000000000000000168452926001906020019301611c6f565b92602081611e4f6001938660e01b7fffffffff00000000000000000000000000000000000000000000000000000000169052565b019301611c67565b916008919350610100600191611fc78754611e96838260e01b7fffffffff00000000000000000000000000000000000000000000000000000000169052565b60c081901b7fffffffff0000000000000000000000000000000000000000000000000000000016602084015260a081901b7fffffffff00000000000000000000000000000000000000000000000000000000166040840152608081901b7fffffffff00000000000000000000000000000000000000000000000000000000166060840152606081901b7fffffffff00000000000000000000000000000000000000000000000000000000166080840152604081901b7fffffffff000000000000000000000000000000000000000000000000000000001660a0840152602081901b7fffffffff000000000000000000000000000000000000000000000000000000001660c08401527fffffffff000000000000000000000000000000000000000000000000000000001660e0830152565b019401920185929391611c4f565b90611fe8602092828151948592016107ca565b0190565b60405190611ff982610207565b6060602083600081520152565b919060408382031261012757825167ffffffffffffffff811161012757830190604082820312610127576040519161203d83610207565b8051612048816102a0565b835260208101519067ffffffffffffffff8211610127570181601f8201121561012757805190612077826102be565b92612085604051948561023f565b828452602060a081860194028301019181831161012757602001925b8284106120ba5750505050906020918282015292015190565b60a08483031261012757604051906120d182610223565b84516120dc816102d6565b8252602085015190600482101561012757826020928360a09501526040870151604082015260608701516060820152608087015160808201528152019301926120a1565b919060206121386000926040865260408601906107ed565b930152565b9291906121386020916040865260408601906107ed565b516004811015611a035790565b90816020910312610127575190565b60085460ff16801561217f5790565b506040517f667f9d7000000000000000000000000000000000000000000000000000000000815260208180600481017f6661696c65640000000000000000000000000000000000000000000000000000846040830192737109709ecfa91a80626ff3989d68f67f5b1dd12d815201520381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156101d35760009161221c575b50151590565b61223e915060203d602011612244575b612236818361023f565b810190612161565b38612216565b503d61222c565b6004821015611a035752565b61225f611fec565b506020810161226f81515161188e565b9160005b8251805182101561237157906122aa6122a561229f60206122968560019761191e565b51015160ff1690565b60ff1690565b61248c565b6000908061234157505060005b6122c561101f83875161191e565b9060406122d384885161191e565b51015160606122e385895161191e565b5101519061231660806122f7878b5161191e565b5101519361230d612306610280565b9615158752565b6020860161224b565b60408401526060830152608082015261232f828761191e565b5261233a818661191e565b5001612273565b808403612351575050815b6122b7565b6002810361236257505060026122b7565b60030361234c575060036122b7565b50505173ffffffffffffffffffffffffffffffffffffffff169050906123b4612398610291565b73ffffffffffffffffffffffffffffffffffffffff9093168352565b602082015290565b60ff60006123c992612762565b90600080604061244761247982516123e1848261023f565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152835192839160208301957fb60e72cc000000000000000000000000000000000000000000000000000000008752602484015260648301906107ed565b886044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261023f565b51906a636f6e736f6c652e6c6f675afa50565b600360006123c992612762565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561012757604051917f98296c5400000000000000000000000000000000000000000000000000000000835260048301526024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156101d3576125105750565b600061028f9161023f565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101275773ffffffffffffffffffffffffffffffffffffffff9081604051937f515361f6000000000000000000000000000000000000000000000000000000008552166004840152166024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156101d3576125105750565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561012757604051917ff7fe34770000000000000000000000000000000000000000000000000000000083521515600483015215156024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156101d3576125105750565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561012757604051917f7c84c69b00000000000000000000000000000000000000000000000000000000835260048301526024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156101d3576125105750565b156126a457565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374645574696c7320626f756e642875696e743235362c75696e743235362c7560448201527f696e74323536293a204d6178206973206c657373207468616e206d696e2e00006064820152fd5b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821161187c57565b9190820391821161187c57565b6000906127718484111561269d565b8281109182158061288b575b6128835761279361278e8587612755565b61186e565b9260038311158061287a575b61286b577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83101580612861575b612850578583111561280e575050906127e9846127ee93612755565b611961565b918215612808575061041f9161280391611881565b612728565b91505090565b95949291909561281f575b50505050565b839495506127e9906128319394612755565b91821561280857506128469161278e91612755565b9038808080612819565b5050905061041f9291501990612755565b50821984116127cd565b505091905061041f9250611881565b5082841161279f565b509250505090565b508482111561277d56fe6080806040523460155761073a908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c8063444bc036146103135763b95579091461003257600080fd5b346102635760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102635760043567ffffffffffffffff8111610263578060040160407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8336030112610263576024600092019160ff6100b684846106b0565b9050116102eb5781359073ffffffffffffffffffffffffffffffffffffffff821682036102e857507fff0000000000000000000000000000000000000000000000000000000000000061010984846106b0565b90507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006040519360601b16602084015260f81b16603482015260158152610151603582610618565b916000925b61016082846106b0565b90508410156102975761017382846106b0565b8510156102685760a0850201602081013560048110156102635760008235801515810361025f576102209361024e938360209360019895506000146102565750608087925b6040519260fe60ff8786019616918b1b161760f81b8452604081013560218401526060810135604184015201356061820152606181526101f9608182610618565b6040519584610211889651809287808a0191016105f5565b850191518093858401906105f5565b0101037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610618565b930192610156565b608090926101b8565b5080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6040601f917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08251938492602084526102df81518092816020880152602088880191016105f5565b01168101030190f35b80fd5b807f6cfebfc60000000000000000000000000000000000000000000000000000000060049252fd5b346102635760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102635760043567ffffffffffffffff8111610263573660238201121561026357806004013567ffffffffffffffff8111610263576024369183010111610263576024359061038b610659565b50610394610659565b9160156038838301602481013560601c8652013560f81c9101906103b781610684565b926103c56040519485610618565b8184527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06103f283610684565b0160005b81811061057957505090602085019384526000915b8183106104eb57505050604051916040835273ffffffffffffffffffffffffffffffffffffffff6080840194511660408401525190604060608401528151809452602060a0840192016000945b80861061046d57505082935060208301520390f35b9092835180511515825260208101519060048210156104bc5782608060a09260209485600197015260408101516040840152606081015160608401520151608082015201940195019490610458565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b90919281810193602485013560018160f81c16151561050b83895161069c565b515260f91c9160048310156104bc57600192602061052a848a5161069c565b5101526025860135604061053f848a5161069c565b51015260458601356060610554848a5161069c565b510152606560616080610568858b5161069c565b51019201960135905201919061040b565b6040519060a082019180831067ffffffffffffffff8411176105c65760209260405260008152600083820152600060408201526000606082015260006080820152828289010152016103f6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60005b8381106106085750506000910152565b81810151838201526020016105f8565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176105c657604052565b604051906040820182811067ffffffffffffffff8211176105c6576040526060602083600081520152565b67ffffffffffffffff81116105c65760051b60200190565b80518210156102685760209160051b010190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610263570180359067ffffffffffffffff8211610263576020019160a08202360383136102635756fea2646970667358221220b9aa5936ef19d229c4f84b11ef27380a7c5064bd28c38e6358834e78ea9fe7d264736f6c634300081c0033a26469706673582212206cdeafa0c0fceb2104f480f1f2f51556fcf0c28f5a1a7cafaa5c093cd6a25e8764736f6c634300081c0033","sourceMap":"607:4985:79:-:0;;;;;;;3166:4:5;607:4985:79;;3166:4:5;607:4985:79;;;3166:4:5;607:4985:79;3166:4:5;607:4985:79;;1087:4:16;607:4985:79;;;1087:4:16;607:4985:79;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436101561001257600080fd5b60003560e01c80630a9254e4146101175780631890507d146101125780631ed7831c1461010d5780632ade3880146101085780633e5e3c23146101035780633f7286f4146100fe57806366d9a9a0146100f957806374b8294a146100f457806385226c81146100ef578063916a17c6146100ea578063b0464fdc146100e5578063b5508aa9146100e0578063ba414fa6146100db578063c154a026146100d6578063e20c9f71146100d15763fa7626d4146100cc57600080fd5b6117f2565b611747565b61156c565b611529565b61147e565b6113a5565b6112cc565b61117c565b610dba565b610c6f565b610ad0565b610a25565b61094c565b61070f565b610422565b61012c565b600091031261012757565b600080fd5b346101275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101275760405161075580820182811067ffffffffffffffff8211176101d8578291612896833903906000f080156101d3577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00601f549260081b16911617601f55600080f35b611833565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff8211176101d857604052565b60a0810190811067ffffffffffffffff8211176101d857604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176101d857604052565b6040519061028f60a08361023f565b565b6040519061028f60408361023f565b73ffffffffffffffffffffffffffffffffffffffff81160361012757565b67ffffffffffffffff81116101d85760051b60200190565b8015150361012757565b9190604083820312610127576040516102f881610207565b80938035610305816102a0565b825260208101359067ffffffffffffffff8211610127570182601f8201121561012757803590610334826102be565b93610342604051958661023f565b828552602060a081870194028301019181831161012757602001925b82841061036f575050505060200152565b60a084830312610127576040519061038682610223565b8435610391816102d6565b825260208501359060ff8216820361012757826020928360a095015260408701356040820152606087013560608201526080870135608082015281520193019261035e565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112610127576004359067ffffffffffffffff82116101275761041f916004016102e0565b90565b3461012757610430366103d6565b602081015151151590737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610127576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529115156004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156101d3576104b5926106aa575b50612257565b6020810160ff8151511115610616575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610127576040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f6cfebfc60000000000000000000000000000000000000000000000000000000060048201529060008260248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156101d3576105ce926000926105fc575b50601f5461059a9060081c73ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff1690565b60405180809581947fb955790900000000000000000000000000000000000000000000000000000000835260048301611a32565b03915afa80156101d3576105de57005b6105fa903d806000833e6105f2818361023f565b81019061199a565b005b8061060a846106109361023f565b8061011c565b3861055f565b906101006106238161188e565b9160005b8451805182101561065c579061063f8160019361191e565b5161064a828761191e565b52610655818661191e565b5001610627565b505092908151515b81811061067457505052386104c5565b60019061068d8451610687815184611961565b9061191e565b51610698828761191e565b526106a3818661191e565b5001610664565b8061060a60006106b99361023f565b386104af565b602060408183019282815284518094520192019060005b8181106106e35750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016106d6565b346101275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101275760405180602060165491828152019060166000527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b51242899060005b81811061079e5761079a8561078e8187038261023f565b604051918291826106bf565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610777565b60005b8381106107dd5750506000910152565b81810151838201526020016107cd565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093610829815180928187528780880191016107ca565b0116010190565b9080602083519182815201916020808360051b8301019401926000915b83831061085c57505050505090565b9091929394602080610898837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0866001960301875289516107ed565b9701930193019193929061084d565b602081016020825282518091526040820191602060408360051b8301019401926000915b8383106108da57505050505090565b909192939460208061093d837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190610830565b970193019301919392906108cb565b346101275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012757601e54610987816102be565b90610995604051928361023f565b80825260208201601e6000527f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e3506000915b8383106109db576040518061079a87826108a7565b600260206001926040516109ee81610207565b73ffffffffffffffffffffffffffffffffffffffff8654168152610a13858701611bd2565b838201528152019201920191906109c6565b346101275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101275760405180602060185491828152019060186000527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e9060005b818110610aa45761079a8561078e8187038261023f565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610a8d565b346101275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101275760405180602060175491828152019060176000527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c159060005b818110610b4f5761079a8561078e8187038261023f565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610b38565b906020808351928381520192019060005b818110610b995750505090565b82517fffffffff0000000000000000000000000000000000000000000000000000000016845260209384019390920191600101610b8c565b602081016020825282518091526040820191602060408360051b8301019401926000915b838310610c0457505050505090565b9091929394602080610c60837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0866001960301875289519083610c5083516040845260408401906107ed565b9201519084818403910152610b7b565b97019301930191939290610bf5565b346101275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012757601b54610caa816102be565b90610cb8604051928361023f565b80825260208201601b6000527f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc16000915b838310610cfe576040518061079a8782610bd1565b60026020600192604051610d1181610207565b610d1a86611ad0565b8152610d27858701611c2a565b83820152815201920192019190610ce9565b67ffffffffffffffff81116101d857601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b81601f8201121561012757803590610d8a82610d39565b92610d98604051948561023f565b8284526020838301011161012757816000926020809301838601378301015290565b346101275760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101275760043567ffffffffffffffff811161012757610e099036906004016102e0565b60243567ffffffffffffffff811161012757610e29903690600401610d73565b60443567ffffffffffffffff811161012757610e4c610e52913690600401610d73565b92612257565b9160208301928351805160ff8111611157575b5050601f54610e8c9060081c73ffffffffffffffffffffffffffffffffffffffff16610581565b90604051917fb955790900000000000000000000000000000000000000000000000000000000835260008380610ec58560048301611a32565b0381845afa9283156101d35760009361112c575b50610f0a600091610f36610f779596604051938491610f04610efe602085018d611fd5565b8b611fd5565b90611fd5565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810184528361023f565b610f3e611fec565b508651916040518096819482937f444bc0360000000000000000000000000000000000000000000000000000000084526004840161213d565b03915afa80156101d3576020946000936000926110f9575b5090610fa6610fee9495610fac9351905190611881565b90612499565b610fe8610fcd845173ffffffffffffffffffffffffffffffffffffffff1690565b915173ffffffffffffffffffffffffffffffffffffffff1690565b9061251b565b01610ffe81515183515190612499565b60005b8251518110156105fa578061103a61102661101f600194865161191e565b5151151590565b61103461101f84885161191e565b906125ab565b611081611054602061104d84875161191e565b5101612154565b61105d816119f9565b60ff80611070602061104d878b5161191e565b611079816119f9565b169116612499565b6110aa604061109183865161191e565b51015160406110a184885161191e565b51015190612626565b6110d360606110ba83865161191e565b51015160606110ca84885161191e565b51015190612499565b6110f360806110e383865161191e565b51015160806110a184885161191e565b01611001565b610fee9450610fac9250611122610fa6913d806000833e61111a818361023f565b810190612006565b9095509250610f8f565b610f779350600091610f3661114d610f0a933d8087833e6105f2818361023f565b9550509150610ed9565b611160906123bc565b815284523880610e65565b90602061041f928181520190610830565b346101275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012757601a546111b7816102be565b906111c5604051928361023f565b808252601a60009081527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b83831061120a576040518061079a878261116b565b60016020819261121985611ad0565b8152019201920191906111f5565b602081016020825282518091526040820191602060408360051b8301019401926000915b83831061125a57505050505090565b90919293946020806112bd837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190610b7b565b9701930193019193929061124b565b346101275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012757601d54611307816102be565b90611315604051928361023f565b80825260208201601d6000527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f6000915b83831061135b576040518061079a8782611227565b6002602060019260405161136e81610207565b73ffffffffffffffffffffffffffffffffffffffff8654168152611393858701611c2a565b83820152815201920192019190611346565b346101275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012757601c546113e0816102be565b906113ee604051928361023f565b80825260208201601c6000527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2116000915b838310611434576040518061079a8782611227565b6002602060019260405161144781610207565b73ffffffffffffffffffffffffffffffffffffffff865416815261146c858701611c2a565b8382015281520192019201919061141f565b346101275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610127576019546114b9816102be565b906114c7604051928361023f565b808252601960009081527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b83831061150c576040518061079a878261116b565b60016020819261151b85611ad0565b8152019201920191906114f7565b346101275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610127576020611562612170565b6040519015158152f35b346101275761158261157d366103d6565b612257565b60208101908151805160ff8111611733575b5050601f546115bb9060081c73ffffffffffffffffffffffffffffffffffffffff16610581565b604051907fb9557909000000000000000000000000000000000000000000000000000000008252600082806115f38660048301611a32565b0381845afa9182156101d357600092611716575b50611610611fec565b50600060405180927f444bc036000000000000000000000000000000000000000000000000000000008252818061164a8760048301612120565b03915afa9283156101d3576020936000926000916116ee575b50610fac9061167493945190612499565b0161168481515183515190612499565b60005b8251518110156105fa57806116a561102661101f600194865161191e565b6116b8611054602061104d84875161191e565b6116c8604061109183865161191e565b6116d860606110ba83865161191e565b6116e860806110e383865161191e565b01611687565b6116749350610fac915061170c903d806000833e61111a818361023f565b9093909150611663565b61172c9192503d806000833e6105f2818361023f565b9038611607565b61173c906123bc565b815282523880611594565b346101275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101275760405180602060155491828152019060156000527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4759060005b8181106117c65761079a8561078e8187038261023f565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016117af565b346101275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012757602060ff601f54166040519015158152f35b6040513d6000823e3d90fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b906001820180921161187c57565b61183f565b9190820180921161187c57565b90611898826102be565b6118a5604051918261023f565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06118d382946102be565b019060005b8281106118e457505050565b6020906040516118f381610223565b60008152600083820152600060408201526000606082015260006080820152828285010152016118d8565b80518210156119325760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b811561196b570690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6020818303126101275780519067ffffffffffffffff8211610127570181601f820112156101275780516119cd81610d39565b926119db604051948561023f565b818452602082840101116101275761041f91602080850191016107ca565b60041115611a0357565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b90602082526020608081606085019373ffffffffffffffffffffffffffffffffffffffff8151168287015201519360408082015284518094520192019060005b818110611a7f5750505090565b90919283518051151582526020810151906004821015611a035782608060a0926020948560019701526040810151604084015260608101516060840152015160808201520194019101919091611a72565b9060405191600081548060011c9260018216918215611bc8575b602085108314611b9b578487528693926020850192918115611b5f5750600114611b1d575b505061028f9250038361023f565b611b2e919250600052602060002090565b906000915b848310611b48575061028f9350013880611b0f565b805482840152869350602090920191600101611b33565b905061028f959293507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009150168252151560051b013880611b0f565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f1693611aea565b908154611bde816102be565b92611bec604051948561023f565b818452602084019060005260206000206000915b838310611c0d5750505050565b600160208192611c1c85611ad0565b815201920192019190611c00565b60405181548082529092918390611c4a6020830191600052602060002090565b926000905b806007830110611e575761028f945491818110611e1b575b818110611de4575b818110611dad575b818110611d76575b818110611d3f575b818110611d08575b818110611cd2575b10611ca5575b50038361023f565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260200138611c9d565b602083811b7fffffffff000000000000000000000000000000000000000000000000000000001685529093600191019301611c97565b604083901b7fffffffff00000000000000000000000000000000000000000000000000000000168452926001906020019301611c8f565b606083901b7fffffffff00000000000000000000000000000000000000000000000000000000168452926001906020019301611c87565b608083901b7fffffffff00000000000000000000000000000000000000000000000000000000168452926001906020019301611c7f565b60a083901b7fffffffff00000000000000000000000000000000000000000000000000000000168452926001906020019301611c77565b60c083901b7fffffffff00000000000000000000000000000000000000000000000000000000168452926001906020019301611c6f565b92602081611e4f6001938660e01b7fffffffff00000000000000000000000000000000000000000000000000000000169052565b019301611c67565b916008919350610100600191611fc78754611e96838260e01b7fffffffff00000000000000000000000000000000000000000000000000000000169052565b60c081901b7fffffffff0000000000000000000000000000000000000000000000000000000016602084015260a081901b7fffffffff00000000000000000000000000000000000000000000000000000000166040840152608081901b7fffffffff00000000000000000000000000000000000000000000000000000000166060840152606081901b7fffffffff00000000000000000000000000000000000000000000000000000000166080840152604081901b7fffffffff000000000000000000000000000000000000000000000000000000001660a0840152602081901b7fffffffff000000000000000000000000000000000000000000000000000000001660c08401527fffffffff000000000000000000000000000000000000000000000000000000001660e0830152565b019401920185929391611c4f565b90611fe8602092828151948592016107ca565b0190565b60405190611ff982610207565b6060602083600081520152565b919060408382031261012757825167ffffffffffffffff811161012757830190604082820312610127576040519161203d83610207565b8051612048816102a0565b835260208101519067ffffffffffffffff8211610127570181601f8201121561012757805190612077826102be565b92612085604051948561023f565b828452602060a081860194028301019181831161012757602001925b8284106120ba5750505050906020918282015292015190565b60a08483031261012757604051906120d182610223565b84516120dc816102d6565b8252602085015190600482101561012757826020928360a09501526040870151604082015260608701516060820152608087015160808201528152019301926120a1565b919060206121386000926040865260408601906107ed565b930152565b9291906121386020916040865260408601906107ed565b516004811015611a035790565b90816020910312610127575190565b60085460ff16801561217f5790565b506040517f667f9d7000000000000000000000000000000000000000000000000000000000815260208180600481017f6661696c65640000000000000000000000000000000000000000000000000000846040830192737109709ecfa91a80626ff3989d68f67f5b1dd12d815201520381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156101d35760009161221c575b50151590565b61223e915060203d602011612244575b612236818361023f565b810190612161565b38612216565b503d61222c565b6004821015611a035752565b61225f611fec565b506020810161226f81515161188e565b9160005b8251805182101561237157906122aa6122a561229f60206122968560019761191e565b51015160ff1690565b60ff1690565b61248c565b6000908061234157505060005b6122c561101f83875161191e565b9060406122d384885161191e565b51015160606122e385895161191e565b5101519061231660806122f7878b5161191e565b5101519361230d612306610280565b9615158752565b6020860161224b565b60408401526060830152608082015261232f828761191e565b5261233a818661191e565b5001612273565b808403612351575050815b6122b7565b6002810361236257505060026122b7565b60030361234c575060036122b7565b50505173ffffffffffffffffffffffffffffffffffffffff169050906123b4612398610291565b73ffffffffffffffffffffffffffffffffffffffff9093168352565b602082015290565b60ff60006123c992612762565b90600080604061244761247982516123e1848261023f565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152835192839160208301957fb60e72cc000000000000000000000000000000000000000000000000000000008752602484015260648301906107ed565b886044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261023f565b51906a636f6e736f6c652e6c6f675afa50565b600360006123c992612762565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561012757604051917f98296c5400000000000000000000000000000000000000000000000000000000835260048301526024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156101d3576125105750565b600061028f9161023f565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156101275773ffffffffffffffffffffffffffffffffffffffff9081604051937f515361f6000000000000000000000000000000000000000000000000000000008552166004840152166024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156101d3576125105750565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561012757604051917ff7fe34770000000000000000000000000000000000000000000000000000000083521515600483015215156024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156101d3576125105750565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561012757604051917f7c84c69b00000000000000000000000000000000000000000000000000000000835260048301526024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156101d3576125105750565b156126a457565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374645574696c7320626f756e642875696e743235362c75696e743235362c7560448201527f696e74323536293a204d6178206973206c657373207468616e206d696e2e00006064820152fd5b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821161187c57565b9190820391821161187c57565b6000906127718484111561269d565b8281109182158061288b575b6128835761279361278e8587612755565b61186e565b9260038311158061287a575b61286b577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83101580612861575b612850578583111561280e575050906127e9846127ee93612755565b611961565b918215612808575061041f9161280391611881565b612728565b91505090565b95949291909561281f575b50505050565b839495506127e9906128319394612755565b91821561280857506128469161278e91612755565b9038808080612819565b5050905061041f9291501990612755565b50821984116127cd565b505091905061041f9250611881565b5082841161279f565b509250505090565b508482111561277d56fe6080806040523460155761073a908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c8063444bc036146103135763b95579091461003257600080fd5b346102635760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102635760043567ffffffffffffffff8111610263578060040160407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8336030112610263576024600092019160ff6100b684846106b0565b9050116102eb5781359073ffffffffffffffffffffffffffffffffffffffff821682036102e857507fff0000000000000000000000000000000000000000000000000000000000000061010984846106b0565b90507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006040519360601b16602084015260f81b16603482015260158152610151603582610618565b916000925b61016082846106b0565b90508410156102975761017382846106b0565b8510156102685760a0850201602081013560048110156102635760008235801515810361025f576102209361024e938360209360019895506000146102565750608087925b6040519260fe60ff8786019616918b1b161760f81b8452604081013560218401526060810135604184015201356061820152606181526101f9608182610618565b6040519584610211889651809287808a0191016105f5565b850191518093858401906105f5565b0101037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610618565b930192610156565b608090926101b8565b5080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6040601f917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08251938492602084526102df81518092816020880152602088880191016105f5565b01168101030190f35b80fd5b807f6cfebfc60000000000000000000000000000000000000000000000000000000060049252fd5b346102635760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102635760043567ffffffffffffffff8111610263573660238201121561026357806004013567ffffffffffffffff8111610263576024369183010111610263576024359061038b610659565b50610394610659565b9160156038838301602481013560601c8652013560f81c9101906103b781610684565b926103c56040519485610618565b8184527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06103f283610684565b0160005b81811061057957505090602085019384526000915b8183106104eb57505050604051916040835273ffffffffffffffffffffffffffffffffffffffff6080840194511660408401525190604060608401528151809452602060a0840192016000945b80861061046d57505082935060208301520390f35b9092835180511515825260208101519060048210156104bc5782608060a09260209485600197015260408101516040840152606081015160608401520151608082015201940195019490610458565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b90919281810193602485013560018160f81c16151561050b83895161069c565b515260f91c9160048310156104bc57600192602061052a848a5161069c565b5101526025860135604061053f848a5161069c565b51015260458601356060610554848a5161069c565b510152606560616080610568858b5161069c565b51019201960135905201919061040b565b6040519060a082019180831067ffffffffffffffff8411176105c65760209260405260008152600083820152600060408201526000606082015260006080820152828289010152016103f6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60005b8381106106085750506000910152565b81810151838201526020016105f8565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176105c657604052565b604051906040820182811067ffffffffffffffff8211176105c6576040526060602083600081520152565b67ffffffffffffffff81116105c65760051b60200190565b80518210156102685760209160051b010190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610263570180359067ffffffffffffffff8211610263576020019160a08202360383136102635756fea2646970667358221220b9aa5936ef19d229c4f84b11ef27380a7c5064bd28c38e6358834e78ea9fe7d264736f6c634300081c0033a26469706673582212206cdeafa0c0fceb2104f480f1f2f51556fcf0c28f5a1a7cafaa5c093cd6a25e8764736f6c634300081c0033","sourceMap":"607:4985:79:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;717:26;;;;;;;;;;;;;;;;;;;;607:4985;717:26;;;;;607:4985;;707:36;607:4985;;;;;;;;707:36;607:4985;;;;717:26;;:::i;:::-;607:4985;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;2024:14:2;607:4985:79;;:::i;:::-;:::o;:::-;5412:20;607:4985;;;5412:20;607:4985;;:::i;:::-;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;:::i;:::-;1163:11;;;;607:4985;1163:22;;1153:33;336:42:2;1153:33:79;;;;607:4985;;2024:14:2;1153:33:79;;607:4985;;;;1153:33;;607:4985;-1:-1:-1;607:4985:79;;;336:42:2;1153:33:79;;;;;;;1223:20;1153:33;;;607:4985;1223:20;;:::i;:::-;1163:11;1299:16;;607:4985;1299:16;;607:4985;1299:41;;1295:451;;607:4985;1751:61;336:42:2;1751:61:79;;;;607:4985;;2024:14:2;1751:61:79;;1767:44;607:4985;1751:61;;607:4985;;-1:-1:-1;607:4985:79;2024:14:2;607:4985:79;-1:-1:-1;336:42:2;1751:61:79;;;;;;;1818:28;1751:61;-1:-1:-1;1751:61:79;;;607:4985;-1:-1:-1;1818:7:79;2024:14:2;1818:16:79;;2024:14:2;;607:4985:79;;2024:14:2;607:4985:79;;;;1818:16;607:4985;;1818:28;;;;;2024:14:2;1818:28:79;;607:4985;1818:28;;;:::i;:::-;;;;;;;;;;;607:4985;1818:28;;;;;-1:-1:-1;1818:28:79;;;;;;:::i;:::-;;;;;:::i;:::-;607:4985;1751:61;;;;;;;:::i;:::-;;;:::i;:::-;;;;1295:451;1401:18;2024:14:2;1381:39:79;;;:::i;:::-;1433:13;-1:-1:-1;1477:3:79;1452:16;;607:4985;;1448:27;;;;;1503:19;;;1418:1;1503:19;;:::i;:::-;;1492:30;;;;:::i;:::-;;;;;;:::i;:::-;;2024:14:2;1433:13:79;;1448:27;;;;;1579:16;;607:4985;1604:22;;;;;;1715:24;;;1295:451;;;1628:3;1418:1;1654:16;:45;:16;;1671:27;607:4985;;1671:27;;:::i;:::-;1654:45;;:::i;:::-;;1643:56;;;;:::i;:::-;;;;;;:::i;:::-;;2024:14:2;1567:35:79;;1153:33;;;-1:-1:-1;1153:33:79;;;:::i;:::-;;;;607:4985;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3018:16:9;607:4985:79;;;;;;;3018:16:9;607:4985:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;607:4985:79;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;607:4985:79;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;3948:19:9;607:4985:79;2024:14:2;;;:::i;:::-;607:4985:79;;;;;;;:::i;:::-;2024:14:2;;;607:4985:79;;;3948:19:9;607:4985:79;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3794:16:9;607:4985:79;;;;;;;3794:16:9;607:4985:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3501:18:9;607:4985:79;;;;;;;3501:18:9;607:4985:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;607:4985:79;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;3346:26:9;607:4985:79;2024:14:2;;;:::i;:::-;607:4985:79;;;;;;;:::i;:::-;2024:14:2;;;607:4985:79;;;3346:26:9;607:4985:79;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;607:4985:79;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;3279:20;607:4985;;;;;;:::i;:::-;3279:20;;:::i;:::-;3355:16;607:4985;3355:16;;;;;607:4985;;;3355:40;;3351:291;;607:4985;-1:-1:-1;;3671:7:79;2024:14:2;3671:16:79;;2024:14:2;;607:4985:79;;2024:14:2;;3671:16:79;607:4985;;;3671:28;2024:14:2;3671:28:79;;-1:-1:-1;3671:28:79;;;;607:4985;3671:28;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;3671:28:79;;;607:4985;;;-1:-1:-1;607:4985:79;3738:42;3876:50;607:4985;;;;3738:42;;;607:4985;;;3738:42;;607:4985;;:::i;:::-;;;:::i;:::-;;;:::i;:::-;3738:42;;;;;;;;:::i;:::-;607:4985;;:::i;:::-;;;;;;;3876:50;;;;;;2024:14:2;3876:50:79;;607:4985;3876:50;;;:::i;:::-;;;;;;;;;607:4985;3876:50;-1:-1:-1;;;3876:50:79;;;607:4985;;;3950:31;4013:17;607:4985;;3950:31;607:4985;;;;3950:31;;:::i;:::-;;;:::i;:::-;607:4985;;;;;;;;;;;;;;;;4013:17;;:::i;:::-;4046:13;4068:23;4046:13;;607:4985;4068:16;;607:4985;4068:23;;:::i;:::-;-1:-1:-1;4147:3:79;4122:16;;607:4985;4118:27;;;;;4169:13;4198:30;4169:27;:16;2024:14:2;4169:13:79;;;:16;:::i;:::-;;607:4985;;;;;4169:27;4198:30;:19;:16;;;:19;:::i;:30::-;;;:::i;:::-;4237:81;4252:26;607:4985;4252:16;:13;;;:16;:::i;:::-;;:26;;:::i;:::-;2024:14:2;;;:::i;:::-;607:4985:79;4287:16;:29;607:4985;4287:19;:16;;;:19;:::i;:29::-;2024:14:2;;;:::i;:::-;607:4985:79;;;4237:81;:::i;:::-;4359:25;607:4985;4335:16;:13;;;:16;:::i;:::-;;:22;607:4985;;4359:19;:16;;;:19;:::i;:::-;;:25;607:4985;4359:25;;:::i;:::-;4427:26;607:4985;4402:16;:13;;;:16;:::i;:::-;;:23;607:4985;;4427:19;:16;;;:19;:::i;:::-;;:26;607:4985;4427:26;;:::i;:::-;4494:24;4471:21;:16;:13;;;:16;:::i;:::-;;:21;607:4985;4471:21;4494:19;:16;;;:19;:::i;:24::-;2024:14:2;4103:13:79;;3876:50;4013:17;3876:50;;3950:31;3876:50;;;3950:31;3876:50;;;-1:-1:-1;3876:50:79;;;;;;:::i;:::-;;;;;:::i;:::-;;;-1:-1:-1;3876:50:79;-1:-1:-1;3876:50:79;;3671:28;3876:50;3671:28;;-1:-1:-1;3671:28:79;3738:42;3671:28;607:4985;3671:28;;;;;;;;;;:::i;:::-;;;;;;;;3351:291;3482:38;;;:::i;:::-;3551:53;;3611:24;;3351:291;;;;607:4985;;;;;;;;;;;:::i;:::-;;;;;;;;;;;3162:18:9;607:4985:79;2024:14:2;;;:::i;:::-;607:4985:79;;;;;;;:::i;:::-;2024:14:2;;;3162:18:9;607:4985:79;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;3653:18:9;607:4985:79;2024:14:2;;;:::i;:::-;607:4985:79;;;;;;;:::i;:::-;2024:14:2;;;607:4985:79;;;3653:18:9;607:4985:79;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;2876:18:9;607:4985:79;2024:14:2;;;:::i;:::-;607:4985:79;;;;;;;:::i;:::-;2024:14:2;;;607:4985:79;;;2876:18:9;607:4985:79;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;2575:18:9;607:4985:79;2024:14:2;;;:::i;:::-;607:4985:79;;;;;;;:::i;:::-;2024:14:2;;;2575:18:9;607:4985:79;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1972:20;607:4985;;;:::i;:::-;1972:20;:::i;:::-;2048:16;;;;;;607:4985;;;2048:40;;2044:291;;607:4985;-1:-1:-1;;2364:7:79;2024:14:2;2364:16:79;;2024:14:2;;607:4985:79;;2024:14:2;;2364:16:79;607:4985;;2364:28;2024:14:2;2364:28:79;;;;;;;607:4985;2364:28;;;:::i;:::-;;;;;;;;;;;;;;;607:4985;;;;:::i;:::-;;2364:28;607:4985;;2471:40;;2024:14:2;2471:40:79;;;;;;607:4985;2471:40;;;:::i;:::-;;;;;;;;;;2048:16;2471:40;2364:28;;;2471:40;;;607:4985;;2535:14;607:4985;2581:17;607:4985;;;2535:14;;:::i;2581:17::-;2614:13;2636:23;2614:13;;607:4985;2636:16;;607:4985;2636:23;;:::i;:::-;2364:28;2715:3;2690:16;;607:4985;2686:27;;;;;2737:13;2766:30;2737:27;:16;2024:14:2;2737:13:79;;;:16;:::i;2766:30::-;2805:81;2820:26;2048:16;2820;:13;;;:16;:::i;2805:81::-;2927:25;607:4985;2903:16;:13;;;:16;:::i;2927:25::-;2995:26;2970:23;:16;:13;;;:16;:::i;2995:26::-;3062:24;3039:21;:16;:13;;;:16;:::i;3062:24::-;2024:14:2;2671:13:79;;2471:40;2581:17;2471:40;;2535:14;2471:40;;;;;;2364:28;2471:40;;;;;;:::i;:::-;;;;;-1:-1:-1;2471:40:79;;2364:28;;;;;;;;;;;;;;:::i;:::-;;;;;2044:291;2175:38;;;:::i;:::-;2244:53;;2304:24;;2044:291;;;;607:4985;;;;;;;;;;;;;;;2723:18:9;607:4985:79;;;;;;;2723:18:9;607:4985:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1065:26:16;607:4985:79;;;;;;;;;;;;;;;;;;;;2024:14:2;;;;;;;;;;;;2038:1:15;2024:14:2;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;:::i;:::-;607:4985:79;;;;;;:::i;:::-;2024:14:2;;;;;;;;:::i;:::-;;;-1:-1:-1;2024:14:2;;;;;;;;;:::o;:::-;;607:4985:79;;;;;;:::i;:::-;-1:-1:-1;2024:14:2;;-1:-1:-1;2024:14:2;;;;-1:-1:-1;607:4985:79;2024:14:2;;;-1:-1:-1;2024:14:2;;;;-1:-1:-1;2024:14:2;;;;;;;;;;;;;;607:4985:79;;2024:14:2;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;607:4985:79;;;;;;;:::i;:::-;2024:14:2;;;;;;;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;2024:14:2;;;:::o;:::-;;;;;;;;;;;;;;;;607:4985:79;2024:14:2;;;;;607:4985:79;2024:14:2;;607:4985:79;2024:14:2;;;607:4985:79;2024:14:2;;;;;;;;607:4985:79;;;;;;;;2024:14:2;;;;;;;;;;;;:::o;:::-;;;;;;;;607:4985:79;;;;2024:14:2;;;;;;;;;;;;607:4985:79;2024:14:2;;;;;;;;;;;;;;;;;;;;;;;;;;;607:4985:79;2024:14:2;;;;607:4985:79;;2024:14:2;;;;;;;607:4985:79;;;;;-1:-1:-1;607:4985:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;607:4985:79;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;607:4985:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2024:14:2;;;:::i;:::-;607:4985:79;;;;;;;:::i;:::-;2024:14:2;;;607:4985:79;;;;-1:-1:-1;607:4985:79;;-1:-1:-1;607:4985:79;-1:-1:-1;607:4985:79;;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;607:4985:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2024:14:2;;607:4985:79;;;;;;;;;2024:14:2;;;;;607:4985:79;;2024:14:2;;607:4985:79;;;;;;;;;2024:14:2;;;;;607:4985:79;;2024:14:2;607:4985:79;;;;;;;;;;2024:14:2;;;;;607:4985:79;;2024:14:2;607:4985:79;;;;;;;;;;2024:14:2;;;;;607:4985:79;;2024:14:2;607:4985:79;;;;;;;;;;2024:14:2;;;;;607:4985:79;;2024:14:2;607:4985:79;;;;;;;;;;2024:14:2;;;;;607:4985:79;;2024:14:2;607:4985:79;;;;;;;;;2024:14:2;607:4985:79;2024:14:2;607:4985:79;;2024:14:2;;;;607:4985:79;;;;;;;;;;;;;;;;;;;;;;;;2024:14:2;;;;607:4985:79;;;;;;;2024:14:2;;;;;607:4985:79;;;;;2024:14:2;;;;;607:4985:79;;;;;2024:14:2;;;;;607:4985:79;;;;;2024:14:2;;;;;607:4985:79;;;;;2024:14:2;;;;;607:4985:79;;;;;2024:14:2;;;;;607:4985:79;;;;2024:14:2;;;607:4985:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;-1:-1:-1;607:4985:79;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2364:28;607:4985;;;;;;;;;:::i;:::-;;;2024:14:2;607:4985:79:o;:::-;;;;;;;;;;;;;;;:::i;:::-;;2024:14:2;;;;;;607:4985:79;:::o;192:59:4:-;;;;;;;;;607:4985:79;192:59:4;:::o;1243:204::-;1302:7;607:4985:79;;;;;;;1325:14:4;:::o;1298:143::-;607:4985:79;;;2024:14:2;1377:39:4;;;;;;;;192:59;;;;;607:4985:79;;;;192:59:4;2024:14:2;1377:39:4;;607:4985:79;1377:39:4;;;;;;;2024:14:2;1377:39:4;;;1298:143;1377:53;;;1370:60;:::o;1377:39::-;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;607:4985:79;2024:14:2;;;;;;607:4985:79;:::o;4534:1055::-;607:4985;;:::i;:::-;;4698:11;;;4678:39;4698:11;;607:4985;4678:39;:::i;:::-;4728:13;-1:-1:-1;4767:3:79;4747:11;;607:4985;;4743:22;;;;;4806:14;4800:37;;4806:24;4698:11;4806:14;;2024::2;4806::79;;:::i;:::-;;:24;607:4985;;;;;4806:24;607:4985;;;;4800:37;;:::i;:::-;-1:-1:-1;;4894:14:79;;;4920:45;;-1:-1:-1;4890:387:79;5331:25;:14;:11;;;:14;:::i;:25::-;5412:11;:20;:14;:11;;;:14;:::i;:::-;;:20;607:4985;5450:21;:14;:11;;;:14;:::i;:::-;;:21;607:4985;5487:11;5295:220;5487:19;:14;:11;;;:14;:::i;:::-;;:19;607:4985;2024:14:2;5295:220:79;2024:14:2;;:::i;:::-;607:4985:79;;;;;;5295:220;4698:11;5295:220;;;:::i;:::-;5412:20;5295:220;;607:4985;5450:21;5295:220;;607:4985;5487:19;5295:220;;607:4985;5284:231;;;;:::i;:::-;;;;;;:::i;:::-;;2024:14:2;4728:13:79;;4890:387;4984:14;;;2024::2;;5010:49:79;;;4980:297;4890:387;;4980:297;5091:1;5078:14;;5091:1;;5104:61;;5091:1;4890:387;;5074:203;4835:1;5184:14;4980:297;5180:97;5210:58;4835:1;4890:387;;4743:22;-1:-1:-1;;607:4985:79;;;;-1:-1:-1;607:4985:79;5534:50;607:4985;;:::i;:::-;;;;;;;;5534:50;4698:11;5534:50;;607:4985;4534:1055;:::o;2815:199:15:-;607:4985:79;3502:1;2933:19:15;2815:199;2933:19;:::i;:::-;607:4985:79;3502:1;607:4985;;;9786:54:15;607:4985:79;;;;;;:::i;:::-;;;;;;;;;;;9786:54:15;;;607:4985:79;9786:54:15;;;;;;;;;607:4985:79;;;;;;:::i;:::-;;;;;2024:14:2;9786:54:15;;;;;;;;:::i;:::-;607:4985:79;9371:159:15;679:42;9371:159;;;2815:199::o;:::-;4835:1:79;4740;2933:19:15;2815:199;2933:19;:::i;2270:110:4:-;;607:4985:79;2349:24:4;;;;607:4985:79;;2349:24:4;2024:14:2;2349:24:4;;;;;2024:14:2;607:4985:79;;;2024:14:2;-1:-1:-1;2349:24:4;;;607:4985:79;2349:24:4;;;;;;;;2270:110;:::o;2349:24::-;-1:-1:-1;2349:24:4;;;:::i;3454:110::-;;607:4985:79;3533:24:4;;;;607:4985:79;;;;;3533:24:4;2024:14:2;3533:24:4;;607:4985:79;3533:24:4;;;607:4985:79;;;;;;-1:-1:-1;3533:24:4;;;607:4985:79;3533:24:4;;;;;;;;3454:110;:::o;2026:104::-;;607:4985:79;2099:24:4;;;;607:4985:79;;2099:24:4;2024:14:2;2099:24:4;;607:4985:79;;2099:24:4;;;607:4985:79;;;;;;;-1:-1:-1;2099:24:4;;;607:4985:79;2099:24:4;;;;;;;;2026:104;:::o;3710:110::-;;607:4985:79;3789:24:4;;;;607:4985:79;;3789:24:4;2024:14:2;3789:24:4;;;;;2024:14:2;607:4985:79;;;2024:14:2;-1:-1:-1;3789:24:4;;;607:4985:79;3789:24:4;;;;;;;;3710:110;:::o;607:4985:79:-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;1546:1263:15:-;2024:14:2;1664:10:15;1656:85;1664:10;;;;1656:85;:::i;:::-;1970:8;;;;;;:20;;;1546:1263;1966:34;;2026:13;:9;;;;:::i;:::-;:13;:::i;:::-;2229:6;2234:1;2229:6;;;:18;;;1546:1263;2225:38;;607:4985:79;2277:20:15;;;:46;;;1546:1263;2273:82;;2455:7;;;;;;2493;;;;;2528:11;2493:7;;:::i;:::-;2528:11;:::i;:::-;2557:8;;;2553:24;;2600:9;:13;:9;;;;:::i;:::-;:13;:::i;2553:24::-;2567:10;;;;:::o;2451:352::-;2630:173;;;;;;;;2451:352;;;;;1546:1263::o;2630:173::-;2672:7;;;;;;2707:11;2672:7;;;:::i;2707:11::-;2736:8;;;2732:24;;2779:9;:13;:9;;;;:::i;:13::-;2630:173;;;;;;;2273:82;2339:15;;;;2332:23;2339:15;;;607:4985:79;;2332:23:15;:::i;2277:46::-;2308:15;607:4985:79;;2301:22:15;;2277:46;;2225:38;2256:7;;;;;;;;;:::i;2229:18::-;2239:8;;;;2229:18;;1966:34;1992:8;;;;;;:::o;1970:20::-;1982:8;;;;;1970:20;","linkReferences":{}},"methodIdentifiers":{"IS_TEST()":"fa7626d4","excludeArtifacts()":"b5508aa9","excludeContracts()":"e20c9f71","excludeSelectors()":"b0464fdc","excludeSenders()":"1ed7831c","failed()":"ba414fa6","setUp()":"0a9254e4","targetArtifactSelectors()":"66d9a9a0","targetArtifacts()":"85226c81","targetContracts()":"3f7286f4","targetInterfaces()":"2ade3880","targetSelectors()":"916a17c6","targetSenders()":"3e5e3c23","test_fail_packRulesLengthExceedsMax((address,(bool,uint8,bytes32,uint256,bytes32)[]))":"1890507d","test_packAndRead((address,(bool,uint8,bytes32,uint256,bytes32)[]))":"c154a026","test_packAndReadAtPointer((address,(bool,uint8,bytes32,uint256,bytes32)[]),bytes,bytes)":"74b8294a"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"IS_TEST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"excludedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setUp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifactSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"artifact\",\"type\":\"string\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzArtifactSelector[]\",\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"targetedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetInterfaces\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"artifacts\",\"type\":\"string[]\"}],\"internalType\":\"struct StdInvariant.FuzzInterface[]\",\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"cumulative\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"offset\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"mask\",\"type\":\"bytes32\"}],\"internalType\":\"struct PermissionTest.ParameterRuleTestInput[]\",\"name\":\"rules\",\"type\":\"tuple[]\"}],\"internalType\":\"struct PermissionTest.PermissionTestInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"test_fail_packRulesLengthExceedsMax\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"cumulative\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"offset\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"mask\",\"type\":\"bytes32\"}],\"internalType\":\"struct PermissionTest.ParameterRuleTestInput[]\",\"name\":\"rules\",\"type\":\"tuple[]\"}],\"internalType\":\"struct PermissionTest.PermissionTestInput\",\"name\":\"input\",\"type\":\"tuple\"}],\"name\":\"test_packAndRead\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"cumulative\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"offset\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"mask\",\"type\":\"bytes32\"}],\"internalType\":\"struct PermissionTest.ParameterRuleTestInput[]\",\"name\":\"rules\",\"type\":\"tuple[]\"}],\"internalType\":\"struct PermissionTest.PermissionTestInput\",\"name\":\"input\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"prepend\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"append\",\"type\":\"bytes\"}],\"name\":\"test_packAndReadAtPointer\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/extensions/sessions/Permission.t.sol\":\"PermissionTest\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/extensions/sessions/explicit/Permission.sol\":{\"keccak256\":\"0x0bc35a04da3830c64ec13c32b57f88be6b980228f6b387e800cf70919cdcfb16\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://fcb304612f894699f8e1e40cf134abebe8f7135795bea479b04e967551c59948\",\"dweb:/ipfs/Qme4mD8dh3xU9wbscQwvL4cQcZ2Wv8Fobo2fmU29B3DirV\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"test/extensions/sessions/Permission.t.sol\":{\"keccak256\":\"0x7ccef7cdcb2a837467d0eefdfbe335f1879724e9887b1b36158e623db9621780\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://74abf3da86aee7372b25798f7daeafe408bd532a12e520633bd2b022185ed7be\",\"dweb:/ipfs/QmRzaBN15AzhYNLipoVQU39tMEd58GBF5V5C5eCZDekpXE\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log","anonymous":false},{"inputs":[{"internalType":"address","name":"","type":"address","indexed":false}],"type":"event","name":"log_address","anonymous":false},{"inputs":[{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"log_bytes","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32","indexed":false}],"type":"event","name":"log_bytes32","anonymous":false},{"inputs":[{"internalType":"int256","name":"","type":"int256","indexed":false}],"type":"event","name":"log_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address","name":"val","type":"address","indexed":false}],"type":"event","name":"log_named_address","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes","name":"val","type":"bytes","indexed":false}],"type":"event","name":"log_named_bytes","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes32","name":"val","type":"bytes32","indexed":false}],"type":"event","name":"log_named_bytes32","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false}],"type":"event","name":"log_named_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"string","name":"val","type":"string","indexed":false}],"type":"event","name":"log_named_string","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false}],"type":"event","name":"log_named_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log_string","anonymous":false},{"inputs":[{"internalType":"uint256","name":"","type":"uint256","indexed":false}],"type":"event","name":"log_uint","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"logs","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"IS_TEST","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeArtifacts","outputs":[{"internalType":"string[]","name":"excludedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeContracts","outputs":[{"internalType":"address[]","name":"excludedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"excludedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSenders","outputs":[{"internalType":"address[]","name":"excludedSenders_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"failed","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"setUp"},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifactSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzArtifactSelector[]","name":"targetedArtifactSelectors_","type":"tuple[]","components":[{"internalType":"string","name":"artifact","type":"string"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifacts","outputs":[{"internalType":"string[]","name":"targetedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetContracts","outputs":[{"internalType":"address[]","name":"targetedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetInterfaces","outputs":[{"internalType":"struct StdInvariant.FuzzInterface[]","name":"targetedInterfaces_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"string[]","name":"artifacts","type":"string[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"targetedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSenders","outputs":[{"internalType":"address[]","name":"targetedSenders_","type":"address[]"}]},{"inputs":[{"internalType":"struct PermissionTest.PermissionTestInput","name":"input","type":"tuple","components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"struct PermissionTest.ParameterRuleTestInput[]","name":"rules","type":"tuple[]","components":[{"internalType":"bool","name":"cumulative","type":"bool"},{"internalType":"uint8","name":"operation","type":"uint8"},{"internalType":"bytes32","name":"value","type":"bytes32"},{"internalType":"uint256","name":"offset","type":"uint256"},{"internalType":"bytes32","name":"mask","type":"bytes32"}]}]}],"stateMutability":"nonpayable","type":"function","name":"test_fail_packRulesLengthExceedsMax"},{"inputs":[{"internalType":"struct PermissionTest.PermissionTestInput","name":"input","type":"tuple","components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"struct PermissionTest.ParameterRuleTestInput[]","name":"rules","type":"tuple[]","components":[{"internalType":"bool","name":"cumulative","type":"bool"},{"internalType":"uint8","name":"operation","type":"uint8"},{"internalType":"bytes32","name":"value","type":"bytes32"},{"internalType":"uint256","name":"offset","type":"uint256"},{"internalType":"bytes32","name":"mask","type":"bytes32"}]}]}],"stateMutability":"view","type":"function","name":"test_packAndRead"},{"inputs":[{"internalType":"struct PermissionTest.PermissionTestInput","name":"input","type":"tuple","components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"struct PermissionTest.ParameterRuleTestInput[]","name":"rules","type":"tuple[]","components":[{"internalType":"bool","name":"cumulative","type":"bool"},{"internalType":"uint8","name":"operation","type":"uint8"},{"internalType":"bytes32","name":"value","type":"bytes32"},{"internalType":"uint256","name":"offset","type":"uint256"},{"internalType":"bytes32","name":"mask","type":"bytes32"}]}]},{"internalType":"bytes","name":"prepend","type":"bytes"},{"internalType":"bytes","name":"append","type":"bytes"}],"stateMutability":"view","type":"function","name":"test_packAndReadAtPointer"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/extensions/sessions/Permission.t.sol":"PermissionTest"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/extensions/sessions/explicit/Permission.sol":{"keccak256":"0x0bc35a04da3830c64ec13c32b57f88be6b980228f6b387e800cf70919cdcfb16","urls":["bzz-raw://fcb304612f894699f8e1e40cf134abebe8f7135795bea479b04e967551c59948","dweb:/ipfs/Qme4mD8dh3xU9wbscQwvL4cQcZ2Wv8Fobo2fmU29B3DirV"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"test/extensions/sessions/Permission.t.sol":{"keccak256":"0x7ccef7cdcb2a837467d0eefdfbe335f1879724e9887b1b36158e623db9621780","urls":["bzz-raw://74abf3da86aee7372b25798f7daeafe408bd532a12e520633bd2b022185ed7be","dweb:/ipfs/QmRzaBN15AzhYNLipoVQU39tMEd58GBF5V5C5eCZDekpXE"],"license":"Apache-2.0"}},"version":1},"id":79} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/PermissionValidator.sol/PermissionValidator.json b/contracts/artifacts/wallet-contracts-v3/PermissionValidator.sol/PermissionValidator.json new file mode 100644 index 00000000..925031a0 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/PermissionValidator.sol/PermissionValidator.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"getLimitUsage","inputs":[{"name":"wallet","type":"address","internalType":"address"},{"name":"usageHash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"validatePermission","inputs":[{"name":"permission","type":"tuple","internalType":"struct Permission","components":[{"name":"target","type":"address","internalType":"address"},{"name":"rules","type":"tuple[]","internalType":"struct ParameterRule[]","components":[{"name":"cumulative","type":"bool","internalType":"bool"},{"name":"operation","type":"uint8","internalType":"enum ParameterOperation"},{"name":"value","type":"bytes32","internalType":"bytes32"},{"name":"offset","type":"uint256","internalType":"uint256"},{"name":"mask","type":"bytes32","internalType":"bytes32"}]}]},{"name":"call","type":"tuple","internalType":"struct Payload.Call","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"wallet","type":"address","internalType":"address"},{"name":"signer","type":"address","internalType":"address"},{"name":"usageLimits","type":"tuple[]","internalType":"struct UsageLimit[]","components":[{"name":"usageHash","type":"bytes32","internalType":"bytes32"},{"name":"usageAmount","type":"uint256","internalType":"uint256"}]}],"outputs":[{"name":"","type":"bool","internalType":"bool"},{"name":"newUsageLimits","type":"tuple[]","internalType":"struct UsageLimit[]","components":[{"name":"usageHash","type":"bytes32","internalType":"bytes32"},{"name":"usageAmount","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"event","name":"LimitUsageUpdated","inputs":[{"name":"wallet","type":"address","indexed":false,"internalType":"address"},{"name":"usageHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"usageAmount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"getLimitUsage(address,bytes32)":"23b3713e","validatePermission((address,(bool,uint8,bytes32,uint256,bytes32)[]),(address,uint256,bytes,uint256,bool,bool,uint256),address,address,(bytes32,uint256)[])":"313dade7"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"wallet\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"usageHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"usageAmount\",\"type\":\"uint256\"}],\"name\":\"LimitUsageUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"wallet\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"usageHash\",\"type\":\"bytes32\"}],\"name\":\"getLimitUsage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"cumulative\",\"type\":\"bool\"},{\"internalType\":\"enum ParameterOperation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"offset\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"mask\",\"type\":\"bytes32\"}],\"internalType\":\"struct ParameterRule[]\",\"name\":\"rules\",\"type\":\"tuple[]\"}],\"internalType\":\"struct Permission\",\"name\":\"permission\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call\",\"name\":\"call\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"wallet\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"usageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"usageAmount\",\"type\":\"uint256\"}],\"internalType\":\"struct UsageLimit[]\",\"name\":\"usageLimits\",\"type\":\"tuple[]\"}],\"name\":\"validatePermission\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"usageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"usageAmount\",\"type\":\"uint256\"}],\"internalType\":\"struct UsageLimit[]\",\"name\":\"newUsageLimits\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Michael Standen, Agustin Aguilar\",\"kind\":\"dev\",\"methods\":{\"getLimitUsage(address,bytes32)\":{\"params\":{\"usageHash\":\"The usage hash\",\"wallet\":\"The wallet address\"},\"returns\":{\"_0\":\"The usage amount\"}},\"validatePermission((address,(bool,uint8,bytes32,uint256,bytes32)[]),(address,uint256,bytes,uint256,bool,bool,uint256),address,address,(bytes32,uint256)[])\":{\"params\":{\"call\":\"The call to validate against\",\"permission\":\"The rules permission to validate\",\"signer\":\"The signer address\",\"usageLimits\":\"Array of current usage limits\",\"wallet\":\"The wallet address\"},\"returns\":{\"_0\":\"True if the permission is valid, false otherwise\",\"newUsageLimits\":\"New array of usage limits\"}}},\"title\":\"PermissionValidator\",\"version\":1},\"userdoc\":{\"events\":{\"LimitUsageUpdated(address,bytes32,uint256)\":{\"notice\":\"Emitted when the usage amount for a given wallet and usage hash is updated\"}},\"kind\":\"user\",\"methods\":{\"getLimitUsage(address,bytes32)\":{\"notice\":\"Get the usage amount for a given usage hash and wallet\"},\"validatePermission((address,(bool,uint8,bytes32,uint256,bytes32)[]),(address,uint256,bytes,uint256,bool,bool,uint256),address,address,(bytes32,uint256)[])\":{\"notice\":\"Validates a rules permission\"}},\"notice\":\"Validates permissions for a given call\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/extensions/sessions/explicit/PermissionValidator.sol\":\"PermissionValidator\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/extensions/sessions/explicit/Permission.sol\":{\"keccak256\":\"0x0bc35a04da3830c64ec13c32b57f88be6b980228f6b387e800cf70919cdcfb16\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://fcb304612f894699f8e1e40cf134abebe8f7135795bea479b04e967551c59948\",\"dweb:/ipfs/Qme4mD8dh3xU9wbscQwvL4cQcZ2Wv8Fobo2fmU29B3DirV\"]},\"src/extensions/sessions/explicit/PermissionValidator.sol\":{\"keccak256\":\"0xe970e1ce931ef3779e3ddc9525b40820b7f63746828a440306ff9c984da42234\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://9154a986b7a5565119b2c0993dd9bc9e6e9b3e07eede034c8fde1c9f39a56a30\",\"dweb:/ipfs/QmXbgsr6kYYK5gmge6sosgwbHnFnQW5ntCZCyeNTQqTndD\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"wallet","type":"address","indexed":false},{"internalType":"bytes32","name":"usageHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"usageAmount","type":"uint256","indexed":false}],"type":"event","name":"LimitUsageUpdated","anonymous":false},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bytes32","name":"usageHash","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getLimitUsage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"struct Permission","name":"permission","type":"tuple","components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"struct ParameterRule[]","name":"rules","type":"tuple[]","components":[{"internalType":"bool","name":"cumulative","type":"bool"},{"internalType":"enum ParameterOperation","name":"operation","type":"uint8"},{"internalType":"bytes32","name":"value","type":"bytes32"},{"internalType":"uint256","name":"offset","type":"uint256"},{"internalType":"bytes32","name":"mask","type":"bytes32"}]}]},{"internalType":"struct Payload.Call","name":"call","type":"tuple","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"address","name":"wallet","type":"address"},{"internalType":"address","name":"signer","type":"address"},{"internalType":"struct UsageLimit[]","name":"usageLimits","type":"tuple[]","components":[{"internalType":"bytes32","name":"usageHash","type":"bytes32"},{"internalType":"uint256","name":"usageAmount","type":"uint256"}]}],"stateMutability":"view","type":"function","name":"validatePermission","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"struct UsageLimit[]","name":"newUsageLimits","type":"tuple[]","components":[{"internalType":"bytes32","name":"usageHash","type":"bytes32"},{"internalType":"uint256","name":"usageAmount","type":"uint256"}]}]}],"devdoc":{"kind":"dev","methods":{"getLimitUsage(address,bytes32)":{"params":{"usageHash":"The usage hash","wallet":"The wallet address"},"returns":{"_0":"The usage amount"}},"validatePermission((address,(bool,uint8,bytes32,uint256,bytes32)[]),(address,uint256,bytes,uint256,bool,bool,uint256),address,address,(bytes32,uint256)[])":{"params":{"call":"The call to validate against","permission":"The rules permission to validate","signer":"The signer address","usageLimits":"Array of current usage limits","wallet":"The wallet address"},"returns":{"_0":"True if the permission is valid, false otherwise","newUsageLimits":"New array of usage limits"}}},"version":1},"userdoc":{"kind":"user","methods":{"getLimitUsage(address,bytes32)":{"notice":"Get the usage amount for a given usage hash and wallet"},"validatePermission((address,(bool,uint8,bytes32,uint256,bytes32)[]),(address,uint256,bytes,uint256,bool,bool,uint256),address,address,(bytes32,uint256)[])":{"notice":"Validates a rules permission"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/extensions/sessions/explicit/PermissionValidator.sol":"PermissionValidator"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/extensions/sessions/explicit/Permission.sol":{"keccak256":"0x0bc35a04da3830c64ec13c32b57f88be6b980228f6b387e800cf70919cdcfb16","urls":["bzz-raw://fcb304612f894699f8e1e40cf134abebe8f7135795bea479b04e967551c59948","dweb:/ipfs/Qme4mD8dh3xU9wbscQwvL4cQcZ2Wv8Fobo2fmU29B3DirV"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/PermissionValidator.sol":{"keccak256":"0xe970e1ce931ef3779e3ddc9525b40820b7f63746828a440306ff9c984da42234","urls":["bzz-raw://9154a986b7a5565119b2c0993dd9bc9e6e9b3e07eede034c8fde1c9f39a56a30","dweb:/ipfs/QmXbgsr6kYYK5gmge6sosgwbHnFnQW5ntCZCyeNTQqTndD"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"}},"version":1},"id":39} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/PermissionValidator.t.sol/PermissionValidatorHarness.json b/contracts/artifacts/wallet-contracts-v3/PermissionValidator.t.sol/PermissionValidatorHarness.json new file mode 100644 index 00000000..9183a2d2 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/PermissionValidator.t.sol/PermissionValidatorHarness.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"callSetLimitUsage","inputs":[{"name":"wallet","type":"address","internalType":"address"},{"name":"usageHash","type":"bytes32","internalType":"bytes32"},{"name":"usageAmount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getLimitUsage","inputs":[{"name":"wallet","type":"address","internalType":"address"},{"name":"usageHash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"incrementUsageLimit","inputs":[{"name":"wallet","type":"address","internalType":"address"},{"name":"limits","type":"tuple[]","internalType":"struct UsageLimit[]","components":[{"name":"usageHash","type":"bytes32","internalType":"bytes32"},{"name":"usageAmount","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"validatePermission","inputs":[{"name":"permission","type":"tuple","internalType":"struct Permission","components":[{"name":"target","type":"address","internalType":"address"},{"name":"rules","type":"tuple[]","internalType":"struct ParameterRule[]","components":[{"name":"cumulative","type":"bool","internalType":"bool"},{"name":"operation","type":"uint8","internalType":"enum ParameterOperation"},{"name":"value","type":"bytes32","internalType":"bytes32"},{"name":"offset","type":"uint256","internalType":"uint256"},{"name":"mask","type":"bytes32","internalType":"bytes32"}]}]},{"name":"call","type":"tuple","internalType":"struct Payload.Call","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"wallet","type":"address","internalType":"address"},{"name":"signer","type":"address","internalType":"address"},{"name":"usageLimits","type":"tuple[]","internalType":"struct UsageLimit[]","components":[{"name":"usageHash","type":"bytes32","internalType":"bytes32"},{"name":"usageAmount","type":"uint256","internalType":"uint256"}]}],"outputs":[{"name":"","type":"bool","internalType":"bool"},{"name":"newUsageLimits","type":"tuple[]","internalType":"struct UsageLimit[]","components":[{"name":"usageHash","type":"bytes32","internalType":"bytes32"},{"name":"usageAmount","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"event","name":"LimitUsageUpdated","inputs":[{"name":"wallet","type":"address","indexed":false,"internalType":"address"},{"name":"usageHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"usageAmount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false}],"bytecode":{"object":"0x60808060405234601557610c89908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c806323b3713e14610057578063313dade7146100525780636d74c44c1461004d57638e4181361461004857600080fd5b6104d6565b61048a565b6102bf565b346100cf5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100cf57600435610092816100d4565b73ffffffffffffffffffffffffffffffffffffffff6024359116600052600060205260406000209060005260205260406000205460805260206080f35b600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116036100cf57565b604435906100ff826100d4565b565b606435906100ff826100d4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff82111761015957604052565b61010e565b60a0810190811067ffffffffffffffff82111761015957604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761015957604052565b604051906100ff60408361017a565b67ffffffffffffffff81116101595760051b60200190565b908160e09103126100cf5790565b81601f820112156100cf57803590610207826101ca565b92610215604051948561017a565b82845260208085019360061b830101918183116100cf57602001925b82841061023f575050505090565b6040848303126100cf57602060409182516102598161013d565b863581528287013583820152815201930192610231565b606060209160408101931515815260408382015284518094520192019060005b81811061029d5750505090565b8251805185526020908101518186015260409094019390920191600101610290565b346100cf5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100cf5760043567ffffffffffffffff81116100cf5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126100cf57604051906103398261013d565b8060040135610347816100d4565b825260248101359067ffffffffffffffff82116100cf5701366023820112156100cf576004810135610378816101ca565b91610386604051938461017a565b8183526020600460a0828601940283010101903682116100cf57602401915b81831061042457505050602082015260243567ffffffffffffffff81116100cf576103d49036906004016101e2565b906103dd6100f2565b6103e5610101565b906084359367ffffffffffffffff85116100cf5761040a6104109536906004016101f0565b936107d3565b9061042060405192839283610270565b0390f35b60a0833603126100cf576040519061043b8261015e565b833580151581036100cf57825260208401359060048210156100cf57826020928360a09501526040860135604082015260608601356060820152608086013560808201528152019201916103a5565b346100cf5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100cf576104d46004356104c8816100d4565b60243560443591610be7565b005b346100cf5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100cf57600435610511816100d4565b6024359067ffffffffffffffff82116100cf57366023830112156100cf5781600401359067ffffffffffffffff82116100cf573660248360061b850101116100cf5760246104d4930190610b61565b3561056a816100d4565b90565b906001820180921161057b57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9190820180921161057b57565b604051906105c48261013d565b60006020838281520152565b906105da826101ca565b6105e7604051918261017a565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061061582946101ca565b019060005b82811061062657505050565b6020906106316105b7565b8282850101520161061a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518210156106805760209160051b010190565b61063d565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156100cf570180359067ffffffffffffffff82116100cf576020019181360383136100cf57565b600411156106e057565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9392919073ffffffffffffffffffffffffffffffffffffffff16845260606020850152602060a085019173ffffffffffffffffffffffffffffffffffffffff81511660608701520151604060808601528051809252602060c0860191019160005b81811061078257505060409150930152565b9091835180511515825260208101519060048210156106e05782608060a092602094856001970152604081015160408401526060810151606084015201516080820152019401910192919092610770565b9490919293946107f7815173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff61083161081886610560565b73ffffffffffffffffffffffffffffffffffffffff1690565b911603610b465785519261085461084f6020840195865151906105aa565b6105d0565b9460005b885181101561088b578061086e6001928b61066c565b51610879828a61066c565b52610884818961066c565b5001610858565b50909294919395875160005b88518051821015610b3557816108ac9161066c565b516108d06108bd6040890189610685565b5060608301519081013591602090910190565b50608082015116906108e28151151590565b6109b5575b6020810180516108f6816106d6565b6108ff816106d6565b61092557506040015103610917576001905b01610897565b506000989750505050505050565b60038151610932816106d6565b61093b816106d6565b036109525750604001511061091757600190610911565b6001815161095f816106d6565b610968816106d6565b0361097f5750604001511461091757600190610911565b6002905161098c816106d6565b610995816106d6565b146109a5575b5050600190610911565b604001511161091757388061099b565b9691989795929093998a6109d8610a048c6040519283918c60208401968761070f565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261017a565b51902096600093610a136105b7565b9c60005b8751811015610b1d57610a2a818961066c565b515115610ad0578a610a3c828a61066c565b515114610a4b57600101610a17565b6020949e50879a9198939c9d9650610a6990610a7e939c969861066c565b519284840151915b8215610a89575b506105aa565b9182910152906108e7565b610ac8919250610ab98b73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b90600052602052604060002090565b549038610a78565b6020949e50610a7e929b955097610b1789899c99959e9f98939a610b1190610af66101bb565b978c895260008a8a015288610b0b838361066c565b5261066c565b5061056d565b97610a71565b5096946020939d929b9c95610a7e929b95979a610a71565b505083525060019650909450505050565b509250505060009190565b91908110156106805760061b0190565b9060005b838110610b725750505050565b80610b806001928685610b51565b3573ffffffffffffffffffffffffffffffffffffffff85166000526000602052604060002090600052602052610be1604060002054610bda610bc3848988610b51565b35916020610bd2868b8a610b51565b0135906105aa565b9086610be7565b01610b65565b907f42063b8d32ac0a88f94053143bb30a789b3d5dfabb27d6c8a54e23d4fef308519273ffffffffffffffffffffffffffffffffffffffff60609316918260005260006020526040600020816000526020528160406000205560405192835260208301526040820152a156fea2646970667358221220746e7ceeab32b330af2867956d7d03f77db8bc9469e15e5cbe12fff9f55cda6664736f6c634300081c0033","sourceMap":"384:513:84:-:0;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436101561001257600080fd5b60003560e01c806323b3713e14610057578063313dade7146100525780636d74c44c1461004d57638e4181361461004857600080fd5b6104d6565b61048a565b6102bf565b346100cf5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100cf57600435610092816100d4565b73ffffffffffffffffffffffffffffffffffffffff6024359116600052600060205260406000209060005260205260406000205460805260206080f35b600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116036100cf57565b604435906100ff826100d4565b565b606435906100ff826100d4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff82111761015957604052565b61010e565b60a0810190811067ffffffffffffffff82111761015957604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761015957604052565b604051906100ff60408361017a565b67ffffffffffffffff81116101595760051b60200190565b908160e09103126100cf5790565b81601f820112156100cf57803590610207826101ca565b92610215604051948561017a565b82845260208085019360061b830101918183116100cf57602001925b82841061023f575050505090565b6040848303126100cf57602060409182516102598161013d565b863581528287013583820152815201930192610231565b606060209160408101931515815260408382015284518094520192019060005b81811061029d5750505090565b8251805185526020908101518186015260409094019390920191600101610290565b346100cf5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100cf5760043567ffffffffffffffff81116100cf5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126100cf57604051906103398261013d565b8060040135610347816100d4565b825260248101359067ffffffffffffffff82116100cf5701366023820112156100cf576004810135610378816101ca565b91610386604051938461017a565b8183526020600460a0828601940283010101903682116100cf57602401915b81831061042457505050602082015260243567ffffffffffffffff81116100cf576103d49036906004016101e2565b906103dd6100f2565b6103e5610101565b906084359367ffffffffffffffff85116100cf5761040a6104109536906004016101f0565b936107d3565b9061042060405192839283610270565b0390f35b60a0833603126100cf576040519061043b8261015e565b833580151581036100cf57825260208401359060048210156100cf57826020928360a09501526040860135604082015260608601356060820152608086013560808201528152019201916103a5565b346100cf5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100cf576104d46004356104c8816100d4565b60243560443591610be7565b005b346100cf5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100cf57600435610511816100d4565b6024359067ffffffffffffffff82116100cf57366023830112156100cf5781600401359067ffffffffffffffff82116100cf573660248360061b850101116100cf5760246104d4930190610b61565b3561056a816100d4565b90565b906001820180921161057b57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9190820180921161057b57565b604051906105c48261013d565b60006020838281520152565b906105da826101ca565b6105e7604051918261017a565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061061582946101ca565b019060005b82811061062657505050565b6020906106316105b7565b8282850101520161061a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518210156106805760209160051b010190565b61063d565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156100cf570180359067ffffffffffffffff82116100cf576020019181360383136100cf57565b600411156106e057565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9392919073ffffffffffffffffffffffffffffffffffffffff16845260606020850152602060a085019173ffffffffffffffffffffffffffffffffffffffff81511660608701520151604060808601528051809252602060c0860191019160005b81811061078257505060409150930152565b9091835180511515825260208101519060048210156106e05782608060a092602094856001970152604081015160408401526060810151606084015201516080820152019401910192919092610770565b9490919293946107f7815173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff61083161081886610560565b73ffffffffffffffffffffffffffffffffffffffff1690565b911603610b465785519261085461084f6020840195865151906105aa565b6105d0565b9460005b885181101561088b578061086e6001928b61066c565b51610879828a61066c565b52610884818961066c565b5001610858565b50909294919395875160005b88518051821015610b3557816108ac9161066c565b516108d06108bd6040890189610685565b5060608301519081013591602090910190565b50608082015116906108e28151151590565b6109b5575b6020810180516108f6816106d6565b6108ff816106d6565b61092557506040015103610917576001905b01610897565b506000989750505050505050565b60038151610932816106d6565b61093b816106d6565b036109525750604001511061091757600190610911565b6001815161095f816106d6565b610968816106d6565b0361097f5750604001511461091757600190610911565b6002905161098c816106d6565b610995816106d6565b146109a5575b5050600190610911565b604001511161091757388061099b565b9691989795929093998a6109d8610a048c6040519283918c60208401968761070f565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261017a565b51902096600093610a136105b7565b9c60005b8751811015610b1d57610a2a818961066c565b515115610ad0578a610a3c828a61066c565b515114610a4b57600101610a17565b6020949e50879a9198939c9d9650610a6990610a7e939c969861066c565b519284840151915b8215610a89575b506105aa565b9182910152906108e7565b610ac8919250610ab98b73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b90600052602052604060002090565b549038610a78565b6020949e50610a7e929b955097610b1789899c99959e9f98939a610b1190610af66101bb565b978c895260008a8a015288610b0b838361066c565b5261066c565b5061056d565b97610a71565b5096946020939d929b9c95610a7e929b95979a610a71565b505083525060019650909450505050565b509250505060009190565b91908110156106805760061b0190565b9060005b838110610b725750505050565b80610b806001928685610b51565b3573ffffffffffffffffffffffffffffffffffffffff85166000526000602052604060002090600052602052610be1604060002054610bda610bc3848988610b51565b35916020610bd2868b8a610b51565b0135906105aa565b9086610be7565b01610b65565b907f42063b8d32ac0a88f94053143bb30a789b3d5dfabb27d6c8a54e23d4fef308519273ffffffffffffffffffffffffffffffffffffffff60609316918260005260006020526040600020816000526020528160406000205560405192835260208301526040820152a156fea2646970667358221220746e7ceeab32b330af2867956d7d03f77db8bc9469e15e5cbe12fff9f55cda6664736f6c634300081c0033","sourceMap":"384:513:84:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;2725:9:39;384:513:84;;;2725:9:39;384:513:84;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;877:11;384:513;;;;;:::i;:::-;;;;;877:11;;:::i;:::-;384:513;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;-1:-1:-1;384:513:84;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;384:513:84;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;384:513:84;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1890:3002:39;;;;;;;384:513:84;;;;;;;;;2138:28:39;2159:7;;;:::i;:::-;384:513:84;;;;2138:28:39;384:513:84;;2138:28:39;2134:76;;384:513:84;;2332:16:39;2294:62;2311:44;2332:16;;;;;;384:513:84;2311:44:39;;:::i;:::-;2294:62;:::i;:::-;2367:13;384:513:84;2406:3:39;384:513:84;;2382:22:39;;;;;2439:14;;384:513:84;2439:14:39;;;:::i;:::-;;2419:34;;;;:::i;:::-;;;;;;:::i;:::-;;384:513:84;2367:13:39;;2382:22;;;;;;;;384:513:84;;;2590:3:39;2565:16;;384:513:84;;2561:27:39;;;;;2631:19;;;;:::i;:::-;;2926:232:68;2725:9:39;;;;;;:::i;:::-;-1:-1:-1;384:513:84;2747:11:39;;384:513:84;3047:107:68;;;;;;;;;;2926:232;;2706:53:39;2804:9;;;384:513:84;2796:17:39;384:513:84;;;;;;;;;2822:1237:39;;2590:3;2332:16;4107:14;;384:513:84;;;;;:::i;:::-;;;;:::i;:::-;4107:42:39;;4174:10;2725:9;4174:10;384:513:84;4165:19:39;4161:75;;384:513:84;4103:649:39;;384:513:84;2546:13:39;;4161:75;-1:-1:-1;384:513:84;;4198:27:39;-1:-1:-1;;;;;;;4198:27:39:o;4103:649::-;4272:37;384:513:84;;;;;:::i;:::-;;;;:::i;:::-;4254:55:39;4272:37;;4350:10;2725:9;4350:10;384:513:84;-1:-1:-1;4321:92:39;;384:513:84;4250:502:39;4103:649;;4250:502;384:513:84;;;;;;:::i;:::-;;;;:::i;:::-;4431:46:39;384:513:84;;4502:10:39;2725:9;4502:10;384:513:84;4493:19:39;4489:75;;384:513:84;4427:325:39;4103:649;;4427:325;4600:40;384:513:84;;;;;:::i;:::-;;;;:::i;:::-;4582:58:39;4578:174;;4427:325;;;384:513:84;4427:325:39;4103:649;;4578:174;2725:9;4681:10;384:513:84;-1:-1:-1;4652:92:39;;4578:174;;;;2822:1237;384:513:84;;;;;;;;;;3017:33:39;;384:513:84;2725:9:39;384:513:84;3017:33:39;;;;2332:16;3017:33;;;;;:::i;:::-;;;;;;;;;:::i;:::-;384:513:84;3007:44:39;;3061:21;384:513:84;3092:28:39;384:513:84;;:::i;:::-;3135:13:39;384:513:84;3177:3:39;384:513:84;;3150:25:39;;;;;3198:17;;;;:::i;:::-;;384:513:84;3198:41:39;3194:283;;3492:17;;;;;:::i;:::-;;384:513:84;3492:40:39;3488:210;;384:513:84;;3135:13:39;;3488:210;2332:16;3597:17;;;;;;;;;;;;;;3896:25;3597:17;;;;;:::i;:::-;;3644:22;;;;384:513:84;3680:5:39;3130:578;3721:18;;3717:144;;3130:578;3896:25;;:::i;:::-;3931:22;;;;384:513:84;2822:1237:39;;;3717:144;1060:29;:18;;;;;384:513:84;;;;;;;;;;;;1060:18:39;384:513:84;;;;;;;;;;1060:29:39;384:513:84;3717:144:39;;;;3194:283;2332:16;384:513:84;;;3896:25:39;384:513:84;;;;;3440:5:39;384:513:84;;;;;;;;;;3376:30:39;384:513:84;;;:::i;:::-;;;;;;3310:52:39;;;384:513:84;3297:65:39;3376:30;;;;:::i;:::-;;;:::i;:::-;;3440:5;:::i;:::-;3459;;;3150:25;;;;2332:16;3150:25;;;;;;3896;3150;;;;;;;2561:27;-1:-1:-1;;4788:64:39;;-1:-1:-1;384:513:84;;-1:-1:-1;2561:27:39;;-1:-1:-1;;;;1890:3002:39:o;2134:76::-;2176:27;;;;;384:513:84;2176:27:39;;:::o;384:513:84:-;;;;;;;;;;;;:::o;448:296::-;;555:1;558:17;;;;;;448:296;;;;:::o;577:3::-;630:9;;384:513;630:9;;;;:::i;:::-;384:513;;;;555:1;384:513;555:1;384:513;;;555:1;384:513;;555:1;384:513;;;701:31;384:513;555:1;384:513;;701:31;680:9;;;;;:::i;:::-;384:513;711:9;384:513;711:9;;;;;:::i;:::-;:21;384:513;701:31;;:::i;:::-;;;;:::i;:::-;384:513;543:13;;1286:202:39;;1434:49;1286:202;384:513:84;;1286:202:39;384:513:84;;;1380:10:39;384:513:84;1380:10:39;384:513:84;;;1380:10:39;384:513:84;;1380:10:39;384:513:84;;;;;1380:10:39;384:513:84;;;;;;;;;;;;;;;1434:49:39;1286:202::o","linkReferences":{}},"methodIdentifiers":{"callSetLimitUsage(address,bytes32,uint256)":"6d74c44c","getLimitUsage(address,bytes32)":"23b3713e","incrementUsageLimit(address,(bytes32,uint256)[])":"8e418136","validatePermission((address,(bool,uint8,bytes32,uint256,bytes32)[]),(address,uint256,bytes,uint256,bool,bool,uint256),address,address,(bytes32,uint256)[])":"313dade7"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"wallet\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"usageHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"usageAmount\",\"type\":\"uint256\"}],\"name\":\"LimitUsageUpdated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"wallet\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"usageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"usageAmount\",\"type\":\"uint256\"}],\"name\":\"callSetLimitUsage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"wallet\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"usageHash\",\"type\":\"bytes32\"}],\"name\":\"getLimitUsage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"wallet\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"usageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"usageAmount\",\"type\":\"uint256\"}],\"internalType\":\"struct UsageLimit[]\",\"name\":\"limits\",\"type\":\"tuple[]\"}],\"name\":\"incrementUsageLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"cumulative\",\"type\":\"bool\"},{\"internalType\":\"enum ParameterOperation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"offset\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"mask\",\"type\":\"bytes32\"}],\"internalType\":\"struct ParameterRule[]\",\"name\":\"rules\",\"type\":\"tuple[]\"}],\"internalType\":\"struct Permission\",\"name\":\"permission\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call\",\"name\":\"call\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"wallet\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"usageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"usageAmount\",\"type\":\"uint256\"}],\"internalType\":\"struct UsageLimit[]\",\"name\":\"usageLimits\",\"type\":\"tuple[]\"}],\"name\":\"validatePermission\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"usageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"usageAmount\",\"type\":\"uint256\"}],\"internalType\":\"struct UsageLimit[]\",\"name\":\"newUsageLimits\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getLimitUsage(address,bytes32)\":{\"params\":{\"usageHash\":\"The usage hash\",\"wallet\":\"The wallet address\"},\"returns\":{\"_0\":\"The usage amount\"}},\"validatePermission((address,(bool,uint8,bytes32,uint256,bytes32)[]),(address,uint256,bytes,uint256,bool,bool,uint256),address,address,(bytes32,uint256)[])\":{\"params\":{\"call\":\"The call to validate against\",\"permission\":\"The rules permission to validate\",\"signer\":\"The signer address\",\"usageLimits\":\"Array of current usage limits\",\"wallet\":\"The wallet address\"},\"returns\":{\"_0\":\"True if the permission is valid, false otherwise\",\"newUsageLimits\":\"New array of usage limits\"}}},\"version\":1},\"userdoc\":{\"events\":{\"LimitUsageUpdated(address,bytes32,uint256)\":{\"notice\":\"Emitted when the usage amount for a given wallet and usage hash is updated\"}},\"kind\":\"user\",\"methods\":{\"getLimitUsage(address,bytes32)\":{\"notice\":\"Get the usage amount for a given usage hash and wallet\"},\"validatePermission((address,(bool,uint8,bytes32,uint256,bytes32)[]),(address,uint256,bytes,uint256,bool,bool,uint256),address,address,(bytes32,uint256)[])\":{\"notice\":\"Validates a rules permission\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/extensions/sessions/explicit/PermissionValidator.t.sol\":\"PermissionValidatorHarness\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/extensions/sessions/explicit/Permission.sol\":{\"keccak256\":\"0x0bc35a04da3830c64ec13c32b57f88be6b980228f6b387e800cf70919cdcfb16\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://fcb304612f894699f8e1e40cf134abebe8f7135795bea479b04e967551c59948\",\"dweb:/ipfs/Qme4mD8dh3xU9wbscQwvL4cQcZ2Wv8Fobo2fmU29B3DirV\"]},\"src/extensions/sessions/explicit/PermissionValidator.sol\":{\"keccak256\":\"0xe970e1ce931ef3779e3ddc9525b40820b7f63746828a440306ff9c984da42234\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://9154a986b7a5565119b2c0993dd9bc9e6e9b3e07eede034c8fde1c9f39a56a30\",\"dweb:/ipfs/QmXbgsr6kYYK5gmge6sosgwbHnFnQW5ntCZCyeNTQqTndD\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"test/extensions/sessions/explicit/PermissionValidator.t.sol\":{\"keccak256\":\"0x8ce86fb1785e0f79c087de95fb7b9dd9d0d167e9a8508014a5e7c1454065a436\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://486cd4c90976fdacda86b94e9646039899d3339238717acc1d2a1c1ddfa7cbd5\",\"dweb:/ipfs/QmRZMxDcSNQQhX9bNh4sPdqQD3MspMNfzYbEPWhzfht4wN\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"wallet","type":"address","indexed":false},{"internalType":"bytes32","name":"usageHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"usageAmount","type":"uint256","indexed":false}],"type":"event","name":"LimitUsageUpdated","anonymous":false},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bytes32","name":"usageHash","type":"bytes32"},{"internalType":"uint256","name":"usageAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"callSetLimitUsage"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bytes32","name":"usageHash","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getLimitUsage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"struct UsageLimit[]","name":"limits","type":"tuple[]","components":[{"internalType":"bytes32","name":"usageHash","type":"bytes32"},{"internalType":"uint256","name":"usageAmount","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"incrementUsageLimit"},{"inputs":[{"internalType":"struct Permission","name":"permission","type":"tuple","components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"struct ParameterRule[]","name":"rules","type":"tuple[]","components":[{"internalType":"bool","name":"cumulative","type":"bool"},{"internalType":"enum ParameterOperation","name":"operation","type":"uint8"},{"internalType":"bytes32","name":"value","type":"bytes32"},{"internalType":"uint256","name":"offset","type":"uint256"},{"internalType":"bytes32","name":"mask","type":"bytes32"}]}]},{"internalType":"struct Payload.Call","name":"call","type":"tuple","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"address","name":"wallet","type":"address"},{"internalType":"address","name":"signer","type":"address"},{"internalType":"struct UsageLimit[]","name":"usageLimits","type":"tuple[]","components":[{"internalType":"bytes32","name":"usageHash","type":"bytes32"},{"internalType":"uint256","name":"usageAmount","type":"uint256"}]}],"stateMutability":"view","type":"function","name":"validatePermission","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"struct UsageLimit[]","name":"newUsageLimits","type":"tuple[]","components":[{"internalType":"bytes32","name":"usageHash","type":"bytes32"},{"internalType":"uint256","name":"usageAmount","type":"uint256"}]}]}],"devdoc":{"kind":"dev","methods":{"getLimitUsage(address,bytes32)":{"params":{"usageHash":"The usage hash","wallet":"The wallet address"},"returns":{"_0":"The usage amount"}},"validatePermission((address,(bool,uint8,bytes32,uint256,bytes32)[]),(address,uint256,bytes,uint256,bool,bool,uint256),address,address,(bytes32,uint256)[])":{"params":{"call":"The call to validate against","permission":"The rules permission to validate","signer":"The signer address","usageLimits":"Array of current usage limits","wallet":"The wallet address"},"returns":{"_0":"True if the permission is valid, false otherwise","newUsageLimits":"New array of usage limits"}}},"version":1},"userdoc":{"kind":"user","methods":{"getLimitUsage(address,bytes32)":{"notice":"Get the usage amount for a given usage hash and wallet"},"validatePermission((address,(bool,uint8,bytes32,uint256,bytes32)[]),(address,uint256,bytes,uint256,bool,bool,uint256),address,address,(bytes32,uint256)[])":{"notice":"Validates a rules permission"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/extensions/sessions/explicit/PermissionValidator.t.sol":"PermissionValidatorHarness"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/extensions/sessions/explicit/Permission.sol":{"keccak256":"0x0bc35a04da3830c64ec13c32b57f88be6b980228f6b387e800cf70919cdcfb16","urls":["bzz-raw://fcb304612f894699f8e1e40cf134abebe8f7135795bea479b04e967551c59948","dweb:/ipfs/Qme4mD8dh3xU9wbscQwvL4cQcZ2Wv8Fobo2fmU29B3DirV"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/PermissionValidator.sol":{"keccak256":"0xe970e1ce931ef3779e3ddc9525b40820b7f63746828a440306ff9c984da42234","urls":["bzz-raw://9154a986b7a5565119b2c0993dd9bc9e6e9b3e07eede034c8fde1c9f39a56a30","dweb:/ipfs/QmXbgsr6kYYK5gmge6sosgwbHnFnQW5ntCZCyeNTQqTndD"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"test/extensions/sessions/explicit/PermissionValidator.t.sol":{"keccak256":"0x8ce86fb1785e0f79c087de95fb7b9dd9d0d167e9a8508014a5e7c1454065a436","urls":["bzz-raw://486cd4c90976fdacda86b94e9646039899d3339238717acc1d2a1c1ddfa7cbd5","dweb:/ipfs/QmRZMxDcSNQQhX9bNh4sPdqQD3MspMNfzYbEPWhzfht4wN"],"license":"Apache-2.0"}},"version":1},"id":84} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/PermissionValidator.t.sol/PermissionValidatorTest.json b/contracts/artifacts/wallet-contracts-v3/PermissionValidator.t.sol/PermissionValidatorTest.json new file mode 100644 index 00000000..13a2eebc --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/PermissionValidator.t.sol/PermissionValidatorTest.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"excludeArtifacts","inputs":[],"outputs":[{"name":"excludedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"excludeContracts","inputs":[],"outputs":[{"name":"excludedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"excludeSelectors","inputs":[],"outputs":[{"name":"excludedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"excludeSenders","inputs":[],"outputs":[{"name":"excludedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"setUp","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"targetArtifactSelectors","inputs":[],"outputs":[{"name":"targetedArtifactSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzArtifactSelector[]","components":[{"name":"artifact","type":"string","internalType":"string"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetArtifacts","inputs":[],"outputs":[{"name":"targetedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"targetContracts","inputs":[],"outputs":[{"name":"targetedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"targetInterfaces","inputs":[],"outputs":[{"name":"targetedInterfaces_","type":"tuple[]","internalType":"struct StdInvariant.FuzzInterface[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"artifacts","type":"string[]","internalType":"string[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSelectors","inputs":[],"outputs":[{"name":"targetedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSenders","inputs":[],"outputs":[{"name":"targetedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"test_LimitUsageUpdated","inputs":[{"name":"wallet","type":"address","internalType":"address"},{"name":"usageHash","type":"bytes32","internalType":"bytes32"},{"name":"usageAmount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_validatePermission_Cumulative","inputs":[{"name":"value","type":"uint256","internalType":"uint256"},{"name":"limit","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_validatePermission_Equal","inputs":[{"name":"selector","type":"bytes4","internalType":"bytes4"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_validatePermission_GreaterThanOrEqual","inputs":[{"name":"threshold","type":"uint256","internalType":"uint256"},{"name":"testValue","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_validatePermission_NotEqual","inputs":[{"name":"testValue","type":"uint256","internalType":"uint256"},{"name":"compareValue","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_validatePermission_NotEqual_fail","inputs":[{"name":"testValue","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_validatePermission_WithMaskAndOffset","inputs":[{"name":"callData","type":"bytes","internalType":"bytes"},{"name":"mask","type":"bytes32","internalType":"bytes32"},{"name":"offset","type":"uint256","internalType":"uint256"},{"name":"secondCallData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_validatePermission_WrongTarget","inputs":[{"name":"wrongTarget","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"view"},{"type":"event","name":"LimitUsageUpdated","inputs":[{"name":"wallet","type":"address","indexed":false,"internalType":"address"},{"name":"usageHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"usageAmount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false}],"bytecode":{"object":"0x60808060405234602f57600160ff19600c541617600c55600160ff19601f541617601f5561427e90816100358239f35b600080fdfe608080604052600436101561001357600080fd5b600090813560e01c9081630a9254e414612525575080631ed7831c1461247c5780632ade3880146122505780633e5e3c23146121a75780633f7286f4146120fe5780634720917914611d2d57806366d9a9a014611bd257806368759f0314611a2857806385226c8114611980578063916a17c6146118ab578063a3daca27146114f4578063ade0444f146112af578063b0464fdc146111da578063b5508aa914611132578063ba414fa6146110ef578063bbc69fb114610f15578063d00b36b514610bf9578063d6320b71146109ff578063defbce2914610204578063e20c9f711461014b5763fa7626d41461010857600080fd5b3461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014857602060ff601f54166040519015158152f35b80fd5b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101485760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b8181106101d8576101d4856101c881870382612909565b60405191829182612603565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016101b1565b503461014857806102417ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe61023836612708565b849195506133c5565b9161030a83604092848085516102578782612909565b600c81527f426f756e6420726573756c740000000000000000000000000000000000000000602082015286516102f4816102c260208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528b60248401526064830190612653565b886044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612909565b51906a636f6e736f6c652e6c6f675afa50613355565b610312612a69565b90610388835192610322846128b5565b61dead84526020840190815284519061033a826128d1565b60018252600360208301528786830152600460608301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6080830152519061038282612aeb565b52612aeb565b5082517f12345678000000000000000000000000000000000000000000000000000000006020820152816024820152602481526103c6604482612909565b8351916103d2836128ed565b61dead835260208301869052848301918252606083018690526080830186905260a08301869052600160c0840152845196604061040f818a612909565b600189527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00197875b8981106109ae5750876104b49798995061045182612aeb565b515288602061045f83612aeb565b5101528873ffffffffffffffffffffffffffffffffffffffff601f5460081c16918951809981927f313dade7000000000000000000000000000000000000000000000000000000008352898b60048501612c5d565b0381845afa9687156109a45789908a98610985575b508851610509916104da8b83612909565b601982527f46697273742063616c6c2073686f756c642073756363656564000000000000006020830152613278565b8887518951906105198b83612909565b601b82527f53686f756c642068617665206f6e65207573616765206c696d697400000000006020830152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561096c576105ab9183918c5193849283927f88b44c85000000000000000000000000000000000000000000000000000000008452600484015260016024840152606060448401526064830190612653565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561096257610970575b5060206105db89612aeb565b5101518951906105eb8b83612909565b601c82527f557361676520616d6f756e742073686f756c642062652076616c7565000000006020830152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561096c5761067c9183918c5193849283927f88b44c850000000000000000000000000000000000000000000000000000000084526004840152896024840152606060448401526064830190612653565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561096257610949575b50813b156101485788517f8e41813600000000000000000000000000000000000000000000000000000000815261beef6004820152602481018a905291819083908183816106f1604482018f612c1d565b03925af191821561093d578492610920575b505061070e9161306a565b600181018091116108f3579161072f61084c979694928996948119916133c5565b908580886102c26107ab82516107458482612909565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152835192839160208301957fb60e72cc00000000000000000000000000000000000000000000000000000000875260248401526064830190612653565b51906a636f6e736f6c652e6c6f675afa508651917f123456780000000000000000000000000000000000000000000000000000000060208401526024830152602482526107f9604483612909565b5273ffffffffffffffffffffffffffffffffffffffff601f5460081c16918551968794859384937f313dade700000000000000000000000000000000000000000000000000000000855260048501612c5d565b03915afa80156108e9576108c39284916108c6575b507f756c6420657863656564206c696d697400000000000000000000000000000000825192610891606085612909565b603084527f5365636f6e642063616c6c2073686f756c64206661696c20617320697420776f60208501528301526132ff565b80f35b6108e291503d8086833e6108da8183612909565b810190612b6f565b5038610861565b81513d85823e3d90fd5b6024887f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b8192509061092d91612909565b61093957818838610703565b8780fd5b508851903d90823e3d90fd5b8161095391612909565b61095e5788386106a0565b8880fd5b8a513d84823e3d90fd5b8280fd5b8161097a91612909565b61095e5788386105cf565b610509985061099e91503d808c833e6108da8183612909565b976104c9565b88513d8b823e3d90fd5b60209088516109bc816128b5565b8a81528a8382015282828501015201610438565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b50346101485760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014857610b5981600435610a3e612a69565b610aae60405191610a4e836128b5565b61dead83526020830190815260405190610a67826128d1565b858252600160208301528460408301528560608301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6080830152519061038282612aeb565b5060405191602083015260208252610ac7604083612909565b60405191610ad4836128ed565b61dead835283602084015260408301528260608301528260808301528260a0830152600160c0830152610b05612b27565b9173ffffffffffffffffffffffffffffffffffffffff601f5460081c1691604051958694859384937f313dade700000000000000000000000000000000000000000000000000000000855260048501612c5d565b03915afa8015610bee576108c3918391610bd3575b5060405190610b7e606083612909565b602182527f53686f756c64206661696c207768656e2076616c75657320617265206571756160208301527f6c0000000000000000000000000000000000000000000000000000000000000060408301526132ff565b610be791503d8085833e6108da8183612909565b5038610b6e565b6040513d84823e3d90fd5b50346101485760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101485780610c32612892565b6024359060443590737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610eec576040517f491cc7c200000000000000000000000000000000000000000000000000000000815260016004820152600160248201526001604482015260016064820152848160848183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115610ef1578591610f00575b50506040805173ffffffffffffffffffffffffffffffffffffffff83168152602081018590529081018390527f42063b8d32ac0a88f94053143bb30a789b3d5dfabb27d6c8a54e23d4fef3085190606090a173ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b15610efc576040517f6d74c44c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015260248101859052604481018490529085908290606490829084905af1908115610ef1578591610ed7575b505073ffffffffffffffffffffffffffffffffffffffff604460209282601f5460081c1660405196879485937f23b3713e00000000000000000000000000000000000000000000000000000000855216600484015260248301525afa918215610ecc578392610e98575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610e9457604051917f98296c54000000000000000000000000000000000000000000000000000000008352600483015260248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610bee57610e835750f35b81610e8d91612909565b6101485780f35b5050fd5b9091506020813d602011610ec4575b81610eb460209383612909565b81010312610e9457519038610e0d565b3d9150610ea7565b6040513d85823e3d90fd5b81610ee191612909565b610eec578338610da3565b505050fd5b6040513d87823e3d90fd5b8480fd5b81610f0a91612909565b610eec578338610cc2565b50346101485760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101485761105a81610f51612892565b610f59612a69565b610fca60405191610f69836128b5565b61dead83526020830190815260405190610f82826128d1565b85825285602083015261dead60408301528560608301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6080830152519061038282612aeb565b506040517f1234567800000000000000000000000000000000000000000000000000000000602082015283602482015260248152611009604482612909565b73ffffffffffffffffffffffffffffffffffffffff6040519361102b856128ed565b16835283602084015260408301528260608301528260808301528260a0830152600160c0830152610b05612b27565b03915afa8015610bee576108c39183916110d4575b506040519061107f606083612909565b602682527f53686f756c64206661696c207768656e2074617267657420646f6573206e6f7460208301527f206d61746368000000000000000000000000000000000000000000000000000060408301526132ff565b6110e891503d8085833e6108da8183612909565b503861106f565b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014857602061112861316c565b6040519015158152f35b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101485760195461116d8161294a565b9161117b6040519384612909565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b8383106111bd57604051806101d48782612741565b6001602081926111cc85612962565b8152019201920191906111a8565b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014857601c546112158161294a565b916112236040519384612909565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b83831061126557604051806101d487826127bf565b60026020600192604051611278816128b5565b73ffffffffffffffffffffffffffffffffffffffff865416815261129d858701612dc3565b83820152815201920192019190611250565b5034610148576113e66112c136612708565b836112ca612a69565b61133a604051916112da836128b5565b61dead835260208301908152604051906112f3826128d1565b848252600260208301528660408301528460608301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6080830152519061038282612aeb565b506040519083602083015260208252611354604083612909565b60405191611361836128ed565b61dead835283602084015260408301528260608301528260808301528260a0830152600160c0830152611392612b27565b9173ffffffffffffffffffffffffffffffffffffffff601f5460081c1691604051978894859384937f313dade700000000000000000000000000000000000000000000000000000000855260048501612c5d565b03915afa9283156114e95784936114cc575b5010611465576040516108c391611410606083612909565b602682527f53686f756c64207375636365656420776974682076616c7565203e3d2074687260208301527f6573686f6c6400000000000000000000000000000000000000000000000000006040830152613278565b6040516108c391611477606083612909565b602282527f53686f756c64206661696c20776974682076616c7565203c207468726573686f60208301527f6c6400000000000000000000000000000000000000000000000000000000000060408301526132ff565b6114e19193503d8086833e6108da8183612909565b5091386113f8565b6040513d86823e3d90fd5b50346101485760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101485760043567ffffffffffffffff81116118a757611544903690600401612864565b60243560643567ffffffffffffffff8111610efc57611567903690600401612864565b9390737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156118a357856040517f4c63e562000000000000000000000000000000000000000000000000000000008152602086101560048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610bee5761188e575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08401848111611861576116158791604435613355565b9284848201351695611698611628612a69565b9261167860405194611639866128b5565b61dead86526020860190815260405190611652826128d1565b8782528760208301528b60408301528960608301528a6080830152519061038282612aeb565b5060405192611686846128ed565b61dead845285602085015236916130a6565b90604081019182528360608201528360808201528360a0820152600160c08201526116c1612b27565b9273ffffffffffffffffffffffffffffffffffffffff601f5460081c16926040519a7f313dade7000000000000000000000000000000000000000000000000000000008c52868c8061171889888860048501612c5d565b0381885afa9081156118565761174561174d926117859e8a9161183b575b5061173f61310b565b90613278565b3690896130a6565b9052604051998a94859384937f313dade700000000000000000000000000000000000000000000000000000000855260048501612c5d565b03915afa948515611830578695611813575b50013516036117ac576108c39061173f61310b565b6040516108c3916117be606083612909565b603882527f53686f756c64206661696c207768656e206d61736b65642076616c756520646f60208301527f6573206e6f74206d617463682077697468206f6666736574000000000000000060408301526132ff565b6118289195503d8088833e6108da8183612909565b509338611797565b6040513d88823e3d90fd5b61184f91503d808c833e6108da8183612909565b5038611736565b6040513d89823e3d90fd5b6024877f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b8161189891612909565b6118a35785386115dc565b8580fd5b5080fd5b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014857601d546118e68161294a565b916118f46040519384612909565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b83831061193657604051806101d487826127bf565b60026020600192604051611949816128b5565b73ffffffffffffffffffffffffffffffffffffffff865416815261196e858701612dc3565b83820152815201920192019190611921565b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014857601a546119bb8161294a565b916119c96040519384612909565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b838310611a0b57604051806101d48782612741565b600160208192611a1a85612962565b8152019201920191906119f6565b503461014857611a3736612708565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561096c576040517f4c63e5620000000000000000000000000000000000000000000000000000000081528183141560048201528381602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156114e957611bbc575b50611b27918391610aae611aba612a69565b9160405192611ac8846128b5565b61dead84526020840190815260405191611ae1836128d1565b8683526001602084015260408301528560608301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6080830152519061038282612aeb565b03915afa8015610bee576108c3918391611ba1575b5060405190611b4c606083612909565b602582527f53686f756c642070617373207768656e2076616c75657320617265206e6f742060208301527f657175616c0000000000000000000000000000000000000000000000000000006040830152613278565b611bb591503d8085833e6108da8183612909565b5038611b3c565b92611bcb81611b279495612909565b9291611aa8565b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014857601b54611c0d8161294a565b611c1a6040519182612909565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b838310611cf257868587604051928392602084019060208552518091526040840160408260051b8601019392905b828210611c8757505050500390f35b91936020611ce2827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0600195979984950301865288519083611cd28351604084526040840190612653565b92015190848184039101526126b2565b9601920192018594939192611c78565b60026020600192604051611d05816128b5565b611d0e86612962565b8152611d1b858701612dc3565b83820152815201920192019190611c4a565b50346101485760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014857600435817fffffffff0000000000000000000000000000000000000000000000000000000082168083036118a757611e02611d96612a69565b9160405192611da4846128b5565b61dead84526020840190815260405191611dbd836128d1565b85835285602084015260408301528460608301527fffffffff000000000000000000000000000000000000000000000000000000006080830152519061038282612aeb565b50604051611e7081611e4486602083017fffffffff00000000000000000000000000000000000000000000000000000000602092168152600060048201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612909565b604051611e7c816128ed565b61dead8152836020820152604081019182528360608201528360808201528360a0820152600160c0820152611eaf612b27565b9273ffffffffffffffffffffffffffffffffffffffff601f5460081c1692604051907f313dade7000000000000000000000000000000000000000000000000000000008252868280611f0689888860048501612c5d565b0381885afa80156118565761204e98611faa612017927fffffffff00000000000000000000000000000000000000000000000000000000958b916120e3575b5060405190611f55606083612909565b603b82527f5065726d697373696f6e2076616c69646174696f6e2073686f756c642073756360208301527f636565642077697468206d61746368696e672073656c6563746f7200000000006040830152613278565b611feb6040519485921916602083017fffffffff00000000000000000000000000000000000000000000000000000000602092168152600060048201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101845283612909565b52604051958694859384937f313dade700000000000000000000000000000000000000000000000000000000855260048501612c5d565b03915afa8015610bee576108c39183916120c8575b5060405190612073606083612909565b603c82527f5065726d697373696f6e2076616c69646174696f6e2073686f756c642066616960208301527f6c2077697468206e6f6e2d6d61746368696e672073656c6563746f720000000060408301526132ff565b6120dc91503d8085833e6108da8183612909565b5038612063565b6120f791503d808d833e6108da8183612909565b5038611f45565b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101485760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b81811061217b576101d4856101c881870382612909565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201612164565b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101485760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b818110612224576101d4856101c881870382612909565b825473ffffffffffffffffffffffffffffffffffffffff1684526020909301926001928301920161220d565b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014857601e5461228b8161294a565b6122986040519182612909565b818152601e83526020810191837f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350845b8383106123e65786858760405192839260208401906020855251809152604084019160408260051b8601019392815b8383106123045786860387f35b9193957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09086929496030183528551906020604082019273ffffffffffffffffffffffffffffffffffffffff81511683520151916040602083015282518091526060820190602060608260051b850101940192855b82811061239d575050505050602080600192970193019301909286959492936122f7565b90919293946020806123d9837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa087600196030189528951612653565b9701950193929101612379565b6040516123f2816128b5565b73ffffffffffffffffffffffffffffffffffffffff835416815260018301805461241b8161294a565b916124296040519384612909565b8183528a526020808b20908b9084015b83821061245f5750505050600192826020928360029501528152019201920191906122c8565b60016020819261246e86612962565b815201930191019091612439565b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101485760405180916020601654928381520191601682527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289915b8181106124f9576101d4856101c881870382612909565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016124e2565b9050346118a757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126118a757610ca48082019082821067ffffffffffffffff8311176125d6579082916135a58339039082f080156125c9577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00601f549260081b16911617601f5580f35b50604051903d90823e3d90fd5b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b602060408183019282815284518094520192019060005b8181106126275750505090565b825173ffffffffffffffffffffffffffffffffffffffff1684526020938401939092019160010161261a565b919082519283825260005b84811061269d5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b8060208092840101518282860101520161265e565b906020808351928381520192019060005b8181106126d05750505090565b82517fffffffff00000000000000000000000000000000000000000000000000000000168452602093840193909201916001016126c3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc604091011261273c576004359060243590565b600080fd5b602081016020825282518091526040820191602060408360051b8301019401926000915b83831061277457505050505090565b90919293946020806127b0837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187528951612653565b97019301930191939290612765565b602081016020825282518091526040820191602060408360051b8301019401926000915b8383106127f257505050505090565b9091929394602080612855837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff8151168452015191818582015201906126b2565b970193019301919392906127e3565b9181601f8401121561273c5782359167ffffffffffffffff831161273c576020838186019501011161273c57565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361273c57565b6040810190811067ffffffffffffffff8211176109d057604052565b60a0810190811067ffffffffffffffff8211176109d057604052565b60e0810190811067ffffffffffffffff8211176109d057604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176109d057604052565b67ffffffffffffffff81116109d05760051b60200190565b906040519160008154918260011c92600181168015612a5f575b602085108114612a32578487528693929181156129f257506001146129ab575b506129a992500383612909565b565b90506000929192526020600020906000915b8183106129d65750509060206129a9928201013861299c565b60209193508060019154838589010152019101909184926129bd565b602093506129a99592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201013861299c565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f169361297c565b60408051909190612a7a8382612909565b60018152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018260005b828110612ab157505050565b602090604051612ac0816128d1565b6000815260008382015260006040820152600060608201526000608082015282828501015201612aa5565b805115612af85760200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60405190612b36602083612909565b600080835282815b828110612b4a57505050565b602090604051612b59816128b5565b6000815260008382015282828501015201612b3e565b919060408382031261273c578251801515810361273c579260208101519067ffffffffffffffff821161273c570181601f8201121561273c57805190612bb48261294a565b92612bc26040519485612909565b82845260208085019360061b8301019181831161273c57602001925b828410612bec575050505090565b60408483031261273c5760206040918251612c06816128b5565b865181528287015183820152815201930192612bde565b906020808351928381520192019060005b818110612c3b5750505090565b8251805185526020908101518186015260409094019390920191600101612c2e565b9392909360a08152602060e082019573ffffffffffffffffffffffffffffffffffffffff81511660a08401520151604060c083015280518096526020610100830191019560005b818110612d43575050612d40949550818103602083015273ffffffffffffffffffffffffffffffffffffffff84511681526020840151602082015260c080612cfb604087015160e0604086015260e0850190612653565b956060810151606085015260808101511515608085015260a0810151151560a0850152015191015261beef604082015261cafe60608201526080818403910152612c1d565b90565b909187518051151582526020810151906004821015612d945782608060a092602094856001970152604081015160408401526060810151606084015201516080820152019801910196919096612ca4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b90604051918281549182825260208201906000526020600020926000905b806007830110612fdd576129a9945491818110612fa7575b818110612f71575b818110612f3b575b818110612f05575b818110612ecf575b818110612e99575b818110612e64575b10612e37575b500383612909565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260200138612e2f565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b168152019301612e29565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b168152019301612e21565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b168152019301612e19565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b168152019301612e11565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b168152019301612e09565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b168152019301612e01565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b168152019301612df9565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e0820152019401920185929391612de1565b9190820391821161307757565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92919267ffffffffffffffff82116109d057604051916130ee601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200184612909565b82948184528183011161273c578281602093846000960137010152565b6040519061311a606083612909565b603482527f206d6174636865732077697468206f66667365740000000000000000000000006040837f53686f756c642073756363656564207768656e206d61736b65642076616c756560208201520152565b60085460ff16801561317b5790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561324657600091613214575b50151590565b90506020813d60201161323e575b8161322f60209383612909565b8101031261273c57513861320e565b3d9150613222565b6040513d6000823e3d90fd5b9190820180921161307757565b604090612d409392151581528160208201520190612653565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561273c576132ce9160009160405193849283927fa34edc030000000000000000000000000000000000000000000000000000000084526004840161325f565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015613246576132f45750565b60006129a991612909565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561273c576132ce9160009160405193849283927f7ba048090000000000000000000000000000000000000000000000000000000084526004840161325f565b906000613361926133c5565b9060008060406102c261337982516107458482612909565b51906a636f6e736f6c652e6c6f675afa50565b8115613396570690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000908383116135205782811091821580613516575b61350e576133e9848661306a565b926001840180941161307757600383111580613505575b6134f6577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc831015806134ec575b6134db57858311156134925750509061344a8461344f9361306a565b61338c565b90811561348d576134609250613252565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081116130775790565b505090565b9594929190956134a3575b50505050565b8394955061344a906134b5939461306a565b90811561348d576134c6925061306a565b6001810180911161307757903880808061349d565b50509050612d40929150199061306a565b508219841161342e565b5050919050612d409250613252565b50828411613400565b509250505090565b50848211156133db565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374645574696c7320626f756e642875696e743235362c75696e743235362c7560448201527f696e74323536293a204d6178206973206c657373207468616e206d696e2e00006064820152fdfe60808060405234601557610c89908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c806323b3713e14610057578063313dade7146100525780636d74c44c1461004d57638e4181361461004857600080fd5b6104d6565b61048a565b6102bf565b346100cf5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100cf57600435610092816100d4565b73ffffffffffffffffffffffffffffffffffffffff6024359116600052600060205260406000209060005260205260406000205460805260206080f35b600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116036100cf57565b604435906100ff826100d4565b565b606435906100ff826100d4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff82111761015957604052565b61010e565b60a0810190811067ffffffffffffffff82111761015957604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761015957604052565b604051906100ff60408361017a565b67ffffffffffffffff81116101595760051b60200190565b908160e09103126100cf5790565b81601f820112156100cf57803590610207826101ca565b92610215604051948561017a565b82845260208085019360061b830101918183116100cf57602001925b82841061023f575050505090565b6040848303126100cf57602060409182516102598161013d565b863581528287013583820152815201930192610231565b606060209160408101931515815260408382015284518094520192019060005b81811061029d5750505090565b8251805185526020908101518186015260409094019390920191600101610290565b346100cf5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100cf5760043567ffffffffffffffff81116100cf5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126100cf57604051906103398261013d565b8060040135610347816100d4565b825260248101359067ffffffffffffffff82116100cf5701366023820112156100cf576004810135610378816101ca565b91610386604051938461017a565b8183526020600460a0828601940283010101903682116100cf57602401915b81831061042457505050602082015260243567ffffffffffffffff81116100cf576103d49036906004016101e2565b906103dd6100f2565b6103e5610101565b906084359367ffffffffffffffff85116100cf5761040a6104109536906004016101f0565b936107d3565b9061042060405192839283610270565b0390f35b60a0833603126100cf576040519061043b8261015e565b833580151581036100cf57825260208401359060048210156100cf57826020928360a09501526040860135604082015260608601356060820152608086013560808201528152019201916103a5565b346100cf5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100cf576104d46004356104c8816100d4565b60243560443591610be7565b005b346100cf5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100cf57600435610511816100d4565b6024359067ffffffffffffffff82116100cf57366023830112156100cf5781600401359067ffffffffffffffff82116100cf573660248360061b850101116100cf5760246104d4930190610b61565b3561056a816100d4565b90565b906001820180921161057b57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9190820180921161057b57565b604051906105c48261013d565b60006020838281520152565b906105da826101ca565b6105e7604051918261017a565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061061582946101ca565b019060005b82811061062657505050565b6020906106316105b7565b8282850101520161061a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518210156106805760209160051b010190565b61063d565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156100cf570180359067ffffffffffffffff82116100cf576020019181360383136100cf57565b600411156106e057565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9392919073ffffffffffffffffffffffffffffffffffffffff16845260606020850152602060a085019173ffffffffffffffffffffffffffffffffffffffff81511660608701520151604060808601528051809252602060c0860191019160005b81811061078257505060409150930152565b9091835180511515825260208101519060048210156106e05782608060a092602094856001970152604081015160408401526060810151606084015201516080820152019401910192919092610770565b9490919293946107f7815173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff61083161081886610560565b73ffffffffffffffffffffffffffffffffffffffff1690565b911603610b465785519261085461084f6020840195865151906105aa565b6105d0565b9460005b885181101561088b578061086e6001928b61066c565b51610879828a61066c565b52610884818961066c565b5001610858565b50909294919395875160005b88518051821015610b3557816108ac9161066c565b516108d06108bd6040890189610685565b5060608301519081013591602090910190565b50608082015116906108e28151151590565b6109b5575b6020810180516108f6816106d6565b6108ff816106d6565b61092557506040015103610917576001905b01610897565b506000989750505050505050565b60038151610932816106d6565b61093b816106d6565b036109525750604001511061091757600190610911565b6001815161095f816106d6565b610968816106d6565b0361097f5750604001511461091757600190610911565b6002905161098c816106d6565b610995816106d6565b146109a5575b5050600190610911565b604001511161091757388061099b565b9691989795929093998a6109d8610a048c6040519283918c60208401968761070f565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261017a565b51902096600093610a136105b7565b9c60005b8751811015610b1d57610a2a818961066c565b515115610ad0578a610a3c828a61066c565b515114610a4b57600101610a17565b6020949e50879a9198939c9d9650610a6990610a7e939c969861066c565b519284840151915b8215610a89575b506105aa565b9182910152906108e7565b610ac8919250610ab98b73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b90600052602052604060002090565b549038610a78565b6020949e50610a7e929b955097610b1789899c99959e9f98939a610b1190610af66101bb565b978c895260008a8a015288610b0b838361066c565b5261066c565b5061056d565b97610a71565b5096946020939d929b9c95610a7e929b95979a610a71565b505083525060019650909450505050565b509250505060009190565b91908110156106805760061b0190565b9060005b838110610b725750505050565b80610b806001928685610b51565b3573ffffffffffffffffffffffffffffffffffffffff85166000526000602052604060002090600052602052610be1604060002054610bda610bc3848988610b51565b35916020610bd2868b8a610b51565b0135906105aa565b9086610be7565b01610b65565b907f42063b8d32ac0a88f94053143bb30a789b3d5dfabb27d6c8a54e23d4fef308519273ffffffffffffffffffffffffffffffffffffffff60609316918260005260006020526040600020816000526020528160406000205560405192835260208301526040820152a156fea2646970667358221220746e7ceeab32b330af2867956d7d03f77db8bc9469e15e5cbe12fff9f55cda6664736f6c634300081c0033a26469706673582212205d709bd0a3ee7babbb562da4d744a5730eb8df7127345fa9341033404a8e400864736f6c634300081c0033","sourceMap":"899:9580:84:-:0;;;;;;;3166:4:5;899:9580:84;;3166:4:5;899:9580:84;;;3166:4:5;899:9580:84;3166:4:5;899:9580:84;;1087:4:16;899:9580:84;;;1087:4:16;899:9580:84;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608080604052600436101561001357600080fd5b600090813560e01c9081630a9254e414612525575080631ed7831c1461247c5780632ade3880146122505780633e5e3c23146121a75780633f7286f4146120fe5780634720917914611d2d57806366d9a9a014611bd257806368759f0314611a2857806385226c8114611980578063916a17c6146118ab578063a3daca27146114f4578063ade0444f146112af578063b0464fdc146111da578063b5508aa914611132578063ba414fa6146110ef578063bbc69fb114610f15578063d00b36b514610bf9578063d6320b71146109ff578063defbce2914610204578063e20c9f711461014b5763fa7626d41461010857600080fd5b3461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014857602060ff601f54166040519015158152f35b80fd5b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101485760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b8181106101d8576101d4856101c881870382612909565b60405191829182612603565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016101b1565b503461014857806102417ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe61023836612708565b849195506133c5565b9161030a83604092848085516102578782612909565b600c81527f426f756e6420726573756c740000000000000000000000000000000000000000602082015286516102f4816102c260208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528b60248401526064830190612653565b886044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612909565b51906a636f6e736f6c652e6c6f675afa50613355565b610312612a69565b90610388835192610322846128b5565b61dead84526020840190815284519061033a826128d1565b60018252600360208301528786830152600460608301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6080830152519061038282612aeb565b52612aeb565b5082517f12345678000000000000000000000000000000000000000000000000000000006020820152816024820152602481526103c6604482612909565b8351916103d2836128ed565b61dead835260208301869052848301918252606083018690526080830186905260a08301869052600160c0840152845196604061040f818a612909565b600189527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00197875b8981106109ae5750876104b49798995061045182612aeb565b515288602061045f83612aeb565b5101528873ffffffffffffffffffffffffffffffffffffffff601f5460081c16918951809981927f313dade7000000000000000000000000000000000000000000000000000000008352898b60048501612c5d565b0381845afa9687156109a45789908a98610985575b508851610509916104da8b83612909565b601982527f46697273742063616c6c2073686f756c642073756363656564000000000000006020830152613278565b8887518951906105198b83612909565b601b82527f53686f756c642068617665206f6e65207573616765206c696d697400000000006020830152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561096c576105ab9183918c5193849283927f88b44c85000000000000000000000000000000000000000000000000000000008452600484015260016024840152606060448401526064830190612653565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561096257610970575b5060206105db89612aeb565b5101518951906105eb8b83612909565b601c82527f557361676520616d6f756e742073686f756c642062652076616c7565000000006020830152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561096c5761067c9183918c5193849283927f88b44c850000000000000000000000000000000000000000000000000000000084526004840152896024840152606060448401526064830190612653565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561096257610949575b50813b156101485788517f8e41813600000000000000000000000000000000000000000000000000000000815261beef6004820152602481018a905291819083908183816106f1604482018f612c1d565b03925af191821561093d578492610920575b505061070e9161306a565b600181018091116108f3579161072f61084c979694928996948119916133c5565b908580886102c26107ab82516107458482612909565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152835192839160208301957fb60e72cc00000000000000000000000000000000000000000000000000000000875260248401526064830190612653565b51906a636f6e736f6c652e6c6f675afa508651917f123456780000000000000000000000000000000000000000000000000000000060208401526024830152602482526107f9604483612909565b5273ffffffffffffffffffffffffffffffffffffffff601f5460081c16918551968794859384937f313dade700000000000000000000000000000000000000000000000000000000855260048501612c5d565b03915afa80156108e9576108c39284916108c6575b507f756c6420657863656564206c696d697400000000000000000000000000000000825192610891606085612909565b603084527f5365636f6e642063616c6c2073686f756c64206661696c20617320697420776f60208501528301526132ff565b80f35b6108e291503d8086833e6108da8183612909565b810190612b6f565b5038610861565b81513d85823e3d90fd5b6024887f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b8192509061092d91612909565b61093957818838610703565b8780fd5b508851903d90823e3d90fd5b8161095391612909565b61095e5788386106a0565b8880fd5b8a513d84823e3d90fd5b8280fd5b8161097a91612909565b61095e5788386105cf565b610509985061099e91503d808c833e6108da8183612909565b976104c9565b88513d8b823e3d90fd5b60209088516109bc816128b5565b8a81528a8382015282828501015201610438565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b50346101485760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014857610b5981600435610a3e612a69565b610aae60405191610a4e836128b5565b61dead83526020830190815260405190610a67826128d1565b858252600160208301528460408301528560608301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6080830152519061038282612aeb565b5060405191602083015260208252610ac7604083612909565b60405191610ad4836128ed565b61dead835283602084015260408301528260608301528260808301528260a0830152600160c0830152610b05612b27565b9173ffffffffffffffffffffffffffffffffffffffff601f5460081c1691604051958694859384937f313dade700000000000000000000000000000000000000000000000000000000855260048501612c5d565b03915afa8015610bee576108c3918391610bd3575b5060405190610b7e606083612909565b602182527f53686f756c64206661696c207768656e2076616c75657320617265206571756160208301527f6c0000000000000000000000000000000000000000000000000000000000000060408301526132ff565b610be791503d8085833e6108da8183612909565b5038610b6e565b6040513d84823e3d90fd5b50346101485760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101485780610c32612892565b6024359060443590737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610eec576040517f491cc7c200000000000000000000000000000000000000000000000000000000815260016004820152600160248201526001604482015260016064820152848160848183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115610ef1578591610f00575b50506040805173ffffffffffffffffffffffffffffffffffffffff83168152602081018590529081018390527f42063b8d32ac0a88f94053143bb30a789b3d5dfabb27d6c8a54e23d4fef3085190606090a173ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b15610efc576040517f6d74c44c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015260248101859052604481018490529085908290606490829084905af1908115610ef1578591610ed7575b505073ffffffffffffffffffffffffffffffffffffffff604460209282601f5460081c1660405196879485937f23b3713e00000000000000000000000000000000000000000000000000000000855216600484015260248301525afa918215610ecc578392610e98575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610e9457604051917f98296c54000000000000000000000000000000000000000000000000000000008352600483015260248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610bee57610e835750f35b81610e8d91612909565b6101485780f35b5050fd5b9091506020813d602011610ec4575b81610eb460209383612909565b81010312610e9457519038610e0d565b3d9150610ea7565b6040513d85823e3d90fd5b81610ee191612909565b610eec578338610da3565b505050fd5b6040513d87823e3d90fd5b8480fd5b81610f0a91612909565b610eec578338610cc2565b50346101485760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101485761105a81610f51612892565b610f59612a69565b610fca60405191610f69836128b5565b61dead83526020830190815260405190610f82826128d1565b85825285602083015261dead60408301528560608301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6080830152519061038282612aeb565b506040517f1234567800000000000000000000000000000000000000000000000000000000602082015283602482015260248152611009604482612909565b73ffffffffffffffffffffffffffffffffffffffff6040519361102b856128ed565b16835283602084015260408301528260608301528260808301528260a0830152600160c0830152610b05612b27565b03915afa8015610bee576108c39183916110d4575b506040519061107f606083612909565b602682527f53686f756c64206661696c207768656e2074617267657420646f6573206e6f7460208301527f206d61746368000000000000000000000000000000000000000000000000000060408301526132ff565b6110e891503d8085833e6108da8183612909565b503861106f565b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014857602061112861316c565b6040519015158152f35b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101485760195461116d8161294a565b9161117b6040519384612909565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b8383106111bd57604051806101d48782612741565b6001602081926111cc85612962565b8152019201920191906111a8565b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014857601c546112158161294a565b916112236040519384612909565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b83831061126557604051806101d487826127bf565b60026020600192604051611278816128b5565b73ffffffffffffffffffffffffffffffffffffffff865416815261129d858701612dc3565b83820152815201920192019190611250565b5034610148576113e66112c136612708565b836112ca612a69565b61133a604051916112da836128b5565b61dead835260208301908152604051906112f3826128d1565b848252600260208301528660408301528460608301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6080830152519061038282612aeb565b506040519083602083015260208252611354604083612909565b60405191611361836128ed565b61dead835283602084015260408301528260608301528260808301528260a0830152600160c0830152611392612b27565b9173ffffffffffffffffffffffffffffffffffffffff601f5460081c1691604051978894859384937f313dade700000000000000000000000000000000000000000000000000000000855260048501612c5d565b03915afa9283156114e95784936114cc575b5010611465576040516108c391611410606083612909565b602682527f53686f756c64207375636365656420776974682076616c7565203e3d2074687260208301527f6573686f6c6400000000000000000000000000000000000000000000000000006040830152613278565b6040516108c391611477606083612909565b602282527f53686f756c64206661696c20776974682076616c7565203c207468726573686f60208301527f6c6400000000000000000000000000000000000000000000000000000000000060408301526132ff565b6114e19193503d8086833e6108da8183612909565b5091386113f8565b6040513d86823e3d90fd5b50346101485760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101485760043567ffffffffffffffff81116118a757611544903690600401612864565b60243560643567ffffffffffffffff8111610efc57611567903690600401612864565b9390737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156118a357856040517f4c63e562000000000000000000000000000000000000000000000000000000008152602086101560048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015610bee5761188e575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08401848111611861576116158791604435613355565b9284848201351695611698611628612a69565b9261167860405194611639866128b5565b61dead86526020860190815260405190611652826128d1565b8782528760208301528b60408301528960608301528a6080830152519061038282612aeb565b5060405192611686846128ed565b61dead845285602085015236916130a6565b90604081019182528360608201528360808201528360a0820152600160c08201526116c1612b27565b9273ffffffffffffffffffffffffffffffffffffffff601f5460081c16926040519a7f313dade7000000000000000000000000000000000000000000000000000000008c52868c8061171889888860048501612c5d565b0381885afa9081156118565761174561174d926117859e8a9161183b575b5061173f61310b565b90613278565b3690896130a6565b9052604051998a94859384937f313dade700000000000000000000000000000000000000000000000000000000855260048501612c5d565b03915afa948515611830578695611813575b50013516036117ac576108c39061173f61310b565b6040516108c3916117be606083612909565b603882527f53686f756c64206661696c207768656e206d61736b65642076616c756520646f60208301527f6573206e6f74206d617463682077697468206f6666736574000000000000000060408301526132ff565b6118289195503d8088833e6108da8183612909565b509338611797565b6040513d88823e3d90fd5b61184f91503d808c833e6108da8183612909565b5038611736565b6040513d89823e3d90fd5b6024877f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b8161189891612909565b6118a35785386115dc565b8580fd5b5080fd5b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014857601d546118e68161294a565b916118f46040519384612909565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b83831061193657604051806101d487826127bf565b60026020600192604051611949816128b5565b73ffffffffffffffffffffffffffffffffffffffff865416815261196e858701612dc3565b83820152815201920192019190611921565b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014857601a546119bb8161294a565b916119c96040519384612909565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b838310611a0b57604051806101d48782612741565b600160208192611a1a85612962565b8152019201920191906119f6565b503461014857611a3736612708565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561096c576040517f4c63e5620000000000000000000000000000000000000000000000000000000081528183141560048201528381602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156114e957611bbc575b50611b27918391610aae611aba612a69565b9160405192611ac8846128b5565b61dead84526020840190815260405191611ae1836128d1565b8683526001602084015260408301528560608301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6080830152519061038282612aeb565b03915afa8015610bee576108c3918391611ba1575b5060405190611b4c606083612909565b602582527f53686f756c642070617373207768656e2076616c75657320617265206e6f742060208301527f657175616c0000000000000000000000000000000000000000000000000000006040830152613278565b611bb591503d8085833e6108da8183612909565b5038611b3c565b92611bcb81611b279495612909565b9291611aa8565b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014857601b54611c0d8161294a565b611c1a6040519182612909565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b838310611cf257868587604051928392602084019060208552518091526040840160408260051b8601019392905b828210611c8757505050500390f35b91936020611ce2827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0600195979984950301865288519083611cd28351604084526040840190612653565b92015190848184039101526126b2565b9601920192018594939192611c78565b60026020600192604051611d05816128b5565b611d0e86612962565b8152611d1b858701612dc3565b83820152815201920192019190611c4a565b50346101485760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014857600435817fffffffff0000000000000000000000000000000000000000000000000000000082168083036118a757611e02611d96612a69565b9160405192611da4846128b5565b61dead84526020840190815260405191611dbd836128d1565b85835285602084015260408301528460608301527fffffffff000000000000000000000000000000000000000000000000000000006080830152519061038282612aeb565b50604051611e7081611e4486602083017fffffffff00000000000000000000000000000000000000000000000000000000602092168152600060048201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612909565b604051611e7c816128ed565b61dead8152836020820152604081019182528360608201528360808201528360a0820152600160c0820152611eaf612b27565b9273ffffffffffffffffffffffffffffffffffffffff601f5460081c1692604051907f313dade7000000000000000000000000000000000000000000000000000000008252868280611f0689888860048501612c5d565b0381885afa80156118565761204e98611faa612017927fffffffff00000000000000000000000000000000000000000000000000000000958b916120e3575b5060405190611f55606083612909565b603b82527f5065726d697373696f6e2076616c69646174696f6e2073686f756c642073756360208301527f636565642077697468206d61746368696e672073656c6563746f7200000000006040830152613278565b611feb6040519485921916602083017fffffffff00000000000000000000000000000000000000000000000000000000602092168152600060048201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101845283612909565b52604051958694859384937f313dade700000000000000000000000000000000000000000000000000000000855260048501612c5d565b03915afa8015610bee576108c39183916120c8575b5060405190612073606083612909565b603c82527f5065726d697373696f6e2076616c69646174696f6e2073686f756c642066616960208301527f6c2077697468206e6f6e2d6d61746368696e672073656c6563746f720000000060408301526132ff565b6120dc91503d8085833e6108da8183612909565b5038612063565b6120f791503d808d833e6108da8183612909565b5038611f45565b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101485760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b81811061217b576101d4856101c881870382612909565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201612164565b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101485760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b818110612224576101d4856101c881870382612909565b825473ffffffffffffffffffffffffffffffffffffffff1684526020909301926001928301920161220d565b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261014857601e5461228b8161294a565b6122986040519182612909565b818152601e83526020810191837f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350845b8383106123e65786858760405192839260208401906020855251809152604084019160408260051b8601019392815b8383106123045786860387f35b9193957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09086929496030183528551906020604082019273ffffffffffffffffffffffffffffffffffffffff81511683520151916040602083015282518091526060820190602060608260051b850101940192855b82811061239d575050505050602080600192970193019301909286959492936122f7565b90919293946020806123d9837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa087600196030189528951612653565b9701950193929101612379565b6040516123f2816128b5565b73ffffffffffffffffffffffffffffffffffffffff835416815260018301805461241b8161294a565b916124296040519384612909565b8183528a526020808b20908b9084015b83821061245f5750505050600192826020928360029501528152019201920191906122c8565b60016020819261246e86612962565b815201930191019091612439565b503461014857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101485760405180916020601654928381520191601682527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289915b8181106124f9576101d4856101c881870382612909565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016124e2565b9050346118a757817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126118a757610ca48082019082821067ffffffffffffffff8311176125d6579082916135a58339039082f080156125c9577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00601f549260081b16911617601f5580f35b50604051903d90823e3d90fd5b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b602060408183019282815284518094520192019060005b8181106126275750505090565b825173ffffffffffffffffffffffffffffffffffffffff1684526020938401939092019160010161261a565b919082519283825260005b84811061269d5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b8060208092840101518282860101520161265e565b906020808351928381520192019060005b8181106126d05750505090565b82517fffffffff00000000000000000000000000000000000000000000000000000000168452602093840193909201916001016126c3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc604091011261273c576004359060243590565b600080fd5b602081016020825282518091526040820191602060408360051b8301019401926000915b83831061277457505050505090565b90919293946020806127b0837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187528951612653565b97019301930191939290612765565b602081016020825282518091526040820191602060408360051b8301019401926000915b8383106127f257505050505090565b9091929394602080612855837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff8151168452015191818582015201906126b2565b970193019301919392906127e3565b9181601f8401121561273c5782359167ffffffffffffffff831161273c576020838186019501011161273c57565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361273c57565b6040810190811067ffffffffffffffff8211176109d057604052565b60a0810190811067ffffffffffffffff8211176109d057604052565b60e0810190811067ffffffffffffffff8211176109d057604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176109d057604052565b67ffffffffffffffff81116109d05760051b60200190565b906040519160008154918260011c92600181168015612a5f575b602085108114612a32578487528693929181156129f257506001146129ab575b506129a992500383612909565b565b90506000929192526020600020906000915b8183106129d65750509060206129a9928201013861299c565b60209193508060019154838589010152019101909184926129bd565b602093506129a99592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201013861299c565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f169361297c565b60408051909190612a7a8382612909565b60018152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018260005b828110612ab157505050565b602090604051612ac0816128d1565b6000815260008382015260006040820152600060608201526000608082015282828501015201612aa5565b805115612af85760200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60405190612b36602083612909565b600080835282815b828110612b4a57505050565b602090604051612b59816128b5565b6000815260008382015282828501015201612b3e565b919060408382031261273c578251801515810361273c579260208101519067ffffffffffffffff821161273c570181601f8201121561273c57805190612bb48261294a565b92612bc26040519485612909565b82845260208085019360061b8301019181831161273c57602001925b828410612bec575050505090565b60408483031261273c5760206040918251612c06816128b5565b865181528287015183820152815201930192612bde565b906020808351928381520192019060005b818110612c3b5750505090565b8251805185526020908101518186015260409094019390920191600101612c2e565b9392909360a08152602060e082019573ffffffffffffffffffffffffffffffffffffffff81511660a08401520151604060c083015280518096526020610100830191019560005b818110612d43575050612d40949550818103602083015273ffffffffffffffffffffffffffffffffffffffff84511681526020840151602082015260c080612cfb604087015160e0604086015260e0850190612653565b956060810151606085015260808101511515608085015260a0810151151560a0850152015191015261beef604082015261cafe60608201526080818403910152612c1d565b90565b909187518051151582526020810151906004821015612d945782608060a092602094856001970152604081015160408401526060810151606084015201516080820152019801910196919096612ca4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b90604051918281549182825260208201906000526020600020926000905b806007830110612fdd576129a9945491818110612fa7575b818110612f71575b818110612f3b575b818110612f05575b818110612ecf575b818110612e99575b818110612e64575b10612e37575b500383612909565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260200138612e2f565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b168152019301612e29565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b168152019301612e21565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b168152019301612e19565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b168152019301612e11565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b168152019301612e09565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b168152019301612e01565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b168152019301612df9565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e0820152019401920185929391612de1565b9190820391821161307757565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b92919267ffffffffffffffff82116109d057604051916130ee601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200184612909565b82948184528183011161273c578281602093846000960137010152565b6040519061311a606083612909565b603482527f206d6174636865732077697468206f66667365740000000000000000000000006040837f53686f756c642073756363656564207768656e206d61736b65642076616c756560208201520152565b60085460ff16801561317b5790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561324657600091613214575b50151590565b90506020813d60201161323e575b8161322f60209383612909565b8101031261273c57513861320e565b3d9150613222565b6040513d6000823e3d90fd5b9190820180921161307757565b604090612d409392151581528160208201520190612653565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561273c576132ce9160009160405193849283927fa34edc030000000000000000000000000000000000000000000000000000000084526004840161325f565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015613246576132f45750565b60006129a991612909565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561273c576132ce9160009160405193849283927f7ba048090000000000000000000000000000000000000000000000000000000084526004840161325f565b906000613361926133c5565b9060008060406102c261337982516107458482612909565b51906a636f6e736f6c652e6c6f675afa50565b8115613396570690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000908383116135205782811091821580613516575b61350e576133e9848661306a565b926001840180941161307757600383111580613505575b6134f6577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc831015806134ec575b6134db57858311156134925750509061344a8461344f9361306a565b61338c565b90811561348d576134609250613252565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081116130775790565b505090565b9594929190956134a3575b50505050565b8394955061344a906134b5939461306a565b90811561348d576134c6925061306a565b6001810180911161307757903880808061349d565b50509050612d40929150199061306a565b508219841161342e565b5050919050612d409250613252565b50828411613400565b509250505090565b50848211156133db565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374645574696c7320626f756e642875696e743235362c75696e743235362c7560448201527f696e74323536293a204d6178206973206c657373207468616e206d696e2e00006064820152fdfe60808060405234601557610c89908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c806323b3713e14610057578063313dade7146100525780636d74c44c1461004d57638e4181361461004857600080fd5b6104d6565b61048a565b6102bf565b346100cf5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100cf57600435610092816100d4565b73ffffffffffffffffffffffffffffffffffffffff6024359116600052600060205260406000209060005260205260406000205460805260206080f35b600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116036100cf57565b604435906100ff826100d4565b565b606435906100ff826100d4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff82111761015957604052565b61010e565b60a0810190811067ffffffffffffffff82111761015957604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761015957604052565b604051906100ff60408361017a565b67ffffffffffffffff81116101595760051b60200190565b908160e09103126100cf5790565b81601f820112156100cf57803590610207826101ca565b92610215604051948561017a565b82845260208085019360061b830101918183116100cf57602001925b82841061023f575050505090565b6040848303126100cf57602060409182516102598161013d565b863581528287013583820152815201930192610231565b606060209160408101931515815260408382015284518094520192019060005b81811061029d5750505090565b8251805185526020908101518186015260409094019390920191600101610290565b346100cf5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100cf5760043567ffffffffffffffff81116100cf5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126100cf57604051906103398261013d565b8060040135610347816100d4565b825260248101359067ffffffffffffffff82116100cf5701366023820112156100cf576004810135610378816101ca565b91610386604051938461017a565b8183526020600460a0828601940283010101903682116100cf57602401915b81831061042457505050602082015260243567ffffffffffffffff81116100cf576103d49036906004016101e2565b906103dd6100f2565b6103e5610101565b906084359367ffffffffffffffff85116100cf5761040a6104109536906004016101f0565b936107d3565b9061042060405192839283610270565b0390f35b60a0833603126100cf576040519061043b8261015e565b833580151581036100cf57825260208401359060048210156100cf57826020928360a09501526040860135604082015260608601356060820152608086013560808201528152019201916103a5565b346100cf5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100cf576104d46004356104c8816100d4565b60243560443591610be7565b005b346100cf5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100cf57600435610511816100d4565b6024359067ffffffffffffffff82116100cf57366023830112156100cf5781600401359067ffffffffffffffff82116100cf573660248360061b850101116100cf5760246104d4930190610b61565b3561056a816100d4565b90565b906001820180921161057b57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9190820180921161057b57565b604051906105c48261013d565b60006020838281520152565b906105da826101ca565b6105e7604051918261017a565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061061582946101ca565b019060005b82811061062657505050565b6020906106316105b7565b8282850101520161061a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518210156106805760209160051b010190565b61063d565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156100cf570180359067ffffffffffffffff82116100cf576020019181360383136100cf57565b600411156106e057565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9392919073ffffffffffffffffffffffffffffffffffffffff16845260606020850152602060a085019173ffffffffffffffffffffffffffffffffffffffff81511660608701520151604060808601528051809252602060c0860191019160005b81811061078257505060409150930152565b9091835180511515825260208101519060048210156106e05782608060a092602094856001970152604081015160408401526060810151606084015201516080820152019401910192919092610770565b9490919293946107f7815173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff61083161081886610560565b73ffffffffffffffffffffffffffffffffffffffff1690565b911603610b465785519261085461084f6020840195865151906105aa565b6105d0565b9460005b885181101561088b578061086e6001928b61066c565b51610879828a61066c565b52610884818961066c565b5001610858565b50909294919395875160005b88518051821015610b3557816108ac9161066c565b516108d06108bd6040890189610685565b5060608301519081013591602090910190565b50608082015116906108e28151151590565b6109b5575b6020810180516108f6816106d6565b6108ff816106d6565b61092557506040015103610917576001905b01610897565b506000989750505050505050565b60038151610932816106d6565b61093b816106d6565b036109525750604001511061091757600190610911565b6001815161095f816106d6565b610968816106d6565b0361097f5750604001511461091757600190610911565b6002905161098c816106d6565b610995816106d6565b146109a5575b5050600190610911565b604001511161091757388061099b565b9691989795929093998a6109d8610a048c6040519283918c60208401968761070f565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261017a565b51902096600093610a136105b7565b9c60005b8751811015610b1d57610a2a818961066c565b515115610ad0578a610a3c828a61066c565b515114610a4b57600101610a17565b6020949e50879a9198939c9d9650610a6990610a7e939c969861066c565b519284840151915b8215610a89575b506105aa565b9182910152906108e7565b610ac8919250610ab98b73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b90600052602052604060002090565b549038610a78565b6020949e50610a7e929b955097610b1789899c99959e9f98939a610b1190610af66101bb565b978c895260008a8a015288610b0b838361066c565b5261066c565b5061056d565b97610a71565b5096946020939d929b9c95610a7e929b95979a610a71565b505083525060019650909450505050565b509250505060009190565b91908110156106805760061b0190565b9060005b838110610b725750505050565b80610b806001928685610b51565b3573ffffffffffffffffffffffffffffffffffffffff85166000526000602052604060002090600052602052610be1604060002054610bda610bc3848988610b51565b35916020610bd2868b8a610b51565b0135906105aa565b9086610be7565b01610b65565b907f42063b8d32ac0a88f94053143bb30a789b3d5dfabb27d6c8a54e23d4fef308519273ffffffffffffffffffffffffffffffffffffffff60609316918260005260006020526040600020816000526020528160406000205560405192835260208301526040820152a156fea2646970667358221220746e7ceeab32b330af2867956d7d03f77db8bc9469e15e5cbe12fff9f55cda6664736f6c634300081c0033a26469706673582212205d709bd0a3ee7babbb562da4d744a5730eb8df7127345fa9341033404a8e400864736f6c634300081c0033","sourceMap":"899:9580:84:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1065:26:16;899:9580:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2723:18:9;899:9580:84;;;;;;;2723:18:9;899:9580:84;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2933:19:15;899:9580:84;;;;:::i;:::-;3093:38;;;2933:19:15;;:::i;:::-;1230:15:84;3145:22;1230:15;;899:9580;;;;;;;;;:::i;:::-;;1230:15;;899:9580;;;;;;;9786:54:15;;899:9580:84;;9786:54:15;;;;;;;;;;899:9580:84;;;;;;:::i;:::-;;;;;1230:15;9786:54:15;;;;;;;;:::i;:::-;899:9580:84;9371:159:15;679:42;9371:159;;;3145:22:84;:::i;:::-;3241;;:::i;:::-;899:9580;3272:232;899:9580;;;;;;:::i;:::-;1019:6;899:9580;;;3205:61;;899:9580;;;;;;;;;:::i;:::-;3129:1;1118:27;;3351:37;899:9580;3294:210;;1118:27;3294:210;;;;899:9580;;3294:210;;;899:9580;3109:17;3294:210;;;899:9580;3272:16;:232;;;;:::i;:::-;;;:::i;:::-;;899:9580;;1011:15;899:9580;3599:45;;;;9786:54:15;3599:45:84;;1230:15;9786:54:15;3599:45:84;;;899:9580;3599:45;;:::i;:::-;899:9580;;;;;;:::i;:::-;1019:6;899:9580;;;3538:243;;899:9580;;;3538:243;;;899:9580;;;3294:210;3538:243;;899:9580;;;3294:210;3538:243;;1118:27;;;1011:15;3538:243;;1118:27;;;3129:1;3538:243;;;899:9580;;;;;;;;;:::i;:::-;3129:1;899:9580;;9786:54:15;2763:4:48;;;;;;;;;3909:14:84;;4043:85;3909:14;;;;;;;:::i;:::-;;899:9580;3952:14;899:9580;3952:14;;;:::i;:::-;;:26;899:9580;2763:4:48;899:9580:84;4043:9;2763:4:48;;;899:9580:84;;;;4043:85;;;;1011:15;4043:85;;;;899:9580;4043:85;;;:::i;:::-;;;;;;;;;;;;899:9580;;4043:85;;;2763:4:48;-1:-1:-1;899:9580:84;;4134:48;;899:9580;;;;:::i;:::-;;1230:15;;899:9580;;;;;4134:48;:::i;:::-;899:9580;;;;;;;;;;:::i;:::-;;1230:15;;899:9580;;;;;;2484:29:4;;;;899:9580:84;;;;;;2484:29:4;;;;;1011:15:84;2484:29:4;;899:9580:84;2484:29:4;;1230:15:84;3129:1;9786:54:15;899:9580:84;;1230:15;3294:210;899:9580;;;;;;;;;:::i;:::-;2484:29:4;;899:9580:84;2484:29:4;;;;;;;;2763:4:48;4263:12:84;899:9580;4263:12;;;:::i;:::-;;:24;899:9580;;;;;;;;:::i;:::-;;1230:15;;899:9580;;;;;;2484:29:4;;;;899:9580:84;;;;;;2484:29:4;;;;;1011:15:84;2484:29:4;;899:9580:84;2484:29:4;;1230:15:84;899:9580;9786:54:15;899:9580:84;;1230:15;3294:210;899:9580;;;;;;;;;:::i;:::-;2484:29:4;;899:9580:84;2484:29:4;;;;;;;;2763:4:48;4361:53:84;;;;;;899:9580;;1011:15;4361:53;;1188:6;899:9580;4361:53;;899:9580;9786:54:15;899:9580:84;;;;;;;;;;;;;;;;;;;:::i;:::-;4361:53;;;;;;;;;;;;;2763:4:48;4498:13:84;;;;;:::i;:::-;3129:1;899:9580;;;;;;;4485:58;2933:19:15;4625:83:84;4485:58;;;;;;;899:9580;;2933:19:15;;:::i;:::-;899:9580:84;;;;;9786:54:15;899:9580:84;;;;;;:::i;:::-;;1230:15;;899:9580;;;;;;;9786:54:15;;;899:9580:84;9786:54:15;;;;;;;;;899:9580:84;;;;;;:::i;9786:54:15:-;899:9580:84;9371:159:15;679:42;9371:159;;;899:9580:84;;4561:45;1011:15;899:9580;4561:45;;;9786:54:15;4561:45:84;;1230:15;9786:54:15;4561:45:84;;;899:9580;4561:45;;:::i;:::-;4549:57;899:9580;4043:9;2763:4:48;;;899:9580:84;;;;4625:83;;;;;;;1011:15;4625:83;;899:9580;4625:83;;;:::i;:::-;;;;;;;;;4714:72;4625:83;;;;;2763:4:48;1230:15:84;899:9580;;;;;3294:210;899:9580;;:::i;:::-;;1230:15;;899:9580;;;;;;;;4714:72;:::i;:::-;899:9580;;4625:83;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;899:9580;;;;;;;;;;9786:54:15;899:9580:84;;;;;;;;4361:53;;;;;;;;:::i;:::-;899:9580;;4361:53;;;;;899:9580;;;;4361:53;899:9580;;;;;;;;;;;2484:29:4;;;;;:::i;:::-;899:9580:84;;2484:29:4;;;;899:9580:84;;;;2484:29:4;899:9580:84;;;;;;;;;2484:29:4;899:9580:84;;;2484:29:4;;;;;:::i;:::-;899:9580:84;;2484:29:4;;;;4043:85:84;4134:48;4043:85;;;;;;;;;;;;;;:::i;:::-;;;;;899:9580;;;;;;;;;2763:4:48;899:9580:84;;;;;;;:::i;:::-;2763:4:48;;;;;;;;;;;;;;;;;899:9580:84;;-1:-1:-1;899:9580:84;;;;;-1:-1:-1;899:9580:84;;;;;;;;;;;;;7518:85;899:9580;;;6945:22;;:::i;:::-;6976:205;899:9580;;;;;;:::i;:::-;1019:6;899:9580;;;6909:61;;899:9580;;;;;;;;;:::i;:::-;1118:27;;;899:9580;;6998:183;;1118:27;6998:183;899:9580;6998:183;;899:9580;6998:183;;;;899:9580;7156:17;6998:183;;;899:9580;6976:16;:205;;;;:::i;:::-;;899:9580;;7276:21;899:9580;7276:21;;1230:15;899:9580;7276:21;;;899:9580;7276:21;;:::i;:::-;899:9580;;;;;;:::i;:::-;1019:6;899:9580;;7215:219;899:9580;7215:219;;899:9580;;7215:219;;899:9580;7215:219;6998:183;7215:219;;899:9580;7215:219;6998:183;7215:219;;1118:27;7215:219;1011:15;7215:219;;1118:27;899:9580;7215:219;;;899:9580;7475:19;;:::i;:::-;2763:4:48;899:9580:84;7518:9;2763:4:48;;;899:9580:84;;;;7518:85;;;;;;;1011:15;7518:85;;899:9580;7518:85;;;:::i;:::-;;;;;;;;;7610:57;7518:85;;;;;899:9580;1230:15;899:9580;;;;6998:183;899:9580;;:::i;:::-;;1230:15;;899:9580;;;;;;;;;;7610:57;:::i;7518:85::-;;;;;;;;;;;;;:::i;:::-;;;;;;899:9580;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;1434:37;336:42:2;1434:37:84;;;;899:9580;;1011:15;1434:37;;899:9580;;1434:37;;899:9580;;;;;;;;;;;;;;;;1434:37;;;;;336:42:2;1434:37:84;;;;;;;;;;;899:9580;-1:-1:-1;;899:9580:84;;;;;;;;;;;1230:15;;;899:9580;;;1230:15;;;1482:69;;899:9580;;1482:69;899:9580;1557:9;2763:4:48;;;899:9580:84;1557:59;;;;;899:9580;;1011:15;1557:59;;899:9580;;;;1557:59;;899:9580;;;;1230:15;;;899:9580;;;1230:15;;;899:9580;;;;;;;;;;;1557:59;;;;;;;;;;;899:9580;2763:4:48;;899:9580:84;;;2763:4:48;;1557:9:84;2763:4:48;;;899:9580:84;;;1631:42;;;;;1011:15;1631:42;;899:9580;;1631:42;;899:9580;;192:59:4;;1230:15:84;1631:42;;;;;;;;;;;899:9580;2349:24:4;336:42:2;2349:24:4;;;;899:9580:84;;2349:24:4;1011:15:84;2349:24:4;;899:9580:84;2349:24:4;;1230:15:84;899:9580;;;1230:15;2349:24:4;;899:9580:84;2349:24:4;336:42:2;2349:24:4;;;;;;;;899:9580:84;;2349:24:4;;;;;:::i;:::-;899:9580:84;;2349:24:4;899:9580:84;2349:24:4;899:9580:84;;;1631:42;;;;899:9580;1631:42;;899:9580;1631:42;;;;;;899:9580;1631:42;;;:::i;:::-;;;899:9580;;;;1230:15;1631:42;;;;;;;-1:-1:-1;1631:42:84;;;899:9580;;;;;;;;;1557:59;;;;;:::i;:::-;899:9580;;1557:59;;;;899:9580;;;;;1557:59;899:9580;;;;;;;;;1557:59;899:9580;;;1434:37;;;;;:::i;:::-;899:9580;;1434:37;;;;899:9580;;;;;;;;;;;;10318:85;899:9580;;;:::i;:::-;9709:22;;:::i;:::-;9740:216;899:9580;;;;;;:::i;:::-;1019:6;899:9580;;;9673:61;;899:9580;;;;;;;;;:::i;:::-;1118:27;;;9762:194;899:9580;9762:194;;1118:27;1019:6;899:9580;9762:194;;899:9580;9762:194;;;;899:9580;9931:17;9762:194;;;899:9580;9740:16;:216;;;;:::i;:::-;;899:9580;;1011:15;899:9580;10056:41;;;;;;;1063:18;10056:41;;;;;;;:::i;:::-;899:9580;;;;;;;:::i;:::-;;;;9990:244;899:9580;9990:244;;899:9580;;9990:244;;899:9580;9990:244;9762:194;9990:244;;899:9580;9990:244;9762:194;9990:244;;1118:27;9990:244;1011:15;9990:244;;1118:27;9729:1;9990:244;;;899:9580;10275:19;;:::i;10318:85::-;;;;;;;;;10409:62;10318:85;;;;;899:9580;1230:15;899:9580;;;;1230:15;899:9580;;:::i;:::-;1063:18;1230:15;;1063:18;899:9580;1063:18;;;;899:9580;1063:18;;;10409:62;:::i;10318:85::-;;;;;;;;;;;;;:::i;:::-;;;;;899:9580;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2575:18:9;899:9580:84;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;2575:18:9;899:9580:84;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;2876:18:9;899:9580:84;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;2876:18:9;899:9580:84;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5555:85;899:9580;;;:::i;:::-;4970:22;;;:::i;:::-;5001:217;899:9580;;;;;;:::i;:::-;1019:6;899:9580;;4934:61;;;899:9580;;;;;;;;;:::i;:::-;1118:27;;;5081:40;4934:61;5023:195;;1118:27;5023:195;899:9580;5023:195;;899:9580;5023:195;;;;899:9580;5193:17;5023:195;;;899:9580;5001:16;:217;;;;:::i;:::-;;899:9580;;5313:21;;4934:61;5313:21;;1230:15;4934:61;5313:21;;;899:9580;5313:21;;:::i;:::-;899:9580;;;;;;:::i;:::-;1019:6;899:9580;;5252:219;4934:61;5252:219;;899:9580;;5252:219;;899:9580;5252:219;5023:195;5252:219;;899:9580;5252:219;5023:195;5252:219;;1118:27;5252:219;1011:15;5252:219;;1118:27;4990:1;5252:219;;;899:9580;5512:19;;:::i;:::-;2763:4:48;899:9580:84;5555:9;2763:4:48;;;899:9580:84;;;;5555:85;;;;;;;1011:15;5555:85;;899:9580;5555:85;;;:::i;:::-;;;;;;;;;;;;;;899:9580;-1:-1:-1;5651:22:84;;;899:9580;;5683:61;;899:9580;1230:15;899:9580;;:::i;:::-;;1230:15;;899:9580;4934:61;899:9580;;;;;;;;5683:61;:::i;5647:183::-;899:9580;;5765:58;;899:9580;5023:195;899:9580;;:::i;:::-;;1230:15;;899:9580;4934:61;899:9580;;;;;;;;5765:58;:::i;5555:85::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;899:9580;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;7851:32;;336:42:2;7851:32:84;;;;899:9580;;;1011:15;7851:32;;899:9580;7861:21;;;899:9580;7851:32;;899:9580;7851:32;;899:9580;7851:32;336:42:2;7851:32:84;;;;;;;;899:9580;;;;;;;;;;;7898:38;899:9580;;;;7898:38;:::i;:::-;8007:74;;;;;;8109:12;8194:22;899:9580;8194:22;;:::i;:::-;899:9580;8225:177;899:9580;;;;;;:::i;:::-;1019:6;899:9580;;;8158:61;;899:9580;;;;;;;;;:::i;:::-;1118:27;;;8247:155;899:9580;8247:155;;1118:27;8247:155;899:9580;8247:155;;899:9580;8247:155;899:9580;8247:155;;899:9580;8247:155;899:9580;8247:155;;899:9580;8225:16;:177;;;;:::i;:::-;;899:9580;;;;;;:::i;:::-;1019:6;899:9580;;8436:206;899:9580;8436:206;;899:9580;;;;:::i;:::-;8436:206;899:9580;8436:206;;899:9580;;;8436:206;899:9580;8436:206;;899:9580;8436:206;899:9580;8436:206;;1118:27;8436:206;1011:15;8436:206;;1118:27;899:9580;8436:206;;;899:9580;8683:19;;:::i;:::-;2763:4:48;899:9580:84;8726:9;2763:4:48;;;899:9580:84;;;;8726:85;1011:15;8726:85;;;;;;;;;899:9580;8726:85;;;:::i;:::-;;;;;;;;;;;8817:75;899:9580;8726:85;9131;8726;;;;;899:9580;;;;:::i;:::-;8817:75;;:::i;:::-;899:9580;;;;:::i;:::-;9086:26;;899:9580;;9131:85;;;;;;;1011:15;9131:85;;899:9580;9131:85;;;:::i;:::-;;;;;;;;;;;;;;899:9580;-1:-1:-1;8943:86:84;;9062:18;9226:32;9062:18;;9310:75;899:9580;;;:::i;9222:320::-;899:9580;;9455:80;;899:9580;;;;:::i;:::-;;1230:15;;899:9580;;;;;;;;;;9455:80;:::i;9131:85::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;899:9580;;;;;;;;;8726:85;;;;;;;;;;;;;:::i;:::-;;;;;;899:9580;;;;;;;;;;;;;;;;;;;7851:32;;;;;:::i;:::-;899:9580;;7851:32;;;;899:9580;;;;;;;;;;;;;;;;;;;;3653:18:9;899:9580:84;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;3653:18:9;899:9580:84;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;3162:18:9;899:9580:84;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;3162:18:9;899:9580:84;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;336:42:2;5939:36:84;;;;899:9580;;1011:15;5939:36;;5949:25;;;;899:9580;5939:36;;899:9580;5939:36;;;;336:42:2;5939:36:84;;;;;;;;899:9580;6049:22;6625:85;6049:22;;;6080:208;6049:22;;:::i;:::-;899:9580;;;;;;;:::i;:::-;1019:6;899:9580;;;6013:61;;899:9580;;;;;;;;;:::i;:::-;1118:27;;;6069:1;899:9580;6102:186;;1118:27;899:9580;6102:186;;899:9580;6102:186;;;;899:9580;6263:17;6102:186;;;899:9580;6080:16;:208;;;;:::i;6625:85::-;;;;;;;;;6717:60;6625:85;;;;;899:9580;1230:15;899:9580;;;;6102:186;899:9580;;:::i;:::-;2024:14:2;1230:15:84;;2024:14:2;899:9580:84;2024:14:2;;;;899:9580:84;2024:14:2;;;6717:60:84;:::i;6625:85::-;;;;;;;;;;;;;:::i;:::-;;;;;5939:36;;;;6625:85;5939:36;;;:::i;:::-;;;;;899:9580;;;;;;;;;;;;3346:26:9;899:9580:84;;;;:::i;:::-;;;;;;;:::i;:::-;;;;3346:26:9;899:9580:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1876:187;1845:22;;:::i;:::-;899:9580;;;;;;;:::i;:::-;1019:6;899:9580;;;1809:61;;899:9580;;;;;;;;;:::i;:::-;1118:27;;;1898:165;899:9580;1898:165;;1118:27;899:9580;1898:165;;899:9580;1898:165;;;;899:9580;;1898:165;;;899:9580;1876:16;:187;;;;:::i;:::-;;899:9580;;2188:38;;;;899:9580;2188:38;;899:9580;1118:27;;899:9580;;;1118:27;;;;;;;;2188:38;;;;;;;;;:::i;:::-;899:9580;;;;;:::i;:::-;1019:6;899:9580;;2127:236;899:9580;2127:236;;899:9580;;2127:236;;899:9580;;;2127:236;1898:165;2127:236;;899:9580;2127:236;1898:165;2127:236;;1118:27;2127:236;1011:15;2127:236;;1118:27;1865:1;2127:236;;;899:9580;2404:19;;:::i;:::-;2763:4:48;899:9580:84;2447:9;2763:4:48;;;899:9580:84;;;;2447:85;1011:15;2447:85;;;;;;;;;899:9580;2447:85;;;:::i;:::-;;;;;;;;;;2814;2447;2538:82;2746:49;2447:85;899:9580;2447:85;;;;;899:9580;1230:15;899:9580;;;;1898:165;899:9580;;:::i;:::-;1230:15;;;;899:9580;1230:15;;;;899:9580;1230:15;;;2538:82;:::i;:::-;2746:49;899:9580;;2719:9;;;;899:9580;;2746:49;;899:9580;1118:27;;899:9580;;;1118:27;;;;;;;;2746:49;;2188:38;2746:49;;;;;;:::i;:::-;2734:61;899:9580;;2814:85;;;;;;;1011:15;2814:85;;899:9580;2814:85;;;:::i;:::-;;;;;;;;;2905:84;2814:85;;;;;899:9580;1230:15;899:9580;;;;1898:165;899:9580;;:::i;:::-;1230:15;;;;899:9580;1230:15;;;;899:9580;1230:15;;;2905:84;:::i;2814:85::-;;;;;;;;;;;;;:::i;:::-;;;;;2447;;;;;;;;;;;;;:::i;:::-;;;;;899:9580;;;;;;;;;;;;;;;;;3501:18:9;899:9580:84;;;;;;;3501:18:9;899:9580:84;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3794:16:9;899:9580:84;;;;;;;3794:16:9;899:9580:84;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3948:19:9;899:9580:84;;;;:::i;:::-;;;;;;;:::i;:::-;;;;3948:19:9;899:9580:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3018:16:9;899:9580:84;;;;;;;3018:16:9;899:9580:84;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1292:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;899:9580;;1280:44;899:9580;;;;;;;;1280:44;899:9580;;;1292:32;899:9580;;;;;;;;;;;1292:32;899:9580;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;899:9580:84;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;1011:15;899:9580;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;-1:-1:-1;899:9580:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;;;-1:-1:-1;899:9580:84;;;;;-1:-1:-1;899:9580:84;;-1:-1:-1;899:9580:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1011:15;899:9580;;;;;;;;;;:::i;:::-;1865:1;899:9580;;;1011:15;;899:9580;-1:-1:-1;1011:15:84;;;;;;;;;:::o;:::-;;899:9580;;;;;;:::i;:::-;-1:-1:-1;1011:15:84;;-1:-1:-1;1011:15:84;;;;-1:-1:-1;899:9580:84;1011:15;;;-1:-1:-1;1011:15:84;;;;-1:-1:-1;1011:15:84;;;;;;;;;;;;;1118:27;899:9580;;1118:27;;;;;;:::o;:::-;;899:9580;1118:27;;;;;899:9580;1118:27;2763:4:48;899:9580:84;;;;;;;:::i;:::-;;;;;;;2763:4:48;;;;;;;;;:::o;:::-;;899:9580:84;;;;;;:::i;:::-;;2763:4:48;;899:9580:84;2763:4:48;;;;;;;;;;;;;1230:15:84;;;;;;;;;;;;899:9580;;;1230:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;899:9580;;1230:15;899:9580;;;;:::i;:::-;1230:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;899:9580;;;;;;:::i;:::-;1230:15;;;;;;;;;;;;;;;;;;;;;;899:9580;;;;;;;;;;;1230:15;-1:-1:-1;1230:15:84;;;;;;;;;;:::o;:::-;;;;;;;899:9580;1230:15;;;;;;;;;;;;;899:9580;;;;1230:15;;;;;;;;;;;;;;;;;899:9580;1230:15;;899:9580;1230:15;;;899:9580;1230:15;;;;;;;899:9580;;;;;1230:15;899:9580;;;;;1230:15;;;;;;;;;;;;;;;;;;;;;899:9580;1230:15;;899:9580;;;1230:15;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;899:9580;;1230:15;;;899:9580;1230:15;;;;899:9580;;1230:15;;;899:9580;1230:15;;;;;899:9580;1230:15;;;899:9580;;1230:15;;;899:9580;1230:15;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;899:9580;;;;1230:15;;;;1118:27;;;;;;;1230:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;899:9580;;1230:15;;;;;;;;1118:27;;1230:15;1118:27;;;;;1230:15;1118:27;899:9580;;;;;;;;;;;;;;;;-1:-1:-1;899:9580:84;;-1:-1:-1;899:9580:84;;-1:-1:-1;899:9580:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1011:15;899:9580;;;;;;;;1011:15;899:9580;;1011:15;899:9580;1011:15;;;;899:9580;;;;;;;;1011:15;899:9580;;1011:15;899:9580;1011:15;899:9580;1011:15;;899:9580;;;;;;;;1011:15;899:9580;;1011:15;899:9580;1011:15;899:9580;1011:15;;899:9580;;;;;;;;1011:15;899:9580;;1011:15;899:9580;1011:15;899:9580;1011:15;;899:9580;;;;;;;;1011:15;899:9580;;1011:15;899:9580;1011:15;899:9580;1011:15;;899:9580;;;;;;;;1011:15;899:9580;;1011:15;899:9580;1011:15;899:9580;1011:15;;899:9580;;;;;;;;1011:15;899:9580;;1011:15;899:9580;1011:15;;;899:9580;;;;;;;;;;;;;;;;;;;;1011:15;;;;899:9580;;;1011:15;;899:9580;1011:15;;899:9580;;;;1011:15;;899:9580;1011:15;;899:9580;;;;1011:15;;899:9580;1011:15;;899:9580;;;;1011:15;;899:9580;1011:15;;899:9580;;;;1011:15;;899:9580;1011:15;;899:9580;;;;1011:15;;899:9580;1011:15;;899:9580;;;;1011:15;;899:9580;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;1230:15;;;;;899:9580;;;;;;;;;1230:15;;899:9580;;:::i;:::-;;;;;;;;;;;;;;1230:15;899:9580;;-1:-1:-1;899:9580:84;;;;;;:::o;:::-;;;;;1230:15;899:9580;;:::i;:::-;;1230:15;;899:9580;;;;1230:15;899:9580;;;;;:::o;1243:204:4:-;1302:7;899:9580:84;;;;;;;1325:14:4;:::o;1298:143::-;899:9580:84;;;1011:15;1377:39:4;;899:9580:84;1377:39:4;;;899:9580:84;192:59:4;;;;1230:15:84;192:59:4;1377:39;;;899:9580:84;1377:39:4;;;;;;;1011:15:84;1377:39:4;;;1298:143;1377:53;;;1370:60;:::o;1377:39::-;;;192:59;1377:39;;192:59;1377:39;;;;;;192:59;1377:39;;;:::i;:::-;;;192:59;;;;1230:15:84;1377:39:4;;;;;;-1:-1:-1;1377:39:4;;;899:9580:84;;;1011:15;899:9580;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;1689:113:4:-;899:9580:84;1771:24:4;;;;;899:9580:84;1771:24:4;899:9580:84;;;1771:24:4;;;;;1011:15:84;1771:24:4;;;;;;:::i;:::-;;;899:9580:84;1771:24:4;;;;;;;;1689:113;:::o;1771:24::-;;;;;:::i;1905:115::-;899:9580:84;1988:25:4;;;;;899:9580:84;1988:25:4;899:9580:84;;;1988:25:4;;;;;1011:15:84;1988:25:4;;;;;;:::i;2815:199:15:-;;899:9580:84;2933:19:15;2815:199;2933:19;:::i;:::-;1230:15:84;899:9580;1230:15;;899:9580;9786:54:15;899:9580:84;;;;;;:::i;9786:54:15:-;899:9580:84;9371:159:15;679:42;9371:159;;;2815:199::o;1042:78::-;;;;;;;:::o;:::-;;;;;;;;;;1546:1263;1011:15:84;1664:10:15;;;;899:9580:84;;1970:8:15;;;;;;:20;;;1546:1263;1966:34;;2026:9;;;;:::i;:::-;899:9580:84;2038:1:15;899:9580:84;;;;;;;2234:1:15;2229:6;;;:18;;;1546:1263;2225:38;;899:9580:84;2277:20:15;;;:46;;;1546:1263;2273:82;;2455:7;;;;;;2493;;;;;2528:11;2493:7;;:::i;:::-;2528:11;:::i;:::-;2557:8;;;2553:24;;2600:9;;;;:::i;:::-;1042:78;899:9580:84;;;;;;;2451:352:15;1546:1263::o;2553:24::-;2567:10;;;:::o;2451:352::-;2630:173;;;;;;;;2451:352;;;;;1546:1263::o;2630:173::-;2672:7;;;;;;2707:11;2672:7;;;:::i;2707:11::-;2736:8;;;2732:24;;2779:9;;;;:::i;:::-;2038:1;899:9580:84;;;;;;;2630:173:15;;;;;;;2273:82;899:9580:84;;;;2332:23:15;899:9580:84;;;;2332:23:15;;:::i;2277:46::-;899:9580:84;;;2301:22:15;;2277:46;;2225:38;2256:7;;;;;;;;;:::i;2229:18::-;2239:8;;;;2229:18;;1966:34;1992:8;;;;;;:::o;1970:20::-;1982:8;;;;;1970:20;;899:9580:84;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"methodIdentifiers":{"IS_TEST()":"fa7626d4","excludeArtifacts()":"b5508aa9","excludeContracts()":"e20c9f71","excludeSelectors()":"b0464fdc","excludeSenders()":"1ed7831c","failed()":"ba414fa6","setUp()":"0a9254e4","targetArtifactSelectors()":"66d9a9a0","targetArtifacts()":"85226c81","targetContracts()":"3f7286f4","targetInterfaces()":"2ade3880","targetSelectors()":"916a17c6","targetSenders()":"3e5e3c23","test_LimitUsageUpdated(address,bytes32,uint256)":"d00b36b5","test_validatePermission_Cumulative(uint256,uint256)":"defbce29","test_validatePermission_Equal(bytes4)":"47209179","test_validatePermission_GreaterThanOrEqual(uint256,uint256)":"ade0444f","test_validatePermission_NotEqual(uint256,uint256)":"68759f03","test_validatePermission_NotEqual_fail(uint256)":"d6320b71","test_validatePermission_WithMaskAndOffset(bytes,bytes32,uint256,bytes)":"a3daca27","test_validatePermission_WrongTarget(address)":"bbc69fb1"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"wallet\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"usageHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"usageAmount\",\"type\":\"uint256\"}],\"name\":\"LimitUsageUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"IS_TEST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"excludedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setUp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifactSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"artifact\",\"type\":\"string\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzArtifactSelector[]\",\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"targetedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetInterfaces\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"artifacts\",\"type\":\"string[]\"}],\"internalType\":\"struct StdInvariant.FuzzInterface[]\",\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"wallet\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"usageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"usageAmount\",\"type\":\"uint256\"}],\"name\":\"test_LimitUsageUpdated\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"test_validatePermission_Cumulative\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"test_validatePermission_Equal\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"testValue\",\"type\":\"uint256\"}],\"name\":\"test_validatePermission_GreaterThanOrEqual\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"testValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"compareValue\",\"type\":\"uint256\"}],\"name\":\"test_validatePermission_NotEqual\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"testValue\",\"type\":\"uint256\"}],\"name\":\"test_validatePermission_NotEqual_fail\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"mask\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"offset\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"secondCallData\",\"type\":\"bytes\"}],\"name\":\"test_validatePermission_WithMaskAndOffset\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"wrongTarget\",\"type\":\"address\"}],\"name\":\"test_validatePermission_WrongTarget\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"events\":{\"LimitUsageUpdated(address,bytes32,uint256)\":{\"notice\":\"Emitted when the usage amount for a given wallet and usage hash is updated\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/extensions/sessions/explicit/PermissionValidator.t.sol\":\"PermissionValidatorTest\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/extensions/sessions/explicit/Permission.sol\":{\"keccak256\":\"0x0bc35a04da3830c64ec13c32b57f88be6b980228f6b387e800cf70919cdcfb16\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://fcb304612f894699f8e1e40cf134abebe8f7135795bea479b04e967551c59948\",\"dweb:/ipfs/Qme4mD8dh3xU9wbscQwvL4cQcZ2Wv8Fobo2fmU29B3DirV\"]},\"src/extensions/sessions/explicit/PermissionValidator.sol\":{\"keccak256\":\"0xe970e1ce931ef3779e3ddc9525b40820b7f63746828a440306ff9c984da42234\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://9154a986b7a5565119b2c0993dd9bc9e6e9b3e07eede034c8fde1c9f39a56a30\",\"dweb:/ipfs/QmXbgsr6kYYK5gmge6sosgwbHnFnQW5ntCZCyeNTQqTndD\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"test/extensions/sessions/explicit/PermissionValidator.t.sol\":{\"keccak256\":\"0x8ce86fb1785e0f79c087de95fb7b9dd9d0d167e9a8508014a5e7c1454065a436\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://486cd4c90976fdacda86b94e9646039899d3339238717acc1d2a1c1ddfa7cbd5\",\"dweb:/ipfs/QmRZMxDcSNQQhX9bNh4sPdqQD3MspMNfzYbEPWhzfht4wN\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"wallet","type":"address","indexed":false},{"internalType":"bytes32","name":"usageHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"usageAmount","type":"uint256","indexed":false}],"type":"event","name":"LimitUsageUpdated","anonymous":false},{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log","anonymous":false},{"inputs":[{"internalType":"address","name":"","type":"address","indexed":false}],"type":"event","name":"log_address","anonymous":false},{"inputs":[{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"log_bytes","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32","indexed":false}],"type":"event","name":"log_bytes32","anonymous":false},{"inputs":[{"internalType":"int256","name":"","type":"int256","indexed":false}],"type":"event","name":"log_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address","name":"val","type":"address","indexed":false}],"type":"event","name":"log_named_address","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes","name":"val","type":"bytes","indexed":false}],"type":"event","name":"log_named_bytes","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes32","name":"val","type":"bytes32","indexed":false}],"type":"event","name":"log_named_bytes32","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false}],"type":"event","name":"log_named_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"string","name":"val","type":"string","indexed":false}],"type":"event","name":"log_named_string","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false}],"type":"event","name":"log_named_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log_string","anonymous":false},{"inputs":[{"internalType":"uint256","name":"","type":"uint256","indexed":false}],"type":"event","name":"log_uint","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"logs","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"IS_TEST","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeArtifacts","outputs":[{"internalType":"string[]","name":"excludedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeContracts","outputs":[{"internalType":"address[]","name":"excludedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"excludedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSenders","outputs":[{"internalType":"address[]","name":"excludedSenders_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"failed","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"setUp"},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifactSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzArtifactSelector[]","name":"targetedArtifactSelectors_","type":"tuple[]","components":[{"internalType":"string","name":"artifact","type":"string"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifacts","outputs":[{"internalType":"string[]","name":"targetedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetContracts","outputs":[{"internalType":"address[]","name":"targetedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetInterfaces","outputs":[{"internalType":"struct StdInvariant.FuzzInterface[]","name":"targetedInterfaces_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"string[]","name":"artifacts","type":"string[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"targetedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSenders","outputs":[{"internalType":"address[]","name":"targetedSenders_","type":"address[]"}]},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bytes32","name":"usageHash","type":"bytes32"},{"internalType":"uint256","name":"usageAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"test_LimitUsageUpdated"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"test_validatePermission_Cumulative"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"stateMutability":"view","type":"function","name":"test_validatePermission_Equal"},{"inputs":[{"internalType":"uint256","name":"threshold","type":"uint256"},{"internalType":"uint256","name":"testValue","type":"uint256"}],"stateMutability":"view","type":"function","name":"test_validatePermission_GreaterThanOrEqual"},{"inputs":[{"internalType":"uint256","name":"testValue","type":"uint256"},{"internalType":"uint256","name":"compareValue","type":"uint256"}],"stateMutability":"view","type":"function","name":"test_validatePermission_NotEqual"},{"inputs":[{"internalType":"uint256","name":"testValue","type":"uint256"}],"stateMutability":"view","type":"function","name":"test_validatePermission_NotEqual_fail"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"bytes32","name":"mask","type":"bytes32"},{"internalType":"uint256","name":"offset","type":"uint256"},{"internalType":"bytes","name":"secondCallData","type":"bytes"}],"stateMutability":"view","type":"function","name":"test_validatePermission_WithMaskAndOffset"},{"inputs":[{"internalType":"address","name":"wrongTarget","type":"address"}],"stateMutability":"view","type":"function","name":"test_validatePermission_WrongTarget"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/extensions/sessions/explicit/PermissionValidator.t.sol":"PermissionValidatorTest"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/extensions/sessions/explicit/Permission.sol":{"keccak256":"0x0bc35a04da3830c64ec13c32b57f88be6b980228f6b387e800cf70919cdcfb16","urls":["bzz-raw://fcb304612f894699f8e1e40cf134abebe8f7135795bea479b04e967551c59948","dweb:/ipfs/Qme4mD8dh3xU9wbscQwvL4cQcZ2Wv8Fobo2fmU29B3DirV"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/PermissionValidator.sol":{"keccak256":"0xe970e1ce931ef3779e3ddc9525b40820b7f63746828a440306ff9c984da42234","urls":["bzz-raw://9154a986b7a5565119b2c0993dd9bc9e6e9b3e07eede034c8fde1c9f39a56a30","dweb:/ipfs/QmXbgsr6kYYK5gmge6sosgwbHnFnQW5ntCZCyeNTQqTndD"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"test/extensions/sessions/explicit/PermissionValidator.t.sol":{"keccak256":"0x8ce86fb1785e0f79c087de95fb7b9dd9d0d167e9a8508014a5e7c1454065a436","urls":["bzz-raw://486cd4c90976fdacda86b94e9646039899d3339238717acc1d2a1c1ddfa7cbd5","dweb:/ipfs/QmRZMxDcSNQQhX9bNh4sPdqQD3MspMNfzYbEPWhzfht4wN"],"license":"Apache-2.0"}},"version":1},"id":84} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/PrimitivesRPC.sol/PrimitivesRPC.json b/contracts/artifacts/wallet-contracts-v3/PrimitivesRPC.sol/PrimitivesRPC.json new file mode 100644 index 00000000..13163c22 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/PrimitivesRPC.sol/PrimitivesRPC.json @@ -0,0 +1 @@ +{"abi":[],"bytecode":{"object":"0x60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea2646970667358221220ae7a1c9213af4d339fb8b06e0b4753ee910bf2f3d95da336ae3ae6a94a31831a64736f6c634300081c0033","sourceMap":"156:20611:97:-:0;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x600080fdfea2646970667358221220ae7a1c9213af4d339fb8b06e0b4753ee910bf2f3d95da336ae3ae6a94a31831a64736f6c634300081c0033","sourceMap":"156:20611:97:-:0;;","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/utils/PrimitivesRPC.sol\":\"PrimitivesRPC\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"test/utils/PrimitivesRPC.sol\":{\"keccak256\":\"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe\",\"dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/utils/PrimitivesRPC.sol":"PrimitivesRPC"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"test/utils/PrimitivesRPC.sol":{"keccak256":"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe","urls":["bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe","dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv"],"license":"Apache-2.0"}},"version":1},"id":97} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Recovery.sol/Recovery.json b/contracts/artifacts/wallet-contracts-v3/Recovery.sol/Recovery.json new file mode 100644 index 00000000..9ac21851 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Recovery.sol/Recovery.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"queuePayload","inputs":[{"name":"_wallet","type":"address","internalType":"address"},{"name":"_signer","type":"address","internalType":"address"},{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"queuedPayloadHashes","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"recoverSapientSignatureCompact","inputs":[{"name":"_payloadHash","type":"bytes32","internalType":"bytes32"},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"recoveryPayloadHash","inputs":[{"name":"_wallet","type":"address","internalType":"address"},{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"timestampForQueuedPayload","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"},{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"totalQueuedPayloads","inputs":[{"name":"_wallet","type":"address","internalType":"address"},{"name":"_signer","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"event","name":"NewQueuedPayload","inputs":[{"name":"_wallet","type":"address","indexed":false,"internalType":"address"},{"name":"_signer","type":"address","indexed":false,"internalType":"address"},{"name":"_payloadHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_timestamp","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"AlreadyQueued","inputs":[{"name":"_wallet","type":"address","internalType":"address"},{"name":"_signer","type":"address","internalType":"address"},{"name":"_payloadHash","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"InvalidKind","inputs":[{"name":"kind","type":"uint8","internalType":"uint8"}]},{"type":"error","name":"InvalidSignature","inputs":[{"name":"_wallet","type":"address","internalType":"address"},{"name":"_signer","type":"address","internalType":"address"},{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"InvalidSignatureFlag","inputs":[{"name":"_flag","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"QueueNotReady","inputs":[{"name":"_wallet","type":"address","internalType":"address"},{"name":"_payloadHash","type":"bytes32","internalType":"bytes32"}]}],"bytecode":{"object":"0x6080806040523460155761191d908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c80630e159f8014610077578063898bd92114610072578063b00c84841461006d578063b05f87db14610068578063d834bcbf146100635763ec08af331461005e57600080fd5b610656565b6105a2565b6102e6565b61027b565b6101b6565b3461011c5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c576100ae610121565b6101056100b9610144565b73ffffffffffffffffffffffffffffffffffffffff6044359316600052600060205260406000209073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b906000526020526020604060002054604051908152f35b600080fd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361011c57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361011c57565b359073ffffffffffffffffffffffffffffffffffffffff8216820361011c57565b9181601f8401121561011c5782359167ffffffffffffffff831161011c576020838186019501011161011c57565b3461011c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c5760043560243567ffffffffffffffff811161011c5761020b610213913690600401610188565b90833361102f565b901561022457602090604051908152f35b507f904689fc0000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff331660045260245260446000fd5b908161012091031261011c5790565b3461011c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c576102b2610121565b60243567ffffffffffffffff811161011c576020916102d86102de92369060040161026c565b90610a7f565b604051908152f35b3461011c5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c5761031d610121565b610325610144565b60443567ffffffffffffffff811161011c5761034590369060040161026c565b60643567ffffffffffffffff811161011c57610365903690600401610188565b90610373828285878961146c565b1561051b5750508261038961038e9236906109b3565b6115e6565b906103f5826103e6836103c18773ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b90600052602052604060002090565b546104cc576104c77faeb5575092e25ccd826d5de3515c096028bb338c1f304db40dc831c3746ee0ae9342610452856103e6866103c18673ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b5561048a84610485856103c18573ffffffffffffffffffffffffffffffffffffffff166000526001602052604060002090565b610f72565b6040519384934292859094939273ffffffffffffffffffffffffffffffffffffffff60609381608085019816845216602083015260408201520152565b0390a1005b7f654c8bbf0000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff9283166004529190911660245260445260646000fd5b6040517f44b7a405000000000000000000000000000000000000000000000000000000008152948594610552949160048701610e31565b0390fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805482101561059d5760005260206000200190600090565b610556565b3461011c5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c576105d9610121565b6106306105e4610144565b73ffffffffffffffffffffffffffffffffffffffff6044359316600052600160205260406000209073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b90815481101561011c5761064391610585565b905460405160039290921b1c8152602090f35b3461011c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c5760206106e2610692610121565b73ffffffffffffffffffffffffffffffffffffffff6106af610144565b91166000526001835260406000209073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b54604051908152f35b8015150361011c57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761076557604052565b6106f5565b6040519061077960e083610724565b565b6040519061077961012083610724565b359060ff8216820361011c57565b3590610779826106eb565b67ffffffffffffffff81116107655760051b60200190565b81601f8201121561011c5780359067ffffffffffffffff8211610765576040519261080f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8601160185610724565b8284526020838301011161011c57816000926020809301838601378301015290565b81601f8201121561011c57803590610848826107a4565b926108566040519485610724565b82845260208085019360051b8301019181831161011c5760208101935b83851061088257505050505090565b843567ffffffffffffffff811161011c57820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828603011261011c576108c961076a565b916108d660208301610167565b83526040820135602084015260608201359267ffffffffffffffff841161011c5760e08361090b8860208098819801016107bc565b60408401526080810135606084015261092660a08201610799565b608084015261093760c08201610799565b60a0840152013560c0820152815201940193610873565b9080601f8301121561011c578135610965816107a4565b926109736040519485610724565b81845260208085019260051b82010192831161011c57602001905b82821061099b5750505090565b602080916109a884610167565b81520191019061098e565b9190916101208184031261011c576109c961077b565b926109d38261078b565b84526109e160208301610799565b6020850152604082013567ffffffffffffffff811161011c5781610a06918401610831565b6040850152606082013560608501526080820135608085015260a082013567ffffffffffffffff811161011c5781610a3f9184016107bc565b60a085015260c082013560c085015260e082013560e085015261010082013567ffffffffffffffff811161011c57610a77920161094e565b610100830152565b610bc8610b5a610b55610b9c936020860135610a9a816106eb565b15610bce576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527fd50a220b5983c5d6e86926072ffa8a3197ae49602ffc9dd0e60d62d561a2e1d560408501527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606085015260808401521660a082015260a08152610b4a60c082610724565b5190209436906109b3565b611236565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610724565b51902090565b4690610aa3565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561011c57016020813591019167ffffffffffffffff821161011c578160051b3603831361011c57565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561011c57016020813591019167ffffffffffffffff821161011c57813603831361011c57565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b90602083828152019160208260051b8501019381936000915b848310610ce05750505050505090565b9091929394957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08282030183528635907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff218636030182121561011c576020809187600194019073ffffffffffffffffffffffffffffffffffffffff610d6483610167565b168152828201358382015260c080610d93610d826040860186610c28565b60e0604087015260e0860191610c78565b93606081013560608501526080810135610dac816106eb565b15156080850152610dcd60a0820135610dc4816106eb565b151560a0860152565b01359101529801930193019194939290610cd0565b9160209082815201919060005b818110610dfc5750505090565b90919260208060019273ffffffffffffffffffffffffffffffffffffffff610e2388610167565b168152019401929101610def565b93919273ffffffffffffffffffffffffffffffffffffffff610f6f969481610f619416875216602086015260806040860152610e7a60808601610e738361078b565b60ff169052565b610e92610e8960208301610799565b151560a0870152565b610f30610f0e610ebb610ea86040850185610bd5565b61012060c08b01526101a08a0191610cb7565b606084013560e08901526080840135610100890152610edd60a0850185610c28565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808a8403016101208b0152610c78565b9160c081013561014088015260e0810135610160880152610100810190610bd5565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8087840301610180880152610de2565b926060818503910152610c78565b90565b80546801000000000000000081101561076557610f9491600182018155610585565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff829392549160031b92831b921b1916179055565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9190820391821161100557565b610fc9565b9190820180921161100557565b9093929384831161011c57841161011c578101920390565b600094938593929091845b83811061104a5750505050509190565b8481013560f81c97959060019081019081908a146111285750600389146110fc57600489146110a2577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b6003810198506110d1906110c9906110c09088013560e81c8b61100a565b809a8789611017565b90858561102f565b906110ee929081156110f4575b5096600052602052604060002090565b9661103a565b9050386110de565b95975094808501359060200197801561112257906110ee91600052602052604060002090565b506110ee565b67ffffffffffffffff9950919691868101803560601c9250601481013560e81c9160179091013560c01c90601f019a169161118b866103e6836103c18973ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b548281151591826111e7575b826111d2575b50506111c9575b906111af92916116ba565b90801561112257906110ee91600052602052604060002090565b600198506111a4565b6111de91925042610ff8565b1015823861119d565b858110159250611197565b805160209091019060005b81811061120a5750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016111fd565b61010081015160405161125181610b9c6020820180956111f2565b51902090611260815160ff1690565b60ff8116806112d957505090610bc861127c604084015161176c565b92610b9c60806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b6001810361133757505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46693810193845290810191909152606081019290925290610bc88160808101610b9c565b6002810361138d57505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e460208201908152918101929092526060820192909252610bc88160808101610b9c565b6003036113e1575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46660208201908152918101929092526060820192909252610bc88160808101610b9c565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b6040513d6000823e3d90fd5b9081602091031261011c57517fffffffff000000000000000000000000000000000000000000000000000000008116810361011c5790565b604090610f6f949281528160208201520191610c78565b9161147991939492610a7f565b9160408214611576575b803b6114925750505050600090565b6114e49373ffffffffffffffffffffffffffffffffffffffff602094604051968795869485937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611455565b0392165afa908115611571577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091611542575b50161490565b611564915060203d60201161156a575b61155c8183610724565b81019061141d565b3861153c565b503d611552565b611411565b602060006115ad611586876118a7565b50604080518a815260ff909216602083015281019290925260608201529081906080820190565b838052039060015afa156115715760005173ffffffffffffffffffffffffffffffffffffffff8083169116036114835750505050600190565b90610bc8610b5a610b9c92602085015115156000146116b3576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a081526116aa60c082610724565b51902093611236565b4690611603565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e6365207265636f76657279206c6561663a0a0000000000000000865260601b166038840152604c830152606c820152606c8152610bc8608c82610724565b805182101561059d5760209160051b010190565b805160209091019060005b8181106117565750505090565b8251845260209384019390920191600101611749565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06117b261179c836107a4565b926117aa6040519485610724565b8084526107a4565b0136602083013760005b835181101561188e57806117d26001928661172a565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e0830152610100820152610100815261187a61012082610724565b519020611887828561172a565b52016117bc565b50909150604051610bc881610b9c60208201809561173e565b9060208235920135906040601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff8111611005579156fea2646970667358221220d539ab522b32b2ad085cedfc53eec77deae0895e2a1415f9d51908cbcaeb8a2f64736f6c634300081c0033","sourceMap":"539:7295:32:-:0;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436101561001257600080fd5b60003560e01c80630e159f8014610077578063898bd92114610072578063b00c84841461006d578063b05f87db14610068578063d834bcbf146100635763ec08af331461005e57600080fd5b610656565b6105a2565b6102e6565b61027b565b6101b6565b3461011c5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c576100ae610121565b6101056100b9610144565b73ffffffffffffffffffffffffffffffffffffffff6044359316600052600060205260406000209073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b906000526020526020604060002054604051908152f35b600080fd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361011c57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361011c57565b359073ffffffffffffffffffffffffffffffffffffffff8216820361011c57565b9181601f8401121561011c5782359167ffffffffffffffff831161011c576020838186019501011161011c57565b3461011c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c5760043560243567ffffffffffffffff811161011c5761020b610213913690600401610188565b90833361102f565b901561022457602090604051908152f35b507f904689fc0000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff331660045260245260446000fd5b908161012091031261011c5790565b3461011c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c576102b2610121565b60243567ffffffffffffffff811161011c576020916102d86102de92369060040161026c565b90610a7f565b604051908152f35b3461011c5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c5761031d610121565b610325610144565b60443567ffffffffffffffff811161011c5761034590369060040161026c565b60643567ffffffffffffffff811161011c57610365903690600401610188565b90610373828285878961146c565b1561051b5750508261038961038e9236906109b3565b6115e6565b906103f5826103e6836103c18773ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b90600052602052604060002090565b546104cc576104c77faeb5575092e25ccd826d5de3515c096028bb338c1f304db40dc831c3746ee0ae9342610452856103e6866103c18673ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b5561048a84610485856103c18573ffffffffffffffffffffffffffffffffffffffff166000526001602052604060002090565b610f72565b6040519384934292859094939273ffffffffffffffffffffffffffffffffffffffff60609381608085019816845216602083015260408201520152565b0390a1005b7f654c8bbf0000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff9283166004529190911660245260445260646000fd5b6040517f44b7a405000000000000000000000000000000000000000000000000000000008152948594610552949160048701610e31565b0390fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805482101561059d5760005260206000200190600090565b610556565b3461011c5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c576105d9610121565b6106306105e4610144565b73ffffffffffffffffffffffffffffffffffffffff6044359316600052600160205260406000209073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b90815481101561011c5761064391610585565b905460405160039290921b1c8152602090f35b3461011c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c5760206106e2610692610121565b73ffffffffffffffffffffffffffffffffffffffff6106af610144565b91166000526001835260406000209073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b54604051908152f35b8015150361011c57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761076557604052565b6106f5565b6040519061077960e083610724565b565b6040519061077961012083610724565b359060ff8216820361011c57565b3590610779826106eb565b67ffffffffffffffff81116107655760051b60200190565b81601f8201121561011c5780359067ffffffffffffffff8211610765576040519261080f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8601160185610724565b8284526020838301011161011c57816000926020809301838601378301015290565b81601f8201121561011c57803590610848826107a4565b926108566040519485610724565b82845260208085019360051b8301019181831161011c5760208101935b83851061088257505050505090565b843567ffffffffffffffff811161011c57820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828603011261011c576108c961076a565b916108d660208301610167565b83526040820135602084015260608201359267ffffffffffffffff841161011c5760e08361090b8860208098819801016107bc565b60408401526080810135606084015261092660a08201610799565b608084015261093760c08201610799565b60a0840152013560c0820152815201940193610873565b9080601f8301121561011c578135610965816107a4565b926109736040519485610724565b81845260208085019260051b82010192831161011c57602001905b82821061099b5750505090565b602080916109a884610167565b81520191019061098e565b9190916101208184031261011c576109c961077b565b926109d38261078b565b84526109e160208301610799565b6020850152604082013567ffffffffffffffff811161011c5781610a06918401610831565b6040850152606082013560608501526080820135608085015260a082013567ffffffffffffffff811161011c5781610a3f9184016107bc565b60a085015260c082013560c085015260e082013560e085015261010082013567ffffffffffffffff811161011c57610a77920161094e565b610100830152565b610bc8610b5a610b55610b9c936020860135610a9a816106eb565b15610bce576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527fd50a220b5983c5d6e86926072ffa8a3197ae49602ffc9dd0e60d62d561a2e1d560408501527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606085015260808401521660a082015260a08152610b4a60c082610724565b5190209436906109b3565b611236565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610724565b51902090565b4690610aa3565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561011c57016020813591019167ffffffffffffffff821161011c578160051b3603831361011c57565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561011c57016020813591019167ffffffffffffffff821161011c57813603831361011c57565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b90602083828152019160208260051b8501019381936000915b848310610ce05750505050505090565b9091929394957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08282030183528635907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff218636030182121561011c576020809187600194019073ffffffffffffffffffffffffffffffffffffffff610d6483610167565b168152828201358382015260c080610d93610d826040860186610c28565b60e0604087015260e0860191610c78565b93606081013560608501526080810135610dac816106eb565b15156080850152610dcd60a0820135610dc4816106eb565b151560a0860152565b01359101529801930193019194939290610cd0565b9160209082815201919060005b818110610dfc5750505090565b90919260208060019273ffffffffffffffffffffffffffffffffffffffff610e2388610167565b168152019401929101610def565b93919273ffffffffffffffffffffffffffffffffffffffff610f6f969481610f619416875216602086015260806040860152610e7a60808601610e738361078b565b60ff169052565b610e92610e8960208301610799565b151560a0870152565b610f30610f0e610ebb610ea86040850185610bd5565b61012060c08b01526101a08a0191610cb7565b606084013560e08901526080840135610100890152610edd60a0850185610c28565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808a8403016101208b0152610c78565b9160c081013561014088015260e0810135610160880152610100810190610bd5565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8087840301610180880152610de2565b926060818503910152610c78565b90565b80546801000000000000000081101561076557610f9491600182018155610585565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff829392549160031b92831b921b1916179055565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9190820391821161100557565b610fc9565b9190820180921161100557565b9093929384831161011c57841161011c578101920390565b600094938593929091845b83811061104a5750505050509190565b8481013560f81c97959060019081019081908a146111285750600389146110fc57600489146110a2577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b6003810198506110d1906110c9906110c09088013560e81c8b61100a565b809a8789611017565b90858561102f565b906110ee929081156110f4575b5096600052602052604060002090565b9661103a565b9050386110de565b95975094808501359060200197801561112257906110ee91600052602052604060002090565b506110ee565b67ffffffffffffffff9950919691868101803560601c9250601481013560e81c9160179091013560c01c90601f019a169161118b866103e6836103c18973ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b548281151591826111e7575b826111d2575b50506111c9575b906111af92916116ba565b90801561112257906110ee91600052602052604060002090565b600198506111a4565b6111de91925042610ff8565b1015823861119d565b858110159250611197565b805160209091019060005b81811061120a5750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016111fd565b61010081015160405161125181610b9c6020820180956111f2565b51902090611260815160ff1690565b60ff8116806112d957505090610bc861127c604084015161176c565b92610b9c60806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b6001810361133757505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46693810193845290810191909152606081019290925290610bc88160808101610b9c565b6002810361138d57505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e460208201908152918101929092526060820192909252610bc88160808101610b9c565b6003036113e1575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46660208201908152918101929092526060820192909252610bc88160808101610b9c565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b6040513d6000823e3d90fd5b9081602091031261011c57517fffffffff000000000000000000000000000000000000000000000000000000008116810361011c5790565b604090610f6f949281528160208201520191610c78565b9161147991939492610a7f565b9160408214611576575b803b6114925750505050600090565b6114e49373ffffffffffffffffffffffffffffffffffffffff602094604051968795869485937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611455565b0392165afa908115611571577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091611542575b50161490565b611564915060203d60201161156a575b61155c8183610724565b81019061141d565b3861153c565b503d611552565b611411565b602060006115ad611586876118a7565b50604080518a815260ff909216602083015281019290925260608201529081906080820190565b838052039060015afa156115715760005173ffffffffffffffffffffffffffffffffffffffff8083169116036114835750505050600190565b90610bc8610b5a610b9c92602085015115156000146116b3576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a081526116aa60c082610724565b51902093611236565b4690611603565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e6365207265636f76657279206c6561663a0a0000000000000000865260601b166038840152604c830152606c820152606c8152610bc8608c82610724565b805182101561059d5760209160051b010190565b805160209091019060005b8181106117565750505090565b8251845260209384019390920191600101611749565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06117b261179c836107a4565b926117aa6040519485610724565b8084526107a4565b0136602083013760005b835181101561188e57806117d26001928661172a565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e0830152610100820152610100815261187a61012082610724565b519020611887828561172a565b52016117bc565b50909150604051610bc881610b9c60208201809561173e565b9060208235920135906040601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff8111611005579156fea2646970667358221220d539ab522b32b2ad085cedfc53eec77deae0895e2a1415f9d51908cbcaeb8a2f64736f6c634300081c0033","sourceMap":"539:7295:32:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;2242:100;539:7295;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;2242:100;539:7295;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;5975:52;539:7295;;;;;;:::i;:::-;5990:10;;;5975:52;:::i;:::-;6037:9;;6033:76;;539:7295;;;;;;;;6033:76;6063:39;;-1:-1:-1;6063:39:32;539:7295;5990:10;539:7295;;;;;;-1:-1:-1;6063:39:32;539:7295;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;6556:56;;;;;;;;:::i;:::-;6555:57;6551:141;;539:7295;;;;6720:34;539:7295;;;;:::i;:::-;6720:34;:::i;:::-;6764;:56;:34;:43;:34;;;539:7295;;6764:25;539:7295;6764:25;539:7295;;;6764:25;539:7295;;;6764:34;539:7295;;;;;;;;;;;;6764:43;539:7295;;;;;;;;;;6764:56;539:7295;6760:133;;7046:64;;6958:15;;6899:56;:34;:43;:34;;;539:7295;;6764:25;539:7295;6764:25;539:7295;;;6764:25;539:7295;;;6899:56;539:7295;6979:55;:28;:37;:28;;;539:7295;;;;6979:19;539:7295;;;;;;;6979:37;:55;:::i;:::-;539:7295;;6958:15;;;;7046:64;;539:7295;;;;;;;;;;;;;;;;;;;;;;;;;;;7046:64;;;;539:7295;6760:133;6842:44;-1:-1:-1;6842:44:32;539:7295;;;;;;;;;;;;;;;-1:-1:-1;6842:44:32;6551:141;539:7295;;6629:56;;;539:7295;;;6629:56;;539:7295;;6629:56;;;:::i;:::-;;;;539:7295;;;;;;;;;;;;;;;;;;-1:-1:-1;539:7295:32;;-1:-1:-1;539:7295:32;;;-1:-1:-1;539:7295:32;:::o;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;2439:76;539:7295;;:::i;:::-;;;;;;-1:-1:-1;539:7295:32;2439:76;539:7295;;;-1:-1:-1;539:7295:32;;;;;;;;;;;;;2439:76;539:7295;;;2439:76;;;;;;;;:::i;:::-;539:7295;;;;;;;;;;;;;;;;;;;;;;;;;;;2888:37;539:7295;;:::i;:::-;;;;:::i;:::-;;;-1:-1:-1;539:7295:32;2888:19;539:7295;;;-1:-1:-1;539:7295:32;;;;;;;;;;;;;2888:37;539:7295;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;:::i;:::-;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;539:7295:32;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;5458:308::-;5712:48;5663:26;539:7295;5712:48;5458:308;5608:18;;;539:7295;;;;:::i;:::-;2055:48;;;-1:-1:-1;2055:48:32;;539:7295;;;1926:202;5608:18;1926:202;;;635:95;539:7295;;790:44;539:7295;896:14;;539:7295;896:14;;;;539:7295;896:14;;;539:7295;;896:14;;;539:7295;896:14;1926:202;;;;;;:::i;:::-;539:7295;1909:225;;539:7295;;;;:::i;:::-;5663:26;:::i;:::-;539:7295;;5712:48;;;5608:18;5712:48;;;;539:7295;;;;;;;;;;;;;;;;;;5712:48;;1926:202;5712:48;;;;;;:::i;:::-;539:7295;5702:59;;5458:308;:::o;2055:48::-;2089:13;2055:48;;;539:7295;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;539:7295:32;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;539:7295:32;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;539:7295:32;;;;;;;;;;:::o;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::o;1013:1::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;1101:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;3209:2021::-;539:7295;;3209:2021;539:7295;;3209:2021;;;539:7295;3401:26;;;;;;5202:23;;;;;;3209:2021;:::o;3394:1802::-;798:135:68;;;;;;;683:254;;798:135;;;;;;;3584:26:32;;3580:845;;4437:17;1056:1;4437:17;;4433:231;;1101:1;4676:19;;4672:476;;5163:26;539:7295;5163:26;1101:1;539:7295;;;;-1:-1:-1;6842:44:32;4672:476;1318:135:68;;;;-1:-1:-1;4938:65:32;;4976:26;;4880:13;;1318:135:68;;;;;;4880:13:32;:::i;:::-;4976:26;;;;;:::i;:::-;4938:65;;;;:::i;:::-;;5089:32;4938:65;5013:16;5051:21;;;;4672:476;5040:32;5089;545:85:69;;;;;;;461:173;;5089:32:32;5131:8;3394:1802;;5051:21;;;;;;4433:231;2926:232:68;;-1:-1:-1;2926:232:68;3047:107;;;;;;;4578:59:32;:18;;;;4599:31;;;545:85:69;;;;;;;461:173;;4578:59:32;;;;3580:845;1013:1;;-1:-1:-1;3162:307:68;;;3281:184;;;;;;;;-1:-1:-1;3281:184:68;1318:135;;;;;;;1578;;;;;;;;;3889:54:32;1013:1;4034:34;:56;:34;:42;:34;;;539:7295;;6764:25;539:7295;6764:25;539:7295;;;6764:25;539:7295;;;4034:56;539:7295;4104:13;;;;:41;;;;3580:845;4104:92;;;3580:845;4100:136;;;;3580:845;4261:61;;;;;:::i;:::-;4339:59;:18;;;;4360:31;;;545:85:69;;;;;;;461:173;;4100:136:32;1013:1;;-1:-1:-1;4100:136:32;;4104:92;4149:26;:15;;;;:26;:::i;:::-;:47;;4104:92;;;;:41;4121:24;;;;;-1:-1:-1;4104:41:32;;539:7295;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;8278:1282:48;8416:22;;;;539:7295:32;;8399:40:48;;539:7295:32;8399:40:48;;;539:7295:32;;;:::i;8399:40:48:-;539:7295:32;8389:51:48;;539:7295:32;;;;;;;;;;;;8451:34:48;539:7295:32;;8525:14:48;;;8712:82;8515:25;539:7295:32;8525:14:48;;;8515:25;:::i;:::-;8750:14;8712:82;8766:14;8750;;;1799:66;8766:14;;1799:66;539:7295:32;;;8712:82:48;;;8399:40;8712:82;;;;1799:66;;;;;;;;;539:7295:32;1799:66:48;539:7295:32;;1799:66:48;;;539:7295:32;1799:66:48;;;539:7295:32;1799:66:48;;;539:7295:32;1799:66:48;539:7295:32;1799:66:48;8447:1109;2395:4;8812:29;;2395:4;;-1:-1:-1;;8998:16:48;;;539:7295:32;;8399:40:48;539:7295:32;;;8988:27:48;539:7295:32;;;1979:66:48;8959:70;;;539:7295:32;;;1979:66:48;;;539:7295:32;;;;1979:66:48;;;539:7295:32;;;;8959:70:48;;539:7295:32;1979:66:48;;;8959:70;1979:66;8808:748;2482:4;9047:35;;2482:4;;-1:-1:-1;;9216:18:48;;1979:66;539:7295:32;;;2174:66:48;8399:40;9181:67;;539:7295:32;;;1979:66:48;;;539:7295:32;;;;1979:66:48;;;539:7295:32;;;;9181:67:48;539:7295:32;1979:66:48;;;9181:67;1979:66;9043:513;2556:4;9266:28;2556:4;;-1:-1:-1;9443:15:48;;1979:66;539:7295:32;;;1979:66:48;8399:40;9414:58;;539:7295:32;;;1979:66:48;;;539:7295:32;;;;1979:66:48;;;539:7295:32;;;;9414:58:48;539:7295:32;1979:66:48;;;9414:58;1979:66;9262:294;9523:26;539:7295:32;9523:26:48;539:7295:32;;9523:26:48;539:7295:32;2556:4:48;-1:-1:-1;6842:44:32;539:7295;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;7119:712::-;;7319:38;7119:712;;;;7319:38;:::i;:::-;7368:23;7389:2;7368:23;;7364:280;;7119:712;7654:19;;7650:158;;7814:12;;;;539:7295;7119:712;:::o;7650:158::-;7712:60;539:7295;;7712:60;539:7295;7389:2;539:7295;7712:60;;;;;;;539:7295;7712:60;;;;;;:::i;:::-;;539:7295;;7712:60;;;;;;;539:7295;7712:60;539:7295;7712:60;539:7295;7712:60;;;7650:158;539:7295;;7712:89;7705:96;:::o;7712:60::-;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;:::i;7364:280::-;7547:32;539:7295;7547:32;3511:494:68;;;:::i;:::-;-1:-1:-1;7389:2:32;539:7295;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7547:32;;;;;;;;;;;;539:7295;7547:32;539:7295;;;;;;7591:15;7364:280;7587:51;7618:11;;;;7547:32;7618:11;:::o;9842:280:48:-;;10068:48;10027:18;10068:48;9842:280;9972:18;;;539:7295:32;;;1206:48:48;;;;-1:-1:-1;1206:48:48;;539:7295:32;;;1077:202:48;9972:18;1077:202;;;539:66;:7295:32;;709:66:48;539:7295:32;896:14;;539:7295;868:66:48;896:14:32;;;539:7295;896:14;;;539:7295;;896:14;;;539:7295;896:14;1077:202:48;;;;;;:::i;:::-;539:7295:32;1060:225:48;;10027:18;;:::i;1206:48::-;1240:13;1206:48;;;2941:264:32;;539:7295;;3110:89;539:7295;3110:89;;;539:7295;;;;;;;;;;;;;;;;;;;;3110:89;;;;;;:::i;539:7295::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;7820:454:48;;539:7295:32;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;-1:-1:-1;8164:3:48;539:7295:32;;8146:16:48;;;;;8202:8;;539:7295:32;8202:8:48;;;:::i;:::-;;539:7295:32;1478:66:48;;539:7295:32;7708:7:48;539:7295:32;7708:7:48;;1799:66;7727:6;539:7295:32;7727:6:48;;;539:7295:32;;;;;7717:17:48;7736:10;;;;1799:66;7748:14;;;539:7295:32;;;7764:14:48;7780:17;7764:14;;;539:7295:32;;;7780:17:48;;1799:66;539:7295:32;;;7667:138:48;539:7295:32;7667:138:48;;539:7295:32;1478:66:48;539:7295:32;;;1478:66:48;;539:7295:32;7736:10:48;1478:66;;539:7295:32;7748:14:48;1478:66;;539:7295:32;7764:14:48;1478:66;;539:7295:32;7780:17:48;1478:66;;539:7295:32;1478:66:48;;;539:7295:32;1478:66:48;;;539:7295:32;1478:66:48;7667:138;;;;;;:::i;:::-;539:7295:32;7650:161:48;;8177:34;;;;:::i;:::-;539:7295:32;;8131:13:48;;8146:16;;;;;539:7295:32;;8240:28:48;;539:7295:32;;8240:28:48;;539:7295:32;;;:::i;3511:494:68:-;;3690:173;;;;;;;;3998:2;3955:14;3931:39;;539:7295:32;;;;;;;;;3511:494:68;:::o","linkReferences":{}},"methodIdentifiers":{"queuePayload(address,address,(uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":"b05f87db","queuedPayloadHashes(address,address,uint256)":"d834bcbf","recoverSapientSignatureCompact(bytes32,bytes)":"898bd921","recoveryPayloadHash(address,(uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]))":"b00c8484","timestampForQueuedPayload(address,address,bytes32)":"0e159f80","totalQueuedPayloads(address,address)":"ec08af33"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_wallet\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_signer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_payloadHash\",\"type\":\"bytes32\"}],\"name\":\"AlreadyQueued\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"}],\"name\":\"InvalidKind\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_wallet\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_signer\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"InvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_flag\",\"type\":\"uint256\"}],\"name\":\"InvalidSignatureFlag\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_wallet\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_payloadHash\",\"type\":\"bytes32\"}],\"name\":\"QueueNotReady\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_wallet\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_signer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_payloadHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"}],\"name\":\"NewQueuedPayload\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_wallet\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_signer\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"queuePayload\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"queuedPayloadHashes\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_payloadHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"recoverSapientSignatureCompact\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_wallet\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"}],\"name\":\"recoveryPayloadHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"timestampForQueuedPayload\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_wallet\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_signer\",\"type\":\"address\"}],\"name\":\"totalQueuedPayloads\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Agustin Aguilar, William Hua, Michael Standen\",\"kind\":\"dev\",\"methods\":{\"queuePayload(address,address,(uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"params\":{\"_payload\":\"The payload to queue\",\"_signature\":\"The signature to queue the payload for\",\"_signer\":\"The signer to queue the payload for\",\"_wallet\":\"The wallet to queue the payload for\"}},\"recoverSapientSignatureCompact(bytes32,bytes)\":{\"params\":{\"digest\":\"The digest of the payload\",\"signature\":\"The signature to recover the image hash from\"},\"returns\":{\"_0\":\"The recovered image hash\"}},\"recoveryPayloadHash(address,(uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]))\":{\"params\":{\"_payload\":\"The payload to get the recovery payload hash for\",\"_wallet\":\"The wallet to get the recovery payload hash for\"},\"returns\":{\"_0\":\"The recovery payload hash\"}},\"totalQueuedPayloads(address,address)\":{\"params\":{\"_signer\":\"The signer to get the total number of queued payloads for\",\"_wallet\":\"The wallet to get the total number of queued payloads for\"},\"returns\":{\"_0\":\"The total number of queued payloads\"}}},\"stateVariables\":{\"queuedPayloadHashes\":{\"details\":\"wallet -> signer -> payloadHash[]\"},\"timestampForQueuedPayload\":{\"details\":\"wallet -> signer -> payloadHash -> timestamp\"}},\"title\":\"Recovery\",\"version\":1},\"userdoc\":{\"errors\":{\"AlreadyQueued(address,address,bytes32)\":[{\"notice\":\"Error thrown when the payload is already queued\"}],\"InvalidKind(uint8)\":[{\"notice\":\"Error thrown when the kind is invalid\"}],\"InvalidSignature(address,address,(uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":[{\"notice\":\"Error thrown when the signature is invalid\"}],\"InvalidSignatureFlag(uint256)\":[{\"notice\":\"Error thrown when the signature flag is invalid\"}],\"QueueNotReady(address,bytes32)\":[{\"notice\":\"Error thrown when the queue is not ready\"}]},\"events\":{\"NewQueuedPayload(address,address,bytes32,uint256)\":{\"notice\":\"Emitted when a new payload is queued\"}},\"kind\":\"user\",\"methods\":{\"queuePayload(address,address,(uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"notice\":\"Queue a payload for recovery\"},\"queuedPayloadHashes(address,address,uint256)\":{\"notice\":\"Mapping of queued payload hashes\"},\"recoverSapientSignatureCompact(bytes32,bytes)\":{\"notice\":\"Recovers the image hash of a given signature, using a hashed payload\"},\"recoveryPayloadHash(address,(uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]))\":{\"notice\":\"Get the recovery payload hash\"},\"timestampForQueuedPayload(address,address,bytes32)\":{\"notice\":\"Mapping of queued timestamps\"},\"totalQueuedPayloads(address,address)\":{\"notice\":\"Get the total number of queued payloads\"}},\"notice\":\"A recovery mode sapient signer\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/extensions/recovery/Recovery.sol\":\"Recovery\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/extensions/recovery/Recovery.sol\":{\"keccak256\":\"0xb66a9701b0c617bfbcc80ce9a898168d03b0381dd305d411500beafd849f8bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4f2ecb6d97f34d65d46285ae8ba85868744da7e08dc1fa5c8aee0395db53a748\",\"dweb:/ipfs/QmVfo7cgvQbELX198KBJFfmfZbAgtnyjDivxFumr4dSxDG\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/interfaces/IERC1271.sol\":{\"keccak256\":\"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b\",\"dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF\"]},\"src/modules/interfaces/ISapient.sol\":{\"keccak256\":\"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489\",\"dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"src/utils/LibOptim.sol\":{\"keccak256\":\"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81\",\"dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"address","name":"_signer","type":"address"},{"internalType":"bytes32","name":"_payloadHash","type":"bytes32"}],"type":"error","name":"AlreadyQueued"},{"inputs":[{"internalType":"uint8","name":"kind","type":"uint8"}],"type":"error","name":"InvalidKind"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"address","name":"_signer","type":"address"},{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"type":"error","name":"InvalidSignature"},{"inputs":[{"internalType":"uint256","name":"_flag","type":"uint256"}],"type":"error","name":"InvalidSignatureFlag"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"bytes32","name":"_payloadHash","type":"bytes32"}],"type":"error","name":"QueueNotReady"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address","indexed":false},{"internalType":"address","name":"_signer","type":"address","indexed":false},{"internalType":"bytes32","name":"_payloadHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_timestamp","type":"uint256","indexed":false}],"type":"event","name":"NewQueuedPayload","anonymous":false},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"address","name":"_signer","type":"address"},{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"queuePayload"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"queuedPayloadHashes","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"_payloadHash","type":"bytes32"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"view","type":"function","name":"recoverSapientSignatureCompact","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]}],"stateMutability":"view","type":"function","name":"recoveryPayloadHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"timestampForQueuedPayload","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"address","name":"_signer","type":"address"}],"stateMutability":"view","type":"function","name":"totalQueuedPayloads","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]}],"devdoc":{"kind":"dev","methods":{"queuePayload(address,address,(uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"params":{"_payload":"The payload to queue","_signature":"The signature to queue the payload for","_signer":"The signer to queue the payload for","_wallet":"The wallet to queue the payload for"}},"recoverSapientSignatureCompact(bytes32,bytes)":{"params":{"digest":"The digest of the payload","signature":"The signature to recover the image hash from"},"returns":{"_0":"The recovered image hash"}},"recoveryPayloadHash(address,(uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]))":{"params":{"_payload":"The payload to get the recovery payload hash for","_wallet":"The wallet to get the recovery payload hash for"},"returns":{"_0":"The recovery payload hash"}},"totalQueuedPayloads(address,address)":{"params":{"_signer":"The signer to get the total number of queued payloads for","_wallet":"The wallet to get the total number of queued payloads for"},"returns":{"_0":"The total number of queued payloads"}}},"version":1},"userdoc":{"kind":"user","methods":{"queuePayload(address,address,(uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"notice":"Queue a payload for recovery"},"queuedPayloadHashes(address,address,uint256)":{"notice":"Mapping of queued payload hashes"},"recoverSapientSignatureCompact(bytes32,bytes)":{"notice":"Recovers the image hash of a given signature, using a hashed payload"},"recoveryPayloadHash(address,(uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]))":{"notice":"Get the recovery payload hash"},"timestampForQueuedPayload(address,address,bytes32)":{"notice":"Mapping of queued timestamps"},"totalQueuedPayloads(address,address)":{"notice":"Get the total number of queued payloads"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/extensions/recovery/Recovery.sol":"Recovery"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/extensions/recovery/Recovery.sol":{"keccak256":"0xb66a9701b0c617bfbcc80ce9a898168d03b0381dd305d411500beafd849f8bde","urls":["bzz-raw://4f2ecb6d97f34d65d46285ae8ba85868744da7e08dc1fa5c8aee0395db53a748","dweb:/ipfs/QmVfo7cgvQbELX198KBJFfmfZbAgtnyjDivxFumr4dSxDG"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/interfaces/IERC1271.sol":{"keccak256":"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9","urls":["bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b","dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF"],"license":"Apache-2.0"},"src/modules/interfaces/ISapient.sol":{"keccak256":"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359","urls":["bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489","dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"src/utils/LibOptim.sol":{"keccak256":"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde","urls":["bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81","dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x"],"license":"Apache-2.0"}},"version":1},"id":32} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Recovery.t.sol/RecoveryImp.json b/contracts/artifacts/wallet-contracts-v3/Recovery.t.sol/RecoveryImp.json new file mode 100644 index 00000000..ab6d64c4 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Recovery.t.sol/RecoveryImp.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"queuePayload","inputs":[{"name":"_wallet","type":"address","internalType":"address"},{"name":"_signer","type":"address","internalType":"address"},{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"queuedPayloadHashes","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"recoverBranch","inputs":[{"name":"_wallet","type":"address","internalType":"address"},{"name":"_payloadHash","type":"bytes32","internalType":"bytes32"},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"verified","type":"bool","internalType":"bool"},{"name":"root","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"recoverSapientSignatureCompact","inputs":[{"name":"_payloadHash","type":"bytes32","internalType":"bytes32"},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"recoveryPayloadHash","inputs":[{"name":"_wallet","type":"address","internalType":"address"},{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"timestampForQueuedPayload","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"},{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"totalQueuedPayloads","inputs":[{"name":"_wallet","type":"address","internalType":"address"},{"name":"_signer","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"event","name":"NewQueuedPayload","inputs":[{"name":"_wallet","type":"address","indexed":false,"internalType":"address"},{"name":"_signer","type":"address","indexed":false,"internalType":"address"},{"name":"_payloadHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_timestamp","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"AlreadyQueued","inputs":[{"name":"_wallet","type":"address","internalType":"address"},{"name":"_signer","type":"address","internalType":"address"},{"name":"_payloadHash","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"InvalidKind","inputs":[{"name":"kind","type":"uint8","internalType":"uint8"}]},{"type":"error","name":"InvalidSignature","inputs":[{"name":"_wallet","type":"address","internalType":"address"},{"name":"_signer","type":"address","internalType":"address"},{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"InvalidSignatureFlag","inputs":[{"name":"_flag","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"QueueNotReady","inputs":[{"name":"_wallet","type":"address","internalType":"address"},{"name":"_payloadHash","type":"bytes32","internalType":"bytes32"}]}],"bytecode":{"object":"0x608080604052346015576119a3908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c80630e159f80146100875780636be6b60e14610082578063898bd9211461007d578063b00c848414610078578063b05f87db14610073578063d834bcbf1461006e5763ec08af331461006957600080fd5b6106dc565b610628565b61036c565b610301565b61023c565b6101c6565b3461012c5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012c576100be610131565b6101156100c9610154565b73ffffffffffffffffffffffffffffffffffffffff6044359316600052600060205260406000209073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b906000526020526020604060002054604051908152f35b600080fd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361012c57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361012c57565b359073ffffffffffffffffffffffffffffffffffffffff8216820361012c57565b9181601f8401121561012c5782359167ffffffffffffffff831161012c576020838186019501011161012c57565b3461012c5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012c576101fd610131565b60443560243567ffffffffffffffff821161012c5760409261022661022e933690600401610198565b9290916110b5565b825191151582526020820152f35b3461012c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012c5760043560243567ffffffffffffffff811161012c57610291610299913690600401610198565b9083336110b5565b90156102aa57602090604051908152f35b507f904689fc0000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff331660045260245260446000fd5b908161012091031261012c5790565b3461012c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012c57610338610131565b60243567ffffffffffffffff811161012c5760209161035e6103649236906004016102f2565b90610b05565b604051908152f35b3461012c5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012c576103a3610131565b6103ab610154565b60443567ffffffffffffffff811161012c576103cb9036906004016102f2565b60643567ffffffffffffffff811161012c576103eb903690600401610198565b906103f982828587896114f2565b156105a15750508261040f610414923690610a39565b61166c565b9061047b8261046c836104478773ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b90600052602052604060002090565b546105525761054d7faeb5575092e25ccd826d5de3515c096028bb338c1f304db40dc831c3746ee0ae93426104d88561046c866104478673ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b556105108461050b856104478573ffffffffffffffffffffffffffffffffffffffff166000526001602052604060002090565b610ff8565b6040519384934292859094939273ffffffffffffffffffffffffffffffffffffffff60609381608085019816845216602083015260408201520152565b0390a1005b7f654c8bbf0000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff9283166004529190911660245260445260646000fd5b6040517f44b7a4050000000000000000000000000000000000000000000000000000000081529485946105d8949160048701610eb7565b0390fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80548210156106235760005260206000200190600090565b6105dc565b3461012c5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012c5761065f610131565b6106b661066a610154565b73ffffffffffffffffffffffffffffffffffffffff6044359316600052600160205260406000209073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b90815481101561012c576106c99161060b565b905460405160039290921b1c8152602090f35b3461012c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012c576020610768610718610131565b73ffffffffffffffffffffffffffffffffffffffff610735610154565b91166000526001835260406000209073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b54604051908152f35b8015150361012c57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176107eb57604052565b61077b565b604051906107ff60e0836107aa565b565b604051906107ff610120836107aa565b359060ff8216820361012c57565b35906107ff82610771565b67ffffffffffffffff81116107eb5760051b60200190565b81601f8201121561012c5780359067ffffffffffffffff82116107eb576040519261089560207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f86011601856107aa565b8284526020838301011161012c57816000926020809301838601378301015290565b81601f8201121561012c578035906108ce8261082a565b926108dc60405194856107aa565b82845260208085019360051b8301019181831161012c5760208101935b83851061090857505050505090565b843567ffffffffffffffff811161012c57820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828603011261012c5761094f6107f0565b9161095c60208301610177565b83526040820135602084015260608201359267ffffffffffffffff841161012c5760e083610991886020809881980101610842565b6040840152608081013560608401526109ac60a0820161081f565b60808401526109bd60c0820161081f565b60a0840152013560c08201528152019401936108f9565b9080601f8301121561012c5781356109eb8161082a565b926109f960405194856107aa565b81845260208085019260051b82010192831161012c57602001905b828210610a215750505090565b60208091610a2e84610177565b815201910190610a14565b9190916101208184031261012c57610a4f610801565b92610a5982610811565b8452610a676020830161081f565b6020850152604082013567ffffffffffffffff811161012c5781610a8c9184016108b7565b6040850152606082013560608501526080820135608085015260a082013567ffffffffffffffff811161012c5781610ac5918401610842565b60a085015260c082013560c085015260e082013560e085015261010082013567ffffffffffffffff811161012c57610afd92016109d4565b610100830152565b610c4e610be0610bdb610c22936020860135610b2081610771565b15610c54576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527fd50a220b5983c5d6e86926072ffa8a3197ae49602ffc9dd0e60d62d561a2e1d560408501527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606085015260808401521660a082015260a08152610bd060c0826107aa565b519020943690610a39565b6112bc565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826107aa565b51902090565b4690610b29565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561012c57016020813591019167ffffffffffffffff821161012c578160051b3603831361012c57565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561012c57016020813591019167ffffffffffffffff821161012c57813603831361012c57565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b90602083828152019160208260051b8501019381936000915b848310610d665750505050505090565b9091929394957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08282030183528635907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff218636030182121561012c576020809187600194019073ffffffffffffffffffffffffffffffffffffffff610dea83610177565b168152828201358382015260c080610e19610e086040860186610cae565b60e0604087015260e0860191610cfe565b93606081013560608501526080810135610e3281610771565b15156080850152610e5360a0820135610e4a81610771565b151560a0860152565b01359101529801930193019194939290610d56565b9160209082815201919060005b818110610e825750505090565b90919260208060019273ffffffffffffffffffffffffffffffffffffffff610ea988610177565b168152019401929101610e75565b93919273ffffffffffffffffffffffffffffffffffffffff610ff5969481610fe79416875216602086015260806040860152610f0060808601610ef983610811565b60ff169052565b610f18610f0f6020830161081f565b151560a0870152565b610fb6610f94610f41610f2e6040850185610c5b565b61012060c08b01526101a08a0191610d3d565b606084013560e08901526080840135610100890152610f6360a0850185610cae565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808a8403016101208b0152610cfe565b9160c081013561014088015260e0810135610160880152610100810190610c5b565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8087840301610180880152610e68565b926060818503910152610cfe565b90565b8054680100000000000000008110156107eb5761101a9160018201815561060b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff829392549160031b92831b921b1916179055565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9190820391821161108b57565b61104f565b9190820180921161108b57565b9093929384831161012c57841161012c578101920390565b600094938593929091845b8381106110d05750505050509190565b8481013560f81c97959060019081019081908a146111ae5750600389146111825760048914611128577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b6003810198506111579061114f906111469088013560e81c8b611090565b809a878961109d565b9085856110b5565b906111749290811561117a575b5096600052602052604060002090565b966110c0565b905038611164565b9597509480850135906020019780156111a8579061117491600052602052604060002090565b50611174565b67ffffffffffffffff9950919691868101803560601c9250601481013560e81c9160179091013560c01c90601f019a16916112118661046c836104478973ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b5482811515918261126d575b82611258575b505061124f575b906112359291611740565b9080156111a8579061117491600052602052604060002090565b6001985061122a565b6112649192504261107e565b10158238611223565b85811015925061121d565b805160209091019060005b8181106112905750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101611283565b6101008101516040516112d781610c22602082018095611278565b519020906112e6815160ff1690565b60ff81168061135f57505090610c4e61130260408401516117f2565b92610c2260806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b600181036113bd57505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46693810193845290810191909152606081019290925290610c4e8160808101610c22565b6002810361141357505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e460208201908152918101929092526060820192909252610c4e8160808101610c22565b600303611467575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46660208201908152918101929092526060820192909252610c4e8160808101610c22565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b6040513d6000823e3d90fd5b9081602091031261012c57517fffffffff000000000000000000000000000000000000000000000000000000008116810361012c5790565b604090610ff5949281528160208201520191610cfe565b916114ff91939492610b05565b91604082146115fc575b803b6115185750505050600090565b61156a9373ffffffffffffffffffffffffffffffffffffffff602094604051968795869485937f1626ba7e000000000000000000000000000000000000000000000000000000008552600485016114db565b0392165afa9081156115f7577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000916000916115c8575b50161490565b6115ea915060203d6020116115f0575b6115e281836107aa565b8101906114a3565b386115c2565b503d6115d8565b611497565b6020600061163361160c8761192d565b50604080518a815260ff909216602083015281019290925260608201529081906080820190565b838052039060015afa156115f75760005173ffffffffffffffffffffffffffffffffffffffff8083169116036115095750505050600190565b90610c4e610be0610c229260208501511515600014611739576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a0815261173060c0826107aa565b519020936112bc565b4690611689565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e6365207265636f76657279206c6561663a0a0000000000000000865260601b166038840152604c830152606c820152606c8152610c4e608c826107aa565b80518210156106235760209160051b010190565b805160209091019060005b8181106117dc5750505090565b82518452602093840193909201916001016117cf565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06118386118228361082a565b9261183060405194856107aa565b80845261082a565b0136602083013760005b83518110156119145780611858600192866117b0565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152611900610120826107aa565b51902061190d82856117b0565b5201611842565b50909150604051610c4e81610c226020820180956117c4565b9060208235920135906040601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff811161108b579156fea26469706673582212207e36076184ab9ba511c3d3d434c19aa7294085f57cd2eba64cfe56f92819afe164736f6c634300081c0033","sourceMap":"439:265:77:-:0;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436101561001257600080fd5b60003560e01c80630e159f80146100875780636be6b60e14610082578063898bd9211461007d578063b00c848414610078578063b05f87db14610073578063d834bcbf1461006e5763ec08af331461006957600080fd5b6106dc565b610628565b61036c565b610301565b61023c565b6101c6565b3461012c5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012c576100be610131565b6101156100c9610154565b73ffffffffffffffffffffffffffffffffffffffff6044359316600052600060205260406000209073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b906000526020526020604060002054604051908152f35b600080fd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361012c57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361012c57565b359073ffffffffffffffffffffffffffffffffffffffff8216820361012c57565b9181601f8401121561012c5782359167ffffffffffffffff831161012c576020838186019501011161012c57565b3461012c5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012c576101fd610131565b60443560243567ffffffffffffffff821161012c5760409261022661022e933690600401610198565b9290916110b5565b825191151582526020820152f35b3461012c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012c5760043560243567ffffffffffffffff811161012c57610291610299913690600401610198565b9083336110b5565b90156102aa57602090604051908152f35b507f904689fc0000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff331660045260245260446000fd5b908161012091031261012c5790565b3461012c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012c57610338610131565b60243567ffffffffffffffff811161012c5760209161035e6103649236906004016102f2565b90610b05565b604051908152f35b3461012c5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012c576103a3610131565b6103ab610154565b60443567ffffffffffffffff811161012c576103cb9036906004016102f2565b60643567ffffffffffffffff811161012c576103eb903690600401610198565b906103f982828587896114f2565b156105a15750508261040f610414923690610a39565b61166c565b9061047b8261046c836104478773ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b90600052602052604060002090565b546105525761054d7faeb5575092e25ccd826d5de3515c096028bb338c1f304db40dc831c3746ee0ae93426104d88561046c866104478673ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b556105108461050b856104478573ffffffffffffffffffffffffffffffffffffffff166000526001602052604060002090565b610ff8565b6040519384934292859094939273ffffffffffffffffffffffffffffffffffffffff60609381608085019816845216602083015260408201520152565b0390a1005b7f654c8bbf0000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff9283166004529190911660245260445260646000fd5b6040517f44b7a4050000000000000000000000000000000000000000000000000000000081529485946105d8949160048701610eb7565b0390fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80548210156106235760005260206000200190600090565b6105dc565b3461012c5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012c5761065f610131565b6106b661066a610154565b73ffffffffffffffffffffffffffffffffffffffff6044359316600052600160205260406000209073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b90815481101561012c576106c99161060b565b905460405160039290921b1c8152602090f35b3461012c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012c576020610768610718610131565b73ffffffffffffffffffffffffffffffffffffffff610735610154565b91166000526001835260406000209073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b54604051908152f35b8015150361012c57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176107eb57604052565b61077b565b604051906107ff60e0836107aa565b565b604051906107ff610120836107aa565b359060ff8216820361012c57565b35906107ff82610771565b67ffffffffffffffff81116107eb5760051b60200190565b81601f8201121561012c5780359067ffffffffffffffff82116107eb576040519261089560207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f86011601856107aa565b8284526020838301011161012c57816000926020809301838601378301015290565b81601f8201121561012c578035906108ce8261082a565b926108dc60405194856107aa565b82845260208085019360051b8301019181831161012c5760208101935b83851061090857505050505090565b843567ffffffffffffffff811161012c57820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828603011261012c5761094f6107f0565b9161095c60208301610177565b83526040820135602084015260608201359267ffffffffffffffff841161012c5760e083610991886020809881980101610842565b6040840152608081013560608401526109ac60a0820161081f565b60808401526109bd60c0820161081f565b60a0840152013560c08201528152019401936108f9565b9080601f8301121561012c5781356109eb8161082a565b926109f960405194856107aa565b81845260208085019260051b82010192831161012c57602001905b828210610a215750505090565b60208091610a2e84610177565b815201910190610a14565b9190916101208184031261012c57610a4f610801565b92610a5982610811565b8452610a676020830161081f565b6020850152604082013567ffffffffffffffff811161012c5781610a8c9184016108b7565b6040850152606082013560608501526080820135608085015260a082013567ffffffffffffffff811161012c5781610ac5918401610842565b60a085015260c082013560c085015260e082013560e085015261010082013567ffffffffffffffff811161012c57610afd92016109d4565b610100830152565b610c4e610be0610bdb610c22936020860135610b2081610771565b15610c54576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527fd50a220b5983c5d6e86926072ffa8a3197ae49602ffc9dd0e60d62d561a2e1d560408501527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606085015260808401521660a082015260a08152610bd060c0826107aa565b519020943690610a39565b6112bc565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826107aa565b51902090565b4690610b29565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561012c57016020813591019167ffffffffffffffff821161012c578160051b3603831361012c57565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561012c57016020813591019167ffffffffffffffff821161012c57813603831361012c57565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b90602083828152019160208260051b8501019381936000915b848310610d665750505050505090565b9091929394957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08282030183528635907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff218636030182121561012c576020809187600194019073ffffffffffffffffffffffffffffffffffffffff610dea83610177565b168152828201358382015260c080610e19610e086040860186610cae565b60e0604087015260e0860191610cfe565b93606081013560608501526080810135610e3281610771565b15156080850152610e5360a0820135610e4a81610771565b151560a0860152565b01359101529801930193019194939290610d56565b9160209082815201919060005b818110610e825750505090565b90919260208060019273ffffffffffffffffffffffffffffffffffffffff610ea988610177565b168152019401929101610e75565b93919273ffffffffffffffffffffffffffffffffffffffff610ff5969481610fe79416875216602086015260806040860152610f0060808601610ef983610811565b60ff169052565b610f18610f0f6020830161081f565b151560a0870152565b610fb6610f94610f41610f2e6040850185610c5b565b61012060c08b01526101a08a0191610d3d565b606084013560e08901526080840135610100890152610f6360a0850185610cae565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808a8403016101208b0152610cfe565b9160c081013561014088015260e0810135610160880152610100810190610c5b565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8087840301610180880152610e68565b926060818503910152610cfe565b90565b8054680100000000000000008110156107eb5761101a9160018201815561060b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff829392549160031b92831b921b1916179055565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9190820391821161108b57565b61104f565b9190820180921161108b57565b9093929384831161012c57841161012c578101920390565b600094938593929091845b8381106110d05750505050509190565b8481013560f81c97959060019081019081908a146111ae5750600389146111825760048914611128577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b6003810198506111579061114f906111469088013560e81c8b611090565b809a878961109d565b9085856110b5565b906111749290811561117a575b5096600052602052604060002090565b966110c0565b905038611164565b9597509480850135906020019780156111a8579061117491600052602052604060002090565b50611174565b67ffffffffffffffff9950919691868101803560601c9250601481013560e81c9160179091013560c01c90601f019a16916112118661046c836104478973ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b5482811515918261126d575b82611258575b505061124f575b906112359291611740565b9080156111a8579061117491600052602052604060002090565b6001985061122a565b6112649192504261107e565b10158238611223565b85811015925061121d565b805160209091019060005b8181106112905750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101611283565b6101008101516040516112d781610c22602082018095611278565b519020906112e6815160ff1690565b60ff81168061135f57505090610c4e61130260408401516117f2565b92610c2260806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b600181036113bd57505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46693810193845290810191909152606081019290925290610c4e8160808101610c22565b6002810361141357505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e460208201908152918101929092526060820192909252610c4e8160808101610c22565b600303611467575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46660208201908152918101929092526060820192909252610c4e8160808101610c22565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b6040513d6000823e3d90fd5b9081602091031261012c57517fffffffff000000000000000000000000000000000000000000000000000000008116810361012c5790565b604090610ff5949281528160208201520191610cfe565b916114ff91939492610b05565b91604082146115fc575b803b6115185750505050600090565b61156a9373ffffffffffffffffffffffffffffffffffffffff602094604051968795869485937f1626ba7e000000000000000000000000000000000000000000000000000000008552600485016114db565b0392165afa9081156115f7577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000916000916115c8575b50161490565b6115ea915060203d6020116115f0575b6115e281836107aa565b8101906114a3565b386115c2565b503d6115d8565b611497565b6020600061163361160c8761192d565b50604080518a815260ff909216602083015281019290925260608201529081906080820190565b838052039060015afa156115f75760005173ffffffffffffffffffffffffffffffffffffffff8083169116036115095750505050600190565b90610c4e610be0610c229260208501511515600014611739576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a0815261173060c0826107aa565b519020936112bc565b4690611689565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e6365207265636f76657279206c6561663a0a0000000000000000865260601b166038840152604c830152606c820152606c8152610c4e608c826107aa565b80518210156106235760209160051b010190565b805160209091019060005b8181106117dc5750505090565b82518452602093840193909201916001016117cf565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06118386118228361082a565b9261183060405194856107aa565b80845261082a565b0136602083013760005b83518110156119145780611858600192866117b0565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152611900610120826107aa565b51902061190d82856117b0565b5201611842565b50909150604051610c4e81610c226020820180956117c4565b9060208235920135906040601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff811161108b579156fea26469706673582212207e36076184ab9ba511c3d3d434c19aa7294085f57cd2eba64cfe56f92819afe164736f6c634300081c0033","sourceMap":"439:265:77:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;2242:100:32;439:265:77;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;2242:100:32;439:265:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;647:49;439:265;;;;;;:::i;:::-;647:49;;;;:::i;:::-;439:265;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5975:52:32;439:265:77;;;;;;:::i;:::-;5990:10:32;;;5975:52;:::i;:::-;6037:9;;6033:76;;439:265:77;;;;;;;;6033:76:32;6063:39;;-1:-1:-1;6063:39:32;439:265:77;5990:10:32;439:265:77;;;;;;-1:-1:-1;6063:39:32;439:265:77;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;6556:56:32;;;;;;;;:::i;:::-;6555:57;6551:141;;439:265:77;;;;6720:34:32;439:265:77;;;;:::i;:::-;6720:34:32;:::i;:::-;6764;:56;:34;:43;:34;;;439:265:77;;6764:25:32;439:265:77;6764:25:32;439:265:77;;;6764:25:32;439:265:77;;;6764:34:32;439:265:77;;;;;;;;;;;;6764:43:32;439:265:77;;;;;;;;;;6764:56:32;439:265:77;6760:133:32;;7046:64;;6958:15;;6899:56;:34;:43;:34;;;439:265:77;;6764:25:32;439:265:77;6764:25:32;439:265:77;;;6764:25:32;439:265:77;;;6899:56:32;439:265:77;6979:55:32;:28;:37;:28;;;439:265:77;;;;6979:19:32;439:265:77;;;;;;;6979:37:32;:55;:::i;:::-;439:265:77;;6958:15:32;;;;7046:64;;439:265:77;;;;;;;;;;;;;;;;;;;;;;;;;;;7046:64:32;;;;439:265:77;6760:133:32;6842:44;-1:-1:-1;6842:44:32;439:265:77;;;;;;;;;;;;;;;-1:-1:-1;6842:44:32;6551:141;439:265:77;;6629:56:32;;;439:265:77;;;6629:56:32;;439:265:77;;6629:56:32;;;:::i;:::-;;;;439:265:77;;;;;;;;;;;;;;;;;;-1:-1:-1;439:265:77;;-1:-1:-1;439:265:77;;;-1:-1:-1;439:265:77;:::o;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;2439:76:32;439:265:77;;:::i;:::-;;;;;;-1:-1:-1;439:265:77;2439:76:32;439:265:77;;;-1:-1:-1;439:265:77;;;;;;;;;;;;;2439:76:32;439:265:77;;;2439:76:32;;;;;;;;:::i;:::-;439:265:77;;;;;;;;;;;;;;;;;;;;;;;;;;;2888:37:32;439:265:77;;:::i;:::-;;;;:::i;:::-;;;-1:-1:-1;439:265:77;2888:19:32;439:265:77;;;-1:-1:-1;439:265:77;;;;;;;;;;;;;2888:37:32;439:265:77;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;:::i;:::-;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;439:265:77;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;5458:308:32:-;5712:48;5663:26;439:265:77;5712:48:32;5458:308;5608:18;;;439:265:77;;;;:::i;:::-;2055:48:32;;;-1:-1:-1;2055:48:32;;439:265:77;;;1926:202:32;5608:18;1926:202;;;635:95;439:265:77;;790:44:32;439:265:77;896:14:32;;439:265:77;896:14:32;;;;439:265:77;896:14:32;;;439:265:77;;896:14:32;;;439:265:77;896:14:32;1926:202;;;;;;:::i;:::-;439:265:77;1909:225:32;;439:265:77;;;;:::i;:::-;5663:26:32;:::i;:::-;439:265:77;;5712:48:32;;;5608:18;5712:48;;;;439:265:77;;;;;;;;;;;;;;;;;;5712:48:32;;1926:202;5712:48;;;;;;:::i;:::-;439:265:77;5702:59:32;;5458:308;:::o;2055:48::-;2089:13;2055:48;;;439:265:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;439:265:77;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;439:265:77;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;439:265:77;;;;;;;;;;:::o;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::o;1013:1:32:-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;1101:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;3209:2021::-;439:265:77;;3209:2021:32;439:265:77;;3209:2021:32;;;439:265:77;3401:26:32;;;;;;5202:23;;;;;;3209:2021;:::o;3394:1802::-;798:135:68;;;;;;;683:254;;798:135;;;;;;;3584:26:32;;3580:845;;4437:17;1056:1;4437:17;;4433:231;;1101:1;4676:19;;4672:476;;5163:26;439:265:77;5163:26:32;1101:1;439:265:77;;;;-1:-1:-1;6842:44:32;4672:476;1318:135:68;;;;-1:-1:-1;4938:65:32;;4976:26;;4880:13;;1318:135:68;;;;;;4880:13:32;:::i;:::-;4976:26;;;;;:::i;:::-;4938:65;;;;:::i;:::-;;5089:32;4938:65;5013:16;5051:21;;;;4672:476;5040:32;5089;545:85:69;;;;;;;461:173;;5089:32:32;5131:8;3394:1802;;5051:21;;;;;;4433:231;2926:232:68;;-1:-1:-1;2926:232:68;3047:107;;;;;;;4578:59:32;:18;;;;4599:31;;;545:85:69;;;;;;;461:173;;4578:59:32;;;;3580:845;1013:1;;-1:-1:-1;3162:307:68;;;3281:184;;;;;;;;-1:-1:-1;3281:184:68;1318:135;;;;;;;1578;;;;;;;;;3889:54:32;1013:1;4034:34;:56;:34;:42;:34;;;439:265:77;;6764:25:32;439:265:77;6764:25:32;439:265:77;;;6764:25:32;439:265:77;;;4034:56:32;439:265:77;4104:13:32;;;;:41;;;;3580:845;4104:92;;;3580:845;4100:136;;;;3580:845;4261:61;;;;;:::i;:::-;4339:59;:18;;;;4360:31;;;545:85:69;;;;;;;461:173;;4100:136:32;1013:1;;-1:-1:-1;4100:136:32;;4104:92;4149:26;:15;;;;:26;:::i;:::-;:47;;4104:92;;;;:41;4121:24;;;;;-1:-1:-1;4104:41:32;;439:265:77;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;8278:1282:48;8416:22;;;;439:265:77;;8399:40:48;;439:265:77;8399:40:48;;;439:265:77;;;:::i;8399:40:48:-;439:265:77;8389:51:48;;439:265:77;;;;;;;;;;;;8451:34:48;439:265:77;;8525:14:48;;;8712:82;8515:25;439:265:77;8525:14:48;;;8515:25;:::i;:::-;8750:14;8712:82;8766:14;8750;;;1799:66;8766:14;;1799:66;439:265:77;;;8712:82:48;;;8399:40;8712:82;;;;1799:66;;;;;;;;;439:265:77;1799:66:48;439:265:77;;1799:66:48;;;439:265:77;1799:66:48;;;439:265:77;1799:66:48;;;439:265:77;1799:66:48;439:265:77;1799:66:48;8447:1109;2395:4;8812:29;;2395:4;;-1:-1:-1;;8998:16:48;;;439:265:77;;8399:40:48;439:265:77;;;8988:27:48;439:265:77;;;1979:66:48;8959:70;;;439:265:77;;;1979:66:48;;;439:265:77;;;;1979:66:48;;;439:265:77;;;;8959:70:48;;439:265:77;1979:66:48;;;8959:70;1979:66;8808:748;2482:4;9047:35;;2482:4;;-1:-1:-1;;9216:18:48;;1979:66;439:265:77;;;2174:66:48;8399:40;9181:67;;439:265:77;;;1979:66:48;;;439:265:77;;;;1979:66:48;;;439:265:77;;;;9181:67:48;439:265:77;1979:66:48;;;9181:67;1979:66;9043:513;2556:4;9266:28;2556:4;;-1:-1:-1;9443:15:48;;1979:66;439:265:77;;;1979:66:48;8399:40;9414:58;;439:265:77;;;1979:66:48;;;439:265:77;;;;1979:66:48;;;439:265:77;;;;9414:58:48;439:265:77;1979:66:48;;;9414:58;1979:66;9262:294;9523:26;439:265:77;9523:26:48;439:265:77;;9523:26:48;439:265:77;2556:4:48;-1:-1:-1;6842:44:32;439:265:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;7119:712:32:-;;7319:38;7119:712;;;;7319:38;:::i;:::-;7368:23;7389:2;7368:23;;7364:280;;7119:712;7654:19;;7650:158;;7814:12;;;;439:265:77;7119:712:32;:::o;7650:158::-;7712:60;439:265:77;;7712:60:32;439:265:77;7389:2:32;439:265:77;7712:60:32;;;;;;;439:265:77;7712:60:32;;;;;;:::i;:::-;;439:265:77;;7712:60:32;;;;;;;439:265:77;7712:60:32;439:265:77;7712:60:32;439:265:77;7712:60:32;;;7650:158;439:265:77;;7712:89:32;7705:96;:::o;7712:60::-;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;:::i;7364:280::-;7547:32;439:265:77;7547:32:32;3511:494:68;;;:::i;:::-;-1:-1:-1;7389:2:32;439:265:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7547:32:32;;;;;;;;;;;;439:265:77;7547:32:32;439:265:77;;;;;;7591:15:32;7364:280;7587:51;7618:11;;;;7547:32;7618:11;:::o;9842:280:48:-;;10068:48;10027:18;10068:48;9842:280;9972:18;;;439:265:77;;;1206:48:48;;;;-1:-1:-1;1206:48:48;;439:265:77;;;1077:202:48;9972:18;1077:202;;;539:66;439:265:77;;709:66:48;439:265:77;896:14:32;;439:265:77;868:66:48;896:14:32;;;439:265:77;896:14:32;;;439:265:77;;896:14:32;;;439:265:77;896:14:32;1077:202:48;;;;;;:::i;:::-;439:265:77;1060:225:48;;10027:18;;:::i;1206:48::-;1240:13;1206:48;;;2941:264:32;;439:265:77;;3110:89:32;439:265:77;3110:89:32;;;439:265:77;;;;;;;;;;;;;;;;;;;;3110:89:32;;;;;;:::i;439:265:77:-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;7820:454:48;;439:265:77;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;-1:-1:-1;8164:3:48;439:265:77;;8146:16:48;;;;;8202:8;;439:265:77;8202:8:48;;;:::i;:::-;;439:265:77;1478:66:48;;439:265:77;7708:7:48;439:265:77;7708:7:48;;1799:66;7727:6;439:265:77;7727:6:48;;;439:265:77;;;;;7717:17:48;7736:10;;;;1799:66;7748:14;;;439:265:77;;;7764:14:48;7780:17;7764:14;;;439:265:77;;;7780:17:48;;1799:66;439:265:77;;;7667:138:48;439:265:77;7667:138:48;;439:265:77;1478:66:48;439:265:77;;;1478:66:48;;439:265:77;7736:10:48;1478:66;;439:265:77;7748:14:48;1478:66;;439:265:77;7764:14:48;1478:66;;439:265:77;7780:17:48;1478:66;;439:265:77;1478:66:48;;;439:265:77;1478:66:48;;;439:265:77;1478:66:48;7667:138;;;;;;:::i;:::-;439:265:77;7650:161:48;;8177:34;;;;:::i;:::-;439:265:77;;8131:13:48;;8146:16;;;;;439:265:77;;8240:28:48;;439:265:77;;8240:28:48;;439:265:77;;;:::i;3511:494:68:-;;3690:173;;;;;;;;3998:2;3955:14;3931:39;;439:265:77;;;;;;;;;3511:494:68;:::o","linkReferences":{}},"methodIdentifiers":{"queuePayload(address,address,(uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":"b05f87db","queuedPayloadHashes(address,address,uint256)":"d834bcbf","recoverBranch(address,bytes32,bytes)":"6be6b60e","recoverSapientSignatureCompact(bytes32,bytes)":"898bd921","recoveryPayloadHash(address,(uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]))":"b00c8484","timestampForQueuedPayload(address,address,bytes32)":"0e159f80","totalQueuedPayloads(address,address)":"ec08af33"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_wallet\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_signer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_payloadHash\",\"type\":\"bytes32\"}],\"name\":\"AlreadyQueued\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"}],\"name\":\"InvalidKind\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_wallet\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_signer\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"InvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_flag\",\"type\":\"uint256\"}],\"name\":\"InvalidSignatureFlag\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_wallet\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_payloadHash\",\"type\":\"bytes32\"}],\"name\":\"QueueNotReady\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_wallet\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_signer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_payloadHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"}],\"name\":\"NewQueuedPayload\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_wallet\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_signer\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"queuePayload\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"queuedPayloadHashes\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_wallet\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_payloadHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"recoverBranch\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"verified\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_payloadHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"recoverSapientSignatureCompact\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_wallet\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"}],\"name\":\"recoveryPayloadHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"timestampForQueuedPayload\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_wallet\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_signer\",\"type\":\"address\"}],\"name\":\"totalQueuedPayloads\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"queuePayload(address,address,(uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"params\":{\"_payload\":\"The payload to queue\",\"_signature\":\"The signature to queue the payload for\",\"_signer\":\"The signer to queue the payload for\",\"_wallet\":\"The wallet to queue the payload for\"}},\"recoverSapientSignatureCompact(bytes32,bytes)\":{\"params\":{\"digest\":\"The digest of the payload\",\"signature\":\"The signature to recover the image hash from\"},\"returns\":{\"_0\":\"The recovered image hash\"}},\"recoveryPayloadHash(address,(uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]))\":{\"params\":{\"_payload\":\"The payload to get the recovery payload hash for\",\"_wallet\":\"The wallet to get the recovery payload hash for\"},\"returns\":{\"_0\":\"The recovery payload hash\"}},\"totalQueuedPayloads(address,address)\":{\"params\":{\"_signer\":\"The signer to get the total number of queued payloads for\",\"_wallet\":\"The wallet to get the total number of queued payloads for\"},\"returns\":{\"_0\":\"The total number of queued payloads\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AlreadyQueued(address,address,bytes32)\":[{\"notice\":\"Error thrown when the payload is already queued\"}],\"InvalidKind(uint8)\":[{\"notice\":\"Error thrown when the kind is invalid\"}],\"InvalidSignature(address,address,(uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":[{\"notice\":\"Error thrown when the signature is invalid\"}],\"InvalidSignatureFlag(uint256)\":[{\"notice\":\"Error thrown when the signature flag is invalid\"}],\"QueueNotReady(address,bytes32)\":[{\"notice\":\"Error thrown when the queue is not ready\"}]},\"events\":{\"NewQueuedPayload(address,address,bytes32,uint256)\":{\"notice\":\"Emitted when a new payload is queued\"}},\"kind\":\"user\",\"methods\":{\"queuePayload(address,address,(uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"notice\":\"Queue a payload for recovery\"},\"queuedPayloadHashes(address,address,uint256)\":{\"notice\":\"Mapping of queued payload hashes\"},\"recoverSapientSignatureCompact(bytes32,bytes)\":{\"notice\":\"Recovers the image hash of a given signature, using a hashed payload\"},\"recoveryPayloadHash(address,(uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]))\":{\"notice\":\"Get the recovery payload hash\"},\"timestampForQueuedPayload(address,address,bytes32)\":{\"notice\":\"Mapping of queued timestamps\"},\"totalQueuedPayloads(address,address)\":{\"notice\":\"Get the total number of queued payloads\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/extensions/recovery/Recovery.t.sol\":\"RecoveryImp\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/extensions/recovery/Recovery.sol\":{\"keccak256\":\"0xb66a9701b0c617bfbcc80ce9a898168d03b0381dd305d411500beafd849f8bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4f2ecb6d97f34d65d46285ae8ba85868744da7e08dc1fa5c8aee0395db53a748\",\"dweb:/ipfs/QmVfo7cgvQbELX198KBJFfmfZbAgtnyjDivxFumr4dSxDG\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/interfaces/IERC1271.sol\":{\"keccak256\":\"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b\",\"dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF\"]},\"src/modules/interfaces/ISapient.sol\":{\"keccak256\":\"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489\",\"dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"src/utils/LibOptim.sol\":{\"keccak256\":\"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81\",\"dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x\"]},\"test/extensions/recovery/Recovery.t.sol\":{\"keccak256\":\"0xf95ed22a5b441041c26f8af093341f2127b26eb3d5a9035f84b004451b38b89b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d73ed40fa30a33d26d2e645bdc847daebcdc956bf2b5b20ee060d91b55465d09\",\"dweb:/ipfs/QmYAdvCPSP5GBDmgwF3UqTdPKn2qwNeCQM4x3pXa6ZS3E5\"]},\"test/utils/PrimitivesRPC.sol\":{\"keccak256\":\"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe\",\"dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv\"]},\"test/utils/TestUtils.sol\":{\"keccak256\":\"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad\",\"dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"address","name":"_signer","type":"address"},{"internalType":"bytes32","name":"_payloadHash","type":"bytes32"}],"type":"error","name":"AlreadyQueued"},{"inputs":[{"internalType":"uint8","name":"kind","type":"uint8"}],"type":"error","name":"InvalidKind"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"address","name":"_signer","type":"address"},{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"type":"error","name":"InvalidSignature"},{"inputs":[{"internalType":"uint256","name":"_flag","type":"uint256"}],"type":"error","name":"InvalidSignatureFlag"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"bytes32","name":"_payloadHash","type":"bytes32"}],"type":"error","name":"QueueNotReady"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address","indexed":false},{"internalType":"address","name":"_signer","type":"address","indexed":false},{"internalType":"bytes32","name":"_payloadHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_timestamp","type":"uint256","indexed":false}],"type":"event","name":"NewQueuedPayload","anonymous":false},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"address","name":"_signer","type":"address"},{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"queuePayload"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function","name":"queuedPayloadHashes","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"bytes32","name":"_payloadHash","type":"bytes32"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"view","type":"function","name":"recoverBranch","outputs":[{"internalType":"bool","name":"verified","type":"bool"},{"internalType":"bytes32","name":"root","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"_payloadHash","type":"bytes32"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"view","type":"function","name":"recoverSapientSignatureCompact","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]}],"stateMutability":"view","type":"function","name":"recoveryPayloadHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function","name":"timestampForQueuedPayload","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"address","name":"_signer","type":"address"}],"stateMutability":"view","type":"function","name":"totalQueuedPayloads","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]}],"devdoc":{"kind":"dev","methods":{"queuePayload(address,address,(uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"params":{"_payload":"The payload to queue","_signature":"The signature to queue the payload for","_signer":"The signer to queue the payload for","_wallet":"The wallet to queue the payload for"}},"recoverSapientSignatureCompact(bytes32,bytes)":{"params":{"digest":"The digest of the payload","signature":"The signature to recover the image hash from"},"returns":{"_0":"The recovered image hash"}},"recoveryPayloadHash(address,(uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]))":{"params":{"_payload":"The payload to get the recovery payload hash for","_wallet":"The wallet to get the recovery payload hash for"},"returns":{"_0":"The recovery payload hash"}},"totalQueuedPayloads(address,address)":{"params":{"_signer":"The signer to get the total number of queued payloads for","_wallet":"The wallet to get the total number of queued payloads for"},"returns":{"_0":"The total number of queued payloads"}}},"version":1},"userdoc":{"kind":"user","methods":{"queuePayload(address,address,(uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"notice":"Queue a payload for recovery"},"queuedPayloadHashes(address,address,uint256)":{"notice":"Mapping of queued payload hashes"},"recoverSapientSignatureCompact(bytes32,bytes)":{"notice":"Recovers the image hash of a given signature, using a hashed payload"},"recoveryPayloadHash(address,(uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]))":{"notice":"Get the recovery payload hash"},"timestampForQueuedPayload(address,address,bytes32)":{"notice":"Mapping of queued timestamps"},"totalQueuedPayloads(address,address)":{"notice":"Get the total number of queued payloads"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/extensions/recovery/Recovery.t.sol":"RecoveryImp"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/extensions/recovery/Recovery.sol":{"keccak256":"0xb66a9701b0c617bfbcc80ce9a898168d03b0381dd305d411500beafd849f8bde","urls":["bzz-raw://4f2ecb6d97f34d65d46285ae8ba85868744da7e08dc1fa5c8aee0395db53a748","dweb:/ipfs/QmVfo7cgvQbELX198KBJFfmfZbAgtnyjDivxFumr4dSxDG"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/interfaces/IERC1271.sol":{"keccak256":"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9","urls":["bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b","dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF"],"license":"Apache-2.0"},"src/modules/interfaces/ISapient.sol":{"keccak256":"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359","urls":["bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489","dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"src/utils/LibOptim.sol":{"keccak256":"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde","urls":["bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81","dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x"],"license":"Apache-2.0"},"test/extensions/recovery/Recovery.t.sol":{"keccak256":"0xf95ed22a5b441041c26f8af093341f2127b26eb3d5a9035f84b004451b38b89b","urls":["bzz-raw://d73ed40fa30a33d26d2e645bdc847daebcdc956bf2b5b20ee060d91b55465d09","dweb:/ipfs/QmYAdvCPSP5GBDmgwF3UqTdPKn2qwNeCQM4x3pXa6ZS3E5"],"license":"Apache-2.0"},"test/utils/PrimitivesRPC.sol":{"keccak256":"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe","urls":["bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe","dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv"],"license":"Apache-2.0"},"test/utils/TestUtils.sol":{"keccak256":"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79","urls":["bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad","dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa"],"license":"Apache-2.0"}},"version":1},"id":77} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Recovery.t.sol/RecoveryTest.json b/contracts/artifacts/wallet-contracts-v3/Recovery.t.sol/RecoveryTest.json new file mode 100644 index 00000000..09782a8f --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Recovery.t.sol/RecoveryTest.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"excludeArtifacts","inputs":[],"outputs":[{"name":"excludedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"excludeContracts","inputs":[],"outputs":[{"name":"excludedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"excludeSelectors","inputs":[],"outputs":[{"name":"excludedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"excludeSenders","inputs":[],"outputs":[{"name":"excludedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"recovery","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract RecoveryImp"}],"stateMutability":"view"},{"type":"function","name":"setUp","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"targetArtifactSelectors","inputs":[],"outputs":[{"name":"targetedArtifactSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzArtifactSelector[]","components":[{"name":"artifact","type":"string","internalType":"string"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetArtifacts","inputs":[],"outputs":[{"name":"targetedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"targetContracts","inputs":[],"outputs":[{"name":"targetedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"targetInterfaces","inputs":[],"outputs":[{"name":"targetedInterfaces_","type":"tuple[]","internalType":"struct StdInvariant.FuzzInterface[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"artifacts","type":"string[]","internalType":"string[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSelectors","inputs":[],"outputs":[{"name":"targetedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSenders","inputs":[],"outputs":[{"name":"targetedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"test_queue_payload","inputs":[{"name":"_signerPk","type":"uint256","internalType":"uint256"},{"name":"_wallet","type":"address","internalType":"address"},{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_randomTime","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_queue_payload_already_queued_fail","inputs":[{"name":"_signerPk","type":"uint256","internalType":"uint256"},{"name":"_wallet","type":"address","internalType":"address"},{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_randomTime","type":"uint256","internalType":"uint256"},{"name":"_waitBetweenQueues","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_queue_payload_ecdsa_with_code","inputs":[{"name":"_signerPk","type":"uint256","internalType":"uint256"},{"name":"_wallet","type":"address","internalType":"address"},{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_randomTime","type":"uint64","internalType":"uint64"},{"name":"_randomCode","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_queue_payload_erc1271","inputs":[{"name":"_signer","type":"address","internalType":"address"},{"name":"_signature","type":"bytes","internalType":"bytes"},{"name":"_wallet","type":"address","internalType":"address"},{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_randomTime","type":"uint64","internalType":"uint64"},{"name":"_signerCode","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_queue_payload_erc1271_invalid_signature_fail","inputs":[{"name":"_signer","type":"address","internalType":"address"},{"name":"_signature","type":"bytes","internalType":"bytes"},{"name":"_wallet","type":"address","internalType":"address"},{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_randomTime","type":"uint64","internalType":"uint64"},{"name":"_signerCode","type":"bytes","internalType":"bytes"},{"name":"_badMagicValue","type":"bytes4","internalType":"bytes4"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_queue_payload_erc1271_revert_fail","inputs":[{"name":"_signer","type":"address","internalType":"address"},{"name":"_signature","type":"bytes","internalType":"bytes"},{"name":"_wallet","type":"address","internalType":"address"},{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_randomTime","type":"uint64","internalType":"uint64"},{"name":"_signerCode","type":"bytes","internalType":"bytes"},{"name":"_revertData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_queue_payload_invalid_signature_fail_has_code","inputs":[{"name":"_signerPk","type":"uint256","internalType":"uint256"},{"name":"_wallet","type":"address","internalType":"address"},{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_randomTime","type":"uint64","internalType":"uint64"},{"name":"_wrongSigner","type":"address","internalType":"address"},{"name":"_randomCode","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_queue_payload_invalid_signature_fail_no_code","inputs":[{"name":"_signerPk","type":"uint256","internalType":"uint256"},{"name":"_wallet","type":"address","internalType":"address"},{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_randomTime","type":"uint64","internalType":"uint64"},{"name":"_wrongSigner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_recoverBranch","inputs":[{"name":"signers","type":"tuple[]","internalType":"struct RecoveryTest.Signer[]","components":[{"name":"signer","type":"address","internalType":"address"},{"name":"requiredDeltaTime","type":"uint24","internalType":"uint24"},{"name":"minTimestamp","type":"uint64","internalType":"uint64"}]},{"name":"wallet","type":"address","internalType":"address"},{"name":"payloadHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_recover_fail_invalid_signature_flag","inputs":[{"name":"_wallet","type":"address","internalType":"address"},{"name":"_payloadHash","type":"bytes32","internalType":"bytes32"},{"name":"_invalidSignatureFlag","type":"uint8","internalType":"uint8"},{"name":"_suffix","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_recover_sapient_signature_compact","inputs":[{"name":"params","type":"tuple","internalType":"struct RecoveryTest.test_recover_sapient_signature_compact_params","components":[{"name":"signerPk","type":"uint256","internalType":"uint256"},{"name":"wallet","type":"address","internalType":"address"},{"name":"payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"startTime","type":"uint256","internalType":"uint256"},{"name":"passedTime","type":"uint256","internalType":"uint256"},{"name":"minTimestamp","type":"uint256","internalType":"uint256"},{"name":"requiredDeltaTime","type":"uint256","internalType":"uint256"},{"name":"suffixes","type":"tuple[]","internalType":"struct RecoveryTest.other_leaf[]","components":[{"name":"signer","type":"address","internalType":"address"},{"name":"requiredDeltaTime","type":"uint24","internalType":"uint24"},{"name":"minTimestamp","type":"uint64","internalType":"uint64"}]},{"name":"prefixes","type":"tuple[]","internalType":"struct RecoveryTest.other_leaf[]","components":[{"name":"signer","type":"address","internalType":"address"},{"name":"requiredDeltaTime","type":"uint24","internalType":"uint24"},{"name":"minTimestamp","type":"uint64","internalType":"uint64"}]}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_recover_sapient_signature_compact_fail_deltaTime","inputs":[{"name":"params","type":"tuple","internalType":"struct RecoveryTest.test_recover_sapient_signature_compact_params","components":[{"name":"signerPk","type":"uint256","internalType":"uint256"},{"name":"wallet","type":"address","internalType":"address"},{"name":"payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"startTime","type":"uint256","internalType":"uint256"},{"name":"passedTime","type":"uint256","internalType":"uint256"},{"name":"minTimestamp","type":"uint256","internalType":"uint256"},{"name":"requiredDeltaTime","type":"uint256","internalType":"uint256"},{"name":"suffixes","type":"tuple[]","internalType":"struct RecoveryTest.other_leaf[]","components":[{"name":"signer","type":"address","internalType":"address"},{"name":"requiredDeltaTime","type":"uint24","internalType":"uint24"},{"name":"minTimestamp","type":"uint64","internalType":"uint64"}]},{"name":"prefixes","type":"tuple[]","internalType":"struct RecoveryTest.other_leaf[]","components":[{"name":"signer","type":"address","internalType":"address"},{"name":"requiredDeltaTime","type":"uint24","internalType":"uint24"},{"name":"minTimestamp","type":"uint64","internalType":"uint64"}]}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_recover_sapient_signature_compact_fail_minTimestamp","inputs":[{"name":"params","type":"tuple","internalType":"struct RecoveryTest.test_recover_sapient_signature_compact_params","components":[{"name":"signerPk","type":"uint256","internalType":"uint256"},{"name":"wallet","type":"address","internalType":"address"},{"name":"payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"startTime","type":"uint256","internalType":"uint256"},{"name":"passedTime","type":"uint256","internalType":"uint256"},{"name":"minTimestamp","type":"uint256","internalType":"uint256"},{"name":"requiredDeltaTime","type":"uint256","internalType":"uint256"},{"name":"suffixes","type":"tuple[]","internalType":"struct RecoveryTest.other_leaf[]","components":[{"name":"signer","type":"address","internalType":"address"},{"name":"requiredDeltaTime","type":"uint24","internalType":"uint24"},{"name":"minTimestamp","type":"uint64","internalType":"uint64"}]},{"name":"prefixes","type":"tuple[]","internalType":"struct RecoveryTest.other_leaf[]","components":[{"name":"signer","type":"address","internalType":"address"},{"name":"requiredDeltaTime","type":"uint24","internalType":"uint24"},{"name":"minTimestamp","type":"uint64","internalType":"uint64"}]}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"NewQueuedPayload","inputs":[{"name":"_wallet","type":"address","indexed":false,"internalType":"address"},{"name":"_signer","type":"address","indexed":false,"internalType":"address"},{"name":"_payloadHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_timestamp","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"error","name":"InvalidKind","inputs":[{"name":"kind","type":"uint8","internalType":"uint8"}]}],"bytecode":{"object":"0x60808060405234602f57600160ff19600c541617600c55600160ff19601f541617601f5561c08890816100358239f35b600080fdfe608080604052600436101561001357600080fd5b600090813560e01c9081630a9254e41461703b5750806319d09f7b146169aa5780631ed7831c14616901578063240b126d146165f25780632ade3880146164355780632ea8f21014615fb857806330e0518a14615b3e5780633e5e3c2314615a955780633f7286f4146159ec5780634d00a3641461525657806366d9a9a0146150fb5780637434842414614c5557806385226c8114614ba5578063916a17c614614ad0578063b0464fdc146149fb578063b5508aa91461494b578063b5801a2b146141fa578063b7404bcc14613958578063b945c1de14612d22578063ba414fa614612cdf578063bb080c28146124dd578063bcf69b19146117fe578063cba5a57c146108b4578063ddceafa91461085f578063e20c9f71146107a6578063fa183aff1461018d5763fa7626d41461014a57600080fd5b3461018a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a57602060ff601f54166040519015158152f35b80fd5b503461018a5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a57806101c661712f565b60243567ffffffffffffffff81116107a2576101e69036906004016175a7565b90916101f0617152565b9160643567ffffffffffffffff81116106e257610211903690600401617308565b9161021a6176c9565b60a43567ffffffffffffffff811161079e5761023a9036906004016172c1565b9160c435917fffffffff0000000000000000000000000000000000000000000000000000000083169081840361079a576102c861028361029c959461027e8a618695565b618ce8565b9561028d87618da7565b60405195869160208301617dec565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101865285617221565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561079a5767ffffffffffffffff604051917fe5d6bf02000000000000000000000000000000000000000000000000000000008352166004820152898160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811561078f578a9161077a575b50507f1626ba7e0000000000000000000000000000000000000000000000000000000014610773575b73ffffffffffffffffffffffffffffffffffffffff601f5460081c16602060405180927fb00c848400000000000000000000000000000000000000000000000000000000825281806103c38b8d60048401617bf3565b03915afa90811561076857899161072a575b506104408891610414876040519485937f1626ba7e00000000000000000000000000000000000000000000000000000000602086015260248501617e78565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282617221565b7fffffffff00000000000000000000000000000000000000000000000000000000604051921660208301526020825261047a604083617221565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610726576104d091899160405193849283927fb96213e40000000000000000000000000000000000000000000000000000000084528860048501617ed9565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811561071b578891610706575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106c9578661054e91604051809381927fb4d6c7820000000000000000000000000000000000000000000000000000000083528660048401617e0c565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156106e65787916106f1575b50506040517f44b7a4050000000000000000000000000000000000000000000000000000000060208201526105b681610414858988878b60248701617e8f565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106c9578661061191604051809381927ff28dceb30000000000000000000000000000000000000000000000000000000083526020600484015260248301906175f8565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156106e65787916106cd575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c1691823b156106c957869461069c8692604051988997889687957fb05f87db00000000000000000000000000000000000000000000000000000000875260048701617e8f565b03925af180156106be576106ad5750f35b816106b791617221565b61018a5780f35b6040513d84823e3d90fd5b8680fd5b816106d791617221565b6106e2578538610639565b8580fd5b6040513d89823e3d90fd5b816106fb91617221565b6106e2578538610576565b8161071091617221565b6106c95786386104f8565b6040513d8a823e3d90fd5b8880fd5b9850506020883d602011610760575b8161074660209383617221565b8101031261075b5796518897906104406103d5565b600080fd5b3d9150610739565b6040513d8b823e3d90fd5b508661036d565b8161078491617221565b610726578838610344565b6040513d8c823e3d90fd5b8980fd5b8780fd5b5050fd5b503461018a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a5760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b8181106108335761082f8561082381870382617221565b60405191829182617557565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff1684526020909301926001928301920161080c565b503461018a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a57602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051908152f35b503461018a576108c3366178a0565b604081016108d18151618695565b60608201916108eb67fffffffffffffc1760018551619818565b9067ffffffffffffffff604092868085516109068782617221565b600c81527f426f756e6420726573756c740000000000000000000000000000000000000000602082015286516109a38161097160208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528b602484015260648301906175f8565b876044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282617221565b51906a636f6e736f6c652e6c6f675afa501680855260a0820151600182018092116117d15767ffffffffffffffff916109db91618a4e565b1660a082015262ffffff6109f260c0830151618a3f565b1660c0820152608081019267ffffffffffffffff610a1b8551610a1588516179d2565b90618a33565b168452858551737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115f3578451907fe5d6bf020000000000000000000000000000000000000000000000000000000082526004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156115e9576117bc575b5050610a9b82516189dc565b8252610aa5618364565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c1695876020850196610b1b602073ffffffffffffffffffffffffffffffffffffffff8a51168751908a5193849283927fb00c848400000000000000000000000000000000000000000000000000000000845260048401617bf3565b03818d5afa9081156116c2578391611787575b508452610b54855173ffffffffffffffffffffffffffffffffffffffff8a511690618a61565b9860208501998a5286519585518951977fe341eaa400000000000000000000000000000000000000000000000000000000895260048901526024880152606087604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561177d57848598869261171c575b50610bff60ff7f80000000000000000000000000000000000000000000000000000000000000009260608b019b60808c019586528c5216808d8b0152617c48565b60ff1b16905117968760a08801525196895197602089015289880152888752610c29606088617221565b60c086019687528751968951977fffa186490000000000000000000000000000000000000000000000000000000089526004890152602088602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9788156117125785986116e1575b5073ffffffffffffffffffffffffffffffffffffffff60e0880198169283895273ffffffffffffffffffffffffffffffffffffffff8c51169251915193813b156106c957868094610d088e51978896879586947fb05f87db00000000000000000000000000000000000000000000000000000000865260048601617c79565b03925af180156116c2579083916116cc575b5050601f54885186518b518a517f0e159f8000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416600482015291831660248301526044820152916020918391606491839160081c165afa9081156116c2578391611689575b5092610da5610dae9394825190618bfa565b51905190617cc1565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115f3578551907fe5d6bf020000000000000000000000000000000000000000000000000000000082526004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561167f5761166a575b50506101008101946020928551610e338582617221565b8981528752885b8960e087015180518310156110505773ffffffffffffffffffffffffffffffffffffffff610e6a848c51936183d2565b5151168951907f56ca623e00000000000000000000000000000000000000000000000000000000825260048201528281602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561104657839161102c575b5062ffffff88610ed68660e08d01516183d2565b51015116918a51927f6900a3ae00000000000000000000000000000000000000000000000000000000845260048401528383602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831561102257858b8d928796610ff1575b5067ffffffffffffffff929160e0610f4d9201516183d2565b510151168b51907f6900a3ae00000000000000000000000000000000000000000000000000000000825260048201528481602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa948515610fe6579160019695939183610fb9969495610fc1575b50506183e6565b895201610e3a565b610fde9295503d8091833e610fd68183617221565b810190618200565b928f80610fb2565b8c51903d90823e3d90fd5b610f4d9196509160e061101767ffffffffffffffff95943d808c833e610fd68183617221565b979250509192610f34565b8b513d86823e3d90fd5b61104091503d8085833e610fd68183617221565b38610ec2565b8a513d85823e3d90fd5b5050509196909396865173ffffffffffffffffffffffffffffffffffffffff8451168751907f56ca623e00000000000000000000000000000000000000000000000000000000825260048201528a81602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115611660578b91611646575b5060c08a0151908851917f6900a3ae00000000000000000000000000000000000000000000000000000000835260048301528b82602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821561163c578c9261161f575b5060a08b0151928951937f6900a3ae00000000000000000000000000000000000000000000000000000000855260048501528c84602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa938d85156116145790816111939695949392956115f7575b50509b989b61825f565b8752610100899501945b898651805183101561136a5773ffffffffffffffffffffffffffffffffffffffff6111ca848c51936183d2565b5151168951907f56ca623e00000000000000000000000000000000000000000000000000000000825260048201528281602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115611046578391611350575b5062ffffff88611233868c516183d2565b51015116918a51927f6900a3ae00000000000000000000000000000000000000000000000000000000845260048401528383602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa928315611022578493611334575b5067ffffffffffffffff8b6112a3878d516183d2565b510151168b51907f6900a3ae00000000000000000000000000000000000000000000000000000000825260048201528481602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa948515610fe657916001969593918361130f969495611317575b5050618514565b89520161119d565b61132c9295503d8091833e610fd68183617221565b928f80611308565b6113499193503d8086833e610fd68183617221565b913861128d565b61136491503d8085833e610fd68183617221565b38611222565b509550508761014061139888949573ffffffffffffffffffffffffffffffffffffffff8b51915116906195a4565b92019182528573ffffffffffffffffffffffffffffffffffffffff825116737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115f3578451907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156115e9576115d4575b505051835183517f904689fc000000000000000000000000000000000000000000000000000000008782015273ffffffffffffffffffffffffffffffffffffffff9092166024830152604482015292611480846064810161029c565b85737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561018a57806114da958551809781927ff28dceb30000000000000000000000000000000000000000000000000000000083528a600484015260248301906175f8565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156115c85790869392916115a9575b5061155f945073ffffffffffffffffffffffffffffffffffffffff601f5460081c16905191519184518096819482937f898bd92100000000000000000000000000000000000000000000000000000000845260048401617cce565b03915afa9081156115a05750611573578280f35b8161159292903d10611599575b61158a8183617221565b810190617a56565b5081808280f35b503d611580565b513d85823e3d90fd5b6115b7919350809295617221565b6115c45782849186611504565b8480fd5b508351903d90823e3d90fd5b816115de91617221565b6106e2578587611424565b85513d84823e3d90fd5b5080fd5b61160c9295503d8091833e610fd68183617221565b92388e611189565b8b51903d90823e3d90fd5b6116359192508c3d8091833e610fd68183617221565b9038611123565b89513d8e823e3d90fd5b61165a91503d808d833e610fd68183617221565b386110c7565b88513d8d823e3d90fd5b8161167491617221565b6106c9578638610e1c565b86513d84823e3d90fd5b9250506020823d6020116116ba575b816116a560209383617221565b8101031261075b579051899190610da5610d93565b3d9150611698565b88513d85823e3d90fd5b816116d691617221565b6115f3578138610d1a565b61170491985060203d60201161170b575b6116fc8183617221565b810190617a2a565b9638610c89565b503d6116f2565b8a513d87823e3d90fd5b610bff995060ff92507f800000000000000000000000000000000000000000000000000000000000000091506117699060603d606011611776575b6117618183617221565b810190617c23565b909a909350909150610bbe565b503d611757565b89513d86823e3d90fd5b9250506020823d6020116117b4575b816117a360209383617221565b8101031261075b5789915138610b2e565b3d9150611796565b816117c691617221565b6106e2578538610a8f565b6024877f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b503461018a5761180d366178a0565b604081019061181c8251618695565b6060810190611836677fffffffffffffff60018451619818565b90604091858084516118488682617221565b600c81527f426f756e6420726573756c740000000000000000000000000000000000000000602082015285516118b38161097160208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528a602484015260648301906175f8565b51906a636f6e736f6c652e6c6f675afa5083526118d360c0820151618a3f565b60c08201526118e860a0820151845190618a33565b60a08201528460c082015167ffffffffffffffff81146000146124d7575067ffffffffffffffff935b61192060808401958651618a4e565b855251737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115f3578351907fe5d6bf020000000000000000000000000000000000000000000000000000000082526004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156123de576124c2575b505061199d81516189dc565b8152846119a8618364565b9373ffffffffffffffffffffffffffffffffffffffff601f5460081c16611a1a602073ffffffffffffffffffffffffffffffffffffffff8187015116895190885193849283927fb00c848400000000000000000000000000000000000000000000000000000000845260048401617bf3565b0381855afa90811561248357849161248d575b508652611a56875173ffffffffffffffffffffffffffffffffffffffff60208701511690618a61565b602087015283519686518651987fe341eaa4000000000000000000000000000000000000000000000000000000008a5260048a01526024890152606088604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015612483578485998692612432575b50611afe60ff7f80000000000000000000000000000000000000000000000000000000000000009260608c019c60808d019586528d5216808a8c0152617c48565b60ff1b16905117978860a0890152519786519860208a015286890152858852611b28606089617221565b60c087019788528451978651987fffa18649000000000000000000000000000000000000000000000000000000008a5260048a0152602089602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa988915612428578599612407575b5073ffffffffffffffffffffffffffffffffffffffff60e08901991692838a5273ffffffffffffffffffffffffffffffffffffffff6020880151169251915193813b156106c957868094611c0a8b51978896879586947fb05f87db00000000000000000000000000000000000000000000000000000000865260048601617c79565b03925af180156123fd579083916123e8575b5050611c29905142617cc1565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115f3578351907fe5d6bf020000000000000000000000000000000000000000000000000000000082526004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156123de576123c9575b505060208251611ca78282617221565b868152610100850152855b60e08301518051821015611ea25773ffffffffffffffffffffffffffffffffffffffff611ce583610100890151936183d2565b5151168551907f56ca623e00000000000000000000000000000000000000000000000000000000825260048201528881602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115611e98578991611e7e575b5062ffffff84611d518560e08901516183d2565b51015116908651917f6900a3ae00000000000000000000000000000000000000000000000000000000835260048301528982602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215611e74578a92611e58575b5067ffffffffffffffff87611dc48660e08a01516183d2565b51015116928751937f6900a3ae00000000000000000000000000000000000000000000000000000000855260048501528a84602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9384156116605791611e2f939160019695938d94611e3b575b506183e6565b61010087015201611cb2565b611e519194508d3d8091833e610fd68183617221565b9238611e29565b611e6d9192503d808c833e610fd68183617221565b9038611dab565b87513d8c823e3d90fd5b611e9291503d808b833e610fd68183617221565b38611d3d565b86513d8b823e3d90fd5b505093909361010084015173ffffffffffffffffffffffffffffffffffffffff8351168451907f56ca623e00000000000000000000000000000000000000000000000000000000825260048201528781602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156123bf5788916123a5575b5060c0870151908551917f6900a3ae00000000000000000000000000000000000000000000000000000000835260048301528882602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215611e98578992612389575b5060a0880151928651937f6900a3ae00000000000000000000000000000000000000000000000000000000855260048501528984602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa938415611e745790611fe3949392918b9461236d575b5098959861825f565b61010085015285916101008101925b835180518210156121d25773ffffffffffffffffffffffffffffffffffffffff612022836101008a0151936183d2565b5151168651907f56ca623e00000000000000000000000000000000000000000000000000000000825260048201528981602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115611e74578a916121b8575b5062ffffff8561208b8589516183d2565b51015116908751917f6900a3ae00000000000000000000000000000000000000000000000000000000835260048301528a82602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215611660578b9261219c575b5067ffffffffffffffff886120fb868a516183d2565b51015116928851937f6900a3ae00000000000000000000000000000000000000000000000000000000855260048501528b84602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa938c8515612191579160019695939183612168969495612174575050618514565b61010088015201611ff2565b6121899295503d8091833e610fd68183617221565b92388e611308565b8a51903d90823e3d90fd5b6121b19192503d808d833e610fd68183617221565b90386120e5565b6121cc91503d808c833e610fd68183617221565b3861207a565b505090869592508573ffffffffffffffffffffffffffffffffffffffff602061221b6122026101008a01516194b3565b966101208a01978852836101008b0151915116906195a4565b946101408901958652015116737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115f3578551907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561167f57612358575b5050806122f49273ffffffffffffffffffffffffffffffffffffffff601f5460081c16602088015191519187518096819482937f898bd92100000000000000000000000000000000000000000000000000000000845260048401617cce565b03915afa93841561234f5750859361231d575b50508161016061231a9401525190618c71565b80f35b90809350813d8311612348575b6123348183617221565b8101031261075b5790519082610160612307565b503d61232a565b513d87823e3d90fd5b8161236291617221565b6106e2578587612295565b6123829194503d808d833e610fd68183617221565b9238611fda565b61239e9192503d808b833e610fd68183617221565b9038611f76565b6123b991503d808a833e610fd68183617221565b38611f1a565b85513d8a823e3d90fd5b816123d391617221565b6115c4578438611c97565b84513d84823e3d90fd5b816123f291617221565b6115f3578138611c1c565b85513d85823e3d90fd5b61242191995060203d60201161170b576116fc8183617221565b9738611b88565b87513d87823e3d90fd5b611afe9a5060ff92507f800000000000000000000000000000000000000000000000000000000000000091506124769060603d606011611776576117618183617221565b909b909350909150611abd565b86513d86823e3d90fd5b9350506020833d6020116124ba575b816124a960209383617221565b8101031261075b5787925138611a2d565b3d915061249c565b816124cc91617221565b6115c4578438611991565b93611911565b503461018a5760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a5761251561712f565b60243567ffffffffffffffff8111612cdb576125359036906004016175a7565b909183612540617152565b9360643567ffffffffffffffff8111612cdb57612561903690600401617308565b9361256a6176c9565b9460a4359567ffffffffffffffff87116115c4576125e461259f6125956125b89936906004016172c1565b9761027e85618695565b966125a988618da7565b60405198899160208301617dec565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101895288617221565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115c45767ffffffffffffffff604051917fe5d6bf02000000000000000000000000000000000000000000000000000000008352166004820152848160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115612c58578591612cc6575b505061266c8782618a61565b956126c560208373ffffffffffffffffffffffffffffffffffffffff601f5460081c168b6040518095819482937fb00c848400000000000000000000000000000000000000000000000000000000845260048401617bf3565b03915afa908115612beb578691612c8d575b506127168591610414866040519485937f1626ba7e00000000000000000000000000000000000000000000000000000000602086015260248501617e78565b604051907f1626ba7e0000000000000000000000000000000000000000000000000000000060208301526020825261274f604083617221565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106c9576127a591879160405193849283927fb96213e40000000000000000000000000000000000000000000000000000000084528c60048501617ed9565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115612beb578691612c78575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115c4578461282391604051809381927fb4d6c7820000000000000000000000000000000000000000000000000000000083528a60048401617e0c565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115612c58578591612c63575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115c4576040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff919091166084820152848160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115612c58578591612c43575b50506040805173ffffffffffffffffffffffffffffffffffffffff8981168252871660208201529081018790524260608201527faeb5575092e25ccd826d5de3515c096028bb338c1f304db40dc831c3746ee0ae90608090a173ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b156115c4578585896129c98296604051988997889687957fb05f87db00000000000000000000000000000000000000000000000000000000875260048701617e8f565b03925af180156106be57612c2a575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c16906040517fec08af3300000000000000000000000000000000000000000000000000000000815260208180612a5485896004840190929173ffffffffffffffffffffffffffffffffffffffff60209181604085019616845216910152565b0381865afa8015612beb578690612bf6575b612a709150618b77565b6040517fd834bcbf00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff82166024820152856044820152602081606481865afa908115612beb578691612baf575b5090612b5e94612aff856020969594618c71565b604051958694859384937f0e159f800000000000000000000000000000000000000000000000000000000085526004850173ffffffffffffffffffffffffffffffffffffffff6040929594938160608401971683521660208201520152565b03915afa80156106be578290612b7b575b61231a91504290618bfa565b506020813d602011612ba7575b81612b9560209383617221565b8101031261075b5761231a9051612b6f565b3d9150612b88565b93929190506020843d602011612be3575b81612bcd60209383617221565b8101031261075b57925191929091612b5e612aeb565b3d9150612bc0565b6040513d88823e3d90fd5b506020813d602011612c22575b81612c1060209383617221565b8101031261075b57612a709051612a66565b3d9150612c03565b81612c3491617221565b612c3f5783386129d8565b8380fd5b81612c4d91617221565b612c3f57833861290f565b6040513d87823e3d90fd5b81612c6d91617221565b612c3f57833861284b565b81612c8291617221565b6115c45784386127cd565b9550506020853d602011612cbe575b81612ca960209383617221565b8101031261075b5793518894906127166126d7565b3d9150612c9c565b81612cd091617221565b612c3f578338612660565b8280fd5b503461018a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a576020612d186185af565b6040519015158152f35b503461018a57612d31366178a0565b60408101612d3f8151618695565b6060820191612d5a8351600167fffffffffeffffff91619818565b9067ffffffffffffffff612e038160409488808751612d798982617221565b600c81527f426f756e6420726573756c74000000000000000000000000000000000000000060208201528851612de48161097160208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528d602484015260648301906175f8565b51906a636f6e736f6c652e6c6f675afa501680875260a0840151618a33565b1660a082015262ffffff612e1d81600160c0850151619818565b86808551612e2b8782617221565b600c81527f426f756e6420726573756c74000000000000000000000000000000000000000060208201528651612e968161097160208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528b602484015260648301906175f8565b51906a636f6e736f6c652e6c6f675afa5016928360c0830152608082019384517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821161392b5767ffffffffffffffff91612ef391618a33565b168452858551737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115f3578451907fe5d6bf020000000000000000000000000000000000000000000000000000000082526004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156115e957613916575b5050612f7382516189dc565b8252612f7d618364565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c1695876020850196612ff3602073ffffffffffffffffffffffffffffffffffffffff8a51168751908a5193849283927fb00c848400000000000000000000000000000000000000000000000000000000845260048401617bf3565b03818d5afa9081156116c25783916138e1575b50845261302c855173ffffffffffffffffffffffffffffffffffffffff8a511690618a61565b9860208501998a5286519585518951977fe341eaa400000000000000000000000000000000000000000000000000000000895260048901526024880152606087604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561177d578485988692613890575b506130d760ff7f80000000000000000000000000000000000000000000000000000000000000009260608b019b60808c019586528c5216808d8b0152617c48565b60ff1b16905117968760a08801525196895197602089015289880152888752613101606088617221565b60c086019687528751968951977fffa186490000000000000000000000000000000000000000000000000000000089526004890152602088602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa97881561171257859861386f575b5073ffffffffffffffffffffffffffffffffffffffff60e0880198169283895273ffffffffffffffffffffffffffffffffffffffff8c51169251915193813b156106c9578680946131e08e51978896879586947fb05f87db00000000000000000000000000000000000000000000000000000000865260048601617c79565b03925af180156116c25790839161385a575b5050601f54885186518b518a517f0e159f8000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416600482015291831660248301526044820152916020918391606491839160081c165afa9081156116c2578391613821575b5092610da561327d9394825190618bfa565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115f3578551907fe5d6bf020000000000000000000000000000000000000000000000000000000082526004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561167f5761380c575b505061010081019460209285516133028582617221565b8981528752885b8960e087015180518310156134da5773ffffffffffffffffffffffffffffffffffffffff613339848c51936183d2565b5151168951907f56ca623e00000000000000000000000000000000000000000000000000000000825260048201528281602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156110465783916134c0575b5062ffffff886133a58660e08d01516183d2565b51015116918a51927f6900a3ae00000000000000000000000000000000000000000000000000000000845260048401528383602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831561102257858b8d92879661348f575b5067ffffffffffffffff929160e061341c9201516183d2565b510151168b51907f6900a3ae00000000000000000000000000000000000000000000000000000000825260048201528481602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa948515610fe6579160019695939183613487969495610fc15750506183e6565b895201613309565b61341c9196509160e06134b567ffffffffffffffff95943d808c833e610fd68183617221565b979250509192613403565b6134d491503d8085833e610fd68183617221565b38613391565b5050509196909396865173ffffffffffffffffffffffffffffffffffffffff8451168751907f56ca623e00000000000000000000000000000000000000000000000000000000825260048201528a81602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115611660578b916137f2575b5060c08a0151908851917f6900a3ae00000000000000000000000000000000000000000000000000000000835260048301528b82602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821561163c578c926137d5575b5060a08b0151928951937f6900a3ae00000000000000000000000000000000000000000000000000000000855260048501528c84602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa938d851561161457908161361c9695949392956115f75750509b989b61825f565b8752610100899501945b898651805183101561136a5773ffffffffffffffffffffffffffffffffffffffff613653848c51936183d2565b5151168951907f56ca623e00000000000000000000000000000000000000000000000000000000825260048201528281602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156110465783916137bb575b5062ffffff886136bc868c516183d2565b51015116918a51927f6900a3ae00000000000000000000000000000000000000000000000000000000845260048401528383602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831561102257849361379f575b5067ffffffffffffffff8b61372c878d516183d2565b510151168b51907f6900a3ae00000000000000000000000000000000000000000000000000000000825260048201528481602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa948515610fe6579160019695939183613797969495611317575050618514565b895201613626565b6137b49193503d8086833e610fd68183617221565b9138613716565b6137cf91503d8085833e610fd68183617221565b386136ab565b6137eb9192508c3d8091833e610fd68183617221565b90386135ad565b61380691503d808d833e610fd68183617221565b38613551565b8161381691617221565b6106c95786386132eb565b9250506020823d602011613852575b8161383d60209383617221565b8101031261075b579051899190610da561326b565b3d9150613830565b8161386491617221565b6115f35781386131f2565b61388991985060203d60201161170b576116fc8183617221565b9638613161565b6130d7995060ff92507f800000000000000000000000000000000000000000000000000000000000000091506138d49060603d606011611776576117618183617221565b909a909350909150613096565b9250506020823d60201161390e575b816138fd60209383617221565b8101031261075b5789915138613006565b3d91506138f0565b8161392091617221565b6106e2578538612f67565b6024887f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b503461018a5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a5760043567ffffffffffffffff81116115f357366023820112156115f357806004013567ffffffffffffffff8111612cdb5760248201916024369160608402010111612cdb576139d561710c565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15612c3f57836040517f4c63e56200000000000000000000000000000000000000000000000000000000815282151560048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156106be576141e5575b50606093859291505b818310613f8f57505050613a63826194b3565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15612c3f57836040517f4c63e56200000000000000000000000000000000000000000000000000000000815283151560048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156106be57613f7a575b50613b2b613ae4604095619418565b613b8f613aef619db0565b91875197889485947f0199a2200000000000000000000000000000000000000000000000000000000086526060600487015260648601906175f8565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152600f83527f7265636f766572795f656e636f64650000000000000000000000000000000000602084015201604486015201906175f8565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1928315613f6f578493613f53575b506040517f71aad10d0000000000000000000000000000000000000000000000000000000081526020600482015284808280613bf660248201896175f8565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215613f1257604092613d05918391613f39575b50613cbe6002602c865180947f7b22656e636f646564223a2200000000000000000000000000000000000000006020830152613c6981518092602086860191016175d5565b81017f227d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2810184520182617221565b613d69613cc9619db0565b91855195869485947f0199a2200000000000000000000000000000000000000000000000000000000086526060600487015260648601906175f8565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152601483527f7265636f766572795f68617368456e636f646564000000000000000000000000602084015201604486015201906175f8565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115612c58578591613f1f575b506020815191818082019384920101031261075b57613e22938592613db96040935186618c71565b73ffffffffffffffffffffffffffffffffffffffff80601f5460081c16918451978894859384937f6be6b60e00000000000000000000000000000000000000000000000000000000855216600484015260443560248401526060604484015260648301906175f8565b03915afa928315613f125781908294613ecd575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115f357604051907ff7fe3477000000000000000000000000000000000000000000000000000000008252151560048201528160248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156106be57613eb8575b505061231a91618c71565b81613ec291617221565b612cdb578238613ead565b935050506040823d604011613f0a575b81613eea60409383617221565b81010312612cdb578282519283151584036115f357602001519238613e36565b3d9150613edd565b50604051903d90823e3d90fd5b613f3391503d8087833e610fd68183617221565b38613d91565b613f4d91503d8085833e610fd68183617221565b38613c24565b613f689193503d8086833e610fd68183617221565b9138613bb7565b6040513d86823e3d90fd5b613f85828092617221565b61018a5738613ad5565b9091938461416d575b613fa38584846181c1565b3573ffffffffffffffffffffffffffffffffffffffff81168091036106c957604051907f56ca623e00000000000000000000000000000000000000000000000000000000825260048201528681602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156106e6578791614153575b5060206140268786866181c1565b01359062ffffff821680920361079e57604051917f6900a3ae00000000000000000000000000000000000000000000000000000000835260048301528782602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821561071b578892614137575b50604061409a8887876181c1565b01359167ffffffffffffffff831680930361072657604051927f6900a3ae00000000000000000000000000000000000000000000000000000000845260048401528883602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821561076857600194614112948b9461411b575b5061825f565b94019190613a50565b6141309194503d808d833e610fd68183617221565b923861410c565b61414c9192503d808a833e610fd68183617221565b903861408c565b61416791503d8089833e610fd68183617221565b38614018565b6141e0600160206040518461418b82965180928580860191016175d5565b81017f20000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1810184520182617221565b613f98565b816141ef91617221565b612c3f578338613a47565b503461018a5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a578061423361710c565b60443567ffffffffffffffff81116107a257614253903690600401617308565b9061425c6176b2565b91614265617175565b61426e81618f93565b803b15737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106e257604051907f4c63e56200000000000000000000000000000000000000000000000000000000825260048201528581602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115612beb578691614936575b50506142ed82618695565b6142f86004356189dc565b936040517fffa18649000000000000000000000000000000000000000000000000000000008152856004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156106e6578791614917575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106c9576040517f4c63e56200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841673ffffffffffffffffffffffffffffffffffffffff8316141560048201528781602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561071b578891614902575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106c957604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9290921660048301526024820152600660448201527f7369676e657200000000000000000000000000000000000000000000000000006064820152868160848183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156106e65787916148ed575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106e2576040517fc657c718000000000000000000000000000000000000000000000000000000008152868180614551866004830173ffffffffffffffffffffffffffffffffffffffff60809216815260406020820152600b60408201527f77726f6e675369676e657200000000000000000000000000000000000000000060608201520190565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156106e65787916148d8575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106e25767ffffffffffffffff604051917fe5d6bf02000000000000000000000000000000000000000000000000000000008352166004820152858160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115612beb5786916148c3575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c16602060405180927fb00c8484000000000000000000000000000000000000000000000000000000008252818061464f888a60048401617bf3565b03915afa908115612beb57869161488e575b50604051947fe341eaa400000000000000000000000000000000000000000000000000000000865260048601526024850152606084604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015612c58578586958792614844575b506146eb7f800000000000000000000000000000000000000000000000000000000000000091617c48565b60ff1b161760405194602086015260408501526040845261470d606085617221565b6040517f44b7a40500000000000000000000000000000000000000000000000000000000602082015261474a816104148786868960248601617c79565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106e257856147a591604051809381927ff28dceb30000000000000000000000000000000000000000000000000000000083526020600484015260248301906175f8565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115612beb57869161482f575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c1690813b156106e25785809461069c604051978896879586947fb05f87db00000000000000000000000000000000000000000000000000000000865260048601617c79565b8161483991617221565b6115c45784386147cd565b7f800000000000000000000000000000000000000000000000000000000000000096506146eb9250614885915060603d606011611776576117618183617221565b909650916146c0565b9550506020853d6020116148bb575b816148aa60209383617221565b8101031261075b5785945138614661565b3d915061489d565b816148cd91617221565b6115c45784386145f7565b816148e291617221565b6106e2578538614579565b816148f791617221565b6106e25785386144b0565b8161490c91617221565b6106c95786386143f1565b614930915060203d60201161170b576116fc8183617221565b38614350565b8161494091617221565b6115c45784386142e2565b503461018a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a576019546149868161726f565b916149946040519384617221565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b8383106149de576040516020808252819061082f9082018861763b565b6001602081926149ed85617ce5565b8152019201920191906149c1565b503461018a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a57601c54614a368161726f565b91614a446040519384617221565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b838310614a86576040518061082f8782617736565b60026020600192604051614a99816171b9565b73ffffffffffffffffffffffffffffffffffffffff8654168152614abe858701617f1a565b83820152815201920192019190614a71565b503461018a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a57601d54614b0b8161726f565b91614b196040519384617221565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b838310614b5b576040518061082f8782617736565b60026020600192604051614b6e816171b9565b73ffffffffffffffffffffffffffffffffffffffff8654168152614b93858701617f1a565b83820152815201920192019190614b46565b503461018a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a57601a54614be08161726f565b91614bee6040519384617221565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b838310614c38576040516020808252819061082f9082018861763b565b600160208192614c4785617ce5565b815201920192019190614c1b565b503461018a5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a57614c8d61710c565b60443567ffffffffffffffff8111612cdb57614cad903690600401617308565b82614cb66176b2565b614cbf83618695565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115f35767ffffffffffffffff604051917fe5d6bf02000000000000000000000000000000000000000000000000000000008352166004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156106be576150e6575b5050614d456004356189dc565b8373ffffffffffffffffffffffffffffffffffffffff601f5460081c1692604051907fb00c848400000000000000000000000000000000000000000000000000000000825260208280614d9c848a60048401617bf3565b0381885afa9182156150db5783926150a4575b50614dba8682618a61565b94604051927fe341eaa40000000000000000000000000000000000000000000000000000000084528560048501526024840152606083604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015613f6f57848594869261505a575b50614e457f800000000000000000000000000000000000000000000000000000000000000091617c48565b60ff1b1617604051936020850152604084015260408352614e67606084617221565b604051947fffa186490000000000000000000000000000000000000000000000000000000086526004860152602085602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa948515613f6f578495615039575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15612c3f576040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff909116608482015283818060a481015b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115613f6f578491615024575b50506040805173ffffffffffffffffffffffffffffffffffffffff8881168252861660208201529081018690524260608201527faeb5575092e25ccd826d5de3515c096028bb338c1f304db40dc831c3746ee0ae90608090a173ffffffffffffffffffffffffffffffffffffffff601f5460081c1690813b15612c3f5783918583896129c9604051978896879586947fb05f87db00000000000000000000000000000000000000000000000000000000865260048601617c79565b8161502e91617221565b612cdb578238614f69565b61505391955060203d60201161170b576116fc8183617221565b9338614ebe565b7f80000000000000000000000000000000000000000000000000000000000000009550614e45925061509b915060603d606011611776576117618183617221565b90955091614e1a565b925090506020823d6020116150d3575b816150c160209383617221565b8101031261075b578591519038614daf565b3d91506150b4565b6040513d85823e3d90fd5b816150f091617221565b612cdb578238614d38565b503461018a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a57601b546151368161726f565b6151436040519182617221565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b83831061521b57868587604051928392602084019060208552518091526040840160408260051b8601019392905b8282106151b057505050500390f35b9193602061520b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc06001959799849503018652885190836151fb83516040845260408401906175f8565b92015190848184039101526176e0565b96019201920185949391926151a1565b6002602060019260405161522e816171b9565b61523786617ce5565b8152615244858701617f1a565b83820152815201920192019190615173565b503461018a5760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a578061528f61710c565b60443567ffffffffffffffff81116107a2576152af903690600401617308565b906152b86176b2565b916152c1617175565b60a43567ffffffffffffffff81116106e2576153096152f06152ea6104149336906004016172c1565b93618ce8565b926152fa84618da7565b60405192839160208301617dec565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106e2578561535d91604051809381927fb4d6c7820000000000000000000000000000000000000000000000000000000083528660048401617e0c565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115612beb5786916159d7575b505061539082618695565b61539b6004356189dc565b936040517fffa18649000000000000000000000000000000000000000000000000000000008152856004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156106e65787916159b8575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106c9576040517f4c63e56200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841673ffffffffffffffffffffffffffffffffffffffff8316141560048201528781602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561071b5788916159a3575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106c957604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9290921660048301526024820152600660448201527f7369676e657200000000000000000000000000000000000000000000000000006064820152868160848183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156106e657879161598e575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106e2576040517fc657c7180000000000000000000000000000000000000000000000000000000081528681806155f4866004830173ffffffffffffffffffffffffffffffffffffffff60809216815260406020820152600b60408201527f77726f6e675369676e657200000000000000000000000000000000000000000060608201520190565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156106e6578791615979575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106e25767ffffffffffffffff604051917fe5d6bf02000000000000000000000000000000000000000000000000000000008352166004820152858160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115612beb578691615964575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c1693602060405180967fb00c848400000000000000000000000000000000000000000000000000000000825281806156f3888a60048401617bf3565b03915afa948515612beb57869561592d575b50604051907fe341eaa40000000000000000000000000000000000000000000000000000000082526004820152846024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015612beb578690879188916158de575b6157f39293506157967f800000000000000000000000000000000000000000000000000000000000000091617c48565b60ff1b16179560405196879360208501526040840152604083526157bb606084617221565b6104146040519384927f1626ba7e00000000000000000000000000000000000000000000000000000000602085015260248401617cce565b604051908660208301526020825261580c604083617221565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106c95761586291879160405193849283927fb96213e40000000000000000000000000000000000000000000000000000000084528760048501617ed9565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115612beb5786916158c9575b50506040517f44b7a40500000000000000000000000000000000000000000000000000000000602082015261474a816104148786868960248601617c79565b816158d391617221565b6115c457843861588a565b5050506157f36157966159207f80000000000000000000000000000000000000000000000000000000000000009360603d606011611776576117618183617221565b9094508493509150615766565b955093506020853d60201161595c575b8161594a60209383617221565b8101031261075b578594519338615705565b3d915061593d565b8161596e91617221565b6115c457843861569a565b8161598391617221565b6106e257853861561c565b8161599891617221565b6106e2578538615553565b816159ad91617221565b6106c9578638615494565b6159d1915060203d60201161170b576116fc8183617221565b386153f3565b816159e191617221565b6115c4578438615385565b503461018a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a5760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b818110615a695761082f8561082381870382617221565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201615a52565b503461018a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a5760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b818110615b125761082f8561082381870382617221565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201615afb565b503461018a5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a5780615b7761712f565b60243567ffffffffffffffff81116107a257615b979036906004016175a7565b9091615ba1617152565b9160643567ffffffffffffffff81116106e257615bc2903690600401617308565b91615bcb6176c9565b9060a43567ffffffffffffffff811161079e57615bec9036906004016172c1565b9160c43567ffffffffffffffff811161072657615c2391615c68615c17615c3c9336906004016175a7565b94909561027e8a618695565b95615c2d87618da7565b60405193849160208301617dec565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101845283617221565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561079a5767ffffffffffffffff604051917fe5d6bf02000000000000000000000000000000000000000000000000000000008352166004820152898160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811561078f578a91615fa3575b5050615d3e60208773ffffffffffffffffffffffffffffffffffffffff601f5460081c168a6040518095819482937fb00c848400000000000000000000000000000000000000000000000000000000845260048401617bf3565b03915afa90811561078f578a91615f6a575b50615d8f8991610414886040519485937f1626ba7e00000000000000000000000000000000000000000000000000000000602086015260248501617e78565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561079a5789615e0a615e3b9260405193849283927fdbaad14700000000000000000000000000000000000000000000000000000000845273ffffffffffffffffffffffffffffffffffffffff8b1660048501526060602485015260648401906175f8565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8382030160448401528789617e39565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811561078f578a91615f55575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156107265788615eb991604051809381927fb4d6c7820000000000000000000000000000000000000000000000000000000083528860048401617e0c565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115610768578991615f40575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561079e5761061191889160405193849283927ff28dceb3000000000000000000000000000000000000000000000000000000008452602060048501526024840191617e39565b81615f4a91617221565b61079e578738615ee1565b81615f5f91617221565b610726578838615e63565b9950506020893d602011615f9b575b81615f8660209383617221565b8101031261075b579751899890615d8f615d50565b3d9150615f79565b81615fad91617221565b610726578838615ce4565b503461018a5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a57615ff061710c565b60443567ffffffffffffffff8111612cdb57616010903690600401617308565b6160186176b2565b90836084359267ffffffffffffffff84116115f35761604161028d61029c9536906004016172c1565b61604a83618695565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115f35767ffffffffffffffff604051917fe5d6bf02000000000000000000000000000000000000000000000000000000008352166004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156106be57616420575b506160cf6004356189dc565b9173ffffffffffffffffffffffffffffffffffffffff601f5460081c1690602060405180937fb00c84840000000000000000000000000000000000000000000000000000000082528180616127868c60048401617bf3565b03915afa9182156150db5783926163e9575b506161448682618a61565b94604051927fe341eaa40000000000000000000000000000000000000000000000000000000084528560048501526024840152606083604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015613f6f57848594869261639f575b506161cf7f800000000000000000000000000000000000000000000000000000000000000091617c48565b60ff1b16176040519360208501526040840152604083526161f1606084617221565b604051947fffa186490000000000000000000000000000000000000000000000000000000086526004860152602085602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa948515613f6f57849561637e575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15612c3f578361629d91604051809381927fb4d6c7820000000000000000000000000000000000000000000000000000000083528960048401617e0c565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115613f6f578491616369575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15612c3f576040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff909116608482015283818060a48101614f41565b8161637391617221565b612cdb5782386162c5565b61639891955060203d60201161170b576116fc8183617221565b9338616248565b7f800000000000000000000000000000000000000000000000000000000000000095506161cf92506163e0915060603d606011611776576117618183617221565b909550916161a4565b925090506020823d602011616418575b8161640660209383617221565b8101031261075b578591519038616139565b3d91506163f9565b8161642a91617221565b612c3f5783386160c3565b503461018a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a57601e546164708161726f565b61647d6040519182617221565b818152601e83526020810191837f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350845b83831061655c57868587604051928392602084019060208552518091526040840160408260051b8601019392905b8282106164ea57505050500390f35b9193602061654c827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc060019597998495030186526040838a5173ffffffffffffffffffffffffffffffffffffffff81511684520151918185820152019061763b565b96019201920185949391926164db565b604051616568816171b9565b73ffffffffffffffffffffffffffffffffffffffff83541681526001830180546165918161726f565b9161659f6040519384617221565b8183528a526020808b20908b9084015b8382106165d55750505050600192826020928360029501528152019201920191906164ad565b6001602081926165e486617ce5565b8152019301910190916165af565b503461018a5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a5761662a61712f565b6044359060ff821690818303612c3f578360643567ffffffffffffffff81116115f35761665b9036906004016175a7565b92909493600181149081156168f6575b81156168eb575b506168e2575b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115f35773ffffffffffffffffffffffffffffffffffffffff604051917fca669fa7000000000000000000000000000000000000000000000000000000008352166004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156106be576168cd575b506040517fb2505f7c00000000000000000000000000000000000000000000000000000000602082015260ff841660248201526024815261673f604482617221565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115f3578161679a91604051809381927ff28dceb30000000000000000000000000000000000000000000000000000000083526020600484015260248301906175f8565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156106be576168b8575b505061688a926168536021602094847fff000000000000000000000000000000000000000000000000000000000000009573ffffffffffffffffffffffffffffffffffffffff601f5460081c169560405197889460f81b1689850152848401378101888382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101845283617221565b60405180809581947f898bd92100000000000000000000000000000000000000000000000000000000835260243560048401617cce565b03915afa80156106be5761689c575080f35b6168b49060203d6020116115995761158a8183617221565b5080f35b816168c291617221565b612c3f5783386167bf565b816168d791617221565b612c3f5783386166fd565b92508092616678565b600491501438616672565b60038114915061666b565b503461018a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a5760405180916020601654928381520191601682527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289915b81811061697e5761082f8561082381870382617221565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201616967565b503461018a5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a576169e261710c565b9060443567ffffffffffffffff81116115f357616a03903690600401617308565b91616a0d83618695565b616a186004356189dc565b92616a2f67ffffffffffffffff6001606435619818565b9160409184808451616a418682617221565b600c81527f426f756e6420726573756c74000000000000000000000000000000000000000060208201528551616ade81616aac60208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528a602484015260648301906175f8565b8a6044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282617221565b51906a636f6e736f6c652e6c6f675afa50616b03616afb856179d2565b608435618a33565b938351907fffa18649000000000000000000000000000000000000000000000000000000008252876004830152602082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215616f3b57879261701a575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106c9578451907fe5d6bf020000000000000000000000000000000000000000000000000000000082526004820152868160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015616f3b57617004575b50616bd586976189dc565b9473ffffffffffffffffffffffffffffffffffffffff601f5460081c16908551917fb00c848400000000000000000000000000000000000000000000000000000000835260208380616c2b888a60048401617bf3565b0381845afa928315616f79578993616fcd575b50616c498686618a61565b928751987fe341eaa4000000000000000000000000000000000000000000000000000000008a5260048a01526024890152606088604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015616f7957898a998b92616f83575b50616cd27f800000000000000000000000000000000000000000000000000000000000000091617c48565b60ff1b161787519860208a015287890152868852616cf1606089617221565b803b156107265786517fb05f87db0000000000000000000000000000000000000000000000000000000081529089908290818381616d358e8c8c8f60048601617c79565b03925af18015616f7957908991616f64575b5050616d539042617cc1565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561079e578551907fe5d6bf020000000000000000000000000000000000000000000000000000000082526004820152878160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015616f5a57908891616f45575b505084517f654c8bbf00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8086166024830152831660448201526064810191909152616e278160848101610414565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106c95786616e81918651809381927ff28dceb30000000000000000000000000000000000000000000000000000000083526020600484015260248301906175f8565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015616f3b57908791616f26575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c1690813b156106c957868094616f0a8751988996879586947fb05f87db00000000000000000000000000000000000000000000000000000000865260048601617c79565b03925af1908115616f1d57506106ad5750f35b513d84823e3d90fd5b81616f3091617221565b6106e2578538616ea9565b85513d89823e3d90fd5b81616f4f91617221565b6106c9578638616dc4565b86513d8a823e3d90fd5b81616f6e91617221565b61079e578738616d47565b87513d8b823e3d90fd5b7f80000000000000000000000000000000000000000000000000000000000000009a50616cd29250616fc4915060603d606011611776576117618183617221565b909a5091616ca7565b985091506020883d602011616ffc575b81616fea60209383617221565b8101031261075b578897519138616c3e565b3d9150616fdd565b9561701381616bd59998617221565b9596616bca565b61703491925060203d60201161170b576116fc8183617221565b9038616b5b565b9050346115f357817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126115f3576119be8082019082821067ffffffffffffffff8311176170df5790829161a6958339039082f08015613f12577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00601f549260081b16911617601f5580f35b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361075b57565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361075b57565b6044359073ffffffffffffffffffffffffffffffffffffffff8216820361075b57565b6084359073ffffffffffffffffffffffffffffffffffffffff8216820361075b57565b359073ffffffffffffffffffffffffffffffffffffffff8216820361075b57565b6040810190811067ffffffffffffffff8211176171d557604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610120810190811067ffffffffffffffff8211176171d557604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176171d557604052565b3590811515820361075b57565b67ffffffffffffffff81116171d55760051b60200190565b67ffffffffffffffff81116171d557601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b81601f8201121561075b578035906172d882617287565b926172e66040519485617221565b8284526020838301011161075b57816000926020809301838601378301015290565b91906101208382031261075b5760405161732181617204565b8093803560ff8116810361075b57825261733d60208201617262565b6020830152604081013567ffffffffffffffff811161075b57810183601f8201121561075b57803561736e8161726f565b9161737c6040519384617221565b81835260208084019260051b8201019086821161075b5760208101925b82841061747657505050506040830152606081013560608301526080810135608083015260a081013567ffffffffffffffff811161075b57836173dd9183016172c1565b60a083015260c081013560c083015260e081013560e08301526101008101359067ffffffffffffffff821161075b57019180601f8401121561075b5782356174248161726f565b936174326040519586617221565b81855260208086019260051b82010192831161075b57602001905b82821061745e575050506101000152565b6020809161746b84617198565b81520191019061744d565b833567ffffffffffffffff811161075b57820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828b03011261075b576040519160e0830183811067ffffffffffffffff8211176171d5576040526174df60208301617198565b83526040820135602084015260608201359267ffffffffffffffff841161075b5760e0836175148d60208098819801016172c1565b60408401526080810135606084015261752f60a08201617262565b608084015261754060c08201617262565b60a0840152013560c0820152815201930192617399565b602060408183019282815284518094520192019060005b81811061757b5750505090565b825173ffffffffffffffffffffffffffffffffffffffff1684526020938401939092019160010161756e565b9181601f8401121561075b5782359167ffffffffffffffff831161075b576020838186019501011161075b57565b60005b8381106175e85750506000910152565b81810151838201526020016175d8565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093617634815180928187528780880191016175d5565b0116010190565b9080602083519182815201916020808360051b8301019401926000915b83831061766757505050505090565b90919293946020806176a3837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0866001960301875289516175f8565b97019301930191939290617658565b6064359067ffffffffffffffff8216820361075b57565b6084359067ffffffffffffffff8216820361075b57565b906020808351928381520192019060005b8181106176fe5750505090565b82517fffffffff00000000000000000000000000000000000000000000000000000000168452602093840193909201916001016176f1565b602081016020825282518091526040820191602060408360051b8301019401926000915b83831061776957505050505090565b90919293946020806177cc837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff8151168452015191818582015201906176e0565b9701930193019193929061775a565b81601f8201121561075b578035906177f28261726f565b926178006040519485617221565b8284526020606081860194028301019181831161075b57602001925b82841061782a575050505090565b60608483031261075b57604051906060820182811067ffffffffffffffff8211176171d55760405261785b85617198565b8252602085013562ffffff8116810361075b57602083015260408501359067ffffffffffffffff8216820361075b57826020926040606095015281520193019261781c565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82011261075b5760043567ffffffffffffffff811161075b576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc828403011261075b576040519161791683617204565b8160040135835261792960248301617198565b6020840152604482013567ffffffffffffffff811161075b5781600461795192850101617308565b6040840152606482013560608401526084820135608084015260a482013560a084015260c482013560c084015260e482013567ffffffffffffffff811161075b578160046179a1928501016177db565b60e08401526101048201359167ffffffffffffffff831161075b576179c992016004016177db565b61010082015290565b67ffffffffffffffff039067ffffffffffffffff82116179ee57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b919082039182116179ee57565b9081602091031261075b575173ffffffffffffffffffffffffffffffffffffffff8116810361075b5790565b9081602091031261075b575190565b610120820160ff82511683526020820151151560208401526040820151906101206040850152815180915261014084019060206101408260051b8701019301916000905b828210617b4b5750505050617ae161010091606084015160608601526080840151608086015260a084015185820360a08701526175f8565b9160c081015160c085015260e081015160e08501520151916101008183039101526020808351928381520192019060005b818110617b1f5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101617b12565b90919293602080827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec08a6001950301855287519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080617bbd604085015160e0604086015260e08501906175f8565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152960192019201909291617aa9565b60409073ffffffffffffffffffffffffffffffffffffffff617c2094931681528160208201520190617a65565b90565b9081606091031261075b57805160ff8116810361075b57916040602083015192015190565b60ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe59116019060ff82116179ee57565b9273ffffffffffffffffffffffffffffffffffffffff617c20959381617cb394168652166020850152608060408501526080840190617a65565b9160608184039101526175f8565b919082018092116179ee57565b604090617c209392815281602082015201906175f8565b906040519160008154918260011c92600181168015617de2575b602085108114617db557848752869392918115617d755750600114617d2e575b50617d2c92500383617221565b565b90506000929192526020600020906000915b818310617d59575050906020617d2c9282010138617d1f565b6020919350806001915483858901015201910190918492617d40565b60209350617d2c9592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b82010138617d1f565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f1693617cff565b9060019160008152617e0782518093602086850191016175d5565b010190565b60409073ffffffffffffffffffffffffffffffffffffffff617c20949316815281602082015201906175f8565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b604090617c20949281528160208201520191617e39565b93919273ffffffffffffffffffffffffffffffffffffffff617c20969481617ecb94168752166020860152608060408601526080850190617a65565b926060818503910152617e39565b91617f0c9073ffffffffffffffffffffffffffffffffffffffff617c2095931684526060602085015260608401906175f8565b9160408184039101526175f8565b90604051918281549182825260208201906000526020600020926000905b80600783011061813457617d2c9454918181106180fe575b8181106180c8575b818110618092575b81811061805c575b818110618026575b818110617ff0575b818110617fbb575b10617f8e575b500383617221565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260200138617f86565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b168152019301617f80565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b168152019301617f78565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b168152019301617f70565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b168152019301617f68565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b168152019301617f60565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b168152019301617f58565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b168152019301617f50565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e0820152019401920185929391617f38565b91908110156181d1576060020190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60208183031261075b5780519067ffffffffffffffff821161075b570181601f8201121561075b576020815191019061823881617287565b926182466040519485617221565b8184528183011161075b57617c209160208401906175d5565b6001809295946007617d2c95602060405199866182858c9851809285808c0191016175d5565b87017f7369676e65723a00000000000000000000000000000000000000000000000000838201526182bf82518093856027850191016175d5565b01017f3a00000000000000000000000000000000000000000000000000000000000000838201526182fa8251809360206008850191016175d5565b01017f3a00000000000000000000000000000000000000000000000000000000000000838201526183358251809360206002850191016175d5565b010103017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101845283617221565b60405190610180820182811067ffffffffffffffff8211176171d5576040526000610160838281528260208201528260408201528260608201528260808201528260a0820152606060c08201528260e082015260606101008201528261012082015260606101408201520152565b80518210156181d15760209160051b010190565b6001919493908280926007617d2c9660206040519a8661840f8d9851809285808c0191016175d5565b87017f7369676e65723a000000000000000000000000000000000000000000000000008382015261844982518093856027850191016175d5565b01017f3a00000000000000000000000000000000000000000000000000000000000000838201526184848251809360206008850191016175d5565b01017f3a00000000000000000000000000000000000000000000000000000000000000838201526184bf8251809360206002850191016175d5565b01017f20000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1810185520183617221565b6001809295946008617d2c956020604051998661853a8c9851809285808c0191016175d5565b87017f207369676e65723a0000000000000000000000000000000000000000000000008382015261857482518093856028850191016175d5565b01017f3a00000000000000000000000000000000000000000000000000000000000000838201526182fa8251809360206009850191016175d5565b60085460ff1680156185be5790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561868957600091618657575b50151590565b90506020813d602011618681575b8161867260209383617221565b8101031261075b575138618651565b3d9150618665565b6040513d6000823e3d90fd5b6186a66003600060ff845116619818565b60ff60409160008084516186ba8682617221565b600c81527f426f756e6420726573756c740000000000000000000000000000000000000000602082015285516187258161097160208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528a602484015260648301906175f8565b51906a636f6e736f6c652e6c6f675afa501680835215618743575050565b6060820161876873ffffffffffffffffffffffffffffffffffffffff60008351619818565b9060008084516187788682617221565b600c81527f426f756e6420726573756c74000000000000000000000000000000000000000060208201528551618815816187e360208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528a602484015260648301906175f8565b886044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282617221565b51906a636f6e736f6c652e6c6f675afa50526080820161883f66ffffffffffffff60008351619818565b90600080845161884f8682617221565b600c81527f426f756e6420726573756c740000000000000000000000000000000000000000602082015285516188ba816187e360208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528a602484015260648301906175f8565b51906a636f6e736f6c652e6c6f675afa505260005b8183019081519081518110156189d557839260c06189ca836189046002846188f98460019a6183d2565b510151600090619818565b93600080896189816189b3825161891b8482617221565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152835192839160208301957fb60e72cc000000000000000000000000000000000000000000000000000000008752602484015260648301906175f8565b8b6044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282617221565b51906a636f6e736f6c652e6c6f675afa50516183d2565b5101520190506188cf565b5050505050565b7ffffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd03641396001618a0892619818565b9060008060406187e3618a20825161891b8482617221565b51906a636f6e736f6c652e6c6f675afa50565b906000618a0892619818565b62ffffff6000618a0892619818565b618a089167ffffffffffffffff91619818565b60208101519091618b259115618b70576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a08152618b1c60c082617221565b519020916199f7565b6040519060208201927f190100000000000000000000000000000000000000000000000000000000000084526022830152604282015260428152618b6a606282617221565b51902090565b4690618a75565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561075b57604051907f98296c54000000000000000000000000000000000000000000000000000000008252600482015260016024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561868957618bef5750565b6000617d2c91617221565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561075b57604051917f98296c5400000000000000000000000000000000000000000000000000000000835260048301526024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561868957618bef5750565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561075b57604051917f7c84c69b00000000000000000000000000000000000000000000000000000000835260048301526024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561868957618bef5750565b73ffffffffffffffffffffffffffffffffffffffff8116600181101580618d9c575b8015618d88575b8015618d6b575b8015618d61575b15618d5d5773ffffffffffffffffffffffffffffffffffffffff91506040516020810191825260208152618d54604082617221565b51902016618ce8565b5090565b50813b1515618d1f565b50734e59b44847b379578588920ca78fbf26c0b4956c8114618d18565b506a636f6e736f6c652e6c6f678114618d11565b5060ff811115618d0a565b618db081618f93565b600090803b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15612cdb57604051907f4c63e5620000000000000000000000000000000000000000000000000000000082521560048201528281602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156150db57618f6b575b5073ffffffffffffffffffffffffffffffffffffffff16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115f3576040517f4c63e5620000000000000000000000000000000000000000000000000000000081526a636f6e736f6c652e6c6f6782141560048201528281602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156150db57908391618f56575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115f357734e59b44847b379578588920ca78fbf26c0b4956c604051917f4c63e562000000000000000000000000000000000000000000000000000000008352141560048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156106be57618f44575050565b618f4f828092617221565b61018a5750565b81618f6091617221565b6115f3578138618eba565b91618f8c8173ffffffffffffffffffffffffffffffffffffffff9394617221565b9190618e24565b73ffffffffffffffffffffffffffffffffffffffff16600060018210801561940e575b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115f357604051907f4c63e562000000000000000000000000000000000000000000000000000000008252151560048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156106be576193fe575b5090600a461480156193f3575b156190ea5773420000000000000000000000000000000000000081109081156190cc575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115f357604051907f4c63e562000000000000000000000000000000000000000000000000000000008252151560048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156106be57618f44575b5050565b73420000000000000000000000000000000000080091501138619057565b61a4b1461480156193e7575b15619185576064811090811561917a5750737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115f357604051907f4c63e562000000000000000000000000000000000000000000000000000000008252151560048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156106be57618f44575050565b606891501138619057565b61a86a461480156193dc575b619199575050565b730100000000000000000000000000000000000000811080156193bf575b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15612cdb57604051907f4c63e562000000000000000000000000000000000000000000000000000000008252151560048201528281602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156150db579083916193aa575b50507302000000000000000000000000000000000000008110801561938d575b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15612cdb57604051907f4c63e562000000000000000000000000000000000000000000000000000000008252151560048201528281602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156150db57908391619378575b5050730300000000000000000000000000000000000000811090811561935a575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115f357604051907f4c63e562000000000000000000000000000000000000000000000000000000008252151560048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156106be57156190c857618f4f828092617221565b7303000000000000000000000000000000000000ff915011386192de565b8161938291617221565b6115f35781386192bd565b507302000000000000000000000000000000000000ff811161924a565b816193b491617221565b6115f357813861922a565b507301000000000000000000000000000000000000ff81116191b7565b5061a8694614619191565b5062066eed46146190f6565b506101a44614619033565b8161940891617221565b38619026565b5060ff8211618fb6565b90617d2c6002602b60405180957f7b226c6561766573223a22000000000000000000000000000000000000000000602083015261945e81518092602086860191016175d5565b81017f227d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2810185520183617221565b60006194e36194c3604093619418565b619547613cc9737109709ecfa91a80626ff3989d68f67f5b1dd12d61a2b4565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152601783527f7265636f766572795f6861736846726f6d4c6561766573000000000000000000602084015201604486015201906175f8565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811561868957600091619589575b506020815191818082019384920101031261075b575190565b61959e91503d806000833e610fd68183617221565b38619570565b73ffffffffffffffffffffffffffffffffffffffff604051927f56ca623e000000000000000000000000000000000000000000000000000000008452166004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215618689576040926000926197149284926197b9575b506002600c6196f492602b88519586927f7b226c6561766573223a22000000000000000000000000000000000000000000602085015261966481518092602086880191016175d5565b83017f222c227369676e6572223a2200000000000000000000000000000000000000008382015261969f8251809360206037850191016175d5565b01017f227d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2810184520182617221565b619778613cc9737109709ecfa91a80626ff3989d68f67f5b1dd12d61a2b4565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152600d83527f7265636f766572795f7472696d00000000000000000000000000000000000000602084015201604486015201906175f8565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115618689576000916197a4575090565b617c2091503d806000833e610fd68183617221565b6196f4919250600c6197d66002923d8089833e610fd68183617221565b9392505061961b565b81156197e9570690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000908383116199735782811091821580619969575b6199615761983c8486617a1d565b92600184018094116179ee57600383111580619958575b619949577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8310158061993f575b61992e57858311156198e55750509061989d846198a293617a1d565b6197df565b9081156198e0576198b39250617cc1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081116179ee5790565b505090565b9594929190956198f6575b50505050565b8394955061989d906199089394617a1d565b9081156198e0576199199250617a1d565b600181018091116179ee5790388080806198f0565b50509050617c209291501990617a1d565b5082198411619881565b5050919050617c209250617cc1565b50828411619853565b509250505090565b508482111561982e565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374645574696c7320626f756e642875696e743235362c75696e743235362c7560448201527f696e74323536293a204d6178206973206c657373207468616e206d696e2e00006064820152fd5b61010081015160405160208101818193602081519391019260005b818110619d81575050619a4c9250037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282617221565b5190209060ff8151168015600014619c54575090604082015192835191619a8b619a758461726f565b93619a836040519586617221565b80855261726f565b937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe060208501950136863760005b8651811015619b8b5780619acf600192896183d2565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152619b7761012082617221565b519020619b8482886183d2565b5201619ab9565b5092919450926040519081602081019182945192909260005b818110619c3b575050619bde9250037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282617221565b51902091608060608301519201516040519260208401947f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a2865260408501526060840152608083015260a082015260a08152618b6a60c082617221565b8451835260209485019486945090920191600101619ba4565b60018103619cae575060a0015160208151910120906040519060208201927fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46684526040830152606082015260608152618b6a608082617221565b60028103619d01575060c00151906040519060208201927f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e484526040830152606082015260608152618b6a608082617221565b60038103619d54575060e00151906040519060208201927fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46684526040830152606082015260608152618b6a608082617221565b7f048183200000000000000000000000000000000000000000000000000000000060005260045260246000fd5b845173ffffffffffffffffffffffffffffffffffffffff16835260209485019486945090920191600101619a12565b6040517fc1978d1f00000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5345515f53444b5f5250435f4d494e5f504f52540000000000000000000000006044820152602081606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156186895760009161a282575b50604051907fc1978d1f00000000000000000000000000000000000000000000000000000000825260206004830152601460248301527f5345515f53444b5f5250435f4d41585f504f52540000000000000000000000006044830152602082606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156186895760009261a24e575b5080821061a1f0577fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a654801561a19e575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146179ee57816001619f47920193847fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a655617a1d565b91600183018093116179ee57619f6692619f60916197df565b90617cc1565b604051907ff877cb1900000000000000000000000000000000000000000000000000000000825260206004830152601660248301527f5345515f53444b5f5250435f55524c5f505245464958000000000000000000006044830152600082606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156186895760009261a181575b50604051917ff877cb1900000000000000000000000000000000000000000000000000000000835260206004840152601660248401527f5345515f53444b5f5250435f55524c5f535546464958000000000000000000006044840152600083606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9283156186895760009361a164575b50604051917f6900a3ae0000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156186895760009261a142575b506020617c20929361a11582604051968561a0f2899751809285808b0191016175d5565b860161a106825180938580850191016175d5565b010191828151948592016175d5565b01037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282617221565b617c20925061a15d6020913d806000833e610fd68183617221565b925061a0ce565b61a17a9193503d806000833e610fd68183617221565b913861a075565b61a1979192503d806000833e610fd68183617221565b9038619fed565b506040516020810190366000833761a1e860208236810160008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282617221565b519020619eef565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e76616c696420706f72742072616e676500000000000000000000000000006044820152fd5b90916020823d60201161a27a575b8161a26960209383617221565b8101031261018a5750519038619ebe565b3d915061a25c565b906020823d60201161a2ac575b8161a29c60209383617221565b8101031261018a57505138619e36565b3d915061a28f565b73ffffffffffffffffffffffffffffffffffffffff166040517fc1978d1f00000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5345515f53444b5f5250435f4d494e5f504f52540000000000000000000000006044820152602081606481855afa9081156186895760009161a662575b50604051907fc1978d1f00000000000000000000000000000000000000000000000000000000825260206004830152601460248301527f5345515f53444b5f5250435f4d41585f504f52540000000000000000000000006044830152602082606481865afa9182156186895760009261a62e575b5080821061a1f0577fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a654801561a5dc575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146179ee5781600161a439920193847fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a655617a1d565b91600183018093116179ee5761a45292619f60916197df565b906040517ff877cb1900000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5345515f53444b5f5250435f55524c5f505245464958000000000000000000006044820152600081606481855afa9081156186895760009161a5c1575b50604051927ff877cb1900000000000000000000000000000000000000000000000000000000845260206004850152601660248501527f5345515f53444b5f5250435f55524c5f535546464958000000000000000000006044850152600084606481865afa9384156186895760009461a5a2575b506000906024604051809581937f6900a3ae00000000000000000000000000000000000000000000000000000000835260048301525afa9182156186895760009261a14257506020617c20929361a11582604051968561a0f2899751809285808b0191016175d5565b600091945061a5ba903d8084833e610fd68183617221565b939061a539565b61a5d691503d806000833e610fd68183617221565b3861a4c5565b506040516020810190366000833761a62660208236810160008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282617221565b51902061a3e1565b90916020823d60201161a65a575b8161a64960209383617221565b8101031261018a575051903861a3b0565b3d915061a63c565b906020823d60201161a68c575b8161a67c60209383617221565b8101031261018a5750513861a33c565b3d915061a66f56fe608080604052346015576119a3908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c80630e159f80146100875780636be6b60e14610082578063898bd9211461007d578063b00c848414610078578063b05f87db14610073578063d834bcbf1461006e5763ec08af331461006957600080fd5b6106dc565b610628565b61036c565b610301565b61023c565b6101c6565b3461012c5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012c576100be610131565b6101156100c9610154565b73ffffffffffffffffffffffffffffffffffffffff6044359316600052600060205260406000209073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b906000526020526020604060002054604051908152f35b600080fd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361012c57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361012c57565b359073ffffffffffffffffffffffffffffffffffffffff8216820361012c57565b9181601f8401121561012c5782359167ffffffffffffffff831161012c576020838186019501011161012c57565b3461012c5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012c576101fd610131565b60443560243567ffffffffffffffff821161012c5760409261022661022e933690600401610198565b9290916110b5565b825191151582526020820152f35b3461012c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012c5760043560243567ffffffffffffffff811161012c57610291610299913690600401610198565b9083336110b5565b90156102aa57602090604051908152f35b507f904689fc0000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff331660045260245260446000fd5b908161012091031261012c5790565b3461012c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012c57610338610131565b60243567ffffffffffffffff811161012c5760209161035e6103649236906004016102f2565b90610b05565b604051908152f35b3461012c5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012c576103a3610131565b6103ab610154565b60443567ffffffffffffffff811161012c576103cb9036906004016102f2565b60643567ffffffffffffffff811161012c576103eb903690600401610198565b906103f982828587896114f2565b156105a15750508261040f610414923690610a39565b61166c565b9061047b8261046c836104478773ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b90600052602052604060002090565b546105525761054d7faeb5575092e25ccd826d5de3515c096028bb338c1f304db40dc831c3746ee0ae93426104d88561046c866104478673ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b556105108461050b856104478573ffffffffffffffffffffffffffffffffffffffff166000526001602052604060002090565b610ff8565b6040519384934292859094939273ffffffffffffffffffffffffffffffffffffffff60609381608085019816845216602083015260408201520152565b0390a1005b7f654c8bbf0000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff9283166004529190911660245260445260646000fd5b6040517f44b7a4050000000000000000000000000000000000000000000000000000000081529485946105d8949160048701610eb7565b0390fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80548210156106235760005260206000200190600090565b6105dc565b3461012c5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012c5761065f610131565b6106b661066a610154565b73ffffffffffffffffffffffffffffffffffffffff6044359316600052600160205260406000209073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b90815481101561012c576106c99161060b565b905460405160039290921b1c8152602090f35b3461012c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012c576020610768610718610131565b73ffffffffffffffffffffffffffffffffffffffff610735610154565b91166000526001835260406000209073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b54604051908152f35b8015150361012c57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176107eb57604052565b61077b565b604051906107ff60e0836107aa565b565b604051906107ff610120836107aa565b359060ff8216820361012c57565b35906107ff82610771565b67ffffffffffffffff81116107eb5760051b60200190565b81601f8201121561012c5780359067ffffffffffffffff82116107eb576040519261089560207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f86011601856107aa565b8284526020838301011161012c57816000926020809301838601378301015290565b81601f8201121561012c578035906108ce8261082a565b926108dc60405194856107aa565b82845260208085019360051b8301019181831161012c5760208101935b83851061090857505050505090565b843567ffffffffffffffff811161012c57820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828603011261012c5761094f6107f0565b9161095c60208301610177565b83526040820135602084015260608201359267ffffffffffffffff841161012c5760e083610991886020809881980101610842565b6040840152608081013560608401526109ac60a0820161081f565b60808401526109bd60c0820161081f565b60a0840152013560c08201528152019401936108f9565b9080601f8301121561012c5781356109eb8161082a565b926109f960405194856107aa565b81845260208085019260051b82010192831161012c57602001905b828210610a215750505090565b60208091610a2e84610177565b815201910190610a14565b9190916101208184031261012c57610a4f610801565b92610a5982610811565b8452610a676020830161081f565b6020850152604082013567ffffffffffffffff811161012c5781610a8c9184016108b7565b6040850152606082013560608501526080820135608085015260a082013567ffffffffffffffff811161012c5781610ac5918401610842565b60a085015260c082013560c085015260e082013560e085015261010082013567ffffffffffffffff811161012c57610afd92016109d4565b610100830152565b610c4e610be0610bdb610c22936020860135610b2081610771565b15610c54576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527fd50a220b5983c5d6e86926072ffa8a3197ae49602ffc9dd0e60d62d561a2e1d560408501527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606085015260808401521660a082015260a08152610bd060c0826107aa565b519020943690610a39565b6112bc565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826107aa565b51902090565b4690610b29565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561012c57016020813591019167ffffffffffffffff821161012c578160051b3603831361012c57565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561012c57016020813591019167ffffffffffffffff821161012c57813603831361012c57565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b90602083828152019160208260051b8501019381936000915b848310610d665750505050505090565b9091929394957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08282030183528635907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff218636030182121561012c576020809187600194019073ffffffffffffffffffffffffffffffffffffffff610dea83610177565b168152828201358382015260c080610e19610e086040860186610cae565b60e0604087015260e0860191610cfe565b93606081013560608501526080810135610e3281610771565b15156080850152610e5360a0820135610e4a81610771565b151560a0860152565b01359101529801930193019194939290610d56565b9160209082815201919060005b818110610e825750505090565b90919260208060019273ffffffffffffffffffffffffffffffffffffffff610ea988610177565b168152019401929101610e75565b93919273ffffffffffffffffffffffffffffffffffffffff610ff5969481610fe79416875216602086015260806040860152610f0060808601610ef983610811565b60ff169052565b610f18610f0f6020830161081f565b151560a0870152565b610fb6610f94610f41610f2e6040850185610c5b565b61012060c08b01526101a08a0191610d3d565b606084013560e08901526080840135610100890152610f6360a0850185610cae565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808a8403016101208b0152610cfe565b9160c081013561014088015260e0810135610160880152610100810190610c5b565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8087840301610180880152610e68565b926060818503910152610cfe565b90565b8054680100000000000000008110156107eb5761101a9160018201815561060b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff829392549160031b92831b921b1916179055565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9190820391821161108b57565b61104f565b9190820180921161108b57565b9093929384831161012c57841161012c578101920390565b600094938593929091845b8381106110d05750505050509190565b8481013560f81c97959060019081019081908a146111ae5750600389146111825760048914611128577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b6003810198506111579061114f906111469088013560e81c8b611090565b809a878961109d565b9085856110b5565b906111749290811561117a575b5096600052602052604060002090565b966110c0565b905038611164565b9597509480850135906020019780156111a8579061117491600052602052604060002090565b50611174565b67ffffffffffffffff9950919691868101803560601c9250601481013560e81c9160179091013560c01c90601f019a16916112118661046c836104478973ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b5482811515918261126d575b82611258575b505061124f575b906112359291611740565b9080156111a8579061117491600052602052604060002090565b6001985061122a565b6112649192504261107e565b10158238611223565b85811015925061121d565b805160209091019060005b8181106112905750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101611283565b6101008101516040516112d781610c22602082018095611278565b519020906112e6815160ff1690565b60ff81168061135f57505090610c4e61130260408401516117f2565b92610c2260806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b600181036113bd57505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46693810193845290810191909152606081019290925290610c4e8160808101610c22565b6002810361141357505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e460208201908152918101929092526060820192909252610c4e8160808101610c22565b600303611467575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46660208201908152918101929092526060820192909252610c4e8160808101610c22565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b6040513d6000823e3d90fd5b9081602091031261012c57517fffffffff000000000000000000000000000000000000000000000000000000008116810361012c5790565b604090610ff5949281528160208201520191610cfe565b916114ff91939492610b05565b91604082146115fc575b803b6115185750505050600090565b61156a9373ffffffffffffffffffffffffffffffffffffffff602094604051968795869485937f1626ba7e000000000000000000000000000000000000000000000000000000008552600485016114db565b0392165afa9081156115f7577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000916000916115c8575b50161490565b6115ea915060203d6020116115f0575b6115e281836107aa565b8101906114a3565b386115c2565b503d6115d8565b611497565b6020600061163361160c8761192d565b50604080518a815260ff909216602083015281019290925260608201529081906080820190565b838052039060015afa156115f75760005173ffffffffffffffffffffffffffffffffffffffff8083169116036115095750505050600190565b90610c4e610be0610c229260208501511515600014611739576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a0815261173060c0826107aa565b519020936112bc565b4690611689565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e6365207265636f76657279206c6561663a0a0000000000000000865260601b166038840152604c830152606c820152606c8152610c4e608c826107aa565b80518210156106235760209160051b010190565b805160209091019060005b8181106117dc5750505090565b82518452602093840193909201916001016117cf565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06118386118228361082a565b9261183060405194856107aa565b80845261082a565b0136602083013760005b83518110156119145780611858600192866117b0565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152611900610120826107aa565b51902061190d82856117b0565b5201611842565b50909150604051610c4e81610c226020820180956117c4565b9060208235920135906040601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff811161108b579156fea26469706673582212207e36076184ab9ba511c3d3d434c19aa7294085f57cd2eba64cfe56f92819afe164736f6c634300081c0033a2646970667358221220d38bd2b403fbe73620bb36388f854c5352c5961b61ca4eaaed3346d84f2e1f5964736f6c634300081c0033","sourceMap":"706:19784:77:-:0;;;;;;;3166:4:5;706:19784:77;;3166:4:5;706:19784:77;;;3166:4:5;706:19784:77;3166:4:5;706:19784:77;;1087:4:16;706:19784:77;;;1087:4:16;706:19784:77;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608080604052600436101561001357600080fd5b600090813560e01c9081630a9254e41461703b5750806319d09f7b146169aa5780631ed7831c14616901578063240b126d146165f25780632ade3880146164355780632ea8f21014615fb857806330e0518a14615b3e5780633e5e3c2314615a955780633f7286f4146159ec5780634d00a3641461525657806366d9a9a0146150fb5780637434842414614c5557806385226c8114614ba5578063916a17c614614ad0578063b0464fdc146149fb578063b5508aa91461494b578063b5801a2b146141fa578063b7404bcc14613958578063b945c1de14612d22578063ba414fa614612cdf578063bb080c28146124dd578063bcf69b19146117fe578063cba5a57c146108b4578063ddceafa91461085f578063e20c9f71146107a6578063fa183aff1461018d5763fa7626d41461014a57600080fd5b3461018a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a57602060ff601f54166040519015158152f35b80fd5b503461018a5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a57806101c661712f565b60243567ffffffffffffffff81116107a2576101e69036906004016175a7565b90916101f0617152565b9160643567ffffffffffffffff81116106e257610211903690600401617308565b9161021a6176c9565b60a43567ffffffffffffffff811161079e5761023a9036906004016172c1565b9160c435917fffffffff0000000000000000000000000000000000000000000000000000000083169081840361079a576102c861028361029c959461027e8a618695565b618ce8565b9561028d87618da7565b60405195869160208301617dec565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101865285617221565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561079a5767ffffffffffffffff604051917fe5d6bf02000000000000000000000000000000000000000000000000000000008352166004820152898160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811561078f578a9161077a575b50507f1626ba7e0000000000000000000000000000000000000000000000000000000014610773575b73ffffffffffffffffffffffffffffffffffffffff601f5460081c16602060405180927fb00c848400000000000000000000000000000000000000000000000000000000825281806103c38b8d60048401617bf3565b03915afa90811561076857899161072a575b506104408891610414876040519485937f1626ba7e00000000000000000000000000000000000000000000000000000000602086015260248501617e78565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282617221565b7fffffffff00000000000000000000000000000000000000000000000000000000604051921660208301526020825261047a604083617221565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610726576104d091899160405193849283927fb96213e40000000000000000000000000000000000000000000000000000000084528860048501617ed9565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811561071b578891610706575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106c9578661054e91604051809381927fb4d6c7820000000000000000000000000000000000000000000000000000000083528660048401617e0c565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156106e65787916106f1575b50506040517f44b7a4050000000000000000000000000000000000000000000000000000000060208201526105b681610414858988878b60248701617e8f565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106c9578661061191604051809381927ff28dceb30000000000000000000000000000000000000000000000000000000083526020600484015260248301906175f8565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156106e65787916106cd575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c1691823b156106c957869461069c8692604051988997889687957fb05f87db00000000000000000000000000000000000000000000000000000000875260048701617e8f565b03925af180156106be576106ad5750f35b816106b791617221565b61018a5780f35b6040513d84823e3d90fd5b8680fd5b816106d791617221565b6106e2578538610639565b8580fd5b6040513d89823e3d90fd5b816106fb91617221565b6106e2578538610576565b8161071091617221565b6106c95786386104f8565b6040513d8a823e3d90fd5b8880fd5b9850506020883d602011610760575b8161074660209383617221565b8101031261075b5796518897906104406103d5565b600080fd5b3d9150610739565b6040513d8b823e3d90fd5b508661036d565b8161078491617221565b610726578838610344565b6040513d8c823e3d90fd5b8980fd5b8780fd5b5050fd5b503461018a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a5760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b8181106108335761082f8561082381870382617221565b60405191829182617557565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff1684526020909301926001928301920161080c565b503461018a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a57602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051908152f35b503461018a576108c3366178a0565b604081016108d18151618695565b60608201916108eb67fffffffffffffc1760018551619818565b9067ffffffffffffffff604092868085516109068782617221565b600c81527f426f756e6420726573756c740000000000000000000000000000000000000000602082015286516109a38161097160208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528b602484015260648301906175f8565b876044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282617221565b51906a636f6e736f6c652e6c6f675afa501680855260a0820151600182018092116117d15767ffffffffffffffff916109db91618a4e565b1660a082015262ffffff6109f260c0830151618a3f565b1660c0820152608081019267ffffffffffffffff610a1b8551610a1588516179d2565b90618a33565b168452858551737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115f3578451907fe5d6bf020000000000000000000000000000000000000000000000000000000082526004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156115e9576117bc575b5050610a9b82516189dc565b8252610aa5618364565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c1695876020850196610b1b602073ffffffffffffffffffffffffffffffffffffffff8a51168751908a5193849283927fb00c848400000000000000000000000000000000000000000000000000000000845260048401617bf3565b03818d5afa9081156116c2578391611787575b508452610b54855173ffffffffffffffffffffffffffffffffffffffff8a511690618a61565b9860208501998a5286519585518951977fe341eaa400000000000000000000000000000000000000000000000000000000895260048901526024880152606087604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561177d57848598869261171c575b50610bff60ff7f80000000000000000000000000000000000000000000000000000000000000009260608b019b60808c019586528c5216808d8b0152617c48565b60ff1b16905117968760a08801525196895197602089015289880152888752610c29606088617221565b60c086019687528751968951977fffa186490000000000000000000000000000000000000000000000000000000089526004890152602088602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9788156117125785986116e1575b5073ffffffffffffffffffffffffffffffffffffffff60e0880198169283895273ffffffffffffffffffffffffffffffffffffffff8c51169251915193813b156106c957868094610d088e51978896879586947fb05f87db00000000000000000000000000000000000000000000000000000000865260048601617c79565b03925af180156116c2579083916116cc575b5050601f54885186518b518a517f0e159f8000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416600482015291831660248301526044820152916020918391606491839160081c165afa9081156116c2578391611689575b5092610da5610dae9394825190618bfa565b51905190617cc1565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115f3578551907fe5d6bf020000000000000000000000000000000000000000000000000000000082526004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561167f5761166a575b50506101008101946020928551610e338582617221565b8981528752885b8960e087015180518310156110505773ffffffffffffffffffffffffffffffffffffffff610e6a848c51936183d2565b5151168951907f56ca623e00000000000000000000000000000000000000000000000000000000825260048201528281602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561104657839161102c575b5062ffffff88610ed68660e08d01516183d2565b51015116918a51927f6900a3ae00000000000000000000000000000000000000000000000000000000845260048401528383602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831561102257858b8d928796610ff1575b5067ffffffffffffffff929160e0610f4d9201516183d2565b510151168b51907f6900a3ae00000000000000000000000000000000000000000000000000000000825260048201528481602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa948515610fe6579160019695939183610fb9969495610fc1575b50506183e6565b895201610e3a565b610fde9295503d8091833e610fd68183617221565b810190618200565b928f80610fb2565b8c51903d90823e3d90fd5b610f4d9196509160e061101767ffffffffffffffff95943d808c833e610fd68183617221565b979250509192610f34565b8b513d86823e3d90fd5b61104091503d8085833e610fd68183617221565b38610ec2565b8a513d85823e3d90fd5b5050509196909396865173ffffffffffffffffffffffffffffffffffffffff8451168751907f56ca623e00000000000000000000000000000000000000000000000000000000825260048201528a81602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115611660578b91611646575b5060c08a0151908851917f6900a3ae00000000000000000000000000000000000000000000000000000000835260048301528b82602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821561163c578c9261161f575b5060a08b0151928951937f6900a3ae00000000000000000000000000000000000000000000000000000000855260048501528c84602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa938d85156116145790816111939695949392956115f7575b50509b989b61825f565b8752610100899501945b898651805183101561136a5773ffffffffffffffffffffffffffffffffffffffff6111ca848c51936183d2565b5151168951907f56ca623e00000000000000000000000000000000000000000000000000000000825260048201528281602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115611046578391611350575b5062ffffff88611233868c516183d2565b51015116918a51927f6900a3ae00000000000000000000000000000000000000000000000000000000845260048401528383602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa928315611022578493611334575b5067ffffffffffffffff8b6112a3878d516183d2565b510151168b51907f6900a3ae00000000000000000000000000000000000000000000000000000000825260048201528481602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa948515610fe657916001969593918361130f969495611317575b5050618514565b89520161119d565b61132c9295503d8091833e610fd68183617221565b928f80611308565b6113499193503d8086833e610fd68183617221565b913861128d565b61136491503d8085833e610fd68183617221565b38611222565b509550508761014061139888949573ffffffffffffffffffffffffffffffffffffffff8b51915116906195a4565b92019182528573ffffffffffffffffffffffffffffffffffffffff825116737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115f3578451907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156115e9576115d4575b505051835183517f904689fc000000000000000000000000000000000000000000000000000000008782015273ffffffffffffffffffffffffffffffffffffffff9092166024830152604482015292611480846064810161029c565b85737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561018a57806114da958551809781927ff28dceb30000000000000000000000000000000000000000000000000000000083528a600484015260248301906175f8565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156115c85790869392916115a9575b5061155f945073ffffffffffffffffffffffffffffffffffffffff601f5460081c16905191519184518096819482937f898bd92100000000000000000000000000000000000000000000000000000000845260048401617cce565b03915afa9081156115a05750611573578280f35b8161159292903d10611599575b61158a8183617221565b810190617a56565b5081808280f35b503d611580565b513d85823e3d90fd5b6115b7919350809295617221565b6115c45782849186611504565b8480fd5b508351903d90823e3d90fd5b816115de91617221565b6106e2578587611424565b85513d84823e3d90fd5b5080fd5b61160c9295503d8091833e610fd68183617221565b92388e611189565b8b51903d90823e3d90fd5b6116359192508c3d8091833e610fd68183617221565b9038611123565b89513d8e823e3d90fd5b61165a91503d808d833e610fd68183617221565b386110c7565b88513d8d823e3d90fd5b8161167491617221565b6106c9578638610e1c565b86513d84823e3d90fd5b9250506020823d6020116116ba575b816116a560209383617221565b8101031261075b579051899190610da5610d93565b3d9150611698565b88513d85823e3d90fd5b816116d691617221565b6115f3578138610d1a565b61170491985060203d60201161170b575b6116fc8183617221565b810190617a2a565b9638610c89565b503d6116f2565b8a513d87823e3d90fd5b610bff995060ff92507f800000000000000000000000000000000000000000000000000000000000000091506117699060603d606011611776575b6117618183617221565b810190617c23565b909a909350909150610bbe565b503d611757565b89513d86823e3d90fd5b9250506020823d6020116117b4575b816117a360209383617221565b8101031261075b5789915138610b2e565b3d9150611796565b816117c691617221565b6106e2578538610a8f565b6024877f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b503461018a5761180d366178a0565b604081019061181c8251618695565b6060810190611836677fffffffffffffff60018451619818565b90604091858084516118488682617221565b600c81527f426f756e6420726573756c740000000000000000000000000000000000000000602082015285516118b38161097160208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528a602484015260648301906175f8565b51906a636f6e736f6c652e6c6f675afa5083526118d360c0820151618a3f565b60c08201526118e860a0820151845190618a33565b60a08201528460c082015167ffffffffffffffff81146000146124d7575067ffffffffffffffff935b61192060808401958651618a4e565b855251737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115f3578351907fe5d6bf020000000000000000000000000000000000000000000000000000000082526004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156123de576124c2575b505061199d81516189dc565b8152846119a8618364565b9373ffffffffffffffffffffffffffffffffffffffff601f5460081c16611a1a602073ffffffffffffffffffffffffffffffffffffffff8187015116895190885193849283927fb00c848400000000000000000000000000000000000000000000000000000000845260048401617bf3565b0381855afa90811561248357849161248d575b508652611a56875173ffffffffffffffffffffffffffffffffffffffff60208701511690618a61565b602087015283519686518651987fe341eaa4000000000000000000000000000000000000000000000000000000008a5260048a01526024890152606088604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015612483578485998692612432575b50611afe60ff7f80000000000000000000000000000000000000000000000000000000000000009260608c019c60808d019586528d5216808a8c0152617c48565b60ff1b16905117978860a0890152519786519860208a015286890152858852611b28606089617221565b60c087019788528451978651987fffa18649000000000000000000000000000000000000000000000000000000008a5260048a0152602089602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa988915612428578599612407575b5073ffffffffffffffffffffffffffffffffffffffff60e08901991692838a5273ffffffffffffffffffffffffffffffffffffffff6020880151169251915193813b156106c957868094611c0a8b51978896879586947fb05f87db00000000000000000000000000000000000000000000000000000000865260048601617c79565b03925af180156123fd579083916123e8575b5050611c29905142617cc1565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115f3578351907fe5d6bf020000000000000000000000000000000000000000000000000000000082526004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156123de576123c9575b505060208251611ca78282617221565b868152610100850152855b60e08301518051821015611ea25773ffffffffffffffffffffffffffffffffffffffff611ce583610100890151936183d2565b5151168551907f56ca623e00000000000000000000000000000000000000000000000000000000825260048201528881602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115611e98578991611e7e575b5062ffffff84611d518560e08901516183d2565b51015116908651917f6900a3ae00000000000000000000000000000000000000000000000000000000835260048301528982602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215611e74578a92611e58575b5067ffffffffffffffff87611dc48660e08a01516183d2565b51015116928751937f6900a3ae00000000000000000000000000000000000000000000000000000000855260048501528a84602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9384156116605791611e2f939160019695938d94611e3b575b506183e6565b61010087015201611cb2565b611e519194508d3d8091833e610fd68183617221565b9238611e29565b611e6d9192503d808c833e610fd68183617221565b9038611dab565b87513d8c823e3d90fd5b611e9291503d808b833e610fd68183617221565b38611d3d565b86513d8b823e3d90fd5b505093909361010084015173ffffffffffffffffffffffffffffffffffffffff8351168451907f56ca623e00000000000000000000000000000000000000000000000000000000825260048201528781602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156123bf5788916123a5575b5060c0870151908551917f6900a3ae00000000000000000000000000000000000000000000000000000000835260048301528882602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215611e98578992612389575b5060a0880151928651937f6900a3ae00000000000000000000000000000000000000000000000000000000855260048501528984602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa938415611e745790611fe3949392918b9461236d575b5098959861825f565b61010085015285916101008101925b835180518210156121d25773ffffffffffffffffffffffffffffffffffffffff612022836101008a0151936183d2565b5151168651907f56ca623e00000000000000000000000000000000000000000000000000000000825260048201528981602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115611e74578a916121b8575b5062ffffff8561208b8589516183d2565b51015116908751917f6900a3ae00000000000000000000000000000000000000000000000000000000835260048301528a82602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215611660578b9261219c575b5067ffffffffffffffff886120fb868a516183d2565b51015116928851937f6900a3ae00000000000000000000000000000000000000000000000000000000855260048501528b84602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa938c8515612191579160019695939183612168969495612174575050618514565b61010088015201611ff2565b6121899295503d8091833e610fd68183617221565b92388e611308565b8a51903d90823e3d90fd5b6121b19192503d808d833e610fd68183617221565b90386120e5565b6121cc91503d808c833e610fd68183617221565b3861207a565b505090869592508573ffffffffffffffffffffffffffffffffffffffff602061221b6122026101008a01516194b3565b966101208a01978852836101008b0151915116906195a4565b946101408901958652015116737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115f3578551907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561167f57612358575b5050806122f49273ffffffffffffffffffffffffffffffffffffffff601f5460081c16602088015191519187518096819482937f898bd92100000000000000000000000000000000000000000000000000000000845260048401617cce565b03915afa93841561234f5750859361231d575b50508161016061231a9401525190618c71565b80f35b90809350813d8311612348575b6123348183617221565b8101031261075b5790519082610160612307565b503d61232a565b513d87823e3d90fd5b8161236291617221565b6106e2578587612295565b6123829194503d808d833e610fd68183617221565b9238611fda565b61239e9192503d808b833e610fd68183617221565b9038611f76565b6123b991503d808a833e610fd68183617221565b38611f1a565b85513d8a823e3d90fd5b816123d391617221565b6115c4578438611c97565b84513d84823e3d90fd5b816123f291617221565b6115f3578138611c1c565b85513d85823e3d90fd5b61242191995060203d60201161170b576116fc8183617221565b9738611b88565b87513d87823e3d90fd5b611afe9a5060ff92507f800000000000000000000000000000000000000000000000000000000000000091506124769060603d606011611776576117618183617221565b909b909350909150611abd565b86513d86823e3d90fd5b9350506020833d6020116124ba575b816124a960209383617221565b8101031261075b5787925138611a2d565b3d915061249c565b816124cc91617221565b6115c4578438611991565b93611911565b503461018a5760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a5761251561712f565b60243567ffffffffffffffff8111612cdb576125359036906004016175a7565b909183612540617152565b9360643567ffffffffffffffff8111612cdb57612561903690600401617308565b9361256a6176c9565b9460a4359567ffffffffffffffff87116115c4576125e461259f6125956125b89936906004016172c1565b9761027e85618695565b966125a988618da7565b60405198899160208301617dec565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101895288617221565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115c45767ffffffffffffffff604051917fe5d6bf02000000000000000000000000000000000000000000000000000000008352166004820152848160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115612c58578591612cc6575b505061266c8782618a61565b956126c560208373ffffffffffffffffffffffffffffffffffffffff601f5460081c168b6040518095819482937fb00c848400000000000000000000000000000000000000000000000000000000845260048401617bf3565b03915afa908115612beb578691612c8d575b506127168591610414866040519485937f1626ba7e00000000000000000000000000000000000000000000000000000000602086015260248501617e78565b604051907f1626ba7e0000000000000000000000000000000000000000000000000000000060208301526020825261274f604083617221565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106c9576127a591879160405193849283927fb96213e40000000000000000000000000000000000000000000000000000000084528c60048501617ed9565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115612beb578691612c78575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115c4578461282391604051809381927fb4d6c7820000000000000000000000000000000000000000000000000000000083528a60048401617e0c565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115612c58578591612c63575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115c4576040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff919091166084820152848160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115612c58578591612c43575b50506040805173ffffffffffffffffffffffffffffffffffffffff8981168252871660208201529081018790524260608201527faeb5575092e25ccd826d5de3515c096028bb338c1f304db40dc831c3746ee0ae90608090a173ffffffffffffffffffffffffffffffffffffffff601f5460081c16803b156115c4578585896129c98296604051988997889687957fb05f87db00000000000000000000000000000000000000000000000000000000875260048701617e8f565b03925af180156106be57612c2a575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c16906040517fec08af3300000000000000000000000000000000000000000000000000000000815260208180612a5485896004840190929173ffffffffffffffffffffffffffffffffffffffff60209181604085019616845216910152565b0381865afa8015612beb578690612bf6575b612a709150618b77565b6040517fd834bcbf00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff82166024820152856044820152602081606481865afa908115612beb578691612baf575b5090612b5e94612aff856020969594618c71565b604051958694859384937f0e159f800000000000000000000000000000000000000000000000000000000085526004850173ffffffffffffffffffffffffffffffffffffffff6040929594938160608401971683521660208201520152565b03915afa80156106be578290612b7b575b61231a91504290618bfa565b506020813d602011612ba7575b81612b9560209383617221565b8101031261075b5761231a9051612b6f565b3d9150612b88565b93929190506020843d602011612be3575b81612bcd60209383617221565b8101031261075b57925191929091612b5e612aeb565b3d9150612bc0565b6040513d88823e3d90fd5b506020813d602011612c22575b81612c1060209383617221565b8101031261075b57612a709051612a66565b3d9150612c03565b81612c3491617221565b612c3f5783386129d8565b8380fd5b81612c4d91617221565b612c3f57833861290f565b6040513d87823e3d90fd5b81612c6d91617221565b612c3f57833861284b565b81612c8291617221565b6115c45784386127cd565b9550506020853d602011612cbe575b81612ca960209383617221565b8101031261075b5793518894906127166126d7565b3d9150612c9c565b81612cd091617221565b612c3f578338612660565b8280fd5b503461018a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a576020612d186185af565b6040519015158152f35b503461018a57612d31366178a0565b60408101612d3f8151618695565b6060820191612d5a8351600167fffffffffeffffff91619818565b9067ffffffffffffffff612e038160409488808751612d798982617221565b600c81527f426f756e6420726573756c74000000000000000000000000000000000000000060208201528851612de48161097160208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528d602484015260648301906175f8565b51906a636f6e736f6c652e6c6f675afa501680875260a0840151618a33565b1660a082015262ffffff612e1d81600160c0850151619818565b86808551612e2b8782617221565b600c81527f426f756e6420726573756c74000000000000000000000000000000000000000060208201528651612e968161097160208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528b602484015260648301906175f8565b51906a636f6e736f6c652e6c6f675afa5016928360c0830152608082019384517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821161392b5767ffffffffffffffff91612ef391618a33565b168452858551737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115f3578451907fe5d6bf020000000000000000000000000000000000000000000000000000000082526004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156115e957613916575b5050612f7382516189dc565b8252612f7d618364565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c1695876020850196612ff3602073ffffffffffffffffffffffffffffffffffffffff8a51168751908a5193849283927fb00c848400000000000000000000000000000000000000000000000000000000845260048401617bf3565b03818d5afa9081156116c25783916138e1575b50845261302c855173ffffffffffffffffffffffffffffffffffffffff8a511690618a61565b9860208501998a5286519585518951977fe341eaa400000000000000000000000000000000000000000000000000000000895260048901526024880152606087604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561177d578485988692613890575b506130d760ff7f80000000000000000000000000000000000000000000000000000000000000009260608b019b60808c019586528c5216808d8b0152617c48565b60ff1b16905117968760a08801525196895197602089015289880152888752613101606088617221565b60c086019687528751968951977fffa186490000000000000000000000000000000000000000000000000000000089526004890152602088602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa97881561171257859861386f575b5073ffffffffffffffffffffffffffffffffffffffff60e0880198169283895273ffffffffffffffffffffffffffffffffffffffff8c51169251915193813b156106c9578680946131e08e51978896879586947fb05f87db00000000000000000000000000000000000000000000000000000000865260048601617c79565b03925af180156116c25790839161385a575b5050601f54885186518b518a517f0e159f8000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416600482015291831660248301526044820152916020918391606491839160081c165afa9081156116c2578391613821575b5092610da561327d9394825190618bfa565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115f3578551907fe5d6bf020000000000000000000000000000000000000000000000000000000082526004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561167f5761380c575b505061010081019460209285516133028582617221565b8981528752885b8960e087015180518310156134da5773ffffffffffffffffffffffffffffffffffffffff613339848c51936183d2565b5151168951907f56ca623e00000000000000000000000000000000000000000000000000000000825260048201528281602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156110465783916134c0575b5062ffffff886133a58660e08d01516183d2565b51015116918a51927f6900a3ae00000000000000000000000000000000000000000000000000000000845260048401528383602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831561102257858b8d92879661348f575b5067ffffffffffffffff929160e061341c9201516183d2565b510151168b51907f6900a3ae00000000000000000000000000000000000000000000000000000000825260048201528481602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa948515610fe6579160019695939183613487969495610fc15750506183e6565b895201613309565b61341c9196509160e06134b567ffffffffffffffff95943d808c833e610fd68183617221565b979250509192613403565b6134d491503d8085833e610fd68183617221565b38613391565b5050509196909396865173ffffffffffffffffffffffffffffffffffffffff8451168751907f56ca623e00000000000000000000000000000000000000000000000000000000825260048201528a81602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115611660578b916137f2575b5060c08a0151908851917f6900a3ae00000000000000000000000000000000000000000000000000000000835260048301528b82602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821561163c578c926137d5575b5060a08b0151928951937f6900a3ae00000000000000000000000000000000000000000000000000000000855260048501528c84602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa938d851561161457908161361c9695949392956115f75750509b989b61825f565b8752610100899501945b898651805183101561136a5773ffffffffffffffffffffffffffffffffffffffff613653848c51936183d2565b5151168951907f56ca623e00000000000000000000000000000000000000000000000000000000825260048201528281602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156110465783916137bb575b5062ffffff886136bc868c516183d2565b51015116918a51927f6900a3ae00000000000000000000000000000000000000000000000000000000845260048401528383602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831561102257849361379f575b5067ffffffffffffffff8b61372c878d516183d2565b510151168b51907f6900a3ae00000000000000000000000000000000000000000000000000000000825260048201528481602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa948515610fe6579160019695939183613797969495611317575050618514565b895201613626565b6137b49193503d8086833e610fd68183617221565b9138613716565b6137cf91503d8085833e610fd68183617221565b386136ab565b6137eb9192508c3d8091833e610fd68183617221565b90386135ad565b61380691503d808d833e610fd68183617221565b38613551565b8161381691617221565b6106c95786386132eb565b9250506020823d602011613852575b8161383d60209383617221565b8101031261075b579051899190610da561326b565b3d9150613830565b8161386491617221565b6115f35781386131f2565b61388991985060203d60201161170b576116fc8183617221565b9638613161565b6130d7995060ff92507f800000000000000000000000000000000000000000000000000000000000000091506138d49060603d606011611776576117618183617221565b909a909350909150613096565b9250506020823d60201161390e575b816138fd60209383617221565b8101031261075b5789915138613006565b3d91506138f0565b8161392091617221565b6106e2578538612f67565b6024887f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b503461018a5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a5760043567ffffffffffffffff81116115f357366023820112156115f357806004013567ffffffffffffffff8111612cdb5760248201916024369160608402010111612cdb576139d561710c565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15612c3f57836040517f4c63e56200000000000000000000000000000000000000000000000000000000815282151560048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156106be576141e5575b50606093859291505b818310613f8f57505050613a63826194b3565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15612c3f57836040517f4c63e56200000000000000000000000000000000000000000000000000000000815283151560048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156106be57613f7a575b50613b2b613ae4604095619418565b613b8f613aef619db0565b91875197889485947f0199a2200000000000000000000000000000000000000000000000000000000086526060600487015260648601906175f8565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152600f83527f7265636f766572795f656e636f64650000000000000000000000000000000000602084015201604486015201906175f8565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1928315613f6f578493613f53575b506040517f71aad10d0000000000000000000000000000000000000000000000000000000081526020600482015284808280613bf660248201896175f8565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215613f1257604092613d05918391613f39575b50613cbe6002602c865180947f7b22656e636f646564223a2200000000000000000000000000000000000000006020830152613c6981518092602086860191016175d5565b81017f227d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2810184520182617221565b613d69613cc9619db0565b91855195869485947f0199a2200000000000000000000000000000000000000000000000000000000086526060600487015260648601906175f8565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152601483527f7265636f766572795f68617368456e636f646564000000000000000000000000602084015201604486015201906175f8565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115612c58578591613f1f575b506020815191818082019384920101031261075b57613e22938592613db96040935186618c71565b73ffffffffffffffffffffffffffffffffffffffff80601f5460081c16918451978894859384937f6be6b60e00000000000000000000000000000000000000000000000000000000855216600484015260443560248401526060604484015260648301906175f8565b03915afa928315613f125781908294613ecd575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115f357604051907ff7fe3477000000000000000000000000000000000000000000000000000000008252151560048201528160248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156106be57613eb8575b505061231a91618c71565b81613ec291617221565b612cdb578238613ead565b935050506040823d604011613f0a575b81613eea60409383617221565b81010312612cdb578282519283151584036115f357602001519238613e36565b3d9150613edd565b50604051903d90823e3d90fd5b613f3391503d8087833e610fd68183617221565b38613d91565b613f4d91503d8085833e610fd68183617221565b38613c24565b613f689193503d8086833e610fd68183617221565b9138613bb7565b6040513d86823e3d90fd5b613f85828092617221565b61018a5738613ad5565b9091938461416d575b613fa38584846181c1565b3573ffffffffffffffffffffffffffffffffffffffff81168091036106c957604051907f56ca623e00000000000000000000000000000000000000000000000000000000825260048201528681602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156106e6578791614153575b5060206140268786866181c1565b01359062ffffff821680920361079e57604051917f6900a3ae00000000000000000000000000000000000000000000000000000000835260048301528782602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821561071b578892614137575b50604061409a8887876181c1565b01359167ffffffffffffffff831680930361072657604051927f6900a3ae00000000000000000000000000000000000000000000000000000000845260048401528883602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821561076857600194614112948b9461411b575b5061825f565b94019190613a50565b6141309194503d808d833e610fd68183617221565b923861410c565b61414c9192503d808a833e610fd68183617221565b903861408c565b61416791503d8089833e610fd68183617221565b38614018565b6141e0600160206040518461418b82965180928580860191016175d5565b81017f20000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1810184520182617221565b613f98565b816141ef91617221565b612c3f578338613a47565b503461018a5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a578061423361710c565b60443567ffffffffffffffff81116107a257614253903690600401617308565b9061425c6176b2565b91614265617175565b61426e81618f93565b803b15737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106e257604051907f4c63e56200000000000000000000000000000000000000000000000000000000825260048201528581602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115612beb578691614936575b50506142ed82618695565b6142f86004356189dc565b936040517fffa18649000000000000000000000000000000000000000000000000000000008152856004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156106e6578791614917575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106c9576040517f4c63e56200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841673ffffffffffffffffffffffffffffffffffffffff8316141560048201528781602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561071b578891614902575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106c957604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9290921660048301526024820152600660448201527f7369676e657200000000000000000000000000000000000000000000000000006064820152868160848183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156106e65787916148ed575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106e2576040517fc657c718000000000000000000000000000000000000000000000000000000008152868180614551866004830173ffffffffffffffffffffffffffffffffffffffff60809216815260406020820152600b60408201527f77726f6e675369676e657200000000000000000000000000000000000000000060608201520190565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156106e65787916148d8575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106e25767ffffffffffffffff604051917fe5d6bf02000000000000000000000000000000000000000000000000000000008352166004820152858160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115612beb5786916148c3575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c16602060405180927fb00c8484000000000000000000000000000000000000000000000000000000008252818061464f888a60048401617bf3565b03915afa908115612beb57869161488e575b50604051947fe341eaa400000000000000000000000000000000000000000000000000000000865260048601526024850152606084604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015612c58578586958792614844575b506146eb7f800000000000000000000000000000000000000000000000000000000000000091617c48565b60ff1b161760405194602086015260408501526040845261470d606085617221565b6040517f44b7a40500000000000000000000000000000000000000000000000000000000602082015261474a816104148786868960248601617c79565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106e257856147a591604051809381927ff28dceb30000000000000000000000000000000000000000000000000000000083526020600484015260248301906175f8565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115612beb57869161482f575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c1690813b156106e25785809461069c604051978896879586947fb05f87db00000000000000000000000000000000000000000000000000000000865260048601617c79565b8161483991617221565b6115c45784386147cd565b7f800000000000000000000000000000000000000000000000000000000000000096506146eb9250614885915060603d606011611776576117618183617221565b909650916146c0565b9550506020853d6020116148bb575b816148aa60209383617221565b8101031261075b5785945138614661565b3d915061489d565b816148cd91617221565b6115c45784386145f7565b816148e291617221565b6106e2578538614579565b816148f791617221565b6106e25785386144b0565b8161490c91617221565b6106c95786386143f1565b614930915060203d60201161170b576116fc8183617221565b38614350565b8161494091617221565b6115c45784386142e2565b503461018a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a576019546149868161726f565b916149946040519384617221565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b8383106149de576040516020808252819061082f9082018861763b565b6001602081926149ed85617ce5565b8152019201920191906149c1565b503461018a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a57601c54614a368161726f565b91614a446040519384617221565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b838310614a86576040518061082f8782617736565b60026020600192604051614a99816171b9565b73ffffffffffffffffffffffffffffffffffffffff8654168152614abe858701617f1a565b83820152815201920192019190614a71565b503461018a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a57601d54614b0b8161726f565b91614b196040519384617221565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b838310614b5b576040518061082f8782617736565b60026020600192604051614b6e816171b9565b73ffffffffffffffffffffffffffffffffffffffff8654168152614b93858701617f1a565b83820152815201920192019190614b46565b503461018a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a57601a54614be08161726f565b91614bee6040519384617221565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b838310614c38576040516020808252819061082f9082018861763b565b600160208192614c4785617ce5565b815201920192019190614c1b565b503461018a5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a57614c8d61710c565b60443567ffffffffffffffff8111612cdb57614cad903690600401617308565b82614cb66176b2565b614cbf83618695565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115f35767ffffffffffffffff604051917fe5d6bf02000000000000000000000000000000000000000000000000000000008352166004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156106be576150e6575b5050614d456004356189dc565b8373ffffffffffffffffffffffffffffffffffffffff601f5460081c1692604051907fb00c848400000000000000000000000000000000000000000000000000000000825260208280614d9c848a60048401617bf3565b0381885afa9182156150db5783926150a4575b50614dba8682618a61565b94604051927fe341eaa40000000000000000000000000000000000000000000000000000000084528560048501526024840152606083604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015613f6f57848594869261505a575b50614e457f800000000000000000000000000000000000000000000000000000000000000091617c48565b60ff1b1617604051936020850152604084015260408352614e67606084617221565b604051947fffa186490000000000000000000000000000000000000000000000000000000086526004860152602085602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa948515613f6f578495615039575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15612c3f576040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff909116608482015283818060a481015b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115613f6f578491615024575b50506040805173ffffffffffffffffffffffffffffffffffffffff8881168252861660208201529081018690524260608201527faeb5575092e25ccd826d5de3515c096028bb338c1f304db40dc831c3746ee0ae90608090a173ffffffffffffffffffffffffffffffffffffffff601f5460081c1690813b15612c3f5783918583896129c9604051978896879586947fb05f87db00000000000000000000000000000000000000000000000000000000865260048601617c79565b8161502e91617221565b612cdb578238614f69565b61505391955060203d60201161170b576116fc8183617221565b9338614ebe565b7f80000000000000000000000000000000000000000000000000000000000000009550614e45925061509b915060603d606011611776576117618183617221565b90955091614e1a565b925090506020823d6020116150d3575b816150c160209383617221565b8101031261075b578591519038614daf565b3d91506150b4565b6040513d85823e3d90fd5b816150f091617221565b612cdb578238614d38565b503461018a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a57601b546151368161726f565b6151436040519182617221565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b83831061521b57868587604051928392602084019060208552518091526040840160408260051b8601019392905b8282106151b057505050500390f35b9193602061520b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc06001959799849503018652885190836151fb83516040845260408401906175f8565b92015190848184039101526176e0565b96019201920185949391926151a1565b6002602060019260405161522e816171b9565b61523786617ce5565b8152615244858701617f1a565b83820152815201920192019190615173565b503461018a5760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a578061528f61710c565b60443567ffffffffffffffff81116107a2576152af903690600401617308565b906152b86176b2565b916152c1617175565b60a43567ffffffffffffffff81116106e2576153096152f06152ea6104149336906004016172c1565b93618ce8565b926152fa84618da7565b60405192839160208301617dec565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106e2578561535d91604051809381927fb4d6c7820000000000000000000000000000000000000000000000000000000083528660048401617e0c565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115612beb5786916159d7575b505061539082618695565b61539b6004356189dc565b936040517fffa18649000000000000000000000000000000000000000000000000000000008152856004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156106e65787916159b8575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106c9576040517f4c63e56200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841673ffffffffffffffffffffffffffffffffffffffff8316141560048201528781602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561071b5788916159a3575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106c957604080517fc657c71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9290921660048301526024820152600660448201527f7369676e657200000000000000000000000000000000000000000000000000006064820152868160848183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156106e657879161598e575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106e2576040517fc657c7180000000000000000000000000000000000000000000000000000000081528681806155f4866004830173ffffffffffffffffffffffffffffffffffffffff60809216815260406020820152600b60408201527f77726f6e675369676e657200000000000000000000000000000000000000000060608201520190565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156106e6578791615979575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106e25767ffffffffffffffff604051917fe5d6bf02000000000000000000000000000000000000000000000000000000008352166004820152858160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115612beb578691615964575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c1693602060405180967fb00c848400000000000000000000000000000000000000000000000000000000825281806156f3888a60048401617bf3565b03915afa948515612beb57869561592d575b50604051907fe341eaa40000000000000000000000000000000000000000000000000000000082526004820152846024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015612beb578690879188916158de575b6157f39293506157967f800000000000000000000000000000000000000000000000000000000000000091617c48565b60ff1b16179560405196879360208501526040840152604083526157bb606084617221565b6104146040519384927f1626ba7e00000000000000000000000000000000000000000000000000000000602085015260248401617cce565b604051908660208301526020825261580c604083617221565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106c95761586291879160405193849283927fb96213e40000000000000000000000000000000000000000000000000000000084528760048501617ed9565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115612beb5786916158c9575b50506040517f44b7a40500000000000000000000000000000000000000000000000000000000602082015261474a816104148786868960248601617c79565b816158d391617221565b6115c457843861588a565b5050506157f36157966159207f80000000000000000000000000000000000000000000000000000000000000009360603d606011611776576117618183617221565b9094508493509150615766565b955093506020853d60201161595c575b8161594a60209383617221565b8101031261075b578594519338615705565b3d915061593d565b8161596e91617221565b6115c457843861569a565b8161598391617221565b6106e257853861561c565b8161599891617221565b6106e2578538615553565b816159ad91617221565b6106c9578638615494565b6159d1915060203d60201161170b576116fc8183617221565b386153f3565b816159e191617221565b6115c4578438615385565b503461018a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a5760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b818110615a695761082f8561082381870382617221565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201615a52565b503461018a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a5760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b818110615b125761082f8561082381870382617221565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201615afb565b503461018a5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a5780615b7761712f565b60243567ffffffffffffffff81116107a257615b979036906004016175a7565b9091615ba1617152565b9160643567ffffffffffffffff81116106e257615bc2903690600401617308565b91615bcb6176c9565b9060a43567ffffffffffffffff811161079e57615bec9036906004016172c1565b9160c43567ffffffffffffffff811161072657615c2391615c68615c17615c3c9336906004016175a7565b94909561027e8a618695565b95615c2d87618da7565b60405193849160208301617dec565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101845283617221565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561079a5767ffffffffffffffff604051917fe5d6bf02000000000000000000000000000000000000000000000000000000008352166004820152898160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811561078f578a91615fa3575b5050615d3e60208773ffffffffffffffffffffffffffffffffffffffff601f5460081c168a6040518095819482937fb00c848400000000000000000000000000000000000000000000000000000000845260048401617bf3565b03915afa90811561078f578a91615f6a575b50615d8f8991610414886040519485937f1626ba7e00000000000000000000000000000000000000000000000000000000602086015260248501617e78565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561079a5789615e0a615e3b9260405193849283927fdbaad14700000000000000000000000000000000000000000000000000000000845273ffffffffffffffffffffffffffffffffffffffff8b1660048501526060602485015260648401906175f8565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8382030160448401528789617e39565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811561078f578a91615f55575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156107265788615eb991604051809381927fb4d6c7820000000000000000000000000000000000000000000000000000000083528860048401617e0c565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115610768578991615f40575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561079e5761061191889160405193849283927ff28dceb3000000000000000000000000000000000000000000000000000000008452602060048501526024840191617e39565b81615f4a91617221565b61079e578738615ee1565b81615f5f91617221565b610726578838615e63565b9950506020893d602011615f9b575b81615f8660209383617221565b8101031261075b579751899890615d8f615d50565b3d9150615f79565b81615fad91617221565b610726578838615ce4565b503461018a5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a57615ff061710c565b60443567ffffffffffffffff8111612cdb57616010903690600401617308565b6160186176b2565b90836084359267ffffffffffffffff84116115f35761604161028d61029c9536906004016172c1565b61604a83618695565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115f35767ffffffffffffffff604051917fe5d6bf02000000000000000000000000000000000000000000000000000000008352166004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156106be57616420575b506160cf6004356189dc565b9173ffffffffffffffffffffffffffffffffffffffff601f5460081c1690602060405180937fb00c84840000000000000000000000000000000000000000000000000000000082528180616127868c60048401617bf3565b03915afa9182156150db5783926163e9575b506161448682618a61565b94604051927fe341eaa40000000000000000000000000000000000000000000000000000000084528560048501526024840152606083604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015613f6f57848594869261639f575b506161cf7f800000000000000000000000000000000000000000000000000000000000000091617c48565b60ff1b16176040519360208501526040840152604083526161f1606084617221565b604051947fffa186490000000000000000000000000000000000000000000000000000000086526004860152602085602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa948515613f6f57849561637e575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15612c3f578361629d91604051809381927fb4d6c7820000000000000000000000000000000000000000000000000000000083528960048401617e0c565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115613f6f578491616369575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15612c3f576040517f81bad6f30000000000000000000000000000000000000000000000000000000081526001600482018190526024820181905260448201819052606482015273ffffffffffffffffffffffffffffffffffffffff909116608482015283818060a48101614f41565b8161637391617221565b612cdb5782386162c5565b61639891955060203d60201161170b576116fc8183617221565b9338616248565b7f800000000000000000000000000000000000000000000000000000000000000095506161cf92506163e0915060603d606011611776576117618183617221565b909550916161a4565b925090506020823d602011616418575b8161640660209383617221565b8101031261075b578591519038616139565b3d91506163f9565b8161642a91617221565b612c3f5783386160c3565b503461018a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a57601e546164708161726f565b61647d6040519182617221565b818152601e83526020810191837f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350845b83831061655c57868587604051928392602084019060208552518091526040840160408260051b8601019392905b8282106164ea57505050500390f35b9193602061654c827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc060019597998495030186526040838a5173ffffffffffffffffffffffffffffffffffffffff81511684520151918185820152019061763b565b96019201920185949391926164db565b604051616568816171b9565b73ffffffffffffffffffffffffffffffffffffffff83541681526001830180546165918161726f565b9161659f6040519384617221565b8183528a526020808b20908b9084015b8382106165d55750505050600192826020928360029501528152019201920191906164ad565b6001602081926165e486617ce5565b8152019301910190916165af565b503461018a5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a5761662a61712f565b6044359060ff821690818303612c3f578360643567ffffffffffffffff81116115f35761665b9036906004016175a7565b92909493600181149081156168f6575b81156168eb575b506168e2575b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115f35773ffffffffffffffffffffffffffffffffffffffff604051917fca669fa7000000000000000000000000000000000000000000000000000000008352166004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156106be576168cd575b506040517fb2505f7c00000000000000000000000000000000000000000000000000000000602082015260ff841660248201526024815261673f604482617221565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115f3578161679a91604051809381927ff28dceb30000000000000000000000000000000000000000000000000000000083526020600484015260248301906175f8565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156106be576168b8575b505061688a926168536021602094847fff000000000000000000000000000000000000000000000000000000000000009573ffffffffffffffffffffffffffffffffffffffff601f5460081c169560405197889460f81b1689850152848401378101888382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101845283617221565b60405180809581947f898bd92100000000000000000000000000000000000000000000000000000000835260243560048401617cce565b03915afa80156106be5761689c575080f35b6168b49060203d6020116115995761158a8183617221565b5080f35b816168c291617221565b612c3f5783386167bf565b816168d791617221565b612c3f5783386166fd565b92508092616678565b600491501438616672565b60038114915061666b565b503461018a57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a5760405180916020601654928381520191601682527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289915b81811061697e5761082f8561082381870382617221565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201616967565b503461018a5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a576169e261710c565b9060443567ffffffffffffffff81116115f357616a03903690600401617308565b91616a0d83618695565b616a186004356189dc565b92616a2f67ffffffffffffffff6001606435619818565b9160409184808451616a418682617221565b600c81527f426f756e6420726573756c74000000000000000000000000000000000000000060208201528551616ade81616aac60208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528a602484015260648301906175f8565b8a6044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282617221565b51906a636f6e736f6c652e6c6f675afa50616b03616afb856179d2565b608435618a33565b938351907fffa18649000000000000000000000000000000000000000000000000000000008252876004830152602082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215616f3b57879261701a575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106c9578451907fe5d6bf020000000000000000000000000000000000000000000000000000000082526004820152868160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015616f3b57617004575b50616bd586976189dc565b9473ffffffffffffffffffffffffffffffffffffffff601f5460081c16908551917fb00c848400000000000000000000000000000000000000000000000000000000835260208380616c2b888a60048401617bf3565b0381845afa928315616f79578993616fcd575b50616c498686618a61565b928751987fe341eaa4000000000000000000000000000000000000000000000000000000008a5260048a01526024890152606088604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015616f7957898a998b92616f83575b50616cd27f800000000000000000000000000000000000000000000000000000000000000091617c48565b60ff1b161787519860208a015287890152868852616cf1606089617221565b803b156107265786517fb05f87db0000000000000000000000000000000000000000000000000000000081529089908290818381616d358e8c8c8f60048601617c79565b03925af18015616f7957908991616f64575b5050616d539042617cc1565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561079e578551907fe5d6bf020000000000000000000000000000000000000000000000000000000082526004820152878160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015616f5a57908891616f45575b505084517f654c8bbf00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8086166024830152831660448201526064810191909152616e278160848101610414565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106c95786616e81918651809381927ff28dceb30000000000000000000000000000000000000000000000000000000083526020600484015260248301906175f8565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015616f3b57908791616f26575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c1690813b156106c957868094616f0a8751988996879586947fb05f87db00000000000000000000000000000000000000000000000000000000865260048601617c79565b03925af1908115616f1d57506106ad5750f35b513d84823e3d90fd5b81616f3091617221565b6106e2578538616ea9565b85513d89823e3d90fd5b81616f4f91617221565b6106c9578638616dc4565b86513d8a823e3d90fd5b81616f6e91617221565b61079e578738616d47565b87513d8b823e3d90fd5b7f80000000000000000000000000000000000000000000000000000000000000009a50616cd29250616fc4915060603d606011611776576117618183617221565b909a5091616ca7565b985091506020883d602011616ffc575b81616fea60209383617221565b8101031261075b578897519138616c3e565b3d9150616fdd565b9561701381616bd59998617221565b9596616bca565b61703491925060203d60201161170b576116fc8183617221565b9038616b5b565b9050346115f357817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126115f3576119be8082019082821067ffffffffffffffff8311176170df5790829161a6958339039082f08015613f12577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00601f549260081b16911617601f5580f35b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361075b57565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361075b57565b6044359073ffffffffffffffffffffffffffffffffffffffff8216820361075b57565b6084359073ffffffffffffffffffffffffffffffffffffffff8216820361075b57565b359073ffffffffffffffffffffffffffffffffffffffff8216820361075b57565b6040810190811067ffffffffffffffff8211176171d557604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610120810190811067ffffffffffffffff8211176171d557604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176171d557604052565b3590811515820361075b57565b67ffffffffffffffff81116171d55760051b60200190565b67ffffffffffffffff81116171d557601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b81601f8201121561075b578035906172d882617287565b926172e66040519485617221565b8284526020838301011161075b57816000926020809301838601378301015290565b91906101208382031261075b5760405161732181617204565b8093803560ff8116810361075b57825261733d60208201617262565b6020830152604081013567ffffffffffffffff811161075b57810183601f8201121561075b57803561736e8161726f565b9161737c6040519384617221565b81835260208084019260051b8201019086821161075b5760208101925b82841061747657505050506040830152606081013560608301526080810135608083015260a081013567ffffffffffffffff811161075b57836173dd9183016172c1565b60a083015260c081013560c083015260e081013560e08301526101008101359067ffffffffffffffff821161075b57019180601f8401121561075b5782356174248161726f565b936174326040519586617221565b81855260208086019260051b82010192831161075b57602001905b82821061745e575050506101000152565b6020809161746b84617198565b81520191019061744d565b833567ffffffffffffffff811161075b57820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828b03011261075b576040519160e0830183811067ffffffffffffffff8211176171d5576040526174df60208301617198565b83526040820135602084015260608201359267ffffffffffffffff841161075b5760e0836175148d60208098819801016172c1565b60408401526080810135606084015261752f60a08201617262565b608084015261754060c08201617262565b60a0840152013560c0820152815201930192617399565b602060408183019282815284518094520192019060005b81811061757b5750505090565b825173ffffffffffffffffffffffffffffffffffffffff1684526020938401939092019160010161756e565b9181601f8401121561075b5782359167ffffffffffffffff831161075b576020838186019501011161075b57565b60005b8381106175e85750506000910152565b81810151838201526020016175d8565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093617634815180928187528780880191016175d5565b0116010190565b9080602083519182815201916020808360051b8301019401926000915b83831061766757505050505090565b90919293946020806176a3837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0866001960301875289516175f8565b97019301930191939290617658565b6064359067ffffffffffffffff8216820361075b57565b6084359067ffffffffffffffff8216820361075b57565b906020808351928381520192019060005b8181106176fe5750505090565b82517fffffffff00000000000000000000000000000000000000000000000000000000168452602093840193909201916001016176f1565b602081016020825282518091526040820191602060408360051b8301019401926000915b83831061776957505050505090565b90919293946020806177cc837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff8151168452015191818582015201906176e0565b9701930193019193929061775a565b81601f8201121561075b578035906177f28261726f565b926178006040519485617221565b8284526020606081860194028301019181831161075b57602001925b82841061782a575050505090565b60608483031261075b57604051906060820182811067ffffffffffffffff8211176171d55760405261785b85617198565b8252602085013562ffffff8116810361075b57602083015260408501359067ffffffffffffffff8216820361075b57826020926040606095015281520193019261781c565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82011261075b5760043567ffffffffffffffff811161075b576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc828403011261075b576040519161791683617204565b8160040135835261792960248301617198565b6020840152604482013567ffffffffffffffff811161075b5781600461795192850101617308565b6040840152606482013560608401526084820135608084015260a482013560a084015260c482013560c084015260e482013567ffffffffffffffff811161075b578160046179a1928501016177db565b60e08401526101048201359167ffffffffffffffff831161075b576179c992016004016177db565b61010082015290565b67ffffffffffffffff039067ffffffffffffffff82116179ee57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b919082039182116179ee57565b9081602091031261075b575173ffffffffffffffffffffffffffffffffffffffff8116810361075b5790565b9081602091031261075b575190565b610120820160ff82511683526020820151151560208401526040820151906101206040850152815180915261014084019060206101408260051b8701019301916000905b828210617b4b5750505050617ae161010091606084015160608601526080840151608086015260a084015185820360a08701526175f8565b9160c081015160c085015260e081015160e08501520151916101008183039101526020808351928381520192019060005b818110617b1f5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101617b12565b90919293602080827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec08a6001950301855287519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080617bbd604085015160e0604086015260e08501906175f8565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152960192019201909291617aa9565b60409073ffffffffffffffffffffffffffffffffffffffff617c2094931681528160208201520190617a65565b90565b9081606091031261075b57805160ff8116810361075b57916040602083015192015190565b60ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe59116019060ff82116179ee57565b9273ffffffffffffffffffffffffffffffffffffffff617c20959381617cb394168652166020850152608060408501526080840190617a65565b9160608184039101526175f8565b919082018092116179ee57565b604090617c209392815281602082015201906175f8565b906040519160008154918260011c92600181168015617de2575b602085108114617db557848752869392918115617d755750600114617d2e575b50617d2c92500383617221565b565b90506000929192526020600020906000915b818310617d59575050906020617d2c9282010138617d1f565b6020919350806001915483858901015201910190918492617d40565b60209350617d2c9592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b82010138617d1f565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f1693617cff565b9060019160008152617e0782518093602086850191016175d5565b010190565b60409073ffffffffffffffffffffffffffffffffffffffff617c20949316815281602082015201906175f8565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b604090617c20949281528160208201520191617e39565b93919273ffffffffffffffffffffffffffffffffffffffff617c20969481617ecb94168752166020860152608060408601526080850190617a65565b926060818503910152617e39565b91617f0c9073ffffffffffffffffffffffffffffffffffffffff617c2095931684526060602085015260608401906175f8565b9160408184039101526175f8565b90604051918281549182825260208201906000526020600020926000905b80600783011061813457617d2c9454918181106180fe575b8181106180c8575b818110618092575b81811061805c575b818110618026575b818110617ff0575b818110617fbb575b10617f8e575b500383617221565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260200138617f86565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b168152019301617f80565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b168152019301617f78565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b168152019301617f70565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b168152019301617f68565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b168152019301617f60565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b168152019301617f58565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b168152019301617f50565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e0820152019401920185929391617f38565b91908110156181d1576060020190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60208183031261075b5780519067ffffffffffffffff821161075b570181601f8201121561075b576020815191019061823881617287565b926182466040519485617221565b8184528183011161075b57617c209160208401906175d5565b6001809295946007617d2c95602060405199866182858c9851809285808c0191016175d5565b87017f7369676e65723a00000000000000000000000000000000000000000000000000838201526182bf82518093856027850191016175d5565b01017f3a00000000000000000000000000000000000000000000000000000000000000838201526182fa8251809360206008850191016175d5565b01017f3a00000000000000000000000000000000000000000000000000000000000000838201526183358251809360206002850191016175d5565b010103017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101845283617221565b60405190610180820182811067ffffffffffffffff8211176171d5576040526000610160838281528260208201528260408201528260608201528260808201528260a0820152606060c08201528260e082015260606101008201528261012082015260606101408201520152565b80518210156181d15760209160051b010190565b6001919493908280926007617d2c9660206040519a8661840f8d9851809285808c0191016175d5565b87017f7369676e65723a000000000000000000000000000000000000000000000000008382015261844982518093856027850191016175d5565b01017f3a00000000000000000000000000000000000000000000000000000000000000838201526184848251809360206008850191016175d5565b01017f3a00000000000000000000000000000000000000000000000000000000000000838201526184bf8251809360206002850191016175d5565b01017f20000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1810185520183617221565b6001809295946008617d2c956020604051998661853a8c9851809285808c0191016175d5565b87017f207369676e65723a0000000000000000000000000000000000000000000000008382015261857482518093856028850191016175d5565b01017f3a00000000000000000000000000000000000000000000000000000000000000838201526182fa8251809360206009850191016175d5565b60085460ff1680156185be5790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561868957600091618657575b50151590565b90506020813d602011618681575b8161867260209383617221565b8101031261075b575138618651565b3d9150618665565b6040513d6000823e3d90fd5b6186a66003600060ff845116619818565b60ff60409160008084516186ba8682617221565b600c81527f426f756e6420726573756c740000000000000000000000000000000000000000602082015285516187258161097160208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528a602484015260648301906175f8565b51906a636f6e736f6c652e6c6f675afa501680835215618743575050565b6060820161876873ffffffffffffffffffffffffffffffffffffffff60008351619818565b9060008084516187788682617221565b600c81527f426f756e6420726573756c74000000000000000000000000000000000000000060208201528551618815816187e360208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528a602484015260648301906175f8565b886044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282617221565b51906a636f6e736f6c652e6c6f675afa50526080820161883f66ffffffffffffff60008351619818565b90600080845161884f8682617221565b600c81527f426f756e6420726573756c740000000000000000000000000000000000000000602082015285516188ba816187e360208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528a602484015260648301906175f8565b51906a636f6e736f6c652e6c6f675afa505260005b8183019081519081518110156189d557839260c06189ca836189046002846188f98460019a6183d2565b510151600090619818565b93600080896189816189b3825161891b8482617221565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152835192839160208301957fb60e72cc000000000000000000000000000000000000000000000000000000008752602484015260648301906175f8565b8b6044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282617221565b51906a636f6e736f6c652e6c6f675afa50516183d2565b5101520190506188cf565b5050505050565b7ffffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd03641396001618a0892619818565b9060008060406187e3618a20825161891b8482617221565b51906a636f6e736f6c652e6c6f675afa50565b906000618a0892619818565b62ffffff6000618a0892619818565b618a089167ffffffffffffffff91619818565b60208101519091618b259115618b70576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a08152618b1c60c082617221565b519020916199f7565b6040519060208201927f190100000000000000000000000000000000000000000000000000000000000084526022830152604282015260428152618b6a606282617221565b51902090565b4690618a75565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561075b57604051907f98296c54000000000000000000000000000000000000000000000000000000008252600482015260016024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561868957618bef5750565b6000617d2c91617221565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561075b57604051917f98296c5400000000000000000000000000000000000000000000000000000000835260048301526024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561868957618bef5750565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561075b57604051917f7c84c69b00000000000000000000000000000000000000000000000000000000835260048301526024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561868957618bef5750565b73ffffffffffffffffffffffffffffffffffffffff8116600181101580618d9c575b8015618d88575b8015618d6b575b8015618d61575b15618d5d5773ffffffffffffffffffffffffffffffffffffffff91506040516020810191825260208152618d54604082617221565b51902016618ce8565b5090565b50813b1515618d1f565b50734e59b44847b379578588920ca78fbf26c0b4956c8114618d18565b506a636f6e736f6c652e6c6f678114618d11565b5060ff811115618d0a565b618db081618f93565b600090803b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15612cdb57604051907f4c63e5620000000000000000000000000000000000000000000000000000000082521560048201528281602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156150db57618f6b575b5073ffffffffffffffffffffffffffffffffffffffff16737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115f3576040517f4c63e5620000000000000000000000000000000000000000000000000000000081526a636f6e736f6c652e6c6f6782141560048201528281602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156150db57908391618f56575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115f357734e59b44847b379578588920ca78fbf26c0b4956c604051917f4c63e562000000000000000000000000000000000000000000000000000000008352141560048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156106be57618f44575050565b618f4f828092617221565b61018a5750565b81618f6091617221565b6115f3578138618eba565b91618f8c8173ffffffffffffffffffffffffffffffffffffffff9394617221565b9190618e24565b73ffffffffffffffffffffffffffffffffffffffff16600060018210801561940e575b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115f357604051907f4c63e562000000000000000000000000000000000000000000000000000000008252151560048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156106be576193fe575b5090600a461480156193f3575b156190ea5773420000000000000000000000000000000000000081109081156190cc575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115f357604051907f4c63e562000000000000000000000000000000000000000000000000000000008252151560048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156106be57618f44575b5050565b73420000000000000000000000000000000000080091501138619057565b61a4b1461480156193e7575b15619185576064811090811561917a5750737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115f357604051907f4c63e562000000000000000000000000000000000000000000000000000000008252151560048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156106be57618f44575050565b606891501138619057565b61a86a461480156193dc575b619199575050565b730100000000000000000000000000000000000000811080156193bf575b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15612cdb57604051907f4c63e562000000000000000000000000000000000000000000000000000000008252151560048201528281602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156150db579083916193aa575b50507302000000000000000000000000000000000000008110801561938d575b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15612cdb57604051907f4c63e562000000000000000000000000000000000000000000000000000000008252151560048201528281602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156150db57908391619378575b5050730300000000000000000000000000000000000000811090811561935a575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115f357604051907f4c63e562000000000000000000000000000000000000000000000000000000008252151560048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156106be57156190c857618f4f828092617221565b7303000000000000000000000000000000000000ff915011386192de565b8161938291617221565b6115f35781386192bd565b507302000000000000000000000000000000000000ff811161924a565b816193b491617221565b6115f357813861922a565b507301000000000000000000000000000000000000ff81116191b7565b5061a8694614619191565b5062066eed46146190f6565b506101a44614619033565b8161940891617221565b38619026565b5060ff8211618fb6565b90617d2c6002602b60405180957f7b226c6561766573223a22000000000000000000000000000000000000000000602083015261945e81518092602086860191016175d5565b81017f227d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2810185520183617221565b60006194e36194c3604093619418565b619547613cc9737109709ecfa91a80626ff3989d68f67f5b1dd12d61a2b4565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152601783527f7265636f766572795f6861736846726f6d4c6561766573000000000000000000602084015201604486015201906175f8565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811561868957600091619589575b506020815191818082019384920101031261075b575190565b61959e91503d806000833e610fd68183617221565b38619570565b73ffffffffffffffffffffffffffffffffffffffff604051927f56ca623e000000000000000000000000000000000000000000000000000000008452166004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215618689576040926000926197149284926197b9575b506002600c6196f492602b88519586927f7b226c6561766573223a22000000000000000000000000000000000000000000602085015261966481518092602086880191016175d5565b83017f222c227369676e6572223a2200000000000000000000000000000000000000008382015261969f8251809360206037850191016175d5565b01017f227d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2810184520182617221565b619778613cc9737109709ecfa91a80626ff3989d68f67f5b1dd12d61a2b4565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152600d83527f7265636f766572795f7472696d00000000000000000000000000000000000000602084015201604486015201906175f8565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115618689576000916197a4575090565b617c2091503d806000833e610fd68183617221565b6196f4919250600c6197d66002923d8089833e610fd68183617221565b9392505061961b565b81156197e9570690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000908383116199735782811091821580619969575b6199615761983c8486617a1d565b92600184018094116179ee57600383111580619958575b619949577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8310158061993f575b61992e57858311156198e55750509061989d846198a293617a1d565b6197df565b9081156198e0576198b39250617cc1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081116179ee5790565b505090565b9594929190956198f6575b50505050565b8394955061989d906199089394617a1d565b9081156198e0576199199250617a1d565b600181018091116179ee5790388080806198f0565b50509050617c209291501990617a1d565b5082198411619881565b5050919050617c209250617cc1565b50828411619853565b509250505090565b508482111561982e565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374645574696c7320626f756e642875696e743235362c75696e743235362c7560448201527f696e74323536293a204d6178206973206c657373207468616e206d696e2e00006064820152fd5b61010081015160405160208101818193602081519391019260005b818110619d81575050619a4c9250037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282617221565b5190209060ff8151168015600014619c54575090604082015192835191619a8b619a758461726f565b93619a836040519586617221565b80855261726f565b937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe060208501950136863760005b8651811015619b8b5780619acf600192896183d2565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152619b7761012082617221565b519020619b8482886183d2565b5201619ab9565b5092919450926040519081602081019182945192909260005b818110619c3b575050619bde9250037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282617221565b51902091608060608301519201516040519260208401947f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a2865260408501526060840152608083015260a082015260a08152618b6a60c082617221565b8451835260209485019486945090920191600101619ba4565b60018103619cae575060a0015160208151910120906040519060208201927fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46684526040830152606082015260608152618b6a608082617221565b60028103619d01575060c00151906040519060208201927f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e484526040830152606082015260608152618b6a608082617221565b60038103619d54575060e00151906040519060208201927fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46684526040830152606082015260608152618b6a608082617221565b7f048183200000000000000000000000000000000000000000000000000000000060005260045260246000fd5b845173ffffffffffffffffffffffffffffffffffffffff16835260209485019486945090920191600101619a12565b6040517fc1978d1f00000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5345515f53444b5f5250435f4d494e5f504f52540000000000000000000000006044820152602081606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156186895760009161a282575b50604051907fc1978d1f00000000000000000000000000000000000000000000000000000000825260206004830152601460248301527f5345515f53444b5f5250435f4d41585f504f52540000000000000000000000006044830152602082606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156186895760009261a24e575b5080821061a1f0577fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a654801561a19e575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146179ee57816001619f47920193847fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a655617a1d565b91600183018093116179ee57619f6692619f60916197df565b90617cc1565b604051907ff877cb1900000000000000000000000000000000000000000000000000000000825260206004830152601660248301527f5345515f53444b5f5250435f55524c5f505245464958000000000000000000006044830152600082606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156186895760009261a181575b50604051917ff877cb1900000000000000000000000000000000000000000000000000000000835260206004840152601660248401527f5345515f53444b5f5250435f55524c5f535546464958000000000000000000006044840152600083606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9283156186895760009361a164575b50604051917f6900a3ae0000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156186895760009261a142575b506020617c20929361a11582604051968561a0f2899751809285808b0191016175d5565b860161a106825180938580850191016175d5565b010191828151948592016175d5565b01037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282617221565b617c20925061a15d6020913d806000833e610fd68183617221565b925061a0ce565b61a17a9193503d806000833e610fd68183617221565b913861a075565b61a1979192503d806000833e610fd68183617221565b9038619fed565b506040516020810190366000833761a1e860208236810160008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282617221565b519020619eef565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e76616c696420706f72742072616e676500000000000000000000000000006044820152fd5b90916020823d60201161a27a575b8161a26960209383617221565b8101031261018a5750519038619ebe565b3d915061a25c565b906020823d60201161a2ac575b8161a29c60209383617221565b8101031261018a57505138619e36565b3d915061a28f565b73ffffffffffffffffffffffffffffffffffffffff166040517fc1978d1f00000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5345515f53444b5f5250435f4d494e5f504f52540000000000000000000000006044820152602081606481855afa9081156186895760009161a662575b50604051907fc1978d1f00000000000000000000000000000000000000000000000000000000825260206004830152601460248301527f5345515f53444b5f5250435f4d41585f504f52540000000000000000000000006044830152602082606481865afa9182156186895760009261a62e575b5080821061a1f0577fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a654801561a5dc575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146179ee5781600161a439920193847fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a655617a1d565b91600183018093116179ee5761a45292619f60916197df565b906040517ff877cb1900000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5345515f53444b5f5250435f55524c5f505245464958000000000000000000006044820152600081606481855afa9081156186895760009161a5c1575b50604051927ff877cb1900000000000000000000000000000000000000000000000000000000845260206004850152601660248501527f5345515f53444b5f5250435f55524c5f535546464958000000000000000000006044850152600084606481865afa9384156186895760009461a5a2575b506000906024604051809581937f6900a3ae00000000000000000000000000000000000000000000000000000000835260048301525afa9182156186895760009261a14257506020617c20929361a11582604051968561a0f2899751809285808b0191016175d5565b600091945061a5ba903d8084833e610fd68183617221565b939061a539565b61a5d691503d806000833e610fd68183617221565b3861a4c5565b506040516020810190366000833761a62660208236810160008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282617221565b51902061a3e1565b90916020823d60201161a65a575b8161a64960209383617221565b8101031261018a575051903861a3b0565b3d915061a63c565b906020823d60201161a68c575b8161a67c60209383617221565b8101031261018a5750513861a33c565b3d915061a66f56fe608080604052346015576119a3908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c80630e159f80146100875780636be6b60e14610082578063898bd9211461007d578063b00c848414610078578063b05f87db14610073578063d834bcbf1461006e5763ec08af331461006957600080fd5b6106dc565b610628565b61036c565b610301565b61023c565b6101c6565b3461012c5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012c576100be610131565b6101156100c9610154565b73ffffffffffffffffffffffffffffffffffffffff6044359316600052600060205260406000209073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b906000526020526020604060002054604051908152f35b600080fd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361012c57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361012c57565b359073ffffffffffffffffffffffffffffffffffffffff8216820361012c57565b9181601f8401121561012c5782359167ffffffffffffffff831161012c576020838186019501011161012c57565b3461012c5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012c576101fd610131565b60443560243567ffffffffffffffff821161012c5760409261022661022e933690600401610198565b9290916110b5565b825191151582526020820152f35b3461012c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012c5760043560243567ffffffffffffffff811161012c57610291610299913690600401610198565b9083336110b5565b90156102aa57602090604051908152f35b507f904689fc0000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff331660045260245260446000fd5b908161012091031261012c5790565b3461012c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012c57610338610131565b60243567ffffffffffffffff811161012c5760209161035e6103649236906004016102f2565b90610b05565b604051908152f35b3461012c5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012c576103a3610131565b6103ab610154565b60443567ffffffffffffffff811161012c576103cb9036906004016102f2565b60643567ffffffffffffffff811161012c576103eb903690600401610198565b906103f982828587896114f2565b156105a15750508261040f610414923690610a39565b61166c565b9061047b8261046c836104478773ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b90600052602052604060002090565b546105525761054d7faeb5575092e25ccd826d5de3515c096028bb338c1f304db40dc831c3746ee0ae93426104d88561046c866104478673ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b556105108461050b856104478573ffffffffffffffffffffffffffffffffffffffff166000526001602052604060002090565b610ff8565b6040519384934292859094939273ffffffffffffffffffffffffffffffffffffffff60609381608085019816845216602083015260408201520152565b0390a1005b7f654c8bbf0000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff9283166004529190911660245260445260646000fd5b6040517f44b7a4050000000000000000000000000000000000000000000000000000000081529485946105d8949160048701610eb7565b0390fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80548210156106235760005260206000200190600090565b6105dc565b3461012c5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012c5761065f610131565b6106b661066a610154565b73ffffffffffffffffffffffffffffffffffffffff6044359316600052600160205260406000209073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b90815481101561012c576106c99161060b565b905460405160039290921b1c8152602090f35b3461012c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012c576020610768610718610131565b73ffffffffffffffffffffffffffffffffffffffff610735610154565b91166000526001835260406000209073ffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b54604051908152f35b8015150361012c57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176107eb57604052565b61077b565b604051906107ff60e0836107aa565b565b604051906107ff610120836107aa565b359060ff8216820361012c57565b35906107ff82610771565b67ffffffffffffffff81116107eb5760051b60200190565b81601f8201121561012c5780359067ffffffffffffffff82116107eb576040519261089560207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f86011601856107aa565b8284526020838301011161012c57816000926020809301838601378301015290565b81601f8201121561012c578035906108ce8261082a565b926108dc60405194856107aa565b82845260208085019360051b8301019181831161012c5760208101935b83851061090857505050505090565b843567ffffffffffffffff811161012c57820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828603011261012c5761094f6107f0565b9161095c60208301610177565b83526040820135602084015260608201359267ffffffffffffffff841161012c5760e083610991886020809881980101610842565b6040840152608081013560608401526109ac60a0820161081f565b60808401526109bd60c0820161081f565b60a0840152013560c08201528152019401936108f9565b9080601f8301121561012c5781356109eb8161082a565b926109f960405194856107aa565b81845260208085019260051b82010192831161012c57602001905b828210610a215750505090565b60208091610a2e84610177565b815201910190610a14565b9190916101208184031261012c57610a4f610801565b92610a5982610811565b8452610a676020830161081f565b6020850152604082013567ffffffffffffffff811161012c5781610a8c9184016108b7565b6040850152606082013560608501526080820135608085015260a082013567ffffffffffffffff811161012c5781610ac5918401610842565b60a085015260c082013560c085015260e082013560e085015261010082013567ffffffffffffffff811161012c57610afd92016109d4565b610100830152565b610c4e610be0610bdb610c22936020860135610b2081610771565b15610c54576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527fd50a220b5983c5d6e86926072ffa8a3197ae49602ffc9dd0e60d62d561a2e1d560408501527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606085015260808401521660a082015260a08152610bd060c0826107aa565b519020943690610a39565b6112bc565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826107aa565b51902090565b4690610b29565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561012c57016020813591019167ffffffffffffffff821161012c578160051b3603831361012c57565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561012c57016020813591019167ffffffffffffffff821161012c57813603831361012c57565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b90602083828152019160208260051b8501019381936000915b848310610d665750505050505090565b9091929394957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08282030183528635907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff218636030182121561012c576020809187600194019073ffffffffffffffffffffffffffffffffffffffff610dea83610177565b168152828201358382015260c080610e19610e086040860186610cae565b60e0604087015260e0860191610cfe565b93606081013560608501526080810135610e3281610771565b15156080850152610e5360a0820135610e4a81610771565b151560a0860152565b01359101529801930193019194939290610d56565b9160209082815201919060005b818110610e825750505090565b90919260208060019273ffffffffffffffffffffffffffffffffffffffff610ea988610177565b168152019401929101610e75565b93919273ffffffffffffffffffffffffffffffffffffffff610ff5969481610fe79416875216602086015260806040860152610f0060808601610ef983610811565b60ff169052565b610f18610f0f6020830161081f565b151560a0870152565b610fb6610f94610f41610f2e6040850185610c5b565b61012060c08b01526101a08a0191610d3d565b606084013560e08901526080840135610100890152610f6360a0850185610cae565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808a8403016101208b0152610cfe565b9160c081013561014088015260e0810135610160880152610100810190610c5b565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8087840301610180880152610e68565b926060818503910152610cfe565b90565b8054680100000000000000008110156107eb5761101a9160018201815561060b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff829392549160031b92831b921b1916179055565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9190820391821161108b57565b61104f565b9190820180921161108b57565b9093929384831161012c57841161012c578101920390565b600094938593929091845b8381106110d05750505050509190565b8481013560f81c97959060019081019081908a146111ae5750600389146111825760048914611128577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b6003810198506111579061114f906111469088013560e81c8b611090565b809a878961109d565b9085856110b5565b906111749290811561117a575b5096600052602052604060002090565b966110c0565b905038611164565b9597509480850135906020019780156111a8579061117491600052602052604060002090565b50611174565b67ffffffffffffffff9950919691868101803560601c9250601481013560e81c9160179091013560c01c90601f019a16916112118661046c836104478973ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b5482811515918261126d575b82611258575b505061124f575b906112359291611740565b9080156111a8579061117491600052602052604060002090565b6001985061122a565b6112649192504261107e565b10158238611223565b85811015925061121d565b805160209091019060005b8181106112905750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101611283565b6101008101516040516112d781610c22602082018095611278565b519020906112e6815160ff1690565b60ff81168061135f57505090610c4e61130260408401516117f2565b92610c2260806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b600181036113bd57505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46693810193845290810191909152606081019290925290610c4e8160808101610c22565b6002810361141357505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e460208201908152918101929092526060820192909252610c4e8160808101610c22565b600303611467575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46660208201908152918101929092526060820192909252610c4e8160808101610c22565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b6040513d6000823e3d90fd5b9081602091031261012c57517fffffffff000000000000000000000000000000000000000000000000000000008116810361012c5790565b604090610ff5949281528160208201520191610cfe565b916114ff91939492610b05565b91604082146115fc575b803b6115185750505050600090565b61156a9373ffffffffffffffffffffffffffffffffffffffff602094604051968795869485937f1626ba7e000000000000000000000000000000000000000000000000000000008552600485016114db565b0392165afa9081156115f7577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000916000916115c8575b50161490565b6115ea915060203d6020116115f0575b6115e281836107aa565b8101906114a3565b386115c2565b503d6115d8565b611497565b6020600061163361160c8761192d565b50604080518a815260ff909216602083015281019290925260608201529081906080820190565b838052039060015afa156115f75760005173ffffffffffffffffffffffffffffffffffffffff8083169116036115095750505050600190565b90610c4e610be0610c229260208501511515600014611739576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a0815261173060c0826107aa565b519020936112bc565b4690611689565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e6365207265636f76657279206c6561663a0a0000000000000000865260601b166038840152604c830152606c820152606c8152610c4e608c826107aa565b80518210156106235760209160051b010190565b805160209091019060005b8181106117dc5750505090565b82518452602093840193909201916001016117cf565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06118386118228361082a565b9261183060405194856107aa565b80845261082a565b0136602083013760005b83518110156119145780611858600192866117b0565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152611900610120826107aa565b51902061190d82856117b0565b5201611842565b50909150604051610c4e81610c226020820180956117c4565b9060208235920135906040601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff811161108b579156fea26469706673582212207e36076184ab9ba511c3d3d434c19aa7294085f57cd2eba64cfe56f92819afe164736f6c634300081c0033a2646970667358221220d38bd2b403fbe73620bb36388f854c5352c5961b61ca4eaaed3346d84f2e1f5964736f6c634300081c0033","sourceMap":"706:19784:77:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1065:26:16;706:19784:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;9752:43;9670:26;9752:43;706:19784;9645:8;;;;:::i;:::-;9670:26;:::i;:::-;9723:7;;;;:::i;:::-;706:19784;;9752:43;;;706:19784;9752:43;;;:::i;:::-;;;;;;;;;:::i;:::-;336:42:2;9801:20:77;;;;706:19784;;;9801:20;2024:14:2;9801:20:77;;706:19784;;9801:20;;706:19784;9801:20;;706:19784;9801:20;;336:42:2;9801:20:77;;;;;;;;;;;706:19784;9831:36;;2024:14:2;9831:36:77;9827:83;;706:19784;;9946:8;2024:14:2;;;706:19784:77;;;;9946:47;;2024:14:2;9946:47:77;;;;;;;706:19784;9946:47;;;:::i;:::-;;;;;;;;;;;;;;706:19784;;10034:91;706:19784;;10034:91;706:19784;;;10034:91;;;2024:14:2;706:19784:77;10034:91;;;706:19784;10034:91;;;:::i;:::-;;9752:43;10034:91;;;;;;:::i;:::-;706:19784;;;;;;10133:26;;706:19784;;10133:26;;;706:19784;10133:26;;:::i;:::-;336:42:2;10000:165:77;;;;;706:19784;;;;;10000:165;;;;;2024:14:2;10000:165:77;;;706:19784;10000:165;;;:::i;:::-;;;;336:42:2;10000:165:77;;;;;;;;;;;706:19784;10171:29;;336:42:2;10171:29:77;;;;706:19784;10171:29;706:19784;;;10171:29;;;;2024:14:2;10171:29:77;;;706:19784;10171:29;;;:::i;:::-;;;;336:42:2;10171:29:77;;;;;;;;;;;706:19784;;;;;10246:34;706:19784;10223:98;;;;;;;;;;;706:19784;10223:98;;;:::i;:::-;336:42:2;10207:115:77;;;;706:19784;2024:14:2;706:19784:77;;;10207:115;;;;2024:14:2;10207:115:77;;706:19784;;10207:115;;2024:14:2;706:19784:77;2024:14:2;;;;:::i;:::-;10207:115:77;;;336:42:2;10207:115:77;;;;;;;;;;;706:19784;2024:14:2;;706:19784:77;9946:8;2024:14:2;;;706:19784:77;10328:61;;;;;;706:19784;;10328:61;706:19784;;;;10328:61;;;;;;;2024:14:2;10328:61:77;;706:19784;10328:61;;;:::i;:::-;;;;;;;;;;;706:19784;;10328:61;;;;;:::i;:::-;706:19784;;10328:61;706:19784;10328:61;706:19784;;;;;;;;;10328:61;706:19784;;;10207:115;;;;;:::i;:::-;706:19784;;10207:115;;;;706:19784;;;;10207:115;706:19784;;;;;;;;;10171:29;;;;;:::i;:::-;706:19784;;10171:29;;;;10000:165;;;;;:::i;:::-;706:19784;;10000:165;;;;;706:19784;;;;;;;;;10000:165;706:19784;;;9946:47;;;;706:19784;9946:47;;706:19784;9946:47;;;;;;2024:14:2;9946:47:77;;;:::i;:::-;;;2024:14:2;;;;;;;;-1:-1:-1;10034:91:77;9946:47;;2024:14:2;-1:-1:-1;706:19784:77;;9946:47;;;-1:-1:-1;9946:47:77;;;706:19784;;;;;;;;;9827:83;9877:26;;9827:83;;9801:20;;;;;:::i;:::-;706:19784;;9801:20;;;;;706:19784;;;;;;;;;9801:20;706:19784;;;;;;;;;;;;;;;;;;;;;;;;;;;;2723:18:9;706:19784:77;;;;;;;2723:18:9;706:19784:77;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;744:27;706:19784;;;;;;;;;;;;;;;;;;:::i;:::-;;14736:14;;;;;;:::i;:::-;14789:16;;;706:19784;2933:19:15;706:19784:77;14807:1;706:19784;;2933:19:15;:::i;:::-;706:19784:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;9786:54:15;;706:19784:77;;9786:54:15;;;;;;;;;;706:19784:77;;;;;;:::i;:::-;;;;;2024:14:2;9786:54:15;;;;;;;;:::i;:::-;706:19784:77;9371:159:15;679:42;9371:159;;;706:19784:77;;;;14876:19;;;706:19784;14807:1;2024:14:2;;;;;;;706:19784:77;14870:66;;;;:::i;:::-;706:19784;14876:19;;;706:19784;;14977:52;14983:24;;;706:19784;14977:52;:::i;:::-;706:19784;14983:24;;;706:19784;15069:17;;;706:19784;;15063:64;706:19784;;15091:35;706:19784;;15091:35;:::i;:::-;15063:64;;:::i;:::-;706:19784;;;;;;336:42:2;15135:25:77;;;;706:19784;;15135:25;2024:14:2;15135:25:77;;706:19784;15135:25;;2024:14:2;15135:25:77;;9786:54:15;15135:25:77;;336:42:2;15135:25:77;;;;;;;;706:19784;;;294:80:98;706:19784:77;;294:80:98;:::i;:::-;706:19784:77;;;;:::i;:::-;;15304:8;2024:14:2;;;706:19784:77;15333:13;;706:19784;15333:13;;706:19784;15304:59;706:19784;;;;;15348:14;;706:19784;;;15304:59;;;;;2024:14:2;15304:59:77;;706:19784;15304:59;;;:::i;:::-;;;;;;;;;;;;;;;706:19784;;;;15388:46;15404:14;;706:19784;;;;15388:46;;:::i;:::-;15369:16;706:19784;15369:16;;706:19784;;;;;;;;;;15467:50;2024:14:2;15467:50:77;;706:19784;15467:50;;2024:14:2;9786:54:15;2024:14:2;;;14789:16:77;15467:50;706:19784;15467:50;336:42:2;15467:50:77;;;;;;;706:19784;;;15467:50;;;706:19784;15449:6;15560:11;706:19784;2024:14:2;15449:6:77;14789:16;15449:6;;15457;15069:17;15457:6;;706:19784;;;;;;15441:6;;;;706:19784;15560:11;:::i;:::-;706:19784;2024:14:2;;706:19784:77;;15551:47;15524:16;;14876:19;15524:16;;706:19784;;;;;15622:42;706:19784;15622:42;;2024:14:2;;;;;15622:42:77;;;;14789:16;15622:42;;:::i;:::-;14983:24;15605:14;;:59;;;706:19784;;;;;15689:24;2024:14:2;15689:24:77;;706:19784;15689:24;;2024:14:2;706:19784:77;15689:24;9786:54:15;15689:24:77;336:42:2;15689:24:77;;;;;;;;;;;706:19784;15671:15;706:19784;;15671:15;;706:19784;;;;;;;;;;15774:14;;15790;;15720:85;;;;;;706:19784;;;15720:85;706:19784;;15720:85;;;;;;;2024:14:2;15720:85:77;;706:19784;15720:85;;;:::i;:::-;;;;;;;;;;;;;;706:19784;-1:-1:-1;;15304:8:77;2024:14:2;706:19784:77;;;;;;;;2024:14:2;15820:84:77;;706:19784;;;;;15820:84;;706:19784;;;;2024:14:2;;;706:19784:77;2024:14:2;;;;706:19784:77;;;;;2024:14:2;;706:19784:77;;2024:14:2;;706:19784:77;15820:84;;;;;;;;;;;706:19784;;;15906:16;15938:36;706:19784;;;;15906:16;;:::i;:::-;706:19784;;;15938:36;;:::i;:::-;336:42:2;15930:45:77;;;;706:19784;;15930:45;2024:14:2;15930:45:77;;706:19784;15930:45;;2024:14:2;15930:45:77;;9786:54:15;15930:45:77;;336:42:2;15930:45:77;;;;;;;;706:19784;15982:10;;;;;706:19784;;;;;;;;;:::i;:::-;;;;;;16008:13;16051:3;16027:15;706:19784;16027:15;;;706:19784;;16023:26;;;;;706:19784;16151:18;16100:10;;;16151:18;;:::i;:::-;;706:19784;;;;16139:38;2024:14:2;16139:38:77;;706:19784;16139:38;;706:19784;16139:38;;9786:54:15;16139:38:77;336:42:2;16139:38:77;;;;;;;;;;;16051:3;16027:15;706:19784;16027:15;16212:18;16027:15;706:19784;16027:15;;16212;:18;:::i;:::-;;:36;706:19784;;;;;16200:49;2024:14:2;16200:49:77;;706:19784;16200:49;;706:19784;16200:49;;9786:54:15;16200:49:77;336:42:2;16200:49:77;;;;;;;;;;;;;;;16051:3;16027:15;706:19784;16027:15;;706:19784;16284:18;16027:15;;16284;:18;:::i;:::-;;:31;706:19784;;;;16272:44;2024:14:2;16272:44:77;;706:19784;16272:44;;706:19784;16272:44;;9786:54:15;16272:44:77;336:42:2;16272:44:77;;;;;;;;14807:1;16272:44;;;;;16077:260;16272:44;;;;;16051:3;16077:260;;;:::i;:::-;16064:273;;706:19784;16008:13;;16272:44;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;706:19784;;;;;;;;;;16200:49;16284:18;16200:49;;;;706:19784;16200:49;706:19784;16200:49;;;;;;;;;;;:::i;:::-;;;;;;;;;;706:19784;;;;;;;;;16139:38;;;;;;;;;;;;;:::i;:::-;;;;;706:19784;;;;;;;;;16023:26;;;;;;;;;16383:10;;706:19784;;;;;;16418:28;2024:14:2;16418:28:77;;706:19784;16418:28;;706:19784;16418:28;;9786:54:15;16418:28:77;336:42:2;16418:28:77;;;;;;;;;;;16003:341;14983:24;;;;706:19784;;;;16465:37;2024:14:2;16465:37:77;;706:19784;16465:37;;2024:14:2;16465:37:77;;9786:54:15;16465:37:77;336:42:2;16465:37:77;;;;;;;;;;;16003:341;14876:19;;;;706:19784;;;;16521:32;2024:14:2;16521:32:77;;706:19784;16521:32;;2024:14:2;16521:32:77;;9786:54:15;16521:32:77;336:42:2;16521:32:77;;;;;;;;;;16362:197;16521:32;;;;;;;;16003:341;16362:197;;;;;;:::i;:::-;16349:210;;15982:10;16570:13;16589:15;;16565:329;16613:3;16589:15;;;706:19784;;16585:26;;;;;706:19784;16714:18;16662:10;;;16714:18;;:::i;:::-;;706:19784;;;;16702:38;2024:14:2;16702:38:77;;706:19784;16702:38;;706:19784;16702:38;;9786:54:15;16702:38:77;336:42:2;16702:38:77;;;;;;;;;;;16613:3;16775:15;706:19784;16775:15;:18;:15;;;:18;:::i;:::-;;:36;706:19784;;;;;16763:49;2024:14:2;16763:49:77;;706:19784;16763:49;;706:19784;16763:49;;9786:54:15;16763:49:77;336:42:2;16763:49:77;;;;;;;;;;;16613:3;16847:15;706:19784;16847:15;:18;:15;;;:18;:::i;:::-;;:31;706:19784;;;;16835:44;2024:14:2;16835:44:77;;706:19784;16835:44;;706:19784;16835:44;;9786:54:15;16835:44:77;336:42:2;16835:44:77;;;;;;;;14807:1;16835:44;;;;;16639:248;16835:44;;;;;16613:3;16639:248;;;:::i;:::-;16626:261;;706:19784;16570:13;;16835:44;;;;;;;;;;;;;;:::i;:::-;;;;;;16763:49;;;;;;;;;;;;;;:::i;:::-;;;;;16702:38;;;;;;;;;;;;;:::i;:::-;;;;16585:26;;;;;;16899:12;16914:59;16585:26;;;706:19784;16585:26;16945:10;706:19784;;;16914:59;;:::i;:::-;16899:12;;:74;;;706:19784;;;;;336:42:2;16980:23:77;;;;706:19784;;16980:23;2024:14:2;16980:23:77;;706:19784;16980:23;;706:19784;16980:23;;9786:54:15;16980:23:77;;336:42:2;16980:23:77;;;;;;;;16565:329;-1:-1:-1;;706:19784:77;;;;;17048:31;17025:88;;;;706:19784;;;;9786:54:15;17025:88:77;;706:19784;;;;2024:14:2;706:19784:77;17025:88;706:19784;;;;17025:88;706:19784;17025:88;17009:105;336:42:2;17009:105:77;;;;706:19784;2024:14:2;706:19784:77;;;17009:105;;;;2024:14:2;17009:105:77;;;706:19784;17009:105;;2024:14:2;9786:54:15;2024:14:2;;;;:::i;:::-;17009:105:77;;;336:42:2;17009:105:77;;;;;;;;;;;;;16565:329;2024:14:2;17120:71:77;2024:14:2;;706:19784:77;15304:8;2024:14:2;;;706:19784:77;;;17178:12;;706:19784;;;17120:71;;;;;;2024:14:2;17120:71:77;;706:19784;17120:71;;;:::i;:::-;;;;;;;;;;;;;706:19784;;;17120:71;;;;;;-1:-1:-1;17120:71:77;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;706:19784;;;17120:71;;;;;;706:19784;;;;;;;;17009:105;;;;;;;;;:::i;:::-;706:19784;;17009:105;;;;;;706:19784;;;;17009:105;706:19784;;;;;;;;;;;16980:23;;;;;:::i;:::-;706:19784;;16980:23;;;;;706:19784;;;;;;;;;16980:23;706:19784;;;16521:32;;;;;;;;;;;;;;:::i;:::-;;;;;;;706:19784;;;;;;;;;;16465:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;706:19784;;;;;;;;;16418:28;;;;;;;;;;;;;:::i;:::-;;;;;706:19784;;;;;;;;;15930:45;;;;;:::i;:::-;706:19784;;15930:45;;;;;706:19784;;;;;;;;;15820:84;;;;706:19784;15820:84;;706:19784;15820:84;;;;;;2024:14:2;15820:84:77;;;:::i;:::-;;;2024:14:2;;;;;;;;-1:-1:-1;15906:16:77;15820:84;;;;;-1:-1:-1;15820:84:77;;;706:19784;;;;;;;;;15720:85;;;;;:::i;:::-;706:19784;;15720:85;;;;15689:24;;;;;706:19784;15689:24;706:19784;15689:24;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;706:19784;;;;;;;;;15467:50;15560:11;15467:50;;706:19784;15467:50;;2024:14:2;15467:50:77;;;;14789:16;15467:50;14789:16;15467:50;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;-1:-1:-1;15467:50:77;;-1:-1:-1;15467:50:77;;;;;;;;706:19784;;;;;;;;;15304:59;;;;706:19784;15304:59;;706:19784;15304:59;;;;;;2024:14:2;15304:59:77;;;:::i;:::-;;;2024:14:2;;;;;;;15304:59:77;;;;;;-1:-1:-1;15304:59:77;;15135:25;;;;;:::i;:::-;706:19784;;15135:25;;;;2024:14:2;9786:54:15;706:19784:77;;;;;;;;;;;;;;;;:::i;:::-;;12099:14;;;;;;;:::i;:::-;12145:16;;;706:19784;2933:19:15;706:19784:77;12163:1;706:19784;;2933:19:15;:::i;:::-;706:19784:77;;;;;;;;;;;:::i;:::-;;;;;;;;;;;9786:54:15;;706:19784:77;;9786:54:15;;;;;;;;;;706:19784:77;;;;;;:::i;9786:54:15:-;706:19784:77;9371:159:15;679:42;9371:159;;;706:19784:77;;12249:52;12255:24;;;706:19784;12249:52;:::i;:::-;12255:24;;;706:19784;12329:47;12335:19;;;706:19784;;;12329:47;;:::i;:::-;12335:19;;;706:19784;12255:24;;;;706:19784;;12406:44;;:90;706:19784;;;12406:90;706:19784;12406:90;;12523:57;12529:17;;;706:19784;;;12523:57;:::i;:::-;706:19784;;;336:42:2;12586:25:77;;;;706:19784;;12586:25;2024:14:2;12586:25:77;;706:19784;12586:25;;2024:14:2;12586:25:77;;9786:54:15;12586:25:77;;336:42:2;12586:25:77;;;;;;;;12406:90;706:19784;;294:80:98;706:19784:77;;294:80:98;:::i;:::-;706:19784:77;;;;;:::i;:::-;2024:14:2;706:19784:77;12755:8;2024:14:2;;;706:19784:77;12755:59;706:19784;;12784:13;;;706:19784;;12799:14;;706:19784;;;12755:59;;;;;2024:14:2;12755:59:77;;706:19784;12755:59;;;:::i;:::-;;;;;;;;;;;;;;;12406:90;706:19784;;;12839:46;12855:14;;706:19784;;12784:13;;706:19784;;12839:46;;:::i;:::-;706:19784;12820:16;;706:19784;;;;;;;;12918:50;2024:14:2;12918:50:77;;706:19784;12918:50;;2024:14:2;9786:54:15;2024:14:2;;;12145:16:77;12918:50;706:19784;12918:50;336:42:2;12918:50:77;;;;;;;706:19784;;;12918:50;;;12406:90;12900:6;13011:11;706:19784;2024:14:2;12900:6:77;12145:16;12900:6;;12908;12529:17;12908:6;;706:19784;;;;;;12892:6;;;;706:19784;13011:11;:::i;:::-;706:19784;2024:14:2;;706:19784:77;;13002:47;12975:16;;12335:19;12975:16;;706:19784;;;;;13073:42;706:19784;13073:42;;2024:14:2;;;;;13073:42:77;;;;12145:16;13073:42;;:::i;:::-;12255:24;13056:14;;:59;;;706:19784;;;;;13140:24;2024:14:2;13140:24:77;;706:19784;13140:24;;2024:14:2;706:19784:77;13140:24;9786:54:15;13140:24:77;336:42:2;13140:24:77;;;;;;;;;;;12406:90;13122:15;706:19784;;13122:15;;706:19784;;;;;;;;12784:13;;706:19784;;13225:14;;13241;;13171:85;;;;;;706:19784;;;13171:85;706:19784;;13171:85;;;;;;;2024:14:2;13171:85:77;;706:19784;13171:85;;;:::i;:::-;;;;;;;;;;;;;;12406:90;706:19784;;13271:35;706:19784;;13271:15;:35;:::i;:::-;336:42:2;13263:44:77;;;;706:19784;;13263:44;2024:14:2;13263:44:77;;706:19784;13263:44;;2024:14:2;13263:44:77;;9786:54:15;13263:44:77;;336:42:2;13263:44:77;;;;;;;;12406:90;706:19784;;;;;;;;;:::i;:::-;;;;13314:10;;;706:19784;13340:13;13383:3;706:19784;13359:15;;;706:19784;;13355:26;;;;;706:19784;13483:18;13314:10;;;;13432;13483:18;;:::i;:::-;;706:19784;;;;13471:38;2024:14:2;13471:38:77;;706:19784;13471:38;;706:19784;13471:38;;9786:54:15;13471:38:77;336:42:2;13471:38:77;;;;;;;;;;;13383:3;13359:15;706:19784;13359:15;13544:18;13359:15;706:19784;13359:15;;13544;:18;:::i;:::-;;:36;706:19784;;;;;13532:49;2024:14:2;13532:49:77;;706:19784;13532:49;;706:19784;13532:49;;9786:54:15;13532:49:77;336:42:2;13532:49:77;;;;;;;;;;;13383:3;13359:15;706:19784;13359:15;13616:18;13359:15;706:19784;13359:15;;13616;:18;:::i;:::-;;:31;706:19784;;;;;13604:44;2024:14:2;13604:44:77;;706:19784;13604:44;;706:19784;13604:44;;9786:54:15;13604:44:77;336:42:2;13604:44:77;;;;;;;;13409:260;13604:44;;12163:1;13604:44;;;;;;;13383:3;13409:260;;:::i;:::-;13314:10;;;13396:273;706:19784;13340:13;;13604:44;;;;;;;;;;;;;;;:::i;:::-;;;;;13532:49;;;;;;;;;;;;;;:::i;:::-;;;;;;706:19784;;;;;;;;;13471:38;;;;;;;;;;;;;:::i;:::-;;;;;706:19784;;;;;;;;;13355:26;;;;;;13314:10;;;13716;706:19784;;;;;;13751:28;2024:14:2;13751:28:77;;706:19784;13751:28;;706:19784;13751:28;;9786:54:15;13751:28:77;336:42:2;13751:28:77;;;;;;;;;;;13335:341;12255:24;;;;706:19784;;;;13798:37;2024:14:2;13798:37:77;;706:19784;13798:37;;2024:14:2;13798:37:77;;9786:54:15;13798:37:77;336:42:2;13798:37:77;;;;;;;;;;;13335:341;12335:19;;;;706:19784;;;;13854:32;2024:14:2;13854:32:77;;706:19784;13854:32;;2024:14:2;13854:32:77;;9786:54:15;13854:32:77;336:42:2;13854:32:77;;;;;;;;13695:197;13854:32;;;;;;;;13335:341;13695:197;;;;;:::i;:::-;13314:10;;;13682:210;13904:13;13923:15;13314:10;13923:15;;13899:329;13947:3;13923:15;;706:19784;;13919:26;;;;;706:19784;14048:18;13314:10;;;;13996;14048:18;;:::i;:::-;;706:19784;;;;14036:38;2024:14:2;14036:38:77;;706:19784;14036:38;;706:19784;14036:38;;9786:54:15;14036:38:77;336:42:2;14036:38:77;;;;;;;;;;;13947:3;14109:15;706:19784;14109:15;:18;:15;;;:18;:::i;:::-;;:36;706:19784;;;;;14097:49;2024:14:2;14097:49:77;;706:19784;14097:49;;706:19784;14097:49;;9786:54:15;14097:49:77;336:42:2;14097:49:77;;;;;;;;;;;13947:3;14181:15;706:19784;14181:15;:18;:15;;;:18;:::i;:::-;;:31;706:19784;;;;;14169:44;2024:14:2;14169:44:77;;706:19784;14169:44;;706:19784;14169:44;;9786:54:15;14169:44:77;336:42:2;14169:44:77;;;;;;;;;12163:1;14169:44;;;;;13973:248;14169:44;;;;;13973:248;;;:::i;:::-;13314:10;;;13960:261;706:19784;13904:13;;14169:44;;;;;;;;;;;;;;:::i;:::-;;;;;;;706:19784;;;;;;;;;;14097:49;;;;;;;;;;;;;;:::i;:::-;;;;;14036:38;;;;;;;;;;;;;:::i;:::-;;;;13919:26;;;;;;;;13314:10;706:19784;;14323:59;14249:52;13314:10;;;14290;14249:52;:::i;:::-;14234:12;;;;706:19784;;;13314:10;;;;14354;706:19784;;;14323:59;;:::i;:::-;14308:12;;;;:74;;;12784:13;706:19784;;336:42:2;14388:23:77;;;;706:19784;;14388:23;2024:14:2;14388:23:77;;706:19784;14388:23;;706:19784;14388:23;;9786:54:15;14388:23:77;;336:42:2;14388:23:77;;;;;;;;13899:329;2024:14:2;;;14438:71:77;2024:14:2;706:19784:77;12755:8;2024:14:2;;;706:19784:77;;12820:16;;706:19784;14496:12;;706:19784;;;14438:71;;;;;;2024:14:2;14438:71:77;;706:19784;14438:71;;;:::i;:::-;;;;;;;;;;;;;;;13899:329;14417:18;;;;14544:12;14417:18;;706:19784;;14544:12;;:::i;:::-;706:19784;;14438:71;;;;;;;;;;;;;;;;:::i;:::-;;;2024:14:2;;;;;;;;14417:18:77;14438:71;;;;;;;;706:19784;;;;;;;;14388:23;;;;;:::i;:::-;706:19784;;14388:23;;;;13854:32;;;;;;;;;;;;;;:::i;:::-;;;;;13798:37;;;;;;;;;;;;;;:::i;:::-;;;;;13751:28;;;;;;;;;;;;;:::i;:::-;;;;;706:19784;;;;;;;;;13263:44;;;;;:::i;:::-;706:19784;;13263:44;;;;;706:19784;;;;;;;;;13171:85;;;;;:::i;:::-;706:19784;;13171:85;;;;;706:19784;;;;;;;;;13140:24;;;;;706:19784;13140:24;706:19784;13140:24;;;;;;;:::i;:::-;;;;;;706:19784;;;;;;;;;12918:50;13011:11;12918:50;;706:19784;12918:50;;2024:14:2;12918:50:77;;;;12145:16;12918:50;12145:16;12918:50;;;;;;;:::i;:::-;;;;;-1:-1:-1;12918:50:77;;-1:-1:-1;12918:50:77;;;706:19784;;;;;;;;;12755:59;;;;706:19784;12755:59;;706:19784;12755:59;;;;;;2024:14:2;12755:59:77;;;:::i;:::-;;;2024:14:2;;;;;;;12755:59:77;;;;;;-1:-1:-1;12755:59:77;;12586:25;;;;;:::i;:::-;706:19784;;12586:25;;;;12406:90;;;;706:19784;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;8465:43;8383:26;706:19784;8465:43;706:19784;;;;;;:::i;:::-;8358:8;;;;:::i;8383:26::-;8436:7;;;;:::i;:::-;706:19784;;8465:43;;;706:19784;8465:43;;;:::i;:::-;;;;;;;;;:::i;:::-;336:42:2;8514:20:77;;;;706:19784;;;8514:20;2024:14:2;8514:20:77;;706:19784;;8514:20;;706:19784;8514:20;;706:19784;8514:20;;336:42:2;8514:20:77;;;;;;;;;;;706:19784;8563:34;;;;;;:::i;:::-;2024:14:2;8633:47:77;706:19784;2024:14:2;706:19784:77;8633:8;2024:14:2;;;706:19784:77;;;;8633:47;;;;;;2024:14:2;8633:47:77;;706:19784;8633:47;;;:::i;:::-;;;;;;;;;;;;;;706:19784;;8721:91;706:19784;;8721:91;706:19784;;;8721:91;;;8744:34;706:19784;8721:91;;;706:19784;8721:91;;;:::i;:::-;706:19784;;8820:30;8744:34;706:19784;8820:30;;706:19784;;8820:30;;;706:19784;8820:30;;:::i;:::-;336:42:2;8687:169:77;;;;;706:19784;;;;;8687:169;;;;;2024:14:2;8687:169:77;;;706:19784;8687:169;;;:::i;:::-;;;;336:42:2;8687:169:77;;;;;;;;;;;706:19784;8862:29;;336:42:2;8862:29:77;;;;706:19784;8862:29;706:19784;;;8862:29;;;;2024:14:2;8862:29:77;;;706:19784;8862:29;;;:::i;:::-;;;;336:42:2;8862:29:77;;;;;;;;;;;706:19784;2024:14:2;;706:19784:77;8633:8;2024:14:2;;;706:19784:77;336:42:2;8898:56:77;;;;706:19784;;2024:14:2;8898:56:77;;304:1:98;706:19784:77;8898:56;;706:19784;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;336:42:2;8898:56:77;;;;;;;;;;;706:19784;-1:-1:-1;;706:19784:77;;;;;;;;;;;;;;;;;;2024:14:2;;;9022:15:77;706:19784;;;2024:14:2;8965:73:77;;706:19784;;8965:73;706:19784;8633:8;2024:14:2;;;706:19784:77;9044:61;;;;;706:19784;;;9044:61;706:19784;;;;9044:61;;;;;;;2024:14:2;9044:61:77;;706:19784;9044:61;;;:::i;:::-;;;;;;;;;;;706:19784;2024:14:2;;706:19784:77;8633:8;2024:14:2;;;706:19784:77;;;;2024:14:2;9121:46:77;;706:19784;9121:46;;;;;706:19784;9121:46;;706:19784;;;;;;;;;;;;;;;;;;;9121:46;;;;;;;;;;;;;;706:19784;9112:59;;;;:::i;:::-;706:19784;;2024:14:2;9186:49:77;;706:19784;;;;9186:49;;706:19784;;;;;;;;;;;;2024:14:2;706:19784:77;9186:49;706:19784;9186:49;;;;;;;;;;;;;706:19784;9237:11;;9264:65;9237:11;;;706:19784;9237:11;;;;:::i;:::-;706:19784;;9264:65;;;;;;;2024:14:2;9264:65:77;;706:19784;9264:65;;706:19784;2024:14:2;;;;;;;;;706:19784:77;;;;;2024:14:2;;;706:19784:77;2024:14:2;;;9264:65:77;;;;;;;;;;;;;706:19784;9331:15;9022;;;9331;;:::i;9264:65::-;;706:19784;9264:65;;706:19784;9264:65;;;;;;2024:14:2;9264:65:77;;;:::i;:::-;;;2024:14:2;;;;9331:15:77;2024:14:2;;9264:65:77;;;;;-1:-1:-1;9264:65:77;;9186:49;;;;;;706:19784;9186:49;;706:19784;9186:49;;;;;;2024:14:2;9186:49:77;;;:::i;:::-;;;2024:14:2;;;;;;;;9186:49:77;;9264:65;9186:49;;;;;-1:-1:-1;9186:49:77;;;706:19784;;;;;;;;;9121:46;;706:19784;9121:46;;706:19784;9121:46;;;;;;2024:14:2;9121:46:77;;;:::i;:::-;;;2024:14:2;;;;9112:59:77;2024:14:2;;9121:46:77;;;;;-1:-1:-1;9121:46:77;;9044:61;;;;;:::i;:::-;706:19784;;9044:61;;;;706:19784;;;;8898:56;;;;;:::i;:::-;706:19784;;8898:56;;;;;706:19784;;;;;;;;;8862:29;;;;;:::i;:::-;706:19784;;8862:29;;;;8687:169;;;;;:::i;:::-;706:19784;;8687:169;;;;8633:47;;;;706:19784;8633:47;;706:19784;8633:47;;;;;;2024:14:2;8633:47:77;;;:::i;:::-;;;2024:14:2;;;;;;;;-1:-1:-1;8721:91:77;8633:47;;;;;-1:-1:-1;8633:47:77;;8514:20;;;;;:::i;:::-;706:19784;;8514:20;;;;706:19784;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;17367:14;;;;;;:::i;:::-;17420:16;;;706:19784;2933:19:15;706:19784:77;;17438:1;706:19784;;2933:19:15;:::i;:::-;706:19784:77;;17517:47;706:19784;;;;;;;;;;;:::i;:::-;;;;;;;;;;;9786:54:15;;706:19784:77;;9786:54:15;;;;;;;;;;706:19784:77;;;;;;:::i;9786:54:15:-;706:19784:77;9371:159:15;679:42;9371:159;;;706:19784:77;;;;17523:19;;;706:19784;17517:47;:::i;:::-;706:19784;17523:19;;;706:19784;;2933:19:15;17611:24:77;17438:1;17611:24;;;706:19784;2933:19:15;:::i;:::-;706:19784:77;;;;;;;;:::i;:::-;;;;;;;;;;;9786:54:15;;706:19784:77;;9786:54:15;;;;;;;;;;706:19784:77;;;;;;:::i;9786:54:15:-;706:19784:77;9371:159:15;679:42;9371:159;;;706:19784:77;17611:24;;;;;706:19784;17697:17;;;706:19784;;;;;;;;;;;;17691:57;;;;:::i;:::-;706:19784;;;;;;336:42:2;17756:25:77;;;;706:19784;;17756:25;2024:14:2;17756:25:77;;706:19784;17756:25;;2024:14:2;17756:25:77;;9786:54:15;17756:25:77;;336:42:2;17756:25:77;;;;;;;;706:19784;;;294:80:98;706:19784:77;;294:80:98;:::i;:::-;706:19784:77;;;;:::i;:::-;;17925:8;2024:14:2;;;706:19784:77;17954:13;;706:19784;17954:13;;706:19784;17925:59;706:19784;;;;;17969:14;;706:19784;;;17925:59;;;;;2024:14:2;17925:59:77;;706:19784;17925:59;;;:::i;:::-;;;;;;;;;;;;;;;706:19784;;;;18009:46;18025:14;;706:19784;;;;18009:46;;:::i;:::-;17990:16;706:19784;17990:16;;706:19784;;;;;;;;;;18088:50;2024:14:2;18088:50:77;;706:19784;18088:50;;2024:14:2;9786:54:15;2024:14:2;;;17420:16:77;18088:50;706:19784;18088:50;336:42:2;18088:50:77;;;;;;;706:19784;;;18088:50;;;706:19784;18070:6;18181:11;706:19784;2024:14:2;18070:6:77;17420:16;18070:6;;18078;17697:17;18078:6;;706:19784;;;;;;18062:6;;;;706:19784;18181:11;:::i;:::-;706:19784;2024:14:2;;706:19784:77;;18172:47;18145:16;;17523:19;18145:16;;706:19784;;;;;18243:42;706:19784;18243:42;;2024:14:2;;;;;18243:42:77;;;;17420:16;18243:42;;:::i;:::-;17611:24;18226:14;;:59;;;706:19784;;;;;18310:24;2024:14:2;18310:24:77;;706:19784;18310:24;;2024:14:2;706:19784:77;18310:24;9786:54:15;18310:24:77;336:42:2;18310:24:77;;;;;;;;;;;706:19784;18292:15;706:19784;;18292:15;;706:19784;;;;;;;;;;18395:14;;18411;;18341:85;;;;;;706:19784;;;18341:85;706:19784;;18341:85;;;;;;;2024:14:2;18341:85:77;;706:19784;18341:85;;;:::i;:::-;;;;;;;;;;;;;;706:19784;-1:-1:-1;;17925:8:77;2024:14:2;706:19784:77;;;;;;;;2024:14:2;18441:84:77;;706:19784;;;;;18441:84;;706:19784;;;;2024:14:2;;;706:19784:77;2024:14:2;;;;706:19784:77;;;;;2024:14:2;;706:19784:77;;2024:14:2;;706:19784:77;18441:84;;;;;;;;;;;706:19784;;;18527:16;18559:36;706:19784;;;;18527:16;;:::i;18559:36::-;336:42:2;18551:45:77;;;;706:19784;;18551:45;2024:14:2;18551:45:77;;706:19784;18551:45;;2024:14:2;18551:45:77;;9786:54:15;18551:45:77;;336:42:2;18551:45:77;;;;;;;;706:19784;18603:10;;;;;706:19784;;;;;;;;;:::i;:::-;;;;;;18629:13;18672:3;18648:15;706:19784;18648:15;;;706:19784;;18644:26;;;;;706:19784;18772:18;18721:10;;;18772:18;;:::i;:::-;;706:19784;;;;18760:38;2024:14:2;18760:38:77;;706:19784;18760:38;;706:19784;18760:38;;9786:54:15;18760:38:77;336:42:2;18760:38:77;;;;;;;;;;;18672:3;18648:15;706:19784;18648:15;18833:18;18648:15;706:19784;18648:15;;18833;:18;:::i;:::-;;:36;706:19784;;;;;18821:49;2024:14:2;18821:49:77;;706:19784;18821:49;;706:19784;18821:49;;9786:54:15;18821:49:77;336:42:2;18821:49:77;;;;;;;;;;;;;;;18672:3;18648:15;706:19784;18648:15;;706:19784;18905:18;18648:15;;18905;:18;:::i;:::-;;:31;706:19784;;;;18893:44;2024:14:2;18893:44:77;;706:19784;18893:44;;706:19784;18893:44;;9786:54:15;18893:44:77;336:42:2;18893:44:77;;;;;;;;17438:1;18893:44;;;;;18698:260;18893:44;;;;;18698:260;;;:::i;:::-;18685:273;;706:19784;18629:13;;18821:49;18905:18;18821:49;;;;706:19784;18821:49;706:19784;18821:49;;;;;;;;;;;:::i;:::-;;;;;;;;;18760:38;;;;;;;;;;;;;:::i;:::-;;;;18644:26;;;;;;;;;19004:10;;706:19784;;;;;;19039:28;2024:14:2;19039:28:77;;706:19784;19039:28;;706:19784;19039:28;;9786:54:15;19039:28:77;336:42:2;19039:28:77;;;;;;;;;;;18624:341;17611:24;;;;706:19784;;;;19086:37;2024:14:2;19086:37:77;;706:19784;19086:37;;2024:14:2;19086:37:77;;9786:54:15;19086:37:77;336:42:2;19086:37:77;;;;;;;;;;;18624:341;17523:19;;;;706:19784;;;;19142:32;2024:14:2;19142:32:77;;706:19784;19142:32;;2024:14:2;19142:32:77;;9786:54:15;19142:32:77;336:42:2;19142:32:77;;;;;;;;;;18983:197;19142:32;;;;;;;;18983:197;;;;;;:::i;:::-;18970:210;;18603:10;19191:13;19210:15;;19186:329;19234:3;19210:15;;;706:19784;;19206:26;;;;;706:19784;19335:18;19283:10;;;19335:18;;:::i;:::-;;706:19784;;;;19323:38;2024:14:2;19323:38:77;;706:19784;19323:38;;706:19784;19323:38;;9786:54:15;19323:38:77;336:42:2;19323:38:77;;;;;;;;;;;19234:3;19396:15;706:19784;19396:15;:18;:15;;;:18;:::i;:::-;;:36;706:19784;;;;;19384:49;2024:14:2;19384:49:77;;706:19784;19384:49;;706:19784;19384:49;;9786:54:15;19384:49:77;336:42:2;19384:49:77;;;;;;;;;;;19234:3;19468:15;706:19784;19468:15;:18;:15;;;:18;:::i;:::-;;:31;706:19784;;;;19456:44;2024:14:2;19456:44:77;;706:19784;19456:44;;706:19784;19456:44;;9786:54:15;19456:44:77;336:42:2;19456:44:77;;;;;;;;17438:1;19456:44;;;;;19260:248;19456:44;;;;;19260:248;;;:::i;:::-;19247:261;;706:19784;19191:13;;19384:49;;;;;;;;;;;;;;:::i;:::-;;;;;19323:38;;;;;;;;;;;;;:::i;:::-;;;;19086:37;;;;;;;;;;;;;;;:::i;:::-;;;;;19039:28;;;;;;;;;;;;;:::i;:::-;;;;18551:45;;;;;:::i;:::-;706:19784;;18551:45;;;;18441:84;;;;706:19784;18441:84;;706:19784;18441:84;;;;;;2024:14:2;18441:84:77;;;:::i;:::-;;;2024:14:2;;;;;;;;-1:-1:-1;18527:16:77;18441:84;;;;;-1:-1:-1;18441:84:77;;18341:85;;;;;:::i;:::-;706:19784;;18341:85;;;;18310:24;;;;;706:19784;18310:24;706:19784;18310:24;;;;;;;:::i;:::-;;;;;18088:50;18181:11;18088:50;;706:19784;18088:50;;2024:14:2;18088:50:77;;;;17420:16;18088:50;17420:16;18088:50;;;;;;;:::i;:::-;;;;;-1:-1:-1;18088:50:77;;-1:-1:-1;18088:50:77;;17925:59;;;;706:19784;17925:59;;706:19784;17925:59;;;;;;2024:14:2;17925:59:77;;;:::i;:::-;;;2024:14:2;;;;;;;17925:59:77;;;;;;-1:-1:-1;17925:59:77;;17756:25;;;;;:::i;:::-;706:19784;;17756:25;;;;706:19784;9786:54:15;706:19784:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1046:29;336:42:2;1046:29:77;;;;706:19784;;;2024:14:2;1046:29:77;;1056:18;;;706:19784;1046:29;;706:19784;1046:29;;706:19784;1046:29;336:42:2;1046:29:77;;;;;;;;706:19784;-1:-1:-1;706:19784:77;;1114:13;;1082:20;-1:-1:-1;1129:18:77;;;;;;1493:48;;;;;;:::i;:::-;1547:32;336:42:2;1547:32:77;;;;706:19784;;;2024:14:2;1547:32:77;;1557:21;;;706:19784;1547:32;;706:19784;1547:32;;706:19784;1547:32;336:42:2;1547:32:77;;;;;;;;1109:360;15812:42:97;706:19784:77;15812:42:97;706:19784:77;15812:42:97;;:::i;:::-;706:19784:77;15895:11:97;;:::i;:::-;706:19784:77;;;15887:47:97;;;;;2024:14:2;15887:47:97;;706:19784:77;;15887:47:97;;706:19784:77;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15887:47:97;;;336:42:2;15887:47:97;;;;;;;;;;;1109:360:77;706:19784;;;2024:14:2;16432:21:97;;706:19784:77;;16432:21:97;;2024:14:2;;;;;;706:19784:77;2024:14:2;;;;:::i;:::-;16432:21:97;;336:42:2;16432:21:97;;;;;;;706:19784:77;16432:21:97;706:19784:77;16432:21:97;;;;;1109:360:77;706:19784;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;16501:11:97;;:::i;:::-;706:19784:77;;;16493:52:97;;;;;2024:14:2;16493:52:97;;706:19784:77;;16493:52:97;;706:19784:77;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16493:52:97;;;336:42:2;16493:52:97;;;;;;;;;;;1109:360:77;706:19784;2024:14:2;706:19784:77;;16558:34:97;;;;;;;;;;2024:14:2;;;;706:19784:77;2024:14:2;;;1750::77;706:19784;2024:14:2;;1750::77;;:::i;:::-;706:19784;2024:14:2;706:19784:77;2024:14:2;;;706:19784:77;;;;1804:52;;;;;;;2024:14:2;1804:52:77;;706:19784;;1804:52;;706:19784;;;;;;2024:14:2;706:19784:77;;;;;;;;;;:::i;:::-;1804:52;;;;;;;;;;706:19784;;1804:52;;;1109:360;2099:24:4;336:42:2;2099:24:4;;;;706:19784:77;;2099:24:4;2024:14:2;2099:24:4;;706:19784:77;;;2099:24:4;;706:19784:77;;;;;;2099:24:4;;706:19784:77;2099:24:4;336:42:2;2099:24:4;;;;;;;;1109:360:77;1908:7;;;;;:::i;2099:24:4:-;;;;;:::i;:::-;706:19784:77;;2099:24:4;;;;1804:52:77;;;;;706:19784;1804:52;;706:19784;1804:52;;;;;;706:19784;1804:52;;;:::i;:::-;;;706:19784;;;;;;;;;;;;;;;;;2024:14:2;1804:52:77;;;;;;;-1:-1:-1;1804:52:77;;;706:19784;;;;;;;;;;;16493:52:97;;;;;;;;;;;;;:::i;:::-;;;;16432:21;;;;;;;;;;;;;:::i;:::-;;;;15887:47;;;;;;;;;;;;;;:::i;:::-;;;;;;706:19784:77;;;;;;;;;1547:32;;;;;;:::i;:::-;706:19784;;1547:32;;;1149:3;1166:5;;;;1162:65;;1149:3;1313:10;;;;;:::i;:::-;706:19784;;;;;;;;;;;1301:30;2024:14:2;1301:30:77;;706:19784;1301:30;;706:19784;1301:30;;706:19784;1301:30;336:42:2;1301:30:77;;;;;;;;;;;1149:3;1366:10;706:19784;1366:10;;;;;:::i;:::-;:28;706:19784;;;;;;;;;;;;1354:41;2024:14:2;1354:41:77;;706:19784;1354:41;;706:19784;1354:41;;706:19784;1354:41;336:42:2;1354:41:77;;;;;;;;;;;1149:3;1430:10;706:19784;1430:10;;;;;:::i;:::-;:23;706:19784;;;;;;;;;;;;1418:36;2024:14:2;1418:36:77;;706:19784;1418:36;;706:19784;1418:36;;706:19784;1418:36;336:42:2;1418:36:77;;;;;;;706:19784;1418:36;1243:219;1418:36;;;;;1149:3;1243:219;;:::i;:::-;1149:3;706:19784;1114:13;;;;1418:36;;;;;;;;;;;;;;:::i;:::-;;;;;1354:41;;;;;;;;;;;;;;:::i;:::-;;;;;1301:30;;;;;;;;;;;;;:::i;:::-;;;;1162:65;706:19784;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;1162:65;;1046:29;;;;;:::i;:::-;706:19784;;1046:29;;;;706:19784;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;4565:12;;;:::i;:::-;4594:24;;:29;336:42:2;4584:40:77;;;;706:19784;;4584:40;2024:14:2;4584:40:77;;706:19784;4584:40;;706:19784;4584:40;;706:19784;4584:40;336:42:2;4584:40:77;;;;;;;;;;;706:19784;4651:8;;;;;:::i;:::-;294:80:98;706:19784:77;;294:80:98;:::i;:::-;706:19784:77;;;2024:14:2;4724:18:77;;;706:19784;4724:18;;2024:14:2;706:19784:77;4724:18;706:19784;4724:18;336:42:2;4724:18:77;;;;;;;;;;;706:19784;4748:37;336:42:2;4748:37:77;;;;706:19784;;2024:14:2;4748:37:77;;706:19784;;;;;;4758:26;;706:19784;4748:37;;706:19784;4748:37;;706:19784;4748:37;336:42:2;4748:37:77;;;;;;;;;;;706:19784;4791:30;;336:42:2;4791:30:77;;;;706:19784;;;2024:14:2;4791:30:77;;706:19784;;;;;;4791:30;;706:19784;;;;;;;;;;;;;;;;;;;;336:42:2;4791:30:77;;;;;;;;;;;706:19784;4827:37;;336:42:2;4827:37:77;;;;706:19784;;2024:14:2;4827:37:77;;;;;;;706:19784;4827:37;;706:19784;;;;;;;;;;;;;;;;;;;;;;;;4827:37;;;;336:42:2;4827:37:77;;;;;;;;;;;706:19784;4871:20;;336:42:2;4871:20:77;;;;706:19784;;;4871:20;2024:14:2;4871:20:77;;706:19784;;4871:20;;706:19784;4871:20;;706:19784;4871:20;;336:42:2;4871:20:77;;;;;;;;;;;706:19784;2024:14:2;;706:19784:77;4928:8;2024:14:2;;;706:19784:77;;;;4928:47;;2024:14:2;4928:47:77;;;;;;;706:19784;4928:47;;;:::i;:::-;;;;;;;;;;;;;;706:19784;;;;5015:39;2024:14:2;5015:39:77;;706:19784;5015:39;;2024:14:2;706:19784:77;2024:14:2;;;706:19784:77;5015:39;706:19784;5015:39;336:42:2;5015:39:77;;;;;;;706:19784;;;5015:39;;;706:19784;5100:6;;2024:14:2;5100:6:77;;:::i;:::-;706:19784;2024:14:2;;5091:37:77;706:19784;;5160:32;706:19784;5160:32;;2024:14:2;706:19784:77;2024:14:2;;;706:19784:77;5160:32;;;706:19784;5160:32;;:::i;:::-;706:19784;;5245:34;706:19784;5222:102;;;;;;;;;;706:19784;5222:102;;;:::i;:::-;336:42:2;5199:131:77;;;;706:19784;2024:14:2;706:19784:77;;;5199:131;;;;2024:14:2;5199:131:77;;706:19784;;5199:131;;2024:14:2;706:19784:77;2024:14:2;;;;:::i;:::-;5199:131:77;;;336:42:2;5199:131:77;;;;;;;;;;;706:19784;2024:14:2;;706:19784:77;4928:8;2024:14:2;;;706:19784:77;5336:65;;;;;;706:19784;;;5336:65;706:19784;;5336:65;;;;;;;2024:14:2;5336:65:77;;706:19784;5336:65;;;:::i;5199:131::-;;;;;:::i;:::-;706:19784;;5199:131;;;;5015:39;2024:14:2;5015:39:77;;5100:6;5015:39;;;;;706:19784;5015:39;706:19784;5015:39;;;;;;;:::i;:::-;;;-1:-1:-1;5015:39:77;;;4928:47;;;;706:19784;4928:47;;706:19784;4928:47;;;;;;2024:14:2;4928:47:77;;;:::i;:::-;;;2024:14:2;;;;;;;4928:47:77;;;;;;-1:-1:-1;4928:47:77;;4871:20;;;;;:::i;:::-;706:19784;;4871:20;;;;4827:37;;;;;:::i;:::-;706:19784;;4827:37;;;;4791:30;;;;;:::i;:::-;706:19784;;4791:30;;;;4748:37;;;;;:::i;:::-;706:19784;;4748:37;;;;4724:18;;;;706:19784;4724:18;706:19784;4724:18;;;;;;;:::i;:::-;;;;4584:40;;;;;:::i;:::-;706:19784;;4584:40;;;;706:19784;;;;;;;;;;;;2575:18:9;706:19784:77;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;2575:18:9;706:19784:77;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;2876:18:9;706:19784:77;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;2876:18:9;706:19784:77;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;3653:18:9;706:19784:77;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;3653:18:9;706:19784:77;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;3162:18:9;706:19784:77;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;3162:18:9;706:19784:77;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;2097:8;;;:::i;:::-;336:42:2;2113:20:77;;;;706:19784;;;2113:20;2024:14:2;2113:20:77;;706:19784;;2113:20;;706:19784;2113:20;;706:19784;2113:20;;336:42:2;2113:20:77;;;;;;;;706:19784;;;294:80:98;706:19784:77;;294:80:98;:::i;:::-;2024:14:2;706:19784:77;2206:8;2024:14:2;;;706:19784:77;;;;2206:47;2024:14:2;2206:47:77;;706:19784;2206:47;;;;;706:19784;2206:47;;;:::i;:::-;;;;;;;;;;;;;;;706:19784;2281:34;;;;;:::i;:::-;706:19784;;;2355:39;2024:14:2;2355:39:77;;;706:19784;2355:39;;2024:14:2;706:19784:77;2024:14:2;;;706:19784:77;2355:39;706:19784;2355:39;336:42:2;2355:39:77;;;;;;;706:19784;;;2355:39;;;706:19784;2440:6;;2024:14:2;2440:6:77;;:::i;:::-;706:19784;2024:14:2;;2431:37:77;706:19784;;2500:32;706:19784;2500:32;;2024:14:2;706:19784:77;2024:14:2;;;706:19784:77;2500:32;;;706:19784;2500:32;;:::i;:::-;706:19784;;2560:18;2024:14:2;2560:18:77;;706:19784;2560:18;;2024:14:2;706:19784:77;2560:18;706:19784;2560:18;336:42:2;2560:18:77;;;;;;;;;;;706:19784;2585:56;336:42:2;2585:56:77;;;;706:19784;;2024:14:2;2585:56:77;;304:1:98;706:19784:77;2585:56;;706:19784;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2585:56;;;;336:42:2;2585:56:77;;;;;;;;;;;706:19784;-1:-1:-1;;706:19784:77;;;;;;;;;;;;;;;;;;2024:14:2;;;2712:15:77;706:19784;;;2024:14:2;2652:76:77;;706:19784;;2652:76;706:19784;2206:8;2024:14:2;;;706:19784:77;2734:63;;;;;;706:19784;;;;;2734:63;706:19784;;2734:63;;;;;;;2024:14:2;2734:63:77;;706:19784;2734:63;;;:::i;2585:56::-;;;;;:::i;:::-;706:19784;;2585:56;;;;2560:18;;;;;706:19784;2560:18;706:19784;2560:18;;;;;;;:::i;:::-;;;;;2355:39;2024:14:2;2355:39:77;;2440:6;2355:39;;;;;706:19784;2355:39;706:19784;2355:39;;;;;;;:::i;:::-;;;-1:-1:-1;2355:39:77;;;2206:47;;;;;706:19784;2206:47;;706:19784;2206:47;;;;;;2024:14:2;2206:47:77;;;:::i;:::-;;;2024:14:2;;;;;;;2206:47:77;;;;;;;-1:-1:-1;2206:47:77;;;706:19784;;;;;;;;;2113:20;;;;;:::i;:::-;706:19784;;2113:20;;;;706:19784;;;;;;;;;;;;3346:26:9;706:19784:77;;;;:::i;:::-;;;;;;;:::i;:::-;;;;3346:26:9;706:19784:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;5804:43;5665:31;706:19784;5804:43;706:19784;;;;;;:::i;:::-;5665:31;;:::i;:::-;5723:12;;;;:::i;:::-;706:19784;;5804:43;;;706:19784;5804:43;;;:::i;:::-;336:42:2;5854:34:77;;;;706:19784;5854:34;706:19784;;;5854:34;;;;2024:14:2;5854:34:77;;;706:19784;5854:34;;;:::i;:::-;;;;336:42:2;5854:34:77;;;;;;;;;;;706:19784;5915:8;;;;;:::i;:::-;294:80:98;706:19784:77;;294:80:98;:::i;:::-;706:19784:77;;;2024:14:2;5996:18:77;;;706:19784;5996:18;;2024:14:2;706:19784:77;5996:18;706:19784;5996:18;336:42:2;5996:18:77;;;;;;;;;;;706:19784;6022:37;336:42:2;6022:37:77;;;;706:19784;;2024:14:2;6022:37:77;;706:19784;;;;;;6032:26;;706:19784;6022:37;;706:19784;6022:37;;706:19784;6022:37;336:42:2;6022:37:77;;;;;;;;;;;706:19784;6067:30;;336:42:2;6067:30:77;;;;706:19784;;;2024:14:2;6067:30:77;;706:19784;;;;;;6067:30;;706:19784;;;;;;;;;;;;;;;;;;;;336:42:2;6067:30:77;;;;;;;;;;;706:19784;6105:37;;336:42:2;6105:37:77;;;;706:19784;;2024:14:2;6105:37:77;;;;;;;706:19784;6105:37;;706:19784;;;;;;;;;;;;;;;;;;;;;;;;6105:37;;;;336:42:2;6105:37:77;;;;;;;;;;;706:19784;6155:20;;336:42:2;6155:20:77;;;;706:19784;;;6155:20;2024:14:2;6155:20:77;;706:19784;;6155:20;;706:19784;6155:20;;706:19784;6155:20;;336:42:2;6155:20:77;;;;;;;;;;;706:19784;2024:14:2;;706:19784:77;6248:8;2024:14:2;;;706:19784:77;;;;;6248:47;;2024:14:2;6248:47:77;;;;;;;706:19784;6248:47;;;:::i;:::-;;;;;;;;;;;;;;706:19784;;;;6337:39;2024:14:2;6337:39:77;;706:19784;6337:39;;2024:14:2;;706:19784:77;2024:14:2;;;706:19784:77;6337:39;706:19784;6337:39;336:42:2;6337:39:77;;;;;;;706:19784;;;;6337:39;;;706:19784;6557:90;6424:6;;;;2024:14:2;6424:6:77;;:::i;:::-;706:19784;2024:14:2;;6415:37:77;706:19784;;;6473:32;;;706:19784;6473:32;;2024:14:2;706:19784:77;2024:14:2;;;706:19784:77;6473:32;;;706:19784;6473:32;;:::i;:::-;6557:90;706:19784;;6557:90;;;6580:34;706:19784;6557:90;;;706:19784;6557:90;;;:::i;:::-;706:19784;;6657:30;;706:19784;6657:30;;706:19784;;6657:30;;;706:19784;6657:30;;:::i;:::-;336:42:2;6514:181:77;;;;;706:19784;;;;;6514:181;;;;;2024:14:2;6514:181:77;;;706:19784;6514:181;;;:::i;:::-;;;;336:42:2;6514:181:77;;;;;;;;;;;706:19784;;;;;6754:34;706:19784;6731:102;;;;;;;;;;706:19784;6731:102;;;:::i;6514:181::-;;;;;:::i;:::-;706:19784;;6514:181;;;;6337:39;;;;6557:90;6424:6;6337:39;2024:14:2;6337:39:77;706:19784;6337:39;706:19784;6337:39;;;;;;;:::i;:::-;;;-1:-1:-1;6337:39:77;;-1:-1:-1;6337:39:77;-1:-1:-1;6337:39:77;;6248:47;;;;;706:19784;6248:47;;706:19784;6248:47;;;;;;2024:14:2;6248:47:77;;;:::i;:::-;;;2024:14:2;;;;;;;6248:47:77;;;;;;;-1:-1:-1;6248:47:77;;6155:20;;;;;:::i;:::-;706:19784;;6155:20;;;;6105:37;;;;;:::i;:::-;706:19784;;6105:37;;;;6067:30;;;;;:::i;:::-;706:19784;;6067:30;;;;6022:37;;;;;:::i;:::-;706:19784;;6022:37;;;;5996:18;;;;706:19784;5996:18;706:19784;5996:18;;;;;;;:::i;:::-;;;;5854:34;;;;;:::i;:::-;706:19784;;5854:34;;;;706:19784;;;;;;;;;;;;;;;;;3501:18:9;706:19784:77;;;;;;;3501:18:9;706:19784:77;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3794:16:9;706:19784:77;;;;;;;3794:16:9;706:19784:77;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;10706:26;706:19784;10788:43;706:19784;10788:43;706:19784;;;;;;:::i;:::-;10681:8;;;;;;:::i;10706:26::-;10759:7;;;;:::i;:::-;706:19784;;10788:43;;;706:19784;10788:43;;;:::i;:::-;;;;;;;;;:::i;:::-;336:42:2;10837:20:77;;;;706:19784;;;10837:20;2024:14:2;10837:20:77;;706:19784;;10837:20;;706:19784;10837:20;;706:19784;10837:20;;336:42:2;10837:20:77;;;;;;;;;;;706:19784;2024:14:2;;10894:47:77;706:19784;2024:14:2;706:19784:77;10894:8;2024:14:2;;;706:19784:77;;;;10894:47;;;;;;2024:14:2;10894:47:77;;706:19784;10894:47;;;:::i;:::-;;;;;;;;;;;;;;706:19784;;10982:91;706:19784;;10982:91;706:19784;;;10982:91;;;11005:34;706:19784;10982:91;;;706:19784;10982:91;;;:::i;:::-;336:42:2;10948:144:77;;;;706:19784;;;;;;10948:144;;;;;2024:14:2;10948:144:77;;706:19784;;;;10948:144;;706:19784;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;10948:144;;;336:42:2;10948:144:77;;;;;;;;;;;706:19784;11098:29;;336:42:2;11098:29:77;;;;706:19784;11098:29;706:19784;;;11098:29;;;;2024:14:2;11098:29:77;;;706:19784;11098:29;;;:::i;:::-;;;;336:42:2;11098:29:77;;;;;;;;;;;706:19784;11134:28;;336:42:2;11134:28:77;;;;706:19784;;;;;;11134:28;;;;;2024:14:2;11134:28:77;;706:19784;;11134:28;;706:19784;;;;;;:::i;11098:29::-;;;;;:::i;:::-;706:19784;;11098:29;;;;10948:144;;;;;:::i;:::-;706:19784;;10948:144;;;;10894:47;;;;706:19784;10894:47;;706:19784;10894:47;;;;;;2024:14:2;10894:47:77;;;:::i;:::-;;;2024:14:2;;;;;;;;-1:-1:-1;10982:91:77;10894:47;;;;;-1:-1:-1;10894:47:77;;10837:20;;;;;:::i;:::-;706:19784;;10837:20;;;;706:19784;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;3269:43;706:19784;3269:43;706:19784;;;;;;:::i;3269:43::-;3338:8;;;:::i;:::-;336:42:2;3354:20:77;;;;706:19784;;;3354:20;2024:14:2;3354:20:77;;706:19784;;3354:20;;706:19784;3354:20;;706:19784;3354:20;;336:42:2;3354:20:77;;;;;;;;706:19784;;294:80:98;706:19784:77;;294:80:98;:::i;:::-;2024:14:2;706:19784:77;3447:8;2024:14:2;;;706:19784:77;;;;;3447:47;;2024:14:2;3447:47:77;;;;;;;706:19784;3447:47;;;:::i;:::-;;;;;;;;;;;;;;706:19784;3522:34;;;;;:::i;:::-;706:19784;;;3596:39;2024:14:2;3596:39:77;;;706:19784;3596:39;;2024:14:2;706:19784:77;2024:14:2;;;706:19784:77;3596:39;706:19784;3596:39;336:42:2;3596:39:77;;;;;;;706:19784;;;3596:39;;;706:19784;3681:6;;2024:14:2;3681:6:77;;:::i;:::-;706:19784;2024:14:2;;3672:37:77;706:19784;;3741:32;706:19784;3741:32;;2024:14:2;706:19784:77;2024:14:2;;;706:19784:77;3741:32;;;706:19784;3741:32;;:::i;:::-;706:19784;;3801:18;2024:14:2;3801:18:77;;706:19784;3801:18;;2024:14:2;706:19784:77;3801:18;706:19784;3801:18;336:42:2;3801:18:77;;;;;;;;;;;706:19784;3825:32;336:42:2;3825:32:77;;;;706:19784;3825:32;706:19784;;;3825:32;;;;2024:14:2;3825:32:77;;;706:19784;3825:32;;;:::i;:::-;;;;336:42:2;3825:32:77;;;;;;;;;;;706:19784;2024:14:2;;706:19784:77;3447:8;2024:14:2;;;706:19784:77;336:42:2;3864:56:77;;;;706:19784;;2024:14:2;3864:56:77;;304:1:98;706:19784:77;3864:56;;706:19784;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3864:56;706:19784;3825:32;;;;;:::i;:::-;706:19784;;3825:32;;;;3801:18;;;;;706:19784;3801:18;706:19784;3801:18;;;;;;;:::i;:::-;;;;;3596:39;2024:14:2;3596:39:77;;3681:6;3596:39;;;;;706:19784;3596:39;706:19784;3596:39;;;;;;;:::i;:::-;;;-1:-1:-1;3596:39:77;;;3447:47;;;;;706:19784;3447:47;;706:19784;3447:47;;;;;;2024:14:2;3447:47:77;;;:::i;:::-;;;2024:14:2;;;;;;;3447:47:77;;;;;;;-1:-1:-1;3447:47:77;;3354:20;;;;;:::i;:::-;706:19784;;3354:20;;;;706:19784;;;;;;;;;;;;3948:19:9;706:19784:77;;;;:::i;:::-;;;;;;;:::i;:::-;;;;3948:19:9;706:19784:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;20009:26;706:19784;20009:26;;:95;;;;;706:19784;20009:155;;;;706:19784;19998:244;;;706:19784;336:42:2;20248:17:77;;;;706:19784;;;20248:17;2024:14:2;20248:17:77;;706:19784;;20248:17;;706:19784;20248:17;;706:19784;20248:17;;336:42:2;20248:17:77;;;;;;;;706:19784;;;;20310:38;706:19784;20287:85;;;706:19784;;;;20287:85;;2024:14:2;706:19784:77;20287:85;;;706:19784;20287:85;;:::i;:::-;336:42:2;20271:102:77;;;;706:19784;2024:14:2;706:19784:77;;;20271:102;;;;2024:14:2;20271:102:77;;706:19784;;20271:102;;2024:14:2;706:19784:77;2024:14:2;;;;:::i;:::-;20271:102:77;;;336:42:2;20271:102:77;;;;;;;;706:19784;2024:14:2;;20379:103:77;2024:14:2;20433:48:77;706:19784;;2024:14:2;;706:19784:77;2024:14:2;706:19784:77;20379:8;2024:14:2;;;706:19784:77;;;;;;;;;;20433:48;;;706:19784;;;;;;;;;;;;20433:48;;20287:85;20433:48;;;;;;:::i;:::-;706:19784;;20379:103;;;;;2024:14:2;20379:103:77;;706:19784;;;20379:103;;;:::i;:::-;;;;;;;;;;;706:19784;;;20379:103;;;706:19784;20379:103;706:19784;20379:103;;;;;;;:::i;:::-;;706:19784;;20271:102;;;;;:::i;:::-;706:19784;;20271:102;;;;20248:17;;;;;:::i;:::-;706:19784;;20248:17;;;;19998:244;20203:32;;;19998:244;;;20009:155;706:19784;20138:26;;;20009:155;;;:95;20103:1;20078:26;;;-1:-1:-1;20009:95:77;;706:19784;;;;;;;;;;;;;;;;;3018:16:9;706:19784:77;;;;;;;3018:16:9;706:19784:77;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;7144:8;;;;:::i;:::-;294:80:98;706:19784:77;;294:80:98;:::i;:::-;7210:39:77;2933:19:15;706:19784:77;304:1:98;706:19784:77;;2933:19:15;:::i;:::-;706:19784:77;;;;;;;;;;;:::i;:::-;;;;;;;;;;;9786:54:15;;706:19784:77;;9786:54:15;;;;;;;706:19784:77;9786:54:15;;706:19784:77;;;;;;:::i;:::-;;;;;2024:14:2;9786:54:15;;;;;;;;:::i;:::-;706:19784:77;9371:159:15;679:42;9371:159;;;7276:60:77;7305:30;;;:::i;:::-;706:19784;;7276:60;:::i;:::-;706:19784;;;7364:18;2024:14:2;7364:18:77;;;706:19784;7364:18;;2024:14:2;706:19784:77;7364:18;706:19784;7364:18;336:42:2;7364:18:77;;;;;;;;;;;706:19784;7388:20;336:42:2;7388:20:77;;;;706:19784;;7388:20;2024:14:2;7388:20:77;;706:19784;7388:20;;2024:14:2;7388:20:77;;706:19784;7388:20;;336:42:2;7388:20:77;;;;;;;;706:19784;294:80:98;;;;;:::i;:::-;2024:14:2;706:19784:77;7481:8;2024:14:2;;;706:19784:77;;;;7481:47;2024:14:2;7481:47:77;;706:19784;7481:47;;;;;706:19784;7481:47;;;:::i;:::-;;;;;;;;;;;;;;;706:19784;7556:34;;;;;:::i;:::-;706:19784;;;7630:39;2024:14:2;7630:39:77;;706:19784;7630:39;;2024:14:2;706:19784:77;2024:14:2;;;706:19784:77;7630:39;706:19784;7630:39;336:42:2;7630:39:77;;;;;;;706:19784;;;7630:39;;;706:19784;7715:6;;2024:14:2;7715:6:77;;:::i;:::-;706:19784;2024:14:2;;7706:37:77;706:19784;;7775:32;706:19784;7775:32;;2024:14:2;;;;;7775:32:77;;;;706:19784;7775:32;;:::i;:::-;7814:63;;;;;706:19784;;2024:14:2;7814:63:77;;706:19784;;;;;;;;7814:63;706:19784;;;;;7814:63;;;:::i;:::-;;;;;;;;;;;;;;706:19784;7891:15;;:36;:15;;:36;:::i;:::-;336:42:2;7883:45:77;;;;706:19784;;7883:45;2024:14:2;7883:45:77;;706:19784;7883:45;;2024:14:2;7883:45:77;;706:19784;7883:45;;336:42:2;7883:45:77;;;;;;;;;;;706:19784;-1:-1:-1;;706:19784:77;;7974:31;706:19784;7951:89;;;706:19784;;;;;7951:89;;706:19784;;;2024:14:2;;;706:19784:77;2024:14:2;;;;;;;7951:89:77;706:19784;2024:14:2;;;7951:89:77;2024:14:2;7951:89:77;336:42:2;7935:106:77;;;;706:19784;2024:14:2;706:19784:77;;;7935:106;;;;2024:14:2;7935:106:77;;706:19784;;7935:106;;2024:14:2;706:19784:77;2024:14:2;;;;:::i;:::-;7935:106:77;;;336:42:2;7935:106:77;;;;;;;;;;;706:19784;2024:14:2;;706:19784:77;7481:8;2024:14:2;;;706:19784:77;8047:63;;;;;;706:19784;;;8047:63;706:19784;;8047:63;;;;;;;2024:14:2;8047:63:77;;706:19784;8047:63;;;:::i;:::-;;;;;;;;;;;;;706:19784;;8047:63;706:19784;;;;;;;;7935:106;;;;;:::i;:::-;706:19784;;7935:106;;;;;706:19784;;;;;;;;;7883:45;;;;;:::i;:::-;706:19784;;7883:45;;;;;706:19784;;;;;;;;;7814:63;;;;;:::i;:::-;706:19784;;7814:63;;;;;706:19784;;;;;;;;;7630:39;2024:14:2;7630:39:77;;7715:6;7630:39;;;;;706:19784;7630:39;706:19784;7630:39;;;;;;;:::i;:::-;;;-1:-1:-1;7630:39:77;;;7481:47;;;;;706:19784;7481:47;;706:19784;7481:47;;;;;;2024:14:2;7481:47:77;;;:::i;:::-;;;2024:14:2;;;;;;;7481:47:77;;;;;;;-1:-1:-1;7481:47:77;;7388:20;;;;294:80:98;7388:20:77;;;:::i;:::-;;;;;7364:18;;;;;706:19784;7364:18;706:19784;7364:18;;;;;;;:::i;:::-;;;;;706:19784;;;;;;;;;;;;;817:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;706:19784;;806:28;706:19784;;;;;;;;806:28;706:19784;;;817:17;706:19784;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;706:19784:77;;;;;-1:-1:-1;706:19784:77;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;706:19784:77;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;706:19784:77;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;706:19784:77;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;-1:-1:-1;706:19784:77;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::o;:::-;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;2024:14:2:-;;;;;;;;;;706:19784:77;;;;;;;2024:14:2;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;706:19784:77;2024:14:2;;706:19784:77;2024:14:2;;;;;;706:19784:77;;2024:14:2;;;706:19784:77;2024:14:2;;;;;;;;;;706:19784:77;;;;;;;;2024:14:2;;706:19784:77;2024:14:2;;;;;;706:19784:77;;2024:14:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;706:19784:77;;;;;;;;;;2024:14:2;;;;;;;;;;;;:::o;:::-;;;706:19784:77;;;;2024:14:2;706:19784:77;;;;;;;;2024:14:2;;;;;;;;;;;;;;;;;;;;;;;706:19784:77;2024:14:2;;706:19784:77;;;2024:14:2;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;706:19784:77;;2024:14:2;;;706:19784:77;2024:14:2;;;;706:19784:77;;2024:14:2;;;706:19784:77;2024:14:2;;;;;706:19784:77;;2024:14:2;;;;;;;;;;;;706:19784:77;2024:14:2;;;706:19784:77;;;2024:14:2;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;706:19784:77;;;;;;;2024:14:2;;;;;;;;;;:::o;:::-;706:19784:77;2024:14:2;;706:19784:77;2024:14:2;;706:19784:77;2024:14:2;;;;:::o;:::-;;706:19784:77;2024:14:2;;;;;;706:19784:77;;;;2024:14:2;;;706:19784:77;2024:14:2;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::o;706:19784:77:-;;;;;;2024:14:2;;706:19784:77;;;;;;;;:::i;:::-;;;;;-1:-1:-1;706:19784:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;;;-1:-1:-1;706:19784:77;;;;;-1:-1:-1;706:19784:77;;-1:-1:-1;706:19784:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;706:19784:77;;;;;;;;;;;:::o;:::-;;;;;;2024:14:2;;706:19784:77;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;706:19784:77;;-1:-1:-1;706:19784:77;;-1:-1:-1;706:19784:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2024:14:2;706:19784:77;;;;;;;;2024:14:2;706:19784:77;;2024:14:2;706:19784:77;2024:14:2;;;;706:19784:77;;;;;;;;2024:14:2;706:19784:77;;2024:14:2;706:19784:77;2024:14:2;706:19784:77;2024:14:2;;706:19784:77;;;;;;;;2024:14:2;706:19784:77;;2024:14:2;706:19784:77;2024:14:2;706:19784:77;2024:14:2;;706:19784:77;;;;;;;;2024:14:2;706:19784:77;;2024:14:2;706:19784:77;2024:14:2;706:19784:77;2024:14:2;;706:19784:77;;;;;;;;2024:14:2;706:19784:77;;2024:14:2;706:19784:77;2024:14:2;706:19784:77;2024:14:2;;706:19784:77;;;;;;;;2024:14:2;706:19784:77;;2024:14:2;706:19784:77;2024:14:2;706:19784:77;2024:14:2;;706:19784:77;;;;;;;;2024:14:2;706:19784:77;;2024:14:2;706:19784:77;2024:14:2;;;706:19784:77;;;;;;;;;;;;;;;;;;;;2024:14:2;;;;706:19784:77;;;2024:14:2;;706:19784:77;2024:14:2;;706:19784:77;;;;2024:14:2;;706:19784:77;2024:14:2;;706:19784:77;;;;2024:14:2;;706:19784:77;2024:14:2;;706:19784:77;;;;2024:14:2;;706:19784:77;2024:14:2;;706:19784:77;;;;2024:14:2;;706:19784:77;2024:14:2;;706:19784:77;;;;2024:14:2;;706:19784:77;2024:14:2;;706:19784:77;;;;2024:14:2;;706:19784:77;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;706:19784:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;1243:204:4:-;1302:7;706:19784:77;;;;;;;1325:14:4;:::o;1298:143::-;706:19784:77;;;2024:14:2;1377:39:4;;706:19784:77;1377:39:4;;;706:19784:77;192:59:4;706:19784:77;;;2024:14:2;706:19784:77;1377:39:4;;;706:19784:77;1377:39:4;;;;;;;706:19784:77;1377:39:4;;;1298:143;1377:53;;;1370:60;:::o;1377:39::-;;;706:19784:77;1377:39:4;;706:19784:77;1377:39:4;;;;;;2024:14:2;1377:39:4;;;:::i;:::-;;;2024:14:2;;;;;1377:39:4;;;;;;-1:-1:-1;1377:39:4;;;706:19784:77;;;;;;;;;398:649:98;2933:19:15;706:19784:77;-1:-1:-1;706:19784:77;;;;2933:19:15;:::i;:::-;706:19784:77;;;-1:-1:-1;706:19784:77;;;;;;;:::i;:::-;;;;;;;;;;;9786:54:15;;706:19784:77;;9786:54:15;;;;;;;;;;706:19784:77;;;;;;:::i;9786:54:15:-;706:19784:77;9371:159:15;679:42;9371:159;;;706:19784:77;;;;580:42:98;576:467;;398:649;;:::o;576:467::-;655:14;;;2933:19:15;706:19784:77;-1:-1:-1;706:19784:77;;2933:19:15;:::i;:::-;706:19784:77;-1:-1:-1;706:19784:77;;;;;;;:::i;:::-;;;;;;;;;;;9786:54:15;;706:19784:77;;9786:54:15;;;;;;;;;;706:19784:77;;;;;;:::i;:::-;;;;;2024:14:2;9786:54:15;;;;;;;;:::i;:::-;706:19784:77;9371:159:15;679:42;9371:159;;;706:19784:77;723:14:98;;;2933:19:15;2321:4:48;-1:-1:-1;706:19784:77;;2933:19:15;:::i;:::-;706:19784:77;-1:-1:-1;706:19784:77;;;;;;;:::i;:::-;;;;;;;;;;;9786:54:15;;706:19784:77;;9786:54:15;;;;;;;;;;706:19784:77;;;;;;:::i;9786:54:15:-;706:19784:77;9371:159:15;679:42;9371:159;;;706:19784:77;-1:-1:-1;815:3:98;792:14;;;;;;706:19784:77;;;788:25:98;;;;;883:17;;:33;830:17;883;2933:19:15;706:19784:77;883:17:98;;;706:19784:77;883:17:98;;:::i;:::-;;:33;706:19784:77;-1:-1:-1;2933:19:15;;:::i;:::-;706:19784:77;-1:-1:-1;706:19784:77;;;9786:54:15;706:19784:77;;;;;;:::i;:::-;;;;;;;;;;;9786:54:15;;;706:19784:77;9786:54:15;;;;;;;;;706:19784:77;;;;;;:::i;:::-;;;;;2024:14:2;9786:54:15;;;;;;;;:::i;:::-;706:19784:77;9371:159:15;679:42;9371:159;;;830:14:98;:17;:::i;:::-;;:33;706:19784:77;;773:13:98;;;;788:25;;;;;;398:649::o;2815:199:15:-;307:66:98;304:1;2933:19:15;2815:199;2933:19;:::i;:::-;706:19784:77;-1:-1:-1;706:19784:77;;;9786:54:15;706:19784:77;;;;;;:::i;9786:54:15:-;706:19784:77;9371:159:15;679:42;9371:159;;;2815:199::o;:::-;;706:19784:77;2933:19:15;2815:199;2933:19;:::i;2815:199::-;706:19784:77;;2933:19:15;2815:199;2933:19;:::i;2815:199::-;2933:19;2815:199;706:19784:77;2815:199:15;2933:19;:::i;9842:280:48:-;9972:18;;;706:19784:77;9842:280:48;;10027:18;;706:19784:77;1206:48:48;;-1:-1:-1;1206:48:48;;706:19784:77;;;1077:202:48;9972:18;1077:202;;2024:14:2;539:66:48;2024:14:2;;709:66:48;706:19784:77;868:66:48;;2024:14:2;868:66:48;;;;2024:14:2;868:66:48;;;2024:14:2;706:19784:77;868:66:48;;;706:19784:77;868:66:48;1077:202;;;;;;:::i;:::-;706:19784:77;1060:225:48;;10027:18;;:::i;:::-;706:19784:77;;10068:48:48;9972:18;10068:48;;706:19784:77;;;;;;;2024:14:2;706:19784:77;;;2024:14:2;706:19784:77;10068:48:48;;;;;;:::i;:::-;706:19784:77;10058:59:48;;9842:280;:::o;1206:48::-;1240:13;1206:48;;;2270:110:4;706:19784:77;2349:24:4;;;;706:19784:77;;2349:24:4;2024:14:2;2349:24:4;;;;;2024:14:2;304:1:98;706:19784:77;;;2024:14:2;-1:-1:-1;2349:24:4;;;706:19784:77;2349:24:4;;;;;;;;2270:110;:::o;2349:24::-;-1:-1:-1;2349:24:4;;;:::i;2270:110::-;;706:19784:77;2349:24:4;;;;706:19784:77;;2349:24:4;2024:14:2;2349:24:4;;;;;2024:14:2;706:19784:77;;;2024:14:2;-1:-1:-1;2349:24:4;;;706:19784:77;2349:24:4;;;;;;;;2270:110;:::o;3710:::-;;706:19784:77;3789:24:4;;;;706:19784:77;;3789:24:4;2024:14:2;3789:24:4;;;;;2024:14:2;706:19784:77;;;2024:14:2;-1:-1:-1;3789:24:4;;;706:19784:77;3789:24:4;;;;;;;;3710:110;:::o;1526:548:98:-;706:19784:77;;;1835:1:98;1813:23;;;:53;;;1798:249;1812:80;;;;1798:249;1812:105;;;;1798:249;1812:142;;;;1798:249;1812:142;;;706:19784:77;;;;;2015:21:98;;;706:19784:77;;;2015:21:98;;;;706:19784:77;2015:21:98;;:::i;:::-;706:19784:77;2005:32:98;;706:19784:77;1798:249:98;;1812:142;;1526:548;:::o;1812:142::-;1929:21;;;:25;;1812:142;;:105;1896:21;1748:42;1896:21;;1812:105;;:80;1871:21;1672:42;1871:21;;1812:80;;1813:53;1840:26;1862:4;1840:26;;;1813:53;;1051:297;1144:5;;;:::i;:::-;1187:1;;1166:17;;336:42:2;1156:33:98;;;;706:19784:77;;1156:33:98;2024:14:2;1156:33:98;;1166:22;1156:33;;;706:19784:77;1156:33:98;;;;336:42:2;1156:33:98;;;;;;;;1051:297;706:19784:77;;;336:42:2;1195:71:98;;;;706:19784:77;;2024:14:2;1195:71:98;;1222:42;1205:60;;;1156:33;1195:71;;706:19784:77;1195:71:98;;1156:33;1195:71;336:42:2;1195:71:98;;;;;;;;;;;1051:297;1272:71;;336:42:2;1272:71:98;;;;1299:42;706:19784:77;;1272:71:98;2024:14:2;1272:71:98;;1282:60;;1156:33;1272:71;;706:19784:77;1272:71:98;;1156:33;1272:71;336:42:2;1272:71:98;;;;;;;;1051:297;;:::o;1272:71::-;;;;;;:::i;:::-;706:19784:77;;1051:297:98;:::o;1195:71::-;;;;;:::i;:::-;706:19784:77;;1195:71:98;;;;1156:33;;;;706:19784:77;1156:33:98;;;:::i;:::-;;;;;9784:123:6;706:19784:77;;-1:-1:-1;24321:12:6;10311:19;;:43;;;;9784:123;706:19784:77;10301:54:6;;;;706:19784:77;;10301:54:6;2024:14:2;10301:54:6;;706:19784:77;;10301:54:6;;;706:19784:77;10301:54:6;;;;706:19784:77;10301:54:6;;;;;;;;9784:123;24065:53;;10416:2;24065:53;10405:13;:31;;;;9784:123;10401:1280;;;10627:42;10612:58;;:120;;;;;10401:1280;10602:131;706:19784:77;10602:131:6;;;;706:19784:77;;10602:131:6;2024:14:2;10602:131:6;;706:19784:77;;10301:54:6;10602:131;;706:19784:77;10602:131:6;;10301:54;10602:131;706:19784:77;10602:131:6;;;;;;;;10401:1280;;;9784:123::o;10612:120::-;10689:42;10674:58;;;10612:120;;;10401:1280;10765:5;24065:53;10754:16;:37;;;;10401:1280;10750:931;;;10941:42;10926:58;;:120;;;;;10916:131;706:19784:77;10916:131:6;;;;706:19784:77;;10916:131:6;2024:14:2;10916:131:6;;706:19784:77;;10301:54:6;10916:131;;706:19784:77;10916:131:6;;10301:54;10916:131;706:19784:77;10916:131:6;;;;;;;;10750:931;;9784:123::o;10926:120::-;11003:42;10988:58;;;10926:120;;;10750:931;11079:5;24065:53;11068:16;:36;;;;10750:931;11064:617;;10750:931;;706:19784:77:o;11064:617:6:-;11274:42;11259:58;;:120;;;;11064:617;706:19784:77;11249:131:6;;;;706:19784:77;;11249:131:6;2024:14:2;11249:131:6;;706:19784:77;;10301:54:6;11249:131;;706:19784:77;11249:131:6;;10301:54;11249:131;706:19784:77;11249:131:6;;;;;;;;;;;11064:617;11404:58;;11419:42;11404:58;;:120;;;;11064:617;706:19784:77;11394:131:6;;;;706:19784:77;;11394:131:6;2024:14:2;11394:131:6;;706:19784:77;;10301:54:6;11394:131;;706:19784:77;11394:131:6;;10301:54;11394:131;706:19784:77;11394:131:6;;;;;;;;;;;11064:617;11549:58;;11564:42;11549:58;;:120;;;;;11064:617;11539:131;706:19784:77;11539:131:6;;;;706:19784:77;;11539:131:6;2024:14:2;11539:131:6;;706:19784:77;;10301:54:6;11539:131;;706:19784:77;11539:131:6;;10301:54;11539:131;706:19784:77;11539:131:6;;;;;;;11064:617;11539:131;;;;;;:::i;11549:120::-;11626:42;11611:58;;;11549:120;;;11394:131;;;;;:::i;:::-;706:19784:77;;11394:131:6;;;;11404:120;11466:58;11481:42;11466:58;;11404:120;;11249:131;;;;;:::i;:::-;706:19784:77;;11249:131:6;;;;11259:120;11321:58;11336:42;11321:58;;11259:120;;11068:36;24065:53;11099:5;24065:53;11088:16;11068:36;;10754:37;24065:53;10785:6;24065:53;10774:17;10754:37;;10405:31;24065:53;10433:3;24065:53;10422:14;10405:31;;10301:54;;;;;:::i;:::-;;;;10311:43;10334:20;10349:4;10334:20;;10311:43;;706:19784:77;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;15393:300:97:-;-1:-1:-1;706:19784:77;15511:42:97;706:19784:77;15393:300:97;15511:42;:::i;:::-;706:19784:77;15594:11:97;706:19784:77;15594:11:97;:::i;706:19784:77:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15586:55:97;;;706:19784:77;15586:55:97;;;;;;;-1:-1:-1;15586:55:97;;;15393:300;706:19784:77;2024:14:2;706:19784:77;;15654:34:97;;;;;;;;;;2024:14:2;;;;;15393:300:97;:::o;15586:55::-;;;;;;-1:-1:-1;15586:55:97;;;;;;:::i;:::-;;;;15967:316;706:19784:77;;;16149:20:97;2024:14:2;16149:20:97;;706:19784:77;16149:20:97;;;706:19784:77;-1:-1:-1;16149:20:97;;;706:19784:77;16149:20:97;;;;;;;706:19784:77;16149:20:97;-1:-1:-1;16149:20:97;706:19784:77;16149:20:97;;;;;15967:316;706:19784:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;16217:11:97;706:19784:77;16217:11:97;:::i;706:19784:77:-;;;;;;;;16149:20:97;706:19784:77;;;;;;;;;;;;;;;;;;;:::i;:::-;16209:45:97;;;706:19784:77;16209:45:97;;;;;;;-1:-1:-1;16209:45:97;;;16260:18;15967:316;:::o;16209:45::-;;;;;;-1:-1:-1;16209:45:97;;;;;;:::i;16149:20::-;706:19784:77;16149:20:97;;;706:19784:77;16149:20:97;706:19784:77;16149:20:97;;;;;;;;;;:::i;:::-;;;;;;;1042:78:15;;;;;;;:::o;:::-;706:19784:77;;;;;;;;;1546:1263:15;706:19784:77;1664:10:15;;;;706:19784:77;;1970:8:15;;;;;;:20;;;1546:1263;1966:34;;2026:9;;;;:::i;:::-;2024:14:2;2038:1:15;2024:14:2;;;;;;;2234:1:15;2229:6;;;:18;;;1546:1263;2225:38;;706:19784:77;2277:20:15;;;:46;;;1546:1263;2273:82;;2455:7;;;;;;2493;;;;;2528:11;2493:7;;:::i;:::-;2528:11;:::i;:::-;2557:8;;;2553:24;;2600:9;;;;:::i;:::-;1042:78;706:19784:77;;;;;;;2451:352:15;1546:1263::o;2553:24::-;2567:10;;;:::o;2451:352::-;2630:173;;;;;;;;2451:352;;;;;1546:1263::o;2630:173::-;2672:7;;;;;;2707:11;2672:7;;;:::i;2707:11::-;2736:8;;;2732:24;;2779:9;;;;:::i;:::-;2038:1;2024:14:2;;;;;;;2630:173:15;;;;;;;2273:82;706:19784:77;;;;2332:23:15;706:19784:77;;;;2332:23:15;;:::i;2277:46::-;706:19784:77;;;2301:22:15;;2277:46;;2225:38;2256:7;;;;;;;;;:::i;2229:18::-;2239:8;;;;2229:18;;1966:34;1992:8;;;;;;:::o;1970:20::-;1982:8;;;;;1970:20;;706:19784:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;8278:1282:48;8416:22;;;;706:19784:77;;8399:40:48;;;;;706:19784:77;8399:40:48;706:19784:77;;;;;;;;;;;;;8399:40:48;;;;;;;;;;;;;:::i;:::-;706:19784:77;8389:51:48;;706:19784:77;;;;;8451:34:48;;8447:1109;706:19784:77;;;8525:14:48;;706:19784:77;8525:14:48;;;706:19784:77;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;:::i;:::-;;8399:40:48;;706:19784:77;;;;;;;;8164:3:48;706:19784:77;;8146:16:48;;;;;8202:8;;706:19784:77;8202:8:48;;;:::i;:::-;;706:19784:77;;;;7708:7:48;8399:40;7708:7;;706:19784:77;7727:6:48;706:19784:77;7727:6:48;;;8399:40;706:19784:77;;;;7717:17:48;7736:10;;;;706:19784:77;7748:14:48;;;706:19784:77;;;7764:14:48;7780:17;7764:14;;;706:19784:77;;;7780:17:48;;706:19784:77;;;;7667:138:48;8399:40;7667:138;;2024:14:2;1478:66:48;2024:14:2;;706:19784:77;1478:66:48;;706:19784:77;7736:10:48;1478:66;;2024:14:2;7748::48;1478:66;;2024:14:2;7764::48;1478:66;;2024:14:2;7780:17:48;1478:66;;706:19784:77;1478:66:48;;;706:19784:77;8416:22:48;1478:66;;2024:14:2;8416:22:48;7667:138;;;;;;:::i;:::-;706:19784:77;7650:161:48;;8177:34;;;;:::i;:::-;706:19784:77;;8131:13:48;;8146:16;;;;;;;706:19784:77;;8240:28:48;;8399:40;8240:28;;;;706:19784:77;;;;;;;;;;;;8240:28:48;;;;;;8399:40;8240:28;;;;;;:::i;:::-;706:19784:77;8230:39:48;;8750:14;7748;7736:10;8750:14;;706:19784:77;8766:14:48;;706:19784:77;;;8712:82:48;8399:40;8712:82;;2024:14:2;1799:66:48;2024:14:2;;706:19784:77;1799:66:48;;2024:14:2;7736:10:48;1799:66;;2024:14:2;7748::48;1799:66;;2024:14:2;7764::48;1799:66;;2024:14:2;7764::48;8712:82;;;7780:17;8712:82;;:::i;706:19784:77:-;;;2024:14:2;;8399:40:48;706:19784:77;;;;;;-1:-1:-1;706:19784:77;;;;;;;;8447:1109:48;706:19784:77;8812:29:48;;706:19784:77;;8998:16:48;;;;8399:40;706:19784:77;;;;8988:27:48;706:19784:77;;;8959:70:48;8399:40;8959:70;;2024:14:2;1979:66:48;2024:14:2;;706:19784:77;1979:66:48;;2024:14:2;1979:66:48;;;2024:14:2;1979:66:48;8959:70;;;;;;:::i;8808:748::-;2867:4;9047:35;;2867:4;;9216:18;;;706:19784:77;;;;9181:67:48;8399:40;9181:67;;2024:14:2;2174:66:48;2024:14:2;;706:19784:77;1979:66:48;;2024:14:2;1979:66:48;;;2024:14:2;1979:66:48;9181:67;;;;;;:::i;9043:513::-;2556:4;9266:28;;2556:4;;9443:15;;;706:19784:77;;;;9414:58:48;8399:40;9414:58;;2024:14:2;1979:66:48;2024:14:2;;706:19784:77;1979:66:48;;2024:14:2;1979:66:48;;;2024:14:2;1979:66:48;9414:58;;;;;;:::i;9262:294::-;9523:26;706:19784:77;9523:26:48;;2024:14:2;706:19784:77;;9523:26:48;706:19784:77;;;;;;;8399:40:48;706:19784:77;;;;;;-1:-1:-1;706:19784:77;;;;;;;;701:863:97;706:19784:77;;2024:14:2;798:35:97;;706:19784:77;798:35:97;;;706:19784:77;;;;;;;;;;;;798:35:97;;;706:19784:77;798:35:97;;;;;;;-1:-1:-1;798:35:97;;;701:863;706:19784:77;;;866:35:97;2024:14:2;866:35:97;;706:19784:77;798:35:97;866;;706:19784:77;;;;;;;;;;;;866:35:97;798;866;706:19784:77;866:35:97;;;;;;;-1:-1:-1;866:35:97;;;701:863;916:18;;;;706:19784:77;;285:44:97;462:50;1037:32;;1033:109;;701:863;232:1;;;;;;;1278:17;232:1;;644:49;;285:44;644:49;1278:17;:::i;:::-;2024:14:2;232:1:97;2024:14:2;;;;;;;1326:27:97;1337:15;;;;:::i;:::-;1326:27;;:::i;:::-;706:19784:77;;1383:39:97;2024:14:2;1383:39:97;;706:19784:77;798:35:97;1383:39;;232:1;;706:19784:77;232:1:97;;706:19784:77;232:1:97;706:19784:77;;;232:1:97;-1:-1:-1;1383:39:97;798:35;1383:39;706:19784:77;1383:39:97;;;;;;;-1:-1:-1;1383:39:97;;;701:863;706:19784:77;;;1451:39:97;2024:14:2;1451:39:97;;706:19784:77;798:35:97;1451:39;;232:1;;706:19784:77;232:1:97;;706:19784:77;232:1:97;706:19784:77;;;232:1:97;-1:-1:-1;1451:39:97;798:35;1451:39;706:19784:77;1451:39:97;;;;;;;-1:-1:-1;1451:39:97;;;701:863;706:19784:77;;;1526:24:97;2024:14:2;1526:24:97;;798:35;1526:24;;2024:14:2;-1:-1:-1;1526:24:97;706:19784:77;1526:24:97;706:19784:77;1526:24:97;;;;;;;-1:-1:-1;1526:24:97;;;701:863;706:19784:77;;232:1:97;706:19784:77;;;;;;;;;;;;232:1:97;;;;;;706:19784:77;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;232:1:97;;;;;;;;:::i;1526:24::-;232:1;1526:24;;;706:19784:77;1526:24:97;;;-1:-1:-1;1526:24:97;;;;;;:::i;:::-;;;;;1451:39;;;;;;;-1:-1:-1;1451:39:97;;;;;;:::i;:::-;;;;;1383;;;;;;;-1:-1:-1;1383:39:97;;;;;;:::i;:::-;;;;;1033:109;706:19784:77;;;;1107:26:97;;1124:8;;-1:-1:-1;706:19784:77;;1107:26:97;706:19784:77;1124:8:97;;706:19784:77;;-1:-1:-1;706:19784:77;;;;1107:26:97;;;;;;;;;:::i;:::-;706:19784:77;1097:37:97;;1033:109;;706:19784:77;798:35:97;706:19784:77;;;;;;798:35:97;706:19784:77;;;;;;;;;;;;;;866:35:97;;;706:19784:77;866:35:97;;706:19784:77;866:35:97;;;;;;2024:14:2;866:35:97;;;:::i;:::-;;;2024:14:2;;;;;;866:35:97;;;;;;;-1:-1:-1;866:35:97;;798;;706:19784:77;798:35:97;;706:19784:77;798:35:97;;;;;;2024:14:2;798:35:97;;;:::i;:::-;;;2024:14:2;;;;;;798:35:97;;;;;;-1:-1:-1;798:35:97;;701:863;706:19784:77;;;;2024:14:2;798:35:97;;706:19784:77;798:35:97;;;706:19784:77;;;;;;;;;;;;798:35:97;;;;;;;;;;;-1:-1:-1;798:35:97;;;701:863;706:19784:77;;;866:35:97;2024:14:2;866:35:97;;706:19784:77;798:35:97;866;;706:19784:77;;;;;;;;;;;;866:35:97;798;866;;;;;;;;;-1:-1:-1;866:35:97;;;701:863;916:18;;;;706:19784:77;;285:44:97;462:50;1037:32;;1033:109;;701:863;232:1;;;;;;;1278:17;232:1;;644:49;;285:44;644:49;1278:17;:::i;:::-;2024:14:2;232:1:97;2024:14:2;;;;;;;1326:27:97;1337:15;;;;:::i;1326:27::-;706:19784:77;;;2024:14:2;1383:39:97;;706:19784:77;798:35:97;1383:39;;232:1;;706:19784:77;232:1:97;;706:19784:77;232:1:97;706:19784:77;;;232:1:97;-1:-1:-1;1383:39:97;798:35;1383:39;;;;;;;;;-1:-1:-1;1383:39:97;;;701:863;706:19784:77;;;1451:39:97;2024:14:2;1451:39:97;;706:19784:77;798:35:97;1451:39;;232:1;;706:19784:77;232:1:97;;706:19784:77;232:1:97;706:19784:77;;;232:1:97;-1:-1:-1;1451:39:97;798:35;1451:39;;;;;;;;;-1:-1:-1;1451:39:97;;;701:863;706:19784:77;-1:-1:-1;706:19784:77;;;;1526:24:97;;;;2024:14:2;1526:24:97;;798:35;1526:24;;2024:14:2;1526:24:97;;;;;;;-1:-1:-1;1526:24:97;;;706:19784:77;;232:1:97;706:19784:77;;;;;;;;;;;;232:1:97;;;;;;706:19784:77;;;:::i;1451:39:97:-;-1:-1:-1;1451:39:97;;;;;;;;;;;;;;:::i;:::-;;;;;1383;;;;;;-1:-1:-1;1383:39:97;;;;;;:::i;:::-;;;;1033:109;706:19784:77;;;;1107:26:97;;1124:8;;-1:-1:-1;706:19784:77;;1107:26:97;706:19784:77;1124:8:97;;706:19784:77;;-1:-1:-1;706:19784:77;;;;1107:26:97;;;;;;;;;:::i;:::-;706:19784:77;1097:37:97;;1033:109;;866:35;;;706:19784:77;866:35:97;;706:19784:77;866:35:97;;;;;;2024:14:2;866:35:97;;;:::i;:::-;;;2024:14:2;;;;;;866:35:97;;;;;;;-1:-1:-1;866:35:97;;798;;706:19784:77;798:35:97;;706:19784:77;798:35:97;;;;;;2024:14:2;798:35:97;;;:::i;:::-;;;2024:14:2;;;;;;798:35:97;;;;;;-1:-1:-1;798:35:97;","linkReferences":{}},"methodIdentifiers":{"IS_TEST()":"fa7626d4","excludeArtifacts()":"b5508aa9","excludeContracts()":"e20c9f71","excludeSelectors()":"b0464fdc","excludeSenders()":"1ed7831c","failed()":"ba414fa6","recovery()":"ddceafa9","setUp()":"0a9254e4","targetArtifactSelectors()":"66d9a9a0","targetArtifacts()":"85226c81","targetContracts()":"3f7286f4","targetInterfaces()":"2ade3880","targetSelectors()":"916a17c6","targetSenders()":"3e5e3c23","test_queue_payload(uint256,address,(uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint64)":"74348424","test_queue_payload_already_queued_fail(uint256,address,(uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint256,uint256)":"19d09f7b","test_queue_payload_ecdsa_with_code(uint256,address,(uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint64,bytes)":"2ea8f210","test_queue_payload_erc1271(address,bytes,address,(uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint64,bytes)":"bb080c28","test_queue_payload_erc1271_invalid_signature_fail(address,bytes,address,(uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint64,bytes,bytes4)":"fa183aff","test_queue_payload_erc1271_revert_fail(address,bytes,address,(uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint64,bytes,bytes)":"30e0518a","test_queue_payload_invalid_signature_fail_has_code(uint256,address,(uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint64,address,bytes)":"4d00a364","test_queue_payload_invalid_signature_fail_no_code(uint256,address,(uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint64,address)":"b5801a2b","test_recoverBranch((address,uint24,uint64)[],address,bytes32)":"b7404bcc","test_recover_fail_invalid_signature_flag(address,bytes32,uint8,bytes)":"240b126d","test_recover_sapient_signature_compact((uint256,address,(uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint256,uint256,uint256,uint256,(address,uint24,uint64)[],(address,uint24,uint64)[]))":"bcf69b19","test_recover_sapient_signature_compact_fail_deltaTime((uint256,address,(uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint256,uint256,uint256,uint256,(address,uint24,uint64)[],(address,uint24,uint64)[]))":"b945c1de","test_recover_sapient_signature_compact_fail_minTimestamp((uint256,address,(uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint256,uint256,uint256,uint256,(address,uint24,uint64)[],(address,uint24,uint64)[]))":"cba5a57c"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"}],\"name\":\"InvalidKind\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_wallet\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_signer\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_payloadHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"}],\"name\":\"NewQueuedPayload\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"IS_TEST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"excludedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"recovery\",\"outputs\":[{\"internalType\":\"contract RecoveryImp\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setUp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifactSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"artifact\",\"type\":\"string\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzArtifactSelector[]\",\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"targetedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetInterfaces\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"artifacts\",\"type\":\"string[]\"}],\"internalType\":\"struct StdInvariant.FuzzInterface[]\",\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_signerPk\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_wallet\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"_randomTime\",\"type\":\"uint64\"}],\"name\":\"test_queue_payload\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_signerPk\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_wallet\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_randomTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_waitBetweenQueues\",\"type\":\"uint256\"}],\"name\":\"test_queue_payload_already_queued_fail\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_signerPk\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_wallet\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"_randomTime\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"_randomCode\",\"type\":\"bytes\"}],\"name\":\"test_queue_payload_ecdsa_with_code\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_signer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_wallet\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"_randomTime\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"_signerCode\",\"type\":\"bytes\"}],\"name\":\"test_queue_payload_erc1271\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_signer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_wallet\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"_randomTime\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"_signerCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes4\",\"name\":\"_badMagicValue\",\"type\":\"bytes4\"}],\"name\":\"test_queue_payload_erc1271_invalid_signature_fail\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_signer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"_wallet\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"_randomTime\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"_signerCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_revertData\",\"type\":\"bytes\"}],\"name\":\"test_queue_payload_erc1271_revert_fail\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_signerPk\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_wallet\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"_randomTime\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_wrongSigner\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_randomCode\",\"type\":\"bytes\"}],\"name\":\"test_queue_payload_invalid_signature_fail_has_code\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_signerPk\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_wallet\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"_randomTime\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_wrongSigner\",\"type\":\"address\"}],\"name\":\"test_queue_payload_invalid_signature_fail_no_code\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"requiredDeltaTime\",\"type\":\"uint24\"},{\"internalType\":\"uint64\",\"name\":\"minTimestamp\",\"type\":\"uint64\"}],\"internalType\":\"struct RecoveryTest.Signer[]\",\"name\":\"signers\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"wallet\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"payloadHash\",\"type\":\"bytes32\"}],\"name\":\"test_recoverBranch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_wallet\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"_payloadHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"_invalidSignatureFlag\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"_suffix\",\"type\":\"bytes\"}],\"name\":\"test_recover_fail_invalid_signature_flag\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signerPk\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"wallet\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"payload\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"passedTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredDeltaTime\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"requiredDeltaTime\",\"type\":\"uint24\"},{\"internalType\":\"uint64\",\"name\":\"minTimestamp\",\"type\":\"uint64\"}],\"internalType\":\"struct RecoveryTest.other_leaf[]\",\"name\":\"suffixes\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"requiredDeltaTime\",\"type\":\"uint24\"},{\"internalType\":\"uint64\",\"name\":\"minTimestamp\",\"type\":\"uint64\"}],\"internalType\":\"struct RecoveryTest.other_leaf[]\",\"name\":\"prefixes\",\"type\":\"tuple[]\"}],\"internalType\":\"struct RecoveryTest.test_recover_sapient_signature_compact_params\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"test_recover_sapient_signature_compact\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signerPk\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"wallet\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"payload\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"passedTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredDeltaTime\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"requiredDeltaTime\",\"type\":\"uint24\"},{\"internalType\":\"uint64\",\"name\":\"minTimestamp\",\"type\":\"uint64\"}],\"internalType\":\"struct RecoveryTest.other_leaf[]\",\"name\":\"suffixes\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"requiredDeltaTime\",\"type\":\"uint24\"},{\"internalType\":\"uint64\",\"name\":\"minTimestamp\",\"type\":\"uint64\"}],\"internalType\":\"struct RecoveryTest.other_leaf[]\",\"name\":\"prefixes\",\"type\":\"tuple[]\"}],\"internalType\":\"struct RecoveryTest.test_recover_sapient_signature_compact_params\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"test_recover_sapient_signature_compact_fail_deltaTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signerPk\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"wallet\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"payload\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"passedTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requiredDeltaTime\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"requiredDeltaTime\",\"type\":\"uint24\"},{\"internalType\":\"uint64\",\"name\":\"minTimestamp\",\"type\":\"uint64\"}],\"internalType\":\"struct RecoveryTest.other_leaf[]\",\"name\":\"suffixes\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"requiredDeltaTime\",\"type\":\"uint24\"},{\"internalType\":\"uint64\",\"name\":\"minTimestamp\",\"type\":\"uint64\"}],\"internalType\":\"struct RecoveryTest.other_leaf[]\",\"name\":\"prefixes\",\"type\":\"tuple[]\"}],\"internalType\":\"struct RecoveryTest.test_recover_sapient_signature_compact_params\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"test_recover_sapient_signature_compact_fail_minTimestamp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"InvalidKind(uint8)\":[{\"notice\":\"Error thrown when the kind is invalid\"}]},\"events\":{\"NewQueuedPayload(address,address,bytes32,uint256)\":{\"notice\":\"Emitted when a new payload is queued\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/extensions/recovery/Recovery.t.sol\":\"RecoveryTest\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/extensions/recovery/Recovery.sol\":{\"keccak256\":\"0xb66a9701b0c617bfbcc80ce9a898168d03b0381dd305d411500beafd849f8bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4f2ecb6d97f34d65d46285ae8ba85868744da7e08dc1fa5c8aee0395db53a748\",\"dweb:/ipfs/QmVfo7cgvQbELX198KBJFfmfZbAgtnyjDivxFumr4dSxDG\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/interfaces/IERC1271.sol\":{\"keccak256\":\"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b\",\"dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF\"]},\"src/modules/interfaces/ISapient.sol\":{\"keccak256\":\"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489\",\"dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"src/utils/LibOptim.sol\":{\"keccak256\":\"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81\",\"dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x\"]},\"test/extensions/recovery/Recovery.t.sol\":{\"keccak256\":\"0xf95ed22a5b441041c26f8af093341f2127b26eb3d5a9035f84b004451b38b89b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d73ed40fa30a33d26d2e645bdc847daebcdc956bf2b5b20ee060d91b55465d09\",\"dweb:/ipfs/QmYAdvCPSP5GBDmgwF3UqTdPKn2qwNeCQM4x3pXa6ZS3E5\"]},\"test/utils/PrimitivesRPC.sol\":{\"keccak256\":\"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe\",\"dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv\"]},\"test/utils/TestUtils.sol\":{\"keccak256\":\"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad\",\"dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint8","name":"kind","type":"uint8"}],"type":"error","name":"InvalidKind"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address","indexed":false},{"internalType":"address","name":"_signer","type":"address","indexed":false},{"internalType":"bytes32","name":"_payloadHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_timestamp","type":"uint256","indexed":false}],"type":"event","name":"NewQueuedPayload","anonymous":false},{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log","anonymous":false},{"inputs":[{"internalType":"address","name":"","type":"address","indexed":false}],"type":"event","name":"log_address","anonymous":false},{"inputs":[{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"log_bytes","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32","indexed":false}],"type":"event","name":"log_bytes32","anonymous":false},{"inputs":[{"internalType":"int256","name":"","type":"int256","indexed":false}],"type":"event","name":"log_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address","name":"val","type":"address","indexed":false}],"type":"event","name":"log_named_address","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes","name":"val","type":"bytes","indexed":false}],"type":"event","name":"log_named_bytes","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes32","name":"val","type":"bytes32","indexed":false}],"type":"event","name":"log_named_bytes32","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false}],"type":"event","name":"log_named_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"string","name":"val","type":"string","indexed":false}],"type":"event","name":"log_named_string","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false}],"type":"event","name":"log_named_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log_string","anonymous":false},{"inputs":[{"internalType":"uint256","name":"","type":"uint256","indexed":false}],"type":"event","name":"log_uint","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"logs","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"IS_TEST","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeArtifacts","outputs":[{"internalType":"string[]","name":"excludedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeContracts","outputs":[{"internalType":"address[]","name":"excludedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"excludedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSenders","outputs":[{"internalType":"address[]","name":"excludedSenders_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"failed","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"recovery","outputs":[{"internalType":"contract RecoveryImp","name":"","type":"address"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"setUp"},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifactSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzArtifactSelector[]","name":"targetedArtifactSelectors_","type":"tuple[]","components":[{"internalType":"string","name":"artifact","type":"string"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifacts","outputs":[{"internalType":"string[]","name":"targetedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetContracts","outputs":[{"internalType":"address[]","name":"targetedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetInterfaces","outputs":[{"internalType":"struct StdInvariant.FuzzInterface[]","name":"targetedInterfaces_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"string[]","name":"artifacts","type":"string[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"targetedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSenders","outputs":[{"internalType":"address[]","name":"targetedSenders_","type":"address[]"}]},{"inputs":[{"internalType":"uint256","name":"_signerPk","type":"uint256"},{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"uint64","name":"_randomTime","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"test_queue_payload"},{"inputs":[{"internalType":"uint256","name":"_signerPk","type":"uint256"},{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"uint256","name":"_randomTime","type":"uint256"},{"internalType":"uint256","name":"_waitBetweenQueues","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"test_queue_payload_already_queued_fail"},{"inputs":[{"internalType":"uint256","name":"_signerPk","type":"uint256"},{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"uint64","name":"_randomTime","type":"uint64"},{"internalType":"bytes","name":"_randomCode","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"test_queue_payload_ecdsa_with_code"},{"inputs":[{"internalType":"address","name":"_signer","type":"address"},{"internalType":"bytes","name":"_signature","type":"bytes"},{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"uint64","name":"_randomTime","type":"uint64"},{"internalType":"bytes","name":"_signerCode","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"test_queue_payload_erc1271"},{"inputs":[{"internalType":"address","name":"_signer","type":"address"},{"internalType":"bytes","name":"_signature","type":"bytes"},{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"uint64","name":"_randomTime","type":"uint64"},{"internalType":"bytes","name":"_signerCode","type":"bytes"},{"internalType":"bytes4","name":"_badMagicValue","type":"bytes4"}],"stateMutability":"nonpayable","type":"function","name":"test_queue_payload_erc1271_invalid_signature_fail"},{"inputs":[{"internalType":"address","name":"_signer","type":"address"},{"internalType":"bytes","name":"_signature","type":"bytes"},{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"uint64","name":"_randomTime","type":"uint64"},{"internalType":"bytes","name":"_signerCode","type":"bytes"},{"internalType":"bytes","name":"_revertData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"test_queue_payload_erc1271_revert_fail"},{"inputs":[{"internalType":"uint256","name":"_signerPk","type":"uint256"},{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"uint64","name":"_randomTime","type":"uint64"},{"internalType":"address","name":"_wrongSigner","type":"address"},{"internalType":"bytes","name":"_randomCode","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"test_queue_payload_invalid_signature_fail_has_code"},{"inputs":[{"internalType":"uint256","name":"_signerPk","type":"uint256"},{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"uint64","name":"_randomTime","type":"uint64"},{"internalType":"address","name":"_wrongSigner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"test_queue_payload_invalid_signature_fail_no_code"},{"inputs":[{"internalType":"struct RecoveryTest.Signer[]","name":"signers","type":"tuple[]","components":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"uint24","name":"requiredDeltaTime","type":"uint24"},{"internalType":"uint64","name":"minTimestamp","type":"uint64"}]},{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bytes32","name":"payloadHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"test_recoverBranch"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"bytes32","name":"_payloadHash","type":"bytes32"},{"internalType":"uint8","name":"_invalidSignatureFlag","type":"uint8"},{"internalType":"bytes","name":"_suffix","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"test_recover_fail_invalid_signature_flag"},{"inputs":[{"internalType":"struct RecoveryTest.test_recover_sapient_signature_compact_params","name":"params","type":"tuple","components":[{"internalType":"uint256","name":"signerPk","type":"uint256"},{"internalType":"address","name":"wallet","type":"address"},{"internalType":"struct Payload.Decoded","name":"payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"passedTime","type":"uint256"},{"internalType":"uint256","name":"minTimestamp","type":"uint256"},{"internalType":"uint256","name":"requiredDeltaTime","type":"uint256"},{"internalType":"struct RecoveryTest.other_leaf[]","name":"suffixes","type":"tuple[]","components":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"uint24","name":"requiredDeltaTime","type":"uint24"},{"internalType":"uint64","name":"minTimestamp","type":"uint64"}]},{"internalType":"struct RecoveryTest.other_leaf[]","name":"prefixes","type":"tuple[]","components":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"uint24","name":"requiredDeltaTime","type":"uint24"},{"internalType":"uint64","name":"minTimestamp","type":"uint64"}]}]}],"stateMutability":"nonpayable","type":"function","name":"test_recover_sapient_signature_compact"},{"inputs":[{"internalType":"struct RecoveryTest.test_recover_sapient_signature_compact_params","name":"params","type":"tuple","components":[{"internalType":"uint256","name":"signerPk","type":"uint256"},{"internalType":"address","name":"wallet","type":"address"},{"internalType":"struct Payload.Decoded","name":"payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"passedTime","type":"uint256"},{"internalType":"uint256","name":"minTimestamp","type":"uint256"},{"internalType":"uint256","name":"requiredDeltaTime","type":"uint256"},{"internalType":"struct RecoveryTest.other_leaf[]","name":"suffixes","type":"tuple[]","components":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"uint24","name":"requiredDeltaTime","type":"uint24"},{"internalType":"uint64","name":"minTimestamp","type":"uint64"}]},{"internalType":"struct RecoveryTest.other_leaf[]","name":"prefixes","type":"tuple[]","components":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"uint24","name":"requiredDeltaTime","type":"uint24"},{"internalType":"uint64","name":"minTimestamp","type":"uint64"}]}]}],"stateMutability":"nonpayable","type":"function","name":"test_recover_sapient_signature_compact_fail_deltaTime"},{"inputs":[{"internalType":"struct RecoveryTest.test_recover_sapient_signature_compact_params","name":"params","type":"tuple","components":[{"internalType":"uint256","name":"signerPk","type":"uint256"},{"internalType":"address","name":"wallet","type":"address"},{"internalType":"struct Payload.Decoded","name":"payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"passedTime","type":"uint256"},{"internalType":"uint256","name":"minTimestamp","type":"uint256"},{"internalType":"uint256","name":"requiredDeltaTime","type":"uint256"},{"internalType":"struct RecoveryTest.other_leaf[]","name":"suffixes","type":"tuple[]","components":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"uint24","name":"requiredDeltaTime","type":"uint24"},{"internalType":"uint64","name":"minTimestamp","type":"uint64"}]},{"internalType":"struct RecoveryTest.other_leaf[]","name":"prefixes","type":"tuple[]","components":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"uint24","name":"requiredDeltaTime","type":"uint24"},{"internalType":"uint64","name":"minTimestamp","type":"uint64"}]}]}],"stateMutability":"nonpayable","type":"function","name":"test_recover_sapient_signature_compact_fail_minTimestamp"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/extensions/recovery/Recovery.t.sol":"RecoveryTest"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/extensions/recovery/Recovery.sol":{"keccak256":"0xb66a9701b0c617bfbcc80ce9a898168d03b0381dd305d411500beafd849f8bde","urls":["bzz-raw://4f2ecb6d97f34d65d46285ae8ba85868744da7e08dc1fa5c8aee0395db53a748","dweb:/ipfs/QmVfo7cgvQbELX198KBJFfmfZbAgtnyjDivxFumr4dSxDG"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/interfaces/IERC1271.sol":{"keccak256":"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9","urls":["bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b","dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF"],"license":"Apache-2.0"},"src/modules/interfaces/ISapient.sol":{"keccak256":"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359","urls":["bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489","dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"src/utils/LibOptim.sol":{"keccak256":"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde","urls":["bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81","dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x"],"license":"Apache-2.0"},"test/extensions/recovery/Recovery.t.sol":{"keccak256":"0xf95ed22a5b441041c26f8af093341f2127b26eb3d5a9035f84b004451b38b89b","urls":["bzz-raw://d73ed40fa30a33d26d2e645bdc847daebcdc956bf2b5b20ee060d91b55465d09","dweb:/ipfs/QmYAdvCPSP5GBDmgwF3UqTdPKn2qwNeCQM4x3pXa6ZS3E5"],"license":"Apache-2.0"},"test/utils/PrimitivesRPC.sol":{"keccak256":"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe","urls":["bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe","dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv"],"license":"Apache-2.0"},"test/utils/TestUtils.sol":{"keccak256":"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79","urls":["bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad","dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa"],"license":"Apache-2.0"}},"version":1},"id":77} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Script.sol/Script.json b/contracts/artifacts/wallet-contracts-v3/Script.sol/Script.json new file mode 100644 index 00000000..21f1170f --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Script.sol/Script.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"IS_SCRIPT","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"IS_SCRIPT()":"f8ccbf47"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"IS_SCRIPT\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/forge-std/src/Script.sol\":\"Script\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/Script.sol\":{\"keccak256\":\"0xc942e27c7baae499beb01afbbae99f24d42af9a6e4aae675bc6901b704aa8e9b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0456008adf68947247f358b62863af4a8e349549d2260f2ff9569ff0e3cf5c98\",\"dweb:/ipfs/QmdviSUj2i7o3TPN5vd2xocqGMFVqjUzaiJTZRYyPxyHPx\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"view","type":"function","name":"IS_SCRIPT","outputs":[{"internalType":"bool","name":"","type":"bool"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"lib/forge-std/src/Script.sol":"Script"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/Script.sol":{"keccak256":"0xc942e27c7baae499beb01afbbae99f24d42af9a6e4aae675bc6901b704aa8e9b","urls":["bzz-raw://0456008adf68947247f358b62863af4a8e349549d2260f2ff9569ff0e3cf5c98","dweb:/ipfs/QmdviSUj2i7o3TPN5vd2xocqGMFVqjUzaiJTZRYyPxyHPx"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"}},"version":1},"id":3} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/SelfAuth.sol/SelfAuth.json b/contracts/artifacts/wallet-contracts-v3/SelfAuth.sol/SelfAuth.json new file mode 100644 index 00000000..df2e7360 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/SelfAuth.sol/SelfAuth.json @@ -0,0 +1 @@ +{"abi":[{"type":"error","name":"OnlySelf","inputs":[{"name":"_sender","type":"address","internalType":"address"}]}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"OnlySelf\",\"type\":\"error\"}],\"devdoc\":{\"author\":\"Agustin Aguilar, Michael Standen\",\"kind\":\"dev\",\"methods\":{},\"title\":\"SelfAuth\",\"version\":1},\"userdoc\":{\"errors\":{\"OnlySelf(address)\":[{\"notice\":\"Error thrown when the caller is not the same as the contract\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Modifier for checking if the caller is the same as the contract\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/modules/auth/SelfAuth.sol\":\"SelfAuth\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/modules/auth/SelfAuth.sol\":{\"keccak256\":\"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42\",\"dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_sender","type":"address"}],"type":"error","name":"OnlySelf"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/modules/auth/SelfAuth.sol":"SelfAuth"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/modules/auth/SelfAuth.sol":{"keccak256":"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c","urls":["bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42","dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W"],"license":"Apache-2.0"}},"version":1},"id":52} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/SessionErrors.sol/SessionErrors.json b/contracts/artifacts/wallet-contracts-v3/SessionErrors.sol/SessionErrors.json new file mode 100644 index 00000000..b4aa7357 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/SessionErrors.sol/SessionErrors.json @@ -0,0 +1 @@ +{"abi":[{"type":"error","name":"BlacklistedAddress","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"InvalidAttestation","inputs":[]},{"type":"error","name":"InvalidBlacklist","inputs":[]},{"type":"error","name":"InvalidChainId","inputs":[{"name":"invalidChainId","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidDelegateCall","inputs":[]},{"type":"error","name":"InvalidIdentitySigner","inputs":[]},{"type":"error","name":"InvalidImplicitResult","inputs":[]},{"type":"error","name":"InvalidLimitUsageIncrement","inputs":[]},{"type":"error","name":"InvalidNodeType","inputs":[{"name":"flag","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidPermission","inputs":[]},{"type":"error","name":"InvalidSelfCall","inputs":[]},{"type":"error","name":"InvalidSessionSigner","inputs":[{"name":"invalidSigner","type":"address","internalType":"address"}]},{"type":"error","name":"InvalidValue","inputs":[]},{"type":"error","name":"MissingPermission","inputs":[]},{"type":"error","name":"SessionExpired","inputs":[{"name":"deadline","type":"uint256","internalType":"uint256"}]}],"bytecode":{"object":"0x60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea26469706673582212206609f40b6da61255cdf073a50c0b1e0d042843a22c20def6c0deb2442abfae0c64736f6c634300081c0033","sourceMap":"161:1215:33:-:0;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x600080fdfea26469706673582212206609f40b6da61255cdf073a50c0b1e0d042843a22c20def6c0deb2442abfae0c64736f6c634300081c0033","sourceMap":"161:1215:33:-:0;;","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"BlacklistedAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAttestation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidBlacklist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"invalidChainId\",\"type\":\"uint256\"}],\"name\":\"InvalidChainId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidIdentitySigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidImplicitResult\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidLimitUsageIncrement\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"flag\",\"type\":\"uint256\"}],\"name\":\"InvalidNodeType\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPermission\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSelfCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"invalidSigner\",\"type\":\"address\"}],\"name\":\"InvalidSessionSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MissingPermission\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"SessionExpired\",\"type\":\"error\"}],\"devdoc\":{\"author\":\"Michael Standen\",\"kind\":\"dev\",\"methods\":{},\"title\":\"SessionErrors\",\"version\":1},\"userdoc\":{\"errors\":{\"BlacklistedAddress(address)\":[{\"notice\":\"Blacklisted address\"}],\"InvalidAttestation()\":[{\"notice\":\"Invalid attestation\"}],\"InvalidBlacklist()\":[{\"notice\":\"Invalid blacklist\"}],\"InvalidChainId(uint256)\":[{\"notice\":\"Invalid chainId\"}],\"InvalidDelegateCall()\":[{\"notice\":\"Invalid delegate call\"}],\"InvalidIdentitySigner()\":[{\"notice\":\"Invalid identity signer\"}],\"InvalidImplicitResult()\":[{\"notice\":\"Invalid implicit result\"}],\"InvalidLimitUsageIncrement()\":[{\"notice\":\"Invalid limit usage increment\"}],\"InvalidNodeType(uint256)\":[{\"notice\":\"Invalid node type in session configuration\"}],\"InvalidPermission()\":[{\"notice\":\"Invalid permission for explicit session\"}],\"InvalidSelfCall()\":[{\"notice\":\"Invalid self call\"}],\"InvalidSessionSigner(address)\":[{\"notice\":\"Invalid session signer\"}],\"InvalidValue()\":[{\"notice\":\"Invalid value\"}],\"MissingPermission()\":[{\"notice\":\"Missing permission for explicit session\"}],\"SessionExpired(uint256)\":[{\"notice\":\"Session expired\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Errors for the session manager\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/extensions/sessions/SessionErrors.sol\":\"SessionErrors\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/extensions/sessions/SessionErrors.sol\":{\"keccak256\":\"0xa7642b4ef1d2ac8e41bd6dca88c5a644cac21b3ebe79deb5013e21fb4aaab405\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ef80768f6c509a54ea5d3fb92cbf46363f945f071cc3664710770c09b3d2a978\",\"dweb:/ipfs/QmbRpicAiPSYQbKpjoDbanap9q5hYsqEMS1u7w7sqKEYTY\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"BlacklistedAddress"},{"inputs":[],"type":"error","name":"InvalidAttestation"},{"inputs":[],"type":"error","name":"InvalidBlacklist"},{"inputs":[{"internalType":"uint256","name":"invalidChainId","type":"uint256"}],"type":"error","name":"InvalidChainId"},{"inputs":[],"type":"error","name":"InvalidDelegateCall"},{"inputs":[],"type":"error","name":"InvalidIdentitySigner"},{"inputs":[],"type":"error","name":"InvalidImplicitResult"},{"inputs":[],"type":"error","name":"InvalidLimitUsageIncrement"},{"inputs":[{"internalType":"uint256","name":"flag","type":"uint256"}],"type":"error","name":"InvalidNodeType"},{"inputs":[],"type":"error","name":"InvalidPermission"},{"inputs":[],"type":"error","name":"InvalidSelfCall"},{"inputs":[{"internalType":"address","name":"invalidSigner","type":"address"}],"type":"error","name":"InvalidSessionSigner"},{"inputs":[],"type":"error","name":"InvalidValue"},{"inputs":[],"type":"error","name":"MissingPermission"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"}],"type":"error","name":"SessionExpired"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/extensions/sessions/SessionErrors.sol":"SessionErrors"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/extensions/sessions/SessionErrors.sol":{"keccak256":"0xa7642b4ef1d2ac8e41bd6dca88c5a644cac21b3ebe79deb5013e21fb4aaab405","urls":["bzz-raw://ef80768f6c509a54ea5d3fb92cbf46363f945f071cc3664710770c09b3d2a978","dweb:/ipfs/QmbRpicAiPSYQbKpjoDbanap9q5hYsqEMS1u7w7sqKEYTY"],"license":"Apache-2.0"}},"version":1},"id":33} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/SessionManager.sol/SessionManager.json b/contracts/artifacts/wallet-contracts-v3/SessionManager.sol/SessionManager.json new file mode 100644 index 00000000..976bb6c8 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/SessionManager.sol/SessionManager.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"VALUE_TRACKING_ADDRESS","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getLimitUsage","inputs":[{"name":"wallet","type":"address","internalType":"address"},{"name":"usageHash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"incrementUsageLimit","inputs":[{"name":"limits","type":"tuple[]","internalType":"struct UsageLimit[]","components":[{"name":"usageHash","type":"bytes32","internalType":"bytes32"},{"name":"usageAmount","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"recoverSapientSignature","inputs":[{"name":"payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"encodedSignature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"validatePermission","inputs":[{"name":"permission","type":"tuple","internalType":"struct Permission","components":[{"name":"target","type":"address","internalType":"address"},{"name":"rules","type":"tuple[]","internalType":"struct ParameterRule[]","components":[{"name":"cumulative","type":"bool","internalType":"bool"},{"name":"operation","type":"uint8","internalType":"enum ParameterOperation"},{"name":"value","type":"bytes32","internalType":"bytes32"},{"name":"offset","type":"uint256","internalType":"uint256"},{"name":"mask","type":"bytes32","internalType":"bytes32"}]}]},{"name":"call","type":"tuple","internalType":"struct Payload.Call","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"wallet","type":"address","internalType":"address"},{"name":"signer","type":"address","internalType":"address"},{"name":"usageLimits","type":"tuple[]","internalType":"struct UsageLimit[]","components":[{"name":"usageHash","type":"bytes32","internalType":"bytes32"},{"name":"usageAmount","type":"uint256","internalType":"uint256"}]}],"outputs":[{"name":"","type":"bool","internalType":"bool"},{"name":"newUsageLimits","type":"tuple[]","internalType":"struct UsageLimit[]","components":[{"name":"usageHash","type":"bytes32","internalType":"bytes32"},{"name":"usageAmount","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"event","name":"LimitUsageUpdated","inputs":[{"name":"wallet","type":"address","indexed":false,"internalType":"address"},{"name":"usageHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"usageAmount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"BlacklistedAddress","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"InvalidAttestation","inputs":[]},{"type":"error","name":"InvalidBlacklist","inputs":[]},{"type":"error","name":"InvalidCallsLength","inputs":[]},{"type":"error","name":"InvalidChainId","inputs":[{"name":"invalidChainId","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidDelegateCall","inputs":[]},{"type":"error","name":"InvalidIdentitySigner","inputs":[]},{"type":"error","name":"InvalidImplicitResult","inputs":[]},{"type":"error","name":"InvalidLimitUsageIncrement","inputs":[]},{"type":"error","name":"InvalidNodeType","inputs":[{"name":"flag","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidPayloadKind","inputs":[]},{"type":"error","name":"InvalidPermission","inputs":[]},{"type":"error","name":"InvalidSelfCall","inputs":[]},{"type":"error","name":"InvalidSessionSigner","inputs":[{"name":"invalidSigner","type":"address","internalType":"address"}]},{"type":"error","name":"InvalidValue","inputs":[]},{"type":"error","name":"MissingPermission","inputs":[]},{"type":"error","name":"SessionExpired","inputs":[{"name":"deadline","type":"uint256","internalType":"uint256"}]}],"bytecode":{"object":"0x608080604052346015576134c3908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c806313792a4a1461006757806323b3713e14610062578063313dade71461005d57806342de1418146100585763f916f3b21461005357600080fd5b610623565b6105a6565b6103df565b610184565b3461013a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013a5760043567ffffffffffffffff811161013a576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011261013a5760243567ffffffffffffffff811161013a573660238201121561013a57806004013567ffffffffffffffff811161013a57366024828401011161013a57610136926024610126930190600401610950565b6040519081529081906020820190565b0390f35b600080fd5b73ffffffffffffffffffffffffffffffffffffffff81160361013a57565b6044359061016a8261013f565b565b6064359061016a8261013f565b359061016a8261013f565b3461013a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013a576004356101bf8161013f565b73ffffffffffffffffffffffffffffffffffffffff602435911660005260006020526040600020906000526020526020604060002054604051908152f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff82111761024857604052565b6101fd565b60a0810190811067ffffffffffffffff82111761024857604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761024857604052565b6040519061016a604083610269565b6040519061016a60e083610269565b67ffffffffffffffff81116102485760051b60200190565b8015150361013a57565b359061016a826102e0565b908160e091031261013a5790565b81601f8201121561013a5780359061031a826102c8565b926103286040519485610269565b82845260208085019360061b8301019181831161013a57602001925b828410610352575050505090565b60408483031261013a576020604091825161036c8161022c565b863581528287013583820152815201930192610344565b906020808351928381520192019060005b8181106103a15750505090565b8251805185526020908101518186015260409094019390920191600101610394565b6040906103dc9392151581528160208201520190610383565b90565b3461013a5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013a5760043567ffffffffffffffff811161013a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011261013a57604051906104598261022c565b80600401356104678161013f565b825260248101359067ffffffffffffffff821161013a57013660238201121561013a576004810135610498816102c8565b916104a66040519384610269565b8183526020600460a08286019402830101019036821161013a57602401915b81831061054057505050602082015260243567ffffffffffffffff811161013a576104f49036906004016102f5565b906104fd61015d565b61050561016c565b906084359367ffffffffffffffff851161013a5761052a610530953690600401610303565b93610f74565b90610136604051928392836103c3565b60a08336031261013a57604051906105578261024d565b8335610562816102e0565b8252602084013590600482101561013a57826020928360a09501526040860135604082015260608601356060820152608086013560808201528152019201916104c5565b3461013a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013a5760043567ffffffffffffffff811161013a573660238201121561013a57806004013567ffffffffffffffff811161013a573660248260061b8401011161013a57602461062192016112bd565b005b3461013a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013a57602060405173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8152f35b3560ff8116810361013a5790565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561013a570180359067ffffffffffffffff821161013a57602001918160051b3603831361013a57565b604051906060820182811067ffffffffffffffff821117610248576040526000604083828152606060208201520152565b9061070d826102c8565b61071a6040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061074882946102c8565b019060005b82811061075957505050565b6020906107646106d2565b8282850101520161074d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b91908110156107df5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff218136030182121561013a570190565b610770565b356103dc816102e0565b80518210156107df5760209160051b010190565b6040519061080f8261022c565b60006020838281520152565b6040519061082a602083610269565b600080835282815b82811061083e57505050565b602090610849610802565b82828501015201610832565b9061085f826102c8565b61086c6040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061089a82946102c8565b019060005b8281106108ab57505050565b6020906108b6610802565b8282850101520161089f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461091e5760010190565b6108c2565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821161091e57565b919060ff61095d84610670565b16610dd7576040830191610971838561067e565b905015610dad57610985918495939561159c565b9161099a610993858361067e565b9050610703565b9060009460808501955b6109ae828461067e565b9050811015610cde576109cb816109c5848661067e565b9061079f565b6109d7608082016107e4565b610cb4576109e68289516107ee565b51805115610a305760019291816060610a196020610a2a95015173ffffffffffffffffffffffffffffffffffffffff1690565b9101519060408b0151923390611fe2565b016109a4565b91959392969050610a3f6106d2565b96602083019460005b8751811015610c9357610a95610a7c610a61838b6107ee565b515173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b15610b5c57610aa7610a61828a6107ee565b73ffffffffffffffffffffffffffffffffffffffff610add610a7c8a5173ffffffffffffffffffffffffffffffffffffffff1690565b911614610aec57600101610a48565b9097929850610b45610b569295968a600196610b3c60406060610b30610b138f8a906107ee565b51965b5173ffffffffffffffffffffffffffffffffffffffff1690565b94015192015160ff1690565b9133888c6119c6565b610b4f82896107ee565b52866107ee565b50610a2a565b90979298610b45908a600196610b3c60406060610b308d610bb4610b569b9e9f610b9a905173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff168952565b610bbc61081b565b6020890152610c8a610be2825173ffffffffffffffffffffffffffffffffffffffff1690565b855173ffffffffffffffffffffffffffffffffffffffff9091166020820190815273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee604083015290610c5381606081015b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610269565b5190203373ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000209060005260205260406000205490565b84890152610b16565b90979298610b45908a600196610b3c60406060610b30610b56999c9d610b16565b7faa25f2ad0000000000000000000000000000000000000000000000000000000060005260046000fd5b509392945090610cee8151610703565b9260009260005b8351811015610d70576020610d0a82866107ee565b5101515115801590610d59575b610d24575b600101610cf5565b93610d51600191610d3587876107ee565b51610d40828a6107ee565b52610d4b81896107ee565b506108f1565b949050610d1c565b506040610d6682866107ee565b5101511515610d17565b509094610da49250610da994938452610d9e610d97610d8f838561067e565b93909461067e565b9050610923565b9161079f565b612278565b5190565b7f542f0af50000000000000000000000000000000000000000000000000000000060005260046000fd5b7f720521200000000000000000000000000000000000000000000000000000000060005260046000fd5b356103dc8161013f565b906001820180921161091e57565b9190820180921161091e57565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561013a570180359067ffffffffffffffff821161013a5760200191813603831361013a57565b60041115610e8157565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9392919073ffffffffffffffffffffffffffffffffffffffff16845260606020850152602060a085019173ffffffffffffffffffffffffffffffffffffffff81511660608701520151604060808601528051809252602060c0860191019160005b818110610f2357505060409150930152565b909183518051151582526020810151906004821015610e815782608060a092602094856001970152604081015160408401526060810151606084015201516080820152019401910192919092610f11565b949091929394610f98815173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff610fb9610a7c86610e01565b9116036112a257855192610fdc610fd7602084019586515190610e19565b610855565b9460005b88518110156110135780610ff66001928b6107ee565b51611001828a6107ee565b5261100c81896107ee565b5001610fe0565b50909294919395875160005b885180518210156112915781611034916107ee565b516110586110456040890189610e26565b5060608301519081013591602090910190565b506080820151169061106a8151151590565b61113d575b60208101805161107e81610e77565b61108781610e77565b6110ad5750604001510361109f576001905b0161101f565b506000989750505050505050565b600381516110ba81610e77565b6110c381610e77565b036110da5750604001511061109f57600190611099565b600181516110e781610e77565b6110f081610e77565b036111075750604001511461109f57600190611099565b6002905161111481610e77565b61111d81610e77565b1461112d575b5050600190611099565b604001511161109f573880611123565b9691989795929093998a610c276111608c6040519283918c602084019687610eb0565b5190209660009361116f610802565b9c60005b87518110156112795761118681896107ee565b51511561122c578a611198828a6107ee565b5151146111a757600101611173565b6020949e50879a9198939c9d96506111c5906111da939c96986107ee565b519284840151915b82156111e5575b50610e19565b91829101529061106f565b6112249192506112158b73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b90600052602052604060002090565b5490386111d4565b6020949e506111da929b95509761127389899c99959e9f98939a61126d906112526102aa565b978c895260008a8a01528861126783836107ee565b526107ee565b50610e0b565b976111cd565b5096946020939d929b9c956111da929b95979a6111cd565b505083525060019650909450505050565b509250505060009190565b91908110156107df5760061b0190565b60005b8281106112cc57505050565b60206112d98285856112ad565b013561131e6112e98386866112ad565b353373ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000209060005260205260406000205490565b1161139857807f42063b8d32ac0a88f94053143bb30a789b3d5dfabb27d6c8a54e23d4fef30851606061135460019487876112ad565b3560206113628589896112ad565b0135336000526000602052604060002082600052602052806040600020556040519133835260208301526040820152a1016112c0565b7e2a700a0000000000000000000000000000000000000000000000000000000060005260046000fd5b604051906113ce8261024d565b6060608083600081526000602082015282604082015282808201520152565b9060041161013a5790600490565b9093929384831161013a57841161013a578101920390565b604051906114208261022c565b6000602083606081520152565b6040519060c0820182811067ffffffffffffffff8211176102485760405281600081526000602082015260006040820152600060608201526060608082015260a0611476611413565b910152565b90611485826102c8565b6114926040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06114c082946102c8565b019060005b8281106114d157505050565b6020906114dc61142d565b828285010152016114c5565b6040513d6000823e3d90fd5b604051906080820182811067ffffffffffffffff8211176102485760405281600081526000602082015260006040820152606061147661142d565b90611539826102c8565b6115466040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061157482946102c8565b019060005b82811061158557505050565b6020906115906114f4565b82828501015201611579565b909162ffffff926115ab6113c1565b50600091813560e81c60039516906115e26115da6115d46115cc858a610e19565b8985886113fb565b90612579565b939097610e19565b602087019473ffffffffffffffffffffffffffffffffffffffff61161a875173ffffffffffffffffffffffffffffffffffffffff1690565b161561190a5750600181019392919083013560f81c906116398261147b565b9560005b83811061183e5750505015159081611835575b5061180b576040840193611664858261067e565b9490506116708561152f565b95608088019687526000945b86861061168e57505050505050505090565b6116aa6116996114f4565b918681013560f81c91600190910190565b608082161515835296908251156117eb57607f1684518110156117c15760006116e961172b996116dc602094896107ee565b5160608701525b89612ab4565b9b9092916117048b6116ff896109c58d8461067e565b612c3b565b92604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa156117bc57611766610a7c600051610b166020860191829073ffffffffffffffffffffffffffffffffffffffff169052565b156117875761177f816001938b519061126783836107ee565b50019461167c565b7fc1e84ed6000000000000000000000000000000000000000000000000000000006000526117b86024906000600452565b6000fd5b6114e8565b7fbd8ba84d0000000000000000000000000000000000000000000000000000000060005260046000fd5b60006116e961172b99611806602094604088019060ff169052565b6116e3565b7feb6252040000000000000000000000000000000000000000000000000000000060005260046000fd5b90501538611650565b611866906020600061185d6118739a61185561142d565b50878b6129fe565b8a959195612ab4565b9c90929161170488612af7565b838052039060015afa156117bc5760005173ffffffffffffffffffffffffffffffffffffffff6118ba610a7c865173ffffffffffffffffffffffffffffffffffffffff1690565b9116036118e0576001916118ce828b6107ee565b526118d9818a6107ee565b500161163d565b7f9e5c658b0000000000000000000000000000000000000000000000000000000060005260046000fd5b807f9e5c658b0000000000000000000000000000000000000000000000000000000060049252fd5b6040519061193f8261024d565b60606080836000815260006020820152600060408201526000838201520152565b919091357fffffffff0000000000000000000000000000000000000000000000000000000081169260048110611994575050565b7fffffffff00000000000000000000000000000000000000000000000000000000929350829060040360031b1b161690565b939594909291926119d56106d2565b506119de611932565b9660005b8151811015611d45576119f8610a6182846107ee565b73ffffffffffffffffffffffffffffffffffffffff808716911614611a1f576001016119e2565b90611a3092939495969798506107ee565b51945b73ffffffffffffffffffffffffffffffffffffffff611a66875173ffffffffffffffffffffffffffffffffffffffff1690565b1615611d0157602086015180151580611cf7575b611cca5750606086015167ffffffffffffffff1680151580611cb7575b611c805750906109c5826040611aae94019061067e565b91611abb608084016107e4565b610cb457611ac883610e01565b73ffffffffffffffffffffffffffffffffffffffff163014611bce576080850160ff815151931692831015611ba457611b1592611b0591516107ee565b5190602087019484865193610f74565b9015611b7a5760209252013580611b63575b5060408083015191015110611b395790565b7faa7feadc0000000000000000000000000000000000000000000000000000000060005260046000fd5b611b7260408401918251610e19565b905238611b27565b7f868a64de0000000000000000000000000000000000000000000000000000000060005260046000fd5b7f3f904dc00000000000000000000000000000000000000000000000000000000060005260046000fd5b50509150506020611bf4611bee611be86040850185610e26565b906113ed565b90611960565b9101351590811591611c33575b50611c095790565b7f540733ea0000000000000000000000000000000000000000000000000000000060005260046000fd5b7f42de14180000000000000000000000000000000000000000000000000000000091507fffffffff0000000000000000000000000000000000000000000000000000000016141538611c01565b7fb1bbfdd50000000000000000000000000000000000000000000000000000000060005267ffffffffffffffff1660045260246000fd5b5067ffffffffffffffff81164211611a97565b7f331003b30000000000000000000000000000000000000000000000000000000060005260045260246000fd5b5046811415611a7a565b7fc1e84ed60000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff841660045260246000fd5b505090919293959495611a33565b9081602091031261013a575190565b60005b838110611d755750506000910152565b8181015183820152602001611d65565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093611dc181518092818752878088019101611d62565b0116010190565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b9073ffffffffffffffffffffffffffffffffffffffff8235611e288161013f565b1681526020820135602082015260408201357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18336030181121561013a57820160208135910167ffffffffffffffff821161013a57813603811361013a57611ea060c09291839260e0604087015260e0860191611dc8565b9360608101356060850152611ec3611eba608083016102ea565b15156080860152565b611edb611ed260a083016102ea565b151560a0860152565b013591015290565b73ffffffffffffffffffffffffffffffffffffffff6103dc94921681526060602082015273ffffffffffffffffffffffffffffffffffffffff83511660608201527fffffffff000000000000000000000000000000000000000000000000000000006020840151166080820152604083015160a0820152606083015160c082015260a0611f80608085015160c060e0850152610120840190611d85565b930151927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa082820301610100830152602067ffffffffffffffff81611fce8751604086526040860190611d85565b960151169101526040818403910152611e07565b92939091612007610a7c865173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff8216036121bf5761202f608085016107e4565b610cb45761203d8282612d8a565b61217c57506120549061204f84610e01565b612d8a565b61212e576020820135611b3957602082612076610a7c610a7c6120ac96610e01565b60405180809681947f9d043a66000000000000000000000000000000000000000000000000000000008352898860048501611ee3565b03915afa9182156117bc576000926120fb575b506120ca9192612e55565b036120d157565b7f0881ad5d0000000000000000000000000000000000000000000000000000000060005260046000fd5b6120ca92506121219060203d602011612127575b6121198183610269565b810190611d53565b916120bf565b503d61210f565b6117b861213a83610e01565b7fd33f19e70000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff16600452602490565b7fd33f19e70000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff1660045260246000fd5b7fc1e84ed60000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff1660045260246000fd5b9060206103dc928181520190610383565b92919267ffffffffffffffff8211610248576040519161225b601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200184610269565b82948184528183011161013a578281602093846000960137010152565b908051612283575050565b61228c82610e01565b73ffffffffffffffffffffffffffffffffffffffff1630148015906124ae575b61139857600092835b825185101561230a576122d89060206122ce87866107ee565b5101515190610e19565b9360406122e582856107ee565b5101516122f6575b600101936122b5565b936123026001916108f1565b9490506122ed565b61231691939450610855565b60009081935b83518510156124435760005b602061233487876107ee565b51015151811015612381578061237a61235d60019360206123558b8b6107ee565b5101516107ee565b5195612368816108f1565b9661237382886107ee565b52856107ee565b5001612328565b509493600190604061239382876107ee565b5101516123a3575b01939461231c565b61243d6123b3610a6183886107ee565b6040516123ff81610c27602082019485602073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee9193929373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b51902094604061240f84896107ee565b51015161241a6102aa565b968752602087015261242b816108f1565b9561243682876107ee565b52846107ee565b5061239b565b9493506124a09250612499915060405161248b81610c2760208201947f42de141800000000000000000000000000000000000000000000000000000000865260248301612202565b519020926040810190610e26565b3691612213565b602081519101200361139857565b50600160c083013514156122ac565b906124c7826102c8565b6124d46040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061250282946102c8565b019060005b82811061251357505050565b60209061251e611932565b82828501015201612507565b90612534826102c8565b6125416040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061256f82946102c8565b0190602036910137565b916125826113c1565b60009384908190612595605e87046124bd565b91606085019283525b8681106125ae5750505152929150565b8181013560fc81901c97916001019060f81c81891561294f57506001891461291d576002891461277857600389146126ad575060048814612618577f0ad9979000000000000000000000000000000000000000000000000000000000600052600488905260246000fd5b90919293949596506020860173ffffffffffffffffffffffffffffffffffffffff612657825173ffffffffffffffffffffffffffffffffffffffff1690565b166118e0578382013560601c815260149091019061267d9061267890610b16565b613086565b865180156126a7579061269891600052602052604060002090565b86525b9594939291909561259e565b50612698565b9890919293949596975061180b57600f60019816600f8114612767575b81906126d58161252a565b604089019081528a60005b83811061272857505050506126fa826127009285876113fb565b90613012565b86518015612722579061271b91600052602052604060002090565b865261269b565b5061271b565b61275f958881013560601c9060140196906127448386516107ee565b9073ffffffffffffffffffffffffffffffffffffffff169052565b018b906126e0565b50600281019083013560f01c6126ca565b6127db9698506127d36127e492600f6115d4939c96979a95989c169087929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b979088610e19565b809787876113fb565b93909593612906575b6020860173ffffffffffffffffffffffffffffffffffffffff612824825173ffffffffffffffffffffffffffffffffffffffff1690565b1661289c575b5060005b6060870151805182101561286b579061286461284c826001946107ee565b519b8a51612859826108f1565b9d61126783836107ee565b500161282e565b5050929096959391979486518015156000146128955761271b915190600052602052604060002090565b505161271b565b602089016128c1610a7c825173ffffffffffffffffffffffffffffffffffffffff1690565b6118e0576128e6612900925173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff169052565b3861282a565b9161180b57600191604086015160408901526127ed565b508551969750949593949293919290916020820191840135908015612722579061271b91600052602052604060002090565b92939495969798505050612961611932565b8184018035606090811c8352601482013560208401526034820135604084015260549091013560c01c908201529461299d605c83018486612f07565b80939160808901526129b09185876113fb565b6129b991612fbd565b87516129f292919080156129f857906129da91600052602052604060002090565b885285516129e7826108f1565b9761126783836107ee565b5061269b565b506129da565b612aa991939293612aa362ffffff612a7e6018612a1961142d565b987fffffffff000000000000000000000000000000000000000000000000000000006014888301803560601c8d5201351660208b01520160208682013591019060408a015260208682013591019060608a01528560039092919283013560e81c920190565b911690612a99612499612a918484610e19565b8387896113fb565b6080890152610e19565b916130ea565b929060a08201529190565b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff811161091e5791565b73ffffffffffffffffffffffffffffffffffffffff81511690612c1a7fffffffff00000000000000000000000000000000000000000000000000000000602083015116610c277fffffff0000000000000000000000000000000000000000000000000000000000604085015194606081015190608081015191612c096008602360a062ffffff87511695015180517fffffffffffffffff00000000000000000000000000000000000000000000000060208251930151916040519a8b9460e81b166020850152612bd08151809260208888019101611d62565b83019160c01b168382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8810187520185610269565b604051978896602088019a8b613135565b51902090565b9080601f8301121561013a578160206103dc93359101612213565b906020810135612c4a816102e0565b15612d1a576000915b608060608301359201359160e08236031261013a57612c706102b9565b91612c7a81610179565b83526020810135602084015260408101359067ffffffffffffffff821161013a57612c1a9360c0612cf292612cb5610c279536908301612c20565b604084015260608101356060840152612cd0608082016102ea565b6080840152612ce160a082016102ea565b60a0840152013560c08201526131ed565b6040519485936020850197889290916080949284526020840152604083015260608201520190565b4691612c53565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821360011661091e57565b906001820191600060018412911290801582169115161761091e57565b9190916000838201938412911290801582169115161761091e57565b600082517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811360011661091e57905b81811315612dce5750505050600090565b808203600082128382128116908483139015161761091e57612df4906002900582612d6e565b90612e02610b1683876107ee565b73ffffffffffffffffffffffffffffffffffffffff8581169116808203612e2f5750505050505050600190565b1015612e445750612e3f90612d51565b612dbd565b9150612e4f90612d21565b90612dbd565b9060405160208101907f616363657074496d706c69636974526571756573740000000000000000000000825260158152612e90603582610269565b5190209160406060820151910151907fffffffffffffffffffffffffffffffffffffffff000000000000000000000000604051936020850195865260601b1660408401526054830152607482015260748152612c1a609482610269565b60405190612efa8261022c565b6060602083600081520152565b60018301939281013560f81c612f1c816102c8565b92612f2a6040519485610269565b8184527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0612f57836102c8565b0160005b818110612f9e5750506000925b828410612f7757505050509190565b90919295612f88600191848461333f565b9790612f9482886107ee565b5201929190612f68565b602090612fad95939495612eed565b8282890101520193929193612f5b565b90612c1a60016020926040519381859282840197600089526021850137820101828101600081525003017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610269565b90612c1a600160209260405193818592828401977f030000000000000000000000000000000000000000000000000000000000000089526021850137820101828101600081525003017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610269565b6040517fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208201927f0400000000000000000000000000000000000000000000000000000000000000845260601b16602182015260158152612c1a603582610269565b92916130f4611413565b9060038101908581013560e81c0194600386019182811161091e5761249960039361312292600b97856113fb565b83528501013560c01c6020820152920190565b9390927fffffffff00000000000000000000000000000000000000000000000000000000605b989796937fffffffffffffffffffffffffffffffffffffffff0000000000000000000000007fffffff00000000000000000000000000000000000000000000000000000000009660601b1687521660148601526018850152603884015260e81b1660588201526131d48251809360208785019101611d62565b016131e88251809360208685019101611d62565b010190565b73ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152612c1a61012082610269565b9061329e826102c8565b6132ab6040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06132d982946102c8565b019060005b8281106132ea57505050565b6020906040516132f98161024d565b60008152600083820152600060408201526000606082015260006080820152828285010152016132de565b60ff166004811015610e815790565b6004821015610e815752565b60ff93929150613394613384613367613356612eed565b948481013560601c91601490910190565b73ffffffffffffffffffffffffffffffffffffffff909116855290565b8281013560f81c91600190910190565b941661339f81613294565b602084019081526000925b8284106133b957505050509190565b9091929561347261345461343661340c6134298b602061342261341a6134158c6133f160019c8e60019092919283013560f81c920190565b989091613404888f8516151592516107ee565b519015159052565b60011c607f1690565b613324565b928b516107ee565b5101613333565b8581013591602090910190565b9060406134448c89516107ee565b5101528481013591602090910190565b9060606134628b88516107ee565b5101528381013591602090910190565b979060806134818387516107ee565b510152019291906133aa56fea2646970667358221220fbec8fcf4e138324c4467036ee1507b2f8aa2752bfcb89890b736efe2f2497c664736f6c634300081c0033","sourceMap":"777:3573:34:-:0;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436101561001257600080fd5b60003560e01c806313792a4a1461006757806323b3713e14610062578063313dade71461005d57806342de1418146100585763f916f3b21461005357600080fd5b610623565b6105a6565b6103df565b610184565b3461013a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013a5760043567ffffffffffffffff811161013a576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011261013a5760243567ffffffffffffffff811161013a573660238201121561013a57806004013567ffffffffffffffff811161013a57366024828401011161013a57610136926024610126930190600401610950565b6040519081529081906020820190565b0390f35b600080fd5b73ffffffffffffffffffffffffffffffffffffffff81160361013a57565b6044359061016a8261013f565b565b6064359061016a8261013f565b359061016a8261013f565b3461013a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013a576004356101bf8161013f565b73ffffffffffffffffffffffffffffffffffffffff602435911660005260006020526040600020906000526020526020604060002054604051908152f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff82111761024857604052565b6101fd565b60a0810190811067ffffffffffffffff82111761024857604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761024857604052565b6040519061016a604083610269565b6040519061016a60e083610269565b67ffffffffffffffff81116102485760051b60200190565b8015150361013a57565b359061016a826102e0565b908160e091031261013a5790565b81601f8201121561013a5780359061031a826102c8565b926103286040519485610269565b82845260208085019360061b8301019181831161013a57602001925b828410610352575050505090565b60408483031261013a576020604091825161036c8161022c565b863581528287013583820152815201930192610344565b906020808351928381520192019060005b8181106103a15750505090565b8251805185526020908101518186015260409094019390920191600101610394565b6040906103dc9392151581528160208201520190610383565b90565b3461013a5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013a5760043567ffffffffffffffff811161013a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011261013a57604051906104598261022c565b80600401356104678161013f565b825260248101359067ffffffffffffffff821161013a57013660238201121561013a576004810135610498816102c8565b916104a66040519384610269565b8183526020600460a08286019402830101019036821161013a57602401915b81831061054057505050602082015260243567ffffffffffffffff811161013a576104f49036906004016102f5565b906104fd61015d565b61050561016c565b906084359367ffffffffffffffff851161013a5761052a610530953690600401610303565b93610f74565b90610136604051928392836103c3565b60a08336031261013a57604051906105578261024d565b8335610562816102e0565b8252602084013590600482101561013a57826020928360a09501526040860135604082015260608601356060820152608086013560808201528152019201916104c5565b3461013a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013a5760043567ffffffffffffffff811161013a573660238201121561013a57806004013567ffffffffffffffff811161013a573660248260061b8401011161013a57602461062192016112bd565b005b3461013a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013a57602060405173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8152f35b3560ff8116810361013a5790565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561013a570180359067ffffffffffffffff821161013a57602001918160051b3603831361013a57565b604051906060820182811067ffffffffffffffff821117610248576040526000604083828152606060208201520152565b9061070d826102c8565b61071a6040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061074882946102c8565b019060005b82811061075957505050565b6020906107646106d2565b8282850101520161074d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b91908110156107df5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff218136030182121561013a570190565b610770565b356103dc816102e0565b80518210156107df5760209160051b010190565b6040519061080f8261022c565b60006020838281520152565b6040519061082a602083610269565b600080835282815b82811061083e57505050565b602090610849610802565b82828501015201610832565b9061085f826102c8565b61086c6040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061089a82946102c8565b019060005b8281106108ab57505050565b6020906108b6610802565b8282850101520161089f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461091e5760010190565b6108c2565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821161091e57565b919060ff61095d84610670565b16610dd7576040830191610971838561067e565b905015610dad57610985918495939561159c565b9161099a610993858361067e565b9050610703565b9060009460808501955b6109ae828461067e565b9050811015610cde576109cb816109c5848661067e565b9061079f565b6109d7608082016107e4565b610cb4576109e68289516107ee565b51805115610a305760019291816060610a196020610a2a95015173ffffffffffffffffffffffffffffffffffffffff1690565b9101519060408b0151923390611fe2565b016109a4565b91959392969050610a3f6106d2565b96602083019460005b8751811015610c9357610a95610a7c610a61838b6107ee565b515173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b15610b5c57610aa7610a61828a6107ee565b73ffffffffffffffffffffffffffffffffffffffff610add610a7c8a5173ffffffffffffffffffffffffffffffffffffffff1690565b911614610aec57600101610a48565b9097929850610b45610b569295968a600196610b3c60406060610b30610b138f8a906107ee565b51965b5173ffffffffffffffffffffffffffffffffffffffff1690565b94015192015160ff1690565b9133888c6119c6565b610b4f82896107ee565b52866107ee565b50610a2a565b90979298610b45908a600196610b3c60406060610b308d610bb4610b569b9e9f610b9a905173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff168952565b610bbc61081b565b6020890152610c8a610be2825173ffffffffffffffffffffffffffffffffffffffff1690565b855173ffffffffffffffffffffffffffffffffffffffff9091166020820190815273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee604083015290610c5381606081015b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610269565b5190203373ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000209060005260205260406000205490565b84890152610b16565b90979298610b45908a600196610b3c60406060610b30610b56999c9d610b16565b7faa25f2ad0000000000000000000000000000000000000000000000000000000060005260046000fd5b509392945090610cee8151610703565b9260009260005b8351811015610d70576020610d0a82866107ee565b5101515115801590610d59575b610d24575b600101610cf5565b93610d51600191610d3587876107ee565b51610d40828a6107ee565b52610d4b81896107ee565b506108f1565b949050610d1c565b506040610d6682866107ee565b5101511515610d17565b509094610da49250610da994938452610d9e610d97610d8f838561067e565b93909461067e565b9050610923565b9161079f565b612278565b5190565b7f542f0af50000000000000000000000000000000000000000000000000000000060005260046000fd5b7f720521200000000000000000000000000000000000000000000000000000000060005260046000fd5b356103dc8161013f565b906001820180921161091e57565b9190820180921161091e57565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561013a570180359067ffffffffffffffff821161013a5760200191813603831361013a57565b60041115610e8157565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9392919073ffffffffffffffffffffffffffffffffffffffff16845260606020850152602060a085019173ffffffffffffffffffffffffffffffffffffffff81511660608701520151604060808601528051809252602060c0860191019160005b818110610f2357505060409150930152565b909183518051151582526020810151906004821015610e815782608060a092602094856001970152604081015160408401526060810151606084015201516080820152019401910192919092610f11565b949091929394610f98815173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff610fb9610a7c86610e01565b9116036112a257855192610fdc610fd7602084019586515190610e19565b610855565b9460005b88518110156110135780610ff66001928b6107ee565b51611001828a6107ee565b5261100c81896107ee565b5001610fe0565b50909294919395875160005b885180518210156112915781611034916107ee565b516110586110456040890189610e26565b5060608301519081013591602090910190565b506080820151169061106a8151151590565b61113d575b60208101805161107e81610e77565b61108781610e77565b6110ad5750604001510361109f576001905b0161101f565b506000989750505050505050565b600381516110ba81610e77565b6110c381610e77565b036110da5750604001511061109f57600190611099565b600181516110e781610e77565b6110f081610e77565b036111075750604001511461109f57600190611099565b6002905161111481610e77565b61111d81610e77565b1461112d575b5050600190611099565b604001511161109f573880611123565b9691989795929093998a610c276111608c6040519283918c602084019687610eb0565b5190209660009361116f610802565b9c60005b87518110156112795761118681896107ee565b51511561122c578a611198828a6107ee565b5151146111a757600101611173565b6020949e50879a9198939c9d96506111c5906111da939c96986107ee565b519284840151915b82156111e5575b50610e19565b91829101529061106f565b6112249192506112158b73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b90600052602052604060002090565b5490386111d4565b6020949e506111da929b95509761127389899c99959e9f98939a61126d906112526102aa565b978c895260008a8a01528861126783836107ee565b526107ee565b50610e0b565b976111cd565b5096946020939d929b9c956111da929b95979a6111cd565b505083525060019650909450505050565b509250505060009190565b91908110156107df5760061b0190565b60005b8281106112cc57505050565b60206112d98285856112ad565b013561131e6112e98386866112ad565b353373ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000209060005260205260406000205490565b1161139857807f42063b8d32ac0a88f94053143bb30a789b3d5dfabb27d6c8a54e23d4fef30851606061135460019487876112ad565b3560206113628589896112ad565b0135336000526000602052604060002082600052602052806040600020556040519133835260208301526040820152a1016112c0565b7e2a700a0000000000000000000000000000000000000000000000000000000060005260046000fd5b604051906113ce8261024d565b6060608083600081526000602082015282604082015282808201520152565b9060041161013a5790600490565b9093929384831161013a57841161013a578101920390565b604051906114208261022c565b6000602083606081520152565b6040519060c0820182811067ffffffffffffffff8211176102485760405281600081526000602082015260006040820152600060608201526060608082015260a0611476611413565b910152565b90611485826102c8565b6114926040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06114c082946102c8565b019060005b8281106114d157505050565b6020906114dc61142d565b828285010152016114c5565b6040513d6000823e3d90fd5b604051906080820182811067ffffffffffffffff8211176102485760405281600081526000602082015260006040820152606061147661142d565b90611539826102c8565b6115466040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061157482946102c8565b019060005b82811061158557505050565b6020906115906114f4565b82828501015201611579565b909162ffffff926115ab6113c1565b50600091813560e81c60039516906115e26115da6115d46115cc858a610e19565b8985886113fb565b90612579565b939097610e19565b602087019473ffffffffffffffffffffffffffffffffffffffff61161a875173ffffffffffffffffffffffffffffffffffffffff1690565b161561190a5750600181019392919083013560f81c906116398261147b565b9560005b83811061183e5750505015159081611835575b5061180b576040840193611664858261067e565b9490506116708561152f565b95608088019687526000945b86861061168e57505050505050505090565b6116aa6116996114f4565b918681013560f81c91600190910190565b608082161515835296908251156117eb57607f1684518110156117c15760006116e961172b996116dc602094896107ee565b5160608701525b89612ab4565b9b9092916117048b6116ff896109c58d8461067e565b612c3b565b92604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa156117bc57611766610a7c600051610b166020860191829073ffffffffffffffffffffffffffffffffffffffff169052565b156117875761177f816001938b519061126783836107ee565b50019461167c565b7fc1e84ed6000000000000000000000000000000000000000000000000000000006000526117b86024906000600452565b6000fd5b6114e8565b7fbd8ba84d0000000000000000000000000000000000000000000000000000000060005260046000fd5b60006116e961172b99611806602094604088019060ff169052565b6116e3565b7feb6252040000000000000000000000000000000000000000000000000000000060005260046000fd5b90501538611650565b611866906020600061185d6118739a61185561142d565b50878b6129fe565b8a959195612ab4565b9c90929161170488612af7565b838052039060015afa156117bc5760005173ffffffffffffffffffffffffffffffffffffffff6118ba610a7c865173ffffffffffffffffffffffffffffffffffffffff1690565b9116036118e0576001916118ce828b6107ee565b526118d9818a6107ee565b500161163d565b7f9e5c658b0000000000000000000000000000000000000000000000000000000060005260046000fd5b807f9e5c658b0000000000000000000000000000000000000000000000000000000060049252fd5b6040519061193f8261024d565b60606080836000815260006020820152600060408201526000838201520152565b919091357fffffffff0000000000000000000000000000000000000000000000000000000081169260048110611994575050565b7fffffffff00000000000000000000000000000000000000000000000000000000929350829060040360031b1b161690565b939594909291926119d56106d2565b506119de611932565b9660005b8151811015611d45576119f8610a6182846107ee565b73ffffffffffffffffffffffffffffffffffffffff808716911614611a1f576001016119e2565b90611a3092939495969798506107ee565b51945b73ffffffffffffffffffffffffffffffffffffffff611a66875173ffffffffffffffffffffffffffffffffffffffff1690565b1615611d0157602086015180151580611cf7575b611cca5750606086015167ffffffffffffffff1680151580611cb7575b611c805750906109c5826040611aae94019061067e565b91611abb608084016107e4565b610cb457611ac883610e01565b73ffffffffffffffffffffffffffffffffffffffff163014611bce576080850160ff815151931692831015611ba457611b1592611b0591516107ee565b5190602087019484865193610f74565b9015611b7a5760209252013580611b63575b5060408083015191015110611b395790565b7faa7feadc0000000000000000000000000000000000000000000000000000000060005260046000fd5b611b7260408401918251610e19565b905238611b27565b7f868a64de0000000000000000000000000000000000000000000000000000000060005260046000fd5b7f3f904dc00000000000000000000000000000000000000000000000000000000060005260046000fd5b50509150506020611bf4611bee611be86040850185610e26565b906113ed565b90611960565b9101351590811591611c33575b50611c095790565b7f540733ea0000000000000000000000000000000000000000000000000000000060005260046000fd5b7f42de14180000000000000000000000000000000000000000000000000000000091507fffffffff0000000000000000000000000000000000000000000000000000000016141538611c01565b7fb1bbfdd50000000000000000000000000000000000000000000000000000000060005267ffffffffffffffff1660045260246000fd5b5067ffffffffffffffff81164211611a97565b7f331003b30000000000000000000000000000000000000000000000000000000060005260045260246000fd5b5046811415611a7a565b7fc1e84ed60000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff841660045260246000fd5b505090919293959495611a33565b9081602091031261013a575190565b60005b838110611d755750506000910152565b8181015183820152602001611d65565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093611dc181518092818752878088019101611d62565b0116010190565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b9073ffffffffffffffffffffffffffffffffffffffff8235611e288161013f565b1681526020820135602082015260408201357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18336030181121561013a57820160208135910167ffffffffffffffff821161013a57813603811361013a57611ea060c09291839260e0604087015260e0860191611dc8565b9360608101356060850152611ec3611eba608083016102ea565b15156080860152565b611edb611ed260a083016102ea565b151560a0860152565b013591015290565b73ffffffffffffffffffffffffffffffffffffffff6103dc94921681526060602082015273ffffffffffffffffffffffffffffffffffffffff83511660608201527fffffffff000000000000000000000000000000000000000000000000000000006020840151166080820152604083015160a0820152606083015160c082015260a0611f80608085015160c060e0850152610120840190611d85565b930151927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa082820301610100830152602067ffffffffffffffff81611fce8751604086526040860190611d85565b960151169101526040818403910152611e07565b92939091612007610a7c865173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff8216036121bf5761202f608085016107e4565b610cb45761203d8282612d8a565b61217c57506120549061204f84610e01565b612d8a565b61212e576020820135611b3957602082612076610a7c610a7c6120ac96610e01565b60405180809681947f9d043a66000000000000000000000000000000000000000000000000000000008352898860048501611ee3565b03915afa9182156117bc576000926120fb575b506120ca9192612e55565b036120d157565b7f0881ad5d0000000000000000000000000000000000000000000000000000000060005260046000fd5b6120ca92506121219060203d602011612127575b6121198183610269565b810190611d53565b916120bf565b503d61210f565b6117b861213a83610e01565b7fd33f19e70000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff16600452602490565b7fd33f19e70000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff1660045260246000fd5b7fc1e84ed60000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff1660045260246000fd5b9060206103dc928181520190610383565b92919267ffffffffffffffff8211610248576040519161225b601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200184610269565b82948184528183011161013a578281602093846000960137010152565b908051612283575050565b61228c82610e01565b73ffffffffffffffffffffffffffffffffffffffff1630148015906124ae575b61139857600092835b825185101561230a576122d89060206122ce87866107ee565b5101515190610e19565b9360406122e582856107ee565b5101516122f6575b600101936122b5565b936123026001916108f1565b9490506122ed565b61231691939450610855565b60009081935b83518510156124435760005b602061233487876107ee565b51015151811015612381578061237a61235d60019360206123558b8b6107ee565b5101516107ee565b5195612368816108f1565b9661237382886107ee565b52856107ee565b5001612328565b509493600190604061239382876107ee565b5101516123a3575b01939461231c565b61243d6123b3610a6183886107ee565b6040516123ff81610c27602082019485602073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee9193929373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b51902094604061240f84896107ee565b51015161241a6102aa565b968752602087015261242b816108f1565b9561243682876107ee565b52846107ee565b5061239b565b9493506124a09250612499915060405161248b81610c2760208201947f42de141800000000000000000000000000000000000000000000000000000000865260248301612202565b519020926040810190610e26565b3691612213565b602081519101200361139857565b50600160c083013514156122ac565b906124c7826102c8565b6124d46040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061250282946102c8565b019060005b82811061251357505050565b60209061251e611932565b82828501015201612507565b90612534826102c8565b6125416040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061256f82946102c8565b0190602036910137565b916125826113c1565b60009384908190612595605e87046124bd565b91606085019283525b8681106125ae5750505152929150565b8181013560fc81901c97916001019060f81c81891561294f57506001891461291d576002891461277857600389146126ad575060048814612618577f0ad9979000000000000000000000000000000000000000000000000000000000600052600488905260246000fd5b90919293949596506020860173ffffffffffffffffffffffffffffffffffffffff612657825173ffffffffffffffffffffffffffffffffffffffff1690565b166118e0578382013560601c815260149091019061267d9061267890610b16565b613086565b865180156126a7579061269891600052602052604060002090565b86525b9594939291909561259e565b50612698565b9890919293949596975061180b57600f60019816600f8114612767575b81906126d58161252a565b604089019081528a60005b83811061272857505050506126fa826127009285876113fb565b90613012565b86518015612722579061271b91600052602052604060002090565b865261269b565b5061271b565b61275f958881013560601c9060140196906127448386516107ee565b9073ffffffffffffffffffffffffffffffffffffffff169052565b018b906126e0565b50600281019083013560f01c6126ca565b6127db9698506127d36127e492600f6115d4939c96979a95989c169087929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b979088610e19565b809787876113fb565b93909593612906575b6020860173ffffffffffffffffffffffffffffffffffffffff612824825173ffffffffffffffffffffffffffffffffffffffff1690565b1661289c575b5060005b6060870151805182101561286b579061286461284c826001946107ee565b519b8a51612859826108f1565b9d61126783836107ee565b500161282e565b5050929096959391979486518015156000146128955761271b915190600052602052604060002090565b505161271b565b602089016128c1610a7c825173ffffffffffffffffffffffffffffffffffffffff1690565b6118e0576128e6612900925173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff169052565b3861282a565b9161180b57600191604086015160408901526127ed565b508551969750949593949293919290916020820191840135908015612722579061271b91600052602052604060002090565b92939495969798505050612961611932565b8184018035606090811c8352601482013560208401526034820135604084015260549091013560c01c908201529461299d605c83018486612f07565b80939160808901526129b09185876113fb565b6129b991612fbd565b87516129f292919080156129f857906129da91600052602052604060002090565b885285516129e7826108f1565b9761126783836107ee565b5061269b565b506129da565b612aa991939293612aa362ffffff612a7e6018612a1961142d565b987fffffffff000000000000000000000000000000000000000000000000000000006014888301803560601c8d5201351660208b01520160208682013591019060408a015260208682013591019060608a01528560039092919283013560e81c920190565b911690612a99612499612a918484610e19565b8387896113fb565b6080890152610e19565b916130ea565b929060a08201529190565b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff811161091e5791565b73ffffffffffffffffffffffffffffffffffffffff81511690612c1a7fffffffff00000000000000000000000000000000000000000000000000000000602083015116610c277fffffff0000000000000000000000000000000000000000000000000000000000604085015194606081015190608081015191612c096008602360a062ffffff87511695015180517fffffffffffffffff00000000000000000000000000000000000000000000000060208251930151916040519a8b9460e81b166020850152612bd08151809260208888019101611d62565b83019160c01b168382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8810187520185610269565b604051978896602088019a8b613135565b51902090565b9080601f8301121561013a578160206103dc93359101612213565b906020810135612c4a816102e0565b15612d1a576000915b608060608301359201359160e08236031261013a57612c706102b9565b91612c7a81610179565b83526020810135602084015260408101359067ffffffffffffffff821161013a57612c1a9360c0612cf292612cb5610c279536908301612c20565b604084015260608101356060840152612cd0608082016102ea565b6080840152612ce160a082016102ea565b60a0840152013560c08201526131ed565b6040519485936020850197889290916080949284526020840152604083015260608201520190565b4691612c53565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821360011661091e57565b906001820191600060018412911290801582169115161761091e57565b9190916000838201938412911290801582169115161761091e57565b600082517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811360011661091e57905b81811315612dce5750505050600090565b808203600082128382128116908483139015161761091e57612df4906002900582612d6e565b90612e02610b1683876107ee565b73ffffffffffffffffffffffffffffffffffffffff8581169116808203612e2f5750505050505050600190565b1015612e445750612e3f90612d51565b612dbd565b9150612e4f90612d21565b90612dbd565b9060405160208101907f616363657074496d706c69636974526571756573740000000000000000000000825260158152612e90603582610269565b5190209160406060820151910151907fffffffffffffffffffffffffffffffffffffffff000000000000000000000000604051936020850195865260601b1660408401526054830152607482015260748152612c1a609482610269565b60405190612efa8261022c565b6060602083600081520152565b60018301939281013560f81c612f1c816102c8565b92612f2a6040519485610269565b8184527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0612f57836102c8565b0160005b818110612f9e5750506000925b828410612f7757505050509190565b90919295612f88600191848461333f565b9790612f9482886107ee565b5201929190612f68565b602090612fad95939495612eed565b8282890101520193929193612f5b565b90612c1a60016020926040519381859282840197600089526021850137820101828101600081525003017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610269565b90612c1a600160209260405193818592828401977f030000000000000000000000000000000000000000000000000000000000000089526021850137820101828101600081525003017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610269565b6040517fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208201927f0400000000000000000000000000000000000000000000000000000000000000845260601b16602182015260158152612c1a603582610269565b92916130f4611413565b9060038101908581013560e81c0194600386019182811161091e5761249960039361312292600b97856113fb565b83528501013560c01c6020820152920190565b9390927fffffffff00000000000000000000000000000000000000000000000000000000605b989796937fffffffffffffffffffffffffffffffffffffffff0000000000000000000000007fffffff00000000000000000000000000000000000000000000000000000000009660601b1687521660148601526018850152603884015260e81b1660588201526131d48251809360208785019101611d62565b016131e88251809360208685019101611d62565b010190565b73ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152612c1a61012082610269565b9061329e826102c8565b6132ab6040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06132d982946102c8565b019060005b8281106132ea57505050565b6020906040516132f98161024d565b60008152600083820152600060408201526000606082015260006080820152828285010152016132de565b60ff166004811015610e815790565b6004821015610e815752565b60ff93929150613394613384613367613356612eed565b948481013560601c91601490910190565b73ffffffffffffffffffffffffffffffffffffffff909116855290565b8281013560f81c91600190910190565b941661339f81613294565b602084019081526000925b8284106133b957505050509190565b9091929561347261345461343661340c6134298b602061342261341a6134158c6133f160019c8e60019092919283013560f81c920190565b989091613404888f8516151592516107ee565b519015159052565b60011c607f1690565b613324565b928b516107ee565b5101613333565b8581013591602090910190565b9060406134448c89516107ee565b5101528481013591602090910190565b9060606134628b88516107ee565b5101528381013591602090910190565b979060806134818387516107ee565b510152019291906133aa56fea2646970667358221220fbec8fcf4e138324c4467036ee1507b2f8aa2752bfcb89890b736efe2f2497c664736f6c634300081c0033","sourceMap":"777:3573:34:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;:::o;:::-;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;777:3573:34;-1:-1:-1;777:3573:34;;;-1:-1:-1;777:3573:34;;-1:-1:-1;777:3573:34;;;;;-1:-1:-1;777:3573:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;2725:9:39;777:3573:34;;;2725:9:39;777:3573:34;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;:::o;:::-;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;777:3573:34;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;724:42:36;777:3573:34;;;;;;;;;;;;;:::o;2321:4:48:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;777:3573:34;;;2321:4:48;777:3573:34;;;;;;;;;;;;;-1:-1:-1;777:3573:34;2321:4:48;;;;;;;;;;;:::o;:::-;;;;;:::i;:::-;777:3573:34;;;;;;:::i;:::-;2321:4:48;;;;;;;;:::i;:::-;;;-1:-1:-1;2321:4:48;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;:::i;:::-;777:3573:34;;2321:4:48;;;;;;;;;;;;:::o;:::-;;777:3573:34;;;;;:::i;:::-;-1:-1:-1;2321:4:48;;;;;;;:::o;:::-;777:3573:34;;;;;;;:::i;:::-;;2321:4:48;;;;777:3573:34;2321:4:48;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;777:3573:34;;;;;;:::i;:::-;2321:4:48;;;;;;;;:::i;:::-;;;-1:-1:-1;2321:4:48;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;:::o;1074:3273:34:-;;;777:3573;1258:12;;;:::i;:::-;777:3573;1254:89;;1352:13;;;;;;;;:::i;:::-;:25;;;1348:73;;1492:54;;;;;;;:::i;:::-;1721:13;1696:46;1721:13;;;;:::i;:::-;1696:46;;;:::i;:::-;1754:13;777:3573;2062:18;1893:17;2062:18;;1749:1772;1795:3;1773:13;;;;:::i;:::-;1769:24;;;;;;;1865:16;:13;;;;;:::i;:::-;:16;;:::i;:::-;1893:17;;;;;:::i;:::-;1889:84;;2062:21;:18;;;:21;:::i;:::-;;2321:4:48;;777:3573:34;2095:24;;2321:4:48;2213:27:34;;;2242:25;2321:4:48;2213:27:34;2269:21;2213:27;;2321:4:48;777:3573:34;;;;2321:4:48;2242:25:34;;;2269:21;1352:13;2269:21;;;1570:10;;2269:21;;:::i;:::-;2321:4:48;1754:13:34;;2091:1424;2387:32;;;;;;;2321:4:48;;:::i;:::-;2429:17:34;3018:27;;;;777:3573;2515:11;777:3573;;2476:37;;;;;2544:50;:36;:29;;;;:::i;:::-;;2321:4:48;777:3573:34;;;2321:4:48;2544:36:34;777:3573;;;;2544:50;;2540:423;;2978:36;:29;;;;:::i;:36::-;777:3573;2978:67;2321:4:48;;;777:3573:34;;;;2978:67;777:3573;;2978:67;2974:157;;2321:4:48;;2461:13:34;;2974:157;3070:29;;;;;3243:215;3468:38;3070:29;;;;2321:4:48;3070:29:34;2321:4:48;1352:13:34;3365:22;2321:4:48;3070:29:34;;;;;:::i;:::-;;3113:5;2456:685;2321:4:48;777:3573:34;;;;2321:4:48;3365:22:34;;;3399:31;;2321:4:48;777:3573:34;;;;2321:4:48;1570:10:34;;3243:215;;;:::i;:::-;3468:38;;;;:::i;:::-;;;;:::i;:::-;;2091:1424;;2540:423;2321:4:48;;;;3243:215:34;2321:4:48;;;;;1352:13:34;3365:22;2321:4:48;;2661:43:34;3468:38;2321:4:48;;;;;;777:3573:34;;;;2321:4:48;777:3573:34;;2321:4:48;;;2661:43:34;2734:19;;:::i;:::-;3018:27;2718:13;;:35;2899:32;2321:4:48;;;777:3573:34;;;;2321:4:48;777:3573:34;;;;;;3018:27;2797:63;;777:3573;;;724:42:36;2321:4:48;;;777:3573:34;2797:63;;777:3573;2321:4:48;;;2797:63:34;;;;;;;;;:::i;:::-;777:3573;2787:74;;1570:10;777:3573;;1060:10:39;777:3573:34;1060:10:39;777:3573:34;;;1060:10:39;777:3573:34;;1060:10:39;777:3573:34;;;;1060:10:39;777:3573:34;;959:135:39;;2899:32:34;2875:21;;;2321:4:48;2945:5:34;;2476:37;;;;;3243:215;2476:37;;2321:4:48;2476:37:34;2321:4:48;1352:13:34;3365:22;2321:4:48;3468:38:34;2476:37;;;;;1889:84;1929:35;777:3573;1929:35;;777:3573;1929:35;1769:24;;;;;;;3647:51;777:3573;;3647:51;:::i;:::-;3706:18;777:3573;3737:13;777:3573;3783:3;777:3573;;3752:29;;;;;3802:28;:21;;;;:::i;:::-;;:28;;777:3573;3802:39;;;:83;;;3783:3;3798:196;;3783:3;2321:4:48;;3737:13:34;;3798:196;3938:21;3971:12;2321:4:48;3938:21:34;;;;;:::i;:::-;;3899:60;;;;:::i;:::-;;;;;;:::i;:::-;;3971:12;:::i;:::-;3798:196;;;;;3802:83;3845:21;1352:13;3845:21;;;;:::i;:::-;;:36;2321:4:48;3845:40:34;;3802:83;;3752:29;;;;4169:39;3752:29;;4255:24;3752:29;;4009:71;;4183:24;:13;4169;;;;:::i;:::-;4183;;;;:::i;:::-;:24;;;:::i;:::-;4169:39;;:::i;:::-;4255:24;:::i;:::-;2321:4:48;1074:3273:34;:::o;1348:73::-;1394:20;777:3573;1394:20;;777:3573;1394:20;1254:89;1316:20;777:3573;1316:20;;777:3573;1316:20;777:3573;;;;;:::i;:::-;;2321:4:48;777:3573:34;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;777:3573:34;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1890:3002:39;;;;;;;2321:4:48;;;777:3573:34;;;;2321:4:48;777:3573:34;2138:28:39;2159:7;;;:::i;2138:28::-;777:3573:34;;2138:28:39;2134:76;;777:3573:34;;2332:16:39;2294:62;2311:44;2332:16;;;;;;777:3573:34;2311:44:39;;:::i;:::-;2294:62;:::i;:::-;2367:13;777:3573:34;2406:3:39;777:3573:34;;2382:22:39;;;;;2439:14;;2321:4:48;2439:14:39;;;:::i;:::-;;2419:34;;;;:::i;:::-;;;;;;:::i;:::-;;2321:4:48;2367:13:39;;2382:22;;;;;;;;777:3573:34;;;2590:3:39;2565:16;;777:3573:34;;2561:27:39;;;;;2631:19;;;;:::i;:::-;;2926:232:68;2725:9:39;;;;;;:::i;:::-;-1:-1:-1;2321:4:48;2747:11:39;;2321:4:48;3047:107:68;;;;;;;;;;2926:232;;2706:53:39;2804:9;;;2321:4:48;2796:17:39;2321:4:48;;;;777:3573:34;;;;2321:4:48;2822:1237:39;;2590:3;2332:16;4107:14;;777:3573:34;;;;;:::i;:::-;;;;:::i;:::-;4107:42:39;;4174:10;2725:9;4174:10;2321:4:48;4165:19:39;4161:75;;2321:4:48;4103:649:39;;2321:4:48;2546:13:39;;4161:75;-1:-1:-1;777:3573:34;;4198:27:39;-1:-1:-1;;;;;;;4198:27:39:o;4103:649::-;4272:37;777:3573:34;;;;;:::i;:::-;;;;:::i;:::-;4254:55:39;4272:37;;4350:10;2725:9;4350:10;2321:4:48;-1:-1:-1;4321:92:39;;2321:4:48;4250:502:39;4103:649;;4250:502;2321:4:48;777:3573:34;;;;;:::i;:::-;;;;:::i;:::-;4431:46:39;2321:4:48;;4502:10:39;2725:9;4502:10;2321:4:48;4493:19:39;4489:75;;2321:4:48;4427:325:39;4103:649;;4427:325;4600:40;777:3573:34;;;;;:::i;:::-;;;;:::i;:::-;4582:58:39;4578:174;;4427:325;;;2321:4:48;4427:325:39;4103:649;;4578:174;2725:9;4681:10;2321:4:48;-1:-1:-1;4652:92:39;;4578:174;;;;2822:1237;777:3573:34;;;;;;;;;;3017:33:39;;777:3573:34;2725:9:39;777:3573:34;3017:33:39;;;;2332:16;3017:33;;;;;:::i;:::-;777:3573:34;3007:44:39;;3061:21;777:3573:34;3092:28:39;2321:4:48;;:::i;:::-;3135:13:39;777:3573:34;3177:3:39;777:3573:34;;3150:25:39;;;;;3198:17;;;;:::i;:::-;;2321:4:48;3198:41:39;3194:283;;3492:17;;;;;:::i;:::-;;2321:4:48;3492:40:39;3488:210;;2321:4:48;;3135:13:39;;3488:210;2332:16;3597:17;;;;;;;;;;;;;;3896:25;3597:17;;;;;:::i;:::-;;3644:22;;;;2321:4:48;3680:5:39;3130:578;3721:18;;3717:144;;3130:578;3896:25;;:::i;:::-;3931:22;;;;2321:4:48;2822:1237:39;;;3717:144;1060:29;:18;;;;;777:3573:34;;;;;;;;;;;;1060:18:39;777:3573:34;;;;;;;;;;1060:29:39;777:3573:34;3717:144:39;;;;3194:283;2332:16;2321:4:48;;;3896:25:39;2321:4:48;;;;;3440:5:39;2321:4:48;;;;;;;;;;3376:30:39;2321:4:48;;;:::i;:::-;;;;;777:3573:34;3310:52:39;;;2321:4:48;3297:65:39;3376:30;;;;:::i;:::-;;;:::i;:::-;;3440:5;:::i;:::-;3459;;;3150:25;;;;2332:16;3150:25;;;;;;3896;3150;;;;;;;2561:27;-1:-1:-1;;4788:64:39;;-1:-1:-1;2321:4:48;;-1:-1:-1;2561:27:39;;-1:-1:-1;;;;1890:3002:39:o;2134:76::-;2176:27;;;;;777:3573:34;2176:27:39;;:::o;777:3573:34:-;;;;;;;;;;;;:::o;814:430:36:-;946:1;949:17;;;;;;814:430;;;:::o;968:3::-;985:21;:9;;;;;:::i;:::-;:21;777:3573:34;1009:42:36;1031:9;;;;;:::i;:::-;777:3573:34;913:10:36;777:3573:34;;1060:10:39;777:3573:34;1060:10:39;777:3573:34;;;1060:10:39;777:3573:34;;1060:10:39;777:3573:34;;;;1060:10:39;777:3573:34;;959:135:39;;1009:42:36;-1:-1:-1;981:180:36;;1190:9;1434:49:39;777:3573:34;1190:9:36;2321:4:48;1190:9:36;;;;:::i;:::-;777:3573:34;985:21:36;1211:9;;;;;:::i;:::-;:21;777:3573:34;913:10:36;946:1;777:3573:34;946:1:36;985:21;777:3573:34;;946:1:36;777:3573:34;;946:1:36;777:3573:34;985:21:36;777:3573:34;;;946:1:36;777:3573:34;;;;913:10:36;;777:3573:34;;985:21:36;777:3573:34;;;;;;;1434:49:39;2321:4:48;934:13:36;;981:180;1110:42;946:1;1110:42;;946:1;1110:42;777:3573:34;;;;;;;:::i;:::-;2321:4:48;777:3573:34;;-1:-1:-1;777:3573:34;;-1:-1:-1;777:3573:34;;;;;;;;;;;;;;;;:::o;:::-;;3296:1:36;777:3573:34;;;;3296:1:36;777:3573:34;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;2321:4:48;777:3573:34;;;;;:::i;:::-;-1:-1:-1;777:3573:34;;2321:4:48;777:3573:34;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;777:3573:34;;-1:-1:-1;777:3573:34;;;;-1:-1:-1;777:3573:34;;;;-1:-1:-1;777:3573:34;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;2321:4:48;;;:::i;:::-;777:3573:34;;;;;;:::i;:::-;2321:4:48;;;777:3573:34;;;;;:::i;:::-;;;-1:-1:-1;777:3573:34;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;777:3573:34;;-1:-1:-1;777:3573:34;;;;-1:-1:-1;777:3573:34;;;;;;;:::i;:::-;;2321:4:48;;;:::i;:::-;777:3573:34;;;;;;:::i;:::-;2321:4:48;;;777:3573:34;;;;;:::i;:::-;;;-1:-1:-1;777:3573:34;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;;;;3222:3755:35;;;777:3573:34;3222:3755:35;777:3573:34;;:::i;:::-;-1:-1:-1;3403:1:35;;1318:135:68;;;;;777:3573:34;;3776:18:35;3804:19;3730:66;3751:44;3776:18;;;;:::i;:::-;3751:44;;;;:::i;:::-;3730:66;;:::i;:::-;3804:19;;;;:::i;:::-;3873:18;;;2321:4:48;777:3573:34;2321:4:48;;;777:3573:34;;;;2321:4:48;777:3573:34;3873:32:35;3869:101;;-1:-1:-1;798:135:68;;;;777:3573:34;683:254:68;798:135;;;;;;;4204:35:35;798:135:68;4204:35:35;:::i;:::-;4328:13;3403:1;4343:20;;;;;;5194;;;;;:45;;;;4323:773;5190:109;;;777:3573:34;5375:13:35;;;;;;;:::i;:::-;5424:31;;;;;;:::i;:::-;5403:18;;;;:52;;;3403:1;5464:1486;5484:14;;;;;;6962:10;;;;;;;;3222:3755;:::o;5500:3::-;683:254:68;777:3573:34;;:::i;:::-;683:254:68;798:135;;;;;;;;;;;;683:254;;5403:18:35;5723:11;;5722:18;;777:3573:34;;5723:11:35;;2321:4:48;;777:3573:34;5757:24:35;;5893:4;5886:11;777:3573:34;;5979:42:35;;;5975:120;;3403:1;3511:494:68;6717:28:35;6172:33;;3873:18;6172:33;;;:::i;:::-;;6144:25;;;:61;5753:624;3511:494:68;;:::i;:::-;6527:61:35;;;;6620:55;6649:13;:16;:13;;;;;:::i;:16::-;6620:55;:::i;:::-;777:3573:34;;;6717:28:35;;;;777:3573:34;;;;;;;;;;;;;;;;;;;;;;;;;6717:28:35;;;;;;2321:4:48;6717:28:35;;;;;6761:41;2321:4:48;3403:1:35;6717:28;6687:58;3873:18;6687:27;;:58;;2321:4:48;777:3573:34;;2321:4:48;;;6761:41:35;;6757:127;;6904:37;:18;2321:4:48;6904:18:35;;;:37;;;;;:::i;:::-;;2321:4:48;5469:13:35;;;6757:127;6825:46;3403:1;6825:46;;777:3573:34;;;6825:46:35;777:3573:34;;6825:46:35;3403:1;6825:46;6717:28;;:::i;5975:120::-;6046:34;3403:1;6046:34;;3403:1;6046:34;5753:624;3403:1;3511:494:68;6717:28:35;6326:31;:38;3873:18;6326:31;777:3573:34;6326:31:35;;777:3573:34;;;;;;6326:38:35;5753:624;;5190:109;5258:32;3403:1;5258:32;;3403:1;5258:32;5194:45;5218:21;;;5194:45;;;4365:3;3511:494:68;777:3573:34;3873:18:35;3403:1;4429:52;4874:35;777:3573:34;;;:::i;:::-;;4429:52:35;;;:::i;:::-;3511:494:68;;;;;:::i;:::-;4635:61:35;;;;4816:12;;;:::i;4874:35::-;;;;;;2321:4:48;4874:35:35;;;;;3403:1;4874:35;777:3573:34;4925:45:35;2321:4:48;;;777:3573:34;;;;4925:45:35;777:3573:34;;4925:45:35;4921:122;;2321:4:48;5063:24:35;;;;;:::i;:::-;;;;;;:::i;:::-;;2321:4:48;4328:13:35;;4921:122;4993:37;3403:1;4993:37;;3403:1;4993:37;3869:101;3924:37;;;;;;777:3573:34;;;;;;;:::i;:::-;;;;-1:-1:-1;777:3573:34;;-1:-1:-1;777:3573:34;;;;-1:-1:-1;777:3573:34;;;;-1:-1:-1;777:3573:34;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;1753:2649:36:-;;;;;;;;2321:4:48;;:::i;:::-;2159:44:36;777:3573:34;;:::i;:::-;2214:13:36;-1:-1:-1;2263:3:36;777:3573:34;;2229:32:36;;;;;2280:31;:24;;;;:::i;:31::-;777:3573:34;;;;;;2280:48:36;2276:133;;2321:4:48;;2214:13:36;;2276:133;2361:24;;;;;;;;;;;:::i;:::-;;2395:5;2209:206;777:3573:34;2321:4:48;;;777:3573:34;;;;2321:4:48;777:3573:34;2424:39:36;2420:116;;2587:26;;;2321:4:48;2587:31:36;;;:78;;;2209:206;2583:162;;-1:-1:-1;2792:27:36;;;777:3573:34;;;2792:32:36;;;;:81;;2209:206;2788:166;;3027:13;;;;;:22;:13;;;;:::i;:22::-;3059:17;;;;;;:::i;:::-;3055:80;;3225:7;;;:::i;:::-;777:3573:34;;3244:4:36;3225:24;3221:303;;3059:17;3598:30;;777:3573:34;3598:30:36;;777:3573:34;;;3581:54:36;;;;3577:115;;3883:86;3728:30;:45;:30;;:45;:::i;:::-;;3943:25;2587:26;3943:25;;;;;;3883:86;;:::i;:::-;3979:8;;3975:69;;2587:26;4049:34;;4132:10;777:3573:34;4132:14:36;4128:82;;2209:206;4219:33;3027:13;4219:33;;;2321:4:48;4255:29:36;;2321:4:48;-1:-1:-1;4215:151:36;;1753:2649;:::o;4215:151::-;4331:28;-1:-1:-1;4331:28:36;;-1:-1:-1;4331:28:36;4128:82;4156:47;3027:13;4156:33;;2321:4:48;;;4156:47:36;:::i;:::-;2321:4:48;;4128:82:36;;;3975:69;4004:33;-1:-1:-1;4004:33:36;;-1:-1:-1;4004:33:36;3577:115;3652:33;-1:-1:-1;3652:33:36;;-1:-1:-1;3652:33:36;3221:303;3284:9;;;;;2587:26;3277:22;3284:14;:9;3027:13;3284:9;;;;:::i;:::-;:14;;:::i;:::-;3277:22;;:::i;:::-;3311:10;;777:3573:34;3311:14:36;;;;:82;;;3221:303;3307:145;;;3492:25;:::o;3307:145::-;3412:31;-1:-1:-1;3412:31:36;3296:1;-1:-1:-1;3412:31:36;3311:82;3341:52;777:3573:34;;;;3329:64:36;;3311:82;;;2788:166;2890:57;-1:-1:-1;2890:57:36;777:3573:34;;2890:57:36;777:3573:34;;3403:1:35;6825:46;2792:81:36;-1:-1:-1;777:3573:34;;;2828:15:36;:45;2792:81;;2583:162;2682:56;-1:-1:-1;2682:56:36;;777:3573:34;;3403:1:35;6825:46;2587:78:36;2652:13;;2622:43;;;2587:78;;2420:116;2480:49;-1:-1:-1;2480:49:36;777:3573:34;;;2480:49:36;777:3573:34;;3403:1:35;6825:46;2229:32:36;;;;;;;;;;;;777:3573:34;;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;777:3573:34;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;777:3573:34;;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;748:1238:42:-;;;;;1001:43;2321:4:48;;;777:3573:34;;;;1001:43:42;777:3573:34;;;1001:43:42;997:120;;1165:17;;;;;:::i;:::-;1161:80;;1292:47;;;;:::i;:::-;1288:122;;1491:7;1469:41;1491:7;;;;:::i;:::-;1469:41;:::i;:::-;1465:110;;1600:10;;;777:3573:34;1596:70:42;;1600:10;1747:7;1726:51;:29;1747:7;1726:78;1747:7;;:::i;1726:51::-;777:3573:34;;1726:78:42;;;;;777:3573:34;1726:78:42;;;;;;;;:::i;:::-;;;;;;;;;;1018:26;1726:78;;;748:1238;1837:48;;;;;:::i;:::-;1895:26;1891:91;;748:1238::o;1891:91::-;1938:37;1018:26;1938:37;1726:78;1018:26;1938:37;1726:78;1837:48;1726:78;;;;1600:10;1726:78;1600:10;1726:78;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;1465:110;1527:41;1560:7;;;:::i;:::-;1527:41;1018:26;1527:41;777:3573:34;;2480:49:36;777:3573:34;;;;1288:122:42;1356:47;1018:26;1356:47;777:3573:34;;2480:49:36;777:3573:34;;3403:1:35;6825:46;997:120:42;1061:49;1018:26;1061:49;777:3573:34;;2480:49:36;777:3573:34;;3403:1:35;6825:46;2763:4:48;;;;;;;;;;;:::i;:::-;;;;;;;;;777:3573:34;;;;;;;;;2763:4:48;;777:3573:34;;:::i;:::-;2763:4:48;;;;;;;;;;;;;;;;-1:-1:-1;2763:4:48;;777:3573:34;;;;2763:4:48:o;4690:1776:36:-;;777:3573:34;;4903:1559:36;;4690:1776;;:::o;4903:1559::-;5002:7;;;:::i;:::-;777:3573:34;;5021:4:36;5002:24;;;;:84;;4903:1559;4998:158;;4935:1;5251:13;;5297:3;777:3573:34;;5266:29:36;;;;;5312:56;5333:21;:28;:21;;;;:::i;:::-;;:28;;777:3573:34;5312:56:36;;:::i;:::-;5382:21;:36;:21;;;;:::i;:::-;;:36;2321:4:48;5378:88:36;;5297:3;2321:4:48;;5251:13:36;;;5378:88;5436:19;;2321:4:48;5436:19:36;;:::i;:::-;5378:88;;;;;5266:29;5510:35;5266:29;;;;5510:35;:::i;:::-;4935:1;5588:13;;5583:505;5634:3;777:3573:34;;5603:29:36;;;;;4935:1;5710:3;5333:28;5673:21;;;;:::i;:::-;;:28;;777:3573:34;5669:39:36;;;;;5750:21;5727:54;5750:31;2321:4:48;5750:21:36;5333:28;5750:21;;;;:::i;:::-;;:28;;:31;:::i;:::-;;5734:12;;;;:::i;:::-;5727:54;;;;;:::i;:::-;;;;:::i;:::-;;2321:4:48;5654:13:36;;5669:39;;;;2321:4:48;5669:39:36;5382:36;5805:21;;;;:::i;:::-;;:36;2321:4:48;5801:279:36;;5649:143;2321:4:48;5588:13:36;;;;5801:279;5859:210;5939:28;:21;;;;:::i;:28::-;5382:36;777:3573:34;5928:64:36;;;5333:28;5928:64;;;;2321:4:48;724:42:36;2321:4:48;;;;777:3573:34;2321:4:48;;;777:3573:34;;;;2321:4:48;777:3573:34;2321:4:48;5928:64:36;777:3573:34;5918:75:36;;6020:21;5382:36;6020:21;;;;:::i;:::-;;:36;2321:4:48;;;:::i;:::-;;;;5333:28:36;5882:187;;2321:4:48;5866:12:36;;;:::i;:::-;5859:210;;;;;:::i;:::-;;;;:::i;:::-;;5801:279;;5603:29;;;;2763:4:48;5603:29:36;;6330:9;5603:29;;5382:36;777:3573:34;6164:65:36;;;5333:28;6164:65;;;777:3573:34;6164:65:36;;;;;;:::i;:::-;777:3573:34;6264:23:36;;6330:9;5382:36;6330:9;;;;:::i;:::-;2763:4:48;;;:::i;:::-;5333:28:36;777:3573:34;;;;6320:20:36;6352:34;6348:108;;4690:1776::o;5002:84::-;5030:20;2763:4:48;5030:20:36;;;777:3573:34;5030:56:36;;5002:84;;996:2:35;;2321:4:48;;;:::i;:::-;777:3573:34;;;;;;:::i;:::-;2321:4:48;;;996:2:35;;;;;:::i;:::-;;;-1:-1:-1;996:2:35;;;;;;;;;:::o;:::-;;777:3573:34;;;:::i;:::-;996:2:35;;;;;;;;;880:1;;2321:4:48;;;:::i;:::-;777:3573:34;;;;;;:::i;:::-;2321:4:48;;;880:1:35;;;;;:::i;:::-;;;;;;;;:::o;7660:5655::-;;777:3573:34;;:::i;:::-;;;;;;;8019:44:35;996:2;;;8019:44;:::i;:::-;7994:22;;;;:69;;;8083:24;;;;;;-1:-1:-1;;13178:22:35;13208:64;13178:22;13284:26;-1:-1:-1;7660:5655:35:o;8076:4981::-;798:135:68;;;;996:2:35;;;;;798:135:68;;;;;;;8410:24:35;;8406:1077;;9516:17;787:1;9516:17;;9512:288;;832:1;9835:19;;9831:1501;;880:1;11370:22;;11366:1053;;12463:28;8354:1;12463:28;;12459:541;;13015:35;777:3573:34;13015:35:35;2682:56:36;777:3573:34;;;;3403:1:35;6825:46;12459:541;12507:18;;;;;;;;;;;777:3573:34;2321:4:48;;;777:3573:34;;;;2321:4:48;777:3573:34;12503:146:35;;3281:184:68;;;;;;2321:4:48;;3281:184:68;;;;;12785:46:35;;2321:4:48;;12658:60:35;2321:4:48;;12785:46:35;:::i;:::-;2321:4:48;;12867:27:35;;;;12897:54;;;545:85:69;;;;;;;461:173;;12897:54:35;2321:4:48;;8076:4981:35;;;;;;;;;;12867:105;;;;11366:1053;11404:115;;;;;;;;;;;;11674:4;787:1;11662:16;;11674:4;11693:22;;11689:181;;11366:1053;11879:30;11984:29;;;;:::i;:::-;11960:21;;;:53;;;12028:13;777:3573:34;12043:18:35;;;;;;12240:29;;;;;;12218:52;12240:29;;;;:::i;:::-;12218:52;;:::i;:::-;2321:4:48;;12296:27:35;;;;12326:49;;;545:85:69;;;;;;;461:173;;12326:49:35;2321:4:48;;12402:8:35;;12296:95;;;;12063:3;12080:66;;3281:184:68;;;;;;;;;12081:21:35;;12080:66;12081:21;;;12080:66;:::i;:::-;2321:4:48;777:3573:34;;2321:4:48;;;12080:66:35;2321:4:48;12028:13:35;;;;11689:181;-1:-1:-1;1058:135:68;;;;;;;;;11689:181:35;;9831:1501;10100:14;9953:16;;;2213:380:68;10187:46:35;9953:16;9965:4;10208:24;9953:16;;;;;;;;;2213:380:68;;;;;;2363:226;;;;;;;;;;;;;;;;;;;2213:380;;;10100:14:35;;;;:::i;:::-;10208:24;;;;;:::i;10187:46::-;10243:17;;;10309:261;;;9831:1501;10628:24;;;777:3573:34;2321:4:48;;;777:3573:34;;;;2321:4:48;777:3573:34;10624:275:35;;9831:1501;10978:13;777:3573:34;11034:3:35;7994:22;10997:28;;;777:3573:34;;10993:39:35;;;;;11096:31;11051:76;11096:31;;787:1;11096:31;;:::i;:::-;;11051:22;;;11074:18;;;:::i;:::-;11051:76;;;;;:::i;:::-;;2321:4:48;10978:13:35;;10993:39;;;;;;;;;;;2321:4:48;;11197:27:35;;;:107;:27;;;11227:55;2321:4:48;;11227:55:35;545:85:69;;;;;;;461:173;;11197:107:35;2321:4:48;;11197:107:35;;10624:275;10628:24;10684:18;;:32;2321:4:48;;;777:3573:34;;;;10684:32:35;10680:152;;2321:4:48;10843:45:35;2321:4:48;;777:3573:34;;;;2321:4:48;777:3573:34;;2321:4:48;;;10843:45:35;10624:275;;;10309:261;10345:121;;;787:1;10532:27;;;;;;10508:21;;:51;10309:261;;9512:288;-1:-1:-1;2321:4:48;;2926:232:68;;-1:-1:-1;2926:232:68;;;;;;;;;;3047:107;;;;;;;;9695:27:35;;;;9725:40;;;545:85:69;;;;;;;461:173;;8406:1077:35;777:3573:34;;;;;;;;;;;;:::i;:::-;3281:184:68;;;;;;;;;2321:4:48;;3281:184:68;3047:107;;;;8661:23:35;;2321:4:48;3047:107:68;;;;8765:26:35;;;2321:4:48;3047:107:68;1578:135;;;;;;8869:24:35;;;744:1;3162:307:68;9019:36:35;1578:135:68;;;9019:36:35;3281:184:68;9019:36:35;:::i;:::-;8978:77;;;8979:27;;;8978:77;9150:29;;;;;:::i;:::-;9126:54;;;:::i;:::-;2321:4:48;;9396:60:35;;2321:4:48;;9220:27:35;;;;9250:50;;;545:85:69;;;;;;;461:173;;9250:50:35;2321:4:48;;9396:22:35;;9419:18;;;:::i;:::-;9396:60;;;;;:::i;:::-;;9466:8;;9220:97;;;;1522:857:40;2297:39;1522:857;;;;2215:22;777:3573:34;1201:256:68;2716:202;777:3573:34;;:::i;:::-;3281:184:68;2716:202;3281:184;;;;;;;;2321:4:48;;2716:202:68;;;1783:24:40;;;777:3573:34;2716:202:68;3047:107;;;;;;;1860:22:40;;;;2321:4:48;3047:107:68;;;;;;;1936:24:40;3281:184:68;1936:24:40;;2321:4:48;1201:256:68;1318:135;1201:256;;;;1318:135;;;;;;;1201:256;;;777:3573:34;;2187:21:40;2763:4:48;2168:41:40;2187:21;;;;:::i;:::-;2168:41;;;;:::i;2763:4:48:-;2138:27:40;;;:71;2215:22;:::i;:::-;2297:39;;:::i;:::-;2261:20;;;;;2260:76;2342:32;1522:857;:::o;3511:494:68:-;3690:173;;;;;;;;;;;;3998:2;3955:14;3931:39;;996:2:35;777:3573:34;996:2:35;777:3573:34;;;;;;3511:494:68;:::o;1087:138:40:-;777:3573:34;2321:4:48;;777:3573:34;3520:24:40;3462:279;777:3573:34;3520:24:40;;;777:3573:34;;3462:279:40;777:3573:34;3552:22:40;;;2321:4:48;3582:24:40;;;;2321:4:48;3621:27:40;;;;;777:3573:34;4019:108:40;777:3573:34;;3714:20:40;777:3573:34;;;;3714:20:40;;;4049;;777:3573:34;3520:24:40;777:3573:34;;4109:17:40;;777:3573:34;;3552:22:40;777:3573:34;;;;;;;3520:24:40;4019:108;;777:3573:34;;;;;;3520:24:40;777:3573:34;;;;;;:::i;:::-;;;;;;;;;;;4019:108:40;;;;;;;;;;:::i;:::-;3552:22;777:3573:34;3462:279:40;;;3520:24;3462:279;;;;;:::i;:::-;777:3573:34;1188:32:40;;1087:138;:::o;777:3573:34:-;;;;;;;;;;;;;;;;;;:::i;14910:301:35:-;;15108:17;;;2321:4:48;;;;:::i;:::-;15108:37:35;;;-1:-1:-1;15108:37:35;;15162:13;15147;;;777:3573:34;15162:13:35;;777:3573:34;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;15108:17:35;777:3573:34;;;15108:17:35;777:3573:34;;;;;;;;;;;;;15091:109:35;777:3573:34;;15177:22:35;777:3573:34;;15091:109:35;777:3573:34;;;;;;:::i;:::-;;;;;15147:13:35;777:3573:34;;;15147:13:35;777:3573:34;;;;15162:13:35;777:3573:34;;;:::i;:::-;15162:13:35;777:3573:34;;;;;;;;:::i;:::-;;;;;;;;;;;15177:22:35;:::i;:::-;777:3573:34;;15091:109:35;;;15108:17;15091:109;;;;777:3573:34;;;;;;;;;;;;;;;;;;;;;;;15108:37:35;15132:13;15108:37;;;777:3573:34;;;;;;;;2415:1:42;777:3573:34;;;:::o;:::-;;2415:1:42;777:3573:34;;;;2415:1:42;777:3573:34;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;2242:511:42:-;777:3573:34;;;;;;;;;2415:1:42;777:3573:34;;;2423:307:42;2430:13;;;;;;;2736:12;;;;777:3573:34;2242:511:42;:::o;2423:307::-;777:3573:34;;;;;;;;;;;;;;;;;;;;;2466:25:42;;2490:1;777:3573:34;;2466:25:42;;:::i;:::-;2524:23;;;;;;:::i;:::-;777:3573:34;;;;;;2560:24:42;;;;;2596:11;;;;;;;2415:1;2596:11;:::o;2556:168::-;2626:23;;;;2668:7;;;;:::i;:::-;2423:307;;2622:102;2708:7;;;;;:::i;:::-;2622:102;2423:307;;4328:271:40;;777:3573:34;;284:41:41;;;777:3573:34;;;;284:41:41;;;;;;;:::i;:::-;777:3573:34;274:52:41;;4539:24:40;777:3573:34;4539:24:40;;;2321:4:48;4565:22:40;;2321:4:48;777:3573:34;274:52:41;777:3573:34;;4476:112:40;284:41:41;4476:112:40;;777:3573:34;;;4539:24:40;274:52:41;;777:3573:34;274:52:41;;;;;;777:3573:34;274:52:41;;;777:3573:34;274:52:41;4476:112:40;;;;;;:::i;777:3573:34:-;2321:4:48;777:3573:34;;;;;:::i;:::-;2321:4:48;777:3573:34;;-1:-1:-1;777:3573:34;;;;:::o;13395:444:35:-;798:135:68;;;;13395:444:35;798:135:68;;;;;2321:4:48;798:135:68;2321:4:48;:::i;:::-;777:3573:34;;;;;;;:::i;:::-;2321:4:48;;;777:3573:34;;;;:::i;:::-;;-1:-1:-1;777:3573:34;;;;;;13679:13:35;;-1:-1:-1;13674:126:35;13694:10;;;;;;13805:29;;;;;13395:444;:::o;13706:3::-;13747:46;;;;;798:135:68;13747:46:35;;;;:::i;:::-;13719:74;;;;;;:::i;:::-;;2321:4:48;13679:13:35;;;;;777:3573:34;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;13914:198:35;;14045:61;777:3573:34;14045:61:35;13914:198;777:3573:34;;14045:61:35;;;;;;;;-1:-1:-1;777:3573:34;;;;;;;;;;;;-1:-1:-1;777:3573:34;;14045:61:35;;;;;;;;;;:::i;14177:190::-;;14304:57;777:3573:34;14304:57:35;14177:190;777:3573:34;;14304:57:35;;;;;;;;777:3573:34;;;;;;;;;;;;;-1:-1:-1;777:3573:34;;14304:57:35;;;;;;;;;;:::i;14430:190::-;777:3573:34;;274:52:41;14553:61:35;;;777:3573:34;;;;274:52:41;;;777:3573:34;;;274:52:41;14553:61:35;;;;;;;:::i;2723:460:40:-;;;777:3573:34;;:::i;:::-;1318:135:68;;;;;;;;;;;777:3573:34;;1318:135:68;777:3573:34;;;;;;;;3003:44:40;1318:135:68;3003:44:40;777:3573:34;3003:44:40;1578:135:68;3003:44:40;;;:::i;777:3573:34:-;2973:75:40;;1578:135:68;;;;;;3089:17:40;;;744:1:35;1578:135:68;;2723:460:40;:::o;777:3573:34:-;;;;;;;;;;274:52:41;777:3573:34;;274:52:41;;;;;777:3573:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;:::o;7564:252:48:-;777:3573:34;2321:4:48;;777:3573:34;7708:7:48;;;;2321:4;7727:6;;;;;7708:7;777:3573:34;;;;7717:17:48;7736:10;;;;2321:4;7748:14;;;2321:4;777:3573:34;;7764:14:48;7780:17;7764:14;;;2321:4;777:3573:34;;7780:17:48;;2321:4;777:3573:34;7727:6:48;777:3573:34;7667:138:48;7708:7;7667:138;;777:3573:34;1478:66:48;777:3573:34;;7727:6:48;1478:66;;777:3573:34;7736:10:48;1478:66;;777:3573:34;7748:14:48;1478:66;;777:3573:34;7764:14:48;1478:66;;777:3573:34;7780:17:48;1478:66;;777:3573:34;1478:66:48;;;777:3573:34;1478:66:48;;;777:3573:34;1478:66:48;7667:138;;;;;;:::i;777:3573:34:-;;2321:4:48;;;:::i;:::-;777:3573:34;;;;;;:::i;:::-;2321:4:48;;;777:3573:34;;;;;:::i;:::-;;;-1:-1:-1;777:3573:34;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;-1:-1:-1;777:3573:34;;-1:-1:-1;777:3573:34;;;;-1:-1:-1;777:3573:34;;;;-1:-1:-1;777:3573:34;;;;-1:-1:-1;777:3573:34;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;1741:1004:38:-;777:3573:34;1741:1004:38;;;;683:254:68;1911:59:38;3162:307:68;777:3573:34;;:::i;:::-;3162:307:68;3281:184;;;;;;;;;;;;3162:307;;777:3573:34;;;;2321:4:48;;1911:59:38;2321:4:48;1911:59:38;798:135:68;;;;;;;;;;;;683:254;;2014:51:38;777:3573:34;2090:32:38;;;:::i;:::-;2071:16;;;:51;;;-1:-1:-1;2128:579:38;2148:15;;;;;;2712:28;;;;;1741:1004;:::o;2165:3::-;683:254:68;;;;2926:232;1983:226;2926:232;2304:61:38;2398:76;683:254:68;2071:16:38;2398:19;2430:44;2449:24;683:254:68;;2359:1:38;683:254:68;;798:135;683:254;;;;798:135;;;;;;;683:254;;;2337:23:38;;;2304:19;2337:23;;;;:28;;2304:16;;:19;:::i;:::-;;777:3573:34;;;;;;2304:61:38;777:3573:34;996:2:35;;;;777:3573:34;2449:24:38;2430:44;:::i;:::-;2398:16;;;:19;:::i;:::-;;:29;:76;:::i;:::-;3047:107:68;;;;;;;;;;2926:232;;2484:16:38;:25;:19;:16;;;:19;:::i;:::-;;:25;2321:4:48;3047:107:68;;;;;;;;;;2926:232;1983:226;2559:16:38;:26;:19;:16;;;:19;:::i;:::-;;:26;2321:4:48;3047:107:68;;;;;;;;;;2926:232;;2635:16:38;;:24;:19;:16;;;:19;:::i;:::-;;:24;2321:4:48;;2133:13:38;;;;","linkReferences":{}},"methodIdentifiers":{"VALUE_TRACKING_ADDRESS()":"f916f3b2","getLimitUsage(address,bytes32)":"23b3713e","incrementUsageLimit((bytes32,uint256)[])":"42de1418","recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":"13792a4a","validatePermission((address,(bool,uint8,bytes32,uint256,bytes32)[]),(address,uint256,bytes,uint256,bool,bool,uint256),address,address,(bytes32,uint256)[])":"313dade7"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"BlacklistedAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAttestation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidBlacklist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidCallsLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"invalidChainId\",\"type\":\"uint256\"}],\"name\":\"InvalidChainId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidIdentitySigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidImplicitResult\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidLimitUsageIncrement\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"flag\",\"type\":\"uint256\"}],\"name\":\"InvalidNodeType\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPayloadKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPermission\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSelfCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"invalidSigner\",\"type\":\"address\"}],\"name\":\"InvalidSessionSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MissingPermission\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"SessionExpired\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"wallet\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"usageHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"usageAmount\",\"type\":\"uint256\"}],\"name\":\"LimitUsageUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"VALUE_TRACKING_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"wallet\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"usageHash\",\"type\":\"bytes32\"}],\"name\":\"getLimitUsage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"usageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"usageAmount\",\"type\":\"uint256\"}],\"internalType\":\"struct UsageLimit[]\",\"name\":\"limits\",\"type\":\"tuple[]\"}],\"name\":\"incrementUsageLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"encodedSignature\",\"type\":\"bytes\"}],\"name\":\"recoverSapientSignature\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"cumulative\",\"type\":\"bool\"},{\"internalType\":\"enum ParameterOperation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"offset\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"mask\",\"type\":\"bytes32\"}],\"internalType\":\"struct ParameterRule[]\",\"name\":\"rules\",\"type\":\"tuple[]\"}],\"internalType\":\"struct Permission\",\"name\":\"permission\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call\",\"name\":\"call\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"wallet\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"usageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"usageAmount\",\"type\":\"uint256\"}],\"internalType\":\"struct UsageLimit[]\",\"name\":\"usageLimits\",\"type\":\"tuple[]\"}],\"name\":\"validatePermission\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"usageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"usageAmount\",\"type\":\"uint256\"}],\"internalType\":\"struct UsageLimit[]\",\"name\":\"newUsageLimits\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Michael Standen, Agustin Aguilar\",\"kind\":\"dev\",\"methods\":{\"getLimitUsage(address,bytes32)\":{\"params\":{\"usageHash\":\"The usage hash\",\"wallet\":\"The wallet address\"},\"returns\":{\"_0\":\"The usage amount\"}},\"incrementUsageLimit((bytes32,uint256)[])\":{\"params\":{\"limits\":\"Array of limit/session/target combinations\"}},\"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"params\":{\"payload\":\"The payload to recover the signature from\",\"signature\":\"The signature to recover the image hash from\"},\"returns\":{\"_0\":\"The recovered image hash\"}},\"validatePermission((address,(bool,uint8,bytes32,uint256,bytes32)[]),(address,uint256,bytes,uint256,bool,bool,uint256),address,address,(bytes32,uint256)[])\":{\"params\":{\"call\":\"The call to validate against\",\"permission\":\"The rules permission to validate\",\"signer\":\"The signer address\",\"usageLimits\":\"Array of current usage limits\",\"wallet\":\"The wallet address\"},\"returns\":{\"_0\":\"True if the permission is valid, false otherwise\",\"newUsageLimits\":\"New array of usage limits\"}}},\"title\":\"SessionManager\",\"version\":1},\"userdoc\":{\"errors\":{\"BlacklistedAddress(address)\":[{\"notice\":\"Blacklisted address\"}],\"InvalidAttestation()\":[{\"notice\":\"Invalid attestation\"}],\"InvalidBlacklist()\":[{\"notice\":\"Invalid blacklist\"}],\"InvalidCallsLength()\":[{\"notice\":\"Error thrown when the calls length is invalid\"}],\"InvalidChainId(uint256)\":[{\"notice\":\"Invalid chainId\"}],\"InvalidDelegateCall()\":[{\"notice\":\"Invalid delegate call\"}],\"InvalidIdentitySigner()\":[{\"notice\":\"Invalid identity signer\"}],\"InvalidImplicitResult()\":[{\"notice\":\"Invalid implicit result\"}],\"InvalidLimitUsageIncrement()\":[{\"notice\":\"Invalid limit usage increment\"}],\"InvalidNodeType(uint256)\":[{\"notice\":\"Invalid node type in session configuration\"}],\"InvalidPayloadKind()\":[{\"notice\":\"Error thrown when the payload kind is invalid\"}],\"InvalidPermission()\":[{\"notice\":\"Invalid permission for explicit session\"}],\"InvalidSelfCall()\":[{\"notice\":\"Invalid self call\"}],\"InvalidSessionSigner(address)\":[{\"notice\":\"Invalid session signer\"}],\"InvalidValue()\":[{\"notice\":\"Invalid value\"}],\"MissingPermission()\":[{\"notice\":\"Missing permission for explicit session\"}],\"SessionExpired(uint256)\":[{\"notice\":\"Session expired\"}]},\"events\":{\"LimitUsageUpdated(address,bytes32,uint256)\":{\"notice\":\"Emitted when the usage amount for a given wallet and usage hash is updated\"}},\"kind\":\"user\",\"methods\":{\"VALUE_TRACKING_ADDRESS()\":{\"notice\":\"Special address used for tracking native token value limits\"},\"getLimitUsage(address,bytes32)\":{\"notice\":\"Get the usage amount for a given usage hash and wallet\"},\"incrementUsageLimit((bytes32,uint256)[])\":{\"notice\":\"Increment usage for a caller's given session and target\"},\"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"notice\":\"Recovers the image hash of a given signature\"},\"validatePermission((address,(bool,uint8,bytes32,uint256,bytes32)[]),(address,uint256,bytes,uint256,bool,bool,uint256),address,address,(bytes32,uint256)[])\":{\"notice\":\"Validates a rules permission\"}},\"notice\":\"Manager for smart sessions\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/extensions/sessions/SessionManager.sol\":\"SessionManager\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/extensions/sessions/SessionErrors.sol\":{\"keccak256\":\"0xa7642b4ef1d2ac8e41bd6dca88c5a644cac21b3ebe79deb5013e21fb4aaab405\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ef80768f6c509a54ea5d3fb92cbf46363f945f071cc3664710770c09b3d2a978\",\"dweb:/ipfs/QmbRpicAiPSYQbKpjoDbanap9q5hYsqEMS1u7w7sqKEYTY\"]},\"src/extensions/sessions/SessionManager.sol\":{\"keccak256\":\"0x796e8db3b2dc58842aca5c7fe76897527dd60279a8146ee107f651d876fccbd9\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2ee4d968a8bd5d007cccc67108509470677f4f5ce59dce7005b1da7d9b243609\",\"dweb:/ipfs/QmVUz8Q4BwNsbeLZdsWHg87MCVF6aAJL6UYzWWWAoxjvS7\"]},\"src/extensions/sessions/SessionSig.sol\":{\"keccak256\":\"0x7c44eabacfd2b4758fa8f54574f7479d8ef0209551ad824b3fc497c215a9609a\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://845b301783b1f069fa0b01d47ca2de1a79b0d4c3e14881973421a718c4d823df\",\"dweb:/ipfs/QmcDgiqjENAL3L7MjQ7HgitmsJ2PVNUm3ibnL2DZRU1VAL\"]},\"src/extensions/sessions/explicit/ExplicitSessionManager.sol\":{\"keccak256\":\"0x08405cc3def78d4172267a2e607e303b5f222d8cb85ba009deab58e0110088b0\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e2e073fdb5794f59ee6d7eb5e04074b1452e5d0824e4117259835071199f3d32\",\"dweb:/ipfs/Qmbi56yfELF88ezZ2tczegLmeB6Gb3HxDX11bzx3rpDgJZ\"]},\"src/extensions/sessions/explicit/IExplicitSessionManager.sol\":{\"keccak256\":\"0xae940e96cf0677c9b0df0daee07db0293c55a21cec0b893d82eefd122815602b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://62ee98f92121ad54f78d375ec3003aab73719adec852b0d12518fe99fc6f66c6\",\"dweb:/ipfs/QmPuAX7tdga5Su1xua6LS6jR9DsV7GyCwyZLeRC8upPTKY\"]},\"src/extensions/sessions/explicit/Permission.sol\":{\"keccak256\":\"0x0bc35a04da3830c64ec13c32b57f88be6b980228f6b387e800cf70919cdcfb16\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://fcb304612f894699f8e1e40cf134abebe8f7135795bea479b04e967551c59948\",\"dweb:/ipfs/Qme4mD8dh3xU9wbscQwvL4cQcZ2Wv8Fobo2fmU29B3DirV\"]},\"src/extensions/sessions/explicit/PermissionValidator.sol\":{\"keccak256\":\"0xe970e1ce931ef3779e3ddc9525b40820b7f63746828a440306ff9c984da42234\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://9154a986b7a5565119b2c0993dd9bc9e6e9b3e07eede034c8fde1c9f39a56a30\",\"dweb:/ipfs/QmXbgsr6kYYK5gmge6sosgwbHnFnQW5ntCZCyeNTQqTndD\"]},\"src/extensions/sessions/implicit/Attestation.sol\":{\"keccak256\":\"0xcaa44022b5eb4bc7ab487b3b1a0125da67e2e891cee983ef6cdb6814f045efc8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://94829782b6dcb482d7c002511c590d1ad8de3b21e5e72575df18be73565b3638\",\"dweb:/ipfs/QmZ4u9FxALzMzKR7auW8FmFkhGVw8kRDeDRJ1PKwKaWNWF\"]},\"src/extensions/sessions/implicit/ISignalsImplicitMode.sol\":{\"keccak256\":\"0x6cb48f50c49bcb3c7071306fe9fac6c102bc9eabf73d9909e19ab3b9a835d0a8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://15297e969f64fc1152654d1cefbe276c15a0ecfc11f86b4c276bb0b454fe700a\",\"dweb:/ipfs/QmeehNFYBPPtJePwUcqiYCgiuFotur4VVVCV1KvegdCCZ4\"]},\"src/extensions/sessions/implicit/ImplicitSessionManager.sol\":{\"keccak256\":\"0xe0d4f9f9c242e1e5781ba3a2eb4c4485b16de53769dacf7f448be01649d9997b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://f6f28cfeca83fffc74e63440243fcb0a7f9a7d5ac5efae21fa8e96926c1d0fae\",\"dweb:/ipfs/Qmdnw9PrjjpUjWij9VDxBRe6besuJvpwiGaPewVcR2G9C1\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/interfaces/ISapient.sol\":{\"keccak256\":\"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489\",\"dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"src/utils/LibOptim.sol\":{\"keccak256\":\"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81\",\"dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"BlacklistedAddress"},{"inputs":[],"type":"error","name":"InvalidAttestation"},{"inputs":[],"type":"error","name":"InvalidBlacklist"},{"inputs":[],"type":"error","name":"InvalidCallsLength"},{"inputs":[{"internalType":"uint256","name":"invalidChainId","type":"uint256"}],"type":"error","name":"InvalidChainId"},{"inputs":[],"type":"error","name":"InvalidDelegateCall"},{"inputs":[],"type":"error","name":"InvalidIdentitySigner"},{"inputs":[],"type":"error","name":"InvalidImplicitResult"},{"inputs":[],"type":"error","name":"InvalidLimitUsageIncrement"},{"inputs":[{"internalType":"uint256","name":"flag","type":"uint256"}],"type":"error","name":"InvalidNodeType"},{"inputs":[],"type":"error","name":"InvalidPayloadKind"},{"inputs":[],"type":"error","name":"InvalidPermission"},{"inputs":[],"type":"error","name":"InvalidSelfCall"},{"inputs":[{"internalType":"address","name":"invalidSigner","type":"address"}],"type":"error","name":"InvalidSessionSigner"},{"inputs":[],"type":"error","name":"InvalidValue"},{"inputs":[],"type":"error","name":"MissingPermission"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"}],"type":"error","name":"SessionExpired"},{"inputs":[{"internalType":"address","name":"wallet","type":"address","indexed":false},{"internalType":"bytes32","name":"usageHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"usageAmount","type":"uint256","indexed":false}],"type":"event","name":"LimitUsageUpdated","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"VALUE_TRACKING_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bytes32","name":"usageHash","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getLimitUsage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"struct UsageLimit[]","name":"limits","type":"tuple[]","components":[{"internalType":"bytes32","name":"usageHash","type":"bytes32"},{"internalType":"uint256","name":"usageAmount","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"incrementUsageLimit"},{"inputs":[{"internalType":"struct Payload.Decoded","name":"payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"encodedSignature","type":"bytes"}],"stateMutability":"view","type":"function","name":"recoverSapientSignature","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"struct Permission","name":"permission","type":"tuple","components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"struct ParameterRule[]","name":"rules","type":"tuple[]","components":[{"internalType":"bool","name":"cumulative","type":"bool"},{"internalType":"enum ParameterOperation","name":"operation","type":"uint8"},{"internalType":"bytes32","name":"value","type":"bytes32"},{"internalType":"uint256","name":"offset","type":"uint256"},{"internalType":"bytes32","name":"mask","type":"bytes32"}]}]},{"internalType":"struct Payload.Call","name":"call","type":"tuple","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"address","name":"wallet","type":"address"},{"internalType":"address","name":"signer","type":"address"},{"internalType":"struct UsageLimit[]","name":"usageLimits","type":"tuple[]","components":[{"internalType":"bytes32","name":"usageHash","type":"bytes32"},{"internalType":"uint256","name":"usageAmount","type":"uint256"}]}],"stateMutability":"view","type":"function","name":"validatePermission","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"struct UsageLimit[]","name":"newUsageLimits","type":"tuple[]","components":[{"internalType":"bytes32","name":"usageHash","type":"bytes32"},{"internalType":"uint256","name":"usageAmount","type":"uint256"}]}]}],"devdoc":{"kind":"dev","methods":{"getLimitUsage(address,bytes32)":{"params":{"usageHash":"The usage hash","wallet":"The wallet address"},"returns":{"_0":"The usage amount"}},"incrementUsageLimit((bytes32,uint256)[])":{"params":{"limits":"Array of limit/session/target combinations"}},"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"params":{"payload":"The payload to recover the signature from","signature":"The signature to recover the image hash from"},"returns":{"_0":"The recovered image hash"}},"validatePermission((address,(bool,uint8,bytes32,uint256,bytes32)[]),(address,uint256,bytes,uint256,bool,bool,uint256),address,address,(bytes32,uint256)[])":{"params":{"call":"The call to validate against","permission":"The rules permission to validate","signer":"The signer address","usageLimits":"Array of current usage limits","wallet":"The wallet address"},"returns":{"_0":"True if the permission is valid, false otherwise","newUsageLimits":"New array of usage limits"}}},"version":1},"userdoc":{"kind":"user","methods":{"VALUE_TRACKING_ADDRESS()":{"notice":"Special address used for tracking native token value limits"},"getLimitUsage(address,bytes32)":{"notice":"Get the usage amount for a given usage hash and wallet"},"incrementUsageLimit((bytes32,uint256)[])":{"notice":"Increment usage for a caller's given session and target"},"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"notice":"Recovers the image hash of a given signature"},"validatePermission((address,(bool,uint8,bytes32,uint256,bytes32)[]),(address,uint256,bytes,uint256,bool,bool,uint256),address,address,(bytes32,uint256)[])":{"notice":"Validates a rules permission"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/extensions/sessions/SessionManager.sol":"SessionManager"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/extensions/sessions/SessionErrors.sol":{"keccak256":"0xa7642b4ef1d2ac8e41bd6dca88c5a644cac21b3ebe79deb5013e21fb4aaab405","urls":["bzz-raw://ef80768f6c509a54ea5d3fb92cbf46363f945f071cc3664710770c09b3d2a978","dweb:/ipfs/QmbRpicAiPSYQbKpjoDbanap9q5hYsqEMS1u7w7sqKEYTY"],"license":"Apache-2.0"},"src/extensions/sessions/SessionManager.sol":{"keccak256":"0x796e8db3b2dc58842aca5c7fe76897527dd60279a8146ee107f651d876fccbd9","urls":["bzz-raw://2ee4d968a8bd5d007cccc67108509470677f4f5ce59dce7005b1da7d9b243609","dweb:/ipfs/QmVUz8Q4BwNsbeLZdsWHg87MCVF6aAJL6UYzWWWAoxjvS7"],"license":"Apache-2.0"},"src/extensions/sessions/SessionSig.sol":{"keccak256":"0x7c44eabacfd2b4758fa8f54574f7479d8ef0209551ad824b3fc497c215a9609a","urls":["bzz-raw://845b301783b1f069fa0b01d47ca2de1a79b0d4c3e14881973421a718c4d823df","dweb:/ipfs/QmcDgiqjENAL3L7MjQ7HgitmsJ2PVNUm3ibnL2DZRU1VAL"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/ExplicitSessionManager.sol":{"keccak256":"0x08405cc3def78d4172267a2e607e303b5f222d8cb85ba009deab58e0110088b0","urls":["bzz-raw://e2e073fdb5794f59ee6d7eb5e04074b1452e5d0824e4117259835071199f3d32","dweb:/ipfs/Qmbi56yfELF88ezZ2tczegLmeB6Gb3HxDX11bzx3rpDgJZ"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/IExplicitSessionManager.sol":{"keccak256":"0xae940e96cf0677c9b0df0daee07db0293c55a21cec0b893d82eefd122815602b","urls":["bzz-raw://62ee98f92121ad54f78d375ec3003aab73719adec852b0d12518fe99fc6f66c6","dweb:/ipfs/QmPuAX7tdga5Su1xua6LS6jR9DsV7GyCwyZLeRC8upPTKY"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/Permission.sol":{"keccak256":"0x0bc35a04da3830c64ec13c32b57f88be6b980228f6b387e800cf70919cdcfb16","urls":["bzz-raw://fcb304612f894699f8e1e40cf134abebe8f7135795bea479b04e967551c59948","dweb:/ipfs/Qme4mD8dh3xU9wbscQwvL4cQcZ2Wv8Fobo2fmU29B3DirV"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/PermissionValidator.sol":{"keccak256":"0xe970e1ce931ef3779e3ddc9525b40820b7f63746828a440306ff9c984da42234","urls":["bzz-raw://9154a986b7a5565119b2c0993dd9bc9e6e9b3e07eede034c8fde1c9f39a56a30","dweb:/ipfs/QmXbgsr6kYYK5gmge6sosgwbHnFnQW5ntCZCyeNTQqTndD"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/Attestation.sol":{"keccak256":"0xcaa44022b5eb4bc7ab487b3b1a0125da67e2e891cee983ef6cdb6814f045efc8","urls":["bzz-raw://94829782b6dcb482d7c002511c590d1ad8de3b21e5e72575df18be73565b3638","dweb:/ipfs/QmZ4u9FxALzMzKR7auW8FmFkhGVw8kRDeDRJ1PKwKaWNWF"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/ISignalsImplicitMode.sol":{"keccak256":"0x6cb48f50c49bcb3c7071306fe9fac6c102bc9eabf73d9909e19ab3b9a835d0a8","urls":["bzz-raw://15297e969f64fc1152654d1cefbe276c15a0ecfc11f86b4c276bb0b454fe700a","dweb:/ipfs/QmeehNFYBPPtJePwUcqiYCgiuFotur4VVVCV1KvegdCCZ4"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/ImplicitSessionManager.sol":{"keccak256":"0xe0d4f9f9c242e1e5781ba3a2eb4c4485b16de53769dacf7f448be01649d9997b","urls":["bzz-raw://f6f28cfeca83fffc74e63440243fcb0a7f9a7d5ac5efae21fa8e96926c1d0fae","dweb:/ipfs/Qmdnw9PrjjpUjWij9VDxBRe6besuJvpwiGaPewVcR2G9C1"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/interfaces/ISapient.sol":{"keccak256":"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359","urls":["bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489","dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"src/utils/LibOptim.sol":{"keccak256":"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde","urls":["bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81","dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x"],"license":"Apache-2.0"}},"version":1},"id":34} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/SessionManager.t.sol/SessionManagerTest.json b/contracts/artifacts/wallet-contracts-v3/SessionManager.t.sol/SessionManagerTest.json new file mode 100644 index 00000000..eafd0390 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/SessionManager.t.sol/SessionManagerTest.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"emitter","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract Emitter"}],"stateMutability":"view"},{"type":"function","name":"excludeArtifacts","inputs":[],"outputs":[{"name":"excludedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"excludeContracts","inputs":[],"outputs":[{"name":"excludedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"excludeSelectors","inputs":[],"outputs":[{"name":"excludedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"excludeSenders","inputs":[],"outputs":[{"name":"excludedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"explicitTarget","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"identityWallet","inputs":[],"outputs":[{"name":"addr","type":"address","internalType":"address"},{"name":"publicKeyX","type":"uint256","internalType":"uint256"},{"name":"publicKeyY","type":"uint256","internalType":"uint256"},{"name":"privateKey","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"sessionManager","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract SessionManager"}],"stateMutability":"view"},{"type":"function","name":"sessionWallet","inputs":[],"outputs":[{"name":"addr","type":"address","internalType":"address"},{"name":"publicKeyX","type":"uint256","internalType":"uint256"},{"name":"publicKeyY","type":"uint256","internalType":"uint256"},{"name":"privateKey","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"setUp","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"targetArtifactSelectors","inputs":[],"outputs":[{"name":"targetedArtifactSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzArtifactSelector[]","components":[{"name":"artifact","type":"string","internalType":"string"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetArtifacts","inputs":[],"outputs":[{"name":"targetedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"targetContracts","inputs":[],"outputs":[{"name":"targetedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"targetInterfaces","inputs":[],"outputs":[{"name":"targetedInterfaces_","type":"tuple[]","internalType":"struct StdInvariant.FuzzInterface[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"artifacts","type":"string[]","internalType":"string[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSelectors","inputs":[],"outputs":[{"name":"targetedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSenders","inputs":[],"outputs":[{"name":"targetedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"testInvalidCallsLengthReverts","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testInvalidDelegateCallReverts","inputs":[{"name":"attestation","type":"tuple","internalType":"struct Attestation","components":[{"name":"approvedSigner","type":"address","internalType":"address"},{"name":"identityType","type":"bytes4","internalType":"bytes4"},{"name":"issuerHash","type":"bytes32","internalType":"bytes32"},{"name":"audienceHash","type":"bytes32","internalType":"bytes32"},{"name":"applicationData","type":"bytes","internalType":"bytes"},{"name":"authData","type":"tuple","internalType":"struct AuthData","components":[{"name":"redirectUrl","type":"string","internalType":"string"},{"name":"issuedAt","type":"uint64","internalType":"uint64"}]}]},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testInvalidPayloadKindReverts","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testInvalidSelfCallReverts","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testValidExplicitSessionSignature","inputs":[{"name":"selector","type":"bytes4","internalType":"bytes4"},{"name":"param","type":"uint256","internalType":"uint256"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"explicitTarget2","type":"address","internalType":"address"},{"name":"useChainId","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testValidImplicitSessionSignature","inputs":[{"name":"attestation","type":"tuple","internalType":"struct Attestation","components":[{"name":"approvedSigner","type":"address","internalType":"address"},{"name":"identityType","type":"bytes4","internalType":"bytes4"},{"name":"issuerHash","type":"bytes32","internalType":"bytes32"},{"name":"audienceHash","type":"bytes32","internalType":"bytes32"},{"name":"applicationData","type":"bytes","internalType":"bytes"},{"name":"authData","type":"tuple","internalType":"struct AuthData","components":[{"name":"redirectUrl","type":"string","internalType":"string"},{"name":"issuedAt","type":"uint64","internalType":"uint64"}]}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false}],"bytecode":{"object":"0x60808060405234602f57600160ff19600c541617600c55600160ff19601f541617601f5561ad4190816100358239f35b600080fdfe608080604052600436101561001357600080fd5b600090813560e01c9081630a9254e414612fa3575080630e5cf02e1461275c5780631ed7831c146126b35780632aa7856c146126445780632ade3880146124185780633abba523146114d75780633e5e3c231461142e5780633f7286f4146113855780634d0dc7d914610fda578063560e0ece14610c8757806366d9a9a014610b2c57806382a3a6991461084d57806385226c81146107a5578063916a17c6146106d0578063a115e2d81461067f578063b0464fdc146105aa578063b5508aa914610502578063b7b13f79146104ad578063ba414fa61461046a578063dce1137514610418578063de184e22146103a9578063e006b56514610225578063e20c9f711461016c5763fa7626d41461012957600080fd5b3461016957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016957602060ff601f54166040519015158152f35b80fd5b503461016957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101695760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b8181106101f9576101f5856101e98187038261344d565b60405191829182613327565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016101d2565b503461016957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101695761025c6140e9565b818152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103a557816040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f542f0af5000000000000000000000000000000000000000000000000000000006004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561038557610390575b505060206103479173ffffffffffffffffffffffffffffffffffffffff601f5460081c1660405180809581947f13792a4a00000000000000000000000000000000000000000000000000000000835260048301613bd6565b03915afa801561038557610359575080f35b61037a9060203d60201161037e575b610372818361344d565b810190613932565b5080f35b503d610368565b6040513d84823e3d90fd5b8161039a9161344d565b6103a55781386102ef565b5080fd5b503461016957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610169576021546022546023546024546040805173ffffffffffffffffffffffffffffffffffffffff90951685526020850193909352918301526060820152608090f35b503461016957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016957602073ffffffffffffffffffffffffffffffffffffffff60295416604051908152f35b503461016957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101695760206104a3614426565b6040519015158152f35b503461016957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016957602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051908152f35b503461016957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101695760195461053d81613898565b9161054b604051938461344d565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b83831061058d57604051806101f587826136aa565b60016020819261059c85613fe2565b815201920192019190610578565b503461016957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016957601c546105e581613898565b916105f3604051938461344d565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b83831061063557604051806101f58782613728565b6002602060019260405161064881613415565b73ffffffffffffffffffffffffffffffffffffffff865416815261066d85870161417f565b83820152815201920192019190610620565b503461016957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016957602073ffffffffffffffffffffffffffffffffffffffff815416604051908152f35b503461016957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016957601d5461070b81613898565b91610719604051938461344d565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b83831061075b57604051806101f58782613728565b6002602060019260405161076e81613415565b73ffffffffffffffffffffffffffffffffffffffff865416815261079385870161417f565b83820152815201920192019190610746565b503461016957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016957601a546107e081613898565b916107ee604051938461344d565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b83831061083057604051806101f587826136aa565b60016020819261083f85613fe2565b81520192019201919061081b565b50346101695760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101695760043567ffffffffffffffff81116103a55761089d90369060040161351d565b73ffffffffffffffffffffffffffffffffffffffff60215416815260a0810180516108c6614144565b9052602067ffffffffffffffff6108e4818385510151164290615d55565b16915101526109a96108f461450c565b9161099173ffffffffffffffffffffffffffffffffffffffff602954166040517feca9b31a0000000000000000000000000000000000000000000000000000000060208201526004815261094960248261344d565b60405191610956836133dd565b825286602083015260408201528560608201528560808201528560a0820152600160c082015260408501519061098b82613828565b52613828565b5061099a613af9565b6109a2613b3b565b9084615e24565b90610ac06109ce73ffffffffffffffffffffffffffffffffffffffff6025541661463e565b916109d7613b7d565b936109e185613828565b526109eb84613828565b5060208091610a6e60405196610a01848961344d565b8888526000368137604097885191610a198a8461344d565b600183527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08a01368785013773ffffffffffffffffffffffffffffffffffffffff60215416610a6784613828565b52886159a2565b9073ffffffffffffffffffffffffffffffffffffffff601f5460081c169087518096819482937f13792a4a00000000000000000000000000000000000000000000000000000000845260048401613df5565b03915afa938415610b2357508493610aea575b84610ae785610ae186615b51565b90615cd3565b80f35b90809350813d8311610b1c575b610b01818361344d565b81010312610b1757610ae1610ae7925192610ad3565b600080fd5b503d610af7565b513d86823e3d90fd5b503461016957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016957601b54610b6781613898565b610b74604051918261344d565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b838310610c4c57868587604051928392602084019060208552518091526040840160408260051b8601019392905b828210610be157505050500390f35b91936020610c3c827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0600195979984950301865288519083610c2c835160408452604084019061339a565b9201519084818403910152613654565b9601920192018594939192610bd2565b60026020600192604051610c5f81613415565b610c6886613fe2565b8152610c7585870161417f565b83820152815201920192019190610ba4565b50346101695760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101695760043567ffffffffffffffff81116103a557610cd790369060040161351d565b60243567ffffffffffffffff8111610fd657610cf79036906004016134ff565b73ffffffffffffffffffffffffffffffffffffffff60215416825260a082018051610d20614144565b9052602067ffffffffffffffff610d3e818385510151164290615d55565b1691510152610dac610d4e61450c565b9173ffffffffffffffffffffffffffffffffffffffff602054169060405191610d76836133dd565b82528560208301526040820152846060820152600160808201528460a0820152600160c082015260408301519061098b82613828565b50610dce73ffffffffffffffffffffffffffffffffffffffff6025541661463e565b91610df2610dda613b7d565b91610de3613af9565b610deb613b3b565b9085615e24565b610dfb82613828565b52610e0581613828565b50610e85602093604051610e19868261344d565b8681526000368137604093845192610e31868561344d565b600184527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08601368986013773ffffffffffffffffffffffffffffffffffffffff60215416610e7f85613828565b526159a2565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610fc6578151927fc31eb0e00000000000000000000000000000000000000000000000000000000084527faa25f2ad00000000000000000000000000000000000000000000000000000000600485015285808560248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015610fca579086939291610fab575b50610f71945073ffffffffffffffffffffffffffffffffffffffff601f5460081c169084518096819482937f13792a4a00000000000000000000000000000000000000000000000000000000845260048401613df5565b03915afa908115610fa25750610f85578280f35b81610f9b92903d1061037e57610372818361344d565b5038808280f35b513d85823e3d90fd5b610fb991935080929561344d565b610fc65782849186610f1a565b8480fd5b508351903d90823e3d90fd5b8280fd5b503461016957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610169576110116140e9565b60018152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103a557816040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f72052120000000000000000000000000000000000000000000000000000000006004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561038557611370575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c16602060405180927f13792a4a00000000000000000000000000000000000000000000000000000000825281806110fc8760048301613bd6565b03915afa801561132157611341575b5060028152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103a557816040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f72052120000000000000000000000000000000000000000000000000000000006004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156103855761132c575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c16602060405180927f13792a4a00000000000000000000000000000000000000000000000000000000825281806111f78760048301613bd6565b03915afa8015611321576112f2575b5060038152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103a557816040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f72052120000000000000000000000000000000000000000000000000000000006004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156103855761039057505060206103479173ffffffffffffffffffffffffffffffffffffffff601f5460081c1660405180809581947f13792a4a00000000000000000000000000000000000000000000000000000000835260048301613bd6565b6020813d602011611319575b8161130b6020938361344d565b81010312610b175751611206565b3d91506112fe565b6040513d85823e3d90fd5b816113369161344d565b6103a55781386111a0565b6020813d602011611368575b8161135a6020938361344d565b81010312610b17575161110b565b3d915061134d565b8161137a9161344d565b6103a55781386110a5565b503461016957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101695760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b818110611402576101f5856101e98187038261344d565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016113eb565b503461016957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101695760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b8181106114ab576101f5856101e98187038261344d565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201611494565b50346101695760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016957600435907fffffffff0000000000000000000000000000000000000000000000000000000082168083036103a55760243592604435916064359273ffffffffffffffffffffffffffffffffffffffff8416809403610fc657608435801515810361210c5773ffffffffffffffffffffffffffffffffffffffff60205416737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156123df576040517f4c63e5620000000000000000000000000000000000000000000000000000000081528682141560048201528781602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156123e357908891612403575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156123df576040517f4c63e56200000000000000000000000000000000000000000000000000000000815283151560048201528781602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156123e3579088916123ee575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156123df576040517f4c63e56200000000000000000000000000000000000000000000000000000000815288151560048201528781602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156123e3579088916123ca575b50506040519460208601528760248601526024855261170260448661344d565b60215473ffffffffffffffffffffffffffffffffffffffff1691156123c457465b62015180420194854211612397576040519560609290611743848961344d565b600288527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08401918b5b83811061237257509067ffffffffffffffff916040519761178d896133f9565b885260208801526040870188905216606086015260808501968752604051926117b6818561344d565b6002845250895b81811061233d5750506040516118a49392916117d8826133f9565b8a82528a602083015260408201528960608201527fffffffff00000000000000000000000000000000000000000000000000000000608082015261181b82613828565b5261182581613828565b50604051611832816133f9565b60018152600360208201528a6040820152600460608201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608082015261187982613864565b5261188381613864565b506040519161189183613415565b8252602082015284519061098b82613828565b506118ae86613898565b6118bb604051918261344d565b8681527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06118e888613898565b01875b81811061230857505090611923611953926040519061190982613415565b888252602082015285519061191d82613864565b52613864565b5061194e61194873ffffffffffffffffffffffffffffffffffffffff6025541661463e565b916149b3565b615442565b9261195c6140e9565b9286845260016020850152866060850152866080850152602092604051611983858261344d565b8881526000368137610100860152604051606085019790936119a5898661344d565b600385527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0890194868b5b8781106122c757505090611a8392916040890152611a4173ffffffffffffffffffffffffffffffffffffffff88541660405190611a0c826133dd565b815285898201528260408201528c60608201528c60808201528c60a0820152600160c082015260408a01519061098b82613828565b5060405191611a4f836133dd565b82528a8783015260408201528960608201528960808201528960a0820152600160c082015260408701519061191d82613864565b506040805192908501611a96818561344d565b600284527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001858a5b8281106122a557505050611aec73ffffffffffffffffffffffffffffffffffffffff602154169151613828565b519960405186810190838252606060408201528760c082019d73ffffffffffffffffffffffffffffffffffffffff815116608084015201519c604060a08301528d518091528860e083019e01908d5b81811061222c57505050611b8681611cd898999a9b9c9d9e60016060830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261344d565b5190209060405191611b9783613415565b825287820152611ba684613828565b52611bb083613828565b5060405186810191825273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee604082015260408152611be360608261344d565b5190209060405191611bf483613415565b825285820152611c0382613864565b52611c0d81613864565b50611c65611c9173ffffffffffffffffffffffffffffffffffffffff601f5460081c16926040519283917f42de14180000000000000000000000000000000000000000000000000000000089840152602483016138b0565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261344d565b60405191611c9e836133dd565b8252888583015260408201528760608201528760808201528760a0820152600160c0820152604085015190611cd282613874565b52613874565b5060405194611ce7818761344d565b600386525081865b8281106121ed5750611d3f915083611d0a6040820151613828565b5160405193849283927f91195a2a000000000000000000000000000000000000000000000000000000008452600484016139ad565b038173__$cb7e46151951eef21e7bab9bc27b60b0a4$__5af49081156121b35786916121be575b50611d7c611d8191611d76613af9565b90615586565b6158d6565b611d8a85613828565b52611d9484613828565b50611da78183611d0a6040820151613864565b038173__$cb7e46151951eef21e7bab9bc27b60b0a4$__5af480156121b3578690612184575b611dda9150611d76613af9565b604094855191611dea878461344d565b601483527f7b227065726d697373696f6e496e646578223a22000000000000000000000000848401528651927f6900a3ae000000000000000000000000000000000000000000000000000000008452600160048501528884602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821561217a57611e7f611efa93611ef593611f51978d92612155575b50614868565b611ef06016888c5184611e9b8296518092858086019101613377565b81017f222c2273657373696f6e5369676e6174757265223a22000000000000000000008382015203017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff681018452018261344d565b614868565b615862565b611f0382613864565b52611f0d81613864565b508284611f1d6040820151613874565b51885194859283927f91195a2a000000000000000000000000000000000000000000000000000000008452600484016139ad565b038173__$cb7e46151951eef21e7bab9bc27b60b0a4$__5af491821561214b57879261211a575b50611f8b611d7c61201593611d76613af9565b611f9482613874565b52611f9e81613874565b508551611fab878261344d565b600181527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08701368583013773ffffffffffffffffffffffffffffffffffffffff60215416611ff982613828565b52865191612007858461344d565b8883526000368137866159a2565b918573ffffffffffffffffffffffffffffffffffffffff60215416737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103a5578651907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015612110576120f7575b5050610ac092829173ffffffffffffffffffffffffffffffffffffffff601f5460081c169087518096819482937f13792a4a00000000000000000000000000000000000000000000000000000000845260048401613df5565b816121019161344d565b61210c57853861209e565b8580fd5b87513d84823e3d90fd5b91508282813d8311612144575b612131818361344d565b81010312610b1757905190611f8b611f78565b503d612127565b86513d89823e3d90fd5b6121739192508d3d8091833e61216b818361344d565b8101906145df565b9038611e79565b88513d8b823e3d90fd5b508181813d83116121ac575b61219a818361344d565b81010312610b1757611dda9051611dcd565b503d612190565b6040513d88823e3d90fd5b90508181813d83116121e6575b6121d5818361344d565b81010312610b175751611d7c611d66565b503d6121cb565b6060828289010152018290611cef565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90919e8f518051151582528b8101516004811015612276578c83015260408082015190830152606080820151908301526080908101519082015260a0019e8a019190600101611b3b565b505060248f7f4e487b710000000000000000000000000000000000000000000000000000000081526021600452fd5b6040516122b181613415565b8c81528c83820152828288010152018690611abf565b6040516122d3816133dd565b8d81528d83820152606060408201528d60608201528d60808201528d60a08201528d60c08201528282850101520187906119d0565b602090604051612317816133f9565b8a81528a838201528a60408201528a60608201528a6080820152828286010152016118eb565b60209060405161234c816133f9565b8c81528c838201528c60408201528c60608201528c6080820152828287010152016117bd565b6020908d6040519061238382613415565b815260608382015282828d0101520161176d565b6024897f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b86611723565b816123d49161344d565b6123df5786386116e2565b8680fd5b6040513d8a823e3d90fd5b816123f89161344d565b6123df57863861166d565b8161240d9161344d565b6123df5786386115f8565b503461016957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016957601e5461245381613898565b612460604051918261344d565b818152601e83526020810191837f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350845b8383106125ae5786858760405192839260208401906020855251809152604084019160408260051b8601019392815b8383106124cc5786860387f35b9193957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09086929496030183528551906020604082019273ffffffffffffffffffffffffffffffffffffffff81511683520151916040602083015282518091526060820190602060608260051b850101940192855b828110612565575050505050602080600192970193019301909286959492936124bf565b90919293946020806125a1837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08760019603018952895161339a565b9701950193929101612541565b6040516125ba81613415565b73ffffffffffffffffffffffffffffffffffffffff83541681526001830180546125e381613898565b916125f1604051938461344d565b8183528a526020808b20908b9084015b838210612627575050505060019282602092836002950152815201920192019190612490565b60016020819261263686613fe2565b815201930191019091612601565b503461016957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610169576025546026546027546028546040805173ffffffffffffffffffffffffffffffffffffffff90951685526020850193909352918301526060820152608090f35b503461016957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101695760405180916020601654928381520191601682527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289915b818110612730576101f5856101e98187038261344d565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201612719565b503461016957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610169576127936140e9565b818152600160208201528160608201528160808201526020906040516127b9838261344d565b8381528336813761010082015281600260051b01906040516127db838261344d565b600281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0830184865b828110612f62575050604083019182526040517f123456780000000000000000000000000000000000000000000000000000000086820152602a60248201526024815261285360448261344d565b6128ae73ffffffffffffffffffffffffffffffffffffffff875416916040519061287c826133dd565b838252898983015260408201528860608201528860808201528860a0820152600160c082015284519061098b82613828565b5073ffffffffffffffffffffffffffffffffffffffff601f5460081c1667ffffffffffffffff8811612de957868860051b01604051906128ee818361344d565b89825267ffffffffffffffff8a11612f35577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001888a5b828110612f135750505090611c6561296e6129ad936040519283917f42de1418000000000000000000000000000000000000000000000000000000008d840152602483016138b0565b6040519161297b836133dd565b825260018983015260408201528860608201528860808201528860a0820152600160c082015284519061191d82613864565b50604051906129bb826133f9565b8787830152606082019088825260808301916060835273ffffffffffffffffffffffffffffffffffffffff602154168452896040850152620151804201804211612ee65767ffffffffffffffff1690526040516020890190612a1d828261344d565b600181527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08201908a8c5b838110612ec3575050845260405191612a61818461344d565b6001835250898b5b828110612e8f5750505091612a9f61192392612b1e959460405191612a8d83613415565b82528b82015282519061098b82613828565b5088612b1160405192612ab1846133f9565b8c84528c838501527f123456780000000000000000000000000000000000000000000000000000000060408501528c60608501527fffffffff00000000000000000000000000000000000000000000000000000000608085015251613828565b5101519061098b82613828565b91612b7873__$cb7e46151951eef21e7bab9bc27b60b0a4$__8786612b438551613828565b5160405194859283927f91195a2a000000000000000000000000000000000000000000000000000000008452600484016139ad565b0381845af4918215612e8457889187918b94612e49575b50612bac612ba5611d7c612be296611d76613af9565b9551613864565b516040518095819482937f91195a2a000000000000000000000000000000000000000000000000000000008452600484016139ad565b03915af49081156123e3578891612e16575b50611d7c612c0491611d76613af9565b9160405195612c13818861344d565b600287525086885b828110612dd95750505090612ccb9291612c3486613828565b52612c3e85613828565b50612c4885613864565b52612c5284613864565b50604093845190612c63868361344d565b600182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08601368884013773ffffffffffffffffffffffffffffffffffffffff60215416612cb183613828565b52855192612cbf888561344d565b888452883681376159a2565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610fc65782517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f540733ea000000000000000000000000000000000000000000000000000000006004820152858160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015612dcf57612db3575b50610f719291849173ffffffffffffffffffffffffffffffffffffffff601f5460081c169084518096819482937f13792a4a00000000000000000000000000000000000000000000000000000000845260048401613df5565b9185612dc5869397610f71969561344d565b9591509192612d5a565b84513d88823e3d90fd5b606082828a010152018790612c1b565b6024887f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b90508681813d8311612e42575b612e2d818361344d565b81010312612e3e5751611d7c612bf4565b8780fd5b503d612e23565b935091905082813d8311612e7d575b612e62818361344d565b81010312612e795790519087908690612bac612b8f565b8880fd5b503d612e58565b6040513d8b823e3d90fd5b604051612e9b816133f9565b8d81528d838201528d60408201528d60608201528d6080820152828286010152018a90612a69565b6040518e612ed082613415565b8152606083820152828285010152018b90612a48565b60248b7f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b604051612f1f81613415565b8c81528c83820152828286010152018990612925565b60248a7f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b604051612f6e816133dd565b8881528883820152606060408201528860608201528860808201528860a08201528860c0820152828286010152018590612805565b9050346103a557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a5576134de8082019082821067ffffffffffffffff8311176132ac5790829161725d8339039082f0801561329f577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00601f549260081b16911617601f556040517f7404f1d200000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f73657373696f6e00000000000000000000000000000000000000000000000000604482015260808160648185737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015610385576060918391613308575b5073ffffffffffffffffffffffffffffffffffffffff8151167fffffffffffffffffffffffff000000000000000000000000000000000000000060215416176021556020810151602255604081015160235501516024556040517f7404f1d200000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f6964656e74697479000000000000000000000000000000000000000000000000604482015260808160648185737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156103855760609183916132d9575b5073ffffffffffffffffffffffffffffffffffffffff8151167fffffffffffffffffffffffff0000000000000000000000000000000000000000602554161760255560208101516026556040810151602755015160285561beef7fffffffffffffffffffffffff000000000000000000000000000000000000000060205416176020556040516105d18082019082821067ffffffffffffffff8311176132ac5790829161a73b8339039082f0801561329f5773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000602954161760295580f35b50604051903d90823e3d90fd5b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b6132fb915060803d608011613301575b6132f3818361344d565b8101906137cd565b386131ab565b503d6132e9565b613321915060803d608011613301576132f3818361344d565b386130cc565b602060408183019282815284518094520192019060005b81811061334b5750505090565b825173ffffffffffffffffffffffffffffffffffffffff1684526020938401939092019160010161333e565b60005b83811061338a5750506000910152565b818101518382015260200161337a565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936133d681518092818752878088019101613377565b0116010190565b60e0810190811067ffffffffffffffff8211176121fd57604052565b60a0810190811067ffffffffffffffff8211176121fd57604052565b6040810190811067ffffffffffffffff8211176121fd57604052565b6080810190811067ffffffffffffffff8211176121fd57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176121fd57604052565b67ffffffffffffffff81116121fd57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926134d48261348e565b916134e2604051938461344d565b829481845281830111610b17578281602093846000960137010152565b9080601f83011215610b175781602061351a933591016134c8565b90565b919060c083820312610b175760405160c0810181811067ffffffffffffffff8211176121fd576040528093803573ffffffffffffffffffffffffffffffffffffffff81168103610b1757825260208101357fffffffff0000000000000000000000000000000000000000000000000000000081168103610b175760208301526040810135604083015260608101356060830152608081013567ffffffffffffffff8111610b1757836135d09183016134ff565b608083015260a08101359067ffffffffffffffff8211610b17570191604083820312610b17576040519261360384613415565b803567ffffffffffffffff8111610b1757810182601f82011215610b17576020928184613632933591016134c8565b845201359067ffffffffffffffff82168203610b175760a09160208401520152565b906020808351928381520192019060005b8181106136725750505090565b82517fffffffff0000000000000000000000000000000000000000000000000000000016845260209384019390920191600101613665565b602081016020825282518091526040820191602060408360051b8301019401926000915b8383106136dd57505050505090565b9091929394602080613719837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08660019603018752895161339a565b970193019301919392906136ce565b602081016020825282518091526040820191602060408360051b8301019401926000915b83831061375b57505050505090565b90919293946020806137be837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190613654565b9701930193019193929061374c565b90816080910312610b1757604051906137e582613431565b80519073ffffffffffffffffffffffffffffffffffffffff82168203610b1757606091835260208101516020840152604081015160408401520151606082015290565b8051156138355760200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8051600110156138355760400190565b8051600210156138355760600190565b80518210156138355760209160051b010190565b67ffffffffffffffff81116121fd5760051b60200190565b602060408183019282815284518094520192019060005b8181106138d45750505090565b82518051855260209081015181860152604090940193909201916001016138c7565b9190820180921161390357565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90816020910312610b17575190565b9073ffffffffffffffffffffffffffffffffffffffff82511681526020820151602082015260c080613982604085015160e0604086015260e085019061339a565b936060810151606085015260808101511515608085015260a0810151151560a0850152015191015290565b91906139c190604084526040840190613941565b916020818403910152610120820160ff82511683526020820151151560208401526040820151906101206040850152815180915261014084019060206101408260051b8701019301916000905b828210613ab05750505050613a4661010091606084015160608601526080840151608086015260a084015185820360a087015261339a565b9160c081015160c085015260e081015160e08501520151916101008183039101526020808351928381520192019060005b818110613a845750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101613a77565b90919293602080613aeb837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec08b600196030186528851613941565b960192019201909291613a0e565b60405190613b0682613431565b60215473ffffffffffffffffffffffffffffffffffffffff168252602254602083015260235460408301526024546060830152565b60405190613b4882613431565b60255473ffffffffffffffffffffffffffffffffffffffff168252602654602083015260275460408301526028546060830152565b60408051909190613b8e838261344d565b60018152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018260005b828110613bc557505050565b806060602080938501015201613bb9565b91909160408152610160810160ff84511660408301526020840151151560608301526040840151906101206080840152815180915261018083019060206101808260051b8601019301916000905b828210613d4d5750505050613c7e61010091606086015160a0850152608086015160c085015260a08601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08583030160e086015261339a565b9360c08101518284015260e08101516101208401520151907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0818503016101408201526020808351958681520192016000945b808610613d1f5750506020809394508183039101527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6060518084526133d68186860187606001613377565b909260208060019273ffffffffffffffffffffffffffffffffffffffff875116815201940195019490613cd1565b90919293602080827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe80896001950301855287519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080613dbf604085015160e0604086015260e085019061339a565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152960192019201909291613c24565b90929160408252610160820160ff85511660408401526020850151151560608401526040850151906101206080850152815180915261018084019060206101808260051b8701019301916000905b828210613f3a5750505050613e9d61010091606087015160a0860152608087015160c086015260a08701517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08683030160e087015261339a565b9460c08101518285015260e08101516101208501520151917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0818603016101408201526020808451968781520193016000955b808710613f0c57505061351a939450602081840391015261339a565b909360208060019273ffffffffffffffffffffffffffffffffffffffff885116815201950196019590613ef0565b90919293602080827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe808a6001950301855287519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080613fac604085015160e0604086015260e085019061339a565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152960192019201909291613e43565b906040519160008154918260011c926001811680156140df575b6020851081146140b257848752869392918115614072575060011461402b575b506140299250038361344d565b565b90506000929192526020600020906000915b818310614056575050906020614029928201013861401c565b602091935080600191548385890101520191019091849261403d565b602093506140299592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201013861401c565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f1693613ffc565b60405190610120820182811067ffffffffffffffff8211176121fd576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b6040519061415360408361344d565b601382527f68747470733a2f2f6578616d706c652e636f6d000000000000000000000000006020830152565b90604051918281549182825260208201906000526020600020926000905b80600783011061439957614029945491818110614363575b81811061432d575b8181106142f7575b8181106142c1575b81811061428b575b818110614255575b818110614220575b106141f3575b50038361344d565b7fffffffff00000000000000000000000000000000000000000000000000000000168152602001386141eb565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b1681520193016141e5565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b1681520193016141dd565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b1681520193016141d5565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b1681520193016141cd565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b1681520193016141c5565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b1681520193016141bd565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b1681520193016141b5565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e082015201940192018592939161419d565b60085460ff1680156144355790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115614500576000916144ce575b50151590565b90506020813d6020116144f8575b816144e96020938361344d565b81010312610b175751386144c8565b3d91506144dc565b6040513d6000823e3d90fd5b6145146140e9565b9060008252600160208301526000606083015260006080830152602060405161453d828261344d565b600081526000368137610100840152604051906020810161455e818461344d565b600183527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00160005b818110614598575050506040830152565b82906040516145a6816133dd565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c082015282828701015201614587565b602081830312610b175780519067ffffffffffffffff8211610b17570181601f82011215610b1757602081519101906146178161348e565b92614625604051948561344d565b81845281830111610b175761351a916020840190613377565b73ffffffffffffffffffffffffffffffffffffffff604051917f56ca623e000000000000000000000000000000000000000000000000000000008352166004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015614500576147a9600091604093839161484e575b5061474d60026033865180947f7b226964656e746974795369676e6572223a220000000000000000000000000060208301526146f88151809260208686019101613377565b81017f227d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe281018452018261344d565b61480d61476d737109709ecfa91a80626ff3989d68f67f5b1dd12d61680b565b91855195869485947f0199a22000000000000000000000000000000000000000000000000000000000865260606004870152606486019061339a565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152600d83527f73657373696f6e5f656d707479000000000000000000000000000000000000006020840152016044860152019061339a565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811561450057600091614839575090565b61351a91503d806000833e61216b818361344d565b61486291503d8085833e61216b818361344d565b386146b3565b61402990929192602060405194826148898794518092858088019101613377565b830161489d82518093858085019101613377565b0101037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810184528361344d565b9061402960016020604051856148ea8297518092858086019101613377565b81017f2c000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181018552018361344d565b90614029600260206040518561495e8297518092858086019101613377565b81017f5d7d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe281018552018361344d565b60409182516149c2848261344d565b600b81527f7b227369676e6572223a22000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff835116908451917f56ca623e0000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561543757614a65926000926154215750614868565b614ad7600d6020865184614a828296518092858086019101613377565b81017f222c22636861696e4964223a22000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed81018452018261344d565b6020830151908451917f6900a3ae0000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561543757614b3d926000926154215750614868565b614baf60106020865184614b5a8296518092858086019101613377565b81017f222c2276616c75654c696d6974223a22000000000000000000000000000000008382015203017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff081018452018261344d565b83830151908451917f6900a3ae0000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561543757614c14926000926154215750614868565b614c86600e6020865184614c318296518092858086019101613377565b81017f222c22646561646c696e65223a220000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee81018452018261344d565b67ffffffffffffffff606084015116908451917f6900a3ae0000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561543757614cf6926000926154215750614868565b614d6860116020865184614d138296518092858086019101613377565b81017f222c227065726d697373696f6e73223a5b0000000000000000000000000000008382015203017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff181018452018261344d565b9160005b6080820180515182101561541357816153fc575b81614d8b9151613884565b51918551614d99878261344d565b600b81527f7b22746172676574223a22000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff845116908751917f56ca623e0000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156153f157614e41926000926153d6575b5095949295614868565b614eb3600b6020895184614e5e8296518092858086019101613377565b81017f222c2272756c6573223a5b0000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb81018452018261344d565b93602060009201945b8551518310156153b457826153a6575b614ed7838751613884565b518851614ee48a8261344d565b600e81527f7b2263756d756c6174697665223a000000000000000000000000000000000000602082015281511515908a51917f71dce7da0000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561539b57614f73926000926153875750614868565b90614fe6600d60208c5185614f918297518092858086019101613377565b81017f2c226f7065726174696f6e223a000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed81018552018361344d565b602081015160048110156153585760009260ff8c51927f6900a3ae0000000000000000000000000000000000000000000000000000000084521660048301528382602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215615339579061505a929185926153435750614868565b6150cc600a60208d51846150778296518092858086019101613377565b81017f2c2276616c7565223a22000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea81018452018261344d565b8a820151908b51917fb11a19e800000000000000000000000000000000000000000000000000000000835260048301528382602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156153395790615131929185926153435750614868565b6151a3600b60208d518461514e8296518092858086019101613377565b81017f222c226f6666736574223a0000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb81018452018261344d565b6060820151908b51917f6900a3ae00000000000000000000000000000000000000000000000000000000835260048301528382602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821561533957600960206152158f969495608096615280958a926153245750614868565b95518661522b8298518092858086019101613377565b81017f2c226d61736b223a2200000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe981018652018461344d565b01518a51907fb11a19e800000000000000000000000000000000000000000000000000000000825260048201528281602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa928315615319576152f493600195936152ee9383611ef594936152fc575b5050614868565b90614868565b920191614ebc565b6153119293503d8091833e61216b818361344d565b9038806152e7565b8b51903d90823e3d90fd5b6121739192503d808c833e61216b818361344d565b8c513d86823e3d90fd5b6121739192503d8087833e61216b818361344d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b61217391923d8091833e61216b818361344d565b8b513d6000823e3d90fd5b6153af906148cb565b614ecc565b60809394955060019250956152ee6153cc929761493f565b9492019050614d6c565b6153ea91923d8091833e61216b818361344d565b9038614e37565b88513d6000823e3d90fd5b938161540a614d8b926148cb565b95915050614d80565b505050915061351a9061493f565b6121739192503d806000833e61216b818361344d565b85513d6000823e3d90fd5b61552260409261474d60016013600095603388519586927f7b226578706c6963697453657373696f6e223a0000000000000000000000000060208501526154928151809260208688019101613377565b83017f2c2273657373696f6e546f706f6c6f6779223a00000000000000000000000000838201526154cd825180936020604685019101613377565b01017f7d000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181018452018261344d565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152601483527f73657373696f6e5f6578706c696369745f6164640000000000000000000000006020840152016044860152019061339a565b906060015190604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156145005760009081908293615815575b50604051907fb11a19e80000000000000000000000000000000000000000000000000000000082526004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115614500576000916157fa575b50604051927fb11a19e80000000000000000000000000000000000000000000000000000000084526004840152600083602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa928315614500576000936157dd575b5060ff604051927f6900a3ae000000000000000000000000000000000000000000000000000000008452166004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115614500576001809261351a946000916157c2575b506020604051968461571e899651809285808a019101613377565b85017f3a00000000000000000000000000000000000000000000000000000000000000838201526157588251809385602185019101613377565b01017f3a0000000000000000000000000000000000000000000000000000000000000083820152615793825180936020600285019101613377565b010103017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261344d565b6157d791503d806000833e61216b818361344d565b38615703565b6157f39193503d806000833e61216b818361344d565b913861569f565b61580f91503d806000833e61216b818361344d565b38615646565b919250506060813d60601161585a575b816158326060938361344d565b810103126103a55780519160ff831683036101695750604060208201519101519190386155ed565b3d9150615825565b9061402960026020604051856158818297518092858086019101613377565b81017f227d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe281018552018361344d565b604080516158e4828261344d565b601481527f7b227065726d697373696f6e496e646578223a2200000000000000000000000060208201528151907f6900a3ae00000000000000000000000000000000000000000000000000000000825260006004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215615997576016602061598161351a9795611ef59795611ef0956000926154215750614868565b935184611e9b8296518092858086019101613377565b83513d6000823e3d90fd5b9161474d600160136000958160409860126159fb6159e06159c5615aed9b616d71565b99737109709ecfa91a80626ff3989d68f67f5b1dd12d616e3b565b92737109709ecfa91a80626ff3989d68f67f5b1dd12d616e3b565b9160338c51998a967f7b2273657373696f6e546f706f6c6f6779223a000000000000000000000000006020890152615a3c815180926020868c019101613377565b87017f2c2263616c6c5369676e617475726573223a000000000000000000000000000083820152615a77825180936020604585019101613377565b01017f2c226578706c696369745369676e657273223a0000000000000000000000000083820152615ab2825180936020602585019101613377565b01017f2c22696d706c696369745369676e657273223a00000000000000000000000000838201526154cd825180936020602685019101613377565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152601c83527f73657373696f6e5f656e636f646543616c6c5369676e617475726573000000006020840152016044860152019061339a565b6000615c12604092615bf260016033865180947f7b2273657373696f6e546f706f6c6f6779223a000000000000000000000000006020830152615b9d8151809260208686019101613377565b81017f7d000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181018452018261344d565b615c7661476d737109709ecfa91a80626ff3989d68f67f5b1dd12d61680b565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152601183527f73657373696f6e5f696d616765486173680000000000000000000000000000006020840152016044860152019061339a565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811561450057600091615cb8575b5060208151918180820193849201010312610b17575190565b615ccd91503d806000833e61216b818361344d565b38615c9f565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610b1757604051917f7c84c69b00000000000000000000000000000000000000000000000000000000835260048301526024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561450057615d4a5750565b60006140299161344d565b906000615d619261707d565b906000806040615ddf615e118251615d79848261344d565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152835192839160208301957fb60e72cc0000000000000000000000000000000000000000000000000000000087526024840152606483019061339a565b886044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261344d565b51906a636f6e736f6c652e6c6f675afa50565b9260408401516000615e3591613884565b51815193602083019485517fffffffff00000000000000000000000000000000000000000000000000000000169260408501958651936060870193845195608089019788519788519060a08c01998a51928351928351946020015193604051948591602083019760e81b7fffffff000000000000000000000000000000000000000000000000000000000016885280519081602385019160200191615ed992613377565b82019060c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166023820152036023017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe881018552600801615f3c908561344d565b604051968796602088019960601b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000168a5260348801526038870152605886015260e81b7fffffff000000000000000000000000000000000000000000000000000000000016607885015280519081607b86019160200191615fbd92613377565b830190519182607b8301615fd092613377565b01607b01037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018252616004908261344d565b5190209061601191615586565b986040519283917f91195a2a0000000000000000000000000000000000000000000000000000000083526004830191616049926139ad565b038273__$cb7e46151951eef21e7bab9bc27b60b0a4$__91815a93602094f4801561450057600090616791575b6160809250615586565b94604096875195616091898861344d565b600f87527f7b226174746573746174696f6e223a0000000000000000000000000000000000602088015273ffffffffffffffffffffffffffffffffffffffff8951916160dd8b8461344d565b601383527f7b22617070726f7665645369676e6572223a220000000000000000000000000060208401525116908951917f56ca623e0000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215616786579161618d917fffffffff00000000000000000000000000000000000000000000000000000000936000926154215750614868565b91616200601260208c51866161ab8298518092858086019101613377565b81017f222c226964656e7469747954797065223a2200000000000000000000000000008382015203017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff281018652018461344d565b5116908851917fb11a19e80000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821561677b579061626592916000926154215750614868565b906162d8601060208a51856162838297518092858086019101613377565b81017f222c2269737375657248617368223a22000000000000000000000000000000008382015203017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff081018552018361344d565b51908751917fb11a19e80000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156153f1579061633c92916000926154215750614868565b906163af6012602089518561635a8297518092858086019101613377565b81017f222c2261756469656e636548617368223a2200000000000000000000000000008382015203017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff281018552018361344d565b51908651917fb11a19e80000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156167705761642167ffffffffffffffff9360209361649b936000926154215750614868565b616492601d848b518461643d8296518092858086019101613377565b81017f222c226175746844617461223a7b22726564697265637455726c223a220000008382015203017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd81018452018261344d565b84515190614868565b9261650d600e838a51876164b88299518092858086019101613377565b81017f222c226973737565644174223a220000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee81018752018561344d565b51015116908551917f6900a3ae0000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156167655761662793926000926165799284926167505750614868565b916165ec601660208951866165978298518092858086019101613377565b81017f227d2c226170706c69636174696f6e44617461223a22000000000000000000008382015203017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff681018652018461344d565b518651809481927f71aad10d00000000000000000000000000000000000000000000000000000000835260206004840152602483019061339a565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215615437576166e561351a9795616674611ef598966152ee611ef5611ef0986017986020986000926154215750614868565b611ef06015858951846166908296518092858086019101613377565b81017f2c2273657373696f6e5369676e6174757265223a2200000000000000000000008382015203017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff581018452018261344d565b9351846166fb8296518092858086019101613377565b81017f222c226964656e746974795369676e6174757265223a220000000000000000008382015203017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff781018452018261344d565b6121739192503d8086833e61216b818361344d565b86513d6000823e3d90fd5b87513d6000823e3d90fd5b89513d6000823e3d90fd5b8a513d6000823e3d90fd5b506020823d6020116167bd575b816167ab6020938361344d565b81010312610b17576160809151616076565b3d915061679e565b9190820391821161390357565b81156167dc570690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff166040517fc1978d1f00000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5345515f53444b5f5250435f4d494e5f504f52540000000000000000000000006044820152602081606481855afa90811561450057600091616c90575b50604051907fc1978d1f00000000000000000000000000000000000000000000000000000000825260206004830152601460248301527f5345515f53444b5f5250435f4d41585f504f52540000000000000000000000006044830152602082606481865afa91821561450057600092616c5c575b50808210616bfe577fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a6548015616bac575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461390357816001616990920193847fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a6556167c5565b9160018301809311613903576169af926169a9916167d2565b906138f6565b906040517ff877cb1900000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5345515f53444b5f5250435f55524c5f505245464958000000000000000000006044820152600081606481855afa90811561450057600091616b91575b50604051927ff877cb1900000000000000000000000000000000000000000000000000000000845260206004850152601660248501527f5345515f53444b5f5250435f55524c5f535546464958000000000000000000006044850152600084606481865afa93841561450057600094616b72575b506000906024604051809581937f6900a3ae00000000000000000000000000000000000000000000000000000000835260048301525afa91821561450057600092616b50575b50602061351a9293616b23826040519685616b00899751809285808b019101613377565b8601616b1482518093858085019101613377565b01019182815194859201613377565b01037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261344d565b61351a9250616b6b6020913d806000833e61216b818361344d565b9250616adc565b6000919450616b8a903d8084833e61216b818361344d565b9390616a96565b616ba691503d806000833e61216b818361344d565b38616a22565b5060405160208101903660008337616bf660208236810160008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261344d565b519020616938565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e76616c696420706f72742072616e676500000000000000000000000000006044820152fd5b90916020823d602011616c88575b81616c776020938361344d565b810103126101695750519038616907565b3d9150616c6a565b906020823d602011616cba575b81616caa6020938361344d565b8101031261016957505138616893565b3d9150616c9d565b60405190616cd160408361344d565b600282527f5b5d0000000000000000000000000000000000000000000000000000000000006020830152565b906140296001602060405185616d1c8297518092858086019101613377565b81017f5d000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181018552018361344d565b90815115616e3157604051616d8760408261344d565b600181527f5b0000000000000000000000000000000000000000000000000000000000000060208201526000905b8351821015616e2457616dd390616dcc8386613884565b5190614868565b9083517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111613903578110616e10575b60010190616db5565b90616e1c6001916148cb565b919050616e07565b905061351a919250616cfd565b905061351a616cc2565b9190805115617072576040908151616e53838261344d565b600281527f5b2200000000000000000000000000000000000000000000000000000000000060208201529360005b82518110156170645773ffffffffffffffffffffffffffffffffffffffff616ea98285613884565b51168451907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260008160248173ffffffffffffffffffffffffffffffffffffffff87165afa908115615437576001602092616f8d9260009161704b575b50875193849181616f278185019d8e815193849201613377565b8301616f3b82518093858085019101613377565b01017f22000000000000000000000000000000000000000000000000000000000000008152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181018452018261344d565b809684517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111613903578310616fcc575b5050600101616e81565b600192975060026020616fee9361704393895195869251809285850190613377565b81017f2c220000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe281018452018261344d565b959038616fc2565b61705e913d8091833e61216b818361344d565b38616f0d565b505050509061351a90616cfd565b50905061351a616cc2565b6000908383116171d857828110918215806171ce575b6171c6576170a184866167c5565b9260018401809411613903576003831115806171bd575b6171ae577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc831015806171a4575b617193578583111561714a5750509061710284617107936167c5565b6167d2565b9081156171455761711892506138f6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081116139035790565b505090565b95949291909561715b575b50505050565b839495506171029061716d93946167c5565b9081156171455761717e92506167c5565b60018101809111613903579038808080617155565b5050905061351a92915019906167c5565b50821984116170e6565b505091905061351a92506138f6565b508284116170b8565b509250505090565b5084821115617093565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374645574696c7320626f756e642875696e743235362c75696e743235362c7560448201527f696e74323536293a204d6178206973206c657373207468616e206d696e2e00006064820152fdfe608080604052346015576134c3908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c806313792a4a1461006757806323b3713e14610062578063313dade71461005d57806342de1418146100585763f916f3b21461005357600080fd5b610623565b6105a6565b6103df565b610184565b3461013a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013a5760043567ffffffffffffffff811161013a576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011261013a5760243567ffffffffffffffff811161013a573660238201121561013a57806004013567ffffffffffffffff811161013a57366024828401011161013a57610136926024610126930190600401610950565b6040519081529081906020820190565b0390f35b600080fd5b73ffffffffffffffffffffffffffffffffffffffff81160361013a57565b6044359061016a8261013f565b565b6064359061016a8261013f565b359061016a8261013f565b3461013a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013a576004356101bf8161013f565b73ffffffffffffffffffffffffffffffffffffffff602435911660005260006020526040600020906000526020526020604060002054604051908152f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff82111761024857604052565b6101fd565b60a0810190811067ffffffffffffffff82111761024857604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761024857604052565b6040519061016a604083610269565b6040519061016a60e083610269565b67ffffffffffffffff81116102485760051b60200190565b8015150361013a57565b359061016a826102e0565b908160e091031261013a5790565b81601f8201121561013a5780359061031a826102c8565b926103286040519485610269565b82845260208085019360061b8301019181831161013a57602001925b828410610352575050505090565b60408483031261013a576020604091825161036c8161022c565b863581528287013583820152815201930192610344565b906020808351928381520192019060005b8181106103a15750505090565b8251805185526020908101518186015260409094019390920191600101610394565b6040906103dc9392151581528160208201520190610383565b90565b3461013a5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013a5760043567ffffffffffffffff811161013a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011261013a57604051906104598261022c565b80600401356104678161013f565b825260248101359067ffffffffffffffff821161013a57013660238201121561013a576004810135610498816102c8565b916104a66040519384610269565b8183526020600460a08286019402830101019036821161013a57602401915b81831061054057505050602082015260243567ffffffffffffffff811161013a576104f49036906004016102f5565b906104fd61015d565b61050561016c565b906084359367ffffffffffffffff851161013a5761052a610530953690600401610303565b93610f74565b90610136604051928392836103c3565b60a08336031261013a57604051906105578261024d565b8335610562816102e0565b8252602084013590600482101561013a57826020928360a09501526040860135604082015260608601356060820152608086013560808201528152019201916104c5565b3461013a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013a5760043567ffffffffffffffff811161013a573660238201121561013a57806004013567ffffffffffffffff811161013a573660248260061b8401011161013a57602461062192016112bd565b005b3461013a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013a57602060405173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8152f35b3560ff8116810361013a5790565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561013a570180359067ffffffffffffffff821161013a57602001918160051b3603831361013a57565b604051906060820182811067ffffffffffffffff821117610248576040526000604083828152606060208201520152565b9061070d826102c8565b61071a6040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061074882946102c8565b019060005b82811061075957505050565b6020906107646106d2565b8282850101520161074d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b91908110156107df5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff218136030182121561013a570190565b610770565b356103dc816102e0565b80518210156107df5760209160051b010190565b6040519061080f8261022c565b60006020838281520152565b6040519061082a602083610269565b600080835282815b82811061083e57505050565b602090610849610802565b82828501015201610832565b9061085f826102c8565b61086c6040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061089a82946102c8565b019060005b8281106108ab57505050565b6020906108b6610802565b8282850101520161089f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461091e5760010190565b6108c2565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821161091e57565b919060ff61095d84610670565b16610dd7576040830191610971838561067e565b905015610dad57610985918495939561159c565b9161099a610993858361067e565b9050610703565b9060009460808501955b6109ae828461067e565b9050811015610cde576109cb816109c5848661067e565b9061079f565b6109d7608082016107e4565b610cb4576109e68289516107ee565b51805115610a305760019291816060610a196020610a2a95015173ffffffffffffffffffffffffffffffffffffffff1690565b9101519060408b0151923390611fe2565b016109a4565b91959392969050610a3f6106d2565b96602083019460005b8751811015610c9357610a95610a7c610a61838b6107ee565b515173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b15610b5c57610aa7610a61828a6107ee565b73ffffffffffffffffffffffffffffffffffffffff610add610a7c8a5173ffffffffffffffffffffffffffffffffffffffff1690565b911614610aec57600101610a48565b9097929850610b45610b569295968a600196610b3c60406060610b30610b138f8a906107ee565b51965b5173ffffffffffffffffffffffffffffffffffffffff1690565b94015192015160ff1690565b9133888c6119c6565b610b4f82896107ee565b52866107ee565b50610a2a565b90979298610b45908a600196610b3c60406060610b308d610bb4610b569b9e9f610b9a905173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff168952565b610bbc61081b565b6020890152610c8a610be2825173ffffffffffffffffffffffffffffffffffffffff1690565b855173ffffffffffffffffffffffffffffffffffffffff9091166020820190815273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee604083015290610c5381606081015b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610269565b5190203373ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000209060005260205260406000205490565b84890152610b16565b90979298610b45908a600196610b3c60406060610b30610b56999c9d610b16565b7faa25f2ad0000000000000000000000000000000000000000000000000000000060005260046000fd5b509392945090610cee8151610703565b9260009260005b8351811015610d70576020610d0a82866107ee565b5101515115801590610d59575b610d24575b600101610cf5565b93610d51600191610d3587876107ee565b51610d40828a6107ee565b52610d4b81896107ee565b506108f1565b949050610d1c565b506040610d6682866107ee565b5101511515610d17565b509094610da49250610da994938452610d9e610d97610d8f838561067e565b93909461067e565b9050610923565b9161079f565b612278565b5190565b7f542f0af50000000000000000000000000000000000000000000000000000000060005260046000fd5b7f720521200000000000000000000000000000000000000000000000000000000060005260046000fd5b356103dc8161013f565b906001820180921161091e57565b9190820180921161091e57565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561013a570180359067ffffffffffffffff821161013a5760200191813603831361013a57565b60041115610e8157565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9392919073ffffffffffffffffffffffffffffffffffffffff16845260606020850152602060a085019173ffffffffffffffffffffffffffffffffffffffff81511660608701520151604060808601528051809252602060c0860191019160005b818110610f2357505060409150930152565b909183518051151582526020810151906004821015610e815782608060a092602094856001970152604081015160408401526060810151606084015201516080820152019401910192919092610f11565b949091929394610f98815173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff610fb9610a7c86610e01565b9116036112a257855192610fdc610fd7602084019586515190610e19565b610855565b9460005b88518110156110135780610ff66001928b6107ee565b51611001828a6107ee565b5261100c81896107ee565b5001610fe0565b50909294919395875160005b885180518210156112915781611034916107ee565b516110586110456040890189610e26565b5060608301519081013591602090910190565b506080820151169061106a8151151590565b61113d575b60208101805161107e81610e77565b61108781610e77565b6110ad5750604001510361109f576001905b0161101f565b506000989750505050505050565b600381516110ba81610e77565b6110c381610e77565b036110da5750604001511061109f57600190611099565b600181516110e781610e77565b6110f081610e77565b036111075750604001511461109f57600190611099565b6002905161111481610e77565b61111d81610e77565b1461112d575b5050600190611099565b604001511161109f573880611123565b9691989795929093998a610c276111608c6040519283918c602084019687610eb0565b5190209660009361116f610802565b9c60005b87518110156112795761118681896107ee565b51511561122c578a611198828a6107ee565b5151146111a757600101611173565b6020949e50879a9198939c9d96506111c5906111da939c96986107ee565b519284840151915b82156111e5575b50610e19565b91829101529061106f565b6112249192506112158b73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b90600052602052604060002090565b5490386111d4565b6020949e506111da929b95509761127389899c99959e9f98939a61126d906112526102aa565b978c895260008a8a01528861126783836107ee565b526107ee565b50610e0b565b976111cd565b5096946020939d929b9c956111da929b95979a6111cd565b505083525060019650909450505050565b509250505060009190565b91908110156107df5760061b0190565b60005b8281106112cc57505050565b60206112d98285856112ad565b013561131e6112e98386866112ad565b353373ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000209060005260205260406000205490565b1161139857807f42063b8d32ac0a88f94053143bb30a789b3d5dfabb27d6c8a54e23d4fef30851606061135460019487876112ad565b3560206113628589896112ad565b0135336000526000602052604060002082600052602052806040600020556040519133835260208301526040820152a1016112c0565b7e2a700a0000000000000000000000000000000000000000000000000000000060005260046000fd5b604051906113ce8261024d565b6060608083600081526000602082015282604082015282808201520152565b9060041161013a5790600490565b9093929384831161013a57841161013a578101920390565b604051906114208261022c565b6000602083606081520152565b6040519060c0820182811067ffffffffffffffff8211176102485760405281600081526000602082015260006040820152600060608201526060608082015260a0611476611413565b910152565b90611485826102c8565b6114926040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06114c082946102c8565b019060005b8281106114d157505050565b6020906114dc61142d565b828285010152016114c5565b6040513d6000823e3d90fd5b604051906080820182811067ffffffffffffffff8211176102485760405281600081526000602082015260006040820152606061147661142d565b90611539826102c8565b6115466040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061157482946102c8565b019060005b82811061158557505050565b6020906115906114f4565b82828501015201611579565b909162ffffff926115ab6113c1565b50600091813560e81c60039516906115e26115da6115d46115cc858a610e19565b8985886113fb565b90612579565b939097610e19565b602087019473ffffffffffffffffffffffffffffffffffffffff61161a875173ffffffffffffffffffffffffffffffffffffffff1690565b161561190a5750600181019392919083013560f81c906116398261147b565b9560005b83811061183e5750505015159081611835575b5061180b576040840193611664858261067e565b9490506116708561152f565b95608088019687526000945b86861061168e57505050505050505090565b6116aa6116996114f4565b918681013560f81c91600190910190565b608082161515835296908251156117eb57607f1684518110156117c15760006116e961172b996116dc602094896107ee565b5160608701525b89612ab4565b9b9092916117048b6116ff896109c58d8461067e565b612c3b565b92604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa156117bc57611766610a7c600051610b166020860191829073ffffffffffffffffffffffffffffffffffffffff169052565b156117875761177f816001938b519061126783836107ee565b50019461167c565b7fc1e84ed6000000000000000000000000000000000000000000000000000000006000526117b86024906000600452565b6000fd5b6114e8565b7fbd8ba84d0000000000000000000000000000000000000000000000000000000060005260046000fd5b60006116e961172b99611806602094604088019060ff169052565b6116e3565b7feb6252040000000000000000000000000000000000000000000000000000000060005260046000fd5b90501538611650565b611866906020600061185d6118739a61185561142d565b50878b6129fe565b8a959195612ab4565b9c90929161170488612af7565b838052039060015afa156117bc5760005173ffffffffffffffffffffffffffffffffffffffff6118ba610a7c865173ffffffffffffffffffffffffffffffffffffffff1690565b9116036118e0576001916118ce828b6107ee565b526118d9818a6107ee565b500161163d565b7f9e5c658b0000000000000000000000000000000000000000000000000000000060005260046000fd5b807f9e5c658b0000000000000000000000000000000000000000000000000000000060049252fd5b6040519061193f8261024d565b60606080836000815260006020820152600060408201526000838201520152565b919091357fffffffff0000000000000000000000000000000000000000000000000000000081169260048110611994575050565b7fffffffff00000000000000000000000000000000000000000000000000000000929350829060040360031b1b161690565b939594909291926119d56106d2565b506119de611932565b9660005b8151811015611d45576119f8610a6182846107ee565b73ffffffffffffffffffffffffffffffffffffffff808716911614611a1f576001016119e2565b90611a3092939495969798506107ee565b51945b73ffffffffffffffffffffffffffffffffffffffff611a66875173ffffffffffffffffffffffffffffffffffffffff1690565b1615611d0157602086015180151580611cf7575b611cca5750606086015167ffffffffffffffff1680151580611cb7575b611c805750906109c5826040611aae94019061067e565b91611abb608084016107e4565b610cb457611ac883610e01565b73ffffffffffffffffffffffffffffffffffffffff163014611bce576080850160ff815151931692831015611ba457611b1592611b0591516107ee565b5190602087019484865193610f74565b9015611b7a5760209252013580611b63575b5060408083015191015110611b395790565b7faa7feadc0000000000000000000000000000000000000000000000000000000060005260046000fd5b611b7260408401918251610e19565b905238611b27565b7f868a64de0000000000000000000000000000000000000000000000000000000060005260046000fd5b7f3f904dc00000000000000000000000000000000000000000000000000000000060005260046000fd5b50509150506020611bf4611bee611be86040850185610e26565b906113ed565b90611960565b9101351590811591611c33575b50611c095790565b7f540733ea0000000000000000000000000000000000000000000000000000000060005260046000fd5b7f42de14180000000000000000000000000000000000000000000000000000000091507fffffffff0000000000000000000000000000000000000000000000000000000016141538611c01565b7fb1bbfdd50000000000000000000000000000000000000000000000000000000060005267ffffffffffffffff1660045260246000fd5b5067ffffffffffffffff81164211611a97565b7f331003b30000000000000000000000000000000000000000000000000000000060005260045260246000fd5b5046811415611a7a565b7fc1e84ed60000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff841660045260246000fd5b505090919293959495611a33565b9081602091031261013a575190565b60005b838110611d755750506000910152565b8181015183820152602001611d65565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093611dc181518092818752878088019101611d62565b0116010190565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b9073ffffffffffffffffffffffffffffffffffffffff8235611e288161013f565b1681526020820135602082015260408201357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18336030181121561013a57820160208135910167ffffffffffffffff821161013a57813603811361013a57611ea060c09291839260e0604087015260e0860191611dc8565b9360608101356060850152611ec3611eba608083016102ea565b15156080860152565b611edb611ed260a083016102ea565b151560a0860152565b013591015290565b73ffffffffffffffffffffffffffffffffffffffff6103dc94921681526060602082015273ffffffffffffffffffffffffffffffffffffffff83511660608201527fffffffff000000000000000000000000000000000000000000000000000000006020840151166080820152604083015160a0820152606083015160c082015260a0611f80608085015160c060e0850152610120840190611d85565b930151927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa082820301610100830152602067ffffffffffffffff81611fce8751604086526040860190611d85565b960151169101526040818403910152611e07565b92939091612007610a7c865173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff8216036121bf5761202f608085016107e4565b610cb45761203d8282612d8a565b61217c57506120549061204f84610e01565b612d8a565b61212e576020820135611b3957602082612076610a7c610a7c6120ac96610e01565b60405180809681947f9d043a66000000000000000000000000000000000000000000000000000000008352898860048501611ee3565b03915afa9182156117bc576000926120fb575b506120ca9192612e55565b036120d157565b7f0881ad5d0000000000000000000000000000000000000000000000000000000060005260046000fd5b6120ca92506121219060203d602011612127575b6121198183610269565b810190611d53565b916120bf565b503d61210f565b6117b861213a83610e01565b7fd33f19e70000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff16600452602490565b7fd33f19e70000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff1660045260246000fd5b7fc1e84ed60000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff1660045260246000fd5b9060206103dc928181520190610383565b92919267ffffffffffffffff8211610248576040519161225b601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200184610269565b82948184528183011161013a578281602093846000960137010152565b908051612283575050565b61228c82610e01565b73ffffffffffffffffffffffffffffffffffffffff1630148015906124ae575b61139857600092835b825185101561230a576122d89060206122ce87866107ee565b5101515190610e19565b9360406122e582856107ee565b5101516122f6575b600101936122b5565b936123026001916108f1565b9490506122ed565b61231691939450610855565b60009081935b83518510156124435760005b602061233487876107ee565b51015151811015612381578061237a61235d60019360206123558b8b6107ee565b5101516107ee565b5195612368816108f1565b9661237382886107ee565b52856107ee565b5001612328565b509493600190604061239382876107ee565b5101516123a3575b01939461231c565b61243d6123b3610a6183886107ee565b6040516123ff81610c27602082019485602073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee9193929373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b51902094604061240f84896107ee565b51015161241a6102aa565b968752602087015261242b816108f1565b9561243682876107ee565b52846107ee565b5061239b565b9493506124a09250612499915060405161248b81610c2760208201947f42de141800000000000000000000000000000000000000000000000000000000865260248301612202565b519020926040810190610e26565b3691612213565b602081519101200361139857565b50600160c083013514156122ac565b906124c7826102c8565b6124d46040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061250282946102c8565b019060005b82811061251357505050565b60209061251e611932565b82828501015201612507565b90612534826102c8565b6125416040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061256f82946102c8565b0190602036910137565b916125826113c1565b60009384908190612595605e87046124bd565b91606085019283525b8681106125ae5750505152929150565b8181013560fc81901c97916001019060f81c81891561294f57506001891461291d576002891461277857600389146126ad575060048814612618577f0ad9979000000000000000000000000000000000000000000000000000000000600052600488905260246000fd5b90919293949596506020860173ffffffffffffffffffffffffffffffffffffffff612657825173ffffffffffffffffffffffffffffffffffffffff1690565b166118e0578382013560601c815260149091019061267d9061267890610b16565b613086565b865180156126a7579061269891600052602052604060002090565b86525b9594939291909561259e565b50612698565b9890919293949596975061180b57600f60019816600f8114612767575b81906126d58161252a565b604089019081528a60005b83811061272857505050506126fa826127009285876113fb565b90613012565b86518015612722579061271b91600052602052604060002090565b865261269b565b5061271b565b61275f958881013560601c9060140196906127448386516107ee565b9073ffffffffffffffffffffffffffffffffffffffff169052565b018b906126e0565b50600281019083013560f01c6126ca565b6127db9698506127d36127e492600f6115d4939c96979a95989c169087929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b979088610e19565b809787876113fb565b93909593612906575b6020860173ffffffffffffffffffffffffffffffffffffffff612824825173ffffffffffffffffffffffffffffffffffffffff1690565b1661289c575b5060005b6060870151805182101561286b579061286461284c826001946107ee565b519b8a51612859826108f1565b9d61126783836107ee565b500161282e565b5050929096959391979486518015156000146128955761271b915190600052602052604060002090565b505161271b565b602089016128c1610a7c825173ffffffffffffffffffffffffffffffffffffffff1690565b6118e0576128e6612900925173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff169052565b3861282a565b9161180b57600191604086015160408901526127ed565b508551969750949593949293919290916020820191840135908015612722579061271b91600052602052604060002090565b92939495969798505050612961611932565b8184018035606090811c8352601482013560208401526034820135604084015260549091013560c01c908201529461299d605c83018486612f07565b80939160808901526129b09185876113fb565b6129b991612fbd565b87516129f292919080156129f857906129da91600052602052604060002090565b885285516129e7826108f1565b9761126783836107ee565b5061269b565b506129da565b612aa991939293612aa362ffffff612a7e6018612a1961142d565b987fffffffff000000000000000000000000000000000000000000000000000000006014888301803560601c8d5201351660208b01520160208682013591019060408a015260208682013591019060608a01528560039092919283013560e81c920190565b911690612a99612499612a918484610e19565b8387896113fb565b6080890152610e19565b916130ea565b929060a08201529190565b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff811161091e5791565b73ffffffffffffffffffffffffffffffffffffffff81511690612c1a7fffffffff00000000000000000000000000000000000000000000000000000000602083015116610c277fffffff0000000000000000000000000000000000000000000000000000000000604085015194606081015190608081015191612c096008602360a062ffffff87511695015180517fffffffffffffffff00000000000000000000000000000000000000000000000060208251930151916040519a8b9460e81b166020850152612bd08151809260208888019101611d62565b83019160c01b168382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8810187520185610269565b604051978896602088019a8b613135565b51902090565b9080601f8301121561013a578160206103dc93359101612213565b906020810135612c4a816102e0565b15612d1a576000915b608060608301359201359160e08236031261013a57612c706102b9565b91612c7a81610179565b83526020810135602084015260408101359067ffffffffffffffff821161013a57612c1a9360c0612cf292612cb5610c279536908301612c20565b604084015260608101356060840152612cd0608082016102ea565b6080840152612ce160a082016102ea565b60a0840152013560c08201526131ed565b6040519485936020850197889290916080949284526020840152604083015260608201520190565b4691612c53565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821360011661091e57565b906001820191600060018412911290801582169115161761091e57565b9190916000838201938412911290801582169115161761091e57565b600082517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811360011661091e57905b81811315612dce5750505050600090565b808203600082128382128116908483139015161761091e57612df4906002900582612d6e565b90612e02610b1683876107ee565b73ffffffffffffffffffffffffffffffffffffffff8581169116808203612e2f5750505050505050600190565b1015612e445750612e3f90612d51565b612dbd565b9150612e4f90612d21565b90612dbd565b9060405160208101907f616363657074496d706c69636974526571756573740000000000000000000000825260158152612e90603582610269565b5190209160406060820151910151907fffffffffffffffffffffffffffffffffffffffff000000000000000000000000604051936020850195865260601b1660408401526054830152607482015260748152612c1a609482610269565b60405190612efa8261022c565b6060602083600081520152565b60018301939281013560f81c612f1c816102c8565b92612f2a6040519485610269565b8184527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0612f57836102c8565b0160005b818110612f9e5750506000925b828410612f7757505050509190565b90919295612f88600191848461333f565b9790612f9482886107ee565b5201929190612f68565b602090612fad95939495612eed565b8282890101520193929193612f5b565b90612c1a60016020926040519381859282840197600089526021850137820101828101600081525003017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610269565b90612c1a600160209260405193818592828401977f030000000000000000000000000000000000000000000000000000000000000089526021850137820101828101600081525003017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610269565b6040517fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208201927f0400000000000000000000000000000000000000000000000000000000000000845260601b16602182015260158152612c1a603582610269565b92916130f4611413565b9060038101908581013560e81c0194600386019182811161091e5761249960039361312292600b97856113fb565b83528501013560c01c6020820152920190565b9390927fffffffff00000000000000000000000000000000000000000000000000000000605b989796937fffffffffffffffffffffffffffffffffffffffff0000000000000000000000007fffffff00000000000000000000000000000000000000000000000000000000009660601b1687521660148601526018850152603884015260e81b1660588201526131d48251809360208785019101611d62565b016131e88251809360208685019101611d62565b010190565b73ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152612c1a61012082610269565b9061329e826102c8565b6132ab6040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06132d982946102c8565b019060005b8281106132ea57505050565b6020906040516132f98161024d565b60008152600083820152600060408201526000606082015260006080820152828285010152016132de565b60ff166004811015610e815790565b6004821015610e815752565b60ff93929150613394613384613367613356612eed565b948481013560601c91601490910190565b73ffffffffffffffffffffffffffffffffffffffff909116855290565b8281013560f81c91600190910190565b941661339f81613294565b602084019081526000925b8284106133b957505050509190565b9091929561347261345461343661340c6134298b602061342261341a6134158c6133f160019c8e60019092919283013560f81c920190565b989091613404888f8516151592516107ee565b519015159052565b60011c607f1690565b613324565b928b516107ee565b5101613333565b8581013591602090910190565b9060406134448c89516107ee565b5101528481013591602090910190565b9060606134628b88516107ee565b5101528381013591602090910190565b979060806134818387516107ee565b510152019291906133aa56fea2646970667358221220fbec8fcf4e138324c4467036ee1507b2f8aa2752bfcb89890b736efe2f2497c664736f6c634300081c0033608080604052346015576105b6908161001b8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c9081630c0340fc14610188575080639d043a66146100a05763eca9b31a1461004057600080fd5b3461009b5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009b577f721b5e17196ee8f054e1c6084536bdfe64f23e747e9bb98627db351b3286f7bf6020604051338152a1005b600080fd5b3461009b5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009b5760043573ffffffffffffffffffffffffffffffffffffffff8116810361009b5760243567ffffffffffffffff811161009b5760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011261009b576044359067ffffffffffffffff821161009b5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc833603011261009b57602092610180926004019160040190610307565b604051908152f35b3461009b5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009b5760207fed94f157df493252d8e5700fc6b9bf2466c66387b3c1a19816847dfa9f31005791338152a1005b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561009b570180359067ffffffffffffffff821161009b5760200191813603831361009b57565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761027357604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b92919267ffffffffffffffff821161027357604051916102ea601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200184610232565b82948184528183011161009b578281602093846000960137010152565b909160408101600461031982846101e1565b90501491821592610522575b505061051b5760c08236031261009b5760405160c0810181811067ffffffffffffffff82111761027357604052823573ffffffffffffffffffffffffffffffffffffffff8116810361009b57815260208301357fffffffff000000000000000000000000000000000000000000000000000000008116810361009b576020820152604081019060408401358252606081019360608101358552608081013567ffffffffffffffff811161009b57810136601f8201121561009b576103f09036906020813591016102a2565b608083015260a08101359067ffffffffffffffff821161009b57019060408236031261009b57604051916040830183811067ffffffffffffffff82111761027357604052803567ffffffffffffffff811161009b5781019036601f8301121561009b57610465602092369084813591016102a2565b845201359067ffffffffffffffff8216820361009b5760a0916020840152015260405160208101907f616363657074496d706c696369745265717565737400000000000000000000008252601581526104bf603582610232565b51902092519051907fffffffffffffffffffffffffffffffffffffffff000000000000000000000000604051936020850195865260601b1660408401526054830152607482015260748152610515609482610232565b51902090565b5050600090565b61052c92506101e1565b60041161009b57357fffffffff00000000000000000000000000000000000000000000000000000000167feca9b31a000000000000000000000000000000000000000000000000000000001415388061032556fea2646970667358221220b244c0331517bebc589a2a51667c56df4245db1deb284e6da3f0e5a41bbd9d1664736f6c634300081c0033a2646970667358221220b571fb43a95d4e077321374c433847c6a1ea7727e1a9f6431dca1747e0d141c864736f6c634300081c0033","sourceMap":"957:13217:80:-:0;;;;;;;3166:4:5;957:13217:80;;3166:4:5;957:13217:80;;;3166:4:5;957:13217:80;3166:4:5;957:13217:80;;1087:4:16;957:13217:80;;;1087:4:16;957:13217:80;;;;;;;;;;;","linkReferences":{"src/extensions/sessions/SessionSig.sol":{"SessionSig":[{"start":7544,"length":20},{"start":7648,"length":20},{"start":8074,"length":20},{"start":11097,"length":20},{"start":24706,"length":20}]}}},"deployedBytecode":{"object":"0x608080604052600436101561001357600080fd5b600090813560e01c9081630a9254e414612fa3575080630e5cf02e1461275c5780631ed7831c146126b35780632aa7856c146126445780632ade3880146124185780633abba523146114d75780633e5e3c231461142e5780633f7286f4146113855780634d0dc7d914610fda578063560e0ece14610c8757806366d9a9a014610b2c57806382a3a6991461084d57806385226c81146107a5578063916a17c6146106d0578063a115e2d81461067f578063b0464fdc146105aa578063b5508aa914610502578063b7b13f79146104ad578063ba414fa61461046a578063dce1137514610418578063de184e22146103a9578063e006b56514610225578063e20c9f711461016c5763fa7626d41461012957600080fd5b3461016957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016957602060ff601f54166040519015158152f35b80fd5b503461016957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101695760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b8181106101f9576101f5856101e98187038261344d565b60405191829182613327565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016101d2565b503461016957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101695761025c6140e9565b818152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103a557816040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f542f0af5000000000000000000000000000000000000000000000000000000006004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561038557610390575b505060206103479173ffffffffffffffffffffffffffffffffffffffff601f5460081c1660405180809581947f13792a4a00000000000000000000000000000000000000000000000000000000835260048301613bd6565b03915afa801561038557610359575080f35b61037a9060203d60201161037e575b610372818361344d565b810190613932565b5080f35b503d610368565b6040513d84823e3d90fd5b8161039a9161344d565b6103a55781386102ef565b5080fd5b503461016957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610169576021546022546023546024546040805173ffffffffffffffffffffffffffffffffffffffff90951685526020850193909352918301526060820152608090f35b503461016957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016957602073ffffffffffffffffffffffffffffffffffffffff60295416604051908152f35b503461016957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101695760206104a3614426565b6040519015158152f35b503461016957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016957602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051908152f35b503461016957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101695760195461053d81613898565b9161054b604051938461344d565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b83831061058d57604051806101f587826136aa565b60016020819261059c85613fe2565b815201920192019190610578565b503461016957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016957601c546105e581613898565b916105f3604051938461344d565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b83831061063557604051806101f58782613728565b6002602060019260405161064881613415565b73ffffffffffffffffffffffffffffffffffffffff865416815261066d85870161417f565b83820152815201920192019190610620565b503461016957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016957602073ffffffffffffffffffffffffffffffffffffffff815416604051908152f35b503461016957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016957601d5461070b81613898565b91610719604051938461344d565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b83831061075b57604051806101f58782613728565b6002602060019260405161076e81613415565b73ffffffffffffffffffffffffffffffffffffffff865416815261079385870161417f565b83820152815201920192019190610746565b503461016957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016957601a546107e081613898565b916107ee604051938461344d565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b83831061083057604051806101f587826136aa565b60016020819261083f85613fe2565b81520192019201919061081b565b50346101695760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101695760043567ffffffffffffffff81116103a55761089d90369060040161351d565b73ffffffffffffffffffffffffffffffffffffffff60215416815260a0810180516108c6614144565b9052602067ffffffffffffffff6108e4818385510151164290615d55565b16915101526109a96108f461450c565b9161099173ffffffffffffffffffffffffffffffffffffffff602954166040517feca9b31a0000000000000000000000000000000000000000000000000000000060208201526004815261094960248261344d565b60405191610956836133dd565b825286602083015260408201528560608201528560808201528560a0820152600160c082015260408501519061098b82613828565b52613828565b5061099a613af9565b6109a2613b3b565b9084615e24565b90610ac06109ce73ffffffffffffffffffffffffffffffffffffffff6025541661463e565b916109d7613b7d565b936109e185613828565b526109eb84613828565b5060208091610a6e60405196610a01848961344d565b8888526000368137604097885191610a198a8461344d565b600183527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08a01368785013773ffffffffffffffffffffffffffffffffffffffff60215416610a6784613828565b52886159a2565b9073ffffffffffffffffffffffffffffffffffffffff601f5460081c169087518096819482937f13792a4a00000000000000000000000000000000000000000000000000000000845260048401613df5565b03915afa938415610b2357508493610aea575b84610ae785610ae186615b51565b90615cd3565b80f35b90809350813d8311610b1c575b610b01818361344d565b81010312610b1757610ae1610ae7925192610ad3565b600080fd5b503d610af7565b513d86823e3d90fd5b503461016957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016957601b54610b6781613898565b610b74604051918261344d565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b838310610c4c57868587604051928392602084019060208552518091526040840160408260051b8601019392905b828210610be157505050500390f35b91936020610c3c827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0600195979984950301865288519083610c2c835160408452604084019061339a565b9201519084818403910152613654565b9601920192018594939192610bd2565b60026020600192604051610c5f81613415565b610c6886613fe2565b8152610c7585870161417f565b83820152815201920192019190610ba4565b50346101695760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101695760043567ffffffffffffffff81116103a557610cd790369060040161351d565b60243567ffffffffffffffff8111610fd657610cf79036906004016134ff565b73ffffffffffffffffffffffffffffffffffffffff60215416825260a082018051610d20614144565b9052602067ffffffffffffffff610d3e818385510151164290615d55565b1691510152610dac610d4e61450c565b9173ffffffffffffffffffffffffffffffffffffffff602054169060405191610d76836133dd565b82528560208301526040820152846060820152600160808201528460a0820152600160c082015260408301519061098b82613828565b50610dce73ffffffffffffffffffffffffffffffffffffffff6025541661463e565b91610df2610dda613b7d565b91610de3613af9565b610deb613b3b565b9085615e24565b610dfb82613828565b52610e0581613828565b50610e85602093604051610e19868261344d565b8681526000368137604093845192610e31868561344d565b600184527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08601368986013773ffffffffffffffffffffffffffffffffffffffff60215416610e7f85613828565b526159a2565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610fc6578151927fc31eb0e00000000000000000000000000000000000000000000000000000000084527faa25f2ad00000000000000000000000000000000000000000000000000000000600485015285808560248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015610fca579086939291610fab575b50610f71945073ffffffffffffffffffffffffffffffffffffffff601f5460081c169084518096819482937f13792a4a00000000000000000000000000000000000000000000000000000000845260048401613df5565b03915afa908115610fa25750610f85578280f35b81610f9b92903d1061037e57610372818361344d565b5038808280f35b513d85823e3d90fd5b610fb991935080929561344d565b610fc65782849186610f1a565b8480fd5b508351903d90823e3d90fd5b8280fd5b503461016957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610169576110116140e9565b60018152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103a557816040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f72052120000000000000000000000000000000000000000000000000000000006004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561038557611370575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c16602060405180927f13792a4a00000000000000000000000000000000000000000000000000000000825281806110fc8760048301613bd6565b03915afa801561132157611341575b5060028152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103a557816040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f72052120000000000000000000000000000000000000000000000000000000006004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156103855761132c575b505073ffffffffffffffffffffffffffffffffffffffff601f5460081c16602060405180927f13792a4a00000000000000000000000000000000000000000000000000000000825281806111f78760048301613bd6565b03915afa8015611321576112f2575b5060038152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103a557816040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f72052120000000000000000000000000000000000000000000000000000000006004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156103855761039057505060206103479173ffffffffffffffffffffffffffffffffffffffff601f5460081c1660405180809581947f13792a4a00000000000000000000000000000000000000000000000000000000835260048301613bd6565b6020813d602011611319575b8161130b6020938361344d565b81010312610b175751611206565b3d91506112fe565b6040513d85823e3d90fd5b816113369161344d565b6103a55781386111a0565b6020813d602011611368575b8161135a6020938361344d565b81010312610b17575161110b565b3d915061134d565b8161137a9161344d565b6103a55781386110a5565b503461016957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101695760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b818110611402576101f5856101e98187038261344d565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016113eb565b503461016957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101695760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b8181106114ab576101f5856101e98187038261344d565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201611494565b50346101695760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016957600435907fffffffff0000000000000000000000000000000000000000000000000000000082168083036103a55760243592604435916064359273ffffffffffffffffffffffffffffffffffffffff8416809403610fc657608435801515810361210c5773ffffffffffffffffffffffffffffffffffffffff60205416737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156123df576040517f4c63e5620000000000000000000000000000000000000000000000000000000081528682141560048201528781602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156123e357908891612403575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156123df576040517f4c63e56200000000000000000000000000000000000000000000000000000000815283151560048201528781602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156123e3579088916123ee575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156123df576040517f4c63e56200000000000000000000000000000000000000000000000000000000815288151560048201528781602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156123e3579088916123ca575b50506040519460208601528760248601526024855261170260448661344d565b60215473ffffffffffffffffffffffffffffffffffffffff1691156123c457465b62015180420194854211612397576040519560609290611743848961344d565b600288527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08401918b5b83811061237257509067ffffffffffffffff916040519761178d896133f9565b885260208801526040870188905216606086015260808501968752604051926117b6818561344d565b6002845250895b81811061233d5750506040516118a49392916117d8826133f9565b8a82528a602083015260408201528960608201527fffffffff00000000000000000000000000000000000000000000000000000000608082015261181b82613828565b5261182581613828565b50604051611832816133f9565b60018152600360208201528a6040820152600460608201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608082015261187982613864565b5261188381613864565b506040519161189183613415565b8252602082015284519061098b82613828565b506118ae86613898565b6118bb604051918261344d565b8681527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06118e888613898565b01875b81811061230857505090611923611953926040519061190982613415565b888252602082015285519061191d82613864565b52613864565b5061194e61194873ffffffffffffffffffffffffffffffffffffffff6025541661463e565b916149b3565b615442565b9261195c6140e9565b9286845260016020850152866060850152866080850152602092604051611983858261344d565b8881526000368137610100860152604051606085019790936119a5898661344d565b600385527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0890194868b5b8781106122c757505090611a8392916040890152611a4173ffffffffffffffffffffffffffffffffffffffff88541660405190611a0c826133dd565b815285898201528260408201528c60608201528c60808201528c60a0820152600160c082015260408a01519061098b82613828565b5060405191611a4f836133dd565b82528a8783015260408201528960608201528960808201528960a0820152600160c082015260408701519061191d82613864565b506040805192908501611a96818561344d565b600284527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001858a5b8281106122a557505050611aec73ffffffffffffffffffffffffffffffffffffffff602154169151613828565b519960405186810190838252606060408201528760c082019d73ffffffffffffffffffffffffffffffffffffffff815116608084015201519c604060a08301528d518091528860e083019e01908d5b81811061222c57505050611b8681611cd898999a9b9c9d9e60016060830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261344d565b5190209060405191611b9783613415565b825287820152611ba684613828565b52611bb083613828565b5060405186810191825273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee604082015260408152611be360608261344d565b5190209060405191611bf483613415565b825285820152611c0382613864565b52611c0d81613864565b50611c65611c9173ffffffffffffffffffffffffffffffffffffffff601f5460081c16926040519283917f42de14180000000000000000000000000000000000000000000000000000000089840152602483016138b0565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261344d565b60405191611c9e836133dd565b8252888583015260408201528760608201528760808201528760a0820152600160c0820152604085015190611cd282613874565b52613874565b5060405194611ce7818761344d565b600386525081865b8281106121ed5750611d3f915083611d0a6040820151613828565b5160405193849283927f91195a2a000000000000000000000000000000000000000000000000000000008452600484016139ad565b038173__$cb7e46151951eef21e7bab9bc27b60b0a4$__5af49081156121b35786916121be575b50611d7c611d8191611d76613af9565b90615586565b6158d6565b611d8a85613828565b52611d9484613828565b50611da78183611d0a6040820151613864565b038173__$cb7e46151951eef21e7bab9bc27b60b0a4$__5af480156121b3578690612184575b611dda9150611d76613af9565b604094855191611dea878461344d565b601483527f7b227065726d697373696f6e496e646578223a22000000000000000000000000848401528651927f6900a3ae000000000000000000000000000000000000000000000000000000008452600160048501528884602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821561217a57611e7f611efa93611ef593611f51978d92612155575b50614868565b611ef06016888c5184611e9b8296518092858086019101613377565b81017f222c2273657373696f6e5369676e6174757265223a22000000000000000000008382015203017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff681018452018261344d565b614868565b615862565b611f0382613864565b52611f0d81613864565b508284611f1d6040820151613874565b51885194859283927f91195a2a000000000000000000000000000000000000000000000000000000008452600484016139ad565b038173__$cb7e46151951eef21e7bab9bc27b60b0a4$__5af491821561214b57879261211a575b50611f8b611d7c61201593611d76613af9565b611f9482613874565b52611f9e81613874565b508551611fab878261344d565b600181527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08701368583013773ffffffffffffffffffffffffffffffffffffffff60215416611ff982613828565b52865191612007858461344d565b8883526000368137866159a2565b918573ffffffffffffffffffffffffffffffffffffffff60215416737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103a5578651907fca669fa70000000000000000000000000000000000000000000000000000000082526004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015612110576120f7575b5050610ac092829173ffffffffffffffffffffffffffffffffffffffff601f5460081c169087518096819482937f13792a4a00000000000000000000000000000000000000000000000000000000845260048401613df5565b816121019161344d565b61210c57853861209e565b8580fd5b87513d84823e3d90fd5b91508282813d8311612144575b612131818361344d565b81010312610b1757905190611f8b611f78565b503d612127565b86513d89823e3d90fd5b6121739192508d3d8091833e61216b818361344d565b8101906145df565b9038611e79565b88513d8b823e3d90fd5b508181813d83116121ac575b61219a818361344d565b81010312610b1757611dda9051611dcd565b503d612190565b6040513d88823e3d90fd5b90508181813d83116121e6575b6121d5818361344d565b81010312610b175751611d7c611d66565b503d6121cb565b6060828289010152018290611cef565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90919e8f518051151582528b8101516004811015612276578c83015260408082015190830152606080820151908301526080908101519082015260a0019e8a019190600101611b3b565b505060248f7f4e487b710000000000000000000000000000000000000000000000000000000081526021600452fd5b6040516122b181613415565b8c81528c83820152828288010152018690611abf565b6040516122d3816133dd565b8d81528d83820152606060408201528d60608201528d60808201528d60a08201528d60c08201528282850101520187906119d0565b602090604051612317816133f9565b8a81528a838201528a60408201528a60608201528a6080820152828286010152016118eb565b60209060405161234c816133f9565b8c81528c838201528c60408201528c60608201528c6080820152828287010152016117bd565b6020908d6040519061238382613415565b815260608382015282828d0101520161176d565b6024897f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b86611723565b816123d49161344d565b6123df5786386116e2565b8680fd5b6040513d8a823e3d90fd5b816123f89161344d565b6123df57863861166d565b8161240d9161344d565b6123df5786386115f8565b503461016957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016957601e5461245381613898565b612460604051918261344d565b818152601e83526020810191837f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350845b8383106125ae5786858760405192839260208401906020855251809152604084019160408260051b8601019392815b8383106124cc5786860387f35b9193957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09086929496030183528551906020604082019273ffffffffffffffffffffffffffffffffffffffff81511683520151916040602083015282518091526060820190602060608260051b850101940192855b828110612565575050505050602080600192970193019301909286959492936124bf565b90919293946020806125a1837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08760019603018952895161339a565b9701950193929101612541565b6040516125ba81613415565b73ffffffffffffffffffffffffffffffffffffffff83541681526001830180546125e381613898565b916125f1604051938461344d565b8183528a526020808b20908b9084015b838210612627575050505060019282602092836002950152815201920192019190612490565b60016020819261263686613fe2565b815201930191019091612601565b503461016957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610169576025546026546027546028546040805173ffffffffffffffffffffffffffffffffffffffff90951685526020850193909352918301526060820152608090f35b503461016957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101695760405180916020601654928381520191601682527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289915b818110612730576101f5856101e98187038261344d565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201612719565b503461016957807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610169576127936140e9565b818152600160208201528160608201528160808201526020906040516127b9838261344d565b8381528336813761010082015281600260051b01906040516127db838261344d565b600281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0830184865b828110612f62575050604083019182526040517f123456780000000000000000000000000000000000000000000000000000000086820152602a60248201526024815261285360448261344d565b6128ae73ffffffffffffffffffffffffffffffffffffffff875416916040519061287c826133dd565b838252898983015260408201528860608201528860808201528860a0820152600160c082015284519061098b82613828565b5073ffffffffffffffffffffffffffffffffffffffff601f5460081c1667ffffffffffffffff8811612de957868860051b01604051906128ee818361344d565b89825267ffffffffffffffff8a11612f35577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001888a5b828110612f135750505090611c6561296e6129ad936040519283917f42de1418000000000000000000000000000000000000000000000000000000008d840152602483016138b0565b6040519161297b836133dd565b825260018983015260408201528860608201528860808201528860a0820152600160c082015284519061191d82613864565b50604051906129bb826133f9565b8787830152606082019088825260808301916060835273ffffffffffffffffffffffffffffffffffffffff602154168452896040850152620151804201804211612ee65767ffffffffffffffff1690526040516020890190612a1d828261344d565b600181527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08201908a8c5b838110612ec3575050845260405191612a61818461344d565b6001835250898b5b828110612e8f5750505091612a9f61192392612b1e959460405191612a8d83613415565b82528b82015282519061098b82613828565b5088612b1160405192612ab1846133f9565b8c84528c838501527f123456780000000000000000000000000000000000000000000000000000000060408501528c60608501527fffffffff00000000000000000000000000000000000000000000000000000000608085015251613828565b5101519061098b82613828565b91612b7873__$cb7e46151951eef21e7bab9bc27b60b0a4$__8786612b438551613828565b5160405194859283927f91195a2a000000000000000000000000000000000000000000000000000000008452600484016139ad565b0381845af4918215612e8457889187918b94612e49575b50612bac612ba5611d7c612be296611d76613af9565b9551613864565b516040518095819482937f91195a2a000000000000000000000000000000000000000000000000000000008452600484016139ad565b03915af49081156123e3578891612e16575b50611d7c612c0491611d76613af9565b9160405195612c13818861344d565b600287525086885b828110612dd95750505090612ccb9291612c3486613828565b52612c3e85613828565b50612c4885613864565b52612c5284613864565b50604093845190612c63868361344d565b600182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08601368884013773ffffffffffffffffffffffffffffffffffffffff60215416612cb183613828565b52855192612cbf888561344d565b888452883681376159a2565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610fc65782517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f540733ea000000000000000000000000000000000000000000000000000000006004820152858160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015612dcf57612db3575b50610f719291849173ffffffffffffffffffffffffffffffffffffffff601f5460081c169084518096819482937f13792a4a00000000000000000000000000000000000000000000000000000000845260048401613df5565b9185612dc5869397610f71969561344d565b9591509192612d5a565b84513d88823e3d90fd5b606082828a010152018790612c1b565b6024887f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b90508681813d8311612e42575b612e2d818361344d565b81010312612e3e5751611d7c612bf4565b8780fd5b503d612e23565b935091905082813d8311612e7d575b612e62818361344d565b81010312612e795790519087908690612bac612b8f565b8880fd5b503d612e58565b6040513d8b823e3d90fd5b604051612e9b816133f9565b8d81528d838201528d60408201528d60608201528d6080820152828286010152018a90612a69565b6040518e612ed082613415565b8152606083820152828285010152018b90612a48565b60248b7f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b604051612f1f81613415565b8c81528c83820152828286010152018990612925565b60248a7f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b604051612f6e816133dd565b8881528883820152606060408201528860608201528860808201528860a08201528860c0820152828286010152018590612805565b9050346103a557817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103a5576134de8082019082821067ffffffffffffffff8311176132ac5790829161725d8339039082f0801561329f577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00601f549260081b16911617601f556040517f7404f1d200000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f73657373696f6e00000000000000000000000000000000000000000000000000604482015260808160648185737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015610385576060918391613308575b5073ffffffffffffffffffffffffffffffffffffffff8151167fffffffffffffffffffffffff000000000000000000000000000000000000000060215416176021556020810151602255604081015160235501516024556040517f7404f1d200000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f6964656e74697479000000000000000000000000000000000000000000000000604482015260808160648185737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156103855760609183916132d9575b5073ffffffffffffffffffffffffffffffffffffffff8151167fffffffffffffffffffffffff0000000000000000000000000000000000000000602554161760255560208101516026556040810151602755015160285561beef7fffffffffffffffffffffffff000000000000000000000000000000000000000060205416176020556040516105d18082019082821067ffffffffffffffff8311176132ac5790829161a73b8339039082f0801561329f5773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000602954161760295580f35b50604051903d90823e3d90fd5b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b6132fb915060803d608011613301575b6132f3818361344d565b8101906137cd565b386131ab565b503d6132e9565b613321915060803d608011613301576132f3818361344d565b386130cc565b602060408183019282815284518094520192019060005b81811061334b5750505090565b825173ffffffffffffffffffffffffffffffffffffffff1684526020938401939092019160010161333e565b60005b83811061338a5750506000910152565b818101518382015260200161337a565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936133d681518092818752878088019101613377565b0116010190565b60e0810190811067ffffffffffffffff8211176121fd57604052565b60a0810190811067ffffffffffffffff8211176121fd57604052565b6040810190811067ffffffffffffffff8211176121fd57604052565b6080810190811067ffffffffffffffff8211176121fd57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176121fd57604052565b67ffffffffffffffff81116121fd57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926134d48261348e565b916134e2604051938461344d565b829481845281830111610b17578281602093846000960137010152565b9080601f83011215610b175781602061351a933591016134c8565b90565b919060c083820312610b175760405160c0810181811067ffffffffffffffff8211176121fd576040528093803573ffffffffffffffffffffffffffffffffffffffff81168103610b1757825260208101357fffffffff0000000000000000000000000000000000000000000000000000000081168103610b175760208301526040810135604083015260608101356060830152608081013567ffffffffffffffff8111610b1757836135d09183016134ff565b608083015260a08101359067ffffffffffffffff8211610b17570191604083820312610b17576040519261360384613415565b803567ffffffffffffffff8111610b1757810182601f82011215610b17576020928184613632933591016134c8565b845201359067ffffffffffffffff82168203610b175760a09160208401520152565b906020808351928381520192019060005b8181106136725750505090565b82517fffffffff0000000000000000000000000000000000000000000000000000000016845260209384019390920191600101613665565b602081016020825282518091526040820191602060408360051b8301019401926000915b8383106136dd57505050505090565b9091929394602080613719837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08660019603018752895161339a565b970193019301919392906136ce565b602081016020825282518091526040820191602060408360051b8301019401926000915b83831061375b57505050505090565b90919293946020806137be837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190613654565b9701930193019193929061374c565b90816080910312610b1757604051906137e582613431565b80519073ffffffffffffffffffffffffffffffffffffffff82168203610b1757606091835260208101516020840152604081015160408401520151606082015290565b8051156138355760200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8051600110156138355760400190565b8051600210156138355760600190565b80518210156138355760209160051b010190565b67ffffffffffffffff81116121fd5760051b60200190565b602060408183019282815284518094520192019060005b8181106138d45750505090565b82518051855260209081015181860152604090940193909201916001016138c7565b9190820180921161390357565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90816020910312610b17575190565b9073ffffffffffffffffffffffffffffffffffffffff82511681526020820151602082015260c080613982604085015160e0604086015260e085019061339a565b936060810151606085015260808101511515608085015260a0810151151560a0850152015191015290565b91906139c190604084526040840190613941565b916020818403910152610120820160ff82511683526020820151151560208401526040820151906101206040850152815180915261014084019060206101408260051b8701019301916000905b828210613ab05750505050613a4661010091606084015160608601526080840151608086015260a084015185820360a087015261339a565b9160c081015160c085015260e081015160e08501520151916101008183039101526020808351928381520192019060005b818110613a845750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101613a77565b90919293602080613aeb837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec08b600196030186528851613941565b960192019201909291613a0e565b60405190613b0682613431565b60215473ffffffffffffffffffffffffffffffffffffffff168252602254602083015260235460408301526024546060830152565b60405190613b4882613431565b60255473ffffffffffffffffffffffffffffffffffffffff168252602654602083015260275460408301526028546060830152565b60408051909190613b8e838261344d565b60018152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018260005b828110613bc557505050565b806060602080938501015201613bb9565b91909160408152610160810160ff84511660408301526020840151151560608301526040840151906101206080840152815180915261018083019060206101808260051b8601019301916000905b828210613d4d5750505050613c7e61010091606086015160a0850152608086015160c085015260a08601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08583030160e086015261339a565b9360c08101518284015260e08101516101208401520151907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0818503016101408201526020808351958681520192016000945b808610613d1f5750506020809394508183039101527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6060518084526133d68186860187606001613377565b909260208060019273ffffffffffffffffffffffffffffffffffffffff875116815201940195019490613cd1565b90919293602080827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe80896001950301855287519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080613dbf604085015160e0604086015260e085019061339a565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152960192019201909291613c24565b90929160408252610160820160ff85511660408401526020850151151560608401526040850151906101206080850152815180915261018084019060206101808260051b8701019301916000905b828210613f3a5750505050613e9d61010091606087015160a0860152608087015160c086015260a08701517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08683030160e087015261339a565b9460c08101518285015260e08101516101208501520151917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0818603016101408201526020808451968781520193016000955b808710613f0c57505061351a939450602081840391015261339a565b909360208060019273ffffffffffffffffffffffffffffffffffffffff885116815201950196019590613ef0565b90919293602080827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe808a6001950301855287519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080613fac604085015160e0604086015260e085019061339a565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152960192019201909291613e43565b906040519160008154918260011c926001811680156140df575b6020851081146140b257848752869392918115614072575060011461402b575b506140299250038361344d565b565b90506000929192526020600020906000915b818310614056575050906020614029928201013861401c565b602091935080600191548385890101520191019091849261403d565b602093506140299592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201013861401c565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f1693613ffc565b60405190610120820182811067ffffffffffffffff8211176121fd576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b6040519061415360408361344d565b601382527f68747470733a2f2f6578616d706c652e636f6d000000000000000000000000006020830152565b90604051918281549182825260208201906000526020600020926000905b80600783011061439957614029945491818110614363575b81811061432d575b8181106142f7575b8181106142c1575b81811061428b575b818110614255575b818110614220575b106141f3575b50038361344d565b7fffffffff00000000000000000000000000000000000000000000000000000000168152602001386141eb565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b1681520193016141e5565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b1681520193016141dd565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b1681520193016141d5565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b1681520193016141cd565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b1681520193016141c5565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b1681520193016141bd565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b1681520193016141b5565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e082015201940192018592939161419d565b60085460ff1680156144355790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115614500576000916144ce575b50151590565b90506020813d6020116144f8575b816144e96020938361344d565b81010312610b175751386144c8565b3d91506144dc565b6040513d6000823e3d90fd5b6145146140e9565b9060008252600160208301526000606083015260006080830152602060405161453d828261344d565b600081526000368137610100840152604051906020810161455e818461344d565b600183527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00160005b818110614598575050506040830152565b82906040516145a6816133dd565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c082015282828701015201614587565b602081830312610b175780519067ffffffffffffffff8211610b17570181601f82011215610b1757602081519101906146178161348e565b92614625604051948561344d565b81845281830111610b175761351a916020840190613377565b73ffffffffffffffffffffffffffffffffffffffff604051917f56ca623e000000000000000000000000000000000000000000000000000000008352166004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015614500576147a9600091604093839161484e575b5061474d60026033865180947f7b226964656e746974795369676e6572223a220000000000000000000000000060208301526146f88151809260208686019101613377565b81017f227d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe281018452018261344d565b61480d61476d737109709ecfa91a80626ff3989d68f67f5b1dd12d61680b565b91855195869485947f0199a22000000000000000000000000000000000000000000000000000000000865260606004870152606486019061339a565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152600d83527f73657373696f6e5f656d707479000000000000000000000000000000000000006020840152016044860152019061339a565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811561450057600091614839575090565b61351a91503d806000833e61216b818361344d565b61486291503d8085833e61216b818361344d565b386146b3565b61402990929192602060405194826148898794518092858088019101613377565b830161489d82518093858085019101613377565b0101037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810184528361344d565b9061402960016020604051856148ea8297518092858086019101613377565b81017f2c000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181018552018361344d565b90614029600260206040518561495e8297518092858086019101613377565b81017f5d7d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe281018552018361344d565b60409182516149c2848261344d565b600b81527f7b227369676e6572223a22000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff835116908451917f56ca623e0000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561543757614a65926000926154215750614868565b614ad7600d6020865184614a828296518092858086019101613377565b81017f222c22636861696e4964223a22000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed81018452018261344d565b6020830151908451917f6900a3ae0000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561543757614b3d926000926154215750614868565b614baf60106020865184614b5a8296518092858086019101613377565b81017f222c2276616c75654c696d6974223a22000000000000000000000000000000008382015203017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff081018452018261344d565b83830151908451917f6900a3ae0000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561543757614c14926000926154215750614868565b614c86600e6020865184614c318296518092858086019101613377565b81017f222c22646561646c696e65223a220000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee81018452018261344d565b67ffffffffffffffff606084015116908451917f6900a3ae0000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561543757614cf6926000926154215750614868565b614d6860116020865184614d138296518092858086019101613377565b81017f222c227065726d697373696f6e73223a5b0000000000000000000000000000008382015203017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff181018452018261344d565b9160005b6080820180515182101561541357816153fc575b81614d8b9151613884565b51918551614d99878261344d565b600b81527f7b22746172676574223a22000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff845116908751917f56ca623e0000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156153f157614e41926000926153d6575b5095949295614868565b614eb3600b6020895184614e5e8296518092858086019101613377565b81017f222c2272756c6573223a5b0000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb81018452018261344d565b93602060009201945b8551518310156153b457826153a6575b614ed7838751613884565b518851614ee48a8261344d565b600e81527f7b2263756d756c6174697665223a000000000000000000000000000000000000602082015281511515908a51917f71dce7da0000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811561539b57614f73926000926153875750614868565b90614fe6600d60208c5185614f918297518092858086019101613377565b81017f2c226f7065726174696f6e223a000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed81018552018361344d565b602081015160048110156153585760009260ff8c51927f6900a3ae0000000000000000000000000000000000000000000000000000000084521660048301528382602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215615339579061505a929185926153435750614868565b6150cc600a60208d51846150778296518092858086019101613377565b81017f2c2276616c7565223a22000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea81018452018261344d565b8a820151908b51917fb11a19e800000000000000000000000000000000000000000000000000000000835260048301528382602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156153395790615131929185926153435750614868565b6151a3600b60208d518461514e8296518092858086019101613377565b81017f222c226f6666736574223a0000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb81018452018261344d565b6060820151908b51917f6900a3ae00000000000000000000000000000000000000000000000000000000835260048301528382602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821561533957600960206152158f969495608096615280958a926153245750614868565b95518661522b8298518092858086019101613377565b81017f2c226d61736b223a2200000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe981018652018461344d565b01518a51907fb11a19e800000000000000000000000000000000000000000000000000000000825260048201528281602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa928315615319576152f493600195936152ee9383611ef594936152fc575b5050614868565b90614868565b920191614ebc565b6153119293503d8091833e61216b818361344d565b9038806152e7565b8b51903d90823e3d90fd5b6121739192503d808c833e61216b818361344d565b8c513d86823e3d90fd5b6121739192503d8087833e61216b818361344d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b61217391923d8091833e61216b818361344d565b8b513d6000823e3d90fd5b6153af906148cb565b614ecc565b60809394955060019250956152ee6153cc929761493f565b9492019050614d6c565b6153ea91923d8091833e61216b818361344d565b9038614e37565b88513d6000823e3d90fd5b938161540a614d8b926148cb565b95915050614d80565b505050915061351a9061493f565b6121739192503d806000833e61216b818361344d565b85513d6000823e3d90fd5b61552260409261474d60016013600095603388519586927f7b226578706c6963697453657373696f6e223a0000000000000000000000000060208501526154928151809260208688019101613377565b83017f2c2273657373696f6e546f706f6c6f6779223a00000000000000000000000000838201526154cd825180936020604685019101613377565b01017f7d000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181018452018261344d565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152601483527f73657373696f6e5f6578706c696369745f6164640000000000000000000000006020840152016044860152019061339a565b906060015190604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156145005760009081908293615815575b50604051907fb11a19e80000000000000000000000000000000000000000000000000000000082526004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115614500576000916157fa575b50604051927fb11a19e80000000000000000000000000000000000000000000000000000000084526004840152600083602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa928315614500576000936157dd575b5060ff604051927f6900a3ae000000000000000000000000000000000000000000000000000000008452166004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115614500576001809261351a946000916157c2575b506020604051968461571e899651809285808a019101613377565b85017f3a00000000000000000000000000000000000000000000000000000000000000838201526157588251809385602185019101613377565b01017f3a0000000000000000000000000000000000000000000000000000000000000083820152615793825180936020600285019101613377565b010103017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261344d565b6157d791503d806000833e61216b818361344d565b38615703565b6157f39193503d806000833e61216b818361344d565b913861569f565b61580f91503d806000833e61216b818361344d565b38615646565b919250506060813d60601161585a575b816158326060938361344d565b810103126103a55780519160ff831683036101695750604060208201519101519190386155ed565b3d9150615825565b9061402960026020604051856158818297518092858086019101613377565b81017f227d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe281018552018361344d565b604080516158e4828261344d565b601481527f7b227065726d697373696f6e496e646578223a2200000000000000000000000060208201528151907f6900a3ae00000000000000000000000000000000000000000000000000000000825260006004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215615997576016602061598161351a9795611ef59795611ef0956000926154215750614868565b935184611e9b8296518092858086019101613377565b83513d6000823e3d90fd5b9161474d600160136000958160409860126159fb6159e06159c5615aed9b616d71565b99737109709ecfa91a80626ff3989d68f67f5b1dd12d616e3b565b92737109709ecfa91a80626ff3989d68f67f5b1dd12d616e3b565b9160338c51998a967f7b2273657373696f6e546f706f6c6f6779223a000000000000000000000000006020890152615a3c815180926020868c019101613377565b87017f2c2263616c6c5369676e617475726573223a000000000000000000000000000083820152615a77825180936020604585019101613377565b01017f2c226578706c696369745369676e657273223a0000000000000000000000000083820152615ab2825180936020602585019101613377565b01017f2c22696d706c696369745369676e657273223a00000000000000000000000000838201526154cd825180936020602685019101613377565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152601c83527f73657373696f6e5f656e636f646543616c6c5369676e617475726573000000006020840152016044860152019061339a565b6000615c12604092615bf260016033865180947f7b2273657373696f6e546f706f6c6f6779223a000000000000000000000000006020830152615b9d8151809260208686019101613377565b81017f7d000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181018452018261344d565b615c7661476d737109709ecfa91a80626ff3989d68f67f5b1dd12d61680b565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152601183527f73657373696f6e5f696d616765486173680000000000000000000000000000006020840152016044860152019061339a565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811561450057600091615cb8575b5060208151918180820193849201010312610b17575190565b615ccd91503d806000833e61216b818361344d565b38615c9f565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610b1757604051917f7c84c69b00000000000000000000000000000000000000000000000000000000835260048301526024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561450057615d4a5750565b60006140299161344d565b906000615d619261707d565b906000806040615ddf615e118251615d79848261344d565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152835192839160208301957fb60e72cc0000000000000000000000000000000000000000000000000000000087526024840152606483019061339a565b886044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261344d565b51906a636f6e736f6c652e6c6f675afa50565b9260408401516000615e3591613884565b51815193602083019485517fffffffff00000000000000000000000000000000000000000000000000000000169260408501958651936060870193845195608089019788519788519060a08c01998a51928351928351946020015193604051948591602083019760e81b7fffffff000000000000000000000000000000000000000000000000000000000016885280519081602385019160200191615ed992613377565b82019060c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166023820152036023017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe881018552600801615f3c908561344d565b604051968796602088019960601b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000168a5260348801526038870152605886015260e81b7fffffff000000000000000000000000000000000000000000000000000000000016607885015280519081607b86019160200191615fbd92613377565b830190519182607b8301615fd092613377565b01607b01037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018252616004908261344d565b5190209061601191615586565b986040519283917f91195a2a0000000000000000000000000000000000000000000000000000000083526004830191616049926139ad565b038273__$cb7e46151951eef21e7bab9bc27b60b0a4$__91815a93602094f4801561450057600090616791575b6160809250615586565b94604096875195616091898861344d565b600f87527f7b226174746573746174696f6e223a0000000000000000000000000000000000602088015273ffffffffffffffffffffffffffffffffffffffff8951916160dd8b8461344d565b601383527f7b22617070726f7665645369676e6572223a220000000000000000000000000060208401525116908951917f56ca623e0000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215616786579161618d917fffffffff00000000000000000000000000000000000000000000000000000000936000926154215750614868565b91616200601260208c51866161ab8298518092858086019101613377565b81017f222c226964656e7469747954797065223a2200000000000000000000000000008382015203017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff281018652018461344d565b5116908851917fb11a19e80000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821561677b579061626592916000926154215750614868565b906162d8601060208a51856162838297518092858086019101613377565b81017f222c2269737375657248617368223a22000000000000000000000000000000008382015203017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff081018552018361344d565b51908751917fb11a19e80000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156153f1579061633c92916000926154215750614868565b906163af6012602089518561635a8297518092858086019101613377565b81017f222c2261756469656e636548617368223a2200000000000000000000000000008382015203017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff281018552018361344d565b51908651917fb11a19e80000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156167705761642167ffffffffffffffff9360209361649b936000926154215750614868565b616492601d848b518461643d8296518092858086019101613377565b81017f222c226175746844617461223a7b22726564697265637455726c223a220000008382015203017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd81018452018261344d565b84515190614868565b9261650d600e838a51876164b88299518092858086019101613377565b81017f222c226973737565644174223a220000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee81018752018561344d565b51015116908551917f6900a3ae0000000000000000000000000000000000000000000000000000000083526004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156167655761662793926000926165799284926167505750614868565b916165ec601660208951866165978298518092858086019101613377565b81017f227d2c226170706c69636174696f6e44617461223a22000000000000000000008382015203017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff681018652018461344d565b518651809481927f71aad10d00000000000000000000000000000000000000000000000000000000835260206004840152602483019061339a565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215615437576166e561351a9795616674611ef598966152ee611ef5611ef0986017986020986000926154215750614868565b611ef06015858951846166908296518092858086019101613377565b81017f2c2273657373696f6e5369676e6174757265223a2200000000000000000000008382015203017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff581018452018261344d565b9351846166fb8296518092858086019101613377565b81017f222c226964656e746974795369676e6174757265223a220000000000000000008382015203017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff781018452018261344d565b6121739192503d8086833e61216b818361344d565b86513d6000823e3d90fd5b87513d6000823e3d90fd5b89513d6000823e3d90fd5b8a513d6000823e3d90fd5b506020823d6020116167bd575b816167ab6020938361344d565b81010312610b17576160809151616076565b3d915061679e565b9190820391821161390357565b81156167dc570690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff166040517fc1978d1f00000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5345515f53444b5f5250435f4d494e5f504f52540000000000000000000000006044820152602081606481855afa90811561450057600091616c90575b50604051907fc1978d1f00000000000000000000000000000000000000000000000000000000825260206004830152601460248301527f5345515f53444b5f5250435f4d41585f504f52540000000000000000000000006044830152602082606481865afa91821561450057600092616c5c575b50808210616bfe577fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a6548015616bac575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461390357816001616990920193847fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a6556167c5565b9160018301809311613903576169af926169a9916167d2565b906138f6565b906040517ff877cb1900000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5345515f53444b5f5250435f55524c5f505245464958000000000000000000006044820152600081606481855afa90811561450057600091616b91575b50604051927ff877cb1900000000000000000000000000000000000000000000000000000000845260206004850152601660248501527f5345515f53444b5f5250435f55524c5f535546464958000000000000000000006044850152600084606481865afa93841561450057600094616b72575b506000906024604051809581937f6900a3ae00000000000000000000000000000000000000000000000000000000835260048301525afa91821561450057600092616b50575b50602061351a9293616b23826040519685616b00899751809285808b019101613377565b8601616b1482518093858085019101613377565b01019182815194859201613377565b01037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261344d565b61351a9250616b6b6020913d806000833e61216b818361344d565b9250616adc565b6000919450616b8a903d8084833e61216b818361344d565b9390616a96565b616ba691503d806000833e61216b818361344d565b38616a22565b5060405160208101903660008337616bf660208236810160008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261344d565b519020616938565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e76616c696420706f72742072616e676500000000000000000000000000006044820152fd5b90916020823d602011616c88575b81616c776020938361344d565b810103126101695750519038616907565b3d9150616c6a565b906020823d602011616cba575b81616caa6020938361344d565b8101031261016957505138616893565b3d9150616c9d565b60405190616cd160408361344d565b600282527f5b5d0000000000000000000000000000000000000000000000000000000000006020830152565b906140296001602060405185616d1c8297518092858086019101613377565b81017f5d000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181018552018361344d565b90815115616e3157604051616d8760408261344d565b600181527f5b0000000000000000000000000000000000000000000000000000000000000060208201526000905b8351821015616e2457616dd390616dcc8386613884565b5190614868565b9083517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111613903578110616e10575b60010190616db5565b90616e1c6001916148cb565b919050616e07565b905061351a919250616cfd565b905061351a616cc2565b9190805115617072576040908151616e53838261344d565b600281527f5b2200000000000000000000000000000000000000000000000000000000000060208201529360005b82518110156170645773ffffffffffffffffffffffffffffffffffffffff616ea98285613884565b51168451907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260008160248173ffffffffffffffffffffffffffffffffffffffff87165afa908115615437576001602092616f8d9260009161704b575b50875193849181616f278185019d8e815193849201613377565b8301616f3b82518093858085019101613377565b01017f22000000000000000000000000000000000000000000000000000000000000008152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181018452018261344d565b809684517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111613903578310616fcc575b5050600101616e81565b600192975060026020616fee9361704393895195869251809285850190613377565b81017f2c220000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe281018452018261344d565b959038616fc2565b61705e913d8091833e61216b818361344d565b38616f0d565b505050509061351a90616cfd565b50905061351a616cc2565b6000908383116171d857828110918215806171ce575b6171c6576170a184866167c5565b9260018401809411613903576003831115806171bd575b6171ae577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc831015806171a4575b617193578583111561714a5750509061710284617107936167c5565b6167d2565b9081156171455761711892506138f6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081116139035790565b505090565b95949291909561715b575b50505050565b839495506171029061716d93946167c5565b9081156171455761717e92506167c5565b60018101809111613903579038808080617155565b5050905061351a92915019906167c5565b50821984116170e6565b505091905061351a92506138f6565b508284116170b8565b509250505090565b5084821115617093565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374645574696c7320626f756e642875696e743235362c75696e743235362c7560448201527f696e74323536293a204d6178206973206c657373207468616e206d696e2e00006064820152fdfe608080604052346015576134c3908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c806313792a4a1461006757806323b3713e14610062578063313dade71461005d57806342de1418146100585763f916f3b21461005357600080fd5b610623565b6105a6565b6103df565b610184565b3461013a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013a5760043567ffffffffffffffff811161013a576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011261013a5760243567ffffffffffffffff811161013a573660238201121561013a57806004013567ffffffffffffffff811161013a57366024828401011161013a57610136926024610126930190600401610950565b6040519081529081906020820190565b0390f35b600080fd5b73ffffffffffffffffffffffffffffffffffffffff81160361013a57565b6044359061016a8261013f565b565b6064359061016a8261013f565b359061016a8261013f565b3461013a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013a576004356101bf8161013f565b73ffffffffffffffffffffffffffffffffffffffff602435911660005260006020526040600020906000526020526020604060002054604051908152f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff82111761024857604052565b6101fd565b60a0810190811067ffffffffffffffff82111761024857604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761024857604052565b6040519061016a604083610269565b6040519061016a60e083610269565b67ffffffffffffffff81116102485760051b60200190565b8015150361013a57565b359061016a826102e0565b908160e091031261013a5790565b81601f8201121561013a5780359061031a826102c8565b926103286040519485610269565b82845260208085019360061b8301019181831161013a57602001925b828410610352575050505090565b60408483031261013a576020604091825161036c8161022c565b863581528287013583820152815201930192610344565b906020808351928381520192019060005b8181106103a15750505090565b8251805185526020908101518186015260409094019390920191600101610394565b6040906103dc9392151581528160208201520190610383565b90565b3461013a5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013a5760043567ffffffffffffffff811161013a5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011261013a57604051906104598261022c565b80600401356104678161013f565b825260248101359067ffffffffffffffff821161013a57013660238201121561013a576004810135610498816102c8565b916104a66040519384610269565b8183526020600460a08286019402830101019036821161013a57602401915b81831061054057505050602082015260243567ffffffffffffffff811161013a576104f49036906004016102f5565b906104fd61015d565b61050561016c565b906084359367ffffffffffffffff851161013a5761052a610530953690600401610303565b93610f74565b90610136604051928392836103c3565b60a08336031261013a57604051906105578261024d565b8335610562816102e0565b8252602084013590600482101561013a57826020928360a09501526040860135604082015260608601356060820152608086013560808201528152019201916104c5565b3461013a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013a5760043567ffffffffffffffff811161013a573660238201121561013a57806004013567ffffffffffffffff811161013a573660248260061b8401011161013a57602461062192016112bd565b005b3461013a5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013a57602060405173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8152f35b3560ff8116810361013a5790565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561013a570180359067ffffffffffffffff821161013a57602001918160051b3603831361013a57565b604051906060820182811067ffffffffffffffff821117610248576040526000604083828152606060208201520152565b9061070d826102c8565b61071a6040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061074882946102c8565b019060005b82811061075957505050565b6020906107646106d2565b8282850101520161074d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b91908110156107df5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff218136030182121561013a570190565b610770565b356103dc816102e0565b80518210156107df5760209160051b010190565b6040519061080f8261022c565b60006020838281520152565b6040519061082a602083610269565b600080835282815b82811061083e57505050565b602090610849610802565b82828501015201610832565b9061085f826102c8565b61086c6040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061089a82946102c8565b019060005b8281106108ab57505050565b6020906108b6610802565b8282850101520161089f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461091e5760010190565b6108c2565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821161091e57565b919060ff61095d84610670565b16610dd7576040830191610971838561067e565b905015610dad57610985918495939561159c565b9161099a610993858361067e565b9050610703565b9060009460808501955b6109ae828461067e565b9050811015610cde576109cb816109c5848661067e565b9061079f565b6109d7608082016107e4565b610cb4576109e68289516107ee565b51805115610a305760019291816060610a196020610a2a95015173ffffffffffffffffffffffffffffffffffffffff1690565b9101519060408b0151923390611fe2565b016109a4565b91959392969050610a3f6106d2565b96602083019460005b8751811015610c9357610a95610a7c610a61838b6107ee565b515173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b15610b5c57610aa7610a61828a6107ee565b73ffffffffffffffffffffffffffffffffffffffff610add610a7c8a5173ffffffffffffffffffffffffffffffffffffffff1690565b911614610aec57600101610a48565b9097929850610b45610b569295968a600196610b3c60406060610b30610b138f8a906107ee565b51965b5173ffffffffffffffffffffffffffffffffffffffff1690565b94015192015160ff1690565b9133888c6119c6565b610b4f82896107ee565b52866107ee565b50610a2a565b90979298610b45908a600196610b3c60406060610b308d610bb4610b569b9e9f610b9a905173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff168952565b610bbc61081b565b6020890152610c8a610be2825173ffffffffffffffffffffffffffffffffffffffff1690565b855173ffffffffffffffffffffffffffffffffffffffff9091166020820190815273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee604083015290610c5381606081015b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610269565b5190203373ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000209060005260205260406000205490565b84890152610b16565b90979298610b45908a600196610b3c60406060610b30610b56999c9d610b16565b7faa25f2ad0000000000000000000000000000000000000000000000000000000060005260046000fd5b509392945090610cee8151610703565b9260009260005b8351811015610d70576020610d0a82866107ee565b5101515115801590610d59575b610d24575b600101610cf5565b93610d51600191610d3587876107ee565b51610d40828a6107ee565b52610d4b81896107ee565b506108f1565b949050610d1c565b506040610d6682866107ee565b5101511515610d17565b509094610da49250610da994938452610d9e610d97610d8f838561067e565b93909461067e565b9050610923565b9161079f565b612278565b5190565b7f542f0af50000000000000000000000000000000000000000000000000000000060005260046000fd5b7f720521200000000000000000000000000000000000000000000000000000000060005260046000fd5b356103dc8161013f565b906001820180921161091e57565b9190820180921161091e57565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561013a570180359067ffffffffffffffff821161013a5760200191813603831361013a57565b60041115610e8157565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9392919073ffffffffffffffffffffffffffffffffffffffff16845260606020850152602060a085019173ffffffffffffffffffffffffffffffffffffffff81511660608701520151604060808601528051809252602060c0860191019160005b818110610f2357505060409150930152565b909183518051151582526020810151906004821015610e815782608060a092602094856001970152604081015160408401526060810151606084015201516080820152019401910192919092610f11565b949091929394610f98815173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff610fb9610a7c86610e01565b9116036112a257855192610fdc610fd7602084019586515190610e19565b610855565b9460005b88518110156110135780610ff66001928b6107ee565b51611001828a6107ee565b5261100c81896107ee565b5001610fe0565b50909294919395875160005b885180518210156112915781611034916107ee565b516110586110456040890189610e26565b5060608301519081013591602090910190565b506080820151169061106a8151151590565b61113d575b60208101805161107e81610e77565b61108781610e77565b6110ad5750604001510361109f576001905b0161101f565b506000989750505050505050565b600381516110ba81610e77565b6110c381610e77565b036110da5750604001511061109f57600190611099565b600181516110e781610e77565b6110f081610e77565b036111075750604001511461109f57600190611099565b6002905161111481610e77565b61111d81610e77565b1461112d575b5050600190611099565b604001511161109f573880611123565b9691989795929093998a610c276111608c6040519283918c602084019687610eb0565b5190209660009361116f610802565b9c60005b87518110156112795761118681896107ee565b51511561122c578a611198828a6107ee565b5151146111a757600101611173565b6020949e50879a9198939c9d96506111c5906111da939c96986107ee565b519284840151915b82156111e5575b50610e19565b91829101529061106f565b6112249192506112158b73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b90600052602052604060002090565b5490386111d4565b6020949e506111da929b95509761127389899c99959e9f98939a61126d906112526102aa565b978c895260008a8a01528861126783836107ee565b526107ee565b50610e0b565b976111cd565b5096946020939d929b9c956111da929b95979a6111cd565b505083525060019650909450505050565b509250505060009190565b91908110156107df5760061b0190565b60005b8281106112cc57505050565b60206112d98285856112ad565b013561131e6112e98386866112ad565b353373ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000209060005260205260406000205490565b1161139857807f42063b8d32ac0a88f94053143bb30a789b3d5dfabb27d6c8a54e23d4fef30851606061135460019487876112ad565b3560206113628589896112ad565b0135336000526000602052604060002082600052602052806040600020556040519133835260208301526040820152a1016112c0565b7e2a700a0000000000000000000000000000000000000000000000000000000060005260046000fd5b604051906113ce8261024d565b6060608083600081526000602082015282604082015282808201520152565b9060041161013a5790600490565b9093929384831161013a57841161013a578101920390565b604051906114208261022c565b6000602083606081520152565b6040519060c0820182811067ffffffffffffffff8211176102485760405281600081526000602082015260006040820152600060608201526060608082015260a0611476611413565b910152565b90611485826102c8565b6114926040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06114c082946102c8565b019060005b8281106114d157505050565b6020906114dc61142d565b828285010152016114c5565b6040513d6000823e3d90fd5b604051906080820182811067ffffffffffffffff8211176102485760405281600081526000602082015260006040820152606061147661142d565b90611539826102c8565b6115466040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061157482946102c8565b019060005b82811061158557505050565b6020906115906114f4565b82828501015201611579565b909162ffffff926115ab6113c1565b50600091813560e81c60039516906115e26115da6115d46115cc858a610e19565b8985886113fb565b90612579565b939097610e19565b602087019473ffffffffffffffffffffffffffffffffffffffff61161a875173ffffffffffffffffffffffffffffffffffffffff1690565b161561190a5750600181019392919083013560f81c906116398261147b565b9560005b83811061183e5750505015159081611835575b5061180b576040840193611664858261067e565b9490506116708561152f565b95608088019687526000945b86861061168e57505050505050505090565b6116aa6116996114f4565b918681013560f81c91600190910190565b608082161515835296908251156117eb57607f1684518110156117c15760006116e961172b996116dc602094896107ee565b5160608701525b89612ab4565b9b9092916117048b6116ff896109c58d8461067e565b612c3b565b92604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa156117bc57611766610a7c600051610b166020860191829073ffffffffffffffffffffffffffffffffffffffff169052565b156117875761177f816001938b519061126783836107ee565b50019461167c565b7fc1e84ed6000000000000000000000000000000000000000000000000000000006000526117b86024906000600452565b6000fd5b6114e8565b7fbd8ba84d0000000000000000000000000000000000000000000000000000000060005260046000fd5b60006116e961172b99611806602094604088019060ff169052565b6116e3565b7feb6252040000000000000000000000000000000000000000000000000000000060005260046000fd5b90501538611650565b611866906020600061185d6118739a61185561142d565b50878b6129fe565b8a959195612ab4565b9c90929161170488612af7565b838052039060015afa156117bc5760005173ffffffffffffffffffffffffffffffffffffffff6118ba610a7c865173ffffffffffffffffffffffffffffffffffffffff1690565b9116036118e0576001916118ce828b6107ee565b526118d9818a6107ee565b500161163d565b7f9e5c658b0000000000000000000000000000000000000000000000000000000060005260046000fd5b807f9e5c658b0000000000000000000000000000000000000000000000000000000060049252fd5b6040519061193f8261024d565b60606080836000815260006020820152600060408201526000838201520152565b919091357fffffffff0000000000000000000000000000000000000000000000000000000081169260048110611994575050565b7fffffffff00000000000000000000000000000000000000000000000000000000929350829060040360031b1b161690565b939594909291926119d56106d2565b506119de611932565b9660005b8151811015611d45576119f8610a6182846107ee565b73ffffffffffffffffffffffffffffffffffffffff808716911614611a1f576001016119e2565b90611a3092939495969798506107ee565b51945b73ffffffffffffffffffffffffffffffffffffffff611a66875173ffffffffffffffffffffffffffffffffffffffff1690565b1615611d0157602086015180151580611cf7575b611cca5750606086015167ffffffffffffffff1680151580611cb7575b611c805750906109c5826040611aae94019061067e565b91611abb608084016107e4565b610cb457611ac883610e01565b73ffffffffffffffffffffffffffffffffffffffff163014611bce576080850160ff815151931692831015611ba457611b1592611b0591516107ee565b5190602087019484865193610f74565b9015611b7a5760209252013580611b63575b5060408083015191015110611b395790565b7faa7feadc0000000000000000000000000000000000000000000000000000000060005260046000fd5b611b7260408401918251610e19565b905238611b27565b7f868a64de0000000000000000000000000000000000000000000000000000000060005260046000fd5b7f3f904dc00000000000000000000000000000000000000000000000000000000060005260046000fd5b50509150506020611bf4611bee611be86040850185610e26565b906113ed565b90611960565b9101351590811591611c33575b50611c095790565b7f540733ea0000000000000000000000000000000000000000000000000000000060005260046000fd5b7f42de14180000000000000000000000000000000000000000000000000000000091507fffffffff0000000000000000000000000000000000000000000000000000000016141538611c01565b7fb1bbfdd50000000000000000000000000000000000000000000000000000000060005267ffffffffffffffff1660045260246000fd5b5067ffffffffffffffff81164211611a97565b7f331003b30000000000000000000000000000000000000000000000000000000060005260045260246000fd5b5046811415611a7a565b7fc1e84ed60000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff841660045260246000fd5b505090919293959495611a33565b9081602091031261013a575190565b60005b838110611d755750506000910152565b8181015183820152602001611d65565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093611dc181518092818752878088019101611d62565b0116010190565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b9073ffffffffffffffffffffffffffffffffffffffff8235611e288161013f565b1681526020820135602082015260408201357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18336030181121561013a57820160208135910167ffffffffffffffff821161013a57813603811361013a57611ea060c09291839260e0604087015260e0860191611dc8565b9360608101356060850152611ec3611eba608083016102ea565b15156080860152565b611edb611ed260a083016102ea565b151560a0860152565b013591015290565b73ffffffffffffffffffffffffffffffffffffffff6103dc94921681526060602082015273ffffffffffffffffffffffffffffffffffffffff83511660608201527fffffffff000000000000000000000000000000000000000000000000000000006020840151166080820152604083015160a0820152606083015160c082015260a0611f80608085015160c060e0850152610120840190611d85565b930151927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa082820301610100830152602067ffffffffffffffff81611fce8751604086526040860190611d85565b960151169101526040818403910152611e07565b92939091612007610a7c865173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff8216036121bf5761202f608085016107e4565b610cb45761203d8282612d8a565b61217c57506120549061204f84610e01565b612d8a565b61212e576020820135611b3957602082612076610a7c610a7c6120ac96610e01565b60405180809681947f9d043a66000000000000000000000000000000000000000000000000000000008352898860048501611ee3565b03915afa9182156117bc576000926120fb575b506120ca9192612e55565b036120d157565b7f0881ad5d0000000000000000000000000000000000000000000000000000000060005260046000fd5b6120ca92506121219060203d602011612127575b6121198183610269565b810190611d53565b916120bf565b503d61210f565b6117b861213a83610e01565b7fd33f19e70000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff16600452602490565b7fd33f19e70000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff1660045260246000fd5b7fc1e84ed60000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff1660045260246000fd5b9060206103dc928181520190610383565b92919267ffffffffffffffff8211610248576040519161225b601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200184610269565b82948184528183011161013a578281602093846000960137010152565b908051612283575050565b61228c82610e01565b73ffffffffffffffffffffffffffffffffffffffff1630148015906124ae575b61139857600092835b825185101561230a576122d89060206122ce87866107ee565b5101515190610e19565b9360406122e582856107ee565b5101516122f6575b600101936122b5565b936123026001916108f1565b9490506122ed565b61231691939450610855565b60009081935b83518510156124435760005b602061233487876107ee565b51015151811015612381578061237a61235d60019360206123558b8b6107ee565b5101516107ee565b5195612368816108f1565b9661237382886107ee565b52856107ee565b5001612328565b509493600190604061239382876107ee565b5101516123a3575b01939461231c565b61243d6123b3610a6183886107ee565b6040516123ff81610c27602082019485602073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee9193929373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b51902094604061240f84896107ee565b51015161241a6102aa565b968752602087015261242b816108f1565b9561243682876107ee565b52846107ee565b5061239b565b9493506124a09250612499915060405161248b81610c2760208201947f42de141800000000000000000000000000000000000000000000000000000000865260248301612202565b519020926040810190610e26565b3691612213565b602081519101200361139857565b50600160c083013514156122ac565b906124c7826102c8565b6124d46040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061250282946102c8565b019060005b82811061251357505050565b60209061251e611932565b82828501015201612507565b90612534826102c8565b6125416040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061256f82946102c8565b0190602036910137565b916125826113c1565b60009384908190612595605e87046124bd565b91606085019283525b8681106125ae5750505152929150565b8181013560fc81901c97916001019060f81c81891561294f57506001891461291d576002891461277857600389146126ad575060048814612618577f0ad9979000000000000000000000000000000000000000000000000000000000600052600488905260246000fd5b90919293949596506020860173ffffffffffffffffffffffffffffffffffffffff612657825173ffffffffffffffffffffffffffffffffffffffff1690565b166118e0578382013560601c815260149091019061267d9061267890610b16565b613086565b865180156126a7579061269891600052602052604060002090565b86525b9594939291909561259e565b50612698565b9890919293949596975061180b57600f60019816600f8114612767575b81906126d58161252a565b604089019081528a60005b83811061272857505050506126fa826127009285876113fb565b90613012565b86518015612722579061271b91600052602052604060002090565b865261269b565b5061271b565b61275f958881013560601c9060140196906127448386516107ee565b9073ffffffffffffffffffffffffffffffffffffffff169052565b018b906126e0565b50600281019083013560f01c6126ca565b6127db9698506127d36127e492600f6115d4939c96979a95989c169087929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b979088610e19565b809787876113fb565b93909593612906575b6020860173ffffffffffffffffffffffffffffffffffffffff612824825173ffffffffffffffffffffffffffffffffffffffff1690565b1661289c575b5060005b6060870151805182101561286b579061286461284c826001946107ee565b519b8a51612859826108f1565b9d61126783836107ee565b500161282e565b5050929096959391979486518015156000146128955761271b915190600052602052604060002090565b505161271b565b602089016128c1610a7c825173ffffffffffffffffffffffffffffffffffffffff1690565b6118e0576128e6612900925173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff169052565b3861282a565b9161180b57600191604086015160408901526127ed565b508551969750949593949293919290916020820191840135908015612722579061271b91600052602052604060002090565b92939495969798505050612961611932565b8184018035606090811c8352601482013560208401526034820135604084015260549091013560c01c908201529461299d605c83018486612f07565b80939160808901526129b09185876113fb565b6129b991612fbd565b87516129f292919080156129f857906129da91600052602052604060002090565b885285516129e7826108f1565b9761126783836107ee565b5061269b565b506129da565b612aa991939293612aa362ffffff612a7e6018612a1961142d565b987fffffffff000000000000000000000000000000000000000000000000000000006014888301803560601c8d5201351660208b01520160208682013591019060408a015260208682013591019060608a01528560039092919283013560e81c920190565b911690612a99612499612a918484610e19565b8387896113fb565b6080890152610e19565b916130ea565b929060a08201529190565b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff811161091e5791565b73ffffffffffffffffffffffffffffffffffffffff81511690612c1a7fffffffff00000000000000000000000000000000000000000000000000000000602083015116610c277fffffff0000000000000000000000000000000000000000000000000000000000604085015194606081015190608081015191612c096008602360a062ffffff87511695015180517fffffffffffffffff00000000000000000000000000000000000000000000000060208251930151916040519a8b9460e81b166020850152612bd08151809260208888019101611d62565b83019160c01b168382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8810187520185610269565b604051978896602088019a8b613135565b51902090565b9080601f8301121561013a578160206103dc93359101612213565b906020810135612c4a816102e0565b15612d1a576000915b608060608301359201359160e08236031261013a57612c706102b9565b91612c7a81610179565b83526020810135602084015260408101359067ffffffffffffffff821161013a57612c1a9360c0612cf292612cb5610c279536908301612c20565b604084015260608101356060840152612cd0608082016102ea565b6080840152612ce160a082016102ea565b60a0840152013560c08201526131ed565b6040519485936020850197889290916080949284526020840152604083015260608201520190565b4691612c53565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821360011661091e57565b906001820191600060018412911290801582169115161761091e57565b9190916000838201938412911290801582169115161761091e57565b600082517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811360011661091e57905b81811315612dce5750505050600090565b808203600082128382128116908483139015161761091e57612df4906002900582612d6e565b90612e02610b1683876107ee565b73ffffffffffffffffffffffffffffffffffffffff8581169116808203612e2f5750505050505050600190565b1015612e445750612e3f90612d51565b612dbd565b9150612e4f90612d21565b90612dbd565b9060405160208101907f616363657074496d706c69636974526571756573740000000000000000000000825260158152612e90603582610269565b5190209160406060820151910151907fffffffffffffffffffffffffffffffffffffffff000000000000000000000000604051936020850195865260601b1660408401526054830152607482015260748152612c1a609482610269565b60405190612efa8261022c565b6060602083600081520152565b60018301939281013560f81c612f1c816102c8565b92612f2a6040519485610269565b8184527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0612f57836102c8565b0160005b818110612f9e5750506000925b828410612f7757505050509190565b90919295612f88600191848461333f565b9790612f9482886107ee565b5201929190612f68565b602090612fad95939495612eed565b8282890101520193929193612f5b565b90612c1a60016020926040519381859282840197600089526021850137820101828101600081525003017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610269565b90612c1a600160209260405193818592828401977f030000000000000000000000000000000000000000000000000000000000000089526021850137820101828101600081525003017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610269565b6040517fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208201927f0400000000000000000000000000000000000000000000000000000000000000845260601b16602182015260158152612c1a603582610269565b92916130f4611413565b9060038101908581013560e81c0194600386019182811161091e5761249960039361312292600b97856113fb565b83528501013560c01c6020820152920190565b9390927fffffffff00000000000000000000000000000000000000000000000000000000605b989796937fffffffffffffffffffffffffffffffffffffffff0000000000000000000000007fffffff00000000000000000000000000000000000000000000000000000000009660601b1687521660148601526018850152603884015260e81b1660588201526131d48251809360208785019101611d62565b016131e88251809360208685019101611d62565b010190565b73ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152612c1a61012082610269565b9061329e826102c8565b6132ab6040519182610269565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06132d982946102c8565b019060005b8281106132ea57505050565b6020906040516132f98161024d565b60008152600083820152600060408201526000606082015260006080820152828285010152016132de565b60ff166004811015610e815790565b6004821015610e815752565b60ff93929150613394613384613367613356612eed565b948481013560601c91601490910190565b73ffffffffffffffffffffffffffffffffffffffff909116855290565b8281013560f81c91600190910190565b941661339f81613294565b602084019081526000925b8284106133b957505050509190565b9091929561347261345461343661340c6134298b602061342261341a6134158c6133f160019c8e60019092919283013560f81c920190565b989091613404888f8516151592516107ee565b519015159052565b60011c607f1690565b613324565b928b516107ee565b5101613333565b8581013591602090910190565b9060406134448c89516107ee565b5101528481013591602090910190565b9060606134628b88516107ee565b5101528381013591602090910190565b979060806134818387516107ee565b510152019291906133aa56fea2646970667358221220fbec8fcf4e138324c4467036ee1507b2f8aa2752bfcb89890b736efe2f2497c664736f6c634300081c0033608080604052346015576105b6908161001b8239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c9081630c0340fc14610188575080639d043a66146100a05763eca9b31a1461004057600080fd5b3461009b5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009b577f721b5e17196ee8f054e1c6084536bdfe64f23e747e9bb98627db351b3286f7bf6020604051338152a1005b600080fd5b3461009b5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009b5760043573ffffffffffffffffffffffffffffffffffffffff8116810361009b5760243567ffffffffffffffff811161009b5760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc823603011261009b576044359067ffffffffffffffff821161009b5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc833603011261009b57602092610180926004019160040190610307565b604051908152f35b3461009b5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009b5760207fed94f157df493252d8e5700fc6b9bf2466c66387b3c1a19816847dfa9f31005791338152a1005b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561009b570180359067ffffffffffffffff821161009b5760200191813603831361009b57565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761027357604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b92919267ffffffffffffffff821161027357604051916102ea601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200184610232565b82948184528183011161009b578281602093846000960137010152565b909160408101600461031982846101e1565b90501491821592610522575b505061051b5760c08236031261009b5760405160c0810181811067ffffffffffffffff82111761027357604052823573ffffffffffffffffffffffffffffffffffffffff8116810361009b57815260208301357fffffffff000000000000000000000000000000000000000000000000000000008116810361009b576020820152604081019060408401358252606081019360608101358552608081013567ffffffffffffffff811161009b57810136601f8201121561009b576103f09036906020813591016102a2565b608083015260a08101359067ffffffffffffffff821161009b57019060408236031261009b57604051916040830183811067ffffffffffffffff82111761027357604052803567ffffffffffffffff811161009b5781019036601f8301121561009b57610465602092369084813591016102a2565b845201359067ffffffffffffffff8216820361009b5760a0916020840152015260405160208101907f616363657074496d706c696369745265717565737400000000000000000000008252601581526104bf603582610232565b51902092519051907fffffffffffffffffffffffffffffffffffffffff000000000000000000000000604051936020850195865260601b1660408401526054830152607482015260748152610515609482610232565b51902090565b5050600090565b61052c92506101e1565b60041161009b57357fffffffff00000000000000000000000000000000000000000000000000000000167feca9b31a000000000000000000000000000000000000000000000000000000001415388061032556fea2646970667358221220b244c0331517bebc589a2a51667c56df4245db1deb284e6da3f0e5a41bbd9d1664736f6c634300081c0033a2646970667358221220b571fb43a95d4e077321374c433847c6a1ea7727e1a9f6431dca1747e0d141c864736f6c634300081c0033","sourceMap":"957:13217:80:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1049:29;957:13217;1049:29;;;957:13217;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1065:26:16;957:13217:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2723:18:9;957:13217:80;;;;;;;2723:18:9;957:13217:80;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2395:4:48;;;336:42:2;7414:59:80;;;;957:13217;;;2024:14:2;7414:59:80;;7430:42;957:13217;7414:59;;957:13217;7414:59;;;;;336:42:2;7414:59:80;;;;;;;;957:13217;2763:4:48;;;7479:59:80;2763:4:48;957:13217:80;7479:14;2763:4:48;;;957:13217:80;;;7479:59;;;;;2024:14:2;7479:59:80;;957:13217;7479:59;;;:::i;:::-;;;;;;;;;;;957:13217;;;7479:59;;;2763:4:48;7479:59:80;2763:4:48;7479:59:80;;;;;;;;:::i;:::-;;;;;:::i;:::-;;957:13217;;7479:59;;;;;;957:13217;;;;;;;;;7414:59;;;;;:::i;:::-;957:13217;;7414:59;;;;957:13217;;;;;;;;;;;;;;;;1082:30;957:13217;1082:30;957:13217;1082:30;957:13217;1082:30;957:13217;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1151:22;957:13217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1009:36;957:13217;;;;;;;;;;;;;;;;;;;;;;2575:18:9;957:13217:80;2763:4:48;;;:::i;:::-;957:13217:80;;;;;;;:::i;:::-;2763:4:48;;;2575:18:9;957:13217:80;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;2876:18:9;957:13217:80;2763:4:48;;;:::i;:::-;957:13217:80;;;;;;;:::i;:::-;2763:4:48;;;2876:18:9;957:13217:80;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;2763:4:48;;957:13217:80;;;;;:::i;:::-;;;;2763:4:48;957:13217:80;;;;;;;;;;;;;;;;;;;;;;;1049:29;957:13217;;;;;;;;;;;;;;;;;;;;;;3653:18:9;957:13217:80;2763:4:48;;;:::i;:::-;957:13217:80;;;;;;;:::i;:::-;2763:4:48;;;3653:18:9;957:13217:80;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;2763:4:48;;957:13217:80;;;;;:::i;:::-;;;;2763:4:48;957:13217:80;;;;;;;;;;;;;;;;;;;;;;;3162:18:9;957:13217:80;2763:4:48;;;:::i;:::-;957:13217:80;;;;;;;:::i;:::-;2763:4:48;;;3162:18:9;957:13217:80;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12510:13;957:13217;;2763:4:48;;12534:20:80;;;;;:56;;:::i;:::-;2763:4:48;;957:13217:80;;12665:56;12671:20;;;;:29;957:13217;;12705:15;12665:56;;:::i;:::-;957:13217;12626:20;;:29;2763:4:48;13238:84:80;12848:24;;:::i;:::-;957:13217;12878:280;957:13217;12930:7;957:13217;;;;12991:29;957:13217;12968:53;;;957:13217;12968:53;;;;;;:::i;:::-;957:13217;;;;;;:::i;:::-;2763:4:48;;12897:261:80;957:13217;12897:261;;2763:4:48;957:13217:80;12897:261;;2763:4:48;12897:261:80;;;;2763:4:48;12897:261:80;;;;2763:4:48;12897:261:80;12534:20;12897:261;;2763:4:48;12808:1:80;12897:261;;;2763:4:48;957:13217:80;12878:13;;;:280;;;;:::i;:::-;;;:::i;:::-;;2763:4:48;;:::i;:::-;;;:::i;:::-;13238:84:80;;;:::i;:::-;957:13217;13985:59;13411:51;957:13217;13294:14;957:13217;;13411:51;:::i;:::-;13501:15;;;:::i;:::-;13522:33;;;;:::i;:::-;;;;;:::i;:::-;;957:13217;;;13822:105;957:13217;;;;;;;:::i;:::-;2763:4:48;;;;957:13217:80;2763:4:48;;957:13217:80;;;;;;;;;:::i;:::-;12808:1;2763:4:48;;12968:53:80;2763:4:48;;957:13217:80;2763:4:48;;;;957:13217:80;12510:13;957:13217;;13745:39;;;:::i;:::-;2763:4:48;13822:105:80;;:::i;:::-;2763:4:48;957:13217:80;13985:14;2763:4:48;;;957:13217:80;;;;13985:59;;;;;;2024:14:2;13985:59:80;;957:13217;13985:59;;;:::i;:::-;;;;;;;;;;;;;;;957:13217;14078:44;14148:17;14078:44;;;;:::i;:::-;14148:17;;:::i;:::-;957:13217;;13985:59;;;;;;;;;;;;;;;;:::i;:::-;;;2763:4:48;;;;14078:44:80;14148:17;2763:4:48;;13985:59:80;;;2763:4:48;-1:-1:-1;957:13217:80;;13985:59;;;;;;957:13217;;;;;;;;;;;;;;;;;;;;3346:26:9;957:13217:80;2763:4:48;;;:::i;:::-;957:13217:80;;;;;;:::i;:::-;2763:4:48;;;3346:26:9;957:13217:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;2763:4:48;;957:13217:80;;;;;:::i;:::-;;;;2763:4:48;957:13217:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;7739:13;957:13217;;2763:4:48;;7763:20:80;;;;;:56;;:::i;:::-;2763:4:48;;957:13217:80;;7894:56;7900:20;;;;:29;957:13217;;7934:15;7894:56;;:::i;:::-;957:13217;7855:20;;:29;2763:4:48;8121:239:80;8091:24;;:::i;:::-;957:13217;;;;;;;;;;;;:::i;:::-;2763:4:48;;8140:220:80;957:13217;8140:220;;2763:4:48;957:13217:80;8140:220;;2763:4:48;8140:220:80;;;;2763:4:48;8051:1:80;8140:220;;;2763:4:48;8140:220:80;7763:20;8140:220;;2763:4:48;8051:1:80;8140:220;;;2763:4:48;957:13217:80;8121:13;;;:239;;;;:::i;:::-;;8490:51;957:13217;8521:14;957:13217;;8490:51;:::i;:::-;8580:15;8621:84;8580:15;;:::i;:::-;2763:4:48;;;:::i;:::-;;;:::i;:::-;8621:84:80;;;:::i;:::-;8601:104;;;:::i;:::-;;;;;:::i;:::-;;8902:105;957:13217;;;;;;;;:::i;:::-;2763:4:48;;;;957:13217:80;2763:4:48;;957:13217:80;;;;;;;;;:::i;:::-;8051:1;2763:4:48;;;;;957:13217:80;2763:4:48;;;;957:13217:80;7739:13;957:13217;;8825:39;;;:::i;:::-;2763:4:48;8902:105:80;:::i;:::-;336:42:2;9014:59:80;;;;957:13217;;9014:59;2024:14:2;9014:59:80;;9030:42;957:13217;9014:59;;957:13217;9014:59;;;957:13217;9014:59;;336:42:2;9014:59:80;;;;;;;;;;;;;957:13217;2763:4:48;9079:59:80;2763:4:48;;957:13217:80;9079:14;2763:4:48;;;957:13217:80;;;;9079:59;;;;;;2024:14:2;9079:59:80;;957:13217;9079:59;;;:::i;:::-;;;;;;;;;;;;;957:13217;;;9079:59;;;;;;-1:-1:-1;9079:59:80;;;;;;:::i;:::-;;;;957:13217;;;9079:59;957:13217;;;;;;;;9014:59;;;;;;;;;:::i;:::-;957:13217;;9014:59;;;;;;957:13217;;;;9014:59;957:13217;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2763:4:48;2395;;336:42:2;6766:59:80;;;;957:13217;;;2024:14:2;6766:59:80;;6782:42;957:13217;6766:59;;957:13217;6766:59;;;;;336:42:2;6766:59:80;;;;;;;;957:13217;2763:4:48;;957:13217:80;6831:14;2763:4:48;;;957:13217:80;2763:4:48;957:13217:80;;6831:59;;2024:14:2;6831:59:80;;;;;;957:13217;6831:59;;;:::i;:::-;;;;;;;;;;;957:13217;2395:4:48;2482;2395;;336:42:2;6944:59:80;;;;957:13217;;;2024:14:2;6944:59:80;;6782:42;957:13217;6944:59;;957:13217;6944:59;;6766;6944;;336:42:2;6944:59:80;;;;;;;;957:13217;2763:4:48;;957:13217:80;6831:14;2763:4:48;;;957:13217:80;2763:4:48;957:13217:80;;7009:59;;2024:14:2;7009:59:80;;;;;;957:13217;7009:59;;;:::i;:::-;;;;;;;;;;;957:13217;2395:4:48;2556;2395;;336:42:2;7115:59:80;;;;957:13217;;;2024:14:2;7115:59:80;;6782:42;957:13217;7115:59;;957:13217;7115:59;;6766;7115;;336:42:2;7115:59:80;;;;;;;;2763:4:48;;;7180:59:80;2763:4:48;957:13217:80;6831:14;2763:4:48;;;957:13217:80;;;7180:59;;;;;2024:14:2;7180:59:80;;957:13217;7180:59;;;:::i;7009:::-;2763:4:48;7009:59:80;;2763:4:48;7009:59:80;;;;;;2763:4:48;7009:59:80;;;:::i;:::-;;;2763:4:48;;;;;7009:59:80;;;;;-1:-1:-1;7009:59:80;;;957:13217;;;;;;;;;6944:59;;;;;:::i;:::-;957:13217;;6944:59;;;;6831;2763:4:48;6831:59:80;;2763:4:48;6831:59:80;;;;;;2763:4:48;6831:59:80;;;:::i;:::-;;;2763:4:48;;;;;6831:59:80;;;;;-1:-1:-1;6831:59:80;;6766;;;;;:::i;:::-;957:13217;;6766:59;;;;957:13217;;;;;;;;;;;;;;;;;3501:18:9;957:13217:80;;;;;;;3501:18:9;957:13217:80;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3794:16:9;957:13217:80;;;;;;;3794:16:9;957:13217:80;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;336:42:2;1631:44:80;;;;957:13217;;2024:14:2;1631:44:80;;1641:33;;;;957:13217;1631:44;;957:13217;1631:44;;957:13217;1631:44;336:42:2;1631:44:80;;;;;;;;;;;957:13217;1681:20;;336:42:2;1681:20:80;;;;957:13217;;2024:14:2;1681:20:80;;1691:9;;;957:13217;1681:20;;957:13217;1681:20;;957:13217;1681:20;336:42:2;1681:20:80;;;;;;;;;;;957:13217;1707:20;;336:42:2;1707:20:80;;;;957:13217;;2024:14:2;1707:20:80;;1717:9;;;957:13217;1707:20;;957:13217;1707:20;;957:13217;1707:20;336:42:2;1707:20:80;;;;;;;;;;;957:13217;;;;;1757:39;957:13217;1757:39;;;;957:13217;1757:39;;957:13217;;1757:39;;;957:13217;1757:39;;:::i;:::-;2005:13;957:13217;;;;2040:30;;;2053:13;2040:30;2138:6;2120:15;2763:4:48;2120:15:80;;;2763:4:48;;;;957:13217:80;;2763:4:48;;957:13217:80;;2763:4:48;957:13217:80;;:::i;:::-;2183:1;2763:4:48;;1757:39:80;2763:4:48;;;;;;;;;;957:13217:80;;;;;;;;;;:::i;:::-;2763:4:48;;957:13217:80;1970:222;;2763:4:48;957:13217:80;1970:222;;2763:4:48;;;957:13217:80;;1970:222;;2763:4:48;957:13217:80;1970:222;;2763:4:48;;;957:13217:80;;;;;;;:::i;:::-;2183:1;2763:4:48;;;;;;;;;;-1:-1:-1;;957:13217:80;;2905:82;;957:13217;;;;;:::i;:::-;2763:4:48;;;2385:219:80;957:13217;2385:219;;2763:4:48;957:13217:80;2385:219;;2763:4:48;2385:219:80;957:13217;2385:219;;2763:4:48;957:13217:80;;2385:219;;2763:4:48;2374:230:80;;;:::i;:::-;;;;;:::i;:::-;;957:13217;;;;;:::i;:::-;;2763:4:48;;2678:37:80;957:13217;2621:278;;2763:4:48;2621:278:80;957:13217;2621:278;;2763:4:48;957:13217:80;;2621:278;;2763:4:48;2825:66:80;957:13217;2621:278;;2763:4:48;2610:289:80;;;:::i;:::-;;;;;:::i;:::-;;957:13217;;;;;;:::i;:::-;2763:4:48;;957:13217:80;2935:52;;2763:4:48;2905:24:80;;:82;;;;:::i;:::-;;2763:4:48;;;:::i;:::-;957:13217:80;;;;;;:::i;:::-;2763:4:48;;;1757:39:80;2763:4:48;;;:::i;:::-;;;;;;;;;957:13217:80;;;2993:100;3345:64;957:13217;;;;;;;:::i;:::-;2763:4:48;;;957:13217:80;3023:70;;2763:4:48;2993:24:80;;:100;;;;:::i;:::-;;;:::i;:::-;;3289:39;3199:51;957:13217;3230:14;957:13217;;3199:51;:::i;:::-;3289:39;;:::i;:::-;3345:64;:::i;:::-;3665:16;957:13217;;:::i;:::-;2395:4:48;;;;957:13217:80;;1436:17:82;;2763:4:48;1466:13:82;957:13217:80;1466:13:82;;2763:4:48;1489:13:82;957:13217:80;1489:13:82;;2763:4:48;957:13217:80;;;;;;;;:::i;:::-;2763:4:48;;;;957:13217:80;2763:4:48;;1512:21:82;;;:40;957:13217:80;;2763:4:48;;;;957:13217:80;;;2763:4:48;957:13217:80;;:::i;:::-;2678:37;2763:4:48;;1757:39:80;957:13217;;;;;;;;;;;1558:13:82;;;3994:291:80;1558:13:82;;957:13217:80;1558:13:82;;:45;3719:237:80;957:13217;;;;;;;;;;:::i;:::-;2763:4:48;;3738:218:80;;;;2763:4:48;3738:218:80;957:13217;3738:218;;2763:4:48;3738:218:80;957:13217;3738:218;;2763:4:48;3738:218:80;957:13217;3738:218;;2763:4:48;3738:218:80;957:13217;3738:218;;2763:4:48;957:13217:80;;3738:218;;2763:4:48;957:13217:80;1558:13:82;;3719::80;:237;;;;:::i;:::-;;957:13217;;;;;;:::i;:::-;2763:4:48;;4013:272:80;;;;2763:4:48;957:13217:80;4013:272;;2763:4:48;4013:272:80;957:13217;4013:272;;2763:4:48;4013:272:80;957:13217;4013:272;;2763:4:48;4013:272:80;957:13217;4013:272;;2763:4:48;957:13217:80;;4013:272;;2763:4:48;957:13217:80;1558:13:82;;3994::80;:291;;;;:::i;:::-;-1:-1:-1;2763:4:48;957:13217:80;;;;2763:4:48;;957:13217:80;2763:4:48;957:13217:80;;:::i;:::-;2183:1;2763:4:48;;1757:39:80;2763:4:48;;;;;;;;;957:13217:80;;;4478:27;957:13217;2005:13;957:13217;;4478:24;;:27;:::i;:::-;;957:13217;;;4447:71;;;957:13217;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4447:71;957:13217;4704:325;957:13217;;;;;;;;;;;;4447:71;1757:39;4447:71;;;;;;:::i;:::-;957:13217;4437:82;;957:13217;;;;;;;:::i;:::-;2763:4:48;;4405:151:80;;;2763:4:48;4393:163:80;;;:::i;:::-;;;;;:::i;:::-;;957:13217;;4618:54;;;957:13217;;;877:42:82;957:13217:80;877:42:82;;957:13217:80;;4618:54;;;957:13217;4618:54;;:::i;:::-;957:13217;4608:65;;957:13217;;;;;;;:::i;:::-;2763:4:48;;4584:112:80;;;2763:4:48;4564:132:80;;;:::i;:::-;;;;;:::i;:::-;;4807:75;;957:13217;4758:14;2763:4:48;;;957:13217:80;;;;4807:75;;;2024:14:2;4807:75:80;;;;957:13217;4807:75;;;:::i;:::-;;1757:39;4807:75;;;;;;:::i;:::-;957:13217;;;;;;:::i;:::-;2763:4:48;;4723:306:80;;;;2763:4:48;957:13217:80;4723:306;;2763:4:48;4723:306:80;957:13217;4723:306;;2763:4:48;4723:306:80;957:13217;4723:306;;2763:4:48;4723:306:80;957:13217;4723:306;;2763:4:48;957:13217:80;;4723:306;;2763:4:48;957:13217:80;1558:13:82;;4704::80;:325;;;;:::i;:::-;;;:::i;:::-;-1:-1:-1;957:13217:80;;;;;;;:::i;:::-;2678:37;2763:4:48;;;;;;;;;;;1558:13:82;5258:66:80;1558:13:82;;;5298:16:80;957:13217;1558:13:82;;5298::80;:16;:::i;:::-;;957:13217;;5258:66;;;;;2024:14:2;5258:66:80;;957:13217;5258:66;;;:::i;:::-;;:10;;:66;;;;;;;;;;;2763:4:48;;5240:100:80;5368:49;2763:4:48;;;:::i;:::-;5240:100:80;;:::i;:::-;5368:49;:::i;:::-;5348:69;;;:::i;:::-;;;;;:::i;:::-;;5534:66;1558:13:82;;5574:16:80;957:13217;1558:13:82;;5574::80;:16;:::i;5534:66::-;;5258:10;;5534:66;;;;;;;;;;2763:4:48;5516:100:80;2763:4:48;;;;:::i;5516:100:80:-;957:13217;;;;;;;;;:::i;:::-;;;;;;;;;;;6289:28:82;2024:14:2;6289:28:82;;957:13217:80;;6289:28:82;;2763:4:48;6289:28:82;;957:13217:80;6289:28:82;336:42:2;6289:28:82;;;;;;;6269:49;6439:25;6289:28;6389:37;6289:28;5806:66:80;6289:28:82;;;;;2763:4:48;6269:49:82;;:::i;:::-;957:13217:80;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;6389:37:82;:::i;:::-;6439:25;:::i;:::-;5624:69:80;;;:::i;:::-;;;;;:::i;:::-;;1558:13:82;;5846:16:80;957:13217;1558:13:82;;5846::80;:16;:::i;:::-;;957:13217;;5806:66;;;;;2024:14:2;5806:66:80;;957:13217;5806:66;;;:::i;:::-;;5258:10;;5806:66;;;;;;;;;;;2763:4:48;;5916:49:80;5788:100;6203:105;2763:4:48;;;:::i;5916:49:80:-;5896:69;;;:::i;:::-;;;;;:::i;:::-;;957:13217;;;;;;:::i;:::-;;2763:4:48;;1757:39:80;2763:4:48;;957:13217:80;2763:4:48;;;;957:13217:80;2005:13;957:13217;;6069:39;;;:::i;:::-;2763:4:48;957:13217:80;;;;;;;:::i;:::-;2763:4:48;;;;957:13217:80;2763:4:48;;6203:105:80;;:::i;:::-;957:13217;;;2005:13;957:13217;;336:42:2;6361:28:80;;;;957:13217;;6361:28;2024:14:2;6361:28:80;;957:13217;6361:28;;957:13217;6361:28;;957:13217;6361:28;;336:42:2;6361:28:80;;;;;;;;2763:4:48;;;6415:59:80;2763:4:48;;;957:13217:80;4758:14;2763:4:48;;;957:13217:80;;;;6415:59;;;;;;2024:14:2;6415:59:80;;957:13217;6415:59;;;:::i;6361:28::-;;;;;:::i;:::-;957:13217;;6361:28;;;;957:13217;;;;6361:28;957:13217;;;;;;;;;5806:66;;;;;;;;;;;;;;;;:::i;:::-;;;2763:4:48;;;;;;;5916:49:80;5806:66;;;;;;;;957:13217;;;;;;;;;6289:28:82;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;957:13217:80;;;;;;;;;5534:66;;;;;;;;;;;;;;;:::i;:::-;;;2763:4:48;;;;5516:100:80;2763:4:48;;5534:66:80;;;;;;;;957:13217;;;;;;;;;5258:66;;;;;;;;;;;;;;;;:::i;:::-;;;2763:4:48;;;;;5240:100:80;5258:66;;;;;;;2763:4:48;957:13217:80;2763:4:48;;;;;;;;;;;;957:13217:80;-1:-1:-1;957:13217:80;;;;;-1:-1:-1;957:13217:80;;;;;;;;;;;;;;;;;;2763:4:48;;;;;957:13217:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2763:4:48;;;957:13217:80;2763:4:48;;;;2005:13:80;957:13217;2763:4:48;;;957:13217:80;;;;;:::i;:::-;2763:4:48;;;;;;;;;;;;;;;;;;;957:13217:80;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2763:4:48;957:13217:80;;;;;;;:::i;:::-;2763:4:48;;;;;;;;;957:13217:80;2763:4:48;;;;957:13217:80;2763:4:48;;;;957:13217:80;2763:4:48;;;;;;;;;;;;;957:13217:80;;;;;;;:::i;:::-;2763:4:48;;;;;;;;;957:13217:80;2763:4:48;;;;957:13217:80;2763:4:48;;;;957:13217:80;2763:4:48;;;;;;;;;;;;;957:13217:80;;;;;;;;;:::i;:::-;2763:4:48;;957:13217:80;2763:4:48;;;;;;;;;;;;;;957:13217:80;2763:4:48;;;;;957:13217:80;2763:4:48;;2040:30:80;;;;1707:20;;;;;:::i;:::-;957:13217;;1707:20;;;;957:13217;;;;1707:20;957:13217;;;;;;;;;1681:20;;;;;:::i;:::-;957:13217;;1681:20;;;;1631:44;;;;;:::i;:::-;957:13217;;1631:44;;;;957:13217;;;;;;;;;;;;3948:19:9;957:13217:80;2763:4:48;;;:::i;:::-;957:13217:80;;;;;;:::i;:::-;2763:4:48;;;3948:19:9;957:13217:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;2763:4:48;;957:13217:80;;;;;2763:4:48;;;:::i;:::-;957:13217:80;;;;;;;:::i;:::-;2763:4:48;;;957:13217:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2763:4:48;957:13217:80;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;1116:31;957:13217;1116:31;957:13217;1116:31;957:13217;1116:31;957:13217;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3018:16:9;957:13217:80;;;;;;;3018:16:9;957:13217:80;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2395:4:48;;;1456::82;1436:17;;;2763:4:48;1466:13:82;;;;2763:4:48;1489:13:82;;;;2763:4:48;1436:17:82;957:13217:80;;;;;;;:::i;:::-;2763:4:48;;;957:13217:80;;2763:4:48;;1512:21:82;;;:40;2763:4:48;9463:1:80;2763:4:48;;;957:13217:80;;;;;;;:::i;:::-;9463:1;2763:4:48;;;957:13217:80;;;;;;;;;;1558:13:82;;957:13217:80;1558:13:82;;:45;;;957:13217:80;;2024:14:2;9604:47:80;;;;9647:2;9604:47;;;957:13217;9604:47;;;;;;;:::i;:::-;9657:241;957:13217;;;;;;;;;;;:::i;:::-;2763:4:48;;;9676:222:80;;;;2763:4:48;957:13217:80;9676:222;;2763:4:48;9676:222:80;1466:13:82;9676:222:80;;2763:4:48;9676:222:80;1489:13:82;9676:222:80;;2763:4:48;9676:222:80;957:13217;9676:222;;2763:4:48;1456::82;957:13217:80;9676:222;;2763:4:48;9657:13:80;;:241;;;;:::i;:::-;;957:13217;10031:14;2763:4:48;;;957:13217:80;2763:4:48;;;;;;;;;;957:13217:80;;;;;;;:::i;:::-;2763:4:48;;;;;;;;;;;;;;;;;;957:13217:80;;;;10104:88;;9979:350;957:13217;;;10104:88;;;2024:14:2;10104:88:80;;;;9604:47;10104:88;;;:::i;:::-;957:13217;;;;;;:::i;:::-;2763:4:48;;1456::82;9998:331:80;;;2763:4:48;957:13217:80;9998:331;;2763:4:48;9998:331:80;1466:13:82;9998:331:80;;2763:4:48;9998:331:80;1489:13:82;9998:331:80;;2763:4:48;9998:331:80;957:13217;9998:331;;2763:4:48;1456::82;957:13217:80;9998:331;;2763:4:48;9979:13:80;;:350;;;;:::i;:::-;;957:13217;;;;;;:::i;:::-;2763:4:48;;;;;1466:13:82;2763:4:48;;;;;;1489:13:82;2763:4:48;;;1466:13:82;2763:4:48;;957:13217:80;10441:13;957:13217;;2763:4:48;;;957:13217:80;2763:4:48;;;10547:6:80;10529:15;2763:4:48;10529:15:80;;2763:4:48;;;;957:13217:80;2763:4:48;;957:13217:80;;2763:4:48;;;;957:13217:80;2763:4:48;957:13217:80;;:::i;:::-;1456:4:82;2763::48;;;;;;;;;;;;;;-1:-1:-1;;10560:46:80;;957:13217;;;;;;;:::i;:::-;1456:4:82;2763::48;;;;;;;;;;;957:13217:80;;;;10612:99;10717:260;957:13217;11155:64;957:13217;;;;;;;;:::i;:::-;2763:4:48;;10642:69:80;;;2763:4:48;10612:24:80;;:99;;;;:::i;:::-;;957:13217;10717:27;957:13217;;;;;;:::i;:::-;2763:4:48;;;10756:221:80;;;;2763:4:48;2024:14:2;957:13217:80;10756:221;;2763:4:48;10756:221:80;1466:13:82;10756:221:80;;2763:4:48;957:13217:80;1489:13:82;10756:221:80;;2763:4:48;10717:24:80;:27;:::i;:::-;;:33;;:260;;;;:::i;11155:64::-;11334:10;:66;:10;11374:13;;:16;:13;;:16;:::i;:::-;;957:13217;;11334:66;;;;;2024:14:2;11334:66:80;;957:13217;11334:66;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2763:4:48;;11658:16:80;11447:50;11316:100;11618:66;2763:4:48;;;:::i;11447:50:80:-;11658:13;;:16;:::i;:::-;;957:13217;;11618:66;;;;;;2024:14:2;11618:66:80;;957:13217;11618:66;;;:::i;:::-;;;;;;;;;;;;;;2763:4:48;;11600:100:80;11731:50;2763:4:48;;;:::i;11731:50:80:-;11820:15;957:13217;;;;;;;:::i;:::-;9463:1;2763:4:48;;;;;;;;;;;11841:28:80;;;;12101:105;11841:28;;;;;:::i;:::-;;;;;:::i;:::-;;11875;;;:::i;:::-;;;;;:::i;:::-;;957:13217;;;;;;;;;:::i;:::-;1456:4:82;2763::48;;;;;957:13217:80;2763:4:48;;;;957:13217:80;10441:13;957:13217;;11967:39;;;:::i;:::-;2763:4:48;957:13217:80;;;;;;;:::i;:::-;2763:4:48;;;957:13217:80;;2763:4:48;;12101:105:80;:::i;:::-;12213:55;336:42:2;12213:55:80;;;;957:13217;;2024:14:2;12213:55:80;;12229:38;957:13217;12213:55;;957:13217;12213:55;;9604:47;12213:55;;336:42:2;12213:55:80;;;;;;;;2763:4:48;;12274:59:80;2763:4:48;;;;957:13217:80;10031:14;2763:4:48;;;957:13217:80;;;;12274:59;;;;;;2024:14:2;12274:59:80;;957:13217;12274:59;;;:::i;12213:55::-;;;;;;;12274:59;12213:55;;;:::i;:::-;;;;;;;;;957:13217;;;;;;;;;2763:4:48;1466:13:82;2763:4:48;;;;;;;;;;;;957:13217:80;;;;;;;;;11618:66;;;;;;;;;;;;;;;;:::i;:::-;;;2763:4:48;;;;;11600:100:80;11618:66;;2763:4:48;957:13217:80;;;11618:66;;;;;11334;;;;;;;;;;;;;;;;;;:::i;:::-;;;2763:4:48;;;;;;;;;;;11658:16:80;11334:66;;2763:4:48;957:13217:80;;;11334:66;;;;;;957:13217;;;;;;;;;2763:4:48;957:13217:80;;;;;:::i;:::-;2763:4:48;;;;;;;;;957:13217:80;2763:4:48;;;;1466:13:82;2763:4:48;;;;1489:13:82;2763:4:48;;;;;;;;;;;;;;;957:13217:80;;;;;;:::i;:::-;2763:4:48;;1466:13:82;2763:4:48;;;;;;;;;;;;;;;;9604:47:80;2763:4:48;;;;;957:13217:80;2763:4:48;;;957:13217:80;;;;;:::i;:::-;2763:4:48;;;;;;;;;;;;;;;;;;;;957:13217:80;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;1466:13:82;957:13217:80;;;;;1466:13:82;957:13217:80;;;;1489:13:82;957:13217:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1225:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;957:13217;;1208:37;957:13217;;;;;;;;1208:37;957:13217;;;2024:14:2;1267:26:80;;2024:14:2;957:13217:80;1267:26;;2024:14:2;;;;;957:13217:80;2024:14:2;957:13217:80;;;2024:14:2;1267:26:80;;;;;336:42:2;1267:26:80;;;;;;2024:14:2;1267:26:80;;;;;957:13217;2024:14:2;957:13217:80;2024:14:2;;957:13217:80;2024:14:2;1251:42:80;2024:14:2;;;1251:42:80;2024:14:2;;;;;;;957:13217:80;2024:14:2;;;;;;;;;957:13217:80;;2024:14:2;1316:27:80;;2024:14:2;957:13217:80;1316:27;;2024:14:2;957:13217:80;2024:14:2;;;957:13217:80;2024:14:2;957:13217:80;;;2024:14:2;1267:26:80;1316:27;1267:26;1316:27;;336:42:2;1316:27:80;;;;;;2024:14:2;1316:27:80;;;;;957:13217;2024:14:2;957:13217:80;2024:14:2;;957:13217:80;2024:14:2;1299:44:80;2024:14:2;;;1299:44:80;2024:14:2;;;;;;;957:13217:80;2024:14:2;;;;;;;;;1374:6:80;2024:14:2;;;;;;;957:13217:80;;1397:13;;;;;;;;1225:20;1397:13;;;;;;;;;;;;;;;;;;;957:13217;;2024:14:2;1387:23:80;2024:14:2;;;1387:23:80;2024:14:2;957:13217:80;;1397:13;957:13217;;;;;;;;;;;1397:13;2024:14:2;957:13217:80;;;;;;;;1316:27;;;;1267:26;1316:27;1267:26;1316:27;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;1267:26;;;;;;;;;;;;;;:::i;:::-;;;;957:13217;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;957:13217:80;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;9676:222;957:13217;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;2024:14:2;957:13217:80;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;957:13217:80;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;-1:-1:-1;957:13217:80;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2024:14:2;;;;;;;;;957:13217:80;;;;;;:::i;:::-;2024:14:2;;957:13217:80;;;;;;;;2024:14:2;;;;;;;;;;;;957:13217:80;2024:14:2;;;957:13217:80;2024:14:2;;;;;;;;;;:::o;2763:4:48:-;957:13217:80;;2763:4:48;;;;;;:::o;:::-;;957:13217:80;2763:4:48;;;;;957:13217:80;2763:4:48;;957:13217:80;;2763:4:48;;;;;;;;:::o;:::-;957:13217:80;;2183:1;2763:4:48;;;;;;;:::o;:::-;957:13217:80;;2763:4:48;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;957:13217:80;2763:4:48;;;;;;;957:13217:80;;;;;;;;2763:4:48;;;;;;;;;;;;:::o;:::-;;;;;957:13217:80;;2763:4:48;;;;;;;;957:13217:80;;2763:4:48;;;;957:13217:80;;;;2763:4:48;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;957:13217:80;2763:4:48;;957:13217:80;;;2763:4:48;;;;;;;957:13217:80;2763:4:48;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;957:13217:80;2763:4:48;;;;957:13217:80;;2763:4:48;;;957:13217:80;2763:4:48;;;;957:13217:80;;2763:4:48;;;957:13217:80;2763:4:48;;;;957:13217:80;2763:4:48;:::o;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;957:13217:80;2763:4:48;;957:13217:80;2763:4:48;;;;;;957:13217:80;;2763:4:48;;;957:13217:80;2763:4:48;;;;;;;;;;957:13217:80;;;;;;;;2763:4:48;;957:13217:80;2763:4:48;;;;;;957:13217:80;;2763:4:48;;;;;;;;;;;;;;;;;;;;;;;957:13217:80;2763:4:48;;;;;;;957:13217:80;2763:4:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;957:13217:80;2763:4:48;;;;;;;957:13217:80;2763:4:48;;;;;;;;;;;957:13217:80;;;;;;;;;;2763:4:48;;;;;;;;;;;;:::o;:::-;;;957:13217:80;;;;2763:4:48;957:13217:80;;;;;;;;2763:4:48;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;957:13217:80;;2763:4:48;;;;;;;;;;957:13217:80;;;;;;:::i;:::-;10441:13;957:13217;;;2763:4:48;;;957:13217:80;2763:4:48;;;;;957:13217:80;;2763:4:48;;;;957:13217:80;2763:4:48;;;;:::o;:::-;957:13217:80;;;;;;:::i;:::-;8521:14;957:13217;;;2763:4:48;;;957:13217:80;2763:4:48;;;;;957:13217:80;;2763:4:48;;;;957:13217:80;2763:4:48;;;;:::o;:::-;;957:13217:80;;2763:4:48;;957:13217:80;;2763:4:48;957:13217:80;;:::i;:::-;8051:1;2763:4:48;;;;;;-1:-1:-1;2763:4:48;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;957:13217:80;2763:4:48;;957:13217:80;2763:4:48;;;;;;;;957:13217:80;;2763:4:48;;;957:13217:80;2763:4:48;;;;;;;;;;957:13217:80;;;;;;;;2763:4:48;;957:13217:80;2763:4:48;;;;;;957:13217:80;;2763:4:48;;;;;;;;;;;;;;;;;;;;;;;957:13217:80;2763:4:48;;;;;;;957:13217:80;2763:4:48;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;957:13217:80;2763:4:48;;;;;;;957:13217:80;2763:4:48;;;;;;;;;;;;;957:13217:80;;;;;;;;;;2763:4:48;;;;;;;;;;957:13217:80;2763:4:48;;;;;;;;;;957:13217:80;;2763:4:48;957:13217:80;;;;;;;;;;2763:4:48;957:13217:80;;:::i;2763:4:48:-;;;;;;;957:13217:80;2763:4:48;;957:13217:80;;;;;;2763:4:48;;;;;;;;;;;;;;;;;;;;;;;;;957:13217:80;2763:4:48;;957:13217:80;;;2763:4:48;;;;;;;957:13217:80;2763:4:48;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;957:13217:80;2763:4:48;;;;957:13217:80;;2763:4:48;;;957:13217:80;2763:4:48;;;;957:13217:80;;2763:4:48;;;957:13217:80;2763:4:48;;;;957:13217:80;;;2763:4:48;;;;;;;;;;;;;;;;;;;957:13217:80;2763:4:48;;957:13217:80;2763:4:48;;;;;;;;957:13217:80;;2763:4:48;;;957:13217:80;2763:4:48;;;;;;;;;;957:13217:80;;;;;;;;2763:4:48;;957:13217:80;2763:4:48;;;;;;957:13217:80;;2763:4:48;;;;;;;;;;;;;;;;;;;;;;;957:13217:80;2763:4:48;;;;;;;957:13217:80;2763:4:48;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;957:13217:80;2763:4:48;;;;;;;957:13217:80;2763:4:48;;;;;;;;;;;;;957:13217:80;;;;;;;;;;2763:4:48;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;957:13217:80;2763:4:48;;957:13217:80;;;;;;2763:4:48;;;;;;;;;;;;;;;;;;;;;;;;;957:13217:80;2763:4:48;;957:13217:80;;;2763:4:48;;;;;;;957:13217:80;2763:4:48;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;957:13217:80;2763:4:48;;;;957:13217:80;;2763:4:48;;;957:13217:80;2763:4:48;;;;957:13217:80;;2763:4:48;;;957:13217:80;2763:4:48;;;;957:13217:80;;;2763:4:48;;;;;;;;;957:13217:80;;;;;-1:-1:-1;957:13217:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;;;-1:-1:-1;957:13217:80;;;;;-1:-1:-1;957:13217:80;;-1:-1:-1;957:13217:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2763:4:48;957:13217:80;;-1:-1:-1;957:13217:80;;-1:-1:-1;957:13217:80;;;;;;;;;-1:-1:-1;957:13217:80;;;;-1:-1:-1;957:13217:80;;;;;;;;;-1:-1:-1;957:13217:80;;;;-1:-1:-1;957:13217:80;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;-1:-1:-1;957:13217:80;;-1:-1:-1;957:13217:80;;-1:-1:-1;957:13217:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2024:14:2;957:13217:80;;;;;;;;2024:14:2;957:13217:80;;2024:14:2;957:13217:80;2024:14:2;;;;957:13217:80;;;;;;;;2024:14:2;957:13217:80;;2024:14:2;957:13217:80;2024:14:2;957:13217:80;2024:14:2;;957:13217:80;;;;;;;;2024:14:2;957:13217:80;;2024:14:2;957:13217:80;2024:14:2;957:13217:80;2024:14:2;;957:13217:80;;;;;;;;2024:14:2;957:13217:80;;2024:14:2;957:13217:80;2024:14:2;957:13217:80;2024:14:2;;957:13217:80;;;;;;;;2024:14:2;957:13217:80;;2024:14:2;957:13217:80;2024:14:2;957:13217:80;2024:14:2;;957:13217:80;;;;;;;;2024:14:2;957:13217:80;;2024:14:2;957:13217:80;2024:14:2;957:13217:80;2024:14:2;;957:13217:80;;;;;;;;2024:14:2;957:13217:80;;2024:14:2;957:13217:80;2024:14:2;;;957:13217:80;;;;;;;;;;;;;;;;;;;;2024:14:2;;;;957:13217:80;;;2024:14:2;;957:13217:80;2024:14:2;;957:13217:80;;;;2024:14:2;;957:13217:80;2024:14:2;;957:13217:80;;;;2024:14:2;;957:13217:80;2024:14:2;;957:13217:80;;;;2024:14:2;;957:13217:80;2024:14:2;;957:13217:80;;;;2024:14:2;;957:13217:80;2024:14:2;;957:13217:80;;;;2024:14:2;;957:13217:80;2024:14:2;;957:13217:80;;;;2024:14:2;;957:13217:80;;;;;;;;;;;;;;1243:204:4;1302:7;957:13217:80;;;;;;;1325:14:4;:::o;1298:143::-;957:13217:80;;;2024:14:2;1377:39:4;;957:13217:80;1377:39:4;;;957:13217:80;192:59:4;;;;957:13217:80;192:59:4;1377:39;;;957:13217:80;1377:39:4;;;;;;;2763:4:48;1377:39:4;;;1298:143;1377:53;;;1370:60;:::o;1377:39::-;;;192:59;1377:39;;192:59;1377:39;;;;;;2763:4:48;1377:39:4;;;:::i;:::-;;;2763:4:48;;;;;1377:39:4;;;;;;-1:-1:-1;1377:39:4;;;957:13217:80;;;2763:4:48;957:13217:80;;;;;1279:329:82;957:13217:80;;:::i;:::-;2395:4:48;2321;2395;;8051:1:80;1436:17:82;;;2763:4:48;2321;1466:13:82;;;2763:4:48;2321;1489:13:82;;;2763:4:48;1436:17:82;957:13217:80;;;;;;:::i;:::-;2321:4:48;2763;;2321;2763;;;1512:21:82;;;:40;957:13217:80;;;2763:4:48;;;957:13217:80;2763:4:48;957:13217:80;;:::i;:::-;8051:1;2763:4:48;;;957:13217:80;2321:4:48;957:13217:80;;;;;;1558:13:82;;;957:13217:80;1558:13:82;;:45;1279:329::o;957:13217:80:-;;;;;;;;:::i;:::-;2321:4:48;957:13217:80;;2321:4:48;957:13217:80;;;;1466:13:82;957:13217:80;;;;2321:4:48;1466:13:82;957:13217:80;;;2321:4:48;1489:13:82;957:13217:80;;;2321:4:48;957:13217:80;;;;2321:4:48;957:13217:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;8077:303:97:-;957:13217:80;;;8230:28:97;2024:14:2;8230:28:97;;957:13217:80;8230:28:97;;;957:13217:80;-1:-1:-1;8230:28:97;;;957:13217:80;8230:28:97;;;;;;957:13217:80;-1:-1:-1;8230:28:97;957:13217:80;8230:28:97;;;;;8077:303;957:13217:80;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;8306:11:97;957:13217:80;8306:11:97;:::i;:::-;957:13217:80;;;8298:45:97;;;;;2024:14:2;8298:45:97;;957:13217:80;8230:28:97;8298:45;;957:13217:80;;;;;;:::i;:::-;;;;;;;;8230:28:97;957:13217:80;;;;;;;;;;;;;;;;;;;:::i;:::-;8298:45:97;;;957:13217:80;8298:45:97;;;;;;;-1:-1:-1;8298:45:97;;;8349:26;8077:303;:::o;8298:45::-;;;;;;-1:-1:-1;8298:45:97;;;;;;:::i;8230:28::-;;;;;;;;;;;;;:::i;:::-;;;;957:13217:80;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;1612:920:82:-;957:13217:80;;;;;;;;:::i;:::-;;;;;;;;;;2024:14:2;;957:13217:80;;;;1806:32:82;2024:14:2;1806:32:82;;;;;957:13217:80;-1:-1:-1;1806:32:82;;;336:42:2;1806:32:82;;;;;;;1786:53;1806:32;-1:-1:-1;1806:32:82;;;1786:53;;:::i;:::-;957:13217:80;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;1933:20:82;;2024:14:2;957:13217:80;;;1921:33:82;2024:14:2;1921:33:82;;1806:32;1921:33;;957:13217:80;-1:-1:-1;1921:33:82;1806:32;1921:33;336:42:2;1921:33:82;;;;;;;1901:54;1921:33;-1:-1:-1;1921:33:82;;;1901:54;;:::i;:::-;957:13217:80;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;2052:23:82;;;2024:14:2;957:13217:80;;;2040:36:82;2024:14:2;2040:36:82;;1806:32;2040:36;;957:13217:80;-1:-1:-1;2040:36:82;1806:32;2040:36;336:42:2;2040:36:82;;;;;;;2020:57;2040:36;-1:-1:-1;2040:36:82;;;2020:57;;:::i;:::-;957:13217:80;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;2172:21:82;;;957:13217:80;;;;;2160:34:82;2024:14:2;2160:34:82;;1806:32;2160:34;;957:13217:80;-1:-1:-1;2160:34:82;1806:32;2160:34;336:42:2;2160:34:82;;;;;;;2140:55;2160:34;-1:-1:-1;2160:34:82;;;2140:55;;:::i;:::-;957:13217:80;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;2259:13:82;-1:-1:-1;2311:3:82;2278:24;;;;;957:13217:80;2274:35:82;;;;;2328:5;2324:61;;2311:3;2437:24;:27;:24;;:27;:::i;:::-;;957:13217:80;;;;;;;:::i;:::-;;;;;;;;;;2024:14:2;;957:13217:80;;;;2712:30:82;2024:14:2;2712:30:82;;1806:32;2712:30;;957:13217:80;-1:-1:-1;2712:30:82;1806:32;2712:30;336:42:2;2712:30:82;;;;;;;2692:51;2712:30;-1:-1:-1;2712:30:82;;;2311:3;2692:51;;;;;;:::i;:::-;957:13217:80;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;2801:13:82;957:13217:80;-1:-1:-1;2820:16:82;;2796:197;2845:3;2820:16;;957:13217:80;2816:27:82;;;;;2862:5;2858:61;;2845:3;2965:19;:16;;;:19;:::i;:::-;;957:13217:80;;;;;;:::i;:::-;;;;;;;;;;;;;;;;3226:28:82;2024:14:2;3226:28:82;;1806:32;3226:28;;957:13217:80;-1:-1:-1;3226:28:82;1806:32;3226:28;336:42:2;3226:28:82;;;;;;;3206:49;3226:28;-1:-1:-1;3226:28:82;;;3206:49;;:::i;:::-;957:13217:80;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;3355:14:82;;957:13217:80;1806:32:82;2763:4:48;;;;;-1:-1:-1;957:13217:80;;;;3337:34:82;2024:14:2;3337:34:82;;957:13217:80;1806:32:82;3337:34;;2763:4:48;3337:34:82;;1806:32;3337:34;336:42:2;3337:34:82;;;;;;;;3317:55;3337:34;;;;;;3317:55;;:::i;:::-;957:13217:80;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;3463:10:82;;;957:13217:80;;;;3451:23:82;2024:14:2;3451:23:82;;1806:32;3451:23;;957:13217:80;3451:23:82;;1806:32;3451:23;336:42:2;3451:23:82;;;;;;;;3431:44;3451:23;;;;;;3431:44;;:::i;:::-;957:13217:80;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;2172:21:82;3567:11;;2024:14:2;957:13217:80;;;3555:24:82;2024:14:2;3555:24:82;;1806:32;3555:24;;957:13217:80;3555:24:82;;1806:32;3555:24;336:42:2;3555:24:82;;;;;;;957:13217:80;;3535:45:82;3555:24;;;;2278;3555;957:13217:80;3555:24:82;;;;;3535:45;;:::i;:::-;957:13217:80;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;3670:9:82;957:13217:80;;;3658:22:82;2024:14:2;3658:22:82;;1806:32;3658:22;;957:13217:80;3658:22:82;;1806:32;3658:22;336:42:2;3658:22:82;;;;;;;2933:53;3658:22;957:13217:80;3658:22:82;;3694:25;3658:22;;3638:43;3658:22;;;;2845:3;3638:43;;;:::i;3694:25::-;2933:53;;:::i;:::-;2845:3;957:13217:80;2801:13:82;;;3658:22;;;;;;;;;;;;;;:::i;:::-;;;;;;;957:13217:80;;;;;;;;;;3555:24:82;;;;;;;;;;;;;;:::i;:::-;957:13217:80;;;;;;;;;3451:23:82;;;;;;;;;;;;;;:::i;2763:4:48:-;;-1:-1:-1;2763:4:48;;1806:32:82;2763:4:48;1806:32:82;-1:-1:-1;2763:4:48;3226:28:82;;;;;;;;;;;;;:::i;:::-;957:13217:80;;;-1:-1:-1;957:13217:80;;;;;2858:61:82;2886:24;;;:::i;:::-;2858:61;;2816:27;2278:24;2816:27;;;;957:13217:80;2816:27:82;;;3005:25;2399:67;2816:27;;3005:25;:::i;2399:67::-;2311:3;2259:13;957:13217:80;;-1:-1:-1;2259:13:82;;2712:30;;;;;;;;;;;;;:::i;:::-;;;;;;957:13217:80;;;-1:-1:-1;957:13217:80;;;;;2324:61:82;2352:24;;;2437:27;2352:24;;:::i;:::-;2324:61;;;;;;2274:35;;;;;;2485:25;2274:35;2485:25;:::i;2160:34::-;;;;;;;-1:-1:-1;2160:34:82;;;;;;:::i;:::-;957:13217:80;;;-1:-1:-1;957:13217:80;;;;;10030:386:97;957:13217:80;;10030:386:97;957:13217:80;;;-1:-1:-1;10030:386:97;957:13217:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;924:276:82:-;;1076:17;;2024:14:2;957:13217:80;;;1068:32:82;2024:14:2;1068:32:82;;;;;957:13217:80;;;;;1076:17:82;1068:32;;;336:42:2;1068:32:82;;;;;;;-1:-1:-1;;;;;1068:32:82;;;924:276;957:13217:80;;;1137:14:82;2024::2;1137::82;;1068:32;1137:14;;957:13217:80;-1:-1:-1;1137:14:82;957:13217:80;1137:14:82;336:42:2;1137:14:82;;;;;;;-1:-1:-1;1137:14:82;;;924:276;957:13217:80;;;1158:14:82;2024::2;1158::82;;1068:32;1158:14;;957:13217:80;-1:-1:-1;1158:14:82;957:13217:80;1158:14:82;336:42:2;1158:14:82;;;;;;;-1:-1:-1;1158:14:82;;;924:276;957:13217:80;;;;1179:14:82;2024::2;1179::82;;957:13217:80;1068:32:82;1179:14;;2763:4:48;-1:-1:-1;1179:14:82;957:13217:80;1179:14:82;336:42:2;1179:14:82;;;;;;;957:13217:80;1179:14:82;;1120:74;1179:14;-1:-1:-1;1179:14:82;;;924:276;957:13217:80;;;;;;;;;;1120:74:82;;;;;;957:13217:80;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;1120:74:82;;;;;;;;;:::i;1179:14::-;;;;;;-1:-1:-1;1179:14:82;;;;;;:::i;:::-;;;;1158;;;;;;;-1:-1:-1;1158:14:82;;;;;;:::i;:::-;;;;;1137;;;;;;-1:-1:-1;1137:14:82;;;;;;:::i;:::-;;;;1068:32;;;;;1076:17;1068:32;;1076:17;1068:32;;;;;;1076:17;1068:32;;;:::i;:::-;;;957:13217:80;;;;;;;;;;;;;;;;;;;2763:4:48;957:13217:80;;2763:4:48;1068:32:82;;;;;;;;-1:-1:-1;1068:32:82;;957:13217:80;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;6064:422:82:-;957:13217:80;;;;;;;:::i;:::-;;;;;;;;;;;6289:28:82;2024:14:2;6289:28:82;;957:13217:80;6289:28:82;;;2763:4:48;957:13217:80;6289:28:82;;;336:42:2;6289:28:82;;;;;;;957:13217:80;;6269:49:82;6439:25;6289:28;;6389:37;6289:28;;957:13217:80;6289:28:82;957:13217:80;6289:28:82;;;6269:49;;:::i;:::-;957:13217:80;;;;;;;;;;;;;;;;:::i;6289:28:82:-;957:13217:80;;;;;;;;;8689:847:97;;957:13217:80;;;-1:-1:-1;8689:847:97;;957:13217:80;8689:847:97;957:13217:80;9110:29:97;9039;8960:37;957:13217:80;8689:847:97;8960:37;:::i;:::-;9039:29;957:13217:80;9039:29:97;:::i;:::-;9110;957:13217:80;9110:29:97;:::i;:::-;957:13217:80;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;9540:323:97:-;-1:-1:-1;957:13217:80;;9540:323:97;957:13217:80;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;9770:11:97;957:13217:80;9770:11:97;:::i;957:13217:80:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9762:49:97;;;957:13217:80;9762:49:97;;;;;;;-1:-1:-1;9762:49:97;;;9540:323;957:13217:80;2763:4:48;957:13217:80;;9824:34:97;;;;;;;;;;2763:4:48;;;;;9540:323:97;:::o;9762:49::-;;;;;;-1:-1:-1;9762:49:97;;;;;;:::i;:::-;;;;3710:110:4;;957:13217:80;3789:24:4;;;;957:13217:80;;3789:24:4;2024:14:2;3789:24:4;;;;;957:13217:80;;;;;-1:-1:-1;3789:24:4;;;957:13217:80;3789:24:4;;;;;;;;3710:110;:::o;3789:24::-;-1:-1:-1;3789:24:4;;;:::i;2815:199:15:-;;957:13217:80;2933:19:15;2815:199;2933:19;:::i;:::-;957:13217:80;;;;;9786:54:15;957:13217:80;;;;;;:::i;:::-;;;;;;;;;;;9786:54:15;;;957:13217:80;9786:54:15;;;;;;;;;957:13217:80;;;;;;:::i;:::-;;;;;;9786:54:15;;;;;;;;:::i;:::-;957:13217:80;9371:159:15;679:42;9371:159;;;2815:199::o;4796:685:82:-;;5068:13;;;;957:13217:80;5068:22:82;;;:::i;:::-;;2024:14:2;;3520:24:40;;;;957:13217:80;;;;;3552:22:40;5068:13:82;3552:22:40;;957:13217:80;;;3582:24:40;;;;957:13217:80;;;3621:27:40;;;;;;;957:13217:80;;;3714:20:40;;;;;;;4049;;;957:13217:80;;;4109:17:40;3520:24;4109:17;957:13217:80;;5068:13:82;957:13217:80;4019:108:40;;;3520:24;4019:108;;957:13217:80;;;;;;;;;;;;;;;3520:24:40;957:13217:80;;;;;:::i;:::-;;;;;;;;;;;;4019:108:40;957:13217:80;4019:108:40;;;;;;957:13217:80;4019:108:40;;;;;:::i;:::-;5068:13:82;957:13217:80;3462:279:40;;;3520:24;3462:279;;957:13217:80;3582:24:40;957:13217:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3520:24:40;957:13217:80;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;3462:279:40;4019:108;3462:279;;;;;;;;:::i;:::-;957:13217:80;1188:32:40;;5182:50:82;;;;:::i;:::-;957:13217:80;5068:13:82;957:13217:80;5257:54:82;;;2024:14:2;5257:54:82;;;;;;;;;:::i;:::-;;:10;;:54;;;;3520:24:40;5257:54:82;;;;;;957:13217:80;5257:54:82;;;4796:685;5350:35;;;;:::i;:::-;957:13217:80;;;;;;;;;;:::i;:::-;;;;;3520:24:40;957:13217:80;;;;;;;;;;;:::i;:::-;;;;;3520:24:40;957:13217:80;;;2024:14:2;957:13217:80;;;;3932:39:82;2024:14:2;3932:39:82;;5257:54;3932:39;;957:13217:80;;3932:39:82;;;336:42:2;3932:39:82;;;;;;;;3912:60;3932:39;957:13217:80;3932:39:82;957:13217:80;3932:39:82;;;3912:60;;:::i;:::-;957:13217:80;;;3520:24:40;957:13217:80;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;4059:37:82;2024:14:2;4059:37:82;;5257:54;4059:37;;957:13217:80;;4059:37:82;3932:39;4059:37;336:42:2;4059:37:82;;;;;;;;4039:58;4059:37;;957:13217:80;4059:37:82;;;4039:58;;:::i;:::-;957:13217:80;;;3520:24:40;957:13217:80;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;4182:35:82;2024:14:2;4182:35:82;;5257:54;4182:35;;957:13217:80;;4182:35:82;3932:39;4182:35;336:42:2;4182:35:82;;;;;;;;4162:56;4182:35;;957:13217:80;4182:35:82;;;4162:56;;:::i;:::-;957:13217:80;;;3520:24:40;957:13217:80;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;4305:37:82;2024:14:2;4305:37:82;;5257:54;4305:37;;957:13217:80;;4305:37:82;3932:39;4305:37;336:42:2;4305:37:82;;;;;;;4285:58;957:13217:80;4305:37:82;3520:24:40;4305:37:82;4421:53;4305:37;957:13217:80;4305:37:82;;;4285:58;;:::i;:::-;957:13217:80;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;4441:20:82;;:32;4421:53;;:::i;:::-;957:13217:80;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;4569:20:82;:29;957:13217:80;;;;;4557:42:82;2024:14:2;4557:42:82;;5257:54;4557:42;;957:13217:80;;4557:42:82;3932:39;4557:42;336::2;4557::82;;;;;;;957:13217:80;4557:42:82;;957:13217:80;4557:42:82;4537:63;4557:42;;;;;4537:63;;:::i;:::-;957:13217:80;;;3520:24:40;957:13217:80;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;4703:27:82;957:13217:80;;4691:40:82;;;;2024:14:2;4691:40:82;;3520:24:40;5257:54:82;4691:40;;957:13217:80;3932:39:82;957:13217:80;;;;:::i;:::-;4691:40:82;;336:42:2;4691:40:82;;;;;;;5853:37;6013:25;4691:40;;5731:52;5962:38;4691:40;;4745:25;4671:61;957:13217:80;4691:40:82;957:13217:80;4691:40:82;3520:24:40;4691:40:82;957:13217:80;4691:40:82;;;4671:61;;:::i;5731:52::-;957:13217:80;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;5853:37:82:-;957:13217:80;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;4557:42:82:-;;;;;;;;;;;;;;:::i;:::-;957:13217:80;;;;;;;;;4305:37:82;957:13217:80;;;;;;;;;4059:37:82;957:13217:80;;;;;;;;;3932:39:82;957:13217:80;;;;;;;;;5257:54:82;;3520:24:40;5257:54:82;;3520:24:40;5257:54:82;;;;;;2763:4:48;5257:54:82;;;:::i;:::-;;;2763:4:48;;;;5350:35:82;2763:4:48;;5257:54:82;;;;;-1:-1:-1;5257:54:82;;232:1:97;;;;;;;;;;:::o;:::-;;;;;;;:::o;:::-;;;;;;;;;;701:863;957:13217:80;;;;2024:14:2;798:35:97;;957:13217:80;798:35:97;;;957:13217:80;;;;;;;;;;;;798:35:97;;;;;;;;;;;-1:-1:-1;798:35:97;;;701:863;957:13217:80;;;866:35:97;2024:14:2;866:35:97;;957:13217:80;798:35:97;866;;957:13217:80;;;;;;;;;;;;866:35:97;798;866;;;;;;;;;-1:-1:-1;866:35:97;;;701:863;916:18;;;;957:13217:80;;285:44:97;462:50;1037:32;;1033:109;;701:863;232:1;;;;;;;1278:17;232:1;;644:49;;285:44;644:49;1278:17;:::i;:::-;2763:4:48;232:1:97;2763:4:48;;;;;;;1326:27:97;1337:15;;;;:::i;:::-;1326:27;;:::i;:::-;957:13217:80;;;2024:14:2;1383:39:97;;957:13217:80;798:35:97;1383:39;;232:1;;957:13217:80;232:1:97;;957:13217:80;232:1:97;957:13217:80;;;232:1:97;-1:-1:-1;1383:39:97;798:35;1383:39;;;;;;;;;-1:-1:-1;1383:39:97;;;701:863;957:13217:80;;;1451:39:97;2024:14:2;1451:39:97;;957:13217:80;798:35:97;1451:39;;232:1;;957:13217:80;232:1:97;;957:13217:80;232:1:97;957:13217:80;;;232:1:97;-1:-1:-1;1451:39:97;798:35;1451:39;;;;;;;;;-1:-1:-1;1451:39:97;;;701:863;957:13217:80;-1:-1:-1;957:13217:80;;;;1526:24:97;;;;2024:14:2;1526:24:97;;798:35;1526:24;;957:13217:80;1526:24:97;;;;;;;-1:-1:-1;1526:24:97;;;701:863;957:13217:80;;232:1:97;957:13217:80;;;;;;;;;;;;232:1:97;;;;;;957:13217:80;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;232:1:97;;;;;;;;:::i;1526:24::-;232:1;1526:24;;;957:13217:80;1526:24:97;;;-1:-1:-1;1526:24:97;;;;;;:::i;:::-;;;;;1451:39;-1:-1:-1;1451:39:97;;;;;;;;;;;;;;:::i;:::-;;;;;1383;;;;;;-1:-1:-1;1383:39:97;;;;;;:::i;:::-;;;;1033:109;957:13217:80;;;;1107:26:97;;1124:8;;-1:-1:-1;957:13217:80;;1107:26:97;957:13217:80;1124:8:97;;957:13217:80;;-1:-1:-1;957:13217:80;;;;1107:26:97;;;;;;;;;:::i;:::-;957:13217:80;1097:37:97;;1033:109;;957:13217:80;798:35:97;957:13217:80;;;;;;798:35:97;957:13217:80;;;;;;;;;;;;;;866:35:97;;;957:13217:80;866:35:97;;957:13217:80;866:35:97;;;;;;2763:4:48;866:35:97;;;:::i;:::-;;;2763:4:48;;;;;;866:35:97;;;;;;;-1:-1:-1;866:35:97;;798;;957:13217:80;798:35:97;;957:13217:80;798:35:97;;;;;;2763:4:48;798:35:97;;;:::i;:::-;;;2763:4:48;;;;;;798:35:97;;;;;;-1:-1:-1;798:35:97;;957:13217:80;;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;14820:414:97:-;;957:13217:80;;14924:20:97;14920:52;;957:13217:80;;;;;;:::i;:::-;;;;;;;;;14943:1:97;15007:186;15048:3;957:13217:80;;15027:19:97;;;;;15068:32;15088:11;;;;;:::i;:::-;;15068:32;;:::i;:::-;957:13217:80;;;232:1:97;;;;;;;;15112:23;;15108:79;;15048:3;957:13217:80;;15012:13:97;;;15108:79;15154:24;;957:13217:80;15154:24:97;;:::i;:::-;15108:79;;;;;15027:19;;;15205:24;15027:19;;;15205:24;:::i;14920:52::-;957:13217:80;;;;:::i;13897:441:97:-;;;957:13217:80;;13999:22:97;13995:54;;957:13217:80;;;;;;;;:::i;:::-;;;;;;;;;14090:13:97;14020:1;14128:3;957:13217:80;;14105:21:97;;;;;957:13217:80;14181:13:97;;;;:::i;:::-;2024:14:2;957:13217:80;;;14168:27:97;2024:14:2;14168:27:97;;;;;957:13217:80;14020:1:97;957:13217:80;14168:27:97;957:13217:80;;;;14168:27:97;;;;;;;14237:1;957:13217:80;14168:27:97;957:13217:80;14168:27:97;14020:1;14168:27;;;14128:3;957:13217:80;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;14141:60:97;957:13217:80;;;232:1:97;;;;;;;;14213:25;;14209:82;;14128:3;;;14237:1;957:13217:80;14090:13:97;;14209:82;14237:1;957:13217:80;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;14209:82:97;;;;;14168:27;;;;;;;;;;;;:::i;:::-;;;;14105:21;;;;;;14309:24;14105:21;14309:24;:::i;13995:54::-;957:13217:80;;;;;:::i;1546:1263:15:-;2763:4:48;1664:10:15;;;;957:13217:80;;1970:8:15;;;;;;:20;;;1546:1263;1966:34;;2026:9;;;;:::i;:::-;2763:4:48;2038:1:15;2763:4:48;;;;;;;2234:1:15;2229:6;;;:18;;;1546:1263;2225:38;;232:1:97;2277:20:15;;;:46;;;1546:1263;2273:82;;2455:7;;;;;;2493;;;;;2528:11;2493:7;;:::i;:::-;2528:11;:::i;:::-;2557:8;;;2553:24;;2600:9;;;;:::i;:::-;1042:78;232:1:97;;;;;;;2451:352:15;1546:1263::o;2553:24::-;2567:10;;;:::o;2451:352::-;2630:173;;;;;;;;2451:352;;;;;1546:1263::o;2630:173::-;2672:7;;;;;;2707:11;2672:7;;;:::i;2707:11::-;2736:8;;;2732:24;;2779:9;;;;:::i;:::-;2038:1;2763:4:48;;;;;;;2630:173:15;;;;;;;2273:82;232:1:97;;;;2332:23:15;232:1:97;;;;2332:23:15;;:::i;2277:46::-;232:1:97;;;2301:22:15;;2277:46;;2225:38;2256:7;;;;;;;;;:::i;2229:18::-;2239:8;;;;2229:18;;1966:34;1992:8;;;;;;:::o;1970:20::-;1982:8;;;;;1970:20;;957:13217:80;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{"src/extensions/sessions/SessionSig.sol":{"SessionSig":[{"start":7491,"length":20},{"start":7595,"length":20},{"start":8021,"length":20},{"start":11044,"length":20},{"start":24653,"length":20}]}}},"methodIdentifiers":{"IS_TEST()":"fa7626d4","emitter()":"dce11375","excludeArtifacts()":"b5508aa9","excludeContracts()":"e20c9f71","excludeSelectors()":"b0464fdc","excludeSenders()":"1ed7831c","explicitTarget()":"a115e2d8","failed()":"ba414fa6","identityWallet()":"2aa7856c","sessionManager()":"b7b13f79","sessionWallet()":"de184e22","setUp()":"0a9254e4","targetArtifactSelectors()":"66d9a9a0","targetArtifacts()":"85226c81","targetContracts()":"3f7286f4","targetInterfaces()":"2ade3880","targetSelectors()":"916a17c6","targetSenders()":"3e5e3c23","testInvalidCallsLengthReverts()":"e006b565","testInvalidDelegateCallReverts((address,bytes4,bytes32,bytes32,bytes,(string,uint64)),bytes)":"560e0ece","testInvalidPayloadKindReverts()":"4d0dc7d9","testInvalidSelfCallReverts()":"0e5cf02e","testValidExplicitSessionSignature(bytes4,uint256,uint256,address,bool)":"3abba523","testValidImplicitSessionSignature((address,bytes4,bytes32,bytes32,bytes,(string,uint64)))":"82a3a699"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"IS_TEST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"emitter\",\"outputs\":[{\"internalType\":\"contract Emitter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"excludedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"explicitTarget\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"identityWallet\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyX\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sessionManager\",\"outputs\":[{\"internalType\":\"contract SessionManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sessionWallet\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyX\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setUp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifactSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"artifact\",\"type\":\"string\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzArtifactSelector[]\",\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"targetedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetInterfaces\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"artifacts\",\"type\":\"string[]\"}],\"internalType\":\"struct StdInvariant.FuzzInterface[]\",\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"testInvalidCallsLengthReverts\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"approvedSigner\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"identityType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes32\",\"name\":\"issuerHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"audienceHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"applicationData\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"redirectUrl\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"issuedAt\",\"type\":\"uint64\"}],\"internalType\":\"struct AuthData\",\"name\":\"authData\",\"type\":\"tuple\"}],\"internalType\":\"struct Attestation\",\"name\":\"attestation\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"testInvalidDelegateCallReverts\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"testInvalidPayloadKindReverts\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"testInvalidSelfCallReverts\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"internalType\":\"uint256\",\"name\":\"param\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"explicitTarget2\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"useChainId\",\"type\":\"bool\"}],\"name\":\"testValidExplicitSessionSignature\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"approvedSigner\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"identityType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes32\",\"name\":\"issuerHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"audienceHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"applicationData\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"redirectUrl\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"issuedAt\",\"type\":\"uint64\"}],\"internalType\":\"struct AuthData\",\"name\":\"authData\",\"type\":\"tuple\"}],\"internalType\":\"struct Attestation\",\"name\":\"attestation\",\"type\":\"tuple\"}],\"name\":\"testValidImplicitSessionSignature\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"testInvalidDelegateCallReverts((address,bytes4,bytes32,bytes32,bytes,(string,uint64)),bytes)\":{\"notice\":\"Test that a call using delegateCall reverts.\"},\"testInvalidSelfCallReverts()\":{\"notice\":\"Test that a self\\u2013call with nonzero value reverts with InvalidSelfCall.\"},\"testValidExplicitSessionSignature(bytes4,uint256,uint256,address,bool)\":{\"notice\":\"Valid explicit session test.\"},\"testValidImplicitSessionSignature((address,bytes4,bytes32,bytes32,bytes,(string,uint64)))\":{\"notice\":\"Valid implicit session test.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/extensions/sessions/SessionManager.t.sol\":\"SessionManagerTest\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/extensions/sessions/SessionErrors.sol\":{\"keccak256\":\"0xa7642b4ef1d2ac8e41bd6dca88c5a644cac21b3ebe79deb5013e21fb4aaab405\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ef80768f6c509a54ea5d3fb92cbf46363f945f071cc3664710770c09b3d2a978\",\"dweb:/ipfs/QmbRpicAiPSYQbKpjoDbanap9q5hYsqEMS1u7w7sqKEYTY\"]},\"src/extensions/sessions/SessionManager.sol\":{\"keccak256\":\"0x796e8db3b2dc58842aca5c7fe76897527dd60279a8146ee107f651d876fccbd9\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2ee4d968a8bd5d007cccc67108509470677f4f5ce59dce7005b1da7d9b243609\",\"dweb:/ipfs/QmVUz8Q4BwNsbeLZdsWHg87MCVF6aAJL6UYzWWWAoxjvS7\"]},\"src/extensions/sessions/SessionSig.sol\":{\"keccak256\":\"0x7c44eabacfd2b4758fa8f54574f7479d8ef0209551ad824b3fc497c215a9609a\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://845b301783b1f069fa0b01d47ca2de1a79b0d4c3e14881973421a718c4d823df\",\"dweb:/ipfs/QmcDgiqjENAL3L7MjQ7HgitmsJ2PVNUm3ibnL2DZRU1VAL\"]},\"src/extensions/sessions/explicit/ExplicitSessionManager.sol\":{\"keccak256\":\"0x08405cc3def78d4172267a2e607e303b5f222d8cb85ba009deab58e0110088b0\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e2e073fdb5794f59ee6d7eb5e04074b1452e5d0824e4117259835071199f3d32\",\"dweb:/ipfs/Qmbi56yfELF88ezZ2tczegLmeB6Gb3HxDX11bzx3rpDgJZ\"]},\"src/extensions/sessions/explicit/IExplicitSessionManager.sol\":{\"keccak256\":\"0xae940e96cf0677c9b0df0daee07db0293c55a21cec0b893d82eefd122815602b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://62ee98f92121ad54f78d375ec3003aab73719adec852b0d12518fe99fc6f66c6\",\"dweb:/ipfs/QmPuAX7tdga5Su1xua6LS6jR9DsV7GyCwyZLeRC8upPTKY\"]},\"src/extensions/sessions/explicit/Permission.sol\":{\"keccak256\":\"0x0bc35a04da3830c64ec13c32b57f88be6b980228f6b387e800cf70919cdcfb16\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://fcb304612f894699f8e1e40cf134abebe8f7135795bea479b04e967551c59948\",\"dweb:/ipfs/Qme4mD8dh3xU9wbscQwvL4cQcZ2Wv8Fobo2fmU29B3DirV\"]},\"src/extensions/sessions/explicit/PermissionValidator.sol\":{\"keccak256\":\"0xe970e1ce931ef3779e3ddc9525b40820b7f63746828a440306ff9c984da42234\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://9154a986b7a5565119b2c0993dd9bc9e6e9b3e07eede034c8fde1c9f39a56a30\",\"dweb:/ipfs/QmXbgsr6kYYK5gmge6sosgwbHnFnQW5ntCZCyeNTQqTndD\"]},\"src/extensions/sessions/implicit/Attestation.sol\":{\"keccak256\":\"0xcaa44022b5eb4bc7ab487b3b1a0125da67e2e891cee983ef6cdb6814f045efc8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://94829782b6dcb482d7c002511c590d1ad8de3b21e5e72575df18be73565b3638\",\"dweb:/ipfs/QmZ4u9FxALzMzKR7auW8FmFkhGVw8kRDeDRJ1PKwKaWNWF\"]},\"src/extensions/sessions/implicit/ISignalsImplicitMode.sol\":{\"keccak256\":\"0x6cb48f50c49bcb3c7071306fe9fac6c102bc9eabf73d9909e19ab3b9a835d0a8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://15297e969f64fc1152654d1cefbe276c15a0ecfc11f86b4c276bb0b454fe700a\",\"dweb:/ipfs/QmeehNFYBPPtJePwUcqiYCgiuFotur4VVVCV1KvegdCCZ4\"]},\"src/extensions/sessions/implicit/ImplicitSessionManager.sol\":{\"keccak256\":\"0xe0d4f9f9c242e1e5781ba3a2eb4c4485b16de53769dacf7f448be01649d9997b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://f6f28cfeca83fffc74e63440243fcb0a7f9a7d5ac5efae21fa8e96926c1d0fae\",\"dweb:/ipfs/Qmdnw9PrjjpUjWij9VDxBRe6besuJvpwiGaPewVcR2G9C1\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/interfaces/ISapient.sol\":{\"keccak256\":\"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489\",\"dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"src/utils/LibOptim.sol\":{\"keccak256\":\"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81\",\"dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x\"]},\"test/extensions/sessions/SessionManager.t.sol\":{\"keccak256\":\"0xa66940b532b2c51fba8abbc87931fce223631c951aced2eeea4799ef24a4f299\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://db35996a7cff18b1920a3d65cf230e77861aaf3b50da8fc8637769df48e02e2b\",\"dweb:/ipfs/QmPRoUXs3uobhUSYqHD33MqLcnb4w2CSCHrmr3N5myRFg7\"]},\"test/extensions/sessions/SessionTestBase.sol\":{\"keccak256\":\"0x96ed18b2829a94a4e2fa0331b595e931ba48114679aa9765799aa9583713a1e7\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1f5dc74df056ea0b6722898060c5f467d47c7961335d474d93a3d45a75575894\",\"dweb:/ipfs/QmPT1ArcYmBUASEr2iL5TnRRkwShMahRh8YWurcbGkwJa4\"]},\"test/mocks/Emitter.sol\":{\"keccak256\":\"0xb3fe3585f667c0af3e9deaaf6f7e68b16067014c9363367b4548c91abf367b27\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e6985271645ec1df625995837c2afb23f7042d7a4c18c992f5f1c9ff1c89b160\",\"dweb:/ipfs/QmTwQRRY95Z73vDP5EuamAQxTaSprwGy3piLRrWDf9FnoU\"]},\"test/utils/PrimitivesRPC.sol\":{\"keccak256\":\"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe\",\"dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv\"]},\"test/utils/TestUtils.sol\":{\"keccak256\":\"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad\",\"dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log","anonymous":false},{"inputs":[{"internalType":"address","name":"","type":"address","indexed":false}],"type":"event","name":"log_address","anonymous":false},{"inputs":[{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"log_bytes","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32","indexed":false}],"type":"event","name":"log_bytes32","anonymous":false},{"inputs":[{"internalType":"int256","name":"","type":"int256","indexed":false}],"type":"event","name":"log_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address","name":"val","type":"address","indexed":false}],"type":"event","name":"log_named_address","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes","name":"val","type":"bytes","indexed":false}],"type":"event","name":"log_named_bytes","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes32","name":"val","type":"bytes32","indexed":false}],"type":"event","name":"log_named_bytes32","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false}],"type":"event","name":"log_named_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"string","name":"val","type":"string","indexed":false}],"type":"event","name":"log_named_string","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false}],"type":"event","name":"log_named_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log_string","anonymous":false},{"inputs":[{"internalType":"uint256","name":"","type":"uint256","indexed":false}],"type":"event","name":"log_uint","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"logs","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"IS_TEST","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"emitter","outputs":[{"internalType":"contract Emitter","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeArtifacts","outputs":[{"internalType":"string[]","name":"excludedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeContracts","outputs":[{"internalType":"address[]","name":"excludedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"excludedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSenders","outputs":[{"internalType":"address[]","name":"excludedSenders_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"explicitTarget","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"failed","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"identityWallet","outputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"publicKeyX","type":"uint256"},{"internalType":"uint256","name":"publicKeyY","type":"uint256"},{"internalType":"uint256","name":"privateKey","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"sessionManager","outputs":[{"internalType":"contract SessionManager","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"sessionWallet","outputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"publicKeyX","type":"uint256"},{"internalType":"uint256","name":"publicKeyY","type":"uint256"},{"internalType":"uint256","name":"privateKey","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"setUp"},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifactSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzArtifactSelector[]","name":"targetedArtifactSelectors_","type":"tuple[]","components":[{"internalType":"string","name":"artifact","type":"string"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifacts","outputs":[{"internalType":"string[]","name":"targetedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetContracts","outputs":[{"internalType":"address[]","name":"targetedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetInterfaces","outputs":[{"internalType":"struct StdInvariant.FuzzInterface[]","name":"targetedInterfaces_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"string[]","name":"artifacts","type":"string[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"targetedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSenders","outputs":[{"internalType":"address[]","name":"targetedSenders_","type":"address[]"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"testInvalidCallsLengthReverts"},{"inputs":[{"internalType":"struct Attestation","name":"attestation","type":"tuple","components":[{"internalType":"address","name":"approvedSigner","type":"address"},{"internalType":"bytes4","name":"identityType","type":"bytes4"},{"internalType":"bytes32","name":"issuerHash","type":"bytes32"},{"internalType":"bytes32","name":"audienceHash","type":"bytes32"},{"internalType":"bytes","name":"applicationData","type":"bytes"},{"internalType":"struct AuthData","name":"authData","type":"tuple","components":[{"internalType":"string","name":"redirectUrl","type":"string"},{"internalType":"uint64","name":"issuedAt","type":"uint64"}]}]},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"testInvalidDelegateCallReverts"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"testInvalidPayloadKindReverts"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"testInvalidSelfCallReverts"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"},{"internalType":"uint256","name":"param","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"address","name":"explicitTarget2","type":"address"},{"internalType":"bool","name":"useChainId","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"testValidExplicitSessionSignature"},{"inputs":[{"internalType":"struct Attestation","name":"attestation","type":"tuple","components":[{"internalType":"address","name":"approvedSigner","type":"address"},{"internalType":"bytes4","name":"identityType","type":"bytes4"},{"internalType":"bytes32","name":"issuerHash","type":"bytes32"},{"internalType":"bytes32","name":"audienceHash","type":"bytes32"},{"internalType":"bytes","name":"applicationData","type":"bytes"},{"internalType":"struct AuthData","name":"authData","type":"tuple","components":[{"internalType":"string","name":"redirectUrl","type":"string"},{"internalType":"uint64","name":"issuedAt","type":"uint64"}]}]}],"stateMutability":"nonpayable","type":"function","name":"testValidImplicitSessionSignature"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{"testInvalidDelegateCallReverts((address,bytes4,bytes32,bytes32,bytes,(string,uint64)),bytes)":{"notice":"Test that a call using delegateCall reverts."},"testInvalidSelfCallReverts()":{"notice":"Test that a self–call with nonzero value reverts with InvalidSelfCall."},"testValidExplicitSessionSignature(bytes4,uint256,uint256,address,bool)":{"notice":"Valid explicit session test."},"testValidImplicitSessionSignature((address,bytes4,bytes32,bytes32,bytes,(string,uint64)))":{"notice":"Valid implicit session test."}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/extensions/sessions/SessionManager.t.sol":"SessionManagerTest"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/extensions/sessions/SessionErrors.sol":{"keccak256":"0xa7642b4ef1d2ac8e41bd6dca88c5a644cac21b3ebe79deb5013e21fb4aaab405","urls":["bzz-raw://ef80768f6c509a54ea5d3fb92cbf46363f945f071cc3664710770c09b3d2a978","dweb:/ipfs/QmbRpicAiPSYQbKpjoDbanap9q5hYsqEMS1u7w7sqKEYTY"],"license":"Apache-2.0"},"src/extensions/sessions/SessionManager.sol":{"keccak256":"0x796e8db3b2dc58842aca5c7fe76897527dd60279a8146ee107f651d876fccbd9","urls":["bzz-raw://2ee4d968a8bd5d007cccc67108509470677f4f5ce59dce7005b1da7d9b243609","dweb:/ipfs/QmVUz8Q4BwNsbeLZdsWHg87MCVF6aAJL6UYzWWWAoxjvS7"],"license":"Apache-2.0"},"src/extensions/sessions/SessionSig.sol":{"keccak256":"0x7c44eabacfd2b4758fa8f54574f7479d8ef0209551ad824b3fc497c215a9609a","urls":["bzz-raw://845b301783b1f069fa0b01d47ca2de1a79b0d4c3e14881973421a718c4d823df","dweb:/ipfs/QmcDgiqjENAL3L7MjQ7HgitmsJ2PVNUm3ibnL2DZRU1VAL"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/ExplicitSessionManager.sol":{"keccak256":"0x08405cc3def78d4172267a2e607e303b5f222d8cb85ba009deab58e0110088b0","urls":["bzz-raw://e2e073fdb5794f59ee6d7eb5e04074b1452e5d0824e4117259835071199f3d32","dweb:/ipfs/Qmbi56yfELF88ezZ2tczegLmeB6Gb3HxDX11bzx3rpDgJZ"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/IExplicitSessionManager.sol":{"keccak256":"0xae940e96cf0677c9b0df0daee07db0293c55a21cec0b893d82eefd122815602b","urls":["bzz-raw://62ee98f92121ad54f78d375ec3003aab73719adec852b0d12518fe99fc6f66c6","dweb:/ipfs/QmPuAX7tdga5Su1xua6LS6jR9DsV7GyCwyZLeRC8upPTKY"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/Permission.sol":{"keccak256":"0x0bc35a04da3830c64ec13c32b57f88be6b980228f6b387e800cf70919cdcfb16","urls":["bzz-raw://fcb304612f894699f8e1e40cf134abebe8f7135795bea479b04e967551c59948","dweb:/ipfs/Qme4mD8dh3xU9wbscQwvL4cQcZ2Wv8Fobo2fmU29B3DirV"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/PermissionValidator.sol":{"keccak256":"0xe970e1ce931ef3779e3ddc9525b40820b7f63746828a440306ff9c984da42234","urls":["bzz-raw://9154a986b7a5565119b2c0993dd9bc9e6e9b3e07eede034c8fde1c9f39a56a30","dweb:/ipfs/QmXbgsr6kYYK5gmge6sosgwbHnFnQW5ntCZCyeNTQqTndD"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/Attestation.sol":{"keccak256":"0xcaa44022b5eb4bc7ab487b3b1a0125da67e2e891cee983ef6cdb6814f045efc8","urls":["bzz-raw://94829782b6dcb482d7c002511c590d1ad8de3b21e5e72575df18be73565b3638","dweb:/ipfs/QmZ4u9FxALzMzKR7auW8FmFkhGVw8kRDeDRJ1PKwKaWNWF"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/ISignalsImplicitMode.sol":{"keccak256":"0x6cb48f50c49bcb3c7071306fe9fac6c102bc9eabf73d9909e19ab3b9a835d0a8","urls":["bzz-raw://15297e969f64fc1152654d1cefbe276c15a0ecfc11f86b4c276bb0b454fe700a","dweb:/ipfs/QmeehNFYBPPtJePwUcqiYCgiuFotur4VVVCV1KvegdCCZ4"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/ImplicitSessionManager.sol":{"keccak256":"0xe0d4f9f9c242e1e5781ba3a2eb4c4485b16de53769dacf7f448be01649d9997b","urls":["bzz-raw://f6f28cfeca83fffc74e63440243fcb0a7f9a7d5ac5efae21fa8e96926c1d0fae","dweb:/ipfs/Qmdnw9PrjjpUjWij9VDxBRe6besuJvpwiGaPewVcR2G9C1"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/interfaces/ISapient.sol":{"keccak256":"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359","urls":["bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489","dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"src/utils/LibOptim.sol":{"keccak256":"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde","urls":["bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81","dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x"],"license":"Apache-2.0"},"test/extensions/sessions/SessionManager.t.sol":{"keccak256":"0xa66940b532b2c51fba8abbc87931fce223631c951aced2eeea4799ef24a4f299","urls":["bzz-raw://db35996a7cff18b1920a3d65cf230e77861aaf3b50da8fc8637769df48e02e2b","dweb:/ipfs/QmPRoUXs3uobhUSYqHD33MqLcnb4w2CSCHrmr3N5myRFg7"],"license":"Apache-2.0"},"test/extensions/sessions/SessionTestBase.sol":{"keccak256":"0x96ed18b2829a94a4e2fa0331b595e931ba48114679aa9765799aa9583713a1e7","urls":["bzz-raw://1f5dc74df056ea0b6722898060c5f467d47c7961335d474d93a3d45a75575894","dweb:/ipfs/QmPT1ArcYmBUASEr2iL5TnRRkwShMahRh8YWurcbGkwJa4"],"license":"Apache-2.0"},"test/mocks/Emitter.sol":{"keccak256":"0xb3fe3585f667c0af3e9deaaf6f7e68b16067014c9363367b4548c91abf367b27","urls":["bzz-raw://e6985271645ec1df625995837c2afb23f7042d7a4c18c992f5f1c9ff1c89b160","dweb:/ipfs/QmTwQRRY95Z73vDP5EuamAQxTaSprwGy3piLRrWDf9FnoU"],"license":"Apache-2.0"},"test/utils/PrimitivesRPC.sol":{"keccak256":"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe","urls":["bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe","dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv"],"license":"Apache-2.0"},"test/utils/TestUtils.sol":{"keccak256":"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79","urls":["bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad","dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa"],"license":"Apache-2.0"}},"version":1},"id":80} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/SessionSig.sol/SessionSig.json b/contracts/artifacts/wallet-contracts-v3/SessionSig.sol/SessionSig.json new file mode 100644 index 00000000..117e62a2 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/SessionSig.sol/SessionSig.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"hashCallWithReplayProtection","inputs":[{"name":"call","type":"tuple","internalType":"struct Payload.Call","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]}],"outputs":[{"name":"callHash","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"}],"bytecode":{"object":"0x608080604052346019576103ec908161001f823930815050f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c6391195a2a1461002857600080fd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610334576004359067ffffffffffffffff82116103345760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83360301126103345760243567ffffffffffffffff8111610334576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126103345760248101358015158103610334571561032d576000915b60009360e0820182811067ffffffffffffffff82111761030057604052806004013573ffffffffffffffffffffffffffffffffffffffff811681036102fc578252602082019160248201358352604482013567ffffffffffffffff81116102f857820191366023840112156102f85760048301359267ffffffffffffffff84116102cb57604051936101a160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160186610339565b808552602085019136602482840101116102c7578160209a9260248c930185378601015283604084015260648201358060608501526101e2608484016103a9565b9182608086015273ffffffffffffffffffffffffffffffffffffffff60c461020c60a487016103a9565b958660a08901520135958660c08201525116965195519020604051958a8701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a0850152151560c0840152151560e0830152610100820152610100815261028861012082610339565b51902060846040519285840194855260648101356040850152013560608301526080820152608081526102bc60a082610339565b519020604051908152f35b8980fd5b6024887f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b8680fd5b8580fd5b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b46916100e7565b600080fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761037a57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b359081151582036103345756fea2646970667358221220ee8a8ac3d83c60997601a7c250991c3238bd101f467ddece355023b631f6235064736f6c634300081c0033","sourceMap":"675:14539:35:-:0;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608080604052600436101561001357600080fd5b60003560e01c6391195a2a1461002857600080fd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610334576004359067ffffffffffffffff82116103345760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83360301126103345760243567ffffffffffffffff8111610334576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126103345760248101358015158103610334571561032d576000915b60009360e0820182811067ffffffffffffffff82111761030057604052806004013573ffffffffffffffffffffffffffffffffffffffff811681036102fc578252602082019160248201358352604482013567ffffffffffffffff81116102f857820191366023840112156102f85760048301359267ffffffffffffffff84116102cb57604051936101a160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160186610339565b808552602085019136602482840101116102c7578160209a9260248c930185378601015283604084015260648201358060608501526101e2608484016103a9565b9182608086015273ffffffffffffffffffffffffffffffffffffffff60c461020c60a487016103a9565b958660a08901520135958660c08201525116965195519020604051958a8701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a0850152151560c0840152151560e0830152610100820152610100815261028861012082610339565b51902060846040519285840194855260648101356040850152013560608301526080820152608081526102bc60a082610339565b519020604051908152f35b8980fd5b6024887f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b8680fd5b8580fd5b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b46916100e7565b600080fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761037a57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b359081151582036103345756fea2646970667358221220ee8a8ac3d83c60997601a7c250991c3238bd101f467ddece355023b631f6235064736f6c634300081c0033","sourceMap":"675:14539:35:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15108:17;;675:14539;;;;;;;;15108:37;;;675:14539;15108:37;;675:14539;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15147:13;675:14539;;;;15147:13;675:14539;;;;15162:13;675:14539;;;:::i;:::-;;;15162:13;675:14539;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;1478:66:48;675:14539:35;1478:66:48;;675:14539:35;;7717:17:48;;675:14539:35;;7667:138:48;;;;675:14539:35;1478:66:48;675:14539:35;;;1478:66:48;;;15147:13:35;1478:66:48;;675:14539:35;15162:13;1478:66:48;;675:14539:35;;1478:66:48;;675:14539:35;;;;1478:66:48;;;675:14539:35;;;1478:66:48;;;;;;675:14539:35;1478:66:48;7667:138;;;675:14539:35;7667:138:48;;:::i;:::-;675:14539:35;7650:161:48;;15162:13:35;675:14539;;15091:109;;;;675:14539;;;15147:13;;;675:14539;;;;;15162:13;675:14539;15147:13;675:14539;;;15162:13;675:14539;;;15162:13;15091:109;;;675:14539;15091:109;;:::i;:::-;675:14539;15074:132;;675:14539;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15108:37;15132:13;15108:37;;;675:14539;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;675:14539:35;;;;;-1:-1:-1;675:14539:35;;;;;;;;;;;:::o","linkReferences":{}},"methodIdentifiers":{"hashCallWithReplayProtection(Payload.Call,Payload.Decoded)":"91195a2a"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call\",\"name\":\"call\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"payload\",\"type\":\"tuple\"}],\"name\":\"hashCallWithReplayProtection\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"callHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Michael Standen, Agustin Aguilar\",\"kind\":\"dev\",\"methods\":{\"hashCallWithReplayProtection(Payload.Call,Payload.Decoded)\":{\"details\":\"The replay protection is based on the chainId, space, and nonce in the payload.\",\"params\":{\"call\":\"The call to hash\",\"payload\":\"The payload to hash\"},\"returns\":{\"callHash\":\"The hash of the call with replay protection\"}}},\"title\":\"SessionSig\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"hashCallWithReplayProtection(Payload.Call,Payload.Decoded)\":{\"notice\":\"Hashes a call with replay protection.\"}},\"notice\":\"Library for session signatures\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/extensions/sessions/SessionSig.sol\":\"SessionSig\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/extensions/sessions/SessionErrors.sol\":{\"keccak256\":\"0xa7642b4ef1d2ac8e41bd6dca88c5a644cac21b3ebe79deb5013e21fb4aaab405\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ef80768f6c509a54ea5d3fb92cbf46363f945f071cc3664710770c09b3d2a978\",\"dweb:/ipfs/QmbRpicAiPSYQbKpjoDbanap9q5hYsqEMS1u7w7sqKEYTY\"]},\"src/extensions/sessions/SessionSig.sol\":{\"keccak256\":\"0x7c44eabacfd2b4758fa8f54574f7479d8ef0209551ad824b3fc497c215a9609a\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://845b301783b1f069fa0b01d47ca2de1a79b0d4c3e14881973421a718c4d823df\",\"dweb:/ipfs/QmcDgiqjENAL3L7MjQ7HgitmsJ2PVNUm3ibnL2DZRU1VAL\"]},\"src/extensions/sessions/explicit/IExplicitSessionManager.sol\":{\"keccak256\":\"0xae940e96cf0677c9b0df0daee07db0293c55a21cec0b893d82eefd122815602b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://62ee98f92121ad54f78d375ec3003aab73719adec852b0d12518fe99fc6f66c6\",\"dweb:/ipfs/QmPuAX7tdga5Su1xua6LS6jR9DsV7GyCwyZLeRC8upPTKY\"]},\"src/extensions/sessions/explicit/Permission.sol\":{\"keccak256\":\"0x0bc35a04da3830c64ec13c32b57f88be6b980228f6b387e800cf70919cdcfb16\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://fcb304612f894699f8e1e40cf134abebe8f7135795bea479b04e967551c59948\",\"dweb:/ipfs/Qme4mD8dh3xU9wbscQwvL4cQcZ2Wv8Fobo2fmU29B3DirV\"]},\"src/extensions/sessions/implicit/Attestation.sol\":{\"keccak256\":\"0xcaa44022b5eb4bc7ab487b3b1a0125da67e2e891cee983ef6cdb6814f045efc8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://94829782b6dcb482d7c002511c590d1ad8de3b21e5e72575df18be73565b3638\",\"dweb:/ipfs/QmZ4u9FxALzMzKR7auW8FmFkhGVw8kRDeDRJ1PKwKaWNWF\"]},\"src/extensions/sessions/implicit/ISignalsImplicitMode.sol\":{\"keccak256\":\"0x6cb48f50c49bcb3c7071306fe9fac6c102bc9eabf73d9909e19ab3b9a835d0a8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://15297e969f64fc1152654d1cefbe276c15a0ecfc11f86b4c276bb0b454fe700a\",\"dweb:/ipfs/QmeehNFYBPPtJePwUcqiYCgiuFotur4VVVCV1KvegdCCZ4\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"src/utils/LibOptim.sol\":{\"keccak256\":\"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81\",\"dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"struct Payload.Call","name":"call","type":"tuple","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"struct Payload.Decoded","name":"payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]}],"stateMutability":"view","type":"function","name":"hashCallWithReplayProtection","outputs":[{"internalType":"bytes32","name":"callHash","type":"bytes32"}]}],"devdoc":{"kind":"dev","methods":{"hashCallWithReplayProtection(Payload.Call,Payload.Decoded)":{"details":"The replay protection is based on the chainId, space, and nonce in the payload.","params":{"call":"The call to hash","payload":"The payload to hash"},"returns":{"callHash":"The hash of the call with replay protection"}}},"version":1},"userdoc":{"kind":"user","methods":{"hashCallWithReplayProtection(Payload.Call,Payload.Decoded)":{"notice":"Hashes a call with replay protection."}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/extensions/sessions/SessionSig.sol":"SessionSig"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/extensions/sessions/SessionErrors.sol":{"keccak256":"0xa7642b4ef1d2ac8e41bd6dca88c5a644cac21b3ebe79deb5013e21fb4aaab405","urls":["bzz-raw://ef80768f6c509a54ea5d3fb92cbf46363f945f071cc3664710770c09b3d2a978","dweb:/ipfs/QmbRpicAiPSYQbKpjoDbanap9q5hYsqEMS1u7w7sqKEYTY"],"license":"Apache-2.0"},"src/extensions/sessions/SessionSig.sol":{"keccak256":"0x7c44eabacfd2b4758fa8f54574f7479d8ef0209551ad824b3fc497c215a9609a","urls":["bzz-raw://845b301783b1f069fa0b01d47ca2de1a79b0d4c3e14881973421a718c4d823df","dweb:/ipfs/QmcDgiqjENAL3L7MjQ7HgitmsJ2PVNUm3ibnL2DZRU1VAL"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/IExplicitSessionManager.sol":{"keccak256":"0xae940e96cf0677c9b0df0daee07db0293c55a21cec0b893d82eefd122815602b","urls":["bzz-raw://62ee98f92121ad54f78d375ec3003aab73719adec852b0d12518fe99fc6f66c6","dweb:/ipfs/QmPuAX7tdga5Su1xua6LS6jR9DsV7GyCwyZLeRC8upPTKY"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/Permission.sol":{"keccak256":"0x0bc35a04da3830c64ec13c32b57f88be6b980228f6b387e800cf70919cdcfb16","urls":["bzz-raw://fcb304612f894699f8e1e40cf134abebe8f7135795bea479b04e967551c59948","dweb:/ipfs/Qme4mD8dh3xU9wbscQwvL4cQcZ2Wv8Fobo2fmU29B3DirV"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/Attestation.sol":{"keccak256":"0xcaa44022b5eb4bc7ab487b3b1a0125da67e2e891cee983ef6cdb6814f045efc8","urls":["bzz-raw://94829782b6dcb482d7c002511c590d1ad8de3b21e5e72575df18be73565b3638","dweb:/ipfs/QmZ4u9FxALzMzKR7auW8FmFkhGVw8kRDeDRJ1PKwKaWNWF"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/ISignalsImplicitMode.sol":{"keccak256":"0x6cb48f50c49bcb3c7071306fe9fac6c102bc9eabf73d9909e19ab3b9a835d0a8","urls":["bzz-raw://15297e969f64fc1152654d1cefbe276c15a0ecfc11f86b4c276bb0b454fe700a","dweb:/ipfs/QmeehNFYBPPtJePwUcqiYCgiuFotur4VVVCV1KvegdCCZ4"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"src/utils/LibOptim.sol":{"keccak256":"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde","urls":["bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81","dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x"],"license":"Apache-2.0"}},"version":1},"id":35} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/SessionSig.t.sol/SessionSigHarness.json b/contracts/artifacts/wallet-contracts-v3/SessionSig.t.sol/SessionSigHarness.json new file mode 100644 index 00000000..b777507e --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/SessionSig.t.sol/SessionSigHarness.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"recover","inputs":[{"name":"payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"tuple","internalType":"struct SessionSig.DecodedSignature","components":[{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"identitySigner","type":"address","internalType":"address"},{"name":"implicitBlacklist","type":"address[]","internalType":"address[]"},{"name":"sessionPermissions","type":"tuple[]","internalType":"struct SessionPermissions[]","components":[{"name":"signer","type":"address","internalType":"address"},{"name":"chainId","type":"uint256","internalType":"uint256"},{"name":"valueLimit","type":"uint256","internalType":"uint256"},{"name":"deadline","type":"uint64","internalType":"uint64"},{"name":"permissions","type":"tuple[]","internalType":"struct Permission[]","components":[{"name":"target","type":"address","internalType":"address"},{"name":"rules","type":"tuple[]","internalType":"struct ParameterRule[]","components":[{"name":"cumulative","type":"bool","internalType":"bool"},{"name":"operation","type":"uint8","internalType":"enum ParameterOperation"},{"name":"value","type":"bytes32","internalType":"bytes32"},{"name":"offset","type":"uint256","internalType":"uint256"},{"name":"mask","type":"bytes32","internalType":"bytes32"}]}]}]},{"name":"callSignatures","type":"tuple[]","internalType":"struct SessionSig.CallSignature[]","components":[{"name":"isImplicit","type":"bool","internalType":"bool"},{"name":"sessionSigner","type":"address","internalType":"address"},{"name":"sessionPermission","type":"uint8","internalType":"uint8"},{"name":"attestation","type":"tuple","internalType":"struct Attestation","components":[{"name":"approvedSigner","type":"address","internalType":"address"},{"name":"identityType","type":"bytes4","internalType":"bytes4"},{"name":"issuerHash","type":"bytes32","internalType":"bytes32"},{"name":"audienceHash","type":"bytes32","internalType":"bytes32"},{"name":"applicationData","type":"bytes","internalType":"bytes"},{"name":"authData","type":"tuple","internalType":"struct AuthData","components":[{"name":"redirectUrl","type":"string","internalType":"string"},{"name":"issuedAt","type":"uint64","internalType":"uint64"}]}]}]}]}],"stateMutability":"view"},{"type":"function","name":"recoverConfiguration","inputs":[{"name":"encoded","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"tuple","internalType":"struct SessionSig.DecodedSignature","components":[{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"identitySigner","type":"address","internalType":"address"},{"name":"implicitBlacklist","type":"address[]","internalType":"address[]"},{"name":"sessionPermissions","type":"tuple[]","internalType":"struct SessionPermissions[]","components":[{"name":"signer","type":"address","internalType":"address"},{"name":"chainId","type":"uint256","internalType":"uint256"},{"name":"valueLimit","type":"uint256","internalType":"uint256"},{"name":"deadline","type":"uint64","internalType":"uint64"},{"name":"permissions","type":"tuple[]","internalType":"struct Permission[]","components":[{"name":"target","type":"address","internalType":"address"},{"name":"rules","type":"tuple[]","internalType":"struct ParameterRule[]","components":[{"name":"cumulative","type":"bool","internalType":"bool"},{"name":"operation","type":"uint8","internalType":"enum ParameterOperation"},{"name":"value","type":"bytes32","internalType":"bytes32"},{"name":"offset","type":"uint256","internalType":"uint256"},{"name":"mask","type":"bytes32","internalType":"bytes32"}]}]}]},{"name":"callSignatures","type":"tuple[]","internalType":"struct SessionSig.CallSignature[]","components":[{"name":"isImplicit","type":"bool","internalType":"bool"},{"name":"sessionSigner","type":"address","internalType":"address"},{"name":"sessionPermission","type":"uint8","internalType":"uint8"},{"name":"attestation","type":"tuple","internalType":"struct Attestation","components":[{"name":"approvedSigner","type":"address","internalType":"address"},{"name":"identityType","type":"bytes4","internalType":"bytes4"},{"name":"issuerHash","type":"bytes32","internalType":"bytes32"},{"name":"audienceHash","type":"bytes32","internalType":"bytes32"},{"name":"applicationData","type":"bytes","internalType":"bytes"},{"name":"authData","type":"tuple","internalType":"struct AuthData","components":[{"name":"redirectUrl","type":"string","internalType":"string"},{"name":"issuedAt","type":"uint64","internalType":"uint64"}]}]}]}]},{"name":"hasBlacklist","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"error","name":"InvalidAttestation","inputs":[]},{"type":"error","name":"InvalidBlacklist","inputs":[]},{"type":"error","name":"InvalidIdentitySigner","inputs":[]},{"type":"error","name":"InvalidNodeType","inputs":[{"name":"flag","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidSessionSigner","inputs":[{"name":"invalidSigner","type":"address","internalType":"address"}]}],"bytecode":{"object":"0x60808060405234601557611d1b908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c80635c9be12c146100375763829b88491461003257600080fd5b61056b565b346100bb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bb5760043567ffffffffffffffff81116100bb5761009b61008c6100af9236906004016100c0565b906100956106e8565b506108e4565b6040519283926040845260408401906104bb565b90151560208301520390f35b600080fd5b9181601f840112156100bb5782359167ffffffffffffffff83116100bb57602083818601950101116100bb57565b9080602083519182815201916020808360051b8301019401926000915b83831061011a57505050505090565b90919293947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828203018352855190608060a082019273ffffffffffffffffffffffffffffffffffffffff8151168352602081015160208401526040810151604084015267ffffffffffffffff606082015116606084015201519160a06080830152825180915260c0820190602060c08260051b85010194019260005b8281106101d85750505050506020806001929701930193019193929061010b565b90919293947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4083820301855285516020606081604085019373ffffffffffffffffffffffffffffffffffffffff81511686520151936040838201528451809452019201906000905b80821061025f57505050602080600192970195019101929190926101b7565b909192835180511515825260208101519060048210156102ae5782608060a092602094856001970152604081015160408401526060810151606084015201516080820152019401920190610240565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60005b8381106102f05750506000910152565b81810151838201526020016102e0565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361033c815180928187528780880191016102dd565b0116010190565b9080602083519182815201916020808360051b8301019401926000915b83831061036f57505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085600195030186526060895180511515835273ffffffffffffffffffffffffffffffffffffffff84820151168484015260ff604082015116604084015201516080606083015273ffffffffffffffffffffffffffffffffffffffff81511660808301527fffffffff00000000000000000000000000000000000000000000000000000000838201511660a0830152604081015160c0830152606081015160e083015260a0610458608083015160c0610100860152610140850190610300565b910151916101207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80828403019101528267ffffffffffffffff816104a58551604086526040860190610300565b9401511691015297019301930191939290610360565b91909160a08301928151815273ffffffffffffffffffffffffffffffffffffffff602083015116602082015260408201519360a060408301528451809152602060c0830195019060005b81811061053f57505050608061052b61053c9495606085015184820360608601526100ee565b920151906080818403910152610343565b90565b825173ffffffffffffffffffffffffffffffffffffffff16875260209687019690920191600101610505565b346100bb5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bb5760043567ffffffffffffffff81116100bb576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126100bb5760243567ffffffffffffffff81116100bb57610626916106006106129236906004016100c0565b916106096106e8565b50600401611016565b6040519182916020835260208301906104bb565b0390f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810190811067ffffffffffffffff82111761067557604052565b61062a565b6040810190811067ffffffffffffffff82111761067557604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761067557604052565b604051906106e660e083610696565b565b604051906106f582610659565b6060608083600081526000602082015282604082015282808201520152565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b67ffffffffffffffff81116106755760051b60200190565b6040519061076882610659565b60606080836000815260006020820152600060408201526000838201520152565b9061079382610743565b6107a06040519182610696565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06107ce8294610743565b019060005b8281106107df57505050565b6020906107ea61075b565b828285010152016107d3565b909392938483116100bb5784116100bb578101920390565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461083b5760010190565b610714565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518210156108835760209160051b010190565b610840565b9190820180921161083b57565b9061089f82610743565b6108ac6040519182610696565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06108da8294610743565b0190602036910137565b916108ed6106e8565b60009384908190610900605e8704610789565b91606085019283525b8681106109195750505152929150565b8181013560fc81901c97916001019060f81c818915610d4a575060018914610d185760028914610b4e5760038914610a59575060048814610984577f0ad9979000000000000000000000000000000000000000000000000000000000600052600488905260245b6000fd5b90919293949596506020860173ffffffffffffffffffffffffffffffffffffffff6109c3825173ffffffffffffffffffffffffffffffffffffffff1690565b16610a2f578382013560601c81526014909101906109ff906109fa905b5173ffffffffffffffffffffffffffffffffffffffff1690565b6114f3565b86518015610a295790610a1a91600052602052604060002090565b86525b95949392919095610909565b50610a1a565b7f9e5c658b0000000000000000000000000000000000000000000000000000000060005260046000fd5b98909192939495969750610b2457600f60019816600f8114610b13575b8190610a8181610895565b604089019081528a60005b838110610ad45750505050610aa682610aac9285876107f6565b9061147f565b86518015610ace5790610ac791600052602052604060002090565b8652610a1d565b50610ac7565b610b0b958881013560601c906014019690610af083865161086f565b9073ffffffffffffffffffffffffffffffffffffffff169052565b018b90610a8c565b50600281019083013560f01c610a76565b7feb6252040000000000000000000000000000000000000000000000000000000060005260046000fd5b610bb1969850610ba9610bc092600f610bba939c96979a95989c169087929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b979088610888565b809787876107f6565b906108e4565b93909593610d01575b6020860173ffffffffffffffffffffffffffffffffffffffff610c00825173ffffffffffffffffffffffffffffffffffffffff1690565b16610c7e575b5060005b60608701518051821015610c4d5790610c46610c288260019461086f565b519b8a51610c358261080e565b9d610c40838361086f565b5261086f565b5001610c0a565b505092909695939197948651801515600014610c7757610ac7915190600052602052604060002090565b5051610ac7565b60208901610cbc610ca3825173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b610a2f57610ce1610cfb925173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff169052565b38610c06565b91610b245760019160408601516040890152610bc9565b508551969750949593949293919290916020820191840135908015610ace5790610ac791600052602052604060002090565b92939495969798505050610d5c61075b565b8184018035606090811c8352601482013560208401526034820135604084015260549091013560c01c9082015294610d98605c8301848661136e565b8093916080890152610dab9185876107f6565b610db491611424565b8751610ded9291908015610df35790610dd591600052602052604060002090565b88528551610de28261080e565b97610c40838361086f565b50610a1d565b50610dd5565b60405190610e068261067a565b6000602083606081520152565b6040519060c0820182811067ffffffffffffffff8211176106755760405281600081526000602082015260006040820152600060608201526060608082015260a0610e5c610df9565b910152565b90610e6b82610743565b610e786040519182610696565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610ea68294610743565b019060005b828110610eb757505050565b602090610ec2610e13565b82828501015201610eab565b6040513d6000823e3d90fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156100bb570180359067ffffffffffffffff82116100bb57602001918160051b360383136100bb57565b604051906080820182811067ffffffffffffffff82111761067557604052816000815260006020820152600060408201526060610e5c610e13565b90610f7382610743565b610f806040519182610696565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610fae8294610743565b019060005b828110610fbf57505050565b602090610fca610f2e565b82828501015201610fb3565b91908110156108835760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21813603018212156100bb570190565b909162ffffff926110256106e8565b50600091813560e81c600395169061105661104e610bba611046858a610888565b8985886107f6565b939097610888565b602087019473ffffffffffffffffffffffffffffffffffffffff61108e875173ffffffffffffffffffffffffffffffffffffffff1690565b161561132c5750600181019392919083013560f81c906110ad82610e61565b9560005b83811061128a5750505015159081611281575b50610b245760408401936110d88582610eda565b9490506110e485610f69565b95608088019687526000945b86861061110257505050505050505090565b61111e61110d610f2e565b918681013560f81c91600190910190565b6080821615158352969082511561126157607f16845181101561123757600061115d6111a5996111506020948961086f565b5160608701525b89611679565b9b90929161117e8b611179896111738d84610eda565b90610fd6565b61185c565b92604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa15611232576111e0610ca36000516109e06020860191829073ffffffffffffffffffffffffffffffffffffffff169052565b15611201576111f9816001938b5190610c40838361086f565b5001946110f0565b7fc1e84ed6000000000000000000000000000000000000000000000000000000006000526109806024906000600452565b610ece565b7fbd8ba84d0000000000000000000000000000000000000000000000000000000060005260046000fd5b600061115d6111a59961127c602094604088019060ff169052565b611157565b905015386110c4565b6112b290602060006112a96112bf9a6112a1610e13565b50878b6115bc565b8a959195611679565b9c90929161117e886116bc565b838052039060015afa156112325760005173ffffffffffffffffffffffffffffffffffffffff611306610ca3865173ffffffffffffffffffffffffffffffffffffffff1690565b911603610a2f5760019161131a828b61086f565b52611325818a61086f565b50016110b1565b807f9e5c658b0000000000000000000000000000000000000000000000000000000060049252fd5b604051906113618261067a565b6060602083600081520152565b60018301939281013560f81c61138381610743565b926113916040519485610696565b8184527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06113be83610743565b0160005b8181106114055750506000925b8284106113de57505050509190565b909192956113ef60019184846119ed565b97906113fb828861086f565b52019291906113cf565b60209061141495939495611354565b82828901015201939291936113c2565b9061147960016020926040519381859282840197600089526021850137820101828101600081525003017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610696565b51902090565b90611479600160209260405193818592828401977f030000000000000000000000000000000000000000000000000000000000000089526021850137820101828101600081525003017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610696565b6040517fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208201927f0400000000000000000000000000000000000000000000000000000000000000845260601b16602182015260158152611479603582610696565b92919267ffffffffffffffff8211610675576040519161159f601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200184610696565b8294818452818301116100bb578281602093846000960137010152565b61166e9193929361166862ffffff61163c60186115d7610e13565b987fffffffff000000000000000000000000000000000000000000000000000000006014888301803560601c8d5201351660208b01520160208682013591019060408a015260208682013591019060608a01528560039092919283013560e81c920190565b91169061165e61165761164f8484610888565b8387896107f6565b3691611557565b6080890152610888565b91611b3b565b929060a08201529190565b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff811161083b5791565b73ffffffffffffffffffffffffffffffffffffffff815116906114797fffffffff000000000000000000000000000000000000000000000000000000006020830151166117df7fffffff00000000000000000000000000000000000000000000000000000000006040850151946060810151906080810151916117ce6008602360a062ffffff87511695015180517fffffffffffffffff00000000000000000000000000000000000000000000000060208251930151916040519a8b9460e81b16602085015261179581518092602088880191016102dd565b83019160c01b168382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8810187520185610696565b604051978896602088019a8b611b86565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610696565b801515036100bb57565b359073ffffffffffffffffffffffffffffffffffffffff821682036100bb57565b9080601f830112156100bb5781602061053c93359101611557565b35906106e68261180b565b90602081013561186b8161180b565b1561193b576000915b608060608301359201359160e0823603126100bb576118916106d7565b9161189b81611815565b83526020810135602084015260408101359067ffffffffffffffff82116100bb576114799360c0611913926118d66117df9536908301611836565b6040840152606081013560608401526118f160808201611851565b608084015261190260a08201611851565b60a0840152013560c0820152611c3e565b6040519485936020850197889290916080949284526020840152604083015260608201520190565b4691611874565b9061194c82610743565b6119596040519182610696565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06119878294610743565b019060005b82811061199857505050565b6020906040516119a781610659565b600081526000838201526000604082015260006060820152600060808201528282850101520161198c565b60ff1660048110156102ae5790565b60048210156102ae5752565b60ff93929150611a42611a32611a15611a04611354565b948481013560601c91601490910190565b73ffffffffffffffffffffffffffffffffffffffff909116855290565b8281013560f81c91600190910190565b9416611a4d81611942565b602084019081526000925b828410611a6757505050509190565b90919295611b20611b02611ae4611aba611ad78b6020611ad0611ac8611ac38c611a9f60019c8e60019092919283013560f81c920190565b989091611ab2888f85161515925161086f565b519015159052565b60011c607f1690565b6119d2565b928b5161086f565b51016119e1565b8581013591602090910190565b906040611af28c895161086f565b5101528481013591602090910190565b906060611b108b885161086f565b5101528381013591602090910190565b97906080611b2f83875161086f565b51015201929190611a58565b9291611b45610df9565b9060038101908581013560e81c0194600386019182811161083b57611657600393611b7392600b97856107f6565b83528501013560c01c6020820152920190565b9390927fffffffff00000000000000000000000000000000000000000000000000000000605b989796937fffffffffffffffffffffffffffffffffffffffff0000000000000000000000007fffffff00000000000000000000000000000000000000000000000000000000009660601b1687521660148601526018850152603884015260e81b166058820152611c2582518093602087850191016102dd565b01611c3982518093602086850191016102dd565b010190565b73ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e083015261010082015261010081526114796101208261069656fea2646970667358221220474eb22f2d975d649058726f10301e48ffeb84fde2eea9a19771fee2273982c764736f6c634300081c0033","sourceMap":"803:450:81:-:0;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436101561001257600080fd5b60003560e01c80635c9be12c146100375763829b88491461003257600080fd5b61056b565b346100bb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bb5760043567ffffffffffffffff81116100bb5761009b61008c6100af9236906004016100c0565b906100956106e8565b506108e4565b6040519283926040845260408401906104bb565b90151560208301520390f35b600080fd5b9181601f840112156100bb5782359167ffffffffffffffff83116100bb57602083818601950101116100bb57565b9080602083519182815201916020808360051b8301019401926000915b83831061011a57505050505090565b90919293947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828203018352855190608060a082019273ffffffffffffffffffffffffffffffffffffffff8151168352602081015160208401526040810151604084015267ffffffffffffffff606082015116606084015201519160a06080830152825180915260c0820190602060c08260051b85010194019260005b8281106101d85750505050506020806001929701930193019193929061010b565b90919293947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4083820301855285516020606081604085019373ffffffffffffffffffffffffffffffffffffffff81511686520151936040838201528451809452019201906000905b80821061025f57505050602080600192970195019101929190926101b7565b909192835180511515825260208101519060048210156102ae5782608060a092602094856001970152604081015160408401526060810151606084015201516080820152019401920190610240565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60005b8381106102f05750506000910152565b81810151838201526020016102e0565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361033c815180928187528780880191016102dd565b0116010190565b9080602083519182815201916020808360051b8301019401926000915b83831061036f57505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085600195030186526060895180511515835273ffffffffffffffffffffffffffffffffffffffff84820151168484015260ff604082015116604084015201516080606083015273ffffffffffffffffffffffffffffffffffffffff81511660808301527fffffffff00000000000000000000000000000000000000000000000000000000838201511660a0830152604081015160c0830152606081015160e083015260a0610458608083015160c0610100860152610140850190610300565b910151916101207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80828403019101528267ffffffffffffffff816104a58551604086526040860190610300565b9401511691015297019301930191939290610360565b91909160a08301928151815273ffffffffffffffffffffffffffffffffffffffff602083015116602082015260408201519360a060408301528451809152602060c0830195019060005b81811061053f57505050608061052b61053c9495606085015184820360608601526100ee565b920151906080818403910152610343565b90565b825173ffffffffffffffffffffffffffffffffffffffff16875260209687019690920191600101610505565b346100bb5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bb5760043567ffffffffffffffff81116100bb576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126100bb5760243567ffffffffffffffff81116100bb57610626916106006106129236906004016100c0565b916106096106e8565b50600401611016565b6040519182916020835260208301906104bb565b0390f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810190811067ffffffffffffffff82111761067557604052565b61062a565b6040810190811067ffffffffffffffff82111761067557604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761067557604052565b604051906106e660e083610696565b565b604051906106f582610659565b6060608083600081526000602082015282604082015282808201520152565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b67ffffffffffffffff81116106755760051b60200190565b6040519061076882610659565b60606080836000815260006020820152600060408201526000838201520152565b9061079382610743565b6107a06040519182610696565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06107ce8294610743565b019060005b8281106107df57505050565b6020906107ea61075b565b828285010152016107d3565b909392938483116100bb5784116100bb578101920390565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461083b5760010190565b610714565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518210156108835760209160051b010190565b610840565b9190820180921161083b57565b9061089f82610743565b6108ac6040519182610696565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06108da8294610743565b0190602036910137565b916108ed6106e8565b60009384908190610900605e8704610789565b91606085019283525b8681106109195750505152929150565b8181013560fc81901c97916001019060f81c818915610d4a575060018914610d185760028914610b4e5760038914610a59575060048814610984577f0ad9979000000000000000000000000000000000000000000000000000000000600052600488905260245b6000fd5b90919293949596506020860173ffffffffffffffffffffffffffffffffffffffff6109c3825173ffffffffffffffffffffffffffffffffffffffff1690565b16610a2f578382013560601c81526014909101906109ff906109fa905b5173ffffffffffffffffffffffffffffffffffffffff1690565b6114f3565b86518015610a295790610a1a91600052602052604060002090565b86525b95949392919095610909565b50610a1a565b7f9e5c658b0000000000000000000000000000000000000000000000000000000060005260046000fd5b98909192939495969750610b2457600f60019816600f8114610b13575b8190610a8181610895565b604089019081528a60005b838110610ad45750505050610aa682610aac9285876107f6565b9061147f565b86518015610ace5790610ac791600052602052604060002090565b8652610a1d565b50610ac7565b610b0b958881013560601c906014019690610af083865161086f565b9073ffffffffffffffffffffffffffffffffffffffff169052565b018b90610a8c565b50600281019083013560f01c610a76565b7feb6252040000000000000000000000000000000000000000000000000000000060005260046000fd5b610bb1969850610ba9610bc092600f610bba939c96979a95989c169087929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b979088610888565b809787876107f6565b906108e4565b93909593610d01575b6020860173ffffffffffffffffffffffffffffffffffffffff610c00825173ffffffffffffffffffffffffffffffffffffffff1690565b16610c7e575b5060005b60608701518051821015610c4d5790610c46610c288260019461086f565b519b8a51610c358261080e565b9d610c40838361086f565b5261086f565b5001610c0a565b505092909695939197948651801515600014610c7757610ac7915190600052602052604060002090565b5051610ac7565b60208901610cbc610ca3825173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b610a2f57610ce1610cfb925173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff169052565b38610c06565b91610b245760019160408601516040890152610bc9565b508551969750949593949293919290916020820191840135908015610ace5790610ac791600052602052604060002090565b92939495969798505050610d5c61075b565b8184018035606090811c8352601482013560208401526034820135604084015260549091013560c01c9082015294610d98605c8301848661136e565b8093916080890152610dab9185876107f6565b610db491611424565b8751610ded9291908015610df35790610dd591600052602052604060002090565b88528551610de28261080e565b97610c40838361086f565b50610a1d565b50610dd5565b60405190610e068261067a565b6000602083606081520152565b6040519060c0820182811067ffffffffffffffff8211176106755760405281600081526000602082015260006040820152600060608201526060608082015260a0610e5c610df9565b910152565b90610e6b82610743565b610e786040519182610696565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610ea68294610743565b019060005b828110610eb757505050565b602090610ec2610e13565b82828501015201610eab565b6040513d6000823e3d90fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156100bb570180359067ffffffffffffffff82116100bb57602001918160051b360383136100bb57565b604051906080820182811067ffffffffffffffff82111761067557604052816000815260006020820152600060408201526060610e5c610e13565b90610f7382610743565b610f806040519182610696565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610fae8294610743565b019060005b828110610fbf57505050565b602090610fca610f2e565b82828501015201610fb3565b91908110156108835760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21813603018212156100bb570190565b909162ffffff926110256106e8565b50600091813560e81c600395169061105661104e610bba611046858a610888565b8985886107f6565b939097610888565b602087019473ffffffffffffffffffffffffffffffffffffffff61108e875173ffffffffffffffffffffffffffffffffffffffff1690565b161561132c5750600181019392919083013560f81c906110ad82610e61565b9560005b83811061128a5750505015159081611281575b50610b245760408401936110d88582610eda565b9490506110e485610f69565b95608088019687526000945b86861061110257505050505050505090565b61111e61110d610f2e565b918681013560f81c91600190910190565b6080821615158352969082511561126157607f16845181101561123757600061115d6111a5996111506020948961086f565b5160608701525b89611679565b9b90929161117e8b611179896111738d84610eda565b90610fd6565b61185c565b92604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa15611232576111e0610ca36000516109e06020860191829073ffffffffffffffffffffffffffffffffffffffff169052565b15611201576111f9816001938b5190610c40838361086f565b5001946110f0565b7fc1e84ed6000000000000000000000000000000000000000000000000000000006000526109806024906000600452565b610ece565b7fbd8ba84d0000000000000000000000000000000000000000000000000000000060005260046000fd5b600061115d6111a59961127c602094604088019060ff169052565b611157565b905015386110c4565b6112b290602060006112a96112bf9a6112a1610e13565b50878b6115bc565b8a959195611679565b9c90929161117e886116bc565b838052039060015afa156112325760005173ffffffffffffffffffffffffffffffffffffffff611306610ca3865173ffffffffffffffffffffffffffffffffffffffff1690565b911603610a2f5760019161131a828b61086f565b52611325818a61086f565b50016110b1565b807f9e5c658b0000000000000000000000000000000000000000000000000000000060049252fd5b604051906113618261067a565b6060602083600081520152565b60018301939281013560f81c61138381610743565b926113916040519485610696565b8184527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06113be83610743565b0160005b8181106114055750506000925b8284106113de57505050509190565b909192956113ef60019184846119ed565b97906113fb828861086f565b52019291906113cf565b60209061141495939495611354565b82828901015201939291936113c2565b9061147960016020926040519381859282840197600089526021850137820101828101600081525003017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610696565b51902090565b90611479600160209260405193818592828401977f030000000000000000000000000000000000000000000000000000000000000089526021850137820101828101600081525003017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610696565b6040517fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208201927f0400000000000000000000000000000000000000000000000000000000000000845260601b16602182015260158152611479603582610696565b92919267ffffffffffffffff8211610675576040519161159f601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200184610696565b8294818452818301116100bb578281602093846000960137010152565b61166e9193929361166862ffffff61163c60186115d7610e13565b987fffffffff000000000000000000000000000000000000000000000000000000006014888301803560601c8d5201351660208b01520160208682013591019060408a015260208682013591019060608a01528560039092919283013560e81c920190565b91169061165e61165761164f8484610888565b8387896107f6565b3691611557565b6080890152610888565b91611b3b565b929060a08201529190565b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff811161083b5791565b73ffffffffffffffffffffffffffffffffffffffff815116906114797fffffffff000000000000000000000000000000000000000000000000000000006020830151166117df7fffffff00000000000000000000000000000000000000000000000000000000006040850151946060810151906080810151916117ce6008602360a062ffffff87511695015180517fffffffffffffffff00000000000000000000000000000000000000000000000060208251930151916040519a8b9460e81b16602085015261179581518092602088880191016102dd565b83019160c01b168382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8810187520185610696565b604051978896602088019a8b611b86565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610696565b801515036100bb57565b359073ffffffffffffffffffffffffffffffffffffffff821682036100bb57565b9080601f830112156100bb5781602061053c93359101611557565b35906106e68261180b565b90602081013561186b8161180b565b1561193b576000915b608060608301359201359160e0823603126100bb576118916106d7565b9161189b81611815565b83526020810135602084015260408101359067ffffffffffffffff82116100bb576114799360c0611913926118d66117df9536908301611836565b6040840152606081013560608401526118f160808201611851565b608084015261190260a08201611851565b60a0840152013560c0820152611c3e565b6040519485936020850197889290916080949284526020840152604083015260608201520190565b4691611874565b9061194c82610743565b6119596040519182610696565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06119878294610743565b019060005b82811061199857505050565b6020906040516119a781610659565b600081526000838201526000604082015260006060820152600060808201528282850101520161198c565b60ff1660048110156102ae5790565b60048210156102ae5752565b60ff93929150611a42611a32611a15611a04611354565b948481013560601c91601490910190565b73ffffffffffffffffffffffffffffffffffffffff909116855290565b8281013560f81c91600190910190565b9416611a4d81611942565b602084019081526000925b828410611a6757505050509190565b90919295611b20611b02611ae4611aba611ad78b6020611ad0611ac8611ac38c611a9f60019c8e60019092919283013560f81c920190565b989091611ab2888f85161515925161086f565b519015159052565b60011c607f1690565b6119d2565b928b5161086f565b51016119e1565b8581013591602090910190565b906040611af28c895161086f565b5101528481013591602090910190565b906060611b108b885161086f565b5101528381013591602090910190565b97906080611b2f83875161086f565b51015201929190611a58565b9291611b45610df9565b9060038101908581013560e81c0194600386019182811161083b57611657600393611b7392600b97856107f6565b83528501013560c01c6020820152920190565b9390927fffffffff00000000000000000000000000000000000000000000000000000000605b989796937fffffffffffffffffffffffffffffffffffffffff0000000000000000000000007fffffff00000000000000000000000000000000000000000000000000000000009660601b1687521660148601526018850152603884015260e81b166058820152611c2582518093602087850191016102dd565b01611c3982518093602086850191016102dd565b010190565b73ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e083015261010082015261010081526114796101208261069656fea2646970667358221220474eb22f2d975d649058726f10301e48ffeb84fde2eea9a19771fee2273982c764736f6c634300081c0033","sourceMap":"803:450:81:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;1205:40;803:450;;;;;;;;:::i;:::-;;;;:::i;:::-;;1205:40;:::i;:::-;803:450;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;803:450:81;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;803:450:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;803:450:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;803:450:81;;;;;-1:-1:-1;803:450:81;;;;;;;;;-1:-1:-1;;803:450:81;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;803:450:81;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;996:47;803:450;;;;;;:::i;:::-;;;;:::i;:::-;;;;996:47;:::i;:::-;803:450;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;:::o;:::-;;;;;;;:::i;:::-;;;;-1:-1:-1;803:450:81;;-1:-1:-1;803:450:81;;;;;;;;;;;;;;;;:::o;996:2:35:-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;803:450:81;;;;;;:::i;:::-;996:2:35;;;-1:-1:-1;996:2:35;;-1:-1:-1;996:2:35;;;;-1:-1:-1;803:450:81;996:2:35;;;-1:-1:-1;996:2:35;;;;;;:::o;:::-;;;;;:::i;:::-;803:450:81;;;;;;:::i;:::-;996:2:35;;;;;;;;:::i;:::-;;;-1:-1:-1;996:2:35;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;;;;744:1;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;;803:450:81;;744:1:35;;;;;;;;;;;;:::o;:::-;;:::i;832:::-;;;;;;;;;;:::o;880:::-;;996:2;;;:::i;:::-;803:450:81;;;;;;:::i;:::-;996:2:35;;;880:1;;;;;:::i;:::-;;;;;;;;:::o;7660:5655::-;;803:450:81;;:::i;:::-;;;;;;;8019:44:35;996:2;;;8019:44;:::i;:::-;7994:22;;;;:69;;;8083:24;;;;;;-1:-1:-1;;13178:22:35;13208:64;13178:22;13284:26;-1:-1:-1;7660:5655:35:o;8076:4981::-;798:135:68;;;;996:2:35;;;;;798:135:68;;;;;;;8410:24:35;;8406:1077;;9516:17;787:1;9516:17;;9512:288;;832:1;9835:19;;9831:1501;;880:1;11370:22;;11366:1053;;12463:28;8354:1;12463:28;;12459:541;;13015:35;803:450:81;13015:35:35;8354:1;803:450:81;;;934:1:35;13015:35;803:450:81;13015:35:35;12459:541;12507:18;;;;;;;;;;;803:450:81;832:1:35;;;803:450:81;;;;832:1:35;803:450:81;12503:146:35;;3281:184:68;;;;;;744:1:35;;3281:184:68;;;;;12785:46:35;;832:1;;12658:60;832:1;803:450:81;;;;832:1:35;12785:46;:::i;:::-;744:1;;12867:27;;;;12897:54;;;545:85:69;;;;;;;461:173;;12897:54:35;744:1;;8076:4981;;;;;;;;;;12867:105;;;;12503:146;12601:37;803:450:81;12601:37:35;8354:1;803:450:81;12601:37:35;11366:1053;11404:115;;;;;;;;;;;;11674:4;787:1;11662:16;;11674:4;11693:22;;11689:181;;11366:1053;11879:30;11984:29;;;;:::i;:::-;11960:21;;;:53;;;12028:13;803:450:81;12043:18:35;;;;;;12240:29;;;;;;12218:52;12240:29;;;;:::i;:::-;12218:52;;:::i;:::-;744:1;;12296:27;;;;12326:49;;;545:85:69;;;;;;;461:173;;12326:49:35;744:1;;12402:8;;12296:95;;;;12063:3;12080:66;;3281:184:68;;;;;;;;;12081:21:35;;12080:66;12081:21;;;12080:66;:::i;:::-;744:1;803:450:81;;744:1:35;;;12080:66;832:1;12028:13;;;;11689:181;-1:-1:-1;1058:135:68;;;;;;;;;11689:181:35;;11404:115;11476:32;803:450:81;11476:32:35;8354:1;803:450:81;11476:32:35;9831:1501;10100:14;9953:16;;;2213:380:68;10187:46:35;9953:16;9965:4;10208:24;9953:16;;;;;;;;;2213:380:68;;;;;;2363:226;;;;;;;;;;;;;;;;;;;2213:380;;;10100:14:35;;;;:::i;:::-;10208:24;;;;;:::i;:::-;10187:46;;:::i;:::-;10243:17;;;10309:261;;;9831:1501;10628:24;;;803:450:81;832:1:35;;;803:450:81;;;;832:1:35;803:450:81;10624:275:35;;9831:1501;10978:13;803:450:81;11034:3:35;7994:22;10997:28;;;803:450:81;;10993:39:35;;;;;11096:31;11051:76;11096:31;;787:1;11096:31;;:::i;:::-;;11051:22;;;11074:18;;;:::i;:::-;11051:76;;;;;:::i;:::-;;;:::i;:::-;;832:1;10978:13;;10993:39;;;;;;;;;;;744:1;;11197:27;;;:107;:27;;;11227:55;744:1;;11227:55;545:85:69;;;;;;;461:173;;11197:107:35;744:1;;11197:107;;10624:275;10628:24;10684:18;;:32;832:1;;;803:450:81;;;;832:1:35;803:450:81;;;;10684:32:35;10680:152;;832:1;10843:45;832:1;;803:450:81;;;;832:1:35;803:450:81;;744:1:35;;;10843:45;10624:275;;;10309:261;10345:121;;;787:1;10532:27;;;;;;10508:21;;:51;10309:261;;9512:288;-1:-1:-1;744:1:35;;2926:232:68;;-1:-1:-1;2926:232:68;;;;;;;;;;2102:103;;;;;;;;9695:27:35;;;;9725:40;;;545:85:69;;;;;;;461:173;;8406:1077:35;996:2;;;;;;;;;;;;:::i;:::-;3281:184:68;;;;;;;;;744:1:35;;3281:184:68;2102:103;;;;8661:23:35;;744:1;2102:103:68;;;;8765:26:35;;;744:1;2102:103:68;1578:135;;;;;;8869:24:35;;;744:1;3162:307:68;9019:36:35;1578:135:68;;;9019:36:35;3281:184:68;9019:36:35;:::i;:::-;8978:77;;;8979:27;;;8978:77;9150:29;;;;;:::i;:::-;9126:54;;;:::i;:::-;744:1;;9396:60;;744:1;;9220:27;;;;9250:50;;;545:85:69;;;;;;;461:173;;9250:50:35;744:1;;9396:22;;9419:18;;;:::i;:::-;9396:60;;;;;:::i;:::-;;9466:8;;9220:97;;;;803:450:81;;;;;;;:::i;:::-;-1:-1:-1;803:450:81;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;803:450:81;;-1:-1:-1;803:450:81;;;;-1:-1:-1;803:450:81;;;;-1:-1:-1;803:450:81;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;996:2:35;;;:::i;:::-;803:450:81;;;;;;:::i;:::-;996:2:35;;;803:450:81;;;;;:::i;:::-;;;-1:-1:-1;803:450:81;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;803:450:81;;-1:-1:-1;803:450:81;;;;-1:-1:-1;803:450:81;;;;;;;:::i;:::-;;996:2:35;;;:::i;:::-;803:450:81;;;;;;:::i;:::-;996:2:35;;;803:450:81;;;;;:::i;:::-;;;-1:-1:-1;803:450:81;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3222:3755:35:-;;;803:450:81;3222:3755:35;803:450:81;;:::i;:::-;-1:-1:-1;3403:1:35;;1318:135:68;;;;;803:450:81;;3776:18:35;3804:19;3730:66;3751:44;3776:18;;;;:::i;:::-;3751:44;;;;:::i;3730:66::-;3804:19;;;;:::i;:::-;3873:18;;;832:1;803:450:81;832:1:35;;;803:450:81;;;;832:1:35;803:450:81;3873:32:35;3869:101;;-1:-1:-1;798:135:68;;;;803:450:81;683:254:68;798:135;;;;;;;4204:35:35;798:135:68;4204:35:35;:::i;:::-;4328:13;3403:1;4343:20;;;;;;5194;;;;;:45;;;;4323:773;5190:109;;;803:450:81;5375:13:35;;;;;;;:::i;:::-;5424:31;;;;;;:::i;:::-;5403:18;;;;:52;;;3403:1;5464:1486;5484:14;;;;;;6962:10;;;;;;;;3222:3755;:::o;5500:3::-;683:254:68;803:450:81;;:::i;:::-;683:254:68;798:135;;;;;;;;;;;;683:254;;5403:18:35;5723:11;;5722:18;;803:450:81;;5723:11:35;;803:450:81;;;5757:24:35;;5893:4;5886:11;803:450:81;;5979:42:35;;;5975:120;;3403:1;3511:494:68;6717:28:35;6172:33;;3873:18;6172:33;;;:::i;:::-;;6144:25;;;:61;5753:624;3511:494:68;;:::i;:::-;6527:61:35;;;;6620:55;6649:13;:16;:13;;;;;:::i;:::-;:16;;:::i;:::-;6620:55;:::i;:::-;803:450:81;;;6717:28:35;;;;803:450:81;;;;;;;;;;;;;;;;;;;;;;;;;6717:28:35;;;;;;832:1;6717:28;;;;;6761:41;832:1;3403;6717:28;6687:58;3873:18;6687:27;;:58;;744:1;803:450:81;;744:1:35;;;6761:41;;6757:127;;6904:37;:18;832:1;6904:18;;;:37;;;;;:::i;:::-;;832:1;5469:13;;;6757:127;6825:46;3403:1;6825:46;;803:450:81;;;6825:46:35;803:450:81;;6717:28:35;;:::i;5975:120::-;6046:34;3403:1;6046:34;;3403:1;6046:34;5753:624;3403:1;3511:494:68;6717:28:35;6326:31;:38;3873:18;6326:31;803:450:81;6326:31:35;;803:450:81;;;;;;6326:38:35;5753:624;;5194:45;5218:21;;;5194:45;;;4365:3;3511:494:68;803:450:81;3873:18:35;3403:1;4429:52;4874:35;803:450:81;;;:::i;:::-;;4429:52:35;;;:::i;:::-;3511:494:68;;;;;:::i;:::-;4635:61:35;;;;4816:12;;;:::i;4874:35::-;;;;;;832:1;4874:35;;;;;3403:1;4874:35;803:450:81;4925:45:35;832:1;;;803:450:81;;;;4925:45:35;803:450:81;;4925:45:35;4921:122;;832:1;5063:24;;;;;:::i;:::-;;;;;;:::i;:::-;;832:1;4328:13;;3869:101;3924:37;;;;;;803:450:81;;;;;;;:::i;:::-;;;;-1:-1:-1;803:450:81;;;;:::o;13395:444:35:-;798:135:68;;;;13395:444:35;798:135:68;;;;;996:2:35;798:135:68;996:2:35;:::i;:::-;803:450:81;;;;;;;:::i;:::-;996:2:35;;;803:450:81;;;;:::i;:::-;;-1:-1:-1;803:450:81;;;;;;13679:13:35;;-1:-1:-1;13674:126:35;13694:10;;;;;;13805:29;;;;;13395:444;:::o;13706:3::-;13747:46;;;;;798:135:68;13747:46:35;;;;:::i;:::-;13719:74;;;;;;:::i;:::-;;832:1;13679:13;;;;;803:450:81;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;13914:198:35;;14045:61;803:450:81;14045:61:35;13914:198;803:450:81;;14045:61:35;;;;;;;;-1:-1:-1;803:450:81;;;;;;;;;;;;-1:-1:-1;803:450:81;;14045:61:35;;;;;;;;;;:::i;:::-;803:450:81;14035:72:35;;13914:198;:::o;14177:190::-;;14304:57;803:450:81;14304:57:35;14177:190;803:450:81;;14304:57:35;;;;;;;;803:450:81;;;;;;;;;;;;;-1:-1:-1;803:450:81;;14304:57:35;;;;;;;;;;:::i;14430:190::-;803:450:81;;;14553:61:35;;;803:450:81;;;;;;;;;;;14553:61:35;;;;;;;:::i;803:450:81:-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;803:450:81;;;;;;:::o;1522:857:40:-;2297:39;1522:857;;;;2215:22;803:450:81;1201:256:68;2716:202;803:450:81;;:::i;:::-;3281:184:68;2716:202;3281:184;;;;;;;;744:1:35;;2716:202:68;;;1783:24:40;;;803:450:81;2716:202:68;2102:103;;;;;;;1860:22:40;;;;744:1:35;2102:103:68;;;;;;;1936:24:40;3281:184:68;1936:24:40;;744:1:35;1201:256:68;1318:135;1201:256;;;;1318:135;;;;;;;1201:256;;;803:450:81;;2187:21:40;803:450:81;2168:41:40;2187:21;;;;:::i;:::-;2168:41;;;;:::i;:::-;803:450:81;;;:::i;:::-;2138:27:40;;;:71;2215:22;:::i;:::-;2297:39;;:::i;:::-;2261:20;;;;;2260:76;2342:32;1522:857;:::o;3511:494:68:-;3690:173;;;;;;;;;;;;3998:2;3955:14;3931:39;;996:2:35;803:450:81;996:2:35;803:450:81;;;;;;3511:494:68;:::o;1087:138:40:-;803:450:81;832:1:35;;803:450:81;3520:24:40;3462:279;803:450:81;3520:24:40;;;803:450:81;;3462:279:40;803:450:81;3552:22:40;;;744:1:35;3582:24:40;;;;744:1:35;3621:27:40;;;;;803:450:81;4019:108:40;803:450:81;;3714:20:40;803:450:81;;;;3714:20:40;;;4049;;803:450:81;3520:24:40;803:450:81;;4109:17:40;;803:450:81;;3552:22:40;803:450:81;;;;;;;3520:24:40;4019:108;;803:450:81;;;;;;3520:24:40;803:450:81;;;;;;:::i;:::-;;;;;;;;;;;4019:108:40;;;;;;;;;;:::i;:::-;3552:22;803:450:81;3462:279:40;;;3520:24;3462:279;;;;;:::i;:::-;;4019:108;3462:279;;;;;;:::i;803:450:81:-;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;14910:301:35:-;;15108:17;;;803:450:81;;;;:::i;:::-;15108:37:35;;;-1:-1:-1;15108:37:35;;15162:13;15147;;;803:450:81;15162:13:35;;803:450:81;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;15108:17:35;803:450:81;;;15108:17:35;803:450:81;;;;;;;;;;;;;15091:109:35;803:450:81;;15177:22:35;803:450:81;;15091:109:35;803:450:81;;;;;;:::i;:::-;;;;;15147:13:35;803:450:81;;;15147:13:35;803:450:81;;;;15162:13:35;803:450:81;;;:::i;:::-;15162:13:35;803:450:81;;;;;;;;:::i;:::-;;;;;;;;;;;15177:22:35;:::i;:::-;803:450:81;;15091:109:35;;;15108:17;15091:109;;;;803:450:81;;;;;;;;;;;;;;;;;;;;;;;15108:37:35;15132:13;15108:37;;;803:450:81;;996:2:35;;;:::i;:::-;803:450:81;;;;;;:::i;:::-;996:2:35;;;803:450:81;;;;;:::i;:::-;;;-1:-1:-1;803:450:81;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;-1:-1:-1;803:450:81;;-1:-1:-1;803:450:81;;;;-1:-1:-1;803:450:81;;;;-1:-1:-1;803:450:81;;;;-1:-1:-1;803:450:81;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;1741:1004:38:-;803:450:81;1741:1004:38;;;;683:254:68;1911:59:38;3162:307:68;803:450:81;;:::i;:::-;3162:307:68;3281:184;;;;;;;;;;;;3162:307;;803:450:81;;;;744:1:35;;1911:59:38;744:1:35;1911:59:38;798:135:68;;;;;;;;;;;;683:254;;2014:51:38;803:450:81;2090:32:38;;;:::i;:::-;2071:16;;;:51;;;-1:-1:-1;2128:579:38;2148:15;;;;;;2712:28;;;;;1741:1004;:::o;2165:3::-;683:254:68;;;;2926:232;1983:226;2926:232;2304:61:38;2398:76;683:254:68;2071:16:38;2398:19;2430:44;2449:24;683:254:68;;2359:1:38;683:254:68;;798:135;683:254;;;;798:135;;;;;;;683:254;;;2337:23:38;;;2304:19;2337:23;;;;:28;;2304:16;;:19;:::i;:::-;;803:450:81;;;;;;2304:61:38;803:450:81;996:2:35;;;;803:450:81;2449:24:38;2430:44;:::i;:::-;2398:16;;;:19;:::i;:::-;;:29;:76;:::i;:::-;2102:103:68;;;;;;;;;;1983:226;2926:232;2484:16:38;:25;:19;:16;;;:19;:::i;:::-;;:25;744:1:35;2102:103:68;;;;;;;;;;1983:226;;2559:16:38;:26;:19;:16;;;:19;:::i;:::-;;:26;744:1:35;2102:103:68;;;;;;;;;;1983:226;2926:232;2635:16:38;;:24;:19;:16;;;:19;:::i;:::-;;:24;744:1:35;832;2133:13:38;;;;;2723:460:40;;;803:450:81;;:::i;:::-;1318:135:68;;;;;;;;;;;832:1:35;;1318:135:68;832:1:35;;;;;;;;3003:44:40;1318:135:68;3003:44:40;803:450:81;3003:44:40;1578:135:68;3003:44:40;;;:::i;803:450:81:-;2973:75:40;;1578:135:68;;;;;;3089:17:40;;;744:1:35;1578:135:68;;2723:460:40;:::o;803:450:81:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;:::o;7564:252:48:-;803:450:81;832:1:35;;803:450:81;7708:7:48;;;;1478:66;7727:6;;;;;7708:7;803:450:81;;;;7717:17:48;7736:10;;;;1478:66;7748:14;;;803:450:81;;;7764:14:48;7780:17;7764:14;;;803:450:81;;;7780:17:48;;1478:66;803:450:81;7727:6:48;803:450:81;7667:138:48;7708:7;7667:138;;803:450:81;1478:66:48;803:450:81;;7727:6:48;1478:66;;803:450:81;7736:10:48;1478:66;;803:450:81;7748:14:48;1478:66;;803:450:81;7764:14:48;1478:66;;803:450:81;7780:17:48;1478:66;;803:450:81;1478:66:48;;;803:450:81;1478:66:48;;;803:450:81;1478:66:48;7667:138;;;;;;:::i","linkReferences":{}},"methodIdentifiers":{"recover((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":"829b8849","recoverConfiguration(bytes)":"5c9be12c"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidAttestation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidBlacklist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidIdentitySigner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"flag\",\"type\":\"uint256\"}],\"name\":\"InvalidNodeType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"invalidSigner\",\"type\":\"address\"}],\"name\":\"InvalidSessionSigner\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"recover\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"identitySigner\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"implicitBlacklist\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"valueLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"deadline\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"cumulative\",\"type\":\"bool\"},{\"internalType\":\"enum ParameterOperation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"offset\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"mask\",\"type\":\"bytes32\"}],\"internalType\":\"struct ParameterRule[]\",\"name\":\"rules\",\"type\":\"tuple[]\"}],\"internalType\":\"struct Permission[]\",\"name\":\"permissions\",\"type\":\"tuple[]\"}],\"internalType\":\"struct SessionPermissions[]\",\"name\":\"sessionPermissions\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isImplicit\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"sessionSigner\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"sessionPermission\",\"type\":\"uint8\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"approvedSigner\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"identityType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes32\",\"name\":\"issuerHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"audienceHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"applicationData\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"redirectUrl\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"issuedAt\",\"type\":\"uint64\"}],\"internalType\":\"struct AuthData\",\"name\":\"authData\",\"type\":\"tuple\"}],\"internalType\":\"struct Attestation\",\"name\":\"attestation\",\"type\":\"tuple\"}],\"internalType\":\"struct SessionSig.CallSignature[]\",\"name\":\"callSignatures\",\"type\":\"tuple[]\"}],\"internalType\":\"struct SessionSig.DecodedSignature\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"encoded\",\"type\":\"bytes\"}],\"name\":\"recoverConfiguration\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"identitySigner\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"implicitBlacklist\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"valueLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"deadline\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"cumulative\",\"type\":\"bool\"},{\"internalType\":\"enum ParameterOperation\",\"name\":\"operation\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"offset\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"mask\",\"type\":\"bytes32\"}],\"internalType\":\"struct ParameterRule[]\",\"name\":\"rules\",\"type\":\"tuple[]\"}],\"internalType\":\"struct Permission[]\",\"name\":\"permissions\",\"type\":\"tuple[]\"}],\"internalType\":\"struct SessionPermissions[]\",\"name\":\"sessionPermissions\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isImplicit\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"sessionSigner\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"sessionPermission\",\"type\":\"uint8\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"approvedSigner\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"identityType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes32\",\"name\":\"issuerHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"audienceHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"applicationData\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"redirectUrl\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"issuedAt\",\"type\":\"uint64\"}],\"internalType\":\"struct AuthData\",\"name\":\"authData\",\"type\":\"tuple\"}],\"internalType\":\"struct Attestation\",\"name\":\"attestation\",\"type\":\"tuple\"}],\"internalType\":\"struct SessionSig.CallSignature[]\",\"name\":\"callSignatures\",\"type\":\"tuple[]\"}],\"internalType\":\"struct SessionSig.DecodedSignature\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"hasBlacklist\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"InvalidAttestation()\":[{\"notice\":\"Invalid attestation\"}],\"InvalidBlacklist()\":[{\"notice\":\"Invalid blacklist\"}],\"InvalidIdentitySigner()\":[{\"notice\":\"Invalid identity signer\"}],\"InvalidNodeType(uint256)\":[{\"notice\":\"Invalid node type in session configuration\"}],\"InvalidSessionSigner(address)\":[{\"notice\":\"Invalid session signer\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/extensions/sessions/SessionSig.t.sol\":\"SessionSigHarness\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/extensions/sessions/SessionErrors.sol\":{\"keccak256\":\"0xa7642b4ef1d2ac8e41bd6dca88c5a644cac21b3ebe79deb5013e21fb4aaab405\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ef80768f6c509a54ea5d3fb92cbf46363f945f071cc3664710770c09b3d2a978\",\"dweb:/ipfs/QmbRpicAiPSYQbKpjoDbanap9q5hYsqEMS1u7w7sqKEYTY\"]},\"src/extensions/sessions/SessionManager.sol\":{\"keccak256\":\"0x796e8db3b2dc58842aca5c7fe76897527dd60279a8146ee107f651d876fccbd9\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2ee4d968a8bd5d007cccc67108509470677f4f5ce59dce7005b1da7d9b243609\",\"dweb:/ipfs/QmVUz8Q4BwNsbeLZdsWHg87MCVF6aAJL6UYzWWWAoxjvS7\"]},\"src/extensions/sessions/SessionSig.sol\":{\"keccak256\":\"0x7c44eabacfd2b4758fa8f54574f7479d8ef0209551ad824b3fc497c215a9609a\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://845b301783b1f069fa0b01d47ca2de1a79b0d4c3e14881973421a718c4d823df\",\"dweb:/ipfs/QmcDgiqjENAL3L7MjQ7HgitmsJ2PVNUm3ibnL2DZRU1VAL\"]},\"src/extensions/sessions/explicit/ExplicitSessionManager.sol\":{\"keccak256\":\"0x08405cc3def78d4172267a2e607e303b5f222d8cb85ba009deab58e0110088b0\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e2e073fdb5794f59ee6d7eb5e04074b1452e5d0824e4117259835071199f3d32\",\"dweb:/ipfs/Qmbi56yfELF88ezZ2tczegLmeB6Gb3HxDX11bzx3rpDgJZ\"]},\"src/extensions/sessions/explicit/IExplicitSessionManager.sol\":{\"keccak256\":\"0xae940e96cf0677c9b0df0daee07db0293c55a21cec0b893d82eefd122815602b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://62ee98f92121ad54f78d375ec3003aab73719adec852b0d12518fe99fc6f66c6\",\"dweb:/ipfs/QmPuAX7tdga5Su1xua6LS6jR9DsV7GyCwyZLeRC8upPTKY\"]},\"src/extensions/sessions/explicit/Permission.sol\":{\"keccak256\":\"0x0bc35a04da3830c64ec13c32b57f88be6b980228f6b387e800cf70919cdcfb16\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://fcb304612f894699f8e1e40cf134abebe8f7135795bea479b04e967551c59948\",\"dweb:/ipfs/Qme4mD8dh3xU9wbscQwvL4cQcZ2Wv8Fobo2fmU29B3DirV\"]},\"src/extensions/sessions/explicit/PermissionValidator.sol\":{\"keccak256\":\"0xe970e1ce931ef3779e3ddc9525b40820b7f63746828a440306ff9c984da42234\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://9154a986b7a5565119b2c0993dd9bc9e6e9b3e07eede034c8fde1c9f39a56a30\",\"dweb:/ipfs/QmXbgsr6kYYK5gmge6sosgwbHnFnQW5ntCZCyeNTQqTndD\"]},\"src/extensions/sessions/implicit/Attestation.sol\":{\"keccak256\":\"0xcaa44022b5eb4bc7ab487b3b1a0125da67e2e891cee983ef6cdb6814f045efc8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://94829782b6dcb482d7c002511c590d1ad8de3b21e5e72575df18be73565b3638\",\"dweb:/ipfs/QmZ4u9FxALzMzKR7auW8FmFkhGVw8kRDeDRJ1PKwKaWNWF\"]},\"src/extensions/sessions/implicit/ISignalsImplicitMode.sol\":{\"keccak256\":\"0x6cb48f50c49bcb3c7071306fe9fac6c102bc9eabf73d9909e19ab3b9a835d0a8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://15297e969f64fc1152654d1cefbe276c15a0ecfc11f86b4c276bb0b454fe700a\",\"dweb:/ipfs/QmeehNFYBPPtJePwUcqiYCgiuFotur4VVVCV1KvegdCCZ4\"]},\"src/extensions/sessions/implicit/ImplicitSessionManager.sol\":{\"keccak256\":\"0xe0d4f9f9c242e1e5781ba3a2eb4c4485b16de53769dacf7f448be01649d9997b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://f6f28cfeca83fffc74e63440243fcb0a7f9a7d5ac5efae21fa8e96926c1d0fae\",\"dweb:/ipfs/Qmdnw9PrjjpUjWij9VDxBRe6besuJvpwiGaPewVcR2G9C1\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/interfaces/ISapient.sol\":{\"keccak256\":\"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489\",\"dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"src/utils/LibOptim.sol\":{\"keccak256\":\"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81\",\"dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x\"]},\"test/extensions/sessions/SessionSig.t.sol\":{\"keccak256\":\"0x0b1763cd070e975ce1bef56ab14282f664a6cbd8c16324203ef7b0a0ea2e3a79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://15463f3d18556900d97bebf40110d4ddb12f477c6ede2f49236f3a54d98894ac\",\"dweb:/ipfs/QmVe9kLXL4pRMaKaC5VTZFxa8uQ5h1jYJah28HtUnjYaH6\"]},\"test/extensions/sessions/SessionTestBase.sol\":{\"keccak256\":\"0x96ed18b2829a94a4e2fa0331b595e931ba48114679aa9765799aa9583713a1e7\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1f5dc74df056ea0b6722898060c5f467d47c7961335d474d93a3d45a75575894\",\"dweb:/ipfs/QmPT1ArcYmBUASEr2iL5TnRRkwShMahRh8YWurcbGkwJa4\"]},\"test/utils/PrimitivesRPC.sol\":{\"keccak256\":\"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe\",\"dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv\"]},\"test/utils/TestUtils.sol\":{\"keccak256\":\"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad\",\"dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[],"type":"error","name":"InvalidAttestation"},{"inputs":[],"type":"error","name":"InvalidBlacklist"},{"inputs":[],"type":"error","name":"InvalidIdentitySigner"},{"inputs":[{"internalType":"uint256","name":"flag","type":"uint256"}],"type":"error","name":"InvalidNodeType"},{"inputs":[{"internalType":"address","name":"invalidSigner","type":"address"}],"type":"error","name":"InvalidSessionSigner"},{"inputs":[{"internalType":"struct Payload.Decoded","name":"payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"signature","type":"bytes"}],"stateMutability":"view","type":"function","name":"recover","outputs":[{"internalType":"struct SessionSig.DecodedSignature","name":"","type":"tuple","components":[{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"address","name":"identitySigner","type":"address"},{"internalType":"address[]","name":"implicitBlacklist","type":"address[]"},{"internalType":"struct SessionPermissions[]","name":"sessionPermissions","type":"tuple[]","components":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"uint256","name":"valueLimit","type":"uint256"},{"internalType":"uint64","name":"deadline","type":"uint64"},{"internalType":"struct Permission[]","name":"permissions","type":"tuple[]","components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"struct ParameterRule[]","name":"rules","type":"tuple[]","components":[{"internalType":"bool","name":"cumulative","type":"bool"},{"internalType":"enum ParameterOperation","name":"operation","type":"uint8"},{"internalType":"bytes32","name":"value","type":"bytes32"},{"internalType":"uint256","name":"offset","type":"uint256"},{"internalType":"bytes32","name":"mask","type":"bytes32"}]}]}]},{"internalType":"struct SessionSig.CallSignature[]","name":"callSignatures","type":"tuple[]","components":[{"internalType":"bool","name":"isImplicit","type":"bool"},{"internalType":"address","name":"sessionSigner","type":"address"},{"internalType":"uint8","name":"sessionPermission","type":"uint8"},{"internalType":"struct Attestation","name":"attestation","type":"tuple","components":[{"internalType":"address","name":"approvedSigner","type":"address"},{"internalType":"bytes4","name":"identityType","type":"bytes4"},{"internalType":"bytes32","name":"issuerHash","type":"bytes32"},{"internalType":"bytes32","name":"audienceHash","type":"bytes32"},{"internalType":"bytes","name":"applicationData","type":"bytes"},{"internalType":"struct AuthData","name":"authData","type":"tuple","components":[{"internalType":"string","name":"redirectUrl","type":"string"},{"internalType":"uint64","name":"issuedAt","type":"uint64"}]}]}]}]}]},{"inputs":[{"internalType":"bytes","name":"encoded","type":"bytes"}],"stateMutability":"pure","type":"function","name":"recoverConfiguration","outputs":[{"internalType":"struct SessionSig.DecodedSignature","name":"","type":"tuple","components":[{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"address","name":"identitySigner","type":"address"},{"internalType":"address[]","name":"implicitBlacklist","type":"address[]"},{"internalType":"struct SessionPermissions[]","name":"sessionPermissions","type":"tuple[]","components":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"uint256","name":"valueLimit","type":"uint256"},{"internalType":"uint64","name":"deadline","type":"uint64"},{"internalType":"struct Permission[]","name":"permissions","type":"tuple[]","components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"struct ParameterRule[]","name":"rules","type":"tuple[]","components":[{"internalType":"bool","name":"cumulative","type":"bool"},{"internalType":"enum ParameterOperation","name":"operation","type":"uint8"},{"internalType":"bytes32","name":"value","type":"bytes32"},{"internalType":"uint256","name":"offset","type":"uint256"},{"internalType":"bytes32","name":"mask","type":"bytes32"}]}]}]},{"internalType":"struct SessionSig.CallSignature[]","name":"callSignatures","type":"tuple[]","components":[{"internalType":"bool","name":"isImplicit","type":"bool"},{"internalType":"address","name":"sessionSigner","type":"address"},{"internalType":"uint8","name":"sessionPermission","type":"uint8"},{"internalType":"struct Attestation","name":"attestation","type":"tuple","components":[{"internalType":"address","name":"approvedSigner","type":"address"},{"internalType":"bytes4","name":"identityType","type":"bytes4"},{"internalType":"bytes32","name":"issuerHash","type":"bytes32"},{"internalType":"bytes32","name":"audienceHash","type":"bytes32"},{"internalType":"bytes","name":"applicationData","type":"bytes"},{"internalType":"struct AuthData","name":"authData","type":"tuple","components":[{"internalType":"string","name":"redirectUrl","type":"string"},{"internalType":"uint64","name":"issuedAt","type":"uint64"}]}]}]}]},{"internalType":"bool","name":"hasBlacklist","type":"bool"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/extensions/sessions/SessionSig.t.sol":"SessionSigHarness"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/extensions/sessions/SessionErrors.sol":{"keccak256":"0xa7642b4ef1d2ac8e41bd6dca88c5a644cac21b3ebe79deb5013e21fb4aaab405","urls":["bzz-raw://ef80768f6c509a54ea5d3fb92cbf46363f945f071cc3664710770c09b3d2a978","dweb:/ipfs/QmbRpicAiPSYQbKpjoDbanap9q5hYsqEMS1u7w7sqKEYTY"],"license":"Apache-2.0"},"src/extensions/sessions/SessionManager.sol":{"keccak256":"0x796e8db3b2dc58842aca5c7fe76897527dd60279a8146ee107f651d876fccbd9","urls":["bzz-raw://2ee4d968a8bd5d007cccc67108509470677f4f5ce59dce7005b1da7d9b243609","dweb:/ipfs/QmVUz8Q4BwNsbeLZdsWHg87MCVF6aAJL6UYzWWWAoxjvS7"],"license":"Apache-2.0"},"src/extensions/sessions/SessionSig.sol":{"keccak256":"0x7c44eabacfd2b4758fa8f54574f7479d8ef0209551ad824b3fc497c215a9609a","urls":["bzz-raw://845b301783b1f069fa0b01d47ca2de1a79b0d4c3e14881973421a718c4d823df","dweb:/ipfs/QmcDgiqjENAL3L7MjQ7HgitmsJ2PVNUm3ibnL2DZRU1VAL"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/ExplicitSessionManager.sol":{"keccak256":"0x08405cc3def78d4172267a2e607e303b5f222d8cb85ba009deab58e0110088b0","urls":["bzz-raw://e2e073fdb5794f59ee6d7eb5e04074b1452e5d0824e4117259835071199f3d32","dweb:/ipfs/Qmbi56yfELF88ezZ2tczegLmeB6Gb3HxDX11bzx3rpDgJZ"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/IExplicitSessionManager.sol":{"keccak256":"0xae940e96cf0677c9b0df0daee07db0293c55a21cec0b893d82eefd122815602b","urls":["bzz-raw://62ee98f92121ad54f78d375ec3003aab73719adec852b0d12518fe99fc6f66c6","dweb:/ipfs/QmPuAX7tdga5Su1xua6LS6jR9DsV7GyCwyZLeRC8upPTKY"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/Permission.sol":{"keccak256":"0x0bc35a04da3830c64ec13c32b57f88be6b980228f6b387e800cf70919cdcfb16","urls":["bzz-raw://fcb304612f894699f8e1e40cf134abebe8f7135795bea479b04e967551c59948","dweb:/ipfs/Qme4mD8dh3xU9wbscQwvL4cQcZ2Wv8Fobo2fmU29B3DirV"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/PermissionValidator.sol":{"keccak256":"0xe970e1ce931ef3779e3ddc9525b40820b7f63746828a440306ff9c984da42234","urls":["bzz-raw://9154a986b7a5565119b2c0993dd9bc9e6e9b3e07eede034c8fde1c9f39a56a30","dweb:/ipfs/QmXbgsr6kYYK5gmge6sosgwbHnFnQW5ntCZCyeNTQqTndD"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/Attestation.sol":{"keccak256":"0xcaa44022b5eb4bc7ab487b3b1a0125da67e2e891cee983ef6cdb6814f045efc8","urls":["bzz-raw://94829782b6dcb482d7c002511c590d1ad8de3b21e5e72575df18be73565b3638","dweb:/ipfs/QmZ4u9FxALzMzKR7auW8FmFkhGVw8kRDeDRJ1PKwKaWNWF"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/ISignalsImplicitMode.sol":{"keccak256":"0x6cb48f50c49bcb3c7071306fe9fac6c102bc9eabf73d9909e19ab3b9a835d0a8","urls":["bzz-raw://15297e969f64fc1152654d1cefbe276c15a0ecfc11f86b4c276bb0b454fe700a","dweb:/ipfs/QmeehNFYBPPtJePwUcqiYCgiuFotur4VVVCV1KvegdCCZ4"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/ImplicitSessionManager.sol":{"keccak256":"0xe0d4f9f9c242e1e5781ba3a2eb4c4485b16de53769dacf7f448be01649d9997b","urls":["bzz-raw://f6f28cfeca83fffc74e63440243fcb0a7f9a7d5ac5efae21fa8e96926c1d0fae","dweb:/ipfs/Qmdnw9PrjjpUjWij9VDxBRe6besuJvpwiGaPewVcR2G9C1"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/interfaces/ISapient.sol":{"keccak256":"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359","urls":["bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489","dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"src/utils/LibOptim.sol":{"keccak256":"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde","urls":["bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81","dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x"],"license":"Apache-2.0"},"test/extensions/sessions/SessionSig.t.sol":{"keccak256":"0x0b1763cd070e975ce1bef56ab14282f664a6cbd8c16324203ef7b0a0ea2e3a79","urls":["bzz-raw://15463f3d18556900d97bebf40110d4ddb12f477c6ede2f49236f3a54d98894ac","dweb:/ipfs/QmVe9kLXL4pRMaKaC5VTZFxa8uQ5h1jYJah28HtUnjYaH6"],"license":"Apache-2.0"},"test/extensions/sessions/SessionTestBase.sol":{"keccak256":"0x96ed18b2829a94a4e2fa0331b595e931ba48114679aa9765799aa9583713a1e7","urls":["bzz-raw://1f5dc74df056ea0b6722898060c5f467d47c7961335d474d93a3d45a75575894","dweb:/ipfs/QmPT1ArcYmBUASEr2iL5TnRRkwShMahRh8YWurcbGkwJa4"],"license":"Apache-2.0"},"test/utils/PrimitivesRPC.sol":{"keccak256":"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe","urls":["bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe","dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv"],"license":"Apache-2.0"},"test/utils/TestUtils.sol":{"keccak256":"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79","urls":["bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad","dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa"],"license":"Apache-2.0"}},"version":1},"id":81} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/SessionSig.t.sol/SessionSigTest.json b/contracts/artifacts/wallet-contracts-v3/SessionSig.t.sol/SessionSigTest.json new file mode 100644 index 00000000..63f7b9cd --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/SessionSig.t.sol/SessionSigTest.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"excludeArtifacts","inputs":[],"outputs":[{"name":"excludedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"excludeContracts","inputs":[],"outputs":[{"name":"excludedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"excludeSelectors","inputs":[],"outputs":[{"name":"excludedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"excludeSenders","inputs":[],"outputs":[{"name":"excludedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"setUp","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"targetArtifactSelectors","inputs":[],"outputs":[{"name":"targetedArtifactSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzArtifactSelector[]","components":[{"name":"artifact","type":"string","internalType":"string"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetArtifacts","inputs":[],"outputs":[{"name":"targetedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"targetContracts","inputs":[],"outputs":[{"name":"targetedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"targetInterfaces","inputs":[],"outputs":[{"name":"targetedInterfaces_","type":"tuple[]","internalType":"struct StdInvariant.FuzzInterface[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"artifacts","type":"string[]","internalType":"string[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSelectors","inputs":[],"outputs":[{"name":"targetedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSenders","inputs":[],"outputs":[{"name":"targetedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"testAttestationOptimisation","inputs":[{"name":"attestation1","type":"tuple","internalType":"struct Attestation","components":[{"name":"approvedSigner","type":"address","internalType":"address"},{"name":"identityType","type":"bytes4","internalType":"bytes4"},{"name":"issuerHash","type":"bytes32","internalType":"bytes32"},{"name":"audienceHash","type":"bytes32","internalType":"bytes32"},{"name":"applicationData","type":"bytes","internalType":"bytes"},{"name":"authData","type":"tuple","internalType":"struct AuthData","components":[{"name":"redirectUrl","type":"string","internalType":"string"},{"name":"issuedAt","type":"uint64","internalType":"uint64"}]}]},{"name":"attestation2","type":"tuple","internalType":"struct Attestation","components":[{"name":"approvedSigner","type":"address","internalType":"address"},{"name":"identityType","type":"bytes4","internalType":"bytes4"},{"name":"issuerHash","type":"bytes32","internalType":"bytes32"},{"name":"audienceHash","type":"bytes32","internalType":"bytes32"},{"name":"applicationData","type":"bytes","internalType":"bytes"},{"name":"authData","type":"tuple","internalType":"struct AuthData","components":[{"name":"redirectUrl","type":"string","internalType":"string"},{"name":"issuedAt","type":"uint64","internalType":"uint64"}]}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testConfiguration_duplicateBlacklistNodes","inputs":[{"name":"blacklist","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testConfiguration_duplicateBlacklistNodes_inBranch","inputs":[{"name":"blacklist","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testConfiguration_duplicateIdentityNodes","inputs":[{"name":"identitySigner1","type":"address","internalType":"address"},{"name":"identitySigner2","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testConfiguration_duplicateIdentityNodes_inBranch","inputs":[{"name":"identitySigner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testConfiguration_invalidNode","inputs":[{"name":"invalidNodeFlag","type":"uint8","internalType":"uint8"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testConfiguration_largeBlacklist","inputs":[{"name":"blacklist","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testEmptyPermissionsStructSize_direct","inputs":[{"name":"signer","type":"address","internalType":"address"},{"name":"chainId","type":"uint256","internalType":"uint256"},{"name":"valueLimit","type":"uint256","internalType":"uint256"},{"name":"deadline","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"testLargeTopology","inputs":[{"name":"explicitSigners","type":"address[]","internalType":"address[]"},{"name":"signersIncludeCount","type":"uint256","internalType":"uint256"},{"name":"includeImplicitSigner","type":"bool","internalType":"bool"},{"name":"implicitBlacklist","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testMultipleExplicitSignatures","inputs":[{"name":"useChainId","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testMultipleImplicitSignatures","inputs":[{"name":"attestation","type":"tuple","internalType":"struct Attestation","components":[{"name":"approvedSigner","type":"address","internalType":"address"},{"name":"identityType","type":"bytes4","internalType":"bytes4"},{"name":"issuerHash","type":"bytes32","internalType":"bytes32"},{"name":"audienceHash","type":"bytes32","internalType":"bytes32"},{"name":"applicationData","type":"bytes","internalType":"bytes"},{"name":"authData","type":"tuple","internalType":"struct AuthData","components":[{"name":"redirectUrl","type":"string","internalType":"string"},{"name":"issuedAt","type":"uint64","internalType":"uint64"}]}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testRecover_invalidAttestationIndex","inputs":[{"name":"attestation","type":"tuple","internalType":"struct Attestation","components":[{"name":"approvedSigner","type":"address","internalType":"address"},{"name":"identityType","type":"bytes4","internalType":"bytes4"},{"name":"issuerHash","type":"bytes32","internalType":"bytes32"},{"name":"audienceHash","type":"bytes32","internalType":"bytes32"},{"name":"applicationData","type":"bytes","internalType":"bytes"},{"name":"authData","type":"tuple","internalType":"struct AuthData","components":[{"name":"redirectUrl","type":"string","internalType":"string"},{"name":"issuedAt","type":"uint64","internalType":"uint64"}]}]},{"name":"count","type":"uint256","internalType":"uint256"},{"name":"index","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testRecover_invalidBlacklist_requiredForImplicitSigner","inputs":[{"name":"attestation","type":"tuple","internalType":"struct Attestation","components":[{"name":"approvedSigner","type":"address","internalType":"address"},{"name":"identityType","type":"bytes4","internalType":"bytes4"},{"name":"issuerHash","type":"bytes32","internalType":"bytes32"},{"name":"audienceHash","type":"bytes32","internalType":"bytes32"},{"name":"applicationData","type":"bytes","internalType":"bytes"},{"name":"authData","type":"tuple","internalType":"struct AuthData","components":[{"name":"redirectUrl","type":"string","internalType":"string"},{"name":"issuedAt","type":"uint64","internalType":"uint64"}]}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testRecover_invalidIdentitySigner_noMatchAttestationSigner","inputs":[{"name":"attestation","type":"tuple","internalType":"struct Attestation","components":[{"name":"approvedSigner","type":"address","internalType":"address"},{"name":"identityType","type":"bytes4","internalType":"bytes4"},{"name":"issuerHash","type":"bytes32","internalType":"bytes32"},{"name":"audienceHash","type":"bytes32","internalType":"bytes32"},{"name":"applicationData","type":"bytes","internalType":"bytes"},{"name":"authData","type":"tuple","internalType":"struct AuthData","components":[{"name":"redirectUrl","type":"string","internalType":"string"},{"name":"issuedAt","type":"uint64","internalType":"uint64"}]}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testRecover_invalidIdentitySigner_noSignersEncoded","inputs":[{"name":"attestation","type":"tuple","internalType":"struct Attestation","components":[{"name":"approvedSigner","type":"address","internalType":"address"},{"name":"identityType","type":"bytes4","internalType":"bytes4"},{"name":"issuerHash","type":"bytes32","internalType":"bytes32"},{"name":"audienceHash","type":"bytes32","internalType":"bytes32"},{"name":"applicationData","type":"bytes","internalType":"bytes"},{"name":"authData","type":"tuple","internalType":"struct AuthData","components":[{"name":"redirectUrl","type":"string","internalType":"string"},{"name":"issuedAt","type":"uint64","internalType":"uint64"}]}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testRecover_invalidIdentitySigner_unset","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testRecover_invalidSessionSigner","inputs":[{"name":"useChainId","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testSingleExplicitSignature","inputs":[{"name":"useChainId","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testSingleImplicitSignature","inputs":[{"name":"attestation","type":"tuple","internalType":"struct Attestation","components":[{"name":"approvedSigner","type":"address","internalType":"address"},{"name":"identityType","type":"bytes4","internalType":"bytes4"},{"name":"issuerHash","type":"bytes32","internalType":"bytes32"},{"name":"audienceHash","type":"bytes32","internalType":"bytes32"},{"name":"applicationData","type":"bytes","internalType":"bytes"},{"name":"authData","type":"tuple","internalType":"struct AuthData","components":[{"name":"redirectUrl","type":"string","internalType":"string"},{"name":"issuedAt","type":"uint64","internalType":"uint64"}]}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false}],"bytecode":{"object":"0x60808060405234602f57600160ff19600c541617600c55600160ff19601f541617601f5561c44590816100358239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c80630a9254e4146102175780631ed7831c146102125780632055231e1461020d5780632ade3880146102085780633149c39114610203578063362a8093146101fe57806339455a80146101f95780633b94ef6b146101f45780633e5e3c23146101ef5780633f7286f4146101ea57806341628221146101e55780634cbbb2bf146101e057806366d9a9a0146101db5780637785689c146101d657806385226c81146101d1578063852ff1cb146101cc578063916a17c6146101c75780639963cece146101c2578063ae7e3e13146101bd578063b0464fdc146101b8578063b3f89b83146101b3578063b5508aa9146101ae578063b6f1231b146101a9578063ba414fa6146101a4578063d86f3b501461019f578063d96eb4d21461019a578063dfb3501e14610195578063e20c9f7114610190578063ec492c6a1461018b578063fa4dd4a614610186578063fa7626d4146101815763fca5ddea1461017c57600080fd5b6147e8565b6147a7565b61464d565b614292565b6141e7565b61402a565b613ecd565b613b33565b613af0565b61389b565b6137f0565b613523565b61344a565b612d8a565b612b17565b612a3e565b6127e1565b61272b565b612063565b611f8f565b611da9565b611d4a565b611c9f565b611bf4565b611987565b6116a4565b611486565b610fbc565b610ee3565b61097a565b61054c565b61022c565b600091031261022757565b600080fd5b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757604051611d3680820182811067ffffffffffffffff8211176104f757829161a6da833903906000f080156104d3576102d4907fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00601f549260081b16911617601f55565b6040517f7404f1d200000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f73657373696f6e0000000000000000000000000000000000000000000000000060448201526080816064816000737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156104d3576103bb916000916104d8575b5060609073ffffffffffffffffffffffffffffffffffffffff8151167fffffffffffffffffffffffff00000000000000000000000000000000000000006020541617602055602081015160215560408101516022550151602355565b6040517f7404f1d200000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f6964656e7469747900000000000000000000000000000000000000000000000060448201526080816064816000737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156104d3576104a2916000916104a4575b5060609073ffffffffffffffffffffffffffffffffffffffff8151167fffffffffffffffffffffffff00000000000000000000000000000000000000006024541617602455602081015160255560408101516026550151602755565b005b6104c6915060803d6080116104cc575b6104be81836106c3565b810190614950565b38610446565b503d6104b4565b614939565b6104f1915060803d6080116104cc576104be81836106c3565b3861035f565b610607565b602060408183019282815284518094520192019060005b8181106105205750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101610513565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102275760405180602060165491828152019060166000527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b51242899060005b8181106105db576105d7856105cb818703826106c3565b604051918291826104fc565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016105b4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff8211176104f757604052565b6080810190811067ffffffffffffffff8211176104f757604052565b60a0810190811067ffffffffffffffff8211176104f757604052565b60e0810190811067ffffffffffffffff8211176104f757604052565b610120810190811067ffffffffffffffff8211176104f757604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176104f757604052565b6040519061071360c0836106c3565b565b6040519061071360e0836106c3565b6040519061071360a0836106c3565b604051906107136040836106c3565b73ffffffffffffffffffffffffffffffffffffffff81160361022757565b359061071382610742565b7fffffffff0000000000000000000000000000000000000000000000000000000081160361022757565b35906107138261076b565b67ffffffffffffffff81116104f757601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926107e6826107a0565b916107f460405193846106c3565b829481845281830111610227578281602093846000960137010152565b9080601f830112156102275781602061082c933591016107da565b90565b67ffffffffffffffff81160361022757565b919091604081840312610227576040519061085b82610636565b8193813567ffffffffffffffff81116102275782019181601f840112156102275761088f60209392838580953591016107da565b845201359161089d8361082f565b0152565b91909160c081840312610227576108b6610704565b926108c082610760565b84526108ce60208301610795565b60208501526040820135604085015260608201356060850152608082013567ffffffffffffffff81116102275781610907918401610811565b608085015260a082013567ffffffffffffffff81116102275761092a9201610841565b60a0830152565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112610227576004359067ffffffffffffffff82116102275761082c916004016108a1565b346102275761098836610931565b6109c46109aa60205473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff168252565b610a2560a0820180516109d5614995565b90526020610a13610a066109f58385510167ffffffffffffffff90511690565b67ffffffffffffffff429116616d02565b67ffffffffffffffff1690565b9151019067ffffffffffffffff169052565b610c3c6000610a32616e94565b610ad7610a3d610715565b61beef8152607b6020820152610a516149d0565b60408201528360608201528360808201528360a0820152600160c0820152610a896040840191825190610a8382614a3a565b52614a3a565b50610a92610715565b61cafe8152906101c86020830152610aa8614a70565b60408301528460608301528460808301528460a0830152600160c08301525190610ad182614a4c565b52614a4c565b50610b2a610ae3614aab565b94610aff81610af0614b91565b610af8614bd4565b9086616f5a565b610b0887614a3a565b52610b1286614a3a565b50610b1b614b91565b610b23614bd4565b9084617444565b610b3385614a4c565b52610b3d84614a4c565b50610bc6610b68610b6360245473ffffffffffffffffffffffffffffffffffffffff1690565b617578565b94610b71614c16565b610b79614c32565b91610bc0610b9c60205473ffffffffffffffffffffffffffffffffffffffff1690565b610ba585614a3a565b9073ffffffffffffffffffffffffffffffffffffffff169052565b8761773a565b90610c06610bed601f5473ffffffffffffffffffffffffffffffffffffffff9060081c1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b906040518095819482937f829b88490000000000000000000000000000000000000000000000000000000084526004840161543d565b03915afa9081156104d357600091610d40575b506080810190610c69825151610c63615524565b90617946565b600090610c8b60205473ffffffffffffffffffffffffffffffffffffffff1690565b915b83518051821015610cfa5790610cf4610ce56060610cad84600196614a5c565b51610cc9610cbb8251151590565b610cc361555f565b90617bc4565b01515173ffffffffffffffffffffffffffffffffffffffff1690565b85610cee61559a565b91617c1a565b01610c8d565b6104a283610d2f88610d19604084015151610d136155d5565b906179e0565b610d2a606084015151610d13615610565b617d37565b905190610d3a615671565b91617e5e565b610d5b913d8091833e610d5381836106c3565b8101906152f7565b38610c4f565b60005b838110610d745750506000910152565b8181015183820152602001610d64565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093610dc081518092818752878088019101610d61565b0116010190565b9080602083519182815201916020808360051b8301019401926000915b838310610df357505050505090565b9091929394602080610e2f837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086600196030187528951610d84565b97019301930191939290610de4565b602081016020825282518091526040820191602060408360051b8301019401926000915b838310610e7157505050505090565b9091929394602080610ed4837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190610dc7565b97019301930191939290610e62565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757601e54610f1e816113be565b90610f2c60405192836106c3565b80825260208201601e6000527f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e3506000915b838310610f7257604051806105d78782610e3e565b60026020600192604051610f8581610636565b73ffffffffffffffffffffffffffffffffffffffff8654168152610faa8587016157ae565b83820152815201920192019190610f5d565b346102275760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102275760043567ffffffffffffffff81116102275761100b9036906004016108a1565b60243561107a6110686044359261105461103a60205473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff168652565b60a0850151611061614995565b9052616dd1565b9161107283615835565b607f91616deb565b9161109d610b6360245473ffffffffffffffffffffffffffffffffffffffff1690565b926111446110a9616ef9565b946110f96110b5610715565b61beef8152607b60208201526110c9615863565b60408201526000606082015260006080820152600060a0820152600160c0820152604088015190610a8382614a3a565b50611102614c32565b9061112e61112560205473ffffffffffffffffffffffffffffffffffffffff1690565b610ba584614a3a565b611136614b04565b61113e614c16565b9161773a565b93611158855161115261589e565b90617ec6565b61116a61116586516158ff565b615966565b9260005b84518110156111c157806111ad6111876001938a6159ab565b517fff000000000000000000000000000000000000000000000000000000000000001690565b60001a6111ba82886159ab565b530161116e565b508390856111fa6112266111e56111d785617f2f565b6111df614bd4565b90617f66565b9460405192839160ff861690602084016159d3565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826106c3565b926000925b82841061137c576040518661127a8261124e60808c1760ff168a602084016159d3565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018452836106c3565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fbd8ba84d0000000000000000000000000000000000000000000000000000000060048201529160008380602481015b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19182156104d35761133e93600093611362575b50601f54610c069060081c73ffffffffffffffffffffffffffffffffffffffff16610bed565b03915afa80156104d35761134e57005b6104a2903d806000833e610d5381836106c3565b8061137085611376936106c3565b8061021c565b84611318565b909192936113a86113b46001926111fa6113ae6113988761810e565b60405195869460208601906159bc565b906159bc565b876159bc565b940192919061122b565b67ffffffffffffffff81116104f75760051b60200190565b9080601f830112156102275781356113ed816113be565b926113fb60405194856106c3565b81845260208085019260051b82010192831161022757602001905b8282106114235750505090565b60208091833561143281610742565b815201910190611416565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112610227576004359067ffffffffffffffff82116102275761082c916004016113d6565b34610227576114943661143d565b600581511161169b575b6114a6614c16565b6114ae614c16565b6114d26114bc845160ff1690565b603017916111fa604051938492602084016159d3565b6000905b83518210156115275760019061151f61150c6114f28588614a5c565b5173ffffffffffffffffffffffffffffffffffffffff1690565b916111fa60405193849260208401615a16565b9101906114d6565b6115636111fa91611550856111fa611540845160ff1690565b9360405194859360208501615a59565b6040519283916113a860208401826159bc565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527feb6252040000000000000000000000000000000000000000000000000000000060048201529060008280602481015b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156104d35761165b92600092611687575b50601f546116279060081c73ffffffffffffffffffffffffffffffffffffffff16610bed565b60405180809581947f5c9be12c00000000000000000000000000000000000000000000000000000000835260048301615b0e565b03915afa80156104d35761166b57005b6104a2903d806000833e61167f81836106c3565b810190615ad7565b8061137084611695936106c3565b83611601565b6005815261149e565b346102275760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610227576004356116df81610742565b6024359061187360443591606435936116f78561082f565b6000611701615b1f565b61180761170c610724565b73ffffffffffffffffffffffffffffffffffffffff861681526111fa89611789611776602085019489865260408101978d89526117576060830195869067ffffffffffffffff169052565b60808201525173ffffffffffffffffffffffffffffffffffffffff1690565b93519551915167ffffffffffffffff1690565b9060405195869460208601927fffffffffffffffff000000000000000000000000000000000000000000000000927fffffffffffffffffffffffffffffffffffffffff000000000000000000000000605e96936000875260601b1660018601526015850152603584015260c01b1660558201526000605d8201520190565b61181a8151611814615bd4565b90617a83565b601f5461183f9060081c73ffffffffffffffffffffffffffffffffffffffff16610bed565b60405180809781947f5c9be12c00000000000000000000000000000000000000000000000000000000835260048301615b0e565b03915afa9485156104d35761191e608095611906611959946118e860606104a29b61195f9a60009161196b575b5001976118b78951516118b1615c35565b90617aec565b6118df6118c48a51614a3a565b515173ffffffffffffffffffffffffffffffffffffffff1690565b90610cee615c96565b60206118f48851614a3a565b51015190611900615cd1565b91617b55565b60406119128651614a3a565b51015190611900615d0c565b611940610a0660606119308651614a3a565b51015167ffffffffffffffff1690565b67ffffffffffffffff611951615d47565b921690617b55565b51614a3a565b51015151610d13615d82565b61198091503d806000833e61167f81836106c3565b50386118a0565b346102275761199536610931565b6119b76109aa60205473ffffffffffffffffffffffffffffffffffffffff1690565b6119c860a0820180516109d5614995565b6119d06176a6565b906119d9616ef9565b91611a296119e5610715565b61beef8152607b60208201526119f9615863565b60408201526000606082015260006080820152600060a0820152600160c0820152604085015190610a8382614a3a565b506040517f7404f1d200000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6174746573746174696f6e00000000000000000000000000000000000000000060448201526080816064816000737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19283156104d357611afd93611ac992600091611bd5575b50611ac3614b91565b86616f5a565b611ad1614b38565b90611adb82614a3a565b52611ae581614a3a565b50611aee614c16565b90611af7614c16565b9261773a565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f9e5c658b0000000000000000000000000000000000000000000000000000000060048201529160008380602481015b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19182156104d35761133e93600093611bc15750601f54610c069060081c73ffffffffffffffffffffffffffffffffffffffff16610bed565b8061137085611bcf936106c3565b38611318565b611bee915060803d6080116104cc576104be81836106c3565b38611aba565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102275760405180602060185491828152019060186000527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e9060005b818110611c73576105d7856105cb818703826106c3565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201611c5c565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102275760405180602060175491828152019060176000527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c159060005b818110611d1e576105d7856105cb818703826106c3565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201611d07565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757611d816176a6565b611afd611d8c616ef9565b91611d986119e5610715565b50611da1614b04565b611aee614c16565b3461022757611db73661143d565b6005815111611e92575b611dc9614c16565b9060005b60028110611e4b5782737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527feb6252040000000000000000000000000000000000000000000000000000000060048201529060008280602481016115d4565b9091611e5b6114bc845160ff1690565b916000905b8051821015611e875760018094611e7d61150c6114f28686614a5c565b9201919350611e60565b916001915001611dcd565b60058152611dc1565b906020808351928381520192019060005b818110611eb95750505090565b82517fffffffff0000000000000000000000000000000000000000000000000000000016845260209384019390920191600101611eac565b602081016020825282518091526040820191602060408360051b8301019401926000915b838310611f2457505050505090565b9091929394602080611f80837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0866001960301875289519083611f708351604084526040840190610d84565b9201519084818403910152611e9b565b97019301930191939290611f15565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757601b54611fca816113be565b90611fd860405192836106c3565b80825260208201601b6000527f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc16000915b83831061201e57604051806105d78782611ef1565b6002602060019260405161203181610636565b61203a866156ac565b8152612047858701615dbd565b83820152815201920192019190612009565b8015150361022757565b346102275760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102275760043561209e81612059565b6040517f7404f1d200000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f73657373696f6e3200000000000000000000000000000000000000000000000060448201526080816064816000737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156104d3576000916126fb575b5061212f616e94565b91612138610715565b61beef8152607b602082015261214c6149d0565b60408201526000606082015260006080820152600060a0820152600160c08201526121816040850191825190610a8382614a3a565b506121cf61218d610715565b61cafe81526101c860208201526121a2614a70565b60408201526000606082015260006080820152600060a0820152600160c0820152825190610ad182614a4c565b506121d8616196565b9180156126f157612203465b60205473ffffffffffffffffffffffffffffffffffffffff169061822e565b61220c84614a3a565b5261221683614a3a565b50156126e75761223f465b845173ffffffffffffffffffffffffffffffffffffffff16906182a8565b61224883614a4c565b5261225282614a4c565b50612275610b6360245473ffffffffffffffffffffffffffffffffffffffff1690565b926000935b83518510156122a9576122a160019161229c6122968888614a5c565b51618659565b618944565b94019361227a565b9061230e866122b6614aab565b9473__$cb7e46151951eef21e7bab9bc27b60b0a4$__6020836122d98451614a3a565b5160405196879283927f91195a2a000000000000000000000000000000000000000000000000000000008452600484016162e7565b0381845af49081156104d3576123626020936123486123438795612398996000916126ca575b5061233d614b91565b90618a1f565b618d33565b6123518b614a3a565b5261235b8a614a3a565b5051614a4c565b516040518096819482937f91195a2a000000000000000000000000000000000000000000000000000000008452600484016162e7565b03915af480156104d3576124a3956123c66123c18661244694600097889161269b575b50618a1f565b618ddd565b6123cf82614a4c565b526123d981614a4c565b506123e2614c72565b61240d61240460205473ffffffffffffffffffffffffffffffffffffffff1690565b610ba583614a3a565b61243761242e875173ffffffffffffffffffffffffffffffffffffffff1690565b610ba583614a4c565b61243f614c16565b918761773a565b9061246d610bed601f5473ffffffffffffffffffffffffffffffffffffffff9060081c1690565b906040518097819482937f829b88490000000000000000000000000000000000000000000000000000000084526004840161543d565b03915afa9283156104d357600093612680575b50608083016124c9815151610c63615524565b6124ee6124e06124d98351614a3a565b5151151590565b6124e861638c565b90618e82565b61258d61256d6020612507612523826125078751614a3a565b51015173ffffffffffffffffffffffffffffffffffffffff1690565b9461254f612545845473ffffffffffffffffffffffffffffffffffffffff1690565b9687610cee6163c7565b61256761255f6124d98351614a4c565b6124e8616402565b51614a4c565b835173ffffffffffffffffffffffffffffffffffffffff16610cee61643d565b61259e604085015151610d136155d5565b60608401906125b1825151610c63616478565b6000946000906125d660009373ffffffffffffffffffffffffffffffffffffffff1690565b925b84518051821015612660576125f4610bed6118c4848894614a5c565b14612657575b6126086118c4828751614a5c565b73ffffffffffffffffffffffffffffffffffffffff61263e610bed895173ffffffffffffffffffffffffffffffffffffffff1690565b91161461264e575b6001016125d8565b60019250612646565b600197506125fa565b6104a283610d2f8a610d2a886126788f610cc36164b3565b610cc3616514565b61269491933d8091833e610d5381836106c3565b91836124b6565b6126bd915060203d6020116126c3575b6126b581836106c3565b8101906161f5565b8b6123bb565b503d6126ab565b6126e19150883d8a116126c3576126b581836106c3565b8d612334565b61223f6000612221565b61220360006121e4565b612714915060803d6080116104cc576104be81836106c3565b38612126565b90602061082c928181520190610dc7565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757601a54612766816113be565b9061277460405192836106c3565b808252601a60009081527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b8383106127b957604051806105d7878261271a565b6001602081926127c8856156ac565b8152019201920191906127a4565b60ff81160361022757565b346102275760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102275761124e6128766128df61283961283360ff60043561282d816127d6565b16616dde565b60ff1690565b6040517ff00000000000000000000000000000000000000000000000000000000000000060fc83901b166020820152926128a29084906021820190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018552846106c3565b6040517f0ad9979000000000000000000000000000000000000000000000000000000000602082015260ff90911660248201529283906044820190565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561022757600061293392604051809481927ff28dceb300000000000000000000000000000000000000000000000000000000835260048301615b0e565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156104d35761165b926000926129855750601f546116279060081c73ffffffffffffffffffffffffffffffffffffffff16610bed565b8061137084612993936106c3565b38611601565b602081016020825282518091526040820191602060408360051b8301019401926000915b8383106129cc57505050505090565b9091929394602080612a2f837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190611e9b565b970193019301919392906129bd565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757601d54612a79816113be565b90612a8760405192836106c3565b80825260208201601d6000527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f6000915b838310612acd57604051806105d78782612999565b60026020600192604051612ae081610636565b73ffffffffffffffffffffffffffffffffffffffff8654168152612b05858701615dbd565b83820152815201920192019190612ab8565b346102275760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757600435612b5281610742565b60243590612b5f82610742565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517f4c63e56200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821615156004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156104d357612d75575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517f4c63e56200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831615156004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156104d357612ceb926111fa92612cd992612d60575b50604051928391602083017fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006015927f4000000000000000000000000000000000000000000000000000000000000000835260601b1660018201520190565b6111fa60405193849260208401616575565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f9e5c658b000000000000000000000000000000000000000000000000000000006004820152906000828060248101612933565b806113706000612d6f936106c3565b38612c7a565b806113706000612d84936106c3565b38612be6565b346102275760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102275760043567ffffffffffffffff811161022757612dd99036906004016113d6565b60443590602435612de983612059565b60643567ffffffffffffffff811161022757612e099036906004016113d6565b6014835111613441575b90926000935b8351851015612fac57612e32610bed6114f28787614a5c565b1515737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529015156004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156104d357612f97575b5060005b8451811015612f8b57808603612ec2575b600101612ea9565b612ecf6114f28787614a5c565b73ffffffffffffffffffffffffffffffffffffffff612ef4610bed6114f2858a614a5c565b9116141590737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529115156004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156104d357600192612f76575b509050612eba565b806113706000612f85936106c3565b38612f6e565b50600190940193612e19565b806113706000612fa6936106c3565b38612ea5565b926005835111613438575b90926000935b83518510156130b75760005b84518110156130ab57808603612fe2575b600101612fc9565b612fef6114f28787614a5c565b73ffffffffffffffffffffffffffffffffffffffff613014610bed6114f2858a614a5c565b9116141590737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529115156004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156104d357600192613096575b509050612fda565b8061137060006130a5936106c3565b8761308e565b50600190940193612fbd565b91906130c590825190616d02565b906130ce616168565b936130f1610b6360245473ffffffffffffffffffffffffffffffffffffffff1690565b926000935b83518510156131405761313860019161312f6131156114f28989614a5c565b73ffffffffffffffffffffffffffffffffffffffff168a52565b61229c89618659565b9401936130f6565b83866000925b8551841015613170576131686001916131626114f2878a614a5c565b90619032565b930192613146565b819350916131a692819582528260001461342c5761319260ff60015b16614cf3565b92613405575b6131a0614b04565b9061773a565b926131b4845161115261589e565b6131c1611165855161592c565b9160005b83518110156131fa57806131e66111876131e0600194615848565b896159ab565b60001a6131f382876159ab565b53016131c5565b50909260006132299361183f610bed601f5473ffffffffffffffffffffffffffffffffffffffff9060081c1690565b03915afa80156104d35760009384916133e6575b506132856132646020869796015173ffffffffffffffffffffffffffffffffffffffff1690565b60245473ffffffffffffffffffffffffffffffffffffffff16610cee6165de565b606085019361329a8551518451611900616478565b6000935b835185101561332c57600092835b87518051821015613319576118c4826132c492614a5c565b73ffffffffffffffffffffffffffffffffffffffff6132e9610bed6114f28b8b614a5c565b9116146132f8576001016132ac565b5092509360019061330f829893985b610cc3616619565b019395909561329e565b5050929461330f60019296989398613307565b8681849261333657005b60409261334b9161334561667a565b9161918b565b0161335c81515183516119006166db565b60005b82518110156104a257600092835b835180518610156133d6576114f28661338592614a5c565b73ffffffffffffffffffffffffffffffffffffffff6133aa610bed6114f28787614a5c565b9116146133bd576001809501945061336d565b5092506001906133d0825b610cc3616716565b0161335f565b506001929194506133d0906133c8565b90506133fc91933d8091833e61167f81836106c3565b9290928561323d565b613427610b9c60205473ffffffffffffffffffffffffffffffffffffffff1690565b613198565b61319260ff600061318c565b60058352612fb7565b60148352612e13565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757601c54613485816113be565b9061349360405192836106c3565b80825260208201601c6000527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2116000915b8383106134d957604051806105d78782612999565b600260206001926040516134ec81610636565b73ffffffffffffffffffffffffffffffffffffffff8654168152613511858701615dbd565b838201528152019201920191906134c4565b34610227576135313661143d565b80511515737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529015156004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156104d3576137db575b508051600f8110156137ca57506135bb614cb2565b9060005b82518110156135f5576001906135ef6135e56114f26135df865185616777565b86614a5c565b610ba58387614a5c565b016135bf565b50505b6136028151614cf3565b90600090815b81518110156136b2576000805b848110613656575b50906001911561362e575b01613608565b61365161363e6114f28386614a5c565b610ba561364a876167b0565b9688614a5c565b613628565b94919290936136686114f28584614a5c565b73ffffffffffffffffffffffffffffffffffffffff61368d610bed6114f28a88614a5c565b9116146136a35791949193909291600101613615565b9194509092509060018061361d565b505081526136d8610b6360245473ffffffffffffffffffffffffffffffffffffffff1690565b6000905b8251821015613700576136f86001916131626114f28587614a5c565b9101906136dc565b6137676000613742859361373d613715614c32565b610ba561373760205473ffffffffffffffffffffffffffffffffffffffff1690565b91614a3a565b6191f7565b601f546116279060081c73ffffffffffffffffffffffffffffffffffffffff16610bed565b03915afa80156104d3576104a2926000926000926137a3575b506040613795929301515190516119006166db565b61379d6167dd565b9061911f565b6040935061379592506137c0903d806000833e61167f81836106c3565b9390939250613780565b60ff10156135f85760ff81526135f8565b8061137060006137ea936106c3565b386135a6565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102275760195461382b816113be565b9061383960405192836106c3565b808252601960009081527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b83831061387e57604051806105d7878261271a565b60016020819261388d856156ac565b815201920192019190613869565b346102275760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610227576004356138d681612059565b613a536139f86138e4616ef9565b926139346138f0610715565b61beef8152607b6020820152613904615863565b60408201526000606082015260006080820152600060a0820152600160c0820152604086015190610a8382614a3a565b5060205473ffffffffffffffffffffffffffffffffffffffff169015613ae6576139cc465b613961615b67565b9061398961396d610724565b73ffffffffffffffffffffffffffffffffffffffff9095168552565b60208401526103e860408401526107d06060840152608083019081526139ad616818565b906139b6610733565b61beef81529160208301525190610a8382614a3a565b5061229c6139f2610b6360245473ffffffffffffffffffffffffffffffffffffffff1690565b91618659565b613a0361234361692d565b613a0b614b38565b90613a1582614a3a565b52613a1f81614a3a565b50613a28614c32565b90613a4b61112560205473ffffffffffffffffffffffffffffffffffffffff1690565b611af7614c16565b6040517fc1e84ed6000000000000000000000000000000000000000000000000000000006020820152600060248201529190613a928360448101612876565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576000611b6f93604051809581927ff28dceb300000000000000000000000000000000000000000000000000000000835260048301615b0e565b6139cc6000613959565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610227576020613b29616a00565b6040519015158152f35b346102275760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757613ccb600435613b7181612059565b613b79616ef9565b602081613c96613c8f613b8a610715565b61beef815295607b85880152613b9e615863565b60408801526000606088015260006080880152600060a0880152600160c0880152613bd36040850197885190610a8382614a3a565b50845473ffffffffffffffffffffffffffffffffffffffff169015613ec3576139cc465b613bff615b67565b90613c0b61396d610724565b838801526103e860408401526107d0606084015260808301908152613c4f613c316168a2565b613c39610733565b61beef81529089820152825190610a8382614a3a565b5086613c82613c5c610724565b926000845260008385015260006040850152600060608501526000608085015251614a3a565b51015190610a8382614a3a565b9451614a3a565b5160405195869283927f91195a2a000000000000000000000000000000000000000000000000000000008452600484016162e7565b038173__$cb7e46151951eef21e7bab9bc27b60b0a4$__5af49081156104d357613d60613d0a612343600094613dbd978691613ea4575061233d614b91565b613d12614b38565b90613d1c82614a3a565b52613d2681614a3a565b50613d2f614c32565b613d5161240460205473ffffffffffffffffffffffffffffffffffffffff1690565b613d59614c16565b918661773a565b90613d87610bed601f5473ffffffffffffffffffffffffffffffffffffffff9060081c1690565b906040518096819482937f829b88490000000000000000000000000000000000000000000000000000000084526004840161543d565b03915afa9081156104d3576104a292600092613e85575b50610d2f90610d2a613e276020613df6608087016119598151516118b1615524565b51613e0c613e048251151590565b6124e8616b04565b015173ffffffffffffffffffffffffffffffffffffffff1690565b613e53613e4960205473ffffffffffffffffffffffffffffffffffffffff1690565b9182610cee616b3f565b613e64604086015151610d136155d5565b613e7c6118c4606087016119598151516118b1616478565b90610cee616b7a565b613e9d90610d2f92933d8091833e610d5381836106c3565b9190613dd4565b613ebd915060203d6020116126c3576126b581836106c3565b38612334565b6139cc6000613bf7565b3461022757613edb36610931565b613efd6109aa60205473ffffffffffffffffffffffffffffffffffffffff1690565b613f0e60a0820180516109d5614995565b613f30610b6360245473ffffffffffffffffffffffffffffffffffffffff1690565b613f3b611d8c616ef9565b91613f49835161115261589e565b613f5661116584516158ff565b9060005b8251811015613f875780613f73611187600193886159ab565b60001a613f8082866159ab565b5301613f5a565b5082613fb58361124e613fa5613f9f6111d787617f2f565b9561810e565b9460405195869360208501616bb5565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527feb6252040000000000000000000000000000000000000000000000000000000060048201529160008380602481016112eb565b346102275761415d61403b36610931565b61405d6109aa60205473ffffffffffffffffffffffffffffffffffffffff1690565b61406e60a0820180516109d5614995565b60006140e061407b616ef9565b926140c8614087610715565b61beef8152607b602082015261409b615863565b60408201528460608201528460808201528460a0820152600160c0820152604086015190610a8382614a3a565b506140d1614b91565b6140d9614bd4565b9085616f5a565b91613d60614106610b6360245473ffffffffffffffffffffffffffffffffffffffff1690565b9361410f614b38565b9061411982614a3a565b5261412381614a3a565b5061412c614c16565b614134614c32565b91614157610b9c60205473ffffffffffffffffffffffffffffffffffffffff1690565b8661773a565b03915afa9081156104d3576104a2926000926141c8575b50610d2f906141b76141966060610cad608087016119598151516118b1615524565b60205473ffffffffffffffffffffffffffffffffffffffff16610cee61559a565b610d19604084015151610d136155d5565b6141e090610d2f92933d8091833e610d5381836106c3565b9190614174565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102275760405180602060155491828152019060156000527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4759060005b818110614266576105d7856105cb818703826106c3565b825473ffffffffffffffffffffffffffffffffffffffff1684526020909301926001928301920161424f565b346102275760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102275760043567ffffffffffffffff8111610227576142e19036906004016108a1565b60243567ffffffffffffffff8111610227576143019036906004016108a1565b906040517f7404f1d20000000000000000000000000000000000000000000000000000000081526080818061436b6004820160609060208152600860208201527f73657373696f6e3200000000000000000000000000000000000000000000000060408201520190565b03816000737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156104d3576104a29361461a9260009261462c575b506143d96143bf60205473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff168552565b6143fa6109aa835173ffffffffffffffffffffffffffffffffffffffff1690565b60a0840151614407614995565b905260a0810151614416614995565b905261450a614423616e94565b916144c361442f610715565b61beef8152607b60208201526144436149d0565b60408201526000606082015260006080820152600060a0820152600160c08201526144786040860191825190610a8382614a3a565b50614481610715565b61cafe8152906101c86020830152614497614a70565b60408301526000606083015260006080830152600060a0830152600160c08301525190610ad182614a4c565b506144fa6144e2876144d3614b91565b6144db614bd4565b9087616f5a565b966144eb614b91565b6144f3614bd4565b9086617444565b9284614504614bd4565b91617444565b9361459d614530610b6360245473ffffffffffffffffffffffffffffffffffffffff1690565b92614539614c32565b9061455c61112560205473ffffffffffffffffffffffffffffffffffffffff1690565b614564614aab565b908461456f83614a3a565b5261457982614a3a565b5061458382614a4c565b5261458d81614a4c565b50614596614c16565b908561773a565b946145e16145d86145ac614c72565b956114f26145cf60205473ffffffffffffffffffffffffffffffffffffffff1690565b610ba589614a3a565b610ba586614a4c565b6145e9614aab565b916145f383614a3a565b526145fd82614a3a565b5061460782614a4c565b5261461181614a4c565b5061113e614c16565b90519051614626616c17565b9161928b565b61464691925060803d6080116104cc576104be81836106c3565b903861439c565b346102275761465b36610931565b61467d6109aa60205473ffffffffffffffffffffffffffffffffffffffff1690565b61468e60a0820180516109d5614995565b6146b0610b6360245473ffffffffffffffffffffffffffffffffffffffff1690565b906146b9616ef9565b916146c56119e5610715565b506040517f7404f1d200000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6174746573746174696f6e00000000000000000000000000000000000000000060448201526080816064816000737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19283156104d357611afd9361475e92600091611bd55750611ac3614b91565b90614767614b38565b9161477183614a3a565b5261477b82614a3a565b50614784614c32565b91611136610b9c60205473ffffffffffffffffffffffffffffffffffffffff1690565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757602060ff601f54166040519015158152f35b346102275760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102275760043561482381610742565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517f4c63e56200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82161515600482015290600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156104d357614919612ceb926111fa926111fa95612d605750604051928391602083017fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006015927f4000000000000000000000000000000000000000000000000000000000000000835260601b1660018201520190565b611550614927825160ff1690565b6111fa60405193849260208401616c9e565b6040513d6000823e3d90fd5b519061071382610742565b908160809103126102275760606040519161496a83610652565b805161497581610742565b835260208101516020840152604081015160408401520151606082015290565b604051906149a46040836106c3565b601382527f68747470733a2f2f6578616d706c652e636f6d000000000000000000000000006020830152565b604051906149df6040836106c3565b600582527f74657374310000000000000000000000000000000000000000000000000000006020830152565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805115614a475760200190565b614a0b565b805160011015614a475760400190565b8051821015614a475760209160051b010190565b60405190614a7f6040836106c3565b600582527f74657374320000000000000000000000000000000000000000000000000000006020830152565b60405160609190614abc83826106c3565b60028152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018260005b828110614af357505050565b806060602080938501015201614ae7565b60405190614b136020836106c3565b600080835282815b828110614b2757505050565b806060602080938501015201614b1b565b60408051909190614b4983826106c3565b60018152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018260005b828110614b8057505050565b806060602080938501015201614b74565b60405190614b9e82610652565b8173ffffffffffffffffffffffffffffffffffffffff602054168152602154602082015260225460408201526060602354910152565b60405190614be182610652565b60245473ffffffffffffffffffffffffffffffffffffffff168252602554602083015260265460408301526027546060830152565b60405190614c256020836106c3565b6000808352366020840137565b60408051909190614c4383826106c3565b60018152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001366020840137565b60405160609190614c8383826106c3565b60028152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001366020840137565b6040516102009190614cc483826106c3565b600f8152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001366020840137565b90614cfd826113be565b614d0a60405191826106c3565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0614d3882946113be565b0190602036910137565b9080601f83011215610227578151614d59816113be565b92614d6760405194856106c3565b81845260208085019260051b82010192831161022757602001905b828210614d8f5750505090565b602080918351614d9e81610742565b815201910190614d82565b9080601f8301121561022757815191614dc1836113be565b92614dcf60405194856106c3565b80845260208085019160051b830101918383116102275760208101915b838310614dfb57505050505090565b825167ffffffffffffffff811161022757820160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082880301126102275760405190614e478261066e565b6020810151614e5581610742565b825260408101516020830152606081015160408301526080810151614e798161082f565b606083015260a081015167ffffffffffffffff811161022757602091010186601f8201121561022757805190614eae826113be565b91614ebc60405193846106c3565b80835260208084019160051b830101918983116102275760208101915b838310614ef757505050506080820152815260209283019201614dec565b825167ffffffffffffffff81116102275782016040818d037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001126102275760405190614f4382610636565b6020810151614f5181610742565b8252604081015167ffffffffffffffff81116102275760209101018c601f820112156102275780518d614f83826113be565b92614f9160405194856106c3565b828452602060a0818601940282010191821161022757602001918f5b828410614fcd575050505091816020938480940152815201920191614ed9565b8360a09103126102275760405190614fe48261066e565b8351614fef81612059565b8252602084015190600482101561022757826020928360a09501526040860151604082015260608601516060820152608086015160808201528152019201918f614fad565b51906107138261076b565b81601f82011215610227576020815191019061505a816107a0565b9261506860405194856106c3565b818452818301116102275761082c916020840190610d61565b919091604081840312610227576040519061509b82610636565b819381519167ffffffffffffffff8311610227576150bf602093928493830161503f565b845201519161089d8361082f565b9080601f83011215610227578151916150e5836113be565b926150f360405194856106c3565b80845260208085019160051b830101918383116102275760208101915b83831061511f57505050505090565b825167ffffffffffffffff81116102275782019060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08388030112610227576040519161516c83610652565b602081015161517a81612059565b8352604081015161518a81610742565b6020840152606081015161519d816127d6565b6040840152608081015167ffffffffffffffff81116102275760209101019060c082880312610227576151ce610704565b926151d883614945565b84526151e660208401615034565b60208501526040830151604085015260608301516060850152608083015167ffffffffffffffff8111610227578861521f91850161503f565b608085015260a08301519367ffffffffffffffff85116102275761524889602096879601615081565b60a08201526060820152815201920191615110565b91909160a08184031261022757615272610724565b928151845261528360208301614945565b6020850152604082015167ffffffffffffffff811161022757816152a8918401614d42565b6040850152606082015167ffffffffffffffff811161022757816152cd918401614da9565b6060850152608082015167ffffffffffffffff8111610227576152f092016150cd565b6080830152565b9060208282031261022757815167ffffffffffffffff81116102275761082c920161525d565b9080602083519182815201916020808360051b8301019401926000915b83831061534957505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c0806153bc604085015160e0604086015260e0850190610d84565b936060810151606085015260808101511515608085015260a0810151151560a085015201519101529701930193019193929061533a565b906020808351928381520192019060005b8181106154115750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101615404565b909161551661082c936040845261545a60408501825160ff169052565b6020810151151560608501526101006154cf6154876040840151610120608089015261016088019061531d565b606084015160a0880152608084015160c088015260a08401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08883030160e0890152610d84565b9160c08101518287015260e081015161012087015201517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0858303016101408601526153f3565b916020818403910152610d84565b604051906155336040836106c3565b601682527f43616c6c207369676e617475726573206c656e677468000000000000000000006020830152565b6040519061556e6040836106c3565b601782527f43616c6c2073686f756c6420626520696d706c696369740000000000000000006020830152565b604051906155a96040836106c3565b601c82527f5265636f7665726564206174746573746174696f6e207369676e6572000000006020830152565b604051906155e46040836106c3565b601982527f426c61636b6c6973742073686f756c6420626520656d707479000000000000006020830152565b6040519061561f6060836106c3565b602382527f70747900000000000000000000000000000000000000000000000000000000006040837f53657373696f6e207065726d697373696f6e732073686f756c6420626520656d60208201520152565b604051906156806040836106c3565b600a82527f496d6167652068617368000000000000000000000000000000000000000000006020830152565b9060405191600081548060011c92600182169182156157a4575b60208510831461577757848752869392602085019291811561573b57506001146156f9575b5050610713925003836106c3565b61570a919250600052602060002090565b906000915b848310615724575061071393500138806156eb565b80548284015286935060209092019160010161570f565b9050610713959293507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009150168252151560051b0138806156eb565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f16936156c6565b9081546157ba816113be565b926157c860405194856106c3565b818452602084019060005260206000206000915b8383106157e95750505050565b6001602081926157f8856156ac565b8152019201920191906157dc565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b906001820180921161584357565b615806565b906003820180921161584357565b9190820180921161584357565b604051906158726040836106c3565b600482527f74657374000000000000000000000000000000000000000000000000000000006020830152565b604051906158ad6060836106c3565b602582527f656d7074790000000000000000000000000000000000000000000000000000006040837f456e636f646564207369676e61747572652073686f756c64206e6f742062652060208201520152565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821161584357565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820191821161584357565b9190820391821161584357565b90615970826107a0565b61597d60405191826106c3565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0614d3882946107a0565b908151811015614a47570160200190565b906159cf60209282815194859201610d61565b0190565b60207fff0000000000000000000000000000000000000000000000000000000000000091615a0a6001959482815194859201610d61565b019160f81b1681520190565b60207fffffffffffffffffffffffffffffffffffffffff00000000000000000000000091615a4d6014959482815194859201610d61565b019160601b1681520190565b60207fff0000000000000000000000000000000000000000000000000000000000000091615a91600296959482815194859201610d61565b01917f2100000000000000000000000000000000000000000000000000000000000000835260f81b166001820152615ad28251809360208685019101610d61565b010190565b919060408382031261022757825167ffffffffffffffff811161022757602091615b0291850161525d565b92015161082c81612059565b90602061082c928181520190610d84565b60405190615b2e6020836106c3565b600080835282815b828110615b4257505050565b602090604051615b5181610636565b6000815260608382015282828501015201615b36565b60408051909190615b7883826106c3565b60018152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018260005b828110615baf57505050565b602090604051615bbe81610636565b6000815260608382015282828501015201615ba3565b60405190615be36060836106c3565b602b82527f696f6e73207374727563740000000000000000000000000000000000000000006040837f496e636f72726563742073697a6520666f7220656d707479207065726d69737360208201520152565b60405190615c446060836106c3565b602282527f63740000000000000000000000000000000000000000000000000000000000006040837f53686f756c642068617665206f6e65207065726d697373696f6e73207374727560208201520152565b60405190615ca56040836106c3565b601382527f5369676e65722073686f756c64206d61746368000000000000000000000000006020830152565b60405190615ce06040836106c3565b601582527f436861696e2049442073686f756c64206d6174636800000000000000000000006020830152565b60405190615d1b6040836106c3565b601882527f56616c7565206c696d69742073686f756c64206d6174636800000000000000006020830152565b60405190615d566040836106c3565b601582527f446561646c696e652073686f756c64206d6174636800000000000000000000006020830152565b60405190615d916040836106c3565b601a82527f53686f756c642068617665206e6f207065726d697373696f6e730000000000006020830152565b60405181548082529092918390615ddd6020830191600052602060002090565b926000905b806007830110615fea57610713945491818110615fae575b818110615f77575b818110615f40575b818110615f09575b818110615ed2575b818110615e9b575b818110615e65575b10615e38575b5003836106c3565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260200138615e30565b602083811b7fffffffff000000000000000000000000000000000000000000000000000000001685529093600191019301615e2a565b604083901b7fffffffff00000000000000000000000000000000000000000000000000000000168452926001906020019301615e22565b606083901b7fffffffff00000000000000000000000000000000000000000000000000000000168452926001906020019301615e1a565b608083901b7fffffffff00000000000000000000000000000000000000000000000000000000168452926001906020019301615e12565b60a083901b7fffffffff00000000000000000000000000000000000000000000000000000000168452926001906020019301615e0a565b60c083901b7fffffffff00000000000000000000000000000000000000000000000000000000168452926001906020019301615e02565b92602081615fe26001938660e01b7fffffffff00000000000000000000000000000000000000000000000000000000169052565b019301615dfa565b91600891935061010060019161615a8754616029838260e01b7fffffffff00000000000000000000000000000000000000000000000000000000169052565b60c081901b7fffffffff0000000000000000000000000000000000000000000000000000000016602084015260a081901b7fffffffff00000000000000000000000000000000000000000000000000000000166040840152608081901b7fffffffff00000000000000000000000000000000000000000000000000000000166060840152606081901b7fffffffff00000000000000000000000000000000000000000000000000000000166080840152604081901b7fffffffff000000000000000000000000000000000000000000000000000000001660a0840152602081901b7fffffffff000000000000000000000000000000000000000000000000000000001660c08401527fffffffff000000000000000000000000000000000000000000000000000000001660e0830152565b019401920185929391615de2565b604051906161758261066e565b60606080836000815260006020820152600060408201526000838201520152565b604051606091906161a783826106c3565b60028152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018260005b8281106161de57505050565b6020906161e9616168565b828285010152016161d2565b90816020910312610227575190565b9073ffffffffffffffffffffffffffffffffffffffff82511681526020820151602082015260c080616245604085015160e0604086015260e0850190610d84565b936060810151606085015260808101511515608085015260a0810151151560a0850152015191015290565b9080602083519182815201916020808360051b8301019401926000915b83831061629c57505050505090565b90919293946020806162d8837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086600196030187528951616204565b9701930193019193929061628d565b6162fd61082c9392604083526040830190616204565b90602081830391015261631381835160ff169052565b60208281015115159082015261010061636661634060408501516101206040860152610120850190616270565b606085015160608501526080850151608085015260a085015184820360a0860152610d84565b9260c081015160c084015260e081015160e08401520151906101008184039101526153f3565b6040519061639b6040836106c3565b601d82527f46697273742063616c6c2073686f756c64206265206578706c696369740000006020830152565b604051906163d66040836106c3565b601482527f46697273742073657373696f6e207369676e65720000000000000000000000006020830152565b604051906164116040836106c3565b601e82527f5365636f6e642063616c6c2073686f756c64206265206578706c6963697400006020830152565b6040519061644c6040836106c3565b601582527f5365636f6e642073657373696f6e207369676e657200000000000000000000006020830152565b604051906164876040836106c3565b601a82527f53657373696f6e207065726d697373696f6e73206c656e6774680000000000006020830152565b604051906164c26060836106c3565b602582527f666f756e640000000000000000000000000000000000000000000000000000006040837f53657373696f6e207065726d697373696f6e207369676e65722030206e6f742060208201520152565b604051906165236060836106c3565b602582527f666f756e640000000000000000000000000000000000000000000000000000006040837f53657373696f6e207065726d697373696f6e207369676e65722031206e6f742060208201520152565b60207fffffffffffffffffffffffffffffffffffffffff000000000000000000000000916165ac6015959482815194859201610d61565b01917f4000000000000000000000000000000000000000000000000000000000000000835260601b1660018201520190565b604051906165ed6040836106c3565b600f82527f4964656e74697479207369676e657200000000000000000000000000000000006020830152565b604051906166286060836106c3565b602382527f756e6400000000000000000000000000000000000000000000000000000000006040837f53657373696f6e207065726d697373696f6e207369676e6572206e6f7420666f60208201520152565b604051906166896060836106c3565b602b82527f69636974207369676e65720000000000000000000000000000000000000000006040837f426c61636b6c697374206e6f7420696e636c75646564207769746820696d706c60208201520152565b604051906166ea6040836106c3565b601982527f496d706c6963697420626c61636b6c697374206c656e677468000000000000006020830152565b604051906167256060836106c3565b602482527f6f756e64000000000000000000000000000000000000000000000000000000006040837f496d706c6963697420626c61636b6c6973742061646472657373206e6f74206660208201520152565b8115616781570690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146158435760010190565b604051906167ec6040836106c3565b601b82527f426c61636b6c6973742073686f756c642062652070726573656e7400000000006020830152565b604051906168276020836106c3565b60008252817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061685760006113be565b019060005b82811061686857505050565b6020906040516168778161066e565b600081526000838201526000604082015260006060820152600060808201528282850101520161685c565b6040805191906168b290836106c3565b60018252817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06168e260016113be565b019060005b8281106168f357505050565b6020906040516169028161066e565b60008152600083820152600060408201526000606082015260006080820152828285010152016168e7565b6040519061693c60c0836106c3565b608782527f30303030303a300000000000000000000000000000000000000000000000000060a0837f307830303030303030303030303030303030303030303030303030303030303060208201527f303030303030303030303030303030303030303030303030303030303030303060408201527f30303a307830303030303030303030303030303030303030303030303030303060608201527f303030303030303030303030303030303030303030303030303030303030303060808201520152565b60085460ff168015616a0f5790565b506040517f667f9d7000000000000000000000000000000000000000000000000000000000815260208180600481017f6661696c65640000000000000000000000000000000000000000000000000000846040830192737109709ecfa91a80626ff3989d68f67f5b1dd12d815201520381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156104d357600091616aac575b50151590565b616ac5915060203d6020116126c3576126b581836106c3565b38616aa6565b60041115616ad557565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60405190616b136040836106c3565b601782527f43616c6c2073686f756c64206265206578706c696369740000000000000000006020830152565b60405190616b4e6040836106c3565b601882527f5265636f76657265642073657373696f6e207369676e657200000000000000006020830152565b60405190616b896040836106c3565b601982527f53657373696f6e207065726d697373696f6e207369676e6572000000000000006020830152565b602090616bcc600195949382815194859201610d61565b017f01000000000000000000000000000000000000000000000000000000000000008152616c038251809360208785019101610d61565b01615ad28251809360208685019101610d61565b60405190616c266080836106c3565b604b82527f6174746573746174696f6e0000000000000000000000000000000000000000006060837f456e636f6465642063616c6c207369676e6174757265732073686f756c64206260208201527f652073686f72746572207768656e2072657573696e67207468652073616d652060408201520152565b7fff00000000000000000000000000000000000000000000000000000000000000600293927f2100000000000000000000000000000000000000000000000000000000000000835260f81b166001820152615ad28251809360208685019101610d61565b906000616d0e9261936c565b906000806040616d8c616dbe8251616d2684826106c3565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152835192839160208301957fb60e72cc00000000000000000000000000000000000000000000000000000000875260248401526064830190610d84565b886044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826106c3565b51906a636f6e736f6c652e6c6f675afa50565b600a6001616d0e9261936c565b600f6005616d0e9261936c565b90616d0e929161936c565b90616e00826113be565b616e0d60405191826106c3565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0616e3b82946113be565b019060005b828110616e4c57505050565b602090604051616e5b8161068a565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c082015282828501015201616e40565b60405190616ea1826106a6565b60008083526060604084018181528185018390526080850183905260a0850182905260c0850183905260e0850192909252610100840190815260016020850152616ee9614c16565b9052616ef56002616df6565b9052565b60405190616f06826106a6565b60008083526060604084018181528185018390526080850183905260a0850182905260c0850183905260e0850192909252610100840190815260016020850152616f4e614c16565b9052616ef56001616df6565b906020616fbe92616f89616f7360006040840151614a5c565b5195616f7e8861810e565b848151910120618a1f565b9460405194859283927f91195a2a000000000000000000000000000000000000000000000000000000008452600484016162e7565b038173__$cb7e46151951eef21e7bab9bc27b60b0a4$__5af480156104d357616fee926000916174255750618a1f565b90604092835190616fff85836106c3565b600f82527f7b226174746573746174696f6e223a000000000000000000000000000000000060208301526170a2617034619f55565b6000617054845173ffffffffffffffffffffffffffffffffffffffff1690565b88517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116600482015292839081906024820190565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156104d35761716a926170e1926170dc926000926173eb575b5061833e565b619f90565b600061711060208501517fffffffff000000000000000000000000000000000000000000000000000000001690565b88517fb11a19e80000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000909116600482015292839081906024820190565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156104d3576171e5926171a8926171a3926000926173eb575061833e565b61a004565b6000878401518851809481927fb11a19e8000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156104d357617261926172239261721e926000926173eb575061833e565b61a078565b600060608401518851809481927fb11a19e8000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156104d3576173139261729f9261729a926000926173eb575061833e565b61a0ec565b9560006172d160206172c06172bb60a088019b8c51519061833e565b61a160565b9951015167ffffffffffffffff1690565b82517f6900a3ae00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015292839081906024820190565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156104d35761735361734e6080926173889a6000968792617410575061833e565b61a1d4565b9301519051809781927f71aad10d00000000000000000000000000000000000000000000000000000000835260048301615b0e565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9384156104d3576173e16173dc6173e1946173d66173d16173d1996173e69761082c9c6000926173eb575061833e565b618d14565b9061833e565b61949f565b61833e565b619513565b6174099192503d806000833e61740181836106c3565b81019061745d565b90386170d6565b6174099192503d8089833e61740181836106c3565b61743e915060203d6020116126c3576126b581836106c3565b386123bb565b906020616fbe92616f89616f7360016040840151614a5c565b9060208282031261022757815167ffffffffffffffff81116102275761082c920161503f565b906107136002603360405180957f7b226964656e746974795369676e6572223a220000000000000000000000000060208301526174c98151809260208686019101610d61565b81017f227d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe28101855201836106c3565b60409061753761082c9493606083526060830190610d84565b908280828403806020850152600d85527f73657373696f6e5f656d707479000000000000000000000000000000000000006020860152019101520190610d84565b6040517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116600482015260008180602481015b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156104d3576175fa60009161764b93839161768c575b50617483565b617617737109709ecfa91a80626ff3989d68f67f5b1dd12d61966e565b60405193849283927f0199a2200000000000000000000000000000000000000000000000000000000084526004840161751e565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156104d357600091617677575090565b61082c91503d806000833e61740181836106c3565b6176a091503d8085833e61740181836106c3565b386175f4565b6040517f56ca623e0000000000000000000000000000000000000000000000000000000081526000600482018190528180602481016175c4565b6040906176f961082c9493606083526060830190610d84565b908280828403806020850152601c85527f73657373696f6e5f656e636f646543616c6c5369676e617475726573000000006020860152019101520190610d84565b600160136178d9928161764b97601261779161777661775b60009b9a619ace565b99737109709ecfa91a80626ff3989d68f67f5b1dd12d619cd0565b92737109709ecfa91a80626ff3989d68f67f5b1dd12d619cd0565b916033604051998a967f7b2273657373696f6e546f706f6c6f6779223a0000000000000000000000000060208901526177d3815180926020868c019101610d61565b87017f2c2263616c6c5369676e617475726573223a00000000000000000000000000008382015261780e825180936020604585019101610d61565b01017f2c226578706c696369745369676e657273223a0000000000000000000000000083820152617849825180936020602585019101610d61565b01017f2c22696d706c696369745369676e657273223a0000000000000000000000000083820152617884825180936020602685019101610d61565b01017f7d000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18101845201826106c3565b6178f6737109709ecfa91a80626ff3989d68f67f5b1dd12d61966e565b60405193849283927f0199a220000000000000000000000000000000000000000000000000000000008452600484016176e0565b61082c9392606092825260208201528160408201520190610d84565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156102275760606000916179af60405194859384937f88b44c8500000000000000000000000000000000000000000000000000000000855260048501908152600260208201528160408201520190610d84565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156104d3576179d55750565b6000610713916106c3565b90600091737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15617a7f5760608391617a4b60405194859384937f88b44c85000000000000000000000000000000000000000000000000000000008552600485019081528660208201528160408201520190610d84565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156104d357617a72575050565b81617a7c916106c3565b50565b8280fd5b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156102275760606000916179af60405194859384937f88b44c8500000000000000000000000000000000000000000000000000000000855260048501908152605e60208201528160408201520190610d84565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156102275760606000916179af60405194859384937f88b44c8500000000000000000000000000000000000000000000000000000000855260048501908152600160208201528160408201520190610d84565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576000916179af60405194859384937f88b44c850000000000000000000000000000000000000000000000000000000085526004850161792a565b60409061082c9392151581528160208201520190610d84565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576179af9160009160405193849283927fa34edc0300000000000000000000000000000000000000000000000000000000845260048401617bab565b9091737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576000916179af73ffffffffffffffffffffffffffffffffffffffff928360405196879586957f2f2769d1000000000000000000000000000000000000000000000000000000008752166004860152166024840152606060448401526064830190610d84565b906107136001603360405180957f7b2273657373696f6e546f706f6c6f6779223a000000000000000000000000006020830152617ce28151809260208686019101610d61565b81017f7d000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18101855201836106c3565b6000617da3617d47604093617c9c565b617e07617d67737109709ecfa91a80626ff3989d68f67f5b1dd12d61966e565b91855195869485947f0199a220000000000000000000000000000000000000000000000000000000008652606060048701526064860190610d84565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152601183527f73657373696f6e5f696d6167654861736800000000000000000000000000000060208401520160448601520190610d84565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156104d35761082c91600091617e43575b50602080825183010191016161f5565b617e5891503d806000833e61740181836106c3565b38617e33565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576000916179af60405194859384937fc1fa1ed000000000000000000000000000000000000000000000000000000000855260048501526024840152606060448401526064830190610d84565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156102275760606000916179af60405194859384937fd9a3c4d200000000000000000000000000000000000000000000000000000000855260048501908152600460208201528160408201520190610d84565b617f389061810e565b6020815191012090565b90816060910312610227578051617f58816127d6565b916040602083015192015190565b6060918201516040517fe341eaa4000000000000000000000000000000000000000000000000000000008152600481019190915260248101919091529081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156104d357600090600091600091618030575b91925061082c9160ff16601c03618025576111fa7f8000000000000000000000000000000000000000000000000000000000000000935b6040519485931790602084019091604092825260208201520190565b6111fa600093618009565b50505061082c60ff61805b601c9360603d606011618068575b61805381836106c3565b810190617f42565b9094508493509150617fd2565b503d618049565b9390927fffffffff00000000000000000000000000000000000000000000000000000000605b989796937fffffffffffffffffffffffffffffffffffffffff0000000000000000000000007fffffff00000000000000000000000000000000000000000000000000000000009660601b1687521660148601526018850152603884015260e81b166058820152616c038251809360208785019101610d61565b61082c73ffffffffffffffffffffffffffffffffffffffff8251166111fa7fffffff00000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000060208601511694604081015190606081015160808201519261821f6008602360a062ffffff88511696015180517fffffffffffffffff00000000000000000000000000000000000000000000000060208251930151916040519b8c9460e81b1660208501526181e68151809260208888019101610d61565b83019160c01b168382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe88101885201866106c3565b6040519889976020890161806f565b6182a49061823a616168565b50618243615b67565b9061824f61396d610724565b60208401526103e860408401526107d06060840152608083019081526182966182766168a2565b61827e610733565b61beef8152905b6020820152825190610a8382614a3a565b506020613c82613c5c610724565b5090565b6182a4906182b4616168565b506182bd615b67565b906182c961396d610724565b60208401526103e860408401526107d06060840152608083019081526182966182f06168a2565b6182f8610733565b61cafe815290618285565b604051906183126040836106c3565b600b82527f7b227369676e6572223a220000000000000000000000000000000000000000006020830152565b610713909291926020604051948261835f8794518092858088019101610d61565b830161837382518093858085019101610d61565b0101037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018452836106c3565b90610713600d6020604051856183c08297518092858086019101610d61565b81017f222c22636861696e4964223a22000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed8101855201836106c3565b9061071360106020604051856184348297518092858086019101610d61565b81017f222c2276616c75654c696d6974223a22000000000000000000000000000000008382015203017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff08101855201836106c3565b90610713600e6020604051856184a88297518092858086019101610d61565b81017f222c22646561646c696e65223a220000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee8101855201836106c3565b90610713601160206040518561851c8297518092858086019101610d61565b81017f222c227065726d697373696f6e73223a5b0000000000000000000000000000008382015203017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff18101855201836106c3565b9061071360016020604051856185908297518092858086019101610d61565b81017f2c000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18101855201836106c3565b9061071360026020604051856186048297518092858086019101610d61565b81017f5d7d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe28101855201836106c3565b618661618303565b6186d36000618684845173ffffffffffffffffffffffffffffffffffffffff1690565b6040517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116600482015291829081906024820190565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156104d35761870c92618707926000926173eb575061833e565b6183a1565b60208201516040517f6900a3ae0000000000000000000000000000000000000000000000000000000081526004810191909152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156104d35761877c92618777926000926173eb575061833e565b618415565b60408281015190517f6900a3ae0000000000000000000000000000000000000000000000000000000081526004810191909152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156104d3576187ec926187e7926000926173eb575061833e565b618489565b6188496000618806606085015167ffffffffffffffff1690565b6040517f6900a3ae00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015291829081906024820190565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156104d3576188829261887d926000926173eb575061833e565b6184fd565b6000905b608083018051518310156188dd576188b860809284600193816188c2575b6173d6916188b29151614a5c565b51619e96565b9201919050618886565b916173d6916188d36188b292618571565b93915091506188a4565b50905061082c91506185e5565b60409061890361082c9493606083526060830190610d84565b908280828403806020850152601485527f73657373696f6e5f6578706c696369745f6164640000000000000000000000006020860152019101520190610d84565b61764b916189ce6001601360009460336040519586927f7b226578706c6963697453657373696f6e223a0000000000000000000000000060208501526189938151809260208688019101610d61565b83017f2c2273657373696f6e546f706f6c6f6779223a0000000000000000000000000083820152617884825180936020604685019101610d61565b6189eb737109709ecfa91a80626ff3989d68f67f5b1dd12d61966e565b60405193849283927f0199a220000000000000000000000000000000000000000000000000000000008452600484016188ea565b6060918201516040517fe341eaa4000000000000000000000000000000000000000000000000000000008152600481019190915260248101919091529081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156104d357618acc91600091600090600092618c7a575b50600090604051809581927fb11a19e8000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156104d357618b3393600092618c5b5750600090604051809581927fb11a19e8000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156104d357618b9f93600093618c3c575b506040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260ff909116600482015292600090849081906024820190565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9283156104d357618bee9361082c936111fa92600092618c17575b50618bee6113a8916113a860405198899760208901906159bc565b7f3a00000000000000000000000000000000000000000000000000000000000000815260010190565b6113a8919250618c34618bee913d806000833e61740181836106c3565b929150618bd3565b6000919350618c54903d8084833e61740181836106c3565b9290618b5f565b6000919250618c73903d8084833e61740181836106c3565b9190618a90565b905060009250618c99915060603d6060116180685761805381836106c3565b9192618a90565b906107136016602060405185618cbf8297518092858086019101610d61565b81017f222c2273657373696f6e5369676e6174757265223a22000000000000000000008382015203017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff68101855201836106c3565b9061071360026020604051856174c98297518092858086019101610d61565b6040805190618d4281836106c3565b601482527f7b227065726d697373696f6e496e646578223a22000000000000000000000000602083015251917f6900a3ae00000000000000000000000000000000000000000000000000000000835260006004840152600083602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156104d357618dd86173d1936173e19261082c966000926173eb575061833e565b618ca0565b6040805190618dec81836106c3565b601482527f7b227065726d697373696f6e496e646578223a22000000000000000000000000602083015251917f6900a3ae00000000000000000000000000000000000000000000000000000000835260016004840152600083602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156104d357618dd86173d1936173e19261082c966000926173eb575061833e565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576179af9160009160405193849283927f7ba0480900000000000000000000000000000000000000000000000000000000845260048401617bab565b600260156107139294939460336040519687927f7b2273657373696f6e546f706f6c6f6779223a000000000000000000000000006020850152618f248151809260208688019101610d61565b83017f2c22626c61636b6c69737441646472657373223a22000000000000000000000083820152618f5f825180936020604885019101610d61565b01017f227d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe28101855201836106c3565b606090618fcb61082c949383835283830190610d84565b90604083828403806020850152602485527f73657373696f6e5f696d706c696369745f616464426c61636b6c69737441646460208601527f726573730000000000000000000000000000000000000000000000000000000083860152019101520190610d84565b6040517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff929092166004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156104d35761764b926000926190b2928492619103575b50618ed8565b6190cf737109709ecfa91a80626ff3989d68f67f5b1dd12d61966e565b60405193849283927f0199a22000000000000000000000000000000000000000000000000000000000845260048401618fb4565b6191189192503d8086833e61740181836106c3565b90386190ac565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576179af9160009160405193849283927f4db19e7e0000000000000000000000000000000000000000000000000000000084521515600484015260016024840152606060448401526064830190610d84565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576000916179af60405194859384937f4db19e7e0000000000000000000000000000000000000000000000000000000085521515600485015215156024840152606060448401526064830190610d84565b6000619227619207604093617c9c565b61764b617d67737109709ecfa91a80626ff3989d68f67f5b1dd12d61966e565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152601683527f73657373696f6e5f656e636f6465546f706f6c6f67790000000000000000000060208401520160448601520190610d84565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576000916179af60405194859384937f65d5c1350000000000000000000000000000000000000000000000000000000085526004850161792a565b156192e857565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374645574696c7320626f756e642875696e743235362c75696e743235362c7560448201527f696e74323536293a204d6178206973206c657373207468616e206d696e2e00006064820152fd5b60009061937b848411156192e1565b82811091821580619495575b61948d5761939d6193988587615959565b615835565b92600383111580619484575b619475577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8310158061946b575b61945a5785831115619418575050906193f3846193f893615959565b616777565b918215619412575061082c9161940d91615856565b6158ff565b91505090565b959492919095619429575b50505050565b839495506193f39061943b9394615959565b91821561941257506194509161939891615959565b9038808080619423565b5050905061082c9291501990615959565b50821984116193d7565b505091905061082c9250615856565b508284116193a9565b509250505090565b5084821115619387565b9061071360156020604051856194be8297518092858086019101610d61565b81017f2c2273657373696f6e5369676e6174757265223a2200000000000000000000008382015203017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff58101855201836106c3565b9061071360176020604051856195328297518092858086019101610d61565b81017f222c226964656e746974795369676e6174757265223a220000000000000000008382015203017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff78101855201836106c3565b1561958e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e76616c696420706f72742072616e676500000000000000000000000000006044820152fd5b908160008237016000815290565b602061071392949361964182604051978561961e8a9751809285808b019101610d61565b860161963282518093858085019101610d61565b01019182815194859201610d61565b01037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018452836106c3565b73ffffffffffffffffffffffffffffffffffffffff166040517fc1978d1f000000000000000000000000000000000000000000000000000000008152602081806196ed6004820160609060208152601460208201527f5345515f53444b5f5250435f4d494e5f504f525400000000000000000000000060408201520190565b0381855afa9081156104d357600091619a00575b50604051907fc1978d1f0000000000000000000000000000000000000000000000000000000082526020828061976c6004820160609060208152601460208201527f5345515f53444b5f5250435f4d41585f504f525400000000000000000000000060408201520190565b0381865afa9182156104d35761980992619803916000916199e1575b5061979583821015619587565b827fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a65480156199b3575b6197fd916197cf619398926167b0565b936197f8857fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a655565b615959565b90616777565b90615856565b906040517ff877cb19000000000000000000000000000000000000000000000000000000008152600081806198736004820160609060208152601660208201527f5345515f53444b5f5250435f55524c5f5052454649580000000000000000000060408201520190565b0381855afa9081156104d357600091619998575b506040517ff877cb1900000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5345515f53444b5f5250435f55524c5f53554646495800000000000000000000604482015292600084606481865afa9283156104d35761993d94600094619977575b509060009160405180809781947f6900a3ae000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa9081156104d35761082c9360009261995a575b506195fa565b6199709192503d806000833e61740181836106c3565b9038619954565b600092919450619990903d8085833e61740181836106c3565b9390916198ff565b6199ad91503d806000833e61740181836106c3565b38619887565b506193986197fd916197cf60405160208101906199d4816111fa84366195ec565b51902092505091506197bf565b6199fa915060203d6020116126c3576126b581836106c3565b38619788565b619a19915060203d6020116126c3576126b581836106c3565b38619701565b60405190619a2e6040836106c3565b600282527f5b5d0000000000000000000000000000000000000000000000000000000000006020830152565b906107136001602060405185619a798297518092858086019101610d61565b81017f5d000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18101855201836106c3565b90815115619b8e57604051619ae46040826106c3565b600181527f5b0000000000000000000000000000000000000000000000000000000000000060208201526000905b8351821015619b8157619b3090619b298386614a5c565b519061833e565b9083517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111615843578110619b6d575b60010190619b12565b90619b79600191618571565b919050619b64565b905061082c919250619a5a565b905061082c619a1f565b60405190619ba76040836106c3565b600282527f5b220000000000000000000000000000000000000000000000000000000000006020830152565b60016107139193929360206040519582619bf68894518092858088019101610d61565b8301619c0a82518093858085019101610d61565b01017f22000000000000000000000000000000000000000000000000000000000000008152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18101855201836106c3565b906107136002602060405185619c7b8297518092858086019101610d61565b81017f2c220000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe28101855201836106c3565b9190805115619ddc57619ce1619b98565b6000905b8251821015619dce57619d50906000619d016114f28587614a5c565b6040517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116600482015292839081906024820190565b038173ffffffffffffffffffffffffffffffffffffffff8a165afa9081156104d357619d8492600092619db3575b50619bd3565b90619d8f83516158ff565b8110619d9f575b60010190619ce5565b90619dab600191619c5c565b919050619d96565b619dc791923d8091833e61740181836106c3565b9038619d7e565b91505061082c919250619a5a565b50905061082c619a1f565b60405190619df66040836106c3565b600b82527f7b22746172676574223a220000000000000000000000000000000000000000006020830152565b90610713600b602060405185619e418297518092858086019101610d61565b81017f222c2272756c6573223a5b0000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb8101855201836106c3565b619e9e619de7565b619ec16000618684845173ffffffffffffffffffffffffffffffffffffffff1690565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156104d357619efa92619ef5926000926173eb575061833e565b619e22565b6000905b602083018051518310156188dd57619f306020928460019381619f3a575b6173d691619f2a9151614a5c565b5161a453565b9201919050619efe565b916173d691619f4b619f2a92618571565b9391509150619f1c565b60405190619f646040836106c3565b601382527f7b22617070726f7665645369676e6572223a22000000000000000000000000006020830152565b906107136012602060405185619faf8297518092858086019101610d61565b81017f222c226964656e7469747954797065223a2200000000000000000000000000008382015203017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff28101855201836106c3565b90610713601060206040518561a0238297518092858086019101610d61565b81017f222c2269737375657248617368223a22000000000000000000000000000000008382015203017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff08101855201836106c3565b90610713601260206040518561a0978297518092858086019101610d61565b81017f222c2261756469656e636548617368223a2200000000000000000000000000008382015203017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff28101855201836106c3565b90610713601d60206040518561a10b8297518092858086019101610d61565b81017f222c226175746844617461223a7b22726564697265637455726c223a220000008382015203017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8101855201836106c3565b90610713600e60206040518561a17f8297518092858086019101610d61565b81017f222c226973737565644174223a220000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee8101855201836106c3565b90610713601660206040518561a1f38297518092858086019101610d61565b81017f227d2c226170706c69636174696f6e44617461223a22000000000000000000008382015203017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff68101855201836106c3565b6040519061a2576040836106c3565b600e82527f7b2263756d756c6174697665223a0000000000000000000000000000000000006020830152565b90610713600d60206040518561a2a28297518092858086019101610d61565b81017f2c226f7065726174696f6e223a000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed8101855201836106c3565b90610713600a60206040518561a3168297518092858086019101610d61565b81017f2c2276616c7565223a22000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea8101855201836106c3565b90610713600b60206040518561a38a8297518092858086019101610d61565b81017f222c226f6666736574223a0000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb8101855201836106c3565b90610713600960206040518561a3fe8297518092858086019101610d61565b81017f2c226d61736b223a2200000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe98101855201836106c3565b61a45b61a248565b61a4a4600061a46a8451151590565b6040517f71dce7da000000000000000000000000000000000000000000000000000000008152901515600482015291829081906024820190565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156104d35761a4dd9261a4d8926000926173eb575061833e565b61a283565b61a5356000602084015161a4f081616acb565b61a4f981616acb565b6040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260ff909116600482015291829081906024820190565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156104d35761a56e9261a569926000926173eb575061833e565b61a2f7565b60408281015190517fb11a19e80000000000000000000000000000000000000000000000000000000081526004810191909152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156104d35761a5de9261a5d9926000926173eb575061833e565b61a36b565b60608201516040517f6900a3ae0000000000000000000000000000000000000000000000000000000081526004810191909152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156104d35761a65561a65060809261a69095600095869261a6c4575061833e565b61a3df565b930151604051809381927fb11a19e8000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156104d35761082c926173d1926000926173eb575061833e565b6174099192503d8088833e61740181836106c356fe60808060405234601557611d1b908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c80635c9be12c146100375763829b88491461003257600080fd5b61056b565b346100bb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bb5760043567ffffffffffffffff81116100bb5761009b61008c6100af9236906004016100c0565b906100956106e8565b506108e4565b6040519283926040845260408401906104bb565b90151560208301520390f35b600080fd5b9181601f840112156100bb5782359167ffffffffffffffff83116100bb57602083818601950101116100bb57565b9080602083519182815201916020808360051b8301019401926000915b83831061011a57505050505090565b90919293947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828203018352855190608060a082019273ffffffffffffffffffffffffffffffffffffffff8151168352602081015160208401526040810151604084015267ffffffffffffffff606082015116606084015201519160a06080830152825180915260c0820190602060c08260051b85010194019260005b8281106101d85750505050506020806001929701930193019193929061010b565b90919293947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4083820301855285516020606081604085019373ffffffffffffffffffffffffffffffffffffffff81511686520151936040838201528451809452019201906000905b80821061025f57505050602080600192970195019101929190926101b7565b909192835180511515825260208101519060048210156102ae5782608060a092602094856001970152604081015160408401526060810151606084015201516080820152019401920190610240565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60005b8381106102f05750506000910152565b81810151838201526020016102e0565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361033c815180928187528780880191016102dd565b0116010190565b9080602083519182815201916020808360051b8301019401926000915b83831061036f57505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085600195030186526060895180511515835273ffffffffffffffffffffffffffffffffffffffff84820151168484015260ff604082015116604084015201516080606083015273ffffffffffffffffffffffffffffffffffffffff81511660808301527fffffffff00000000000000000000000000000000000000000000000000000000838201511660a0830152604081015160c0830152606081015160e083015260a0610458608083015160c0610100860152610140850190610300565b910151916101207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80828403019101528267ffffffffffffffff816104a58551604086526040860190610300565b9401511691015297019301930191939290610360565b91909160a08301928151815273ffffffffffffffffffffffffffffffffffffffff602083015116602082015260408201519360a060408301528451809152602060c0830195019060005b81811061053f57505050608061052b61053c9495606085015184820360608601526100ee565b920151906080818403910152610343565b90565b825173ffffffffffffffffffffffffffffffffffffffff16875260209687019690920191600101610505565b346100bb5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bb5760043567ffffffffffffffff81116100bb576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126100bb5760243567ffffffffffffffff81116100bb57610626916106006106129236906004016100c0565b916106096106e8565b50600401611016565b6040519182916020835260208301906104bb565b0390f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810190811067ffffffffffffffff82111761067557604052565b61062a565b6040810190811067ffffffffffffffff82111761067557604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761067557604052565b604051906106e660e083610696565b565b604051906106f582610659565b6060608083600081526000602082015282604082015282808201520152565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b67ffffffffffffffff81116106755760051b60200190565b6040519061076882610659565b60606080836000815260006020820152600060408201526000838201520152565b9061079382610743565b6107a06040519182610696565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06107ce8294610743565b019060005b8281106107df57505050565b6020906107ea61075b565b828285010152016107d3565b909392938483116100bb5784116100bb578101920390565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461083b5760010190565b610714565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518210156108835760209160051b010190565b610840565b9190820180921161083b57565b9061089f82610743565b6108ac6040519182610696565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06108da8294610743565b0190602036910137565b916108ed6106e8565b60009384908190610900605e8704610789565b91606085019283525b8681106109195750505152929150565b8181013560fc81901c97916001019060f81c818915610d4a575060018914610d185760028914610b4e5760038914610a59575060048814610984577f0ad9979000000000000000000000000000000000000000000000000000000000600052600488905260245b6000fd5b90919293949596506020860173ffffffffffffffffffffffffffffffffffffffff6109c3825173ffffffffffffffffffffffffffffffffffffffff1690565b16610a2f578382013560601c81526014909101906109ff906109fa905b5173ffffffffffffffffffffffffffffffffffffffff1690565b6114f3565b86518015610a295790610a1a91600052602052604060002090565b86525b95949392919095610909565b50610a1a565b7f9e5c658b0000000000000000000000000000000000000000000000000000000060005260046000fd5b98909192939495969750610b2457600f60019816600f8114610b13575b8190610a8181610895565b604089019081528a60005b838110610ad45750505050610aa682610aac9285876107f6565b9061147f565b86518015610ace5790610ac791600052602052604060002090565b8652610a1d565b50610ac7565b610b0b958881013560601c906014019690610af083865161086f565b9073ffffffffffffffffffffffffffffffffffffffff169052565b018b90610a8c565b50600281019083013560f01c610a76565b7feb6252040000000000000000000000000000000000000000000000000000000060005260046000fd5b610bb1969850610ba9610bc092600f610bba939c96979a95989c169087929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b979088610888565b809787876107f6565b906108e4565b93909593610d01575b6020860173ffffffffffffffffffffffffffffffffffffffff610c00825173ffffffffffffffffffffffffffffffffffffffff1690565b16610c7e575b5060005b60608701518051821015610c4d5790610c46610c288260019461086f565b519b8a51610c358261080e565b9d610c40838361086f565b5261086f565b5001610c0a565b505092909695939197948651801515600014610c7757610ac7915190600052602052604060002090565b5051610ac7565b60208901610cbc610ca3825173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b610a2f57610ce1610cfb925173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff169052565b38610c06565b91610b245760019160408601516040890152610bc9565b508551969750949593949293919290916020820191840135908015610ace5790610ac791600052602052604060002090565b92939495969798505050610d5c61075b565b8184018035606090811c8352601482013560208401526034820135604084015260549091013560c01c9082015294610d98605c8301848661136e565b8093916080890152610dab9185876107f6565b610db491611424565b8751610ded9291908015610df35790610dd591600052602052604060002090565b88528551610de28261080e565b97610c40838361086f565b50610a1d565b50610dd5565b60405190610e068261067a565b6000602083606081520152565b6040519060c0820182811067ffffffffffffffff8211176106755760405281600081526000602082015260006040820152600060608201526060608082015260a0610e5c610df9565b910152565b90610e6b82610743565b610e786040519182610696565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610ea68294610743565b019060005b828110610eb757505050565b602090610ec2610e13565b82828501015201610eab565b6040513d6000823e3d90fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156100bb570180359067ffffffffffffffff82116100bb57602001918160051b360383136100bb57565b604051906080820182811067ffffffffffffffff82111761067557604052816000815260006020820152600060408201526060610e5c610e13565b90610f7382610743565b610f806040519182610696565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610fae8294610743565b019060005b828110610fbf57505050565b602090610fca610f2e565b82828501015201610fb3565b91908110156108835760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21813603018212156100bb570190565b909162ffffff926110256106e8565b50600091813560e81c600395169061105661104e610bba611046858a610888565b8985886107f6565b939097610888565b602087019473ffffffffffffffffffffffffffffffffffffffff61108e875173ffffffffffffffffffffffffffffffffffffffff1690565b161561132c5750600181019392919083013560f81c906110ad82610e61565b9560005b83811061128a5750505015159081611281575b50610b245760408401936110d88582610eda565b9490506110e485610f69565b95608088019687526000945b86861061110257505050505050505090565b61111e61110d610f2e565b918681013560f81c91600190910190565b6080821615158352969082511561126157607f16845181101561123757600061115d6111a5996111506020948961086f565b5160608701525b89611679565b9b90929161117e8b611179896111738d84610eda565b90610fd6565b61185c565b92604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa15611232576111e0610ca36000516109e06020860191829073ffffffffffffffffffffffffffffffffffffffff169052565b15611201576111f9816001938b5190610c40838361086f565b5001946110f0565b7fc1e84ed6000000000000000000000000000000000000000000000000000000006000526109806024906000600452565b610ece565b7fbd8ba84d0000000000000000000000000000000000000000000000000000000060005260046000fd5b600061115d6111a59961127c602094604088019060ff169052565b611157565b905015386110c4565b6112b290602060006112a96112bf9a6112a1610e13565b50878b6115bc565b8a959195611679565b9c90929161117e886116bc565b838052039060015afa156112325760005173ffffffffffffffffffffffffffffffffffffffff611306610ca3865173ffffffffffffffffffffffffffffffffffffffff1690565b911603610a2f5760019161131a828b61086f565b52611325818a61086f565b50016110b1565b807f9e5c658b0000000000000000000000000000000000000000000000000000000060049252fd5b604051906113618261067a565b6060602083600081520152565b60018301939281013560f81c61138381610743565b926113916040519485610696565b8184527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06113be83610743565b0160005b8181106114055750506000925b8284106113de57505050509190565b909192956113ef60019184846119ed565b97906113fb828861086f565b52019291906113cf565b60209061141495939495611354565b82828901015201939291936113c2565b9061147960016020926040519381859282840197600089526021850137820101828101600081525003017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610696565b51902090565b90611479600160209260405193818592828401977f030000000000000000000000000000000000000000000000000000000000000089526021850137820101828101600081525003017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610696565b6040517fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208201927f0400000000000000000000000000000000000000000000000000000000000000845260601b16602182015260158152611479603582610696565b92919267ffffffffffffffff8211610675576040519161159f601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200184610696565b8294818452818301116100bb578281602093846000960137010152565b61166e9193929361166862ffffff61163c60186115d7610e13565b987fffffffff000000000000000000000000000000000000000000000000000000006014888301803560601c8d5201351660208b01520160208682013591019060408a015260208682013591019060608a01528560039092919283013560e81c920190565b91169061165e61165761164f8484610888565b8387896107f6565b3691611557565b6080890152610888565b91611b3b565b929060a08201529190565b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff811161083b5791565b73ffffffffffffffffffffffffffffffffffffffff815116906114797fffffffff000000000000000000000000000000000000000000000000000000006020830151166117df7fffffff00000000000000000000000000000000000000000000000000000000006040850151946060810151906080810151916117ce6008602360a062ffffff87511695015180517fffffffffffffffff00000000000000000000000000000000000000000000000060208251930151916040519a8b9460e81b16602085015261179581518092602088880191016102dd565b83019160c01b168382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8810187520185610696565b604051978896602088019a8b611b86565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610696565b801515036100bb57565b359073ffffffffffffffffffffffffffffffffffffffff821682036100bb57565b9080601f830112156100bb5781602061053c93359101611557565b35906106e68261180b565b90602081013561186b8161180b565b1561193b576000915b608060608301359201359160e0823603126100bb576118916106d7565b9161189b81611815565b83526020810135602084015260408101359067ffffffffffffffff82116100bb576114799360c0611913926118d66117df9536908301611836565b6040840152606081013560608401526118f160808201611851565b608084015261190260a08201611851565b60a0840152013560c0820152611c3e565b6040519485936020850197889290916080949284526020840152604083015260608201520190565b4691611874565b9061194c82610743565b6119596040519182610696565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06119878294610743565b019060005b82811061199857505050565b6020906040516119a781610659565b600081526000838201526000604082015260006060820152600060808201528282850101520161198c565b60ff1660048110156102ae5790565b60048210156102ae5752565b60ff93929150611a42611a32611a15611a04611354565b948481013560601c91601490910190565b73ffffffffffffffffffffffffffffffffffffffff909116855290565b8281013560f81c91600190910190565b9416611a4d81611942565b602084019081526000925b828410611a6757505050509190565b90919295611b20611b02611ae4611aba611ad78b6020611ad0611ac8611ac38c611a9f60019c8e60019092919283013560f81c920190565b989091611ab2888f85161515925161086f565b519015159052565b60011c607f1690565b6119d2565b928b5161086f565b51016119e1565b8581013591602090910190565b906040611af28c895161086f565b5101528481013591602090910190565b906060611b108b885161086f565b5101528381013591602090910190565b97906080611b2f83875161086f565b51015201929190611a58565b9291611b45610df9565b9060038101908581013560e81c0194600386019182811161083b57611657600393611b7392600b97856107f6565b83528501013560c01c6020820152920190565b9390927fffffffff00000000000000000000000000000000000000000000000000000000605b989796937fffffffffffffffffffffffffffffffffffffffff0000000000000000000000007fffffff00000000000000000000000000000000000000000000000000000000009660601b1687521660148601526018850152603884015260e81b166058820152611c2582518093602087850191016102dd565b01611c3982518093602086850191016102dd565b010190565b73ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e083015261010082015261010081526114796101208261069656fea2646970667358221220474eb22f2d975d649058726f10301e48ffeb84fde2eea9a19771fee2273982c764736f6c634300081c0033a264697066735822122090f59642ae6ba499e69e4647de68c9d8bf2c9ca66c072bcf1c6c656f76b4ce5364736f6c634300081c0033","sourceMap":"1255:35660:81:-:0;;;;;;;3166:4:5;1255:35660:81;;3166:4:5;1255:35660:81;;;3166:4:5;1255:35660:81;3166:4:5;1255:35660:81;;1087:4:16;1255:35660:81;;;1087:4:16;1255:35660:81;;;;;;;;;;;","linkReferences":{"src/extensions/sessions/SessionSig.sol":{"SessionSig":[{"start":8942,"length":20},{"start":15620,"length":20},{"start":28663,"length":20}]}}},"deployedBytecode":{"object":"0x6080604052600436101561001257600080fd5b60003560e01c80630a9254e4146102175780631ed7831c146102125780632055231e1461020d5780632ade3880146102085780633149c39114610203578063362a8093146101fe57806339455a80146101f95780633b94ef6b146101f45780633e5e3c23146101ef5780633f7286f4146101ea57806341628221146101e55780634cbbb2bf146101e057806366d9a9a0146101db5780637785689c146101d657806385226c81146101d1578063852ff1cb146101cc578063916a17c6146101c75780639963cece146101c2578063ae7e3e13146101bd578063b0464fdc146101b8578063b3f89b83146101b3578063b5508aa9146101ae578063b6f1231b146101a9578063ba414fa6146101a4578063d86f3b501461019f578063d96eb4d21461019a578063dfb3501e14610195578063e20c9f7114610190578063ec492c6a1461018b578063fa4dd4a614610186578063fa7626d4146101815763fca5ddea1461017c57600080fd5b6147e8565b6147a7565b61464d565b614292565b6141e7565b61402a565b613ecd565b613b33565b613af0565b61389b565b6137f0565b613523565b61344a565b612d8a565b612b17565b612a3e565b6127e1565b61272b565b612063565b611f8f565b611da9565b611d4a565b611c9f565b611bf4565b611987565b6116a4565b611486565b610fbc565b610ee3565b61097a565b61054c565b61022c565b600091031261022757565b600080fd5b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757604051611d3680820182811067ffffffffffffffff8211176104f757829161a6da833903906000f080156104d3576102d4907fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00601f549260081b16911617601f55565b6040517f7404f1d200000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f73657373696f6e0000000000000000000000000000000000000000000000000060448201526080816064816000737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156104d3576103bb916000916104d8575b5060609073ffffffffffffffffffffffffffffffffffffffff8151167fffffffffffffffffffffffff00000000000000000000000000000000000000006020541617602055602081015160215560408101516022550151602355565b6040517f7404f1d200000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f6964656e7469747900000000000000000000000000000000000000000000000060448201526080816064816000737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156104d3576104a2916000916104a4575b5060609073ffffffffffffffffffffffffffffffffffffffff8151167fffffffffffffffffffffffff00000000000000000000000000000000000000006024541617602455602081015160255560408101516026550151602755565b005b6104c6915060803d6080116104cc575b6104be81836106c3565b810190614950565b38610446565b503d6104b4565b614939565b6104f1915060803d6080116104cc576104be81836106c3565b3861035f565b610607565b602060408183019282815284518094520192019060005b8181106105205750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101610513565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102275760405180602060165491828152019060166000527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b51242899060005b8181106105db576105d7856105cb818703826106c3565b604051918291826104fc565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016105b4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff8211176104f757604052565b6080810190811067ffffffffffffffff8211176104f757604052565b60a0810190811067ffffffffffffffff8211176104f757604052565b60e0810190811067ffffffffffffffff8211176104f757604052565b610120810190811067ffffffffffffffff8211176104f757604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176104f757604052565b6040519061071360c0836106c3565b565b6040519061071360e0836106c3565b6040519061071360a0836106c3565b604051906107136040836106c3565b73ffffffffffffffffffffffffffffffffffffffff81160361022757565b359061071382610742565b7fffffffff0000000000000000000000000000000000000000000000000000000081160361022757565b35906107138261076b565b67ffffffffffffffff81116104f757601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926107e6826107a0565b916107f460405193846106c3565b829481845281830111610227578281602093846000960137010152565b9080601f830112156102275781602061082c933591016107da565b90565b67ffffffffffffffff81160361022757565b919091604081840312610227576040519061085b82610636565b8193813567ffffffffffffffff81116102275782019181601f840112156102275761088f60209392838580953591016107da565b845201359161089d8361082f565b0152565b91909160c081840312610227576108b6610704565b926108c082610760565b84526108ce60208301610795565b60208501526040820135604085015260608201356060850152608082013567ffffffffffffffff81116102275781610907918401610811565b608085015260a082013567ffffffffffffffff81116102275761092a9201610841565b60a0830152565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112610227576004359067ffffffffffffffff82116102275761082c916004016108a1565b346102275761098836610931565b6109c46109aa60205473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff168252565b610a2560a0820180516109d5614995565b90526020610a13610a066109f58385510167ffffffffffffffff90511690565b67ffffffffffffffff429116616d02565b67ffffffffffffffff1690565b9151019067ffffffffffffffff169052565b610c3c6000610a32616e94565b610ad7610a3d610715565b61beef8152607b6020820152610a516149d0565b60408201528360608201528360808201528360a0820152600160c0820152610a896040840191825190610a8382614a3a565b52614a3a565b50610a92610715565b61cafe8152906101c86020830152610aa8614a70565b60408301528460608301528460808301528460a0830152600160c08301525190610ad182614a4c565b52614a4c565b50610b2a610ae3614aab565b94610aff81610af0614b91565b610af8614bd4565b9086616f5a565b610b0887614a3a565b52610b1286614a3a565b50610b1b614b91565b610b23614bd4565b9084617444565b610b3385614a4c565b52610b3d84614a4c565b50610bc6610b68610b6360245473ffffffffffffffffffffffffffffffffffffffff1690565b617578565b94610b71614c16565b610b79614c32565b91610bc0610b9c60205473ffffffffffffffffffffffffffffffffffffffff1690565b610ba585614a3a565b9073ffffffffffffffffffffffffffffffffffffffff169052565b8761773a565b90610c06610bed601f5473ffffffffffffffffffffffffffffffffffffffff9060081c1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b906040518095819482937f829b88490000000000000000000000000000000000000000000000000000000084526004840161543d565b03915afa9081156104d357600091610d40575b506080810190610c69825151610c63615524565b90617946565b600090610c8b60205473ffffffffffffffffffffffffffffffffffffffff1690565b915b83518051821015610cfa5790610cf4610ce56060610cad84600196614a5c565b51610cc9610cbb8251151590565b610cc361555f565b90617bc4565b01515173ffffffffffffffffffffffffffffffffffffffff1690565b85610cee61559a565b91617c1a565b01610c8d565b6104a283610d2f88610d19604084015151610d136155d5565b906179e0565b610d2a606084015151610d13615610565b617d37565b905190610d3a615671565b91617e5e565b610d5b913d8091833e610d5381836106c3565b8101906152f7565b38610c4f565b60005b838110610d745750506000910152565b8181015183820152602001610d64565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093610dc081518092818752878088019101610d61565b0116010190565b9080602083519182815201916020808360051b8301019401926000915b838310610df357505050505090565b9091929394602080610e2f837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086600196030187528951610d84565b97019301930191939290610de4565b602081016020825282518091526040820191602060408360051b8301019401926000915b838310610e7157505050505090565b9091929394602080610ed4837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190610dc7565b97019301930191939290610e62565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757601e54610f1e816113be565b90610f2c60405192836106c3565b80825260208201601e6000527f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e3506000915b838310610f7257604051806105d78782610e3e565b60026020600192604051610f8581610636565b73ffffffffffffffffffffffffffffffffffffffff8654168152610faa8587016157ae565b83820152815201920192019190610f5d565b346102275760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102275760043567ffffffffffffffff81116102275761100b9036906004016108a1565b60243561107a6110686044359261105461103a60205473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff168652565b60a0850151611061614995565b9052616dd1565b9161107283615835565b607f91616deb565b9161109d610b6360245473ffffffffffffffffffffffffffffffffffffffff1690565b926111446110a9616ef9565b946110f96110b5610715565b61beef8152607b60208201526110c9615863565b60408201526000606082015260006080820152600060a0820152600160c0820152604088015190610a8382614a3a565b50611102614c32565b9061112e61112560205473ffffffffffffffffffffffffffffffffffffffff1690565b610ba584614a3a565b611136614b04565b61113e614c16565b9161773a565b93611158855161115261589e565b90617ec6565b61116a61116586516158ff565b615966565b9260005b84518110156111c157806111ad6111876001938a6159ab565b517fff000000000000000000000000000000000000000000000000000000000000001690565b60001a6111ba82886159ab565b530161116e565b508390856111fa6112266111e56111d785617f2f565b6111df614bd4565b90617f66565b9460405192839160ff861690602084016159d3565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826106c3565b926000925b82841061137c576040518661127a8261124e60808c1760ff168a602084016159d3565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018452836106c3565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527fbd8ba84d0000000000000000000000000000000000000000000000000000000060048201529160008380602481015b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19182156104d35761133e93600093611362575b50601f54610c069060081c73ffffffffffffffffffffffffffffffffffffffff16610bed565b03915afa80156104d35761134e57005b6104a2903d806000833e610d5381836106c3565b8061137085611376936106c3565b8061021c565b84611318565b909192936113a86113b46001926111fa6113ae6113988761810e565b60405195869460208601906159bc565b906159bc565b876159bc565b940192919061122b565b67ffffffffffffffff81116104f75760051b60200190565b9080601f830112156102275781356113ed816113be565b926113fb60405194856106c3565b81845260208085019260051b82010192831161022757602001905b8282106114235750505090565b60208091833561143281610742565b815201910190611416565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112610227576004359067ffffffffffffffff82116102275761082c916004016113d6565b34610227576114943661143d565b600581511161169b575b6114a6614c16565b6114ae614c16565b6114d26114bc845160ff1690565b603017916111fa604051938492602084016159d3565b6000905b83518210156115275760019061151f61150c6114f28588614a5c565b5173ffffffffffffffffffffffffffffffffffffffff1690565b916111fa60405193849260208401615a16565b9101906114d6565b6115636111fa91611550856111fa611540845160ff1690565b9360405194859360208501615a59565b6040519283916113a860208401826159bc565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527feb6252040000000000000000000000000000000000000000000000000000000060048201529060008280602481015b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156104d35761165b92600092611687575b50601f546116279060081c73ffffffffffffffffffffffffffffffffffffffff16610bed565b60405180809581947f5c9be12c00000000000000000000000000000000000000000000000000000000835260048301615b0e565b03915afa80156104d35761166b57005b6104a2903d806000833e61167f81836106c3565b810190615ad7565b8061137084611695936106c3565b83611601565b6005815261149e565b346102275760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610227576004356116df81610742565b6024359061187360443591606435936116f78561082f565b6000611701615b1f565b61180761170c610724565b73ffffffffffffffffffffffffffffffffffffffff861681526111fa89611789611776602085019489865260408101978d89526117576060830195869067ffffffffffffffff169052565b60808201525173ffffffffffffffffffffffffffffffffffffffff1690565b93519551915167ffffffffffffffff1690565b9060405195869460208601927fffffffffffffffff000000000000000000000000000000000000000000000000927fffffffffffffffffffffffffffffffffffffffff000000000000000000000000605e96936000875260601b1660018601526015850152603584015260c01b1660558201526000605d8201520190565b61181a8151611814615bd4565b90617a83565b601f5461183f9060081c73ffffffffffffffffffffffffffffffffffffffff16610bed565b60405180809781947f5c9be12c00000000000000000000000000000000000000000000000000000000835260048301615b0e565b03915afa9485156104d35761191e608095611906611959946118e860606104a29b61195f9a60009161196b575b5001976118b78951516118b1615c35565b90617aec565b6118df6118c48a51614a3a565b515173ffffffffffffffffffffffffffffffffffffffff1690565b90610cee615c96565b60206118f48851614a3a565b51015190611900615cd1565b91617b55565b60406119128651614a3a565b51015190611900615d0c565b611940610a0660606119308651614a3a565b51015167ffffffffffffffff1690565b67ffffffffffffffff611951615d47565b921690617b55565b51614a3a565b51015151610d13615d82565b61198091503d806000833e61167f81836106c3565b50386118a0565b346102275761199536610931565b6119b76109aa60205473ffffffffffffffffffffffffffffffffffffffff1690565b6119c860a0820180516109d5614995565b6119d06176a6565b906119d9616ef9565b91611a296119e5610715565b61beef8152607b60208201526119f9615863565b60408201526000606082015260006080820152600060a0820152600160c0820152604085015190610a8382614a3a565b506040517f7404f1d200000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6174746573746174696f6e00000000000000000000000000000000000000000060448201526080816064816000737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19283156104d357611afd93611ac992600091611bd5575b50611ac3614b91565b86616f5a565b611ad1614b38565b90611adb82614a3a565b52611ae581614a3a565b50611aee614c16565b90611af7614c16565b9261773a565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f9e5c658b0000000000000000000000000000000000000000000000000000000060048201529160008380602481015b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19182156104d35761133e93600093611bc15750601f54610c069060081c73ffffffffffffffffffffffffffffffffffffffff16610bed565b8061137085611bcf936106c3565b38611318565b611bee915060803d6080116104cc576104be81836106c3565b38611aba565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102275760405180602060185491828152019060186000527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e9060005b818110611c73576105d7856105cb818703826106c3565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201611c5c565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102275760405180602060175491828152019060176000527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c159060005b818110611d1e576105d7856105cb818703826106c3565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201611d07565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757611d816176a6565b611afd611d8c616ef9565b91611d986119e5610715565b50611da1614b04565b611aee614c16565b3461022757611db73661143d565b6005815111611e92575b611dc9614c16565b9060005b60028110611e4b5782737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527feb6252040000000000000000000000000000000000000000000000000000000060048201529060008280602481016115d4565b9091611e5b6114bc845160ff1690565b916000905b8051821015611e875760018094611e7d61150c6114f28686614a5c565b9201919350611e60565b916001915001611dcd565b60058152611dc1565b906020808351928381520192019060005b818110611eb95750505090565b82517fffffffff0000000000000000000000000000000000000000000000000000000016845260209384019390920191600101611eac565b602081016020825282518091526040820191602060408360051b8301019401926000915b838310611f2457505050505090565b9091929394602080611f80837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0866001960301875289519083611f708351604084526040840190610d84565b9201519084818403910152611e9b565b97019301930191939290611f15565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757601b54611fca816113be565b90611fd860405192836106c3565b80825260208201601b6000527f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc16000915b83831061201e57604051806105d78782611ef1565b6002602060019260405161203181610636565b61203a866156ac565b8152612047858701615dbd565b83820152815201920192019190612009565b8015150361022757565b346102275760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102275760043561209e81612059565b6040517f7404f1d200000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f73657373696f6e3200000000000000000000000000000000000000000000000060448201526080816064816000737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156104d3576000916126fb575b5061212f616e94565b91612138610715565b61beef8152607b602082015261214c6149d0565b60408201526000606082015260006080820152600060a0820152600160c08201526121816040850191825190610a8382614a3a565b506121cf61218d610715565b61cafe81526101c860208201526121a2614a70565b60408201526000606082015260006080820152600060a0820152600160c0820152825190610ad182614a4c565b506121d8616196565b9180156126f157612203465b60205473ffffffffffffffffffffffffffffffffffffffff169061822e565b61220c84614a3a565b5261221683614a3a565b50156126e75761223f465b845173ffffffffffffffffffffffffffffffffffffffff16906182a8565b61224883614a4c565b5261225282614a4c565b50612275610b6360245473ffffffffffffffffffffffffffffffffffffffff1690565b926000935b83518510156122a9576122a160019161229c6122968888614a5c565b51618659565b618944565b94019361227a565b9061230e866122b6614aab565b9473__$cb7e46151951eef21e7bab9bc27b60b0a4$__6020836122d98451614a3a565b5160405196879283927f91195a2a000000000000000000000000000000000000000000000000000000008452600484016162e7565b0381845af49081156104d3576123626020936123486123438795612398996000916126ca575b5061233d614b91565b90618a1f565b618d33565b6123518b614a3a565b5261235b8a614a3a565b5051614a4c565b516040518096819482937f91195a2a000000000000000000000000000000000000000000000000000000008452600484016162e7565b03915af480156104d3576124a3956123c66123c18661244694600097889161269b575b50618a1f565b618ddd565b6123cf82614a4c565b526123d981614a4c565b506123e2614c72565b61240d61240460205473ffffffffffffffffffffffffffffffffffffffff1690565b610ba583614a3a565b61243761242e875173ffffffffffffffffffffffffffffffffffffffff1690565b610ba583614a4c565b61243f614c16565b918761773a565b9061246d610bed601f5473ffffffffffffffffffffffffffffffffffffffff9060081c1690565b906040518097819482937f829b88490000000000000000000000000000000000000000000000000000000084526004840161543d565b03915afa9283156104d357600093612680575b50608083016124c9815151610c63615524565b6124ee6124e06124d98351614a3a565b5151151590565b6124e861638c565b90618e82565b61258d61256d6020612507612523826125078751614a3a565b51015173ffffffffffffffffffffffffffffffffffffffff1690565b9461254f612545845473ffffffffffffffffffffffffffffffffffffffff1690565b9687610cee6163c7565b61256761255f6124d98351614a4c565b6124e8616402565b51614a4c565b835173ffffffffffffffffffffffffffffffffffffffff16610cee61643d565b61259e604085015151610d136155d5565b60608401906125b1825151610c63616478565b6000946000906125d660009373ffffffffffffffffffffffffffffffffffffffff1690565b925b84518051821015612660576125f4610bed6118c4848894614a5c565b14612657575b6126086118c4828751614a5c565b73ffffffffffffffffffffffffffffffffffffffff61263e610bed895173ffffffffffffffffffffffffffffffffffffffff1690565b91161461264e575b6001016125d8565b60019250612646565b600197506125fa565b6104a283610d2f8a610d2a886126788f610cc36164b3565b610cc3616514565b61269491933d8091833e610d5381836106c3565b91836124b6565b6126bd915060203d6020116126c3575b6126b581836106c3565b8101906161f5565b8b6123bb565b503d6126ab565b6126e19150883d8a116126c3576126b581836106c3565b8d612334565b61223f6000612221565b61220360006121e4565b612714915060803d6080116104cc576104be81836106c3565b38612126565b90602061082c928181520190610dc7565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757601a54612766816113be565b9061277460405192836106c3565b808252601a60009081527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b8383106127b957604051806105d7878261271a565b6001602081926127c8856156ac565b8152019201920191906127a4565b60ff81160361022757565b346102275760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102275761124e6128766128df61283961283360ff60043561282d816127d6565b16616dde565b60ff1690565b6040517ff00000000000000000000000000000000000000000000000000000000000000060fc83901b166020820152926128a29084906021820190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018552846106c3565b6040517f0ad9979000000000000000000000000000000000000000000000000000000000602082015260ff90911660248201529283906044820190565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561022757600061293392604051809481927ff28dceb300000000000000000000000000000000000000000000000000000000835260048301615b0e565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156104d35761165b926000926129855750601f546116279060081c73ffffffffffffffffffffffffffffffffffffffff16610bed565b8061137084612993936106c3565b38611601565b602081016020825282518091526040820191602060408360051b8301019401926000915b8383106129cc57505050505090565b9091929394602080612a2f837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190611e9b565b970193019301919392906129bd565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757601d54612a79816113be565b90612a8760405192836106c3565b80825260208201601d6000527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f6000915b838310612acd57604051806105d78782612999565b60026020600192604051612ae081610636565b73ffffffffffffffffffffffffffffffffffffffff8654168152612b05858701615dbd565b83820152815201920192019190612ab8565b346102275760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757600435612b5281610742565b60243590612b5f82610742565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517f4c63e56200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821615156004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156104d357612d75575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517f4c63e56200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831615156004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156104d357612ceb926111fa92612cd992612d60575b50604051928391602083017fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006015927f4000000000000000000000000000000000000000000000000000000000000000835260601b1660018201520190565b6111fa60405193849260208401616575565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527f9e5c658b000000000000000000000000000000000000000000000000000000006004820152906000828060248101612933565b806113706000612d6f936106c3565b38612c7a565b806113706000612d84936106c3565b38612be6565b346102275760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102275760043567ffffffffffffffff811161022757612dd99036906004016113d6565b60443590602435612de983612059565b60643567ffffffffffffffff811161022757612e099036906004016113d6565b6014835111613441575b90926000935b8351851015612fac57612e32610bed6114f28787614a5c565b1515737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529015156004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156104d357612f97575b5060005b8451811015612f8b57808603612ec2575b600101612ea9565b612ecf6114f28787614a5c565b73ffffffffffffffffffffffffffffffffffffffff612ef4610bed6114f2858a614a5c565b9116141590737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529115156004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156104d357600192612f76575b509050612eba565b806113706000612f85936106c3565b38612f6e565b50600190940193612e19565b806113706000612fa6936106c3565b38612ea5565b926005835111613438575b90926000935b83518510156130b75760005b84518110156130ab57808603612fe2575b600101612fc9565b612fef6114f28787614a5c565b73ffffffffffffffffffffffffffffffffffffffff613014610bed6114f2858a614a5c565b9116141590737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529115156004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156104d357600192613096575b509050612fda565b8061137060006130a5936106c3565b8761308e565b50600190940193612fbd565b91906130c590825190616d02565b906130ce616168565b936130f1610b6360245473ffffffffffffffffffffffffffffffffffffffff1690565b926000935b83518510156131405761313860019161312f6131156114f28989614a5c565b73ffffffffffffffffffffffffffffffffffffffff168a52565b61229c89618659565b9401936130f6565b83866000925b8551841015613170576131686001916131626114f2878a614a5c565b90619032565b930192613146565b819350916131a692819582528260001461342c5761319260ff60015b16614cf3565b92613405575b6131a0614b04565b9061773a565b926131b4845161115261589e565b6131c1611165855161592c565b9160005b83518110156131fa57806131e66111876131e0600194615848565b896159ab565b60001a6131f382876159ab565b53016131c5565b50909260006132299361183f610bed601f5473ffffffffffffffffffffffffffffffffffffffff9060081c1690565b03915afa80156104d35760009384916133e6575b506132856132646020869796015173ffffffffffffffffffffffffffffffffffffffff1690565b60245473ffffffffffffffffffffffffffffffffffffffff16610cee6165de565b606085019361329a8551518451611900616478565b6000935b835185101561332c57600092835b87518051821015613319576118c4826132c492614a5c565b73ffffffffffffffffffffffffffffffffffffffff6132e9610bed6114f28b8b614a5c565b9116146132f8576001016132ac565b5092509360019061330f829893985b610cc3616619565b019395909561329e565b5050929461330f60019296989398613307565b8681849261333657005b60409261334b9161334561667a565b9161918b565b0161335c81515183516119006166db565b60005b82518110156104a257600092835b835180518610156133d6576114f28661338592614a5c565b73ffffffffffffffffffffffffffffffffffffffff6133aa610bed6114f28787614a5c565b9116146133bd576001809501945061336d565b5092506001906133d0825b610cc3616716565b0161335f565b506001929194506133d0906133c8565b90506133fc91933d8091833e61167f81836106c3565b9290928561323d565b613427610b9c60205473ffffffffffffffffffffffffffffffffffffffff1690565b613198565b61319260ff600061318c565b60058352612fb7565b60148352612e13565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757601c54613485816113be565b9061349360405192836106c3565b80825260208201601c6000527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2116000915b8383106134d957604051806105d78782612999565b600260206001926040516134ec81610636565b73ffffffffffffffffffffffffffffffffffffffff8654168152613511858701615dbd565b838201528152019201920191906134c4565b34610227576135313661143d565b80511515737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517f4c63e5620000000000000000000000000000000000000000000000000000000081529015156004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156104d3576137db575b508051600f8110156137ca57506135bb614cb2565b9060005b82518110156135f5576001906135ef6135e56114f26135df865185616777565b86614a5c565b610ba58387614a5c565b016135bf565b50505b6136028151614cf3565b90600090815b81518110156136b2576000805b848110613656575b50906001911561362e575b01613608565b61365161363e6114f28386614a5c565b610ba561364a876167b0565b9688614a5c565b613628565b94919290936136686114f28584614a5c565b73ffffffffffffffffffffffffffffffffffffffff61368d610bed6114f28a88614a5c565b9116146136a35791949193909291600101613615565b9194509092509060018061361d565b505081526136d8610b6360245473ffffffffffffffffffffffffffffffffffffffff1690565b6000905b8251821015613700576136f86001916131626114f28587614a5c565b9101906136dc565b6137676000613742859361373d613715614c32565b610ba561373760205473ffffffffffffffffffffffffffffffffffffffff1690565b91614a3a565b6191f7565b601f546116279060081c73ffffffffffffffffffffffffffffffffffffffff16610bed565b03915afa80156104d3576104a2926000926000926137a3575b506040613795929301515190516119006166db565b61379d6167dd565b9061911f565b6040935061379592506137c0903d806000833e61167f81836106c3565b9390939250613780565b60ff10156135f85760ff81526135f8565b8061137060006137ea936106c3565b386135a6565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102275760195461382b816113be565b9061383960405192836106c3565b808252601960009081527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b83831061387e57604051806105d7878261271a565b60016020819261388d856156ac565b815201920192019190613869565b346102275760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610227576004356138d681612059565b613a536139f86138e4616ef9565b926139346138f0610715565b61beef8152607b6020820152613904615863565b60408201526000606082015260006080820152600060a0820152600160c0820152604086015190610a8382614a3a565b5060205473ffffffffffffffffffffffffffffffffffffffff169015613ae6576139cc465b613961615b67565b9061398961396d610724565b73ffffffffffffffffffffffffffffffffffffffff9095168552565b60208401526103e860408401526107d06060840152608083019081526139ad616818565b906139b6610733565b61beef81529160208301525190610a8382614a3a565b5061229c6139f2610b6360245473ffffffffffffffffffffffffffffffffffffffff1690565b91618659565b613a0361234361692d565b613a0b614b38565b90613a1582614a3a565b52613a1f81614a3a565b50613a28614c32565b90613a4b61112560205473ffffffffffffffffffffffffffffffffffffffff1690565b611af7614c16565b6040517fc1e84ed6000000000000000000000000000000000000000000000000000000006020820152600060248201529190613a928360448101612876565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576000611b6f93604051809581927ff28dceb300000000000000000000000000000000000000000000000000000000835260048301615b0e565b6139cc6000613959565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610227576020613b29616a00565b6040519015158152f35b346102275760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757613ccb600435613b7181612059565b613b79616ef9565b602081613c96613c8f613b8a610715565b61beef815295607b85880152613b9e615863565b60408801526000606088015260006080880152600060a0880152600160c0880152613bd36040850197885190610a8382614a3a565b50845473ffffffffffffffffffffffffffffffffffffffff169015613ec3576139cc465b613bff615b67565b90613c0b61396d610724565b838801526103e860408401526107d0606084015260808301908152613c4f613c316168a2565b613c39610733565b61beef81529089820152825190610a8382614a3a565b5086613c82613c5c610724565b926000845260008385015260006040850152600060608501526000608085015251614a3a565b51015190610a8382614a3a565b9451614a3a565b5160405195869283927f91195a2a000000000000000000000000000000000000000000000000000000008452600484016162e7565b038173__$cb7e46151951eef21e7bab9bc27b60b0a4$__5af49081156104d357613d60613d0a612343600094613dbd978691613ea4575061233d614b91565b613d12614b38565b90613d1c82614a3a565b52613d2681614a3a565b50613d2f614c32565b613d5161240460205473ffffffffffffffffffffffffffffffffffffffff1690565b613d59614c16565b918661773a565b90613d87610bed601f5473ffffffffffffffffffffffffffffffffffffffff9060081c1690565b906040518096819482937f829b88490000000000000000000000000000000000000000000000000000000084526004840161543d565b03915afa9081156104d3576104a292600092613e85575b50610d2f90610d2a613e276020613df6608087016119598151516118b1615524565b51613e0c613e048251151590565b6124e8616b04565b015173ffffffffffffffffffffffffffffffffffffffff1690565b613e53613e4960205473ffffffffffffffffffffffffffffffffffffffff1690565b9182610cee616b3f565b613e64604086015151610d136155d5565b613e7c6118c4606087016119598151516118b1616478565b90610cee616b7a565b613e9d90610d2f92933d8091833e610d5381836106c3565b9190613dd4565b613ebd915060203d6020116126c3576126b581836106c3565b38612334565b6139cc6000613bf7565b3461022757613edb36610931565b613efd6109aa60205473ffffffffffffffffffffffffffffffffffffffff1690565b613f0e60a0820180516109d5614995565b613f30610b6360245473ffffffffffffffffffffffffffffffffffffffff1690565b613f3b611d8c616ef9565b91613f49835161115261589e565b613f5661116584516158ff565b9060005b8251811015613f875780613f73611187600193886159ab565b60001a613f8082866159ab565b5301613f5a565b5082613fb58361124e613fa5613f9f6111d787617f2f565b9561810e565b9460405195869360208501616bb5565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517fc31eb0e00000000000000000000000000000000000000000000000000000000081527feb6252040000000000000000000000000000000000000000000000000000000060048201529160008380602481016112eb565b346102275761415d61403b36610931565b61405d6109aa60205473ffffffffffffffffffffffffffffffffffffffff1690565b61406e60a0820180516109d5614995565b60006140e061407b616ef9565b926140c8614087610715565b61beef8152607b602082015261409b615863565b60408201528460608201528460808201528460a0820152600160c0820152604086015190610a8382614a3a565b506140d1614b91565b6140d9614bd4565b9085616f5a565b91613d60614106610b6360245473ffffffffffffffffffffffffffffffffffffffff1690565b9361410f614b38565b9061411982614a3a565b5261412381614a3a565b5061412c614c16565b614134614c32565b91614157610b9c60205473ffffffffffffffffffffffffffffffffffffffff1690565b8661773a565b03915afa9081156104d3576104a2926000926141c8575b50610d2f906141b76141966060610cad608087016119598151516118b1615524565b60205473ffffffffffffffffffffffffffffffffffffffff16610cee61559a565b610d19604084015151610d136155d5565b6141e090610d2f92933d8091833e610d5381836106c3565b9190614174565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102275760405180602060155491828152019060156000527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4759060005b818110614266576105d7856105cb818703826106c3565b825473ffffffffffffffffffffffffffffffffffffffff1684526020909301926001928301920161424f565b346102275760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102275760043567ffffffffffffffff8111610227576142e19036906004016108a1565b60243567ffffffffffffffff8111610227576143019036906004016108a1565b906040517f7404f1d20000000000000000000000000000000000000000000000000000000081526080818061436b6004820160609060208152600860208201527f73657373696f6e3200000000000000000000000000000000000000000000000060408201520190565b03816000737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156104d3576104a29361461a9260009261462c575b506143d96143bf60205473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff168552565b6143fa6109aa835173ffffffffffffffffffffffffffffffffffffffff1690565b60a0840151614407614995565b905260a0810151614416614995565b905261450a614423616e94565b916144c361442f610715565b61beef8152607b60208201526144436149d0565b60408201526000606082015260006080820152600060a0820152600160c08201526144786040860191825190610a8382614a3a565b50614481610715565b61cafe8152906101c86020830152614497614a70565b60408301526000606083015260006080830152600060a0830152600160c08301525190610ad182614a4c565b506144fa6144e2876144d3614b91565b6144db614bd4565b9087616f5a565b966144eb614b91565b6144f3614bd4565b9086617444565b9284614504614bd4565b91617444565b9361459d614530610b6360245473ffffffffffffffffffffffffffffffffffffffff1690565b92614539614c32565b9061455c61112560205473ffffffffffffffffffffffffffffffffffffffff1690565b614564614aab565b908461456f83614a3a565b5261457982614a3a565b5061458382614a4c565b5261458d81614a4c565b50614596614c16565b908561773a565b946145e16145d86145ac614c72565b956114f26145cf60205473ffffffffffffffffffffffffffffffffffffffff1690565b610ba589614a3a565b610ba586614a4c565b6145e9614aab565b916145f383614a3a565b526145fd82614a3a565b5061460782614a4c565b5261461181614a4c565b5061113e614c16565b90519051614626616c17565b9161928b565b61464691925060803d6080116104cc576104be81836106c3565b903861439c565b346102275761465b36610931565b61467d6109aa60205473ffffffffffffffffffffffffffffffffffffffff1690565b61468e60a0820180516109d5614995565b6146b0610b6360245473ffffffffffffffffffffffffffffffffffffffff1690565b906146b9616ef9565b916146c56119e5610715565b506040517f7404f1d200000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6174746573746174696f6e00000000000000000000000000000000000000000060448201526080816064816000737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19283156104d357611afd9361475e92600091611bd55750611ac3614b91565b90614767614b38565b9161477183614a3a565b5261477b82614a3a565b50614784614c32565b91611136610b9c60205473ffffffffffffffffffffffffffffffffffffffff1690565b346102275760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261022757602060ff601f54166040519015158152f35b346102275760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102275760043561482381610742565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576040517f4c63e56200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82161515600482015290600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156104d357614919612ceb926111fa926111fa95612d605750604051928391602083017fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006015927f4000000000000000000000000000000000000000000000000000000000000000835260601b1660018201520190565b611550614927825160ff1690565b6111fa60405193849260208401616c9e565b6040513d6000823e3d90fd5b519061071382610742565b908160809103126102275760606040519161496a83610652565b805161497581610742565b835260208101516020840152604081015160408401520151606082015290565b604051906149a46040836106c3565b601382527f68747470733a2f2f6578616d706c652e636f6d000000000000000000000000006020830152565b604051906149df6040836106c3565b600582527f74657374310000000000000000000000000000000000000000000000000000006020830152565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805115614a475760200190565b614a0b565b805160011015614a475760400190565b8051821015614a475760209160051b010190565b60405190614a7f6040836106c3565b600582527f74657374320000000000000000000000000000000000000000000000000000006020830152565b60405160609190614abc83826106c3565b60028152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018260005b828110614af357505050565b806060602080938501015201614ae7565b60405190614b136020836106c3565b600080835282815b828110614b2757505050565b806060602080938501015201614b1b565b60408051909190614b4983826106c3565b60018152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018260005b828110614b8057505050565b806060602080938501015201614b74565b60405190614b9e82610652565b8173ffffffffffffffffffffffffffffffffffffffff602054168152602154602082015260225460408201526060602354910152565b60405190614be182610652565b60245473ffffffffffffffffffffffffffffffffffffffff168252602554602083015260265460408301526027546060830152565b60405190614c256020836106c3565b6000808352366020840137565b60408051909190614c4383826106c3565b60018152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001366020840137565b60405160609190614c8383826106c3565b60028152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001366020840137565b6040516102009190614cc483826106c3565b600f8152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001366020840137565b90614cfd826113be565b614d0a60405191826106c3565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0614d3882946113be565b0190602036910137565b9080601f83011215610227578151614d59816113be565b92614d6760405194856106c3565b81845260208085019260051b82010192831161022757602001905b828210614d8f5750505090565b602080918351614d9e81610742565b815201910190614d82565b9080601f8301121561022757815191614dc1836113be565b92614dcf60405194856106c3565b80845260208085019160051b830101918383116102275760208101915b838310614dfb57505050505090565b825167ffffffffffffffff811161022757820160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082880301126102275760405190614e478261066e565b6020810151614e5581610742565b825260408101516020830152606081015160408301526080810151614e798161082f565b606083015260a081015167ffffffffffffffff811161022757602091010186601f8201121561022757805190614eae826113be565b91614ebc60405193846106c3565b80835260208084019160051b830101918983116102275760208101915b838310614ef757505050506080820152815260209283019201614dec565b825167ffffffffffffffff81116102275782016040818d037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001126102275760405190614f4382610636565b6020810151614f5181610742565b8252604081015167ffffffffffffffff81116102275760209101018c601f820112156102275780518d614f83826113be565b92614f9160405194856106c3565b828452602060a0818601940282010191821161022757602001918f5b828410614fcd575050505091816020938480940152815201920191614ed9565b8360a09103126102275760405190614fe48261066e565b8351614fef81612059565b8252602084015190600482101561022757826020928360a09501526040860151604082015260608601516060820152608086015160808201528152019201918f614fad565b51906107138261076b565b81601f82011215610227576020815191019061505a816107a0565b9261506860405194856106c3565b818452818301116102275761082c916020840190610d61565b919091604081840312610227576040519061509b82610636565b819381519167ffffffffffffffff8311610227576150bf602093928493830161503f565b845201519161089d8361082f565b9080601f83011215610227578151916150e5836113be565b926150f360405194856106c3565b80845260208085019160051b830101918383116102275760208101915b83831061511f57505050505090565b825167ffffffffffffffff81116102275782019060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08388030112610227576040519161516c83610652565b602081015161517a81612059565b8352604081015161518a81610742565b6020840152606081015161519d816127d6565b6040840152608081015167ffffffffffffffff81116102275760209101019060c082880312610227576151ce610704565b926151d883614945565b84526151e660208401615034565b60208501526040830151604085015260608301516060850152608083015167ffffffffffffffff8111610227578861521f91850161503f565b608085015260a08301519367ffffffffffffffff85116102275761524889602096879601615081565b60a08201526060820152815201920191615110565b91909160a08184031261022757615272610724565b928151845261528360208301614945565b6020850152604082015167ffffffffffffffff811161022757816152a8918401614d42565b6040850152606082015167ffffffffffffffff811161022757816152cd918401614da9565b6060850152608082015167ffffffffffffffff8111610227576152f092016150cd565b6080830152565b9060208282031261022757815167ffffffffffffffff81116102275761082c920161525d565b9080602083519182815201916020808360051b8301019401926000915b83831061534957505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c0806153bc604085015160e0604086015260e0850190610d84565b936060810151606085015260808101511515608085015260a0810151151560a085015201519101529701930193019193929061533a565b906020808351928381520192019060005b8181106154115750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101615404565b909161551661082c936040845261545a60408501825160ff169052565b6020810151151560608501526101006154cf6154876040840151610120608089015261016088019061531d565b606084015160a0880152608084015160c088015260a08401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08883030160e0890152610d84565b9160c08101518287015260e081015161012087015201517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0858303016101408601526153f3565b916020818403910152610d84565b604051906155336040836106c3565b601682527f43616c6c207369676e617475726573206c656e677468000000000000000000006020830152565b6040519061556e6040836106c3565b601782527f43616c6c2073686f756c6420626520696d706c696369740000000000000000006020830152565b604051906155a96040836106c3565b601c82527f5265636f7665726564206174746573746174696f6e207369676e6572000000006020830152565b604051906155e46040836106c3565b601982527f426c61636b6c6973742073686f756c6420626520656d707479000000000000006020830152565b6040519061561f6060836106c3565b602382527f70747900000000000000000000000000000000000000000000000000000000006040837f53657373696f6e207065726d697373696f6e732073686f756c6420626520656d60208201520152565b604051906156806040836106c3565b600a82527f496d6167652068617368000000000000000000000000000000000000000000006020830152565b9060405191600081548060011c92600182169182156157a4575b60208510831461577757848752869392602085019291811561573b57506001146156f9575b5050610713925003836106c3565b61570a919250600052602060002090565b906000915b848310615724575061071393500138806156eb565b80548284015286935060209092019160010161570f565b9050610713959293507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009150168252151560051b0138806156eb565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f16936156c6565b9081546157ba816113be565b926157c860405194856106c3565b818452602084019060005260206000206000915b8383106157e95750505050565b6001602081926157f8856156ac565b8152019201920191906157dc565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b906001820180921161584357565b615806565b906003820180921161584357565b9190820180921161584357565b604051906158726040836106c3565b600482527f74657374000000000000000000000000000000000000000000000000000000006020830152565b604051906158ad6060836106c3565b602582527f656d7074790000000000000000000000000000000000000000000000000000006040837f456e636f646564207369676e61747572652073686f756c64206e6f742062652060208201520152565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821161584357565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820191821161584357565b9190820391821161584357565b90615970826107a0565b61597d60405191826106c3565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0614d3882946107a0565b908151811015614a47570160200190565b906159cf60209282815194859201610d61565b0190565b60207fff0000000000000000000000000000000000000000000000000000000000000091615a0a6001959482815194859201610d61565b019160f81b1681520190565b60207fffffffffffffffffffffffffffffffffffffffff00000000000000000000000091615a4d6014959482815194859201610d61565b019160601b1681520190565b60207fff0000000000000000000000000000000000000000000000000000000000000091615a91600296959482815194859201610d61565b01917f2100000000000000000000000000000000000000000000000000000000000000835260f81b166001820152615ad28251809360208685019101610d61565b010190565b919060408382031261022757825167ffffffffffffffff811161022757602091615b0291850161525d565b92015161082c81612059565b90602061082c928181520190610d84565b60405190615b2e6020836106c3565b600080835282815b828110615b4257505050565b602090604051615b5181610636565b6000815260608382015282828501015201615b36565b60408051909190615b7883826106c3565b60018152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018260005b828110615baf57505050565b602090604051615bbe81610636565b6000815260608382015282828501015201615ba3565b60405190615be36060836106c3565b602b82527f696f6e73207374727563740000000000000000000000000000000000000000006040837f496e636f72726563742073697a6520666f7220656d707479207065726d69737360208201520152565b60405190615c446060836106c3565b602282527f63740000000000000000000000000000000000000000000000000000000000006040837f53686f756c642068617665206f6e65207065726d697373696f6e73207374727560208201520152565b60405190615ca56040836106c3565b601382527f5369676e65722073686f756c64206d61746368000000000000000000000000006020830152565b60405190615ce06040836106c3565b601582527f436861696e2049442073686f756c64206d6174636800000000000000000000006020830152565b60405190615d1b6040836106c3565b601882527f56616c7565206c696d69742073686f756c64206d6174636800000000000000006020830152565b60405190615d566040836106c3565b601582527f446561646c696e652073686f756c64206d6174636800000000000000000000006020830152565b60405190615d916040836106c3565b601a82527f53686f756c642068617665206e6f207065726d697373696f6e730000000000006020830152565b60405181548082529092918390615ddd6020830191600052602060002090565b926000905b806007830110615fea57610713945491818110615fae575b818110615f77575b818110615f40575b818110615f09575b818110615ed2575b818110615e9b575b818110615e65575b10615e38575b5003836106c3565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260200138615e30565b602083811b7fffffffff000000000000000000000000000000000000000000000000000000001685529093600191019301615e2a565b604083901b7fffffffff00000000000000000000000000000000000000000000000000000000168452926001906020019301615e22565b606083901b7fffffffff00000000000000000000000000000000000000000000000000000000168452926001906020019301615e1a565b608083901b7fffffffff00000000000000000000000000000000000000000000000000000000168452926001906020019301615e12565b60a083901b7fffffffff00000000000000000000000000000000000000000000000000000000168452926001906020019301615e0a565b60c083901b7fffffffff00000000000000000000000000000000000000000000000000000000168452926001906020019301615e02565b92602081615fe26001938660e01b7fffffffff00000000000000000000000000000000000000000000000000000000169052565b019301615dfa565b91600891935061010060019161615a8754616029838260e01b7fffffffff00000000000000000000000000000000000000000000000000000000169052565b60c081901b7fffffffff0000000000000000000000000000000000000000000000000000000016602084015260a081901b7fffffffff00000000000000000000000000000000000000000000000000000000166040840152608081901b7fffffffff00000000000000000000000000000000000000000000000000000000166060840152606081901b7fffffffff00000000000000000000000000000000000000000000000000000000166080840152604081901b7fffffffff000000000000000000000000000000000000000000000000000000001660a0840152602081901b7fffffffff000000000000000000000000000000000000000000000000000000001660c08401527fffffffff000000000000000000000000000000000000000000000000000000001660e0830152565b019401920185929391615de2565b604051906161758261066e565b60606080836000815260006020820152600060408201526000838201520152565b604051606091906161a783826106c3565b60028152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018260005b8281106161de57505050565b6020906161e9616168565b828285010152016161d2565b90816020910312610227575190565b9073ffffffffffffffffffffffffffffffffffffffff82511681526020820151602082015260c080616245604085015160e0604086015260e0850190610d84565b936060810151606085015260808101511515608085015260a0810151151560a0850152015191015290565b9080602083519182815201916020808360051b8301019401926000915b83831061629c57505050505090565b90919293946020806162d8837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086600196030187528951616204565b9701930193019193929061628d565b6162fd61082c9392604083526040830190616204565b90602081830391015261631381835160ff169052565b60208281015115159082015261010061636661634060408501516101206040860152610120850190616270565b606085015160608501526080850151608085015260a085015184820360a0860152610d84565b9260c081015160c084015260e081015160e08401520151906101008184039101526153f3565b6040519061639b6040836106c3565b601d82527f46697273742063616c6c2073686f756c64206265206578706c696369740000006020830152565b604051906163d66040836106c3565b601482527f46697273742073657373696f6e207369676e65720000000000000000000000006020830152565b604051906164116040836106c3565b601e82527f5365636f6e642063616c6c2073686f756c64206265206578706c6963697400006020830152565b6040519061644c6040836106c3565b601582527f5365636f6e642073657373696f6e207369676e657200000000000000000000006020830152565b604051906164876040836106c3565b601a82527f53657373696f6e207065726d697373696f6e73206c656e6774680000000000006020830152565b604051906164c26060836106c3565b602582527f666f756e640000000000000000000000000000000000000000000000000000006040837f53657373696f6e207065726d697373696f6e207369676e65722030206e6f742060208201520152565b604051906165236060836106c3565b602582527f666f756e640000000000000000000000000000000000000000000000000000006040837f53657373696f6e207065726d697373696f6e207369676e65722031206e6f742060208201520152565b60207fffffffffffffffffffffffffffffffffffffffff000000000000000000000000916165ac6015959482815194859201610d61565b01917f4000000000000000000000000000000000000000000000000000000000000000835260601b1660018201520190565b604051906165ed6040836106c3565b600f82527f4964656e74697479207369676e657200000000000000000000000000000000006020830152565b604051906166286060836106c3565b602382527f756e6400000000000000000000000000000000000000000000000000000000006040837f53657373696f6e207065726d697373696f6e207369676e6572206e6f7420666f60208201520152565b604051906166896060836106c3565b602b82527f69636974207369676e65720000000000000000000000000000000000000000006040837f426c61636b6c697374206e6f7420696e636c75646564207769746820696d706c60208201520152565b604051906166ea6040836106c3565b601982527f496d706c6963697420626c61636b6c697374206c656e677468000000000000006020830152565b604051906167256060836106c3565b602482527f6f756e64000000000000000000000000000000000000000000000000000000006040837f496d706c6963697420626c61636b6c6973742061646472657373206e6f74206660208201520152565b8115616781570690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146158435760010190565b604051906167ec6040836106c3565b601b82527f426c61636b6c6973742073686f756c642062652070726573656e7400000000006020830152565b604051906168276020836106c3565b60008252817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061685760006113be565b019060005b82811061686857505050565b6020906040516168778161066e565b600081526000838201526000604082015260006060820152600060808201528282850101520161685c565b6040805191906168b290836106c3565b60018252817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06168e260016113be565b019060005b8281106168f357505050565b6020906040516169028161066e565b60008152600083820152600060408201526000606082015260006080820152828285010152016168e7565b6040519061693c60c0836106c3565b608782527f30303030303a300000000000000000000000000000000000000000000000000060a0837f307830303030303030303030303030303030303030303030303030303030303060208201527f303030303030303030303030303030303030303030303030303030303030303060408201527f30303a307830303030303030303030303030303030303030303030303030303060608201527f303030303030303030303030303030303030303030303030303030303030303060808201520152565b60085460ff168015616a0f5790565b506040517f667f9d7000000000000000000000000000000000000000000000000000000000815260208180600481017f6661696c65640000000000000000000000000000000000000000000000000000846040830192737109709ecfa91a80626ff3989d68f67f5b1dd12d815201520381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156104d357600091616aac575b50151590565b616ac5915060203d6020116126c3576126b581836106c3565b38616aa6565b60041115616ad557565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60405190616b136040836106c3565b601782527f43616c6c2073686f756c64206265206578706c696369740000000000000000006020830152565b60405190616b4e6040836106c3565b601882527f5265636f76657265642073657373696f6e207369676e657200000000000000006020830152565b60405190616b896040836106c3565b601982527f53657373696f6e207065726d697373696f6e207369676e6572000000000000006020830152565b602090616bcc600195949382815194859201610d61565b017f01000000000000000000000000000000000000000000000000000000000000008152616c038251809360208785019101610d61565b01615ad28251809360208685019101610d61565b60405190616c266080836106c3565b604b82527f6174746573746174696f6e0000000000000000000000000000000000000000006060837f456e636f6465642063616c6c207369676e6174757265732073686f756c64206260208201527f652073686f72746572207768656e2072657573696e67207468652073616d652060408201520152565b7fff00000000000000000000000000000000000000000000000000000000000000600293927f2100000000000000000000000000000000000000000000000000000000000000835260f81b166001820152615ad28251809360208685019101610d61565b906000616d0e9261936c565b906000806040616d8c616dbe8251616d2684826106c3565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152835192839160208301957fb60e72cc00000000000000000000000000000000000000000000000000000000875260248401526064830190610d84565b886044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826106c3565b51906a636f6e736f6c652e6c6f675afa50565b600a6001616d0e9261936c565b600f6005616d0e9261936c565b90616d0e929161936c565b90616e00826113be565b616e0d60405191826106c3565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0616e3b82946113be565b019060005b828110616e4c57505050565b602090604051616e5b8161068a565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c082015282828501015201616e40565b60405190616ea1826106a6565b60008083526060604084018181528185018390526080850183905260a0850182905260c0850183905260e0850192909252610100840190815260016020850152616ee9614c16565b9052616ef56002616df6565b9052565b60405190616f06826106a6565b60008083526060604084018181528185018390526080850183905260a0850182905260c0850183905260e0850192909252610100840190815260016020850152616f4e614c16565b9052616ef56001616df6565b906020616fbe92616f89616f7360006040840151614a5c565b5195616f7e8861810e565b848151910120618a1f565b9460405194859283927f91195a2a000000000000000000000000000000000000000000000000000000008452600484016162e7565b038173__$cb7e46151951eef21e7bab9bc27b60b0a4$__5af480156104d357616fee926000916174255750618a1f565b90604092835190616fff85836106c3565b600f82527f7b226174746573746174696f6e223a000000000000000000000000000000000060208301526170a2617034619f55565b6000617054845173ffffffffffffffffffffffffffffffffffffffff1690565b88517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116600482015292839081906024820190565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156104d35761716a926170e1926170dc926000926173eb575b5061833e565b619f90565b600061711060208501517fffffffff000000000000000000000000000000000000000000000000000000001690565b88517fb11a19e80000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000909116600482015292839081906024820190565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156104d3576171e5926171a8926171a3926000926173eb575061833e565b61a004565b6000878401518851809481927fb11a19e8000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156104d357617261926172239261721e926000926173eb575061833e565b61a078565b600060608401518851809481927fb11a19e8000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156104d3576173139261729f9261729a926000926173eb575061833e565b61a0ec565b9560006172d160206172c06172bb60a088019b8c51519061833e565b61a160565b9951015167ffffffffffffffff1690565b82517f6900a3ae00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015292839081906024820190565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156104d35761735361734e6080926173889a6000968792617410575061833e565b61a1d4565b9301519051809781927f71aad10d00000000000000000000000000000000000000000000000000000000835260048301615b0e565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9384156104d3576173e16173dc6173e1946173d66173d16173d1996173e69761082c9c6000926173eb575061833e565b618d14565b9061833e565b61949f565b61833e565b619513565b6174099192503d806000833e61740181836106c3565b81019061745d565b90386170d6565b6174099192503d8089833e61740181836106c3565b61743e915060203d6020116126c3576126b581836106c3565b386123bb565b906020616fbe92616f89616f7360016040840151614a5c565b9060208282031261022757815167ffffffffffffffff81116102275761082c920161503f565b906107136002603360405180957f7b226964656e746974795369676e6572223a220000000000000000000000000060208301526174c98151809260208686019101610d61565b81017f227d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe28101855201836106c3565b60409061753761082c9493606083526060830190610d84565b908280828403806020850152600d85527f73657373696f6e5f656d707479000000000000000000000000000000000000006020860152019101520190610d84565b6040517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116600482015260008180602481015b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156104d3576175fa60009161764b93839161768c575b50617483565b617617737109709ecfa91a80626ff3989d68f67f5b1dd12d61966e565b60405193849283927f0199a2200000000000000000000000000000000000000000000000000000000084526004840161751e565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156104d357600091617677575090565b61082c91503d806000833e61740181836106c3565b6176a091503d8085833e61740181836106c3565b386175f4565b6040517f56ca623e0000000000000000000000000000000000000000000000000000000081526000600482018190528180602481016175c4565b6040906176f961082c9493606083526060830190610d84565b908280828403806020850152601c85527f73657373696f6e5f656e636f646543616c6c5369676e617475726573000000006020860152019101520190610d84565b600160136178d9928161764b97601261779161777661775b60009b9a619ace565b99737109709ecfa91a80626ff3989d68f67f5b1dd12d619cd0565b92737109709ecfa91a80626ff3989d68f67f5b1dd12d619cd0565b916033604051998a967f7b2273657373696f6e546f706f6c6f6779223a0000000000000000000000000060208901526177d3815180926020868c019101610d61565b87017f2c2263616c6c5369676e617475726573223a00000000000000000000000000008382015261780e825180936020604585019101610d61565b01017f2c226578706c696369745369676e657273223a0000000000000000000000000083820152617849825180936020602585019101610d61565b01017f2c22696d706c696369745369676e657273223a0000000000000000000000000083820152617884825180936020602685019101610d61565b01017f7d000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18101845201826106c3565b6178f6737109709ecfa91a80626ff3989d68f67f5b1dd12d61966e565b60405193849283927f0199a220000000000000000000000000000000000000000000000000000000008452600484016176e0565b61082c9392606092825260208201528160408201520190610d84565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156102275760606000916179af60405194859384937f88b44c8500000000000000000000000000000000000000000000000000000000855260048501908152600260208201528160408201520190610d84565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156104d3576179d55750565b6000610713916106c3565b90600091737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15617a7f5760608391617a4b60405194859384937f88b44c85000000000000000000000000000000000000000000000000000000008552600485019081528660208201528160408201520190610d84565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156104d357617a72575050565b81617a7c916106c3565b50565b8280fd5b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156102275760606000916179af60405194859384937f88b44c8500000000000000000000000000000000000000000000000000000000855260048501908152605e60208201528160408201520190610d84565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156102275760606000916179af60405194859384937f88b44c8500000000000000000000000000000000000000000000000000000000855260048501908152600160208201528160408201520190610d84565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576000916179af60405194859384937f88b44c850000000000000000000000000000000000000000000000000000000085526004850161792a565b60409061082c9392151581528160208201520190610d84565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576179af9160009160405193849283927fa34edc0300000000000000000000000000000000000000000000000000000000845260048401617bab565b9091737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576000916179af73ffffffffffffffffffffffffffffffffffffffff928360405196879586957f2f2769d1000000000000000000000000000000000000000000000000000000008752166004860152166024840152606060448401526064830190610d84565b906107136001603360405180957f7b2273657373696f6e546f706f6c6f6779223a000000000000000000000000006020830152617ce28151809260208686019101610d61565b81017f7d000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18101855201836106c3565b6000617da3617d47604093617c9c565b617e07617d67737109709ecfa91a80626ff3989d68f67f5b1dd12d61966e565b91855195869485947f0199a220000000000000000000000000000000000000000000000000000000008652606060048701526064860190610d84565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152601183527f73657373696f6e5f696d6167654861736800000000000000000000000000000060208401520160448601520190610d84565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156104d35761082c91600091617e43575b50602080825183010191016161f5565b617e5891503d806000833e61740181836106c3565b38617e33565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576000916179af60405194859384937fc1fa1ed000000000000000000000000000000000000000000000000000000000855260048501526024840152606060448401526064830190610d84565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156102275760606000916179af60405194859384937fd9a3c4d200000000000000000000000000000000000000000000000000000000855260048501908152600460208201528160408201520190610d84565b617f389061810e565b6020815191012090565b90816060910312610227578051617f58816127d6565b916040602083015192015190565b6060918201516040517fe341eaa4000000000000000000000000000000000000000000000000000000008152600481019190915260248101919091529081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156104d357600090600091600091618030575b91925061082c9160ff16601c03618025576111fa7f8000000000000000000000000000000000000000000000000000000000000000935b6040519485931790602084019091604092825260208201520190565b6111fa600093618009565b50505061082c60ff61805b601c9360603d606011618068575b61805381836106c3565b810190617f42565b9094508493509150617fd2565b503d618049565b9390927fffffffff00000000000000000000000000000000000000000000000000000000605b989796937fffffffffffffffffffffffffffffffffffffffff0000000000000000000000007fffffff00000000000000000000000000000000000000000000000000000000009660601b1687521660148601526018850152603884015260e81b166058820152616c038251809360208785019101610d61565b61082c73ffffffffffffffffffffffffffffffffffffffff8251166111fa7fffffff00000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000060208601511694604081015190606081015160808201519261821f6008602360a062ffffff88511696015180517fffffffffffffffff00000000000000000000000000000000000000000000000060208251930151916040519b8c9460e81b1660208501526181e68151809260208888019101610d61565b83019160c01b168382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe88101885201866106c3565b6040519889976020890161806f565b6182a49061823a616168565b50618243615b67565b9061824f61396d610724565b60208401526103e860408401526107d06060840152608083019081526182966182766168a2565b61827e610733565b61beef8152905b6020820152825190610a8382614a3a565b506020613c82613c5c610724565b5090565b6182a4906182b4616168565b506182bd615b67565b906182c961396d610724565b60208401526103e860408401526107d06060840152608083019081526182966182f06168a2565b6182f8610733565b61cafe815290618285565b604051906183126040836106c3565b600b82527f7b227369676e6572223a220000000000000000000000000000000000000000006020830152565b610713909291926020604051948261835f8794518092858088019101610d61565b830161837382518093858085019101610d61565b0101037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018452836106c3565b90610713600d6020604051856183c08297518092858086019101610d61565b81017f222c22636861696e4964223a22000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed8101855201836106c3565b9061071360106020604051856184348297518092858086019101610d61565b81017f222c2276616c75654c696d6974223a22000000000000000000000000000000008382015203017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff08101855201836106c3565b90610713600e6020604051856184a88297518092858086019101610d61565b81017f222c22646561646c696e65223a220000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee8101855201836106c3565b90610713601160206040518561851c8297518092858086019101610d61565b81017f222c227065726d697373696f6e73223a5b0000000000000000000000000000008382015203017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff18101855201836106c3565b9061071360016020604051856185908297518092858086019101610d61565b81017f2c000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18101855201836106c3565b9061071360026020604051856186048297518092858086019101610d61565b81017f5d7d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe28101855201836106c3565b618661618303565b6186d36000618684845173ffffffffffffffffffffffffffffffffffffffff1690565b6040517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116600482015291829081906024820190565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156104d35761870c92618707926000926173eb575061833e565b6183a1565b60208201516040517f6900a3ae0000000000000000000000000000000000000000000000000000000081526004810191909152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156104d35761877c92618777926000926173eb575061833e565b618415565b60408281015190517f6900a3ae0000000000000000000000000000000000000000000000000000000081526004810191909152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156104d3576187ec926187e7926000926173eb575061833e565b618489565b6188496000618806606085015167ffffffffffffffff1690565b6040517f6900a3ae00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015291829081906024820190565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156104d3576188829261887d926000926173eb575061833e565b6184fd565b6000905b608083018051518310156188dd576188b860809284600193816188c2575b6173d6916188b29151614a5c565b51619e96565b9201919050618886565b916173d6916188d36188b292618571565b93915091506188a4565b50905061082c91506185e5565b60409061890361082c9493606083526060830190610d84565b908280828403806020850152601485527f73657373696f6e5f6578706c696369745f6164640000000000000000000000006020860152019101520190610d84565b61764b916189ce6001601360009460336040519586927f7b226578706c6963697453657373696f6e223a0000000000000000000000000060208501526189938151809260208688019101610d61565b83017f2c2273657373696f6e546f706f6c6f6779223a0000000000000000000000000083820152617884825180936020604685019101610d61565b6189eb737109709ecfa91a80626ff3989d68f67f5b1dd12d61966e565b60405193849283927f0199a220000000000000000000000000000000000000000000000000000000008452600484016188ea565b6060918201516040517fe341eaa4000000000000000000000000000000000000000000000000000000008152600481019190915260248101919091529081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156104d357618acc91600091600090600092618c7a575b50600090604051809581927fb11a19e8000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156104d357618b3393600092618c5b5750600090604051809581927fb11a19e8000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156104d357618b9f93600093618c3c575b506040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260ff909116600482015292600090849081906024820190565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9283156104d357618bee9361082c936111fa92600092618c17575b50618bee6113a8916113a860405198899760208901906159bc565b7f3a00000000000000000000000000000000000000000000000000000000000000815260010190565b6113a8919250618c34618bee913d806000833e61740181836106c3565b929150618bd3565b6000919350618c54903d8084833e61740181836106c3565b9290618b5f565b6000919250618c73903d8084833e61740181836106c3565b9190618a90565b905060009250618c99915060603d6060116180685761805381836106c3565b9192618a90565b906107136016602060405185618cbf8297518092858086019101610d61565b81017f222c2273657373696f6e5369676e6174757265223a22000000000000000000008382015203017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff68101855201836106c3565b9061071360026020604051856174c98297518092858086019101610d61565b6040805190618d4281836106c3565b601482527f7b227065726d697373696f6e496e646578223a22000000000000000000000000602083015251917f6900a3ae00000000000000000000000000000000000000000000000000000000835260006004840152600083602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156104d357618dd86173d1936173e19261082c966000926173eb575061833e565b618ca0565b6040805190618dec81836106c3565b601482527f7b227065726d697373696f6e496e646578223a22000000000000000000000000602083015251917f6900a3ae00000000000000000000000000000000000000000000000000000000835260016004840152600083602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156104d357618dd86173d1936173e19261082c966000926173eb575061833e565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576179af9160009160405193849283927f7ba0480900000000000000000000000000000000000000000000000000000000845260048401617bab565b600260156107139294939460336040519687927f7b2273657373696f6e546f706f6c6f6779223a000000000000000000000000006020850152618f248151809260208688019101610d61565b83017f2c22626c61636b6c69737441646472657373223a22000000000000000000000083820152618f5f825180936020604885019101610d61565b01017f227d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe28101855201836106c3565b606090618fcb61082c949383835283830190610d84565b90604083828403806020850152602485527f73657373696f6e5f696d706c696369745f616464426c61636b6c69737441646460208601527f726573730000000000000000000000000000000000000000000000000000000083860152019101520190610d84565b6040517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff929092166004830152600082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156104d35761764b926000926190b2928492619103575b50618ed8565b6190cf737109709ecfa91a80626ff3989d68f67f5b1dd12d61966e565b60405193849283927f0199a22000000000000000000000000000000000000000000000000000000000845260048401618fb4565b6191189192503d8086833e61740181836106c3565b90386190ac565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576179af9160009160405193849283927f4db19e7e0000000000000000000000000000000000000000000000000000000084521515600484015260016024840152606060448401526064830190610d84565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576000916179af60405194859384937f4db19e7e0000000000000000000000000000000000000000000000000000000085521515600485015215156024840152606060448401526064830190610d84565b6000619227619207604093617c9c565b61764b617d67737109709ecfa91a80626ff3989d68f67f5b1dd12d61966e565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152601683527f73657373696f6e5f656e636f6465546f706f6c6f67790000000000000000000060208401520160448601520190610d84565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610227576000916179af60405194859384937f65d5c1350000000000000000000000000000000000000000000000000000000085526004850161792a565b156192e857565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374645574696c7320626f756e642875696e743235362c75696e743235362c7560448201527f696e74323536293a204d6178206973206c657373207468616e206d696e2e00006064820152fd5b60009061937b848411156192e1565b82811091821580619495575b61948d5761939d6193988587615959565b615835565b92600383111580619484575b619475577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8310158061946b575b61945a5785831115619418575050906193f3846193f893615959565b616777565b918215619412575061082c9161940d91615856565b6158ff565b91505090565b959492919095619429575b50505050565b839495506193f39061943b9394615959565b91821561941257506194509161939891615959565b9038808080619423565b5050905061082c9291501990615959565b50821984116193d7565b505091905061082c9250615856565b508284116193a9565b509250505090565b5084821115619387565b9061071360156020604051856194be8297518092858086019101610d61565b81017f2c2273657373696f6e5369676e6174757265223a2200000000000000000000008382015203017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff58101855201836106c3565b9061071360176020604051856195328297518092858086019101610d61565b81017f222c226964656e746974795369676e6174757265223a220000000000000000008382015203017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff78101855201836106c3565b1561958e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e76616c696420706f72742072616e676500000000000000000000000000006044820152fd5b908160008237016000815290565b602061071392949361964182604051978561961e8a9751809285808b019101610d61565b860161963282518093858085019101610d61565b01019182815194859201610d61565b01037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018452836106c3565b73ffffffffffffffffffffffffffffffffffffffff166040517fc1978d1f000000000000000000000000000000000000000000000000000000008152602081806196ed6004820160609060208152601460208201527f5345515f53444b5f5250435f4d494e5f504f525400000000000000000000000060408201520190565b0381855afa9081156104d357600091619a00575b50604051907fc1978d1f0000000000000000000000000000000000000000000000000000000082526020828061976c6004820160609060208152601460208201527f5345515f53444b5f5250435f4d41585f504f525400000000000000000000000060408201520190565b0381865afa9182156104d35761980992619803916000916199e1575b5061979583821015619587565b827fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a65480156199b3575b6197fd916197cf619398926167b0565b936197f8857fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a655565b615959565b90616777565b90615856565b906040517ff877cb19000000000000000000000000000000000000000000000000000000008152600081806198736004820160609060208152601660208201527f5345515f53444b5f5250435f55524c5f5052454649580000000000000000000060408201520190565b0381855afa9081156104d357600091619998575b506040517ff877cb1900000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5345515f53444b5f5250435f55524c5f53554646495800000000000000000000604482015292600084606481865afa9283156104d35761993d94600094619977575b509060009160405180809781947f6900a3ae000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa9081156104d35761082c9360009261995a575b506195fa565b6199709192503d806000833e61740181836106c3565b9038619954565b600092919450619990903d8085833e61740181836106c3565b9390916198ff565b6199ad91503d806000833e61740181836106c3565b38619887565b506193986197fd916197cf60405160208101906199d4816111fa84366195ec565b51902092505091506197bf565b6199fa915060203d6020116126c3576126b581836106c3565b38619788565b619a19915060203d6020116126c3576126b581836106c3565b38619701565b60405190619a2e6040836106c3565b600282527f5b5d0000000000000000000000000000000000000000000000000000000000006020830152565b906107136001602060405185619a798297518092858086019101610d61565b81017f5d000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18101855201836106c3565b90815115619b8e57604051619ae46040826106c3565b600181527f5b0000000000000000000000000000000000000000000000000000000000000060208201526000905b8351821015619b8157619b3090619b298386614a5c565b519061833e565b9083517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908111615843578110619b6d575b60010190619b12565b90619b79600191618571565b919050619b64565b905061082c919250619a5a565b905061082c619a1f565b60405190619ba76040836106c3565b600282527f5b220000000000000000000000000000000000000000000000000000000000006020830152565b60016107139193929360206040519582619bf68894518092858088019101610d61565b8301619c0a82518093858085019101610d61565b01017f22000000000000000000000000000000000000000000000000000000000000008152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18101855201836106c3565b906107136002602060405185619c7b8297518092858086019101610d61565b81017f2c220000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe28101855201836106c3565b9190805115619ddc57619ce1619b98565b6000905b8251821015619dce57619d50906000619d016114f28587614a5c565b6040517f56ca623e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116600482015292839081906024820190565b038173ffffffffffffffffffffffffffffffffffffffff8a165afa9081156104d357619d8492600092619db3575b50619bd3565b90619d8f83516158ff565b8110619d9f575b60010190619ce5565b90619dab600191619c5c565b919050619d96565b619dc791923d8091833e61740181836106c3565b9038619d7e565b91505061082c919250619a5a565b50905061082c619a1f565b60405190619df66040836106c3565b600b82527f7b22746172676574223a220000000000000000000000000000000000000000006020830152565b90610713600b602060405185619e418297518092858086019101610d61565b81017f222c2272756c6573223a5b0000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb8101855201836106c3565b619e9e619de7565b619ec16000618684845173ffffffffffffffffffffffffffffffffffffffff1690565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156104d357619efa92619ef5926000926173eb575061833e565b619e22565b6000905b602083018051518310156188dd57619f306020928460019381619f3a575b6173d691619f2a9151614a5c565b5161a453565b9201919050619efe565b916173d691619f4b619f2a92618571565b9391509150619f1c565b60405190619f646040836106c3565b601382527f7b22617070726f7665645369676e6572223a22000000000000000000000000006020830152565b906107136012602060405185619faf8297518092858086019101610d61565b81017f222c226964656e7469747954797065223a2200000000000000000000000000008382015203017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff28101855201836106c3565b90610713601060206040518561a0238297518092858086019101610d61565b81017f222c2269737375657248617368223a22000000000000000000000000000000008382015203017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff08101855201836106c3565b90610713601260206040518561a0978297518092858086019101610d61565b81017f222c2261756469656e636548617368223a2200000000000000000000000000008382015203017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff28101855201836106c3565b90610713601d60206040518561a10b8297518092858086019101610d61565b81017f222c226175746844617461223a7b22726564697265637455726c223a220000008382015203017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8101855201836106c3565b90610713600e60206040518561a17f8297518092858086019101610d61565b81017f222c226973737565644174223a220000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee8101855201836106c3565b90610713601660206040518561a1f38297518092858086019101610d61565b81017f227d2c226170706c69636174696f6e44617461223a22000000000000000000008382015203017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff68101855201836106c3565b6040519061a2576040836106c3565b600e82527f7b2263756d756c6174697665223a0000000000000000000000000000000000006020830152565b90610713600d60206040518561a2a28297518092858086019101610d61565b81017f2c226f7065726174696f6e223a000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed8101855201836106c3565b90610713600a60206040518561a3168297518092858086019101610d61565b81017f2c2276616c7565223a22000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea8101855201836106c3565b90610713600b60206040518561a38a8297518092858086019101610d61565b81017f222c226f6666736574223a0000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeb8101855201836106c3565b90610713600960206040518561a3fe8297518092858086019101610d61565b81017f2c226d61736b223a2200000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe98101855201836106c3565b61a45b61a248565b61a4a4600061a46a8451151590565b6040517f71dce7da000000000000000000000000000000000000000000000000000000008152901515600482015291829081906024820190565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156104d35761a4dd9261a4d8926000926173eb575061833e565b61a283565b61a5356000602084015161a4f081616acb565b61a4f981616acb565b6040517f6900a3ae00000000000000000000000000000000000000000000000000000000815260ff909116600482015291829081906024820190565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156104d35761a56e9261a569926000926173eb575061833e565b61a2f7565b60408281015190517fb11a19e80000000000000000000000000000000000000000000000000000000081526004810191909152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156104d35761a5de9261a5d9926000926173eb575061833e565b61a36b565b60608201516040517f6900a3ae0000000000000000000000000000000000000000000000000000000081526004810191909152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156104d35761a65561a65060809261a69095600095869261a6c4575061833e565b61a3df565b930151604051809381927fb11a19e8000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156104d35761082c926173d1926000926173eb575061833e565b6174099192503d8088833e61740181836106c356fe60808060405234601557611d1b908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c80635c9be12c146100375763829b88491461003257600080fd5b61056b565b346100bb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bb5760043567ffffffffffffffff81116100bb5761009b61008c6100af9236906004016100c0565b906100956106e8565b506108e4565b6040519283926040845260408401906104bb565b90151560208301520390f35b600080fd5b9181601f840112156100bb5782359167ffffffffffffffff83116100bb57602083818601950101116100bb57565b9080602083519182815201916020808360051b8301019401926000915b83831061011a57505050505090565b90919293947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828203018352855190608060a082019273ffffffffffffffffffffffffffffffffffffffff8151168352602081015160208401526040810151604084015267ffffffffffffffff606082015116606084015201519160a06080830152825180915260c0820190602060c08260051b85010194019260005b8281106101d85750505050506020806001929701930193019193929061010b565b90919293947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4083820301855285516020606081604085019373ffffffffffffffffffffffffffffffffffffffff81511686520151936040838201528451809452019201906000905b80821061025f57505050602080600192970195019101929190926101b7565b909192835180511515825260208101519060048210156102ae5782608060a092602094856001970152604081015160408401526060810151606084015201516080820152019401920190610240565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60005b8381106102f05750506000910152565b81810151838201526020016102e0565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361033c815180928187528780880191016102dd565b0116010190565b9080602083519182815201916020808360051b8301019401926000915b83831061036f57505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085600195030186526060895180511515835273ffffffffffffffffffffffffffffffffffffffff84820151168484015260ff604082015116604084015201516080606083015273ffffffffffffffffffffffffffffffffffffffff81511660808301527fffffffff00000000000000000000000000000000000000000000000000000000838201511660a0830152604081015160c0830152606081015160e083015260a0610458608083015160c0610100860152610140850190610300565b910151916101207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80828403019101528267ffffffffffffffff816104a58551604086526040860190610300565b9401511691015297019301930191939290610360565b91909160a08301928151815273ffffffffffffffffffffffffffffffffffffffff602083015116602082015260408201519360a060408301528451809152602060c0830195019060005b81811061053f57505050608061052b61053c9495606085015184820360608601526100ee565b920151906080818403910152610343565b90565b825173ffffffffffffffffffffffffffffffffffffffff16875260209687019690920191600101610505565b346100bb5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bb5760043567ffffffffffffffff81116100bb576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126100bb5760243567ffffffffffffffff81116100bb57610626916106006106129236906004016100c0565b916106096106e8565b50600401611016565b6040519182916020835260208301906104bb565b0390f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810190811067ffffffffffffffff82111761067557604052565b61062a565b6040810190811067ffffffffffffffff82111761067557604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761067557604052565b604051906106e660e083610696565b565b604051906106f582610659565b6060608083600081526000602082015282604082015282808201520152565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b67ffffffffffffffff81116106755760051b60200190565b6040519061076882610659565b60606080836000815260006020820152600060408201526000838201520152565b9061079382610743565b6107a06040519182610696565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06107ce8294610743565b019060005b8281106107df57505050565b6020906107ea61075b565b828285010152016107d3565b909392938483116100bb5784116100bb578101920390565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461083b5760010190565b610714565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518210156108835760209160051b010190565b610840565b9190820180921161083b57565b9061089f82610743565b6108ac6040519182610696565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06108da8294610743565b0190602036910137565b916108ed6106e8565b60009384908190610900605e8704610789565b91606085019283525b8681106109195750505152929150565b8181013560fc81901c97916001019060f81c818915610d4a575060018914610d185760028914610b4e5760038914610a59575060048814610984577f0ad9979000000000000000000000000000000000000000000000000000000000600052600488905260245b6000fd5b90919293949596506020860173ffffffffffffffffffffffffffffffffffffffff6109c3825173ffffffffffffffffffffffffffffffffffffffff1690565b16610a2f578382013560601c81526014909101906109ff906109fa905b5173ffffffffffffffffffffffffffffffffffffffff1690565b6114f3565b86518015610a295790610a1a91600052602052604060002090565b86525b95949392919095610909565b50610a1a565b7f9e5c658b0000000000000000000000000000000000000000000000000000000060005260046000fd5b98909192939495969750610b2457600f60019816600f8114610b13575b8190610a8181610895565b604089019081528a60005b838110610ad45750505050610aa682610aac9285876107f6565b9061147f565b86518015610ace5790610ac791600052602052604060002090565b8652610a1d565b50610ac7565b610b0b958881013560601c906014019690610af083865161086f565b9073ffffffffffffffffffffffffffffffffffffffff169052565b018b90610a8c565b50600281019083013560f01c610a76565b7feb6252040000000000000000000000000000000000000000000000000000000060005260046000fd5b610bb1969850610ba9610bc092600f610bba939c96979a95989c169087929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b979088610888565b809787876107f6565b906108e4565b93909593610d01575b6020860173ffffffffffffffffffffffffffffffffffffffff610c00825173ffffffffffffffffffffffffffffffffffffffff1690565b16610c7e575b5060005b60608701518051821015610c4d5790610c46610c288260019461086f565b519b8a51610c358261080e565b9d610c40838361086f565b5261086f565b5001610c0a565b505092909695939197948651801515600014610c7757610ac7915190600052602052604060002090565b5051610ac7565b60208901610cbc610ca3825173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b610a2f57610ce1610cfb925173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff169052565b38610c06565b91610b245760019160408601516040890152610bc9565b508551969750949593949293919290916020820191840135908015610ace5790610ac791600052602052604060002090565b92939495969798505050610d5c61075b565b8184018035606090811c8352601482013560208401526034820135604084015260549091013560c01c9082015294610d98605c8301848661136e565b8093916080890152610dab9185876107f6565b610db491611424565b8751610ded9291908015610df35790610dd591600052602052604060002090565b88528551610de28261080e565b97610c40838361086f565b50610a1d565b50610dd5565b60405190610e068261067a565b6000602083606081520152565b6040519060c0820182811067ffffffffffffffff8211176106755760405281600081526000602082015260006040820152600060608201526060608082015260a0610e5c610df9565b910152565b90610e6b82610743565b610e786040519182610696565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610ea68294610743565b019060005b828110610eb757505050565b602090610ec2610e13565b82828501015201610eab565b6040513d6000823e3d90fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156100bb570180359067ffffffffffffffff82116100bb57602001918160051b360383136100bb57565b604051906080820182811067ffffffffffffffff82111761067557604052816000815260006020820152600060408201526060610e5c610e13565b90610f7382610743565b610f806040519182610696565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610fae8294610743565b019060005b828110610fbf57505050565b602090610fca610f2e565b82828501015201610fb3565b91908110156108835760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21813603018212156100bb570190565b909162ffffff926110256106e8565b50600091813560e81c600395169061105661104e610bba611046858a610888565b8985886107f6565b939097610888565b602087019473ffffffffffffffffffffffffffffffffffffffff61108e875173ffffffffffffffffffffffffffffffffffffffff1690565b161561132c5750600181019392919083013560f81c906110ad82610e61565b9560005b83811061128a5750505015159081611281575b50610b245760408401936110d88582610eda565b9490506110e485610f69565b95608088019687526000945b86861061110257505050505050505090565b61111e61110d610f2e565b918681013560f81c91600190910190565b6080821615158352969082511561126157607f16845181101561123757600061115d6111a5996111506020948961086f565b5160608701525b89611679565b9b90929161117e8b611179896111738d84610eda565b90610fd6565b61185c565b92604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa15611232576111e0610ca36000516109e06020860191829073ffffffffffffffffffffffffffffffffffffffff169052565b15611201576111f9816001938b5190610c40838361086f565b5001946110f0565b7fc1e84ed6000000000000000000000000000000000000000000000000000000006000526109806024906000600452565b610ece565b7fbd8ba84d0000000000000000000000000000000000000000000000000000000060005260046000fd5b600061115d6111a59961127c602094604088019060ff169052565b611157565b905015386110c4565b6112b290602060006112a96112bf9a6112a1610e13565b50878b6115bc565b8a959195611679565b9c90929161117e886116bc565b838052039060015afa156112325760005173ffffffffffffffffffffffffffffffffffffffff611306610ca3865173ffffffffffffffffffffffffffffffffffffffff1690565b911603610a2f5760019161131a828b61086f565b52611325818a61086f565b50016110b1565b807f9e5c658b0000000000000000000000000000000000000000000000000000000060049252fd5b604051906113618261067a565b6060602083600081520152565b60018301939281013560f81c61138381610743565b926113916040519485610696565b8184527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06113be83610743565b0160005b8181106114055750506000925b8284106113de57505050509190565b909192956113ef60019184846119ed565b97906113fb828861086f565b52019291906113cf565b60209061141495939495611354565b82828901015201939291936113c2565b9061147960016020926040519381859282840197600089526021850137820101828101600081525003017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610696565b51902090565b90611479600160209260405193818592828401977f030000000000000000000000000000000000000000000000000000000000000089526021850137820101828101600081525003017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610696565b6040517fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208201927f0400000000000000000000000000000000000000000000000000000000000000845260601b16602182015260158152611479603582610696565b92919267ffffffffffffffff8211610675576040519161159f601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200184610696565b8294818452818301116100bb578281602093846000960137010152565b61166e9193929361166862ffffff61163c60186115d7610e13565b987fffffffff000000000000000000000000000000000000000000000000000000006014888301803560601c8d5201351660208b01520160208682013591019060408a015260208682013591019060608a01528560039092919283013560e81c920190565b91169061165e61165761164f8484610888565b8387896107f6565b3691611557565b6080890152610888565b91611b3b565b929060a08201529190565b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff811161083b5791565b73ffffffffffffffffffffffffffffffffffffffff815116906114797fffffffff000000000000000000000000000000000000000000000000000000006020830151166117df7fffffff00000000000000000000000000000000000000000000000000000000006040850151946060810151906080810151916117ce6008602360a062ffffff87511695015180517fffffffffffffffff00000000000000000000000000000000000000000000000060208251930151916040519a8b9460e81b16602085015261179581518092602088880191016102dd565b83019160c01b168382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8810187520185610696565b604051978896602088019a8b611b86565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610696565b801515036100bb57565b359073ffffffffffffffffffffffffffffffffffffffff821682036100bb57565b9080601f830112156100bb5781602061053c93359101611557565b35906106e68261180b565b90602081013561186b8161180b565b1561193b576000915b608060608301359201359160e0823603126100bb576118916106d7565b9161189b81611815565b83526020810135602084015260408101359067ffffffffffffffff82116100bb576114799360c0611913926118d66117df9536908301611836565b6040840152606081013560608401526118f160808201611851565b608084015261190260a08201611851565b60a0840152013560c0820152611c3e565b6040519485936020850197889290916080949284526020840152604083015260608201520190565b4691611874565b9061194c82610743565b6119596040519182610696565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06119878294610743565b019060005b82811061199857505050565b6020906040516119a781610659565b600081526000838201526000604082015260006060820152600060808201528282850101520161198c565b60ff1660048110156102ae5790565b60048210156102ae5752565b60ff93929150611a42611a32611a15611a04611354565b948481013560601c91601490910190565b73ffffffffffffffffffffffffffffffffffffffff909116855290565b8281013560f81c91600190910190565b9416611a4d81611942565b602084019081526000925b828410611a6757505050509190565b90919295611b20611b02611ae4611aba611ad78b6020611ad0611ac8611ac38c611a9f60019c8e60019092919283013560f81c920190565b989091611ab2888f85161515925161086f565b519015159052565b60011c607f1690565b6119d2565b928b5161086f565b51016119e1565b8581013591602090910190565b906040611af28c895161086f565b5101528481013591602090910190565b906060611b108b885161086f565b5101528381013591602090910190565b97906080611b2f83875161086f565b51015201929190611a58565b9291611b45610df9565b9060038101908581013560e81c0194600386019182811161083b57611657600393611b7392600b97856107f6565b83528501013560c01c6020820152920190565b9390927fffffffff00000000000000000000000000000000000000000000000000000000605b989796937fffffffffffffffffffffffffffffffffffffffff0000000000000000000000007fffffff00000000000000000000000000000000000000000000000000000000009660601b1687521660148601526018850152603884015260e81b166058820152611c2582518093602087850191016102dd565b01611c3982518093602086850191016102dd565b010190565b73ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e083015261010082015261010081526114796101208261069656fea2646970667358221220474eb22f2d975d649058726f10301e48ffeb84fde2eea9a19771fee2273982c764736f6c634300081c0033a264697066735822122090f59642ae6ba499e69e4647de68c9d8bf2c9ca66c072bcf1c6c656f76b4ce5364736f6c634300081c0033","sourceMap":"1255:35660:81:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;1455:23;;;;;;;;;;;;;;;;;;;;1255:35660;1455:23;;;;;1445:33;;1255:35660;;1445:33;1255:35660;;;;;;;;1445:33;1255:35660;;1445:33;1255:35660;;2024:14:2;1500:26:81;;2024:14:2;1255:35660:81;1500:26;;2024:14:2;;;;;1255:35660:81;2024:14:2;1255:35660:81;;;2024:14:2;1500:26:81;1255:35660;2024:14:2;1255:35660:81;-1:-1:-1;336:42:2;1500:26:81;;;;;;2024:14:2;1500:26:81;1255:35660;1500:26;;;1255:35660;2024:14:2;;;1255:35660:81;2024:14:2;;1255:35660:81;2024:14:2;1484:42:81;2024:14:2;;;1484:42:81;2024:14:2;1484:42:81;2024:14:2;;;;;;;;;;;;;;;;;1255:35660:81;;2024:14:2;1549:27:81;;2024:14:2;1255:35660:81;1549:27;;2024:14:2;;;;;1255:35660:81;2024:14:2;1255:35660:81;;;2024:14:2;1500:26:81;1255:35660;2024:14:2;1255:35660:81;-1:-1:-1;336:42:2;1549:27:81;;;;;;2024:14:2;1549:27:81;1255:35660;1549:27;;;1255:35660;2024:14:2;;;1255:35660:81;2024:14:2;;1255:35660:81;2024:14:2;1532:44:81;2024:14:2;;;1532:44:81;2024:14:2;;;;;;;;;;;;;;;;;;;1255:35660:81;1549:27;;;;1500:26;1549:27;1500:26;1549:27;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;:::i;1500:26::-;;;;;;;;;;;;;;:::i;:::-;;;;1455:23;;:::i;1255:35660::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3018:16:9;1255:35660:81;;;;;;;3018:16:9;1255:35660:81;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;2024:14:2;1255:35660:81;;;;;;;;;;;;;:::o;:::-;2763:4:48;1255:35660:81;;;;;;;;;;;;;:::o;:::-;2763:4:48;1255:35660:81;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;:::o;:::-;;;;;2763:4:48;1255:35660:81;;:::i;:::-;;;;;;;;:::i;:::-;13594:231;1255:35660;;;13594:231;1255:35660;;:::i;:::-;;;;;;;:::o;:::-;;;;;;:::i;:::-;;;;;;;:::o;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;1255:35660:81;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;6776:47;1255:35660;6805:13;1255:35660;;;;;;;;;;;6776:47;6921:96;6829:20;;;;;:56;;:::i;:::-;1255:35660;;6805:13;6953:64;6960:56;6966:29;:20;;;:29;1255:35660;;;;;;6966:29;1255:35660;7000:15;1255:35660;;6960:56;:::i;:::-;1255:35660;;;;6953:64;6921:20;;:29;1255:35660;;;;;;6921:96;8517:33;6805:18;7057:16;;:::i;:::-;7347:251;2763:4:48;;:::i;:::-;1255:35660:81;;;7165:3;6805:13;7106:232;;1255:35660;2763:4:48;;:::i;:::-;7106:232:81;;;1255:35660;7106:232;;;;1255:35660;7106:232;;;;2763:4:48;7106:232:81;6829:20;7106:232;;2763:4:48;;7106:232:81;;;1255:35660;7087:251;7106:232;7087:13;;;;;:251;;;;:::i;:::-;;;:::i;:::-;;2763:4:48;;:::i;:::-;1255:35660:81;;;7366:232;7425:3;6805:13;7366:232;;1255:35660;2763:4:48;;:::i;:::-;7106:232:81;7366;;1255:35660;7366:232;7106;7366;;1255:35660;7366:232;7106;7366;;2763:4:48;7366:232:81;6829:20;7366:232;;2763:4:48;;7106:232:81;7366;;1255:35660;7347:13;:251;;;;:::i;:::-;;;:::i;:::-;;7862:84;7701:15;;:::i;:::-;2763:4:48;7750:84:81;2763:4:48;;;:::i;:::-;;;:::i;:::-;7750:84:81;;;:::i;:::-;7730:104;;;:::i;:::-;;;;;:::i;:::-;;2763:4:48;;:::i;:::-;;;:::i;:::-;7862:84:81;;;:::i;:::-;7842:104;;;:::i;:::-;;;;;:::i;:::-;;8322:105;8011:51;1255:35660;7806:14;1255:35660;;;;;;8011:51;:::i;:::-;8174:16;;;:::i;:::-;8233;;:::i;:::-;1255:35660;8257:39;1255:35660;6805:13;1255:35660;;;;;;8257:39;;;:::i;:::-;1255:35660;;;;;;8257:39;8322:105;;:::i;:::-;2763:4:48;8517:15:81;2763:4:48;8517:7:81;2763:4:48;1255:35660:81;2763:4:48;;;1255:35660:81;2763:4:48;;;1255:35660:81;;;;8517:15;1255:35660;7106:232;1255:35660;8517:33;;;;;;2024:14:2;8517:33:81;;1255:35660;8517:33;;;:::i;:::-;;;;;;;;;;6805:18;8517:33;;;1255:35660;8567:18;7106:232;8567:18;;;8558:64;8567:18;;1255:35660;2763:4:48;;:::i;:::-;8558:64:81;;:::i;:::-;6805:18;1255:35660;;6805:13;1255:35660;;;;;;8631:311;8682:3;8655:18;;1255:35660;;8651:29;;;;;8739:21;8837:96;8846:34;7106:232;8739:21;;2763:4:48;8739:21:81;;:::i;:::-;;8770:57;2763:4:48;;;1255:35660:81;;;;2763:4:48;;;:::i;:::-;8770:57:81;;:::i;:::-;8846:19;;2024:14:2;1255:35660:81;;;2024:14:2;8846:34:81;2763:4:48;;;:::i;:::-;8837:96:81;;:::i;:::-;2763:4:48;8636:13:81;;8651:29;9190:48;8651:29;9138:44;8651:29;8950:70;7106:232;8959:21;;;1255:35660;2763:4:48;;:::i;:::-;8950:70:81;;:::i;:::-;9028:81;7106:232;9037:22;;;1255:35660;2763:4:48;;:::i;9028:81:81:-;9138:44;:::i;:::-;2763:4:48;;;;;:::i;:::-;9190:48:81;;:::i;8517:33::-;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;1255:35660;;;;;;;;-1:-1:-1;;1255:35660:81;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1255:35660:81;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;3948:19:9;1255:35660:81;2763:4:48;;;:::i;:::-;1255:35660:81;;;;;;;:::i;:::-;2763:4:48;;;1255:35660:81;;;3948:19:9;1255:35660:81;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;21328:44;21295:19;1255:35660;;;21142:47;1255:35660;;;;;;;;;;;;;21142:47;21195:20;;;;:56;;:::i;:::-;1255:35660;;21295:19;:::i;:::-;21341:9;;;;:::i;:::-;1255:35660;21328:44;;:::i;:::-;1255:35660;21434:51;1255:35660;;;;;;;21434:51;21524:16;22017:107;21524:16;;:::i;:::-;2763:4:48;21546:234:81;2763:4:48;;:::i;:::-;1255:35660:81;;;21620:3;1255:35660;21565:215;;1255:35660;;;:::i;:::-;;21565:215;;1255:35660;-1:-1:-1;1255:35660:81;21565:215;;1255:35660;6805:18;21565:215;;;2763:4:48;6805:18:81;21195:20;21565:215;;2763:4:48;21308:1:81;21565:215;;;1255:35660;;21546:13;;;:234;;;;:::i;:::-;;21905:16;;:::i;:::-;1255:35660;21927:39;1255:35660;;;;;;;;21927:39;;;:::i;:::-;22073:15;;:::i;:::-;22090:16;;:::i;:::-;22017:107;;:::i;:::-;1255:35660;22130:84;1255:35660;;;;:::i;:::-;22130:84;;:::i;:::-;22291:45;22301:34;1255:35660;;22301:34;:::i;:::-;22291:45;:::i;:::-;22347:13;-1:-1:-1;22382:3:81;1255:35660;;22362:18;;;;;22408:26;;;21308:1;22408:26;;;:::i;:::-;1255:35660;;;;;22408:26;-1:-1:-1;22395:39:81;;;;;:::i;:::-;;2763:4:48;22347:13:81;;22362:18;;;;;22640:39;;22577:47;22519:20;;;:::i;:::-;2763:4:48;;:::i;:::-;22577:47:81;;:::i;:::-;1255:35660;;;;;;;;;22640:39;1255:35660;22640:39;;;:::i;:::-;;;;;;;;;:::i;:::-;22690:13;-1:-1:-1;22685:142:81;22705:9;;;;;;1255:35660;;;22941:39;1255:35660;22941:39;21565:215;22912:12;;1255:35660;;;;22941:39;;;:::i;:::-;;22640;22941;;;;;;:::i;:::-;336:42:2;23078:58:81;;;;1255:35660;;2024:14:2;23078:58:81;;23094:41;1255:35660;23078:58;;1255:35660;;-1:-1:-1;1255:35660:81;;;;;23078:58;;;;336:42:2;23078:58:81;;;;;;;23142:33;23078:58;-1:-1:-1;23078:58:81;;;22685:142;-1:-1:-1;23142:7:81;2763:4:48;23142:15:81;;2763:4:48;;1255:35660:81;;2763:4:48;;23142:33:81;;;;;;;;;;;1255:35660;23142:33;;;;;-1:-1:-1;23142:33:81;;;;;;:::i;23078:58::-;;;;;;;:::i;:::-;;;:::i;:::-;;;;22716:3;22765:36;;;;1255:35660;22739:81;21308:1;22765:36;1255:35660;;22765:36;;;:::i;:::-;1255:35660;;22739:81;;;1255:35660;22739:81;;1255:35660;;:::i;:::-;;;:::i;:::-;;;:::i;22739:81::-;22716:3;2763:4:48;22690:13:81;;;;;1255:35660;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;26090:1;1255:35660;;26071:20;26067:87;;1255:35660;26183:12;;:::i;:::-;26259;;:::i;:::-;26361:49;26313:23;1255:35660;;;;2763:4:48;;26313:23:81;26305:4;26299:37;1255:35660;26361:49;1255:35660;;26361:49;;;;;;;:::i;:::-;26193:1;26416:129;26458:3;1255:35660;;26436:20;;;;;2763:4:48;26525:12:81;26490:48;26525:12;;;;;:::i;:::-;2024:14:2;1255:35660:81;;;2024:14:2;26525:12:81;1255:35660;26490:48;1255:35660;;26490:48;;;26361:49;26490:48;;;:::i;:::-;26458:3;2763:4:48;26421:13:81;;;26436:20;26788:34;1255:35660;26436:20;26675:67;26436:20;26675:67;26593:30;1255:35660;;;;2763:4:48;;26593:30:81;1255:35660;;;26675:67;;;26361:49;26675:67;;;:::i;:::-;1255:35660;;26788:34;;;1255:35660;26361:49;26788:34;;1255:35660;;:::i;26788:34::-;336:42:2;26862:56:81;;;;1255:35660;;2024:14:2;26862:56:81;;26878:39;1255:35660;26862:56;;1255:35660;;26193:1;1255:35660;;;;;26862:56;;;;336:42:2;26862:56:81;;;;;;;26924:37;26862:56;26193:1;26862:56;;;26416:129;-1:-1:-1;26924:7:81;2763:4:48;26924:28:81;;2763:4:48;;1255:35660:81;;2763:4:48;;26924:28:81;1255:35660;;26924:37;;;;;2024:14:2;26924:37:81;;1255:35660;26924:37;;;:::i;:::-;;;;;;;;;;;1255:35660;26924:37;;;;;26193:1;26924:37;;;;;;:::i;:::-;;;;;:::i;26862:56::-;;;;;;;:::i;:::-;;;;26067:87;26090:1;26101:47;;26067:87;;1255:35660;;;;;;;;;;;;;;;;:::i;:::-;;;;36352:37;1255:35660;;;;;;;;;:::i;:::-;-1:-1:-1;35773:19:81;;:::i;:::-;35875:229;1255:35660;;:::i;:::-;;;;;;35875:229;35631:168;1255:35660;2024:14:2;1255:35660:81;35631:168;;1255:35660;;;;;35631:168;;1255:35660;;;;35631:168;1255:35660;35631:168;;;;1255:35660;;;;;;35631:168;1255:35660;35631:168;;1255:35660;2024:14:2;1255:35660:81;;;;2024:14:2;;;;;1255:35660:81;;;;;;;;;;35875:229;;;1255:35660;35875:229;;744:1:35;;;1255:35660:81;744:1:35;;;1255:35660:81;;;;;;744:1:35;;;1255:35660:81;744:1:35;;;2763:4:48;744:1:35;;;2763:4:48;744:1:35;;;;;;;1255:35660:81;744:1:35;;;1255:35660:81;744:1:35;;;35875:229:81;36154:111;1255:35660;;996:2:35;;:::i;:::-;36154:111:81;;:::i;:::-;36352:7;2763:4:48;36352:28:81;;2763:4:48;;1255:35660:81;;2763:4:48;;36352:28:81;1255:35660;;36352:37;;;;;2024:14:2;36352:37:81;;1255:35660;36352:37;;;:::i;:::-;;;;;;;;;;36643:86;1255:35660;36352:37;36560:77;36735:79;36352:37;36481:73;1255:35660;36820:87;36352:37;36829:25;36352:37;-1:-1:-1;36352:37:81;;;1255:35660;36404:22;;;36395:80;36404:22;;1255:35660;996:2:35;;:::i;:::-;36395:80:81;;:::i;:::-;36490:32;:25;:22;;:25;:::i;:::-;;2024:14:2;1255:35660:81;;;2024:14:2;36490:32:81;996:2:35;;;:::i;36481:73:81:-;1255:35660;36569:25;:22;;:25;:::i;:::-;;:33;2024:14:2;996:2:35;;;:::i;:::-;36560:77:81;;:::i;:::-;1255:35660;36652:25;:22;;:25;:::i;:::-;;:36;2024:14:2;996:2:35;;;:::i;36643:86:81:-;36735:79;36744:34;1255:35660;36744:25;:22;;:25;:::i;:::-;;:34;1255:35660;;;;;36735:79;1255:35660;996:2:35;;:::i;:::-;1255:35660:81;;36735:79;;:::i;:::-;36829:22;:25;:::i;:::-;;:37;;1255:35660;996:2:35;;:::i;36352:37:81:-;;;;;;-1:-1:-1;36352:37:81;;;;;;:::i;:::-;;;;;1255:35660;;;;;;;:::i;:::-;17912:47;1255:35660;17941:13;1255:35660;;;;;17912:47;18057:96;17965:20;;;;;:56;;:::i;18057:96::-;18242:42;;:::i;:::-;18323:16;;;:::i;:::-;2763:4:48;18345:234:81;2763:4:48;;:::i;:::-;1255:35660:81;;;18419:3;17941:13;18364:215;;1255:35660;;;:::i;:::-;18364:215;;;1255:35660;17941:18;18364:215;;;1255:35660;6805:18;18364:215;;;2763:4:48;6805:18:81;17965:20;18364:215;;2763:4:48;18337:1:81;18364:215;;;1255:35660;18364:215;18345:13;;;:234;;;;:::i;:::-;-1:-1:-1;18364:215:81;1255:35660;2024:14:2;18623:30:81;;1255:35660;;18623:30;;1255:35660;;;;;;;;;;;18364:215;1255:35660;;;-1:-1:-1;336:42:2;18623:30:81;;;;;;;18968:107;18623:30;18721:87;18623:30;17941:18;18623:30;;;1255:35660;2763:4:48;;;:::i;:::-;18721:87:81;;:::i;:::-;18879:15;;:::i;:::-;18900:33;;;;:::i;:::-;;;;;:::i;:::-;;19040:16;;:::i;:::-;19058;;;:::i;:::-;18968:107;;:::i;:::-;19111:61;336:42:2;19111:61:81;;;;18364:215;1255:35660;2024:14:2;19111:61:81;;19127:44;1255:35660;19111:61;;1255:35660;;17941:18;1255:35660;;;;;19111:61;;;;336:42:2;19111:61:81;;;;;;;19178:33;19111:61;17941:18;19111:61;;;-1:-1:-1;19178:7:81;2763:4:48;19178:15:81;;2763:4:48;;1255:35660:81;;2763:4:48;;19111:61:81;;;;;;;:::i;:::-;;;;18623:30;;;;18364:215;18623:30;18364:215;18623:30;;;;;;;:::i;:::-;;;;1255:35660;;;;;;;;;;;;;;;3794:16:9;1255:35660:81;;;;;;;3794:16:9;1255:35660:81;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3501:18:9;1255:35660:81;;;;;;;3501:18:9;1255:35660:81;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15603:42;;:::i;:::-;16007:108;15684:16;;:::i;:::-;2763:4:48;15706:234:81;2763:4:48;;:::i;15706:234:81:-;;16063:15;;:::i;:::-;16080:16;;:::i;1255:35660::-;;;;;;;:::i;:::-;25319:1;1255:35660;;25300:20;25296:87;;1255:35660;25412:12;;:::i;:::-;25435:13;25422:1;25450:5;25454:1;25450:5;;;;25822:56;336:42:2;25822:56:81;;;;1255:35660;;2024:14:2;25822:56:81;;26878:39;1255:35660;25822:56;;1255:35660;;25422:1;1255:35660;;;;;25822:56;1255:35660;25457:3;1255:35660;;25614:40;25573:23;1255:35660;;;;2763:4:48;;25614:40:81;25667:13;25422:1;25662:115;25704:3;1255:35660;;25682:20;;;;;2763:4:48;25755:12:81;;25729:39;25755:12;;;;;:::i;25729:39::-;25704:3;2763:4:48;25667:13:81;;;;;25682:20;;2763:4:48;25682:20:81;;2763:4:48;25435:13:81;;25296:87;25319:1;25330:47;;25296:87;;1255:35660;;;;;;;;;;;;;;-1:-1:-1;1255:35660:81;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;3346:26:9;1255:35660:81;2763:4:48;;;:::i;:::-;1255:35660:81;;;;;;;:::i;:::-;2763:4:48;;;1255:35660:81;;;3346:26:9;1255:35660:81;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;2024:14:2;9403:27:81;;1255:35660;;9403:27;;1255:35660;;;;;;;;;;;9403:27;1255:35660;;;-1:-1:-1;336:42:2;9403:27:81;;;;;;;-1:-1:-1;9403:27:81;;;1255:35660;9470:16;;;:::i;:::-;2763:4:48;;;:::i;:::-;1255:35660:81;;;9578:3;1255:35660;9519:232;;1255:35660;2763:4:48;;:::i;:::-;1255:35660:81;9519:232;;1255:35660;-1:-1:-1;9519:232:81;;;1255:35660;6805:18;9403:27;9519:232;;2763:4:48;6805:18:81;9519:232;;;2763:4:48;;9519:232:81;;;1255:35660;9500:251;1255:35660;9500:13;;;;;:251;;;;:::i;:::-;;9760;2763:4:48;;:::i;:::-;1255:35660:81;;;9838:3;1255:35660;9779:232;;1255:35660;2763:4:48;;:::i;:::-;1255:35660:81;9779:232;;1255:35660;-1:-1:-1;9519:232:81;9779;;1255:35660;6805:18;9403:27;9779:232;;2763:4:48;6805:18:81;9519:232;9779;;2763:4:48;;9519:232:81;9779;;1255:35660;9760:13;;:251;;;;:::i;:::-;;10144:27;;:::i;:::-;10259:30;;;;;10216:106;10272:13;10259:30;1255:35660;;;;10216:106;;:::i;:::-;10185:137;;;:::i;:::-;;;;;:::i;:::-;-1:-1:-1;10404:30:81;;;10361:107;10417:13;10404:30;2024:14:2;;1255:35660:81;;10361:107;;:::i;:::-;10330:138;;;:::i;:::-;;;;;:::i;:::-;;10568:51;1255:35660;10599:14;1255:35660;;;;;10568:51;10632:13;-1:-1:-1;10627:239:81;10677:3;1255:35660;;10647:28;;;;;10793:64;2763:4:48;10751:20:81;10725:47;10751:20;;;;:::i;:::-;;10725:47;:::i;:::-;10793:64;:::i;:::-;10677:3;2763:4:48;10632:13:81;;;10647:28;;11078:66;10647:28;10986:15;;:::i;:::-;11078:10;;1255:35660;11118:13;:16;:13;;:16;:::i;:::-;;1255:35660;;11078:66;;;;;2024:14:2;11078:66:81;;1255:35660;11078:66;;;:::i;:::-;;;;;;;;;;;11412:16;1255:35660;11078:66;11256:50;11186:42;11078:66;;11372;11078;-1:-1:-1;11078:66:81;;;10627:239;2763:4:48;;;:::i;:::-;11186:42:81;;:::i;:::-;11256:50;:::i;:::-;11236:70;;;:::i;:::-;;;;;:::i;:::-;;11412:13;:16;:::i;:::-;;1255:35660;;11372:66;;;;;;2024:14:2;11372:66:81;;1255:35660;11372:66;;;:::i;:::-;;;;;;;;;12113:33;11372:66;11551:50;11480:43;11372:66;11918:105;11372:66;-1:-1:-1;11372:66:81;;;;;10627:239;11480:43;;:::i;:::-;11551:50;:::i;:::-;11531:70;;;:::i;:::-;;;;;:::i;:::-;;11722:16;;:::i;:::-;11746:39;1255:35660;;;;;;;;11746:39;;;:::i;:::-;11793:40;2024:14:2;;;1255:35660:81;;;;2024:14:2;11793:40:81;;;:::i;:::-;11876:16;;:::i;:::-;11918:105;;;:::i;:::-;2763:4:48;12113:15:81;2763:4:48;12113:7:81;2763:4:48;1255:35660:81;2763:4:48;;;1255:35660:81;2763:4:48;;12113:15:81;1255:35660;;;12113:33;;;;;;2024:14:2;12113:33:81;;1255:35660;12113:33;;;:::i;:::-;;;;;;;;;;-1:-1:-1;12113:33:81;;;10627:239;12163:18;9403:27;12163:18;;12154:64;12163:18;;1255:35660;2763:4:48;;:::i;12154:64:81:-;12259:78;12271:32;:21;:18;;:21;:::i;:::-;;2763:4:48;1255:35660:81;;2763:4:48;;12271:32:81;1255:35660;;:::i;:::-;12259:78;;:::i;:::-;12563:91;12572:35;1255:35660;12572:21;12354:35;:18;:21;:18;;:21;:::i;:::-;;:35;2024:14:2;1255:35660:81;;;2024:14:2;12354:35:81;1255:35660;12345:89;1255:35660;;;;;;;;;;;;:::i;12345:89::-;12476:79;12488:32;:21;:18;;:21;:::i;:32::-;1255:35660;;:::i;12476:79::-;12572:18;:21;:::i;:35::-;2024:14:2;;1255:35660:81;;;;:::i;12563:91::-;12663:70;1255:35660;12672:21;;;1255:35660;2763:4:48;;:::i;12663:70:81:-;9519:232;12750:22;;;12741:72;12750:22;;1255:35660;;;:::i;12741:72::-;-1:-1:-1;12848:19:81;-1:-1:-1;12880:13:81;12949:54;-1:-1:-1;12949:54:81;1255:35660;;;;12949:54;12875:280;12930:3;12899:22;;1255:35660;;12895:33;;;;;12949:54;:32;:25;;;;;:::i;:54::-;;12945:96;;12930:3;13054:32;:25;:22;;;:25;:::i;:32::-;1255:35660;13054:55;2024:14:2;;;1255:35660:81;;;;13054:55;1255:35660;;13054:55;13050:97;;12930:3;2763:4:48;;12880:13:81;;13050:97;2763:4:48;;-1:-1:-1;13050:97:81;;12945:96;2763:4:48;;-1:-1:-1;12945:96:81;;12895:33;13369:48;12895:33;13317:44;12895:33;13229:59;12895:33;13162:59;12895:33;1255:35660;;:::i;13162:59::-;1255:35660;;:::i;12113:33::-;;;;;;;;;;;;;:::i;:::-;;;;;11372:66;;;;1255:35660;11372:66;1255:35660;11372:66;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;11078;;;;;;;;;;;;;;:::i;:::-;;;;10404:30;10361:107;-1:-1:-1;10404:30:81;;10259;10216:106;-1:-1:-1;10259:30:81;;9403:27;;;;;;;;;;;;;;:::i;:::-;;;;1255:35660;;;;;;;;;;;:::i;:::-;;;;;;;;;;;3162:18:9;1255:35660:81;2763:4:48;;;:::i;:::-;1255:35660:81;;;;;;;:::i;:::-;2763:4:48;;;3162:18:9;1255:35660:81;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;28426:79;28332:38;28426:79;28261:41;28267:34;1255:35660;;;;;;:::i;:::-;;28267:34;:::i;:::-;1255:35660;;2763:4:48;;28261:41:81;1255:35660;;;;;;;;;28332:38;;1255:35660;;28332:38;;1255:35660;;;;;;;28332:38;;;;;;;;;:::i;:::-;1255:35660;;28449:38;1255:35660;28426:79;;;1255:35660;;;;28426:79;;;2763:4:48;1255:35660:81;;;;;;;;28426:79;336:42:2;28410:96:81;;;;-1:-1:-1;28410:96:81;1255:35660;;;28410:96;;;;2024:14:2;28410:96:81;;1255:35660;28410:96;;;:::i;:::-;;;;336:42:2;28410:96:81;;;;;;;28512:37;28410:96;-1:-1:-1;28410:96:81;;;-1:-1:-1;28512:7:81;2763:4:48;28512:28:81;;2763:4:48;;1255:35660:81;;2763:4:48;;28410:96:81;;;;;;;:::i;:::-;;;;1255:35660;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;3653:18:9;1255:35660:81;2763:4:48;;;:::i;:::-;1255:35660:81;;;;;;;:::i;:::-;2763:4:48;;;1255:35660:81;;;3653:18:9;1255:35660:81;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;336:42:2;27083:40:81;;;;1255:35660;;2024:14:2;27083:40:81;;1255:35660;;;27093:29;;1255:35660;27083:40;;1255:35660;-1:-1:-1;1255:35660:81;;;336:42:2;27083:40:81;;;;;;;;1255:35660;27129:40;336:42:2;27129:40:81;;;;1255:35660;;2024:14:2;27129:40:81;;1255:35660;;;27139:29;;1255:35660;27129:40;;1255:35660;-1:-1:-1;1255:35660:81;;;336:42:2;27129:40:81;;;;;;27261:55;27129:40;27199:46;27129:40;27199:46;27129:40;;;1255:35660;;;;27199:46;;;1255:35660;27199:46;;1255:35660;;;;;;;;;;;;;;;;27199:46;27261:55;1255:35660;;27261:55;;;1255:35660;27261:55;;;:::i;:::-;336:42:2;27356:61:81;;;;1255:35660;;2024:14:2;27356:61:81;;19127:44;1255:35660;27356:61;;1255:35660;;-1:-1:-1;1255:35660:81;;;;;27356:61;1255:35660;27129:40;;;-1:-1:-1;27129:40:81;;;:::i;:::-;;;;27083;;;-1:-1:-1;27083:40:81;;;:::i;:::-;;;;1255:35660;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;28803:2;1255:35660;;28778:27;28774:101;;1255:35660;28885:13;;-1:-1:-1;28880:316:81;28928:3;1255:35660;;28900:26;;;;;28951:32;:18;;;;;:::i;:32::-;;;336:42:2;28941:43:81;;;;1255:35660;;2024:14:2;28941:43:81;;1255:35660;;;;28941:43;;1255:35660;-1:-1:-1;1255:35660:81;;;336:42:2;28941:43:81;;;;;;;;28928:3;29038:13;-1:-1:-1;29081:3:81;1255:35660;;29053:26;;;;;29100:6;;;29096:86;;29081:3;2763:4:48;;29038:13:81;;29096:86;29130:18;;;;;:::i;:::-;1255:35660;29130:40;29152:18;;;;;:::i;29130:40::-;1255:35660;;29130:40;;29120:51;336:42:2;29120:51:81;;;;1255:35660;;2024:14:2;29120:51:81;;1255:35660;;;;29120:51;;1255:35660;-1:-1:-1;1255:35660:81;;;336:42:2;29120:51:81;;;;;;;2763:4:48;29120:51:81;;;29096:86;;;;;;29120:51;;;-1:-1:-1;29120:51:81;;;:::i;:::-;;;;29053:26;-1:-1:-1;2763:4:48;;;;;28885:13:81;;28941:43;;;-1:-1:-1;28941:43:81;;;:::i;:::-;;;;28900:26;;29232:1;1255:35660;;29205:28;29201:103;;28880:316;29369:13;;-1:-1:-1;29364:232:81;29414:3;1255:35660;;29384:28;;;;;-1:-1:-1;29477:3:81;1255:35660;;29447:28;;;;;29496:6;;;29492:90;;29477:3;2763:4:48;;29432:13:81;;29492:90;29526:20;;;;;:::i;:::-;1255:35660;29526:44;29550:20;;;;;:::i;29526:44::-;1255:35660;;29526:44;;29516:55;336:42:2;29516:55:81;;;;1255:35660;;2024:14:2;29516:55:81;;1255:35660;;;;29516:55;;1255:35660;-1:-1:-1;1255:35660:81;;;336:42:2;29516:55:81;;;;;;;2763:4:48;29516:55:81;;;29492:90;;;;;;29516:55;;;-1:-1:-1;29516:55:81;;;:::i;:::-;;;;29447:28;-1:-1:-1;2763:4:48;;;;;29369:13:81;;29384:28;;;29623:53;29384:28;1255:35660;;29623:53;;:::i;:::-;1255:35660;;;:::i;:::-;;29813:51;1255:35660;;;;;;;29813:51;29875:13;-1:-1:-1;29870:271:81;29918:3;1255:35660;;29890:26;;;;;30070:64;2763:4:48;29953:18:81;29931:40;29953:18;;;;;:::i;:::-;1255:35660;;;;;29931:40;30012:39;;;:::i;30070:64::-;29918:3;2763:4:48;29875:13:81;;;29890:26;;;-1:-1:-1;30146:165:81;30196:3;1255:35660;;30166:28;;;;;30220:84;2763:4:48;30283:20:81;;;;;;:::i;:::-;30220:84;;:::i;:::-;30196:3;2763:4:48;30151:13:81;;;30166:28;;;;;30735:106;30166:28;;;30368:67;;30489:29;;;;;30475:44;1255:35660;2763:4:48;30489:29:81;1255:35660;30475:44;:::i;:::-;30525:81;;;30489:29;30791:15;;:::i;:::-;30735:106;;:::i;:::-;1255:35660;30847:68;1255:35660;;;;:::i;30847:68::-;31029:29;31039:18;1255:35660;;31039:18;:::i;31029:29::-;31069:13;-1:-1:-1;31115:3:81;1255:35660;;31084:29;;;;;31160:5;31152:14;;31160:5;2763:4:48;31160:5:81;;:::i;:::-;31152:14;;:::i;:::-;-1:-1:-1;31128:38:81;;;;;:::i;:::-;;2763:4:48;31069:13:81;;31084:29;;;;-1:-1:-1;31274:48:81;31084:29;31274:28;2763:4:48;31274:7:81;2763:4:48;1255:35660:81;2763:4:48;;;1255:35660:81;2763:4:48;;31274:48:81;;;;;;;;;-1:-1:-1;;;31274:48:81;;;31064:109;31337:18;31328:68;2024:14:2;1255:35660:81;31337:18;;;;2024:14:2;1255:35660:81;;;;2024:14:2;1255:35660:81;;;;;;:::i;31328:68::-;1255:35660;31411:22;;;31402:93;31411:22;;1255:35660;;;;;:::i;31402:93::-;-1:-1:-1;31519:347:81;31567:3;1255:35660;;31539:26;;;;;-1:-1:-1;31611:13:81;;31661:3;31630:22;;1255:35660;;31626:33;;;;;31680:25;;:32;:25;;:::i;:32::-;1255:35660;31680:54;31716:18;;;;;:::i;31680:54::-;1255:35660;;31680:54;31676:112;;2763:4:48;;31611:13:81;;31676:112;31748:12;;;;2763:4:48;31748:12:81;31803:56;31748:12;;;;31606:190;1255:35660;;:::i;31803:56::-;2763:4:48;31524:13:81;;;;;;31626:33;;;;;31803:56;2763:4:48;31626:33:81;;;;;;;31539:26;;;;;31871:603;;1255:35660;31871:603;1255:35660;;31906:92;1255:35660;;;:::i;:::-;31906:92;;:::i;:::-;32015:21;32006:93;32015:21;;1255:35660;;;;;:::i;32006:93::-;-1:-1:-1;32157:3:81;1255:35660;;32127:28;;;;;-1:-1:-1;32205:13:81;;32254:3;32224:21;;1255:35660;;32220:32;;;;;32275:24;;;;;:::i;:::-;1255:35660;32275:48;32303:20;;;;;:::i;32275:48::-;1255:35660;;32275:48;32271:112;;2763:4:48;32254:3:81;;2763:4:48;32205:13:81;;;;32271:112;32339:12;;;2763:4:48;32339:12:81;32402:57;32339:12;32200:193;1255:35660;;:::i;32402:57::-;2763:4:48;32112:13:81;;32220:32;;2763:4:48;32220:32:81;;;;32402:57;32220:32;;;31274:48;;;;;;;;;;;;;;;:::i;:::-;;;;;;;30525:81;30560:39;1255:35660;;;;;;;30560:39;30525:81;;30489:29;30475:44;1255:35660;-1:-1:-1;30489:29:81;;29201:103;29232:1;29243:55;;29201:103;;28774:101;28803:2;28815:54;;28774:101;;1255:35660;;;;;;;;;;;2876:18:9;1255:35660:81;2763:4:48;;;:::i;:::-;1255:35660:81;;;;;;;:::i;:::-;2763:4:48;;;1255:35660:81;;;2876:18:9;1255:35660:81;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;23285:20;;336:42:2;23275:31:81;;;;1255:35660;;2024:14:2;23275:31:81;;1255:35660;;;;23275:31;;1255:35660;-1:-1:-1;1255:35660:81;;;336:42:2;23275:31:81;;;;;;;;1255:35660;-1:-1:-1;1255:35660:81;;23335:4;23316:23;;23335:4;;;23384:19;;;:::i;:::-;23416:13;23304:1;23459:3;1255:35660;;23431:26;;;;;2763:4:48;1255:35660:81;23474:52;23495:31;;23505:20;1255:35660;;23505:20;;:::i;:::-;23495:31;;:::i;:::-;23474:52;;;;:::i;:::-;2763:4:48;23416:13:81;;23431:26;;;23312:398;23784:31;1255:35660;;23784:31;:::i;:::-;23823:32;23304:1;23868:13;;23905:3;1255:35660;;23883:20;;;;;23304:1;23953:13;23968:24;;;;;;23948:171;24132:6;;2763:4:48;24132:6:81;;24128:89;;23948:171;2763:4:48;23868:13:81;;24128:89;24152:54;24194:12;;;;;:::i;:::-;24152:54;24168:22;;;:::i;:::-;24152:54;;;:::i;:::-;24128:89;;23994:3;24015:12;;;;;;;;;;:::i;:::-;1255:35660;24015:34;24031:18;;;;;:::i;24015:34::-;1255:35660;;24015:34;24011:98;;23953:13;;;;;;;2763:4:48;;23953:13:81;;24011:98;24065:12;;-1:-1:-1;24065:12:81;;-1:-1:-1;24065:12:81;2763:4:48;;24091:5:81;;23883:20;;;24267:66;;24395:51;1255:35660;24426:14;1255:35660;;;;;24395:51;23304:1;24452:149;24494:3;1255:35660;;24472:20;;;;;24518:76;2763:4:48;24581:12:81;;;;;;:::i;24518:76::-;24494:3;2763:4:48;24457:13:81;;;24472:20;24966:37;23304:1;24815:49;24472:20;;24747:39;24725:16;;:::i;:::-;24747:39;1255:35660;24768:13;1255:35660;;;;;;24747:39;;:::i;:::-;24815:49;:::i;:::-;24966:7;2763:4:48;24966:28:81;;2763:4:48;;1255:35660:81;;2763:4:48;;24966:37:81;;;;;;;;;25100:59;24966:37;23304:1;;;24966:37;;;24452:149;25018:21;1255:35660;25009:85;25018:21;;;;1255:35660;;;;;:::i;25009:85::-;1255:35660;;:::i;:::-;25100:59;;:::i;24966:37::-;1255:35660;24966:37;;25009:85;24966:37;;;;;;23304:1;24966:37;;;;;;:::i;:::-;;;;;;;;23312:398;23605:4;-1:-1:-1;23582:128:81;23312:398;23582:128;23605:4;23654:50;;23312:398;;23275:31;;;23304:1;23275:31;;;:::i;:::-;;;;1255:35660;;;;;;;;;;;2575:18:9;1255:35660:81;2763:4:48;;;:::i;:::-;1255:35660:81;;;;;;;:::i;:::-;2763:4:48;;;2575:18:9;1255:35660:81;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15166:105;14422:64;13545:16;;:::i;:::-;2763:4:48;13575:250:81;2763:4:48;;:::i;:::-;1255:35660:81;;;13653:3;1255:35660;13594:231;;1255:35660;;;:::i;:::-;13594:231;;;1255:35660;-1:-1:-1;13594:231:81;;;1255:35660;6805:18;13594:231;;;2763:4:48;6805:18:81;13594:231;;;2763:4:48;13559:1:81;13594:231;;;1255:35660;13594:231;13575:13;;;:250;;;;:::i;:::-;-1:-1:-1;1255:35660:81;;;;13948:30;;;;14077:100;13961:13;13948:30;14045:19;;:::i;:::-;1255:35660;13878:193;1255:35660;;:::i;:::-;;;;;;;;13878:193;1255:35660;13878:193;;1255:35660;13998:4;13594:231;13878:193;;1255:35660;;13594:231;13878:193;;1255:35660;13594:231;13878:193;;1255:35660;;;14152:22;;:::i;:::-;1255:35660;;;:::i;:::-;;;;14107:70;1255:35660;14107:70;;1255:35660;14077:24;:100;;;;:::i;:::-;;14364:39;14272:51;1255:35660;14303:14;1255:35660;;;;;14272:51;14364:39;;:::i;14422:64::-;14756:49;1255:35660;;:::i;14756:49::-;14919:15;;:::i;:::-;14942:33;;;;:::i;:::-;;;;;:::i;:::-;;15018:16;;:::i;:::-;1255:35660;15042:39;1255:35660;;;;;;;15042:39;15124:16;;:::i;15166:105::-;13594:231;1255:35660;15352:43;1255:35660;15329:79;;;1255:35660;14303:14;15329:79;;1255:35660;;;15329:79;1255:35660;;;;15329:79;1255:35660;15329:79;336:42:2;15313:96:81;;;;-1:-1:-1;15313:96:81;1255:35660;13594:231;1255:35660;15313:96;;;;2024:14:2;15313:96:81;;1255:35660;15313:96;;;:::i;13948:30::-;14077:100;-1:-1:-1;13948:30:81;;1255:35660;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;2991:66;1255:35660;;;;;:::i;:::-;1693:16;;:::i;:::-;1255:35660;2763:4:48;3031:16:81;2798:64;2763:4:48;;:::i;:::-;1255:35660:81;;;1742:231;1801:3;1742:231;;;1255:35660;;;:::i;:::-;1742:231;;;1255:35660;-1:-1:-1;1742:231:81;;;1255:35660;6805:18;1742:231;;;2763:4:48;6805:18:81;1742:231;;;2763:4:48;1707:1:81;1742:231;;;1255:35660;1723:250;1742:231;1723:13;;;;;:250;;;;:::i;:::-;-1:-1:-1;1255:35660:81;;;;2096:30;;;;2341:206;2109:13;2096:30;2193:19;;:::i;:::-;1255:35660;2026:193;1255:35660;;:::i;2026:193::-;;;;1255:35660;2146:4;1742:231;2026:193;;1255:35660;;1742:231;2026:193;;1255:35660;1742:231;2026:193;;1255:35660;;;2233:100;2308:22;;:::i;:::-;1255:35660;;:::i;:::-;;;;2263:70;;;;1255:35660;2233:24;;:100;;;;:::i;:::-;;1255:35660;2341:27;1255:35660;;:::i;:::-;2763:4:48;6805:18:81;2763:4:48;;-1:-1:-1;2380:167:81;;;1255:35660;-1:-1:-1;1742:231:81;2380:167;;1255:35660;-1:-1:-1;1742:231:81;2380:167;;1255:35660;-1:-1:-1;1742:231:81;2380:167;;1255:35660;2341:24;:27;:::i;:::-;;:33;;:206;;;;:::i;2798:64::-;3031:13;;:16;:::i;:::-;;1742:231;1255:35660;2991:66;;;;;2024:14:2;2991:66:81;;1255:35660;2991:66;;;:::i;:::-;;:10;;:66;;;;;;;3592:105;3164:61;3098:42;-1:-1:-1;2991:66:81;3788:33;2991:66;;;;;2763:4:48;;;:::i;3164:61:81:-;3345:15;;:::i;:::-;3368:33;;;;:::i;:::-;;;;;:::i;:::-;;3444:16;;:::i;:::-;3468:39;1255:35660;;;;;;;3468:39;3550:16;;:::i;:::-;3592:105;;;:::i;:::-;2763:4:48;3788:15:81;2763:4:48;3788:7:81;2763:4:48;1255:35660:81;2763:4:48;;;1255:35660:81;2763:4:48;;3788:15:81;1255:35660;1742:231;1255:35660;3788:33;;;;;;2024:14:2;3788:33:81;;1255:35660;3788:33;;;:::i;:::-;;;;;;;;;;4455:48;3788:33;-1:-1:-1;3788:33:81;;;2096:30;3838:18;4403:44;3838:18;4283:91;2024:14:2;1255:35660:81;3943:21;1742:231;3838:18;;3829:64;3838:18;;1255:35660;2763:4:48;;:::i;3943:21:81:-;;3972:58;2763:4:48;;;1255:35660:81;;;;2763:4:48;1255:35660:81;;:::i;3972:58::-;4047:21;2024:14:2;1255:35660:81;;;;2024:14:2;4038:79:81;1255:35660;;;;;;;;;;;;:::i;4038:79::-;4125:70;1742:231;4134:21;;;1255:35660;2763:4:48;;:::i;4125:70:81:-;4292:32;:25;1742:231;4212:22;;4203:72;4212:22;;1255:35660;;;:::i;4292:32::-;1255:35660;;;:::i;3788:33::-;;;4403:44;3788:33;;;;;;;;;;;:::i;:::-;;;;;2991:66;;;;1255:35660;2991:66;1255:35660;2991:66;;;;;;;:::i;:::-;;;;2096:30;2341:206;-1:-1:-1;2096:30:81;;1255:35660;;;;;;;:::i;:::-;19337:47;1255:35660;19366:13;1255:35660;;;;;19337:47;19482:96;19390:20;;;;;:56;;:::i;19482:96::-;19610:51;1255:35660;19641:14;1255:35660;;;;;19610:51;20091:108;19700:16;;:::i;20091:108::-;1255:35660;20205:84;1255:35660;;;;:::i;20205:84::-;20366:45;20376:34;1255:35660;;20376:34;:::i;20366:45::-;20422:13;19366:18;20457:3;1255:35660;;20437:18;;;;;20483:26;;;19714:1;20483:26;;;:::i;:::-;19366:18;20470:39;;;;;:::i;:::-;;2763:4:48;20422:13:81;;20437:18;;;20713:91;20437:18;20713:91;20749:36;20650:47;20592:20;;;:::i;20650:47::-;20749:36;;:::i;:::-;1255:35660;19741:215;1255:35660;20713:91;;;19366:13;20713:91;;;:::i;:::-;336:42:2;20918:56:81;;;;19741:215;1255:35660;2024:14:2;20918:56:81;;26878:39;1255:35660;20918:56;;1255:35660;;19366:18;1255:35660;;;;;20918:56;1255:35660;;;;;6027:33;1255:35660;;;:::i;:::-;4608:47;1255:35660;4637:13;1255:35660;;;;;4608:47;4753:96;4661:20;;;;;:56;;:::i;4753:96::-;4637:18;5237:84;4889:16;;:::i;:::-;2763:4:48;4919:250:81;2763:4:48;;:::i;:::-;1255:35660:81;;;4997:3;4637:13;4938:231;;1255:35660;;;:::i;:::-;4938:231;;;1255:35660;4938:231;;;;1255:35660;4938:231;;;;2763:4:48;4938:231:81;4661:20;4938:231;;2763:4:48;4903:1:81;4938:231;;;1255:35660;4938:231;4919:13;;;:250;;;;:::i;:::-;;2763:4:48;;:::i;:::-;;;:::i;:::-;5237:84:81;;;:::i;:::-;1255:35660;5831:105;5416:51;1255:35660;5293:14;1255:35660;;;;;5416:51;5584:15;;;:::i;:::-;5607:33;;;;:::i;:::-;;;;;:::i;:::-;;5683:16;;:::i;:::-;5742;;:::i;:::-;1255:35660;5766:39;1255:35660;4637:13;1255:35660;;;;;5766:39;5831:105;;:::i;6027:33::-;;;;;;;;;;6620:48;6027:33;4637:18;6027:33;;;1255:35660;6077:18;6568:44;6077:18;6276:96;6285:34;4938:231;6182:21;4938:231;6077:18;;6068:64;6077:18;;1255:35660;2763:4:48;;:::i;6285:34:81:-;4637:13;1255:35660;;;2763:4:48;;:::i;6276:96:81:-;6380:70;4938:231;6389:21;;;1255:35660;2763:4:48;;:::i;6027:33:81:-;;;6568:44;6027:33;;;;;;;;;;;:::i;:::-;;;;;1255:35660;;;;;;;;;;;;;;;2723:18:9;1255:35660:81;;;;;;;2723:18:9;1255:35660:81;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;2024:14:2;32670:27:81;;;;;;1255:35660;32670:27;;1255:35660;;;;;;;;;;;;;;;;;;32670:27;;;-1:-1:-1;336:42:2;32670:27:81;;;;;;35252:132;32670:27;35045:106;32670:27;-1:-1:-1;32670:27:81;;;1255:35660;;32704:48;1255:35660;;;;;;;;;;;;;32704:48;32758:49;2024:14:2;;;1255:35660:81;;;;32758:49;32813:21;;;;:57;;:::i;:::-;1255:35660;;32813:21;32906;;;:57;;:::i;:::-;1255:35660;;34068:86;33070:16;;:::i;:::-;2763:4:48;33360:251:81;2763:4:48;;:::i;:::-;1255:35660:81;;;33178:3;1255:35660;33119:232;;1255:35660;2763:4:48;;:::i;:::-;1255:35660:81;33119:232;;1255:35660;-1:-1:-1;33119:232:81;;;1255:35660;6805:18;32670:27;33119:232;;2763:4:48;6805:18:81;32813:21;33119:232;;2763:4:48;;33119:232:81;;;1255:35660;33100:251;1255:35660;33100:13;;;;;:251;;;;:::i;:::-;;2763:4:48;;:::i;:::-;1255:35660:81;;;33379:232;33438:3;1255:35660;33379:232;;1255:35660;2763:4:48;;:::i;:::-;1255:35660:81;33379:232;;1255:35660;-1:-1:-1;33119:232:81;33379;;1255:35660;6805:18;32670:27;33379:232;;2763:4:48;6805:18:81;32813:21;33379:232;;2763:4:48;;33119:232:81;33379;;1255:35660;33360:13;:251;;;;:::i;:::-;;33853:85;33731;2763:4:48;;;:::i;:::-;;;:::i;:::-;33731:85:81;;;:::i;:::-;2763:4:48;;;:::i;:::-;;;:::i;:::-;33853:85:81;;;:::i;:::-;2763:4:48;;;;:::i;:::-;34068:86:81;;:::i;:::-;1255:35660;34594:106;34211:51;1255:35660;;;;;;;34211:51;34364:16;;;:::i;:::-;1255:35660;34386:39;1255:35660;;;;;;;34386:39;34464:15;;:::i;:::-;34485:34;;;;;:::i;:::-;;;;;:::i;:::-;;34525;;;:::i;:::-;;;;;:::i;:::-;;34666:16;;:::i;:::-;34594:106;;;:::i;:::-;34784:16;34851:40;2024:14:2;34784:16:81;;:::i;:::-;1255:35660;34806:39;1255:35660;;;;;;;;34806:39;;;:::i;2024:14:2:-;34851:40:81;;;:::i;:::-;34914:15;;:::i;:::-;34935:34;;;;:::i;:::-;;;;;:::i;:::-;;34975;;;:::i;:::-;;;;;:::i;:::-;;35117:16;;:::i;35045:106::-;1255:35660;;;;;;:::i;:::-;35252:132;;:::i;32670:27::-;;;;;;;;;;;;;;;:::i;:::-;;;;;1255:35660;;;;;;;:::i;:::-;16381:47;1255:35660;16410:13;1255:35660;;;;;16381:47;16526:96;16434:20;;;;;:56;;:::i;16526:96::-;16711:51;1255:35660;16742:14;1255:35660;;;;;16711:51;16801:16;;;:::i;:::-;2763:4:48;16823:234:81;2763:4:48;;:::i;16823:234:81:-;-1:-1:-1;16842:215:81;1255:35660;2024:14:2;17101:30:81;;1255:35660;;17101:30;;1255:35660;;;;;;;;;;;16842:215;1255:35660;;;-1:-1:-1;336:42:2;17101:30:81;;;;;;;17548:106;17101:30;17199:87;17101:30;16410:18;17101:30;;;2763:4:48;;;:::i;17199:87:81:-;17357:15;;;:::i;:::-;17378:33;;;;:::i;:::-;;;;;:::i;:::-;;17452:16;;:::i;:::-;1255:35660;17474:39;1255:35660;16410:13;1255:35660;;;;;;;;;;;;;;;;;;1065:26:16;1255:35660:81;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;336:42:2;27573:39:81;;;;1255:35660;;2024:14:2;27573:39:81;;1255:35660;;;27583:28;;1255:35660;27573:39;;1255:35660;;-1:-1:-1;1255:35660:81;;;336:42:2;27573:39:81;;;;;;;27682:45;27973:34;27573:39;27682:45;27573:39;1255:35660;27573:39;;;1255:35660;;;27682:45;;;1255:35660;27682:45;;1255:35660;;;;;;;;;;;;;;;;27682:45;27870:57;27776:29;1255:35660;;;;2763:4:48;;27776:29:81;27870:57;1255:35660;;27870:57;;;1255:35660;27870:57;;;:::i;1255:35660::-;;;;;;;;;;2024:14:2;;;;;;:::i;:::-;;;;;;;;;;1255:35660:81;;;;;;:::i;:::-;2024:14:2;;;;;:::i;:::-;;;;;;;;;;;1255:35660:81;2024:14:2;;;1255:35660:81;2024:14:2;;;;;;;;;;:::o;1255:35660:81:-;;;;;;;;:::i;:::-;;;;;;;;;:::o;2763:4:48:-;1255:35660:81;;;;;;;:::i;:::-;2763:4:48;1255:35660:81;;2763:4:48;;;;;:::o;:::-;;;;;;;;;;;1255:35660:81;;2763:4:48;;;;;;:::o;:::-;;:::i;:::-;1255:35660:81;;2763:4:48;;;;;;;;:::o;:::-;1255:35660:81;;2763:4:48;;;;;;;;;;;;:::o;:::-;1255:35660:81;;;;;;;:::i;:::-;2763:4:48;1255:35660:81;;2763:4:48;;;;;:::o;:::-;1255:35660:81;;;;;;;;;:::i;:::-;7071:1;2763:4:48;;;;;;-1:-1:-1;2763:4:48;;;;;;;;;:::o;:::-;;1255:35660:81;2763:4:48;;;;;;;;;;;1255:35660:81;;;;;;;:::i;:::-;21171:18;2763:4:48;;;;21171:18:81;2763:4:48;;;;;;;;;:::o;:::-;;1255:35660:81;2763:4:48;;;;;;;;;;;1255:35660:81;;;;;;;;;;:::i;:::-;18337:1;2763:4:48;;;;;;-1:-1:-1;2763:4:48;;;;;;;;;:::o;:::-;;1255:35660:81;2763:4:48;;;;;;;;;;;1255:35660:81;;;;;;:::i;:::-;2763:4:48;1255:35660:81;6805:13;1255:35660;;;;2763:4:48;;6805:13:81;2763:4:48;;1255:35660:81;2763:4:48;;1255:35660:81;2763:4:48;;1255:35660:81;2763:4:48;;;;;1255:35660:81;2763:4:48:o;:::-;1255:35660:81;;;;;;:::i;:::-;7806:14;1255:35660;;;;;2763:4:48;;;;;1255:35660:81;2763:4:48;;1255:35660:81;2763:4:48;;1255:35660:81;2763:4:48;;;;;1255:35660:81;2763:4:48:o;:::-;1255:35660:81;;;;;;;:::i;:::-;6805:18;2763:4:48;;;;1255:35660:81;2763:4:48;;;:::o;:::-;1255:35660:81;;;;;;;;;;:::i;:::-;2763:4:48;;;;;;;;;;;:::o;:::-;1255:35660:81;;;;;;;;;:::i;:::-;9484:1;2763:4:48;;;;;;;;;;:::o;:::-;1255:35660:81;;;;;;;;;:::i;:::-;23335:4;2763::48;;;;;;;;;;:::o;:::-;;;;;:::i;:::-;1255:35660:81;;;;;;:::i;:::-;2763:4:48;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;1255:35660:81;;;;;;;:::i;:::-;2763:4:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;2024:14:2;;;;;;;:::i;:::-;2763:4:48;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1255:35660:81;;;;;;;:::i;:::-;2763:4:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;1255:35660:81;;;;;;:::i;:::-;2763:4:48;;;2024:14:2;;;;:::i;:::-;2763:4:48;;1255:35660:81;2763:4:48;;2024:14:2;2763:4:48;;;;;;;2024:14:2;1255:35660:81;2763:4:48;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1255:35660:81;;;;;;;:::i;:::-;2763:4:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;2763:4:48;;;;;;;;;;;;;;;;;;;;;;;;1255:35660:81;2763:4:48;;;;;;;;1255:35660:81;;;;;;:::i;:::-;2763:4:48;;;2024:14:2;;;;:::i;:::-;2763:4:48;;1255:35660:81;2763:4:48;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1255:35660:81;;;;;;;:::i;:::-;2763:4:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1255:35660:81;;;;;;:::i;:::-;2763:4:48;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;1255:35660:81;2763:4:48;;2024:14:2;1255:35660:81;2763:4:48;;;;;;2024:14:2;2763:4:48;;;;;;;2024:14:2;2763:4:48;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;1255:35660:81;;;;;;;:::i;:::-;2763:4:48;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;1255:35660:81;;;;;:::i;:::-;2763:4:48;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;1255:35660:81;;;;;;;:::i;:::-;2763:4:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;1255:35660:81;;;;;;:::i;:::-;2763:4:48;;;;;;;:::i;:::-;;;1255:35660:81;2763:4:48;;2024:14:2;;;;:::i;:::-;2763:4:48;;;;;;;;;;;:::i;:::-;1255:35660:81;2763:4:48;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2024:14:2;;;;:::i;:::-;2763:4:48;;;;;;;:::i;:::-;;;;;1255:35660:81;2763:4:48;;2024:14:2;1255:35660:81;2763:4:48;;;;;;2024:14:2;2763:4:48;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2024:14:2;;2763:4:48;;2024:14:2;2763:4:48;;;2024:14:2;:::i;:::-;2763:4:48;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;1255:35660:81;;;;;;;;2763:4:48;1255:35660:81;2763:4:48;;;;;;;1255:35660:81;;2763:4:48;-1:-1:-1;2763:4:48;;;;;;;;;;;;;:::o;:::-;;;;;;1255:35660:81;2763:4:48;;;;;;;;;;;;;1255:35660:81;2763:4:48;;1255:35660:81;;;2763:4:48;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;1255:35660:81;;2763:4:48;;;1255:35660:81;2763:4:48;;;;1255:35660:81;;2763:4:48;;;1255:35660:81;2763:4:48;;;;;1255:35660:81;;2763:4:48;;;;;;;;;;;;1255:35660:81;;;;;;;;;;;2763:4:48;-1:-1:-1;2763:4:48;;;;;;;;;;:::o;:::-;;;1255:35660:81;;;;;;;;;;;;;2763:4:48;;;;;;;;;;;;;;;;;;;1255:35660:81;;2763:4:48;;;;;;;;1255:35660:81;;2763:4:48;;;1255:35660:81;2763:4:48;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;1255:35660:81;;;;;;;:::i;:::-;2763:4:48;1255:35660:81;;2763:4:48;1255:35660:81;2763:4:48;;;:::o;:::-;1255:35660:81;;;;;;;:::i;:::-;2763:4:48;1255:35660:81;;2763:4:48;;;;;:::o;:::-;1255:35660:81;;;;;;;:::i;:::-;2763:4:48;1255:35660:81;;2763:4:48;1255:35660:81;2763:4:48;;;:::o;:::-;1255:35660:81;;;;;;;:::i;:::-;2763:4:48;1255:35660:81;;2763:4:48;;;;;:::o;:::-;1255:35660:81;;;;;;;:::i;:::-;2763:4:48;1255:35660:81;;2763:4:48;1255:35660:81;2763:4:48;;;;;;;;:::o;:::-;1255:35660:81;;;;;;;:::i;:::-;2763:4:48;1255:35660:81;;2763:4:48;1255:35660:81;2763:4:48;;;:::o;1255:35660:81:-;;;;;-1:-1:-1;1255:35660:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;1255:35660:81;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1255:35660:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2763:4:48;;;:::i;:::-;1255:35660:81;;;;;;;:::i;:::-;2763:4:48;;;1255:35660:81;;;;-1:-1:-1;1255:35660:81;;-1:-1:-1;1255:35660:81;-1:-1:-1;1255:35660:81;;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;21308:1;1255:35660;;;;;;;:::o;:::-;;:::i;:::-;;31164:1;1255:35660;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;2763:4:48;;;;:::i;1255:35660:81:-;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;35790:1;2763:4:48;;;;35790:1:81;1255:35660;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;35790:1;1255:35660;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13559:1;2763:4:48;;;1255:35660:81;;2763:4:48;-1:-1:-1;1255:35660:81;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;-1:-1:-1;1255:35660:81;;;;;;;;;;;;;;;;996:2:35;1255:35660:81;;;;;;;:::i;:::-;996:2:35;1255:35660:81;;996:2:35;1255:35660:81;996:2:35;;;;;;;;:::o;:::-;1255:35660:81;;;;;;;:::i;:::-;996:2:35;1255:35660:81;;996:2:35;1255:35660:81;996:2:35;;1255:35660:81;996:2:35;;;;;:::o;:::-;1255:35660:81;;;;;;;:::i;:::-;996:2:35;1255:35660:81;;996:2:35;;;;;:::o;:::-;1255:35660:81;;;;;;;:::i;:::-;996:2:35;1255:35660:81;;996:2:35;;;;;:::o;:::-;1255:35660:81;;;;;;;:::i;:::-;996:2:35;1255:35660:81;;996:2:35;;;;;:::o;:::-;1255:35660:81;;;;;;;:::i;:::-;996:2:35;1255:35660:81;;996:2:35;;;;;:::o;:::-;1255:35660:81;;;;;;;:::i;:::-;996:2:35;1255:35660:81;;996:2:35;;;;;:::o;1255:35660:81:-;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1255:35660:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2024:14:2;;1255:35660:81;;;;;;;;;2024:14:2;;;;;1255:35660:81;;2024:14:2;;1255:35660:81;;;;;;;;;2024:14:2;;;;;1255:35660:81;;2024:14:2;1255:35660:81;;;;;;;;;;2024:14:2;;;;;1255:35660:81;;2024:14:2;1255:35660:81;;;;;;;;;;2024:14:2;;;;;1255:35660:81;;2024:14:2;1255:35660:81;;;;;;;;;;2024:14:2;;;;;1255:35660:81;;2024:14:2;1255:35660:81;;;;;;;;;;2024:14:2;;;;;1255:35660:81;;2024:14:2;1255:35660:81;;;;;;;;;2024:14:2;1255:35660:81;2024:14:2;1255:35660:81;;2024:14:2;;;;1255:35660:81;;;;;;;;;;;;;;;;;;;;;;;;2024:14:2;;;;1255:35660:81;;;;;;;2024:14:2;;;;;1255:35660:81;;;;;2024:14:2;;;;;1255:35660:81;;;;;2024:14:2;;;;;1255:35660:81;;;;;2024:14:2;;;;;1255:35660:81;;;;;2024:14:2;;;;;1255:35660:81;;;;;2024:14:2;;;;;1255:35660:81;;;;2024:14:2;;;1255:35660:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;1255:35660:81;;-1:-1:-1;1255:35660:81;;;;-1:-1:-1;1255:35660:81;;;;-1:-1:-1;1255:35660:81;;;;;;:::o;:::-;;;;;;;;;;:::i;:::-;9484:1;2763:4:48;;;1255:35660:81;;2763:4:48;-1:-1:-1;1255:35660:81;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2024:14:2;1255:35660:81;:::o;:::-;;;;;;;;;;;;;;;2763:4:48;1255:35660:81;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;2763:4:48;1255:35660:81;;;;;;;;;;;;;;;;;;;;;;;;2763:4:48;1255:35660:81;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1255:35660:81;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;2763:4:48;;;1255:35660:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;2763:4:48;1255:35660:81;;;;;;;2763:4:48;1255:35660:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;2763:4:48;1255:35660:81;;;;;;;2763:4:48;1255:35660:81;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;13698:1;2763:4:48;;1255:35660:81;;;13698:1;1255:35660;:::i;:::-;;;13698:1;1255:35660;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;13698:1;1255:35660;;13698:1;1255:35660;;;;13698:1;1255:35660;;;;13698:1;1255:35660;;;;13698:1;1255:35660;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1707:1;2763:4:48;;1255:35660:81;;;1707:1;1255:35660;:::i;:::-;;;-1:-1:-1;1255:35660:81;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;-1:-1:-1;1255:35660:81;;-1:-1:-1;1255:35660:81;;;;-1:-1:-1;1255:35660:81;;;;-1:-1:-1;1255:35660:81;;;;-1:-1:-1;1255:35660:81;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1243:204:4:-;1302:7;1255:35660:81;;;;;;;1325:14:4;:::o;1298:143::-;1255:35660:81;;;2024:14:2;1377:39:4;;;;;;;;192:59;;;;;1255:35660:81;;;;192:59:4;2763:4:48;1377:39:4;;1255:35660:81;1377:39:4;;;;;;;1255:35660:81;1377:39:4;;;1298:143;1377:53;;;1370:60;:::o;1377:39::-;;;;;;;;;;;;;;:::i;:::-;;;;1255:35660:81;;-1:-1:-1;1255:35660:81;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2815:199:15:-;;6805:18:81;2933:19:15;2815:199;2933:19;:::i;:::-;1255:35660:81;6805:18;1255:35660;;;9786:54:15;1255:35660:81;;;;;;:::i;:::-;;;;;;;;;;;9786:54:15;;;1255:35660:81;9786:54:15;;;;;;;;;1255:35660:81;;;;;;:::i;:::-;;;;;2763:4:48;9786:54:15;;;;;;;;:::i;:::-;1255:35660:81;9371:159:15;679:42;9371:159;;;2815:199::o;:::-;21311:2:81;21308:1;2933:19:15;2815:199;2933:19;:::i;2815:199::-;28296:4:81;28290;2933:19:15;2815:199;2933:19;:::i;2815:199::-;;2933:19;2815:199;;2933:19;:::i;2321:4:48:-;;2763;;;:::i;:::-;1255:35660:81;;;;;;:::i;:::-;2763:4:48;;;2321;;;;;:::i;:::-;;;-1:-1:-1;2321:4:48;;;;;;;;;:::o;:::-;;1255:35660:81;;;;;;:::i;:::-;-1:-1:-1;2321:4:48;;-1:-1:-1;2321:4:48;;;;1255:35660:81;;2321:4:48;;;-1:-1:-1;1255:35660:81;2321:4:48;;;-1:-1:-1;2321:4:48;;;;-1:-1:-1;2321:4:48;;;;-1:-1:-1;2321:4:48;;;;;;;;;;;;;1279:329:82;1255:35660:81;;;;;;:::i;:::-;-1:-1:-1;1255:35660:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1456:4:82;1255:35660:81;;;2763:4:48;1536:16:82;;:::i;:::-;1512:40;;1574:29;7071:1:81;1574:29:82;:::i;:::-;1558:45;;1279:329::o;:::-;1255:35660:81;;;;;;:::i;:::-;-1:-1:-1;1255:35660:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1456:4:82;1255:35660:81;;;2763:4:48;1536:16:82;;:::i;:::-;1512:40;;1574:29;21308:1:81;1574:29:82;:::i;4796:685::-;;1255:35660:81;5257:54:82;4796:685;5182:50;5068:22;6805:18:81;5068:13:82;;;;:22;:::i;:::-;;1198:21:40;;;;:::i;:::-;1255:35660:81;;;;;1188:32:40;5182:50:82;:::i;:::-;1255:35660:81;5068:13:82;1255:35660:81;5257:54:82;;;;;2024:14:2;5257:54:82;;;;;;:::i;:::-;;:10;;:54;;;;;;5350:35;5257:54;6805:18:81;5257:54:82;;;5350:35;;:::i;:::-;1255:35660:81;;;;;;;;;;:::i;:::-;;;;;;;;;3932:39:82;1255:35660:81;;:::i;:::-;6805:18;2024:14:2;;;1255:35660:81;;;;2024:14:2;1255:35660:81;;2024:14:2;3932:39:82;;1255:35660:81;;;;5257:54:82;3932:39;;1255:35660:81;;;;;;;;;;;3932:39:82;;;336:42:2;3932:39:82;;;;;;;4059:37;3932:39;3985:41;3932:39;3912:60;3932:39;6805:18:81;3932:39:82;;;4796:685;3912:60;;:::i;:::-;3985:41;:::i;:::-;6805:18:81;1255:35660;;4071:24:82;;1255:35660:81;;;;;;;;2024:14:2;4059:37:82;;1255:35660:81;;;;5257:54:82;4059:37;;1255:35660:81;;;;;;;;;;;4059:37:82;;;336:42:2;4059:37:82;;;;;;;4182:35;4059:37;4110:39;4059:37;4039:58;4059:37;6805:18:81;4059:37:82;;;4039:58;;:::i;:::-;4110:39;:::i;:::-;6805:18:81;4194:22:82;;;2763:4:48;1255:35660:81;;4182:35:82;;;;2024:14:2;4182:35:82;;5257:54;4182:35;;1255:35660:81;;;;;2763:4:48;;1255:35660:81;4182:35:82;;;336:42:2;4182:35:82;;;;;;;4305:37;4182:35;4231:41;4182:35;4162:56;4182:35;6805:18:81;4182:35:82;;;4162:56;;:::i;:::-;4231:41;:::i;:::-;6805:18:81;4317:24:82;;;2763:4:48;1255:35660:81;;4305:37:82;;;;2024:14:2;4305:37:82;;5257:54;4305:37;;1255:35660:81;;;;;2763:4:48;;1255:35660:81;4305:37:82;;;336:42:2;4305:37:82;;;;;;;4557:42;4305:37;4356:52;4305:37;4285:58;4305:37;6805:18:81;4305:37:82;;;4285:58;;:::i;:::-;4356:52;:::i;:::-;4441:20;6805:18:81;4569:29:82;1255:35660:81;4487:37:82;4421:53;4441:20;;;;;;:32;4421:53;;:::i;:::-;4487:37;:::i;:::-;4569:20;;:29;1255:35660:81;;;;;4569:29:82;1255:35660:81;;2024:14:2;4557:42:82;;1255:35660:81;;;;5257:54:82;4557:42;;1255:35660:81;;;;;;;;;;;4557:42:82;;;336::2;4557::82;;;;;;4613:45;4537:63;4703:27;4557:42;4691:40;4557:42;6805:18:81;4557:42:82;;;;;4537:63;;:::i;:::-;4613:45;:::i;:::-;4703:27;;;1255:35660:81;;4691:40:82;;;;2024:14:2;4691:40:82;;5257:54;4691:40;;;:::i;:::-;;;336:42:2;4691:40:82;;;;;;;5796:44;5731:52;5903:46;4691:40;4745:25;4671:61;5962:38;4691:40;5853:37;4691:40;6013:25;4691:40;6805:18:81;4691:40:82;;;4671:61;;:::i;:::-;4745:25;:::i;:::-;5731:52;;:::i;:::-;5796:44;:::i;:::-;5853:37;:::i;:::-;5903:46;:::i;4691:40::-;;;;;;;6805:18:81;4691:40:82;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;4557:42;;;;;;;;;;;;;;:::i;5257:54::-;;;;1255:35660:81;5257:54:82;1255:35660:81;5257:54:82;;;;;;;:::i;:::-;;;;4796:685;;1255:35660:81;5257:54:82;4796:685;5182:50;5068:22;2763:4:48;5068:13:82;;;;:22;:::i;1255:35660:81:-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;8077:303:97:-;1255:35660:81;;2024:14:2;8230:28:97;;1255:35660:81;;;;8230:28:97;;;1255:35660:81;8230:28:97;1255:35660:81;;;;;8230:28:97;;;1255:35660:81;8230:28:97;;;;;;8193:72;8230:28;;8298:45;8230:28;;;;;8077:303;8193:72;;:::i;:::-;8306:11;1255:35660:81;8306:11:97;:::i;:::-;1255:35660:81;;8298:45:97;;;;;2024:14:2;8298:45:97;;8230:28;8298:45;;;:::i;:::-;;;;1255:35660:81;8298:45:97;;;;;;;8230:28;8298:45;;;8349:26;8077:303;:::o;8298:45::-;;;;;;8230:28;8298:45;;;;;;:::i;8230:28::-;;;;;;;;;;;;;:::i;:::-;;;;8077:303;1255:35660:81;;2024:14:2;8230:28:97;;1255:35660:81;8230:28:97;;;1255:35660:81;;;;;;;;8230:28:97;1255:35660:81;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;8689:847:97:-;1255:35660:81;;;8689:847:97;;9447:60;8689:847;1255:35660:81;9110:29:97;9039;8960:37;-1:-1:-1;8689:847:97;;8960:37;:::i;:::-;9039:29;1255:35660:81;9039:29:97;:::i;:::-;9110;1255:35660:81;9110:29:97;:::i;:::-;1255:35660:81;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;9455:11:97;1255:35660:81;9455:11:97;:::i;:::-;1255:35660:81;;9447:60:97;;;;;2024:14:2;9447:60:97;;;;;;:::i;1255:35660:81:-;;;;;;2763:4:48;;1255:35660:81;;;2763:4:48;1255:35660:81;;;;;;;;:::i;2386:134:4:-;1255:35660:81;2484:29:4;;;;1255:35660:81;2484:29:4;1255:35660:81;;;;2484:29:4;;;;;2024:14:2;2484:29:4;;;;;;2763:4:48;;7071:1:81;1255:35660;;;2763:4:48;1255:35660:81;;;;;;;;:::i;:::-;2484:29:4;;1255:35660:81;2484:29:4;;;;;;;;2386:134;:::o;2484:29::-;;;;;:::i;2386:134::-;;6805:18:81;2484:29:4;1255:35660:81;2484:29:4;;;;1255:35660:81;;;;;;2484:29:4;;;;;2024:14:2;2484:29:4;;;;;;2763:4:48;;1255:35660:81;;;;2763:4:48;1255:35660:81;;;;;;;;:::i;:::-;2484:29:4;;1255:35660:81;2484:29:4;;;;;;;;2386:134;;:::o;2484:29::-;;;;;:::i;:::-;2386:134;:::o;2484:29::-;1255:35660:81;;;2386:134:4;1255:35660:81;2484:29:4;;;;1255:35660:81;2484:29:4;1255:35660:81;;;;2484:29:4;;;;;2024:14:2;2484:29:4;;;;;;2763:4:48;;996:2:35;1255:35660:81;;;2763:4:48;1255:35660:81;;;;;;;;:::i;2386:134:4:-;1255:35660:81;2484:29:4;;;;1255:35660:81;2484:29:4;1255:35660:81;;;;2484:29:4;;;;;2024:14:2;2484:29:4;;;;;;2763:4:48;;36435:1:81;1255:35660;;;2763:4:48;1255:35660:81;;;;;;;;:::i;2386:134:4:-;;1255:35660:81;2484:29:4;;;;;1255:35660:81;2484:29:4;1255:35660:81;;2484:29:4;;;;;2024:14:2;2484:29:4;;;;;;:::i;1255:35660:81:-;;;;;;;;;;;;;;;;;;:::i;1689:113:4:-;1255:35660:81;1771:24:4;;;;;1255:35660:81;1771:24:4;1255:35660:81;;;1771:24:4;;;;;2024:14:2;1771:24:4;;;;;;:::i;3570:134::-;;;1255:35660:81;3668:29:4;;;;-1:-1:-1;1255:35660:81;;;;;;;3668:29:4;;;;;2024:14:2;3668:29:4;;1255:35660:81;3668:29:4;;;1255:35660:81;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;9540:323:97:-;-1:-1:-1;1255:35660:81;9666:63:97;1255:35660:81;9540:323:97;9666:63;:::i;:::-;1255:35660:81;9770:11:97;1255:35660:81;9770:11:97;:::i;:::-;1255:35660:81;;;9762:49:97;;;;;2024:14:2;9762:49:97;;1255:35660:81;9762:49:97;;;1255:35660:81;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9762:49:97;;;1255:35660:81;9762:49:97;;;;;;9824:34;9762:49;-1:-1:-1;9762:49:97;;;9540:323;1255:35660:81;;;;;9824:34:97;;;;;;:::i;9762:49::-;;;;;;-1:-1:-1;9762:49:97;;;;;;:::i;:::-;;;;3826:134:4;;1255:35660:81;3924:29:4;;;;-1:-1:-1;1255:35660:81;;;;3924:29:4;;;;;2024:14:2;3924:29:4;;;;;2763:4:48;1255:35660:81;;;2763:4:48;1255:35660:81;;;;;;;;;;:::i;13228:134:4:-;1255:35660:81;13326:29:4;;;;1255:35660:81;13326:29:4;1255:35660:81;;;;13326:29:4;;;;;2024:14:2;13326:29:4;;1255:35660:81;13326:29:4;;;2763:4:48;;1255:35660:81;;;;2763:4:48;1255:35660:81;;;;;;;;:::i;1087:138:40:-;1198:21;1087:138;1198:21;:::i;:::-;1255:35660:81;;;;;1188:32:40;1087:138;:::o;1255:35660:81:-;;;;;;;;;2763:4:48;;;;;:::i;:::-;;1255:35660:81;;;;2024:14:2;2763:4:48;1255:35660:81;2024:14:2;1255:35660:81;:::o;2110:325:98:-;2258:17;;;;2024:14:2;1255:35660:81;;2024:14:2;2250:32:98;;;;;2763:4:48;;;;1255:35660:81;;;2763:4:48;;;;1255:35660:81;;;;336:42:2;2250:32:98;;;;;;-1:-1:-1;;;;;2250:32:98;;;2110:325;2306:22;;-1:-1:-1;2398:32:98;;1255:35660:81;;2311:2:98;2306:7;2311:2;;2398:32;2316:8;2306:22;;1255:35660:81;;2364:20:98;;;;2398:32;;;;1255:35660:81;;;;2763:4:48;;1255:35660:81;;;2763:4:48;1255:35660:81;;;2306:22:98;2398:32;-1:-1:-1;2306:22:98;;;2250:32;;;;2398;1255:35660:81;2250:32:98;2311:2;2250:32;2258:17;2250:32;2258:17;2250:32;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;-1:-1:-1;2250:32:98;;-1:-1:-1;2250:32:98;-1:-1:-1;2250:32:98;;;;;;;1255:35660:81;;;;;;;;;;;;;;;;;;;;;;;;;;2763:4:48;1255:35660:81;;;2763:4:48;1255:35660:81;;;;;;;;;;;;;;;;;;;:::i;3346:400:40:-;3462:279;1255:35660:81;2024:14:2;;1255:35660:81;3462:279:40;1255:35660:81;;3520:24:40;;;1255:35660:81;;3552:22:40;;;;2763:4:48;3582:24:40;;;;2763:4:48;3621:27:40;;;;1255:35660:81;4019:108:40;1255:35660:81;;3714:20:40;1255:35660:81;;;;3714:20:40;;;4049;;744:1:35;3520:24:40;1255:35660:81;;4109:17:40;;1255:35660:81;;3552:22:40;1255:35660:81;;;;;;;3520:24:40;4019:108;;1255:35660:81;;;;;;3520:24:40;1255:35660:81;;;;;;:::i;:::-;;;744:1:35;;;;1255:35660:81;;;744:1:35;4019:108:40;;;;;;;;;;:::i;:::-;3552:22;1255:35660:81;3462:279:40;;;3520:24;3462:279;;;:::i;6490:739:82:-;7004:194;6490:739;1255:35660:81;;:::i;:::-;;6874:19:82;;:::i;:::-;1255:35660:81;6732:168:82;1255:35660:81;;:::i;6732:168:82:-;;;;1255:35660:81;10291:4;6732:168:82;;;1255:35660:81;;6732:168:82;;;1255:35660:81;6732:168:82;;;1255:35660:81;;;6907:91:82;6973:22;;:::i;:::-;1255:35660:81;;:::i;:::-;;;;6937:61:82;;6732:168;6937:61;;1255:35660:81;6907:24:82;;:91;;;;:::i;:::-;;6732:168;7004:27;1255:35660:81;;:::i;7004:194:82:-;;6490:739;:::o;:::-;7004:194;6490:739;1255:35660:81;;:::i;:::-;;6874:19:82;;:::i;:::-;1255:35660:81;6732:168:82;1255:35660:81;;:::i;6732:168:82:-;;;;1255:35660:81;10291:4;6732:168:82;;;1255:35660:81;;6732:168:82;;;1255:35660:81;6732:168:82;;;1255:35660:81;;;6907:91:82;6973:22;;:::i;:::-;1255:35660:81;;:::i;:::-;;;;6937:61:82;;1255:35660:81;;;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;1612:920:82:-;1255:35660:81;;:::i;:::-;1806:32:82;1818:19;2024:14:2;;;1255:35660:81;;;;2024:14:2;1255:35660:81;;2024:14:2;1806:32:82;;1255:35660:81;;;;1806:32:82;;;1255:35660:81;;;;;;;;;;;1806:32:82;;;336:42:2;1806:32:82;;;;;;1852:36;1806:32;1786:53;1806:32;1818:19;1806:32;;;1786:53;;:::i;:::-;1852:36;:::i;:::-;1933:20;;;2024:14:2;1255:35660:81;;2024:14:2;1921:33:82;;1806:32;1921:33;;2763:4:48;;;;-1:-1:-1;1255:35660:81;;;336:42:2;1921:33:82;;;;;;1968:39;1921:33;1901:54;1921:33;1818:19;1921:33;;;1901:54;;:::i;:::-;1968:39;:::i;:::-;1255:35660:81;2052:23:82;;;2024:14:2;1255:35660:81;;2024:14:2;2040:36:82;;1806:32;2040:36;;2763:4:48;;;;-1:-1:-1;1255:35660:81;;;336:42:2;2040:36:82;;;;;;2090:37;2040:36;2020:57;2040:36;1818:19;2040:36;;;2020:57;;:::i;:::-;2090:37;:::i;:::-;2160:34;1818:19;1255:35660:81;2172:21:82;;;1255:35660:81;;;;;;;;2024:14:2;2160:34:82;;1255:35660:81;;;;1806:32:82;2160:34;;1255:35660:81;;;;;;;;;;;2160:34:82;;;336:42:2;2160:34:82;;;;;;2208:40;2160:34;2140:55;2160:34;1818:19;2160:34;;;2140:55;;:::i;:::-;2208:40;:::i;:::-;1818:19;2254:219;2311:3;2278:24;;;;;1255:35660:81;2274:35:82;;;;;2399:67;2278:24;2328:5;;2763:4:48;2328:5:82;;2324:61;;2311:3;2419:46;2437:24;:27;:24;;:27;:::i;:::-;;2419:46;:::i;2399:67::-;2311:3;2763:4:48;2259:13:82;;;;;2324:61;2352:24;2419:46;2352:24;;2437:27;2352:24;;:::i;:::-;2324:61;;;;;;;2274:35;;;;2485:25;2274:35;;2485:25;:::i;1255:35660:81:-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;10030:386:97:-;10327:52;10030:386;1255:35660:81;;;-1:-1:-1;10030:386:97;1255:35660:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;10335:11:97;1255:35660:81;10335:11:97;:::i;:::-;1255:35660:81;;10327:52:97;;;;;2024:14:2;10327:52:97;;;;;;:::i;924:276:82:-;1076:17;;;;2024:14:2;1255:35660:81;;2024:14:2;1068:32:82;;;;;2763:4:48;;;;1255:35660:81;;;2763:4:48;;;;1255:35660:81;;;;336:42:2;1068:32:82;;;;;;;1137:14;1068:32;-1:-1:-1;;;;;1068:32:82;;;924:276;1255:35660:81;-1:-1:-1;1255:35660:81;;;1137:14:82;;;;2024::2;1137::82;;1068:32;1137:14;;1255:35660:81;;;;;2763:4:48;;1255:35660:81;1137:14:82;;;336:42:2;1137:14:82;;;;;;;1158;1137;-1:-1:-1;1137:14:82;;;1255:35660:81;-1:-1:-1;1255:35660:81;;;1158:14:82;;;;2024::2;1158::82;;1068:32;1158:14;;1255:35660:81;;;;;2763:4:48;;1255:35660:81;1158:14:82;;;336:42:2;1158:14:82;;;;;;;1179;1158;-1:-1:-1;1158:14:82;;;924:276;-1:-1:-1;1255:35660:81;;2024:14:2;1179::82;;1255:35660:81;;;;1068:32:82;1179:14;;2763:4:48;1255:35660:81;-1:-1:-1;;1255:35660:81;;;;;;;;;1179:14:82;;;336:42:2;1179:14:82;;;;;;;1255:35660:81;1179:14:82;1120:74;1179:14;1255:35660:81;1179:14:82;-1:-1:-1;1179:14:82;;;924:276;1255:35660:81;;;;;;;1120:74:82;;;;;;1255:35660:81;;:::i;:::-;;;;;;;;1179:14:82;1255:35660:81;1179:14:82;;;;1255:35660:81;1179:14:82;;;-1:-1:-1;1179:14:82;;;;;;:::i;:::-;;;;;;1158;-1:-1:-1;1158:14:82;;;;;;;;;;;;;;:::i;:::-;;;;;1137;-1:-1:-1;1137:14:82;;;;;;;;;;;;;;:::i;:::-;;;;;1068:32;;;-1:-1:-1;1068:32:82;;;;;1076:17;1068:32;1076:17;1068:32;;;;;;;:::i;:::-;;;;;1255:35660:81;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;6064:422:82:-;1255:35660:81;;;;;;;;:::i;:::-;;;;;;;;;;6289:28:82;2024:14:2;6289:28:82;;1255:35660:81;6289:28:82;;;2763:4:48;1255:35660:81;6289:28:82;;;336:42:2;6289:28:82;;;;;;;6269:49;6389:37;6289:28;6331:45;6289:28;6439:25;6289:28;1255:35660:81;6289:28:82;;;6269:49;;:::i;:::-;6331:45;:::i;6064:422::-;1255:35660:81;;;;;;;;:::i;:::-;;;;;;;;;;6289:28:82;2024:14:2;6289:28:82;;1255:35660:81;6289:28:82;;;2763:4:48;-1:-1:-1;6289:28:82;;;336:42:2;6289:28:82;;;;;;;6269:49;6389:37;6289:28;6331:45;6289:28;6439:25;6289:28;-1:-1:-1;6289:28:82;;;6269:49;;:::i;1905:115:4:-;1255:35660:81;1988:25:4;;;;;1255:35660:81;1988:25:4;1255:35660:81;;;1988:25:4;;;;;2024:14:2;1988:25:4;;;;;;:::i;1255:35660:81:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;11028:435:97:-;1255:35660:81;;2024:14:2;11292:26:97;;1255:35660:81;;;;;11292:26:97;;;1255:35660:81;-1:-1:-1;1255:35660:81;;;;11292:26:97;;;;;;;11358:68;11292:26;;;11215:110;11292:26;;;;;11028:435;11215:110;;:::i;:::-;11366:11;1255:35660:81;11366:11:97;:::i;:::-;1255:35660:81;;11358:68:97;;;;;2024:14:2;11358:68:97;;11292:26;11358:68;;;:::i;11292:26::-;;;;;;;;;;;;;;:::i;:::-;;;;;2136:128:4;1255:35660:81;2228:29:4;;;;1255:35660:81;;-1:-1:-1;1255:35660:81;;;2228:29:4;;;;;2024:14:2;2228:29:4;;1255:35660:81;;2228:29:4;;;1255:35660:81;2763:4:48;1255:35660:81;;;;;;;;;;;;;;:::i;2136:128:4:-;;1255:35660:81;2228:29:4;;;;-1:-1:-1;1255:35660:81;;;;2228:29:4;;;;;2024:14:2;2228:29:4;;1255:35660:81;;2228:29:4;;;1255:35660:81;;;;;;;;;;;;;;;;;:::i;8384:301:97:-;-1:-1:-1;1255:35660:81;8513:56:97;1255:35660:81;8384:301:97;8513:56;:::i;:::-;1255:35660:81;8610:11:97;1255:35660:81;8610:11:97;:::i;1255:35660:81:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;12044:134:4:-;;1255:35660:81;12142:29:4;;;;;1255:35660:81;12142:29:4;1255:35660:81;;12142:29:4;;;;;2024:14:2;12142:29:4;;;;;;:::i;1255:35660:81:-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;1546:1263:15;1255:35660:81;1664:10:15;1656:85;1664:10;;;;1656:85;:::i;:::-;1970:8;;;;;;:20;;;1546:1263;1966:34;;2026:13;:9;;;;:::i;:::-;:13;:::i;:::-;2229:6;2234:1;2229:6;;;:18;;;1546:1263;2225:38;;1255:35660:81;2277:20:15;;;:46;;;1546:1263;2273:82;;2455:7;;;;;;2493;;;;;2528:11;2493:7;;:::i;:::-;2528:11;:::i;:::-;2557:8;;;2553:24;;2600:9;:13;:9;;;;:::i;:::-;:13;:::i;2553:24::-;2567:10;;;;:::o;2451:352::-;2630:173;;;;;;;;2451:352;;;;;1546:1263::o;2630:173::-;2672:7;;;;;;2707:11;2672:7;;;:::i;2707:11::-;2736:8;;;2732:24;;2779:9;:13;:9;;;;:::i;:13::-;2630:173;;;;;;;2273:82;2339:15;;;;2332:23;2339:15;;;1255:35660:81;;2332:23:15;:::i;2277:46::-;2308:15;1255:35660:81;;2301:22:15;;2277:46;;2225:38;2256:7;;;;;;;;;:::i;2229:18::-;2239:8;;;;2229:18;;1966:34;1992:8;;;;;;:::o;1970:20::-;1982:8;;;;;1970:20;;1255:35660:81;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;232:1:97;;1255:35660:81;-1:-1:-1;1255:35660:81;;;-1:-1:-1;1255:35660:81;;232:1:97;:::o;:::-;;;;;;1255:35660:81;;;;;;;;;;232:1:97;;;;;;1255:35660:81;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;232:1:97;;;;;;;;:::i;701:863::-;1255:35660:81;;;;2024:14:2;798:35:97;;;;;;;;;1255:35660:81;;;;;;;;;;;;;;;;;;798:35:97;;;;;;;;;;;-1:-1:-1;798:35:97;;;701:863;1255:35660:81;;;866:35:97;2024:14:2;866:35:97;;798;866;;;798;866;;1255:35660:81;;;;;;;;;;;;;;;;;;866:35:97;;;;;;;;;;;1326:27;866:35;1337:15;866:35;-1:-1:-1;866:35:97;;;701:863;916:18;908:49;916:18;;;;908:49;:::i;:::-;462:50;285:44;462:50;1037:32;;1033:109;;701:863;1278:21;1173:9;;1278:17;1173:9;;:::i;:::-;1199:7;;;285:44;644:49;538:159;1199:7;1278:17;:::i;:21::-;1337:15;;:::i;:::-;1326:27;;:::i;:::-;1255:35660:81;;;2024:14:2;1383:39:97;;-1:-1:-1;1383:39:97;;;798:35;1383:39;;232:1;;;;;;;;;1255:35660:81;232:1:97;1255:35660:81;;;232:1:97;;;;1383:39;;;;;;;;;;;-1:-1:-1;1383:39:97;;;701:863;-1:-1:-1;1255:35660:81;;2024:14:2;1451:39:97;;232:1;798:35;1451:39;;232:1;;;;;1255:35660:81;232:1:97;1255:35660:81;;;232:1:97;1255:35660:81;-1:-1:-1;1255:35660:81;232:1:97;1255:35660:81;1451:39:97;;;;;;;;1526:24;1451:39;-1:-1:-1;1451:39:97;;;701:863;1255:35660:81;;-1:-1:-1;1255:35660:81;;;1526:24:97;;;;;2024:14:2;1526:24:97;;798:35;1526:24;;1255:35660:81;;;;;2763:4:48;;1255:35660:81;1526:24:97;;;;;;;;;;1504:55;1526:24;-1:-1:-1;1526:24:97;;;701:863;1504:55;;:::i;1526:24::-;;;;;;;-1:-1:-1;1526:24:97;;;;;;:::i;:::-;;;;;1451:39;-1:-1:-1;1451:39:97;;;;;;;;;;;;;;;:::i;:::-;;;;;;1383;;;;;;-1:-1:-1;1383:39:97;;;;;;:::i;:::-;;;;1033:109;1255:35660:81;1278:17:97;:21;1255:35660:81;1173:9:97;1255:35660:81;;798:35:97;1107:26;;1124:8;1107:26;1124:8;232:1;1124:8;;232:1;:::i;1107:26::-;1255:35660:81;1097:37:97;;1033:109;;;;;;;866:35;;;;798;866;798;866;;;;;;;:::i;:::-;;;;798;;;;;;;;;;;;;;:::i;:::-;;;;1255:35660:81;;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;14820:414:97:-;;1255:35660:81;;14924:20:97;14920:52;;1255:35660:81;;;;;;:::i;:::-;;;;;;;;;14943:1:97;15007:186;15048:3;1255:35660:81;;15027:19:97;;;;;15068:32;15088:11;;;;;:::i;:::-;;15068:32;;:::i;:::-;1255:35660:81;;;;;;;;;;;15112:23:97;;15108:79;;15048:3;1255:35660:81;2763:4:48;15012:13:97;;;15108:79;15154:24;;1255:35660:81;15154:24:97;;:::i;:::-;15108:79;;;;;15027:19;;;15205:24;15027:19;;;15205:24;:::i;14920:52::-;1255:35660:81;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;13897:441:97:-;;;1255:35660:81;;13999:22:97;13995:54;;1255:35660:81;;:::i;:::-;14020:1:97;14085:212;14128:3;1255:35660:81;;14105:21:97;;;;;14168:27;14181:13;14020:1;14181:13;;;;;:::i;:::-;1255:35660:81;;2024:14:2;14168:27:97;;1255:35660:81;;;;14168:27:97;;;1255:35660:81;;;;;;;;;;;14168:27:97;;1255:35660:81;;;;14168:27:97;;;;;;;14148:53;14168:27;14020:1;14168:27;;;14128:3;14148:53;;:::i;:::-;1255:35660:81;14217:21:97;1255:35660:81;;14217:21:97;:::i;:::-;14213:25;;14209:82;;14128:3;14237:1;2763:4:48;14090:13:97;;;14209:82;14257:25;;14237:1;14257:25;;:::i;:::-;14209:82;;;;;14168:27;;;;;;;;;;;;;:::i;:::-;;;;;14105:21;;;;14309:24;14105:21;;;14309:24;:::i;13995:54::-;1255:35660:81;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;2536:516:82:-;1255:35660:81;;:::i;:::-;2712:30:82;2724:17;2024:14:2;;;1255:35660:81;;;;2712:30:82;;;336:42:2;2712:30:82;;;;;;2756:34;2712:30;2692:51;2712:30;2724:17;2712:30;;;2692:51;;:::i;:::-;2756:34;:::i;:::-;2724:17;2796:197;2845:3;2820:16;;;;;1255:35660:81;2816:27:82;;;;;2933:53;2820:16;2862:5;;2763:4:48;2862:5:82;;2858:61;;2845:3;2953:32;2965:16;:19;:16;;:19;:::i;:::-;;2953:32;:::i;2933:53::-;2845:3;2763:4:48;2801:13:82;;;;;2858:61;2886:24;2953:32;2886:24;;2965:19;2886:24;;:::i;:::-;2858:61;;;;;;;1255:35660:81;;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;3056:685:82:-;1255:35660:81;;:::i;:::-;3226:28:82;3238:15;2763:4:48;;;1255:35660:81;;;;2763:4:48;1255:35660:81;;2024:14:2;3226:28:82;;1255:35660:81;;;3226:28:82;;;1255:35660:81;;;;;;;;;;;3226:28:82;;;336:42:2;3226:28:82;;;;;;3268:36;3226:28;3206:49;3226:28;3238:15;3226:28;;;3206:49;;:::i;:::-;3268:36;:::i;:::-;3337:34;3238:15;3355:14;;;1255:35660:81;;;;:::i;:::-;;;;:::i;:::-;;;2024:14:2;3337:34:82;;1255:35660:81;;;;3226:28:82;3337:34;;2763:4:48;1255:35660:81;;;;;;;;;;3337:34:82;;;336:42:2;3337:34:82;;;;;;3385:33;3337:34;3317:55;3337:34;3238:15;3337:34;;;3317:55;;:::i;:::-;3385:33;:::i;:::-;1255:35660:81;3463:10:82;;;2763:4:48;1255:35660:81;;2024:14:2;3451:23:82;;3226:28;3451:23;;2763:4:48;;;;-1:-1:-1;1255:35660:81;;;336:42:2;3451:23:82;;;;;;3488:34;3451:23;3431:44;3451:23;3238:15;3451:23;;;3431:44;;:::i;:::-;3488:34;:::i;:::-;3567:11;;;2024:14:2;1255:35660:81;;2024:14:2;3555:24:82;;3226:28;3555:24;;2763:4:48;;;;-1:-1:-1;1255:35660:81;;;336:42:2;3555:24:82;;;;;;3593:32;3535:45;3670:9;3555:24;3658:22;3555:24;3238:15;3555:24;;;;;3535:45;;:::i;:::-;3593:32;:::i;:::-;3670:9;;2763:4:48;1255:35660:81;;3658:22:82;;;;2024:14:2;3658:22:82;;3226:28;3658:22;;1255:35660:81;;;;;2763:4:48;;1255:35660:81;3658:22:82;;;336:42:2;3658:22:82;;;;;;3694:25;3658:22;3638:43;3658:22;3238:15;3658:22;;;3638:43;;:::i;3555:24::-;;;;;;;;;;;;;;:::i","linkReferences":{"src/extensions/sessions/SessionSig.sol":{"SessionSig":[{"start":8889,"length":20},{"start":15567,"length":20},{"start":28610,"length":20}]}}},"methodIdentifiers":{"IS_TEST()":"fa7626d4","excludeArtifacts()":"b5508aa9","excludeContracts()":"e20c9f71","excludeSelectors()":"b0464fdc","excludeSenders()":"1ed7831c","failed()":"ba414fa6","setUp()":"0a9254e4","targetArtifactSelectors()":"66d9a9a0","targetArtifacts()":"85226c81","targetContracts()":"3f7286f4","targetInterfaces()":"2ade3880","targetSelectors()":"916a17c6","targetSenders()":"3e5e3c23","testAttestationOptimisation((address,bytes4,bytes32,bytes32,bytes,(string,uint64)),(address,bytes4,bytes32,bytes32,bytes,(string,uint64)))":"ec492c6a","testConfiguration_duplicateBlacklistNodes(address[])":"4cbbb2bf","testConfiguration_duplicateBlacklistNodes_inBranch(address[])":"362a8093","testConfiguration_duplicateIdentityNodes(address,address)":"9963cece","testConfiguration_duplicateIdentityNodes_inBranch(address)":"fca5ddea","testConfiguration_invalidNode(uint8)":"852ff1cb","testConfiguration_largeBlacklist(address[])":"b3f89b83","testEmptyPermissionsStructSize_direct(address,uint256,uint256,uint64)":"39455a80","testLargeTopology(address[],uint256,bool,address[])":"ae7e3e13","testMultipleExplicitSignatures(bool)":"7785689c","testMultipleImplicitSignatures((address,bytes4,bytes32,bytes32,bytes,(string,uint64)))":"2055231e","testRecover_invalidAttestationIndex((address,bytes4,bytes32,bytes32,bytes,(string,uint64)),uint256,uint256)":"3149c391","testRecover_invalidBlacklist_requiredForImplicitSigner((address,bytes4,bytes32,bytes32,bytes,(string,uint64)))":"d96eb4d2","testRecover_invalidIdentitySigner_noMatchAttestationSigner((address,bytes4,bytes32,bytes32,bytes,(string,uint64)))":"fa4dd4a6","testRecover_invalidIdentitySigner_noSignersEncoded((address,bytes4,bytes32,bytes32,bytes,(string,uint64)))":"3b94ef6b","testRecover_invalidIdentitySigner_unset()":"41628221","testRecover_invalidSessionSigner(bool)":"b6f1231b","testSingleExplicitSignature(bool)":"d86f3b50","testSingleImplicitSignature((address,bytes4,bytes32,bytes32,bytes,(string,uint64)))":"dfb3501e"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"IS_TEST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"excludedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setUp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifactSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"artifact\",\"type\":\"string\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzArtifactSelector[]\",\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"targetedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetInterfaces\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"artifacts\",\"type\":\"string[]\"}],\"internalType\":\"struct StdInvariant.FuzzInterface[]\",\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"approvedSigner\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"identityType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes32\",\"name\":\"issuerHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"audienceHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"applicationData\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"redirectUrl\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"issuedAt\",\"type\":\"uint64\"}],\"internalType\":\"struct AuthData\",\"name\":\"authData\",\"type\":\"tuple\"}],\"internalType\":\"struct Attestation\",\"name\":\"attestation1\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"approvedSigner\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"identityType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes32\",\"name\":\"issuerHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"audienceHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"applicationData\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"redirectUrl\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"issuedAt\",\"type\":\"uint64\"}],\"internalType\":\"struct AuthData\",\"name\":\"authData\",\"type\":\"tuple\"}],\"internalType\":\"struct Attestation\",\"name\":\"attestation2\",\"type\":\"tuple\"}],\"name\":\"testAttestationOptimisation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"blacklist\",\"type\":\"address[]\"}],\"name\":\"testConfiguration_duplicateBlacklistNodes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"blacklist\",\"type\":\"address[]\"}],\"name\":\"testConfiguration_duplicateBlacklistNodes_inBranch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"identitySigner1\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"identitySigner2\",\"type\":\"address\"}],\"name\":\"testConfiguration_duplicateIdentityNodes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"identitySigner\",\"type\":\"address\"}],\"name\":\"testConfiguration_duplicateIdentityNodes_inBranch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"invalidNodeFlag\",\"type\":\"uint8\"}],\"name\":\"testConfiguration_invalidNode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"blacklist\",\"type\":\"address[]\"}],\"name\":\"testConfiguration_largeBlacklist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"valueLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"deadline\",\"type\":\"uint64\"}],\"name\":\"testEmptyPermissionsStructSize_direct\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"explicitSigners\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"signersIncludeCount\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"includeImplicitSigner\",\"type\":\"bool\"},{\"internalType\":\"address[]\",\"name\":\"implicitBlacklist\",\"type\":\"address[]\"}],\"name\":\"testLargeTopology\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"useChainId\",\"type\":\"bool\"}],\"name\":\"testMultipleExplicitSignatures\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"approvedSigner\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"identityType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes32\",\"name\":\"issuerHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"audienceHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"applicationData\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"redirectUrl\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"issuedAt\",\"type\":\"uint64\"}],\"internalType\":\"struct AuthData\",\"name\":\"authData\",\"type\":\"tuple\"}],\"internalType\":\"struct Attestation\",\"name\":\"attestation\",\"type\":\"tuple\"}],\"name\":\"testMultipleImplicitSignatures\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"approvedSigner\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"identityType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes32\",\"name\":\"issuerHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"audienceHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"applicationData\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"redirectUrl\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"issuedAt\",\"type\":\"uint64\"}],\"internalType\":\"struct AuthData\",\"name\":\"authData\",\"type\":\"tuple\"}],\"internalType\":\"struct Attestation\",\"name\":\"attestation\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"testRecover_invalidAttestationIndex\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"approvedSigner\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"identityType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes32\",\"name\":\"issuerHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"audienceHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"applicationData\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"redirectUrl\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"issuedAt\",\"type\":\"uint64\"}],\"internalType\":\"struct AuthData\",\"name\":\"authData\",\"type\":\"tuple\"}],\"internalType\":\"struct Attestation\",\"name\":\"attestation\",\"type\":\"tuple\"}],\"name\":\"testRecover_invalidBlacklist_requiredForImplicitSigner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"approvedSigner\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"identityType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes32\",\"name\":\"issuerHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"audienceHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"applicationData\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"redirectUrl\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"issuedAt\",\"type\":\"uint64\"}],\"internalType\":\"struct AuthData\",\"name\":\"authData\",\"type\":\"tuple\"}],\"internalType\":\"struct Attestation\",\"name\":\"attestation\",\"type\":\"tuple\"}],\"name\":\"testRecover_invalidIdentitySigner_noMatchAttestationSigner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"approvedSigner\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"identityType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes32\",\"name\":\"issuerHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"audienceHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"applicationData\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"redirectUrl\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"issuedAt\",\"type\":\"uint64\"}],\"internalType\":\"struct AuthData\",\"name\":\"authData\",\"type\":\"tuple\"}],\"internalType\":\"struct Attestation\",\"name\":\"attestation\",\"type\":\"tuple\"}],\"name\":\"testRecover_invalidIdentitySigner_noSignersEncoded\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"testRecover_invalidIdentitySigner_unset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"useChainId\",\"type\":\"bool\"}],\"name\":\"testRecover_invalidSessionSigner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"useChainId\",\"type\":\"bool\"}],\"name\":\"testSingleExplicitSignature\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"approvedSigner\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"identityType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes32\",\"name\":\"issuerHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"audienceHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"applicationData\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"string\",\"name\":\"redirectUrl\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"issuedAt\",\"type\":\"uint64\"}],\"internalType\":\"struct AuthData\",\"name\":\"authData\",\"type\":\"tuple\"}],\"internalType\":\"struct Attestation\",\"name\":\"attestation\",\"type\":\"tuple\"}],\"name\":\"testSingleImplicitSignature\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/extensions/sessions/SessionSig.t.sol\":\"SessionSigTest\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/extensions/sessions/SessionErrors.sol\":{\"keccak256\":\"0xa7642b4ef1d2ac8e41bd6dca88c5a644cac21b3ebe79deb5013e21fb4aaab405\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ef80768f6c509a54ea5d3fb92cbf46363f945f071cc3664710770c09b3d2a978\",\"dweb:/ipfs/QmbRpicAiPSYQbKpjoDbanap9q5hYsqEMS1u7w7sqKEYTY\"]},\"src/extensions/sessions/SessionManager.sol\":{\"keccak256\":\"0x796e8db3b2dc58842aca5c7fe76897527dd60279a8146ee107f651d876fccbd9\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2ee4d968a8bd5d007cccc67108509470677f4f5ce59dce7005b1da7d9b243609\",\"dweb:/ipfs/QmVUz8Q4BwNsbeLZdsWHg87MCVF6aAJL6UYzWWWAoxjvS7\"]},\"src/extensions/sessions/SessionSig.sol\":{\"keccak256\":\"0x7c44eabacfd2b4758fa8f54574f7479d8ef0209551ad824b3fc497c215a9609a\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://845b301783b1f069fa0b01d47ca2de1a79b0d4c3e14881973421a718c4d823df\",\"dweb:/ipfs/QmcDgiqjENAL3L7MjQ7HgitmsJ2PVNUm3ibnL2DZRU1VAL\"]},\"src/extensions/sessions/explicit/ExplicitSessionManager.sol\":{\"keccak256\":\"0x08405cc3def78d4172267a2e607e303b5f222d8cb85ba009deab58e0110088b0\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e2e073fdb5794f59ee6d7eb5e04074b1452e5d0824e4117259835071199f3d32\",\"dweb:/ipfs/Qmbi56yfELF88ezZ2tczegLmeB6Gb3HxDX11bzx3rpDgJZ\"]},\"src/extensions/sessions/explicit/IExplicitSessionManager.sol\":{\"keccak256\":\"0xae940e96cf0677c9b0df0daee07db0293c55a21cec0b893d82eefd122815602b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://62ee98f92121ad54f78d375ec3003aab73719adec852b0d12518fe99fc6f66c6\",\"dweb:/ipfs/QmPuAX7tdga5Su1xua6LS6jR9DsV7GyCwyZLeRC8upPTKY\"]},\"src/extensions/sessions/explicit/Permission.sol\":{\"keccak256\":\"0x0bc35a04da3830c64ec13c32b57f88be6b980228f6b387e800cf70919cdcfb16\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://fcb304612f894699f8e1e40cf134abebe8f7135795bea479b04e967551c59948\",\"dweb:/ipfs/Qme4mD8dh3xU9wbscQwvL4cQcZ2Wv8Fobo2fmU29B3DirV\"]},\"src/extensions/sessions/explicit/PermissionValidator.sol\":{\"keccak256\":\"0xe970e1ce931ef3779e3ddc9525b40820b7f63746828a440306ff9c984da42234\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://9154a986b7a5565119b2c0993dd9bc9e6e9b3e07eede034c8fde1c9f39a56a30\",\"dweb:/ipfs/QmXbgsr6kYYK5gmge6sosgwbHnFnQW5ntCZCyeNTQqTndD\"]},\"src/extensions/sessions/implicit/Attestation.sol\":{\"keccak256\":\"0xcaa44022b5eb4bc7ab487b3b1a0125da67e2e891cee983ef6cdb6814f045efc8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://94829782b6dcb482d7c002511c590d1ad8de3b21e5e72575df18be73565b3638\",\"dweb:/ipfs/QmZ4u9FxALzMzKR7auW8FmFkhGVw8kRDeDRJ1PKwKaWNWF\"]},\"src/extensions/sessions/implicit/ISignalsImplicitMode.sol\":{\"keccak256\":\"0x6cb48f50c49bcb3c7071306fe9fac6c102bc9eabf73d9909e19ab3b9a835d0a8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://15297e969f64fc1152654d1cefbe276c15a0ecfc11f86b4c276bb0b454fe700a\",\"dweb:/ipfs/QmeehNFYBPPtJePwUcqiYCgiuFotur4VVVCV1KvegdCCZ4\"]},\"src/extensions/sessions/implicit/ImplicitSessionManager.sol\":{\"keccak256\":\"0xe0d4f9f9c242e1e5781ba3a2eb4c4485b16de53769dacf7f448be01649d9997b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://f6f28cfeca83fffc74e63440243fcb0a7f9a7d5ac5efae21fa8e96926c1d0fae\",\"dweb:/ipfs/Qmdnw9PrjjpUjWij9VDxBRe6besuJvpwiGaPewVcR2G9C1\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/interfaces/ISapient.sol\":{\"keccak256\":\"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489\",\"dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"src/utils/LibOptim.sol\":{\"keccak256\":\"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81\",\"dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x\"]},\"test/extensions/sessions/SessionSig.t.sol\":{\"keccak256\":\"0x0b1763cd070e975ce1bef56ab14282f664a6cbd8c16324203ef7b0a0ea2e3a79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://15463f3d18556900d97bebf40110d4ddb12f477c6ede2f49236f3a54d98894ac\",\"dweb:/ipfs/QmVe9kLXL4pRMaKaC5VTZFxa8uQ5h1jYJah28HtUnjYaH6\"]},\"test/extensions/sessions/SessionTestBase.sol\":{\"keccak256\":\"0x96ed18b2829a94a4e2fa0331b595e931ba48114679aa9765799aa9583713a1e7\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1f5dc74df056ea0b6722898060c5f467d47c7961335d474d93a3d45a75575894\",\"dweb:/ipfs/QmPT1ArcYmBUASEr2iL5TnRRkwShMahRh8YWurcbGkwJa4\"]},\"test/utils/PrimitivesRPC.sol\":{\"keccak256\":\"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe\",\"dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv\"]},\"test/utils/TestUtils.sol\":{\"keccak256\":\"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad\",\"dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log","anonymous":false},{"inputs":[{"internalType":"address","name":"","type":"address","indexed":false}],"type":"event","name":"log_address","anonymous":false},{"inputs":[{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"log_bytes","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32","indexed":false}],"type":"event","name":"log_bytes32","anonymous":false},{"inputs":[{"internalType":"int256","name":"","type":"int256","indexed":false}],"type":"event","name":"log_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address","name":"val","type":"address","indexed":false}],"type":"event","name":"log_named_address","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes","name":"val","type":"bytes","indexed":false}],"type":"event","name":"log_named_bytes","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes32","name":"val","type":"bytes32","indexed":false}],"type":"event","name":"log_named_bytes32","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false}],"type":"event","name":"log_named_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"string","name":"val","type":"string","indexed":false}],"type":"event","name":"log_named_string","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false}],"type":"event","name":"log_named_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log_string","anonymous":false},{"inputs":[{"internalType":"uint256","name":"","type":"uint256","indexed":false}],"type":"event","name":"log_uint","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"logs","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"IS_TEST","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeArtifacts","outputs":[{"internalType":"string[]","name":"excludedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeContracts","outputs":[{"internalType":"address[]","name":"excludedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"excludedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSenders","outputs":[{"internalType":"address[]","name":"excludedSenders_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"failed","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"setUp"},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifactSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzArtifactSelector[]","name":"targetedArtifactSelectors_","type":"tuple[]","components":[{"internalType":"string","name":"artifact","type":"string"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifacts","outputs":[{"internalType":"string[]","name":"targetedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetContracts","outputs":[{"internalType":"address[]","name":"targetedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetInterfaces","outputs":[{"internalType":"struct StdInvariant.FuzzInterface[]","name":"targetedInterfaces_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"string[]","name":"artifacts","type":"string[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"targetedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSenders","outputs":[{"internalType":"address[]","name":"targetedSenders_","type":"address[]"}]},{"inputs":[{"internalType":"struct Attestation","name":"attestation1","type":"tuple","components":[{"internalType":"address","name":"approvedSigner","type":"address"},{"internalType":"bytes4","name":"identityType","type":"bytes4"},{"internalType":"bytes32","name":"issuerHash","type":"bytes32"},{"internalType":"bytes32","name":"audienceHash","type":"bytes32"},{"internalType":"bytes","name":"applicationData","type":"bytes"},{"internalType":"struct AuthData","name":"authData","type":"tuple","components":[{"internalType":"string","name":"redirectUrl","type":"string"},{"internalType":"uint64","name":"issuedAt","type":"uint64"}]}]},{"internalType":"struct Attestation","name":"attestation2","type":"tuple","components":[{"internalType":"address","name":"approvedSigner","type":"address"},{"internalType":"bytes4","name":"identityType","type":"bytes4"},{"internalType":"bytes32","name":"issuerHash","type":"bytes32"},{"internalType":"bytes32","name":"audienceHash","type":"bytes32"},{"internalType":"bytes","name":"applicationData","type":"bytes"},{"internalType":"struct AuthData","name":"authData","type":"tuple","components":[{"internalType":"string","name":"redirectUrl","type":"string"},{"internalType":"uint64","name":"issuedAt","type":"uint64"}]}]}],"stateMutability":"nonpayable","type":"function","name":"testAttestationOptimisation"},{"inputs":[{"internalType":"address[]","name":"blacklist","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"testConfiguration_duplicateBlacklistNodes"},{"inputs":[{"internalType":"address[]","name":"blacklist","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"testConfiguration_duplicateBlacklistNodes_inBranch"},{"inputs":[{"internalType":"address","name":"identitySigner1","type":"address"},{"internalType":"address","name":"identitySigner2","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"testConfiguration_duplicateIdentityNodes"},{"inputs":[{"internalType":"address","name":"identitySigner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"testConfiguration_duplicateIdentityNodes_inBranch"},{"inputs":[{"internalType":"uint8","name":"invalidNodeFlag","type":"uint8"}],"stateMutability":"nonpayable","type":"function","name":"testConfiguration_invalidNode"},{"inputs":[{"internalType":"address[]","name":"blacklist","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"testConfiguration_largeBlacklist"},{"inputs":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"uint256","name":"valueLimit","type":"uint256"},{"internalType":"uint64","name":"deadline","type":"uint64"}],"stateMutability":"view","type":"function","name":"testEmptyPermissionsStructSize_direct"},{"inputs":[{"internalType":"address[]","name":"explicitSigners","type":"address[]"},{"internalType":"uint256","name":"signersIncludeCount","type":"uint256"},{"internalType":"bool","name":"includeImplicitSigner","type":"bool"},{"internalType":"address[]","name":"implicitBlacklist","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"testLargeTopology"},{"inputs":[{"internalType":"bool","name":"useChainId","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"testMultipleExplicitSignatures"},{"inputs":[{"internalType":"struct Attestation","name":"attestation","type":"tuple","components":[{"internalType":"address","name":"approvedSigner","type":"address"},{"internalType":"bytes4","name":"identityType","type":"bytes4"},{"internalType":"bytes32","name":"issuerHash","type":"bytes32"},{"internalType":"bytes32","name":"audienceHash","type":"bytes32"},{"internalType":"bytes","name":"applicationData","type":"bytes"},{"internalType":"struct AuthData","name":"authData","type":"tuple","components":[{"internalType":"string","name":"redirectUrl","type":"string"},{"internalType":"uint64","name":"issuedAt","type":"uint64"}]}]}],"stateMutability":"nonpayable","type":"function","name":"testMultipleImplicitSignatures"},{"inputs":[{"internalType":"struct Attestation","name":"attestation","type":"tuple","components":[{"internalType":"address","name":"approvedSigner","type":"address"},{"internalType":"bytes4","name":"identityType","type":"bytes4"},{"internalType":"bytes32","name":"issuerHash","type":"bytes32"},{"internalType":"bytes32","name":"audienceHash","type":"bytes32"},{"internalType":"bytes","name":"applicationData","type":"bytes"},{"internalType":"struct AuthData","name":"authData","type":"tuple","components":[{"internalType":"string","name":"redirectUrl","type":"string"},{"internalType":"uint64","name":"issuedAt","type":"uint64"}]}]},{"internalType":"uint256","name":"count","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"testRecover_invalidAttestationIndex"},{"inputs":[{"internalType":"struct Attestation","name":"attestation","type":"tuple","components":[{"internalType":"address","name":"approvedSigner","type":"address"},{"internalType":"bytes4","name":"identityType","type":"bytes4"},{"internalType":"bytes32","name":"issuerHash","type":"bytes32"},{"internalType":"bytes32","name":"audienceHash","type":"bytes32"},{"internalType":"bytes","name":"applicationData","type":"bytes"},{"internalType":"struct AuthData","name":"authData","type":"tuple","components":[{"internalType":"string","name":"redirectUrl","type":"string"},{"internalType":"uint64","name":"issuedAt","type":"uint64"}]}]}],"stateMutability":"nonpayable","type":"function","name":"testRecover_invalidBlacklist_requiredForImplicitSigner"},{"inputs":[{"internalType":"struct Attestation","name":"attestation","type":"tuple","components":[{"internalType":"address","name":"approvedSigner","type":"address"},{"internalType":"bytes4","name":"identityType","type":"bytes4"},{"internalType":"bytes32","name":"issuerHash","type":"bytes32"},{"internalType":"bytes32","name":"audienceHash","type":"bytes32"},{"internalType":"bytes","name":"applicationData","type":"bytes"},{"internalType":"struct AuthData","name":"authData","type":"tuple","components":[{"internalType":"string","name":"redirectUrl","type":"string"},{"internalType":"uint64","name":"issuedAt","type":"uint64"}]}]}],"stateMutability":"nonpayable","type":"function","name":"testRecover_invalidIdentitySigner_noMatchAttestationSigner"},{"inputs":[{"internalType":"struct Attestation","name":"attestation","type":"tuple","components":[{"internalType":"address","name":"approvedSigner","type":"address"},{"internalType":"bytes4","name":"identityType","type":"bytes4"},{"internalType":"bytes32","name":"issuerHash","type":"bytes32"},{"internalType":"bytes32","name":"audienceHash","type":"bytes32"},{"internalType":"bytes","name":"applicationData","type":"bytes"},{"internalType":"struct AuthData","name":"authData","type":"tuple","components":[{"internalType":"string","name":"redirectUrl","type":"string"},{"internalType":"uint64","name":"issuedAt","type":"uint64"}]}]}],"stateMutability":"nonpayable","type":"function","name":"testRecover_invalidIdentitySigner_noSignersEncoded"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"testRecover_invalidIdentitySigner_unset"},{"inputs":[{"internalType":"bool","name":"useChainId","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"testRecover_invalidSessionSigner"},{"inputs":[{"internalType":"bool","name":"useChainId","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"testSingleExplicitSignature"},{"inputs":[{"internalType":"struct Attestation","name":"attestation","type":"tuple","components":[{"internalType":"address","name":"approvedSigner","type":"address"},{"internalType":"bytes4","name":"identityType","type":"bytes4"},{"internalType":"bytes32","name":"issuerHash","type":"bytes32"},{"internalType":"bytes32","name":"audienceHash","type":"bytes32"},{"internalType":"bytes","name":"applicationData","type":"bytes"},{"internalType":"struct AuthData","name":"authData","type":"tuple","components":[{"internalType":"string","name":"redirectUrl","type":"string"},{"internalType":"uint64","name":"issuedAt","type":"uint64"}]}]}],"stateMutability":"nonpayable","type":"function","name":"testSingleImplicitSignature"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/extensions/sessions/SessionSig.t.sol":"SessionSigTest"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/extensions/sessions/SessionErrors.sol":{"keccak256":"0xa7642b4ef1d2ac8e41bd6dca88c5a644cac21b3ebe79deb5013e21fb4aaab405","urls":["bzz-raw://ef80768f6c509a54ea5d3fb92cbf46363f945f071cc3664710770c09b3d2a978","dweb:/ipfs/QmbRpicAiPSYQbKpjoDbanap9q5hYsqEMS1u7w7sqKEYTY"],"license":"Apache-2.0"},"src/extensions/sessions/SessionManager.sol":{"keccak256":"0x796e8db3b2dc58842aca5c7fe76897527dd60279a8146ee107f651d876fccbd9","urls":["bzz-raw://2ee4d968a8bd5d007cccc67108509470677f4f5ce59dce7005b1da7d9b243609","dweb:/ipfs/QmVUz8Q4BwNsbeLZdsWHg87MCVF6aAJL6UYzWWWAoxjvS7"],"license":"Apache-2.0"},"src/extensions/sessions/SessionSig.sol":{"keccak256":"0x7c44eabacfd2b4758fa8f54574f7479d8ef0209551ad824b3fc497c215a9609a","urls":["bzz-raw://845b301783b1f069fa0b01d47ca2de1a79b0d4c3e14881973421a718c4d823df","dweb:/ipfs/QmcDgiqjENAL3L7MjQ7HgitmsJ2PVNUm3ibnL2DZRU1VAL"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/ExplicitSessionManager.sol":{"keccak256":"0x08405cc3def78d4172267a2e607e303b5f222d8cb85ba009deab58e0110088b0","urls":["bzz-raw://e2e073fdb5794f59ee6d7eb5e04074b1452e5d0824e4117259835071199f3d32","dweb:/ipfs/Qmbi56yfELF88ezZ2tczegLmeB6Gb3HxDX11bzx3rpDgJZ"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/IExplicitSessionManager.sol":{"keccak256":"0xae940e96cf0677c9b0df0daee07db0293c55a21cec0b893d82eefd122815602b","urls":["bzz-raw://62ee98f92121ad54f78d375ec3003aab73719adec852b0d12518fe99fc6f66c6","dweb:/ipfs/QmPuAX7tdga5Su1xua6LS6jR9DsV7GyCwyZLeRC8upPTKY"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/Permission.sol":{"keccak256":"0x0bc35a04da3830c64ec13c32b57f88be6b980228f6b387e800cf70919cdcfb16","urls":["bzz-raw://fcb304612f894699f8e1e40cf134abebe8f7135795bea479b04e967551c59948","dweb:/ipfs/Qme4mD8dh3xU9wbscQwvL4cQcZ2Wv8Fobo2fmU29B3DirV"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/PermissionValidator.sol":{"keccak256":"0xe970e1ce931ef3779e3ddc9525b40820b7f63746828a440306ff9c984da42234","urls":["bzz-raw://9154a986b7a5565119b2c0993dd9bc9e6e9b3e07eede034c8fde1c9f39a56a30","dweb:/ipfs/QmXbgsr6kYYK5gmge6sosgwbHnFnQW5ntCZCyeNTQqTndD"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/Attestation.sol":{"keccak256":"0xcaa44022b5eb4bc7ab487b3b1a0125da67e2e891cee983ef6cdb6814f045efc8","urls":["bzz-raw://94829782b6dcb482d7c002511c590d1ad8de3b21e5e72575df18be73565b3638","dweb:/ipfs/QmZ4u9FxALzMzKR7auW8FmFkhGVw8kRDeDRJ1PKwKaWNWF"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/ISignalsImplicitMode.sol":{"keccak256":"0x6cb48f50c49bcb3c7071306fe9fac6c102bc9eabf73d9909e19ab3b9a835d0a8","urls":["bzz-raw://15297e969f64fc1152654d1cefbe276c15a0ecfc11f86b4c276bb0b454fe700a","dweb:/ipfs/QmeehNFYBPPtJePwUcqiYCgiuFotur4VVVCV1KvegdCCZ4"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/ImplicitSessionManager.sol":{"keccak256":"0xe0d4f9f9c242e1e5781ba3a2eb4c4485b16de53769dacf7f448be01649d9997b","urls":["bzz-raw://f6f28cfeca83fffc74e63440243fcb0a7f9a7d5ac5efae21fa8e96926c1d0fae","dweb:/ipfs/Qmdnw9PrjjpUjWij9VDxBRe6besuJvpwiGaPewVcR2G9C1"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/interfaces/ISapient.sol":{"keccak256":"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359","urls":["bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489","dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"src/utils/LibOptim.sol":{"keccak256":"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde","urls":["bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81","dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x"],"license":"Apache-2.0"},"test/extensions/sessions/SessionSig.t.sol":{"keccak256":"0x0b1763cd070e975ce1bef56ab14282f664a6cbd8c16324203ef7b0a0ea2e3a79","urls":["bzz-raw://15463f3d18556900d97bebf40110d4ddb12f477c6ede2f49236f3a54d98894ac","dweb:/ipfs/QmVe9kLXL4pRMaKaC5VTZFxa8uQ5h1jYJah28HtUnjYaH6"],"license":"Apache-2.0"},"test/extensions/sessions/SessionTestBase.sol":{"keccak256":"0x96ed18b2829a94a4e2fa0331b595e931ba48114679aa9765799aa9583713a1e7","urls":["bzz-raw://1f5dc74df056ea0b6722898060c5f467d47c7961335d474d93a3d45a75575894","dweb:/ipfs/QmPT1ArcYmBUASEr2iL5TnRRkwShMahRh8YWurcbGkwJa4"],"license":"Apache-2.0"},"test/utils/PrimitivesRPC.sol":{"keccak256":"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe","urls":["bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe","dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv"],"license":"Apache-2.0"},"test/utils/TestUtils.sol":{"keccak256":"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79","urls":["bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad","dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa"],"license":"Apache-2.0"}},"version":1},"id":81} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/SessionTestBase.sol/SessionTestBase.json b/contracts/artifacts/wallet-contracts-v3/SessionTestBase.sol/SessionTestBase.json new file mode 100644 index 00000000..011424b2 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/SessionTestBase.sol/SessionTestBase.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"excludeArtifacts","inputs":[],"outputs":[{"name":"excludedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"excludeContracts","inputs":[],"outputs":[{"name":"excludedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"excludeSelectors","inputs":[],"outputs":[{"name":"excludedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"excludeSenders","inputs":[],"outputs":[{"name":"excludedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"targetArtifactSelectors","inputs":[],"outputs":[{"name":"targetedArtifactSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzArtifactSelector[]","components":[{"name":"artifact","type":"string","internalType":"string"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetArtifacts","inputs":[],"outputs":[{"name":"targetedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"targetContracts","inputs":[],"outputs":[{"name":"targetedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"targetInterfaces","inputs":[],"outputs":[{"name":"targetedInterfaces_","type":"tuple[]","internalType":"struct StdInvariant.FuzzInterface[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"artifacts","type":"string[]","internalType":"string[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSelectors","inputs":[],"outputs":[{"name":"targetedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSenders","inputs":[],"outputs":[{"name":"targetedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"event","name":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"IS_TEST()":"fa7626d4","excludeArtifacts()":"b5508aa9","excludeContracts()":"e20c9f71","excludeSelectors()":"b0464fdc","excludeSenders()":"1ed7831c","failed()":"ba414fa6","targetArtifactSelectors()":"66d9a9a0","targetArtifacts()":"85226c81","targetContracts()":"3f7286f4","targetInterfaces()":"2ade3880","targetSelectors()":"916a17c6","targetSenders()":"3e5e3c23"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"IS_TEST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"excludedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifactSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"artifact\",\"type\":\"string\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzArtifactSelector[]\",\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"targetedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetInterfaces\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"artifacts\",\"type\":\"string[]\"}],\"internalType\":\"struct StdInvariant.FuzzInterface[]\",\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/extensions/sessions/SessionTestBase.sol\":\"SessionTestBase\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/extensions/sessions/SessionErrors.sol\":{\"keccak256\":\"0xa7642b4ef1d2ac8e41bd6dca88c5a644cac21b3ebe79deb5013e21fb4aaab405\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ef80768f6c509a54ea5d3fb92cbf46363f945f071cc3664710770c09b3d2a978\",\"dweb:/ipfs/QmbRpicAiPSYQbKpjoDbanap9q5hYsqEMS1u7w7sqKEYTY\"]},\"src/extensions/sessions/SessionManager.sol\":{\"keccak256\":\"0x796e8db3b2dc58842aca5c7fe76897527dd60279a8146ee107f651d876fccbd9\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2ee4d968a8bd5d007cccc67108509470677f4f5ce59dce7005b1da7d9b243609\",\"dweb:/ipfs/QmVUz8Q4BwNsbeLZdsWHg87MCVF6aAJL6UYzWWWAoxjvS7\"]},\"src/extensions/sessions/SessionSig.sol\":{\"keccak256\":\"0x7c44eabacfd2b4758fa8f54574f7479d8ef0209551ad824b3fc497c215a9609a\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://845b301783b1f069fa0b01d47ca2de1a79b0d4c3e14881973421a718c4d823df\",\"dweb:/ipfs/QmcDgiqjENAL3L7MjQ7HgitmsJ2PVNUm3ibnL2DZRU1VAL\"]},\"src/extensions/sessions/explicit/ExplicitSessionManager.sol\":{\"keccak256\":\"0x08405cc3def78d4172267a2e607e303b5f222d8cb85ba009deab58e0110088b0\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e2e073fdb5794f59ee6d7eb5e04074b1452e5d0824e4117259835071199f3d32\",\"dweb:/ipfs/Qmbi56yfELF88ezZ2tczegLmeB6Gb3HxDX11bzx3rpDgJZ\"]},\"src/extensions/sessions/explicit/IExplicitSessionManager.sol\":{\"keccak256\":\"0xae940e96cf0677c9b0df0daee07db0293c55a21cec0b893d82eefd122815602b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://62ee98f92121ad54f78d375ec3003aab73719adec852b0d12518fe99fc6f66c6\",\"dweb:/ipfs/QmPuAX7tdga5Su1xua6LS6jR9DsV7GyCwyZLeRC8upPTKY\"]},\"src/extensions/sessions/explicit/Permission.sol\":{\"keccak256\":\"0x0bc35a04da3830c64ec13c32b57f88be6b980228f6b387e800cf70919cdcfb16\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://fcb304612f894699f8e1e40cf134abebe8f7135795bea479b04e967551c59948\",\"dweb:/ipfs/Qme4mD8dh3xU9wbscQwvL4cQcZ2Wv8Fobo2fmU29B3DirV\"]},\"src/extensions/sessions/explicit/PermissionValidator.sol\":{\"keccak256\":\"0xe970e1ce931ef3779e3ddc9525b40820b7f63746828a440306ff9c984da42234\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://9154a986b7a5565119b2c0993dd9bc9e6e9b3e07eede034c8fde1c9f39a56a30\",\"dweb:/ipfs/QmXbgsr6kYYK5gmge6sosgwbHnFnQW5ntCZCyeNTQqTndD\"]},\"src/extensions/sessions/implicit/Attestation.sol\":{\"keccak256\":\"0xcaa44022b5eb4bc7ab487b3b1a0125da67e2e891cee983ef6cdb6814f045efc8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://94829782b6dcb482d7c002511c590d1ad8de3b21e5e72575df18be73565b3638\",\"dweb:/ipfs/QmZ4u9FxALzMzKR7auW8FmFkhGVw8kRDeDRJ1PKwKaWNWF\"]},\"src/extensions/sessions/implicit/ISignalsImplicitMode.sol\":{\"keccak256\":\"0x6cb48f50c49bcb3c7071306fe9fac6c102bc9eabf73d9909e19ab3b9a835d0a8\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://15297e969f64fc1152654d1cefbe276c15a0ecfc11f86b4c276bb0b454fe700a\",\"dweb:/ipfs/QmeehNFYBPPtJePwUcqiYCgiuFotur4VVVCV1KvegdCCZ4\"]},\"src/extensions/sessions/implicit/ImplicitSessionManager.sol\":{\"keccak256\":\"0xe0d4f9f9c242e1e5781ba3a2eb4c4485b16de53769dacf7f448be01649d9997b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://f6f28cfeca83fffc74e63440243fcb0a7f9a7d5ac5efae21fa8e96926c1d0fae\",\"dweb:/ipfs/Qmdnw9PrjjpUjWij9VDxBRe6besuJvpwiGaPewVcR2G9C1\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/interfaces/ISapient.sol\":{\"keccak256\":\"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489\",\"dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"src/utils/LibOptim.sol\":{\"keccak256\":\"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81\",\"dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x\"]},\"test/extensions/sessions/SessionTestBase.sol\":{\"keccak256\":\"0x96ed18b2829a94a4e2fa0331b595e931ba48114679aa9765799aa9583713a1e7\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1f5dc74df056ea0b6722898060c5f467d47c7961335d474d93a3d45a75575894\",\"dweb:/ipfs/QmPT1ArcYmBUASEr2iL5TnRRkwShMahRh8YWurcbGkwJa4\"]},\"test/utils/PrimitivesRPC.sol\":{\"keccak256\":\"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe\",\"dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv\"]},\"test/utils/TestUtils.sol\":{\"keccak256\":\"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad\",\"dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log","anonymous":false},{"inputs":[{"internalType":"address","name":"","type":"address","indexed":false}],"type":"event","name":"log_address","anonymous":false},{"inputs":[{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"log_bytes","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32","indexed":false}],"type":"event","name":"log_bytes32","anonymous":false},{"inputs":[{"internalType":"int256","name":"","type":"int256","indexed":false}],"type":"event","name":"log_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address","name":"val","type":"address","indexed":false}],"type":"event","name":"log_named_address","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes","name":"val","type":"bytes","indexed":false}],"type":"event","name":"log_named_bytes","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes32","name":"val","type":"bytes32","indexed":false}],"type":"event","name":"log_named_bytes32","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false}],"type":"event","name":"log_named_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"string","name":"val","type":"string","indexed":false}],"type":"event","name":"log_named_string","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false}],"type":"event","name":"log_named_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log_string","anonymous":false},{"inputs":[{"internalType":"uint256","name":"","type":"uint256","indexed":false}],"type":"event","name":"log_uint","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"logs","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"IS_TEST","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeArtifacts","outputs":[{"internalType":"string[]","name":"excludedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeContracts","outputs":[{"internalType":"address[]","name":"excludedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"excludedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSenders","outputs":[{"internalType":"address[]","name":"excludedSenders_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"failed","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifactSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzArtifactSelector[]","name":"targetedArtifactSelectors_","type":"tuple[]","components":[{"internalType":"string","name":"artifact","type":"string"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifacts","outputs":[{"internalType":"string[]","name":"targetedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetContracts","outputs":[{"internalType":"address[]","name":"targetedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetInterfaces","outputs":[{"internalType":"struct StdInvariant.FuzzInterface[]","name":"targetedInterfaces_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"string[]","name":"artifacts","type":"string[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"targetedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSenders","outputs":[{"internalType":"address[]","name":"targetedSenders_","type":"address[]"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/extensions/sessions/SessionTestBase.sol":"SessionTestBase"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/extensions/sessions/SessionErrors.sol":{"keccak256":"0xa7642b4ef1d2ac8e41bd6dca88c5a644cac21b3ebe79deb5013e21fb4aaab405","urls":["bzz-raw://ef80768f6c509a54ea5d3fb92cbf46363f945f071cc3664710770c09b3d2a978","dweb:/ipfs/QmbRpicAiPSYQbKpjoDbanap9q5hYsqEMS1u7w7sqKEYTY"],"license":"Apache-2.0"},"src/extensions/sessions/SessionManager.sol":{"keccak256":"0x796e8db3b2dc58842aca5c7fe76897527dd60279a8146ee107f651d876fccbd9","urls":["bzz-raw://2ee4d968a8bd5d007cccc67108509470677f4f5ce59dce7005b1da7d9b243609","dweb:/ipfs/QmVUz8Q4BwNsbeLZdsWHg87MCVF6aAJL6UYzWWWAoxjvS7"],"license":"Apache-2.0"},"src/extensions/sessions/SessionSig.sol":{"keccak256":"0x7c44eabacfd2b4758fa8f54574f7479d8ef0209551ad824b3fc497c215a9609a","urls":["bzz-raw://845b301783b1f069fa0b01d47ca2de1a79b0d4c3e14881973421a718c4d823df","dweb:/ipfs/QmcDgiqjENAL3L7MjQ7HgitmsJ2PVNUm3ibnL2DZRU1VAL"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/ExplicitSessionManager.sol":{"keccak256":"0x08405cc3def78d4172267a2e607e303b5f222d8cb85ba009deab58e0110088b0","urls":["bzz-raw://e2e073fdb5794f59ee6d7eb5e04074b1452e5d0824e4117259835071199f3d32","dweb:/ipfs/Qmbi56yfELF88ezZ2tczegLmeB6Gb3HxDX11bzx3rpDgJZ"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/IExplicitSessionManager.sol":{"keccak256":"0xae940e96cf0677c9b0df0daee07db0293c55a21cec0b893d82eefd122815602b","urls":["bzz-raw://62ee98f92121ad54f78d375ec3003aab73719adec852b0d12518fe99fc6f66c6","dweb:/ipfs/QmPuAX7tdga5Su1xua6LS6jR9DsV7GyCwyZLeRC8upPTKY"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/Permission.sol":{"keccak256":"0x0bc35a04da3830c64ec13c32b57f88be6b980228f6b387e800cf70919cdcfb16","urls":["bzz-raw://fcb304612f894699f8e1e40cf134abebe8f7135795bea479b04e967551c59948","dweb:/ipfs/Qme4mD8dh3xU9wbscQwvL4cQcZ2Wv8Fobo2fmU29B3DirV"],"license":"Apache-2.0"},"src/extensions/sessions/explicit/PermissionValidator.sol":{"keccak256":"0xe970e1ce931ef3779e3ddc9525b40820b7f63746828a440306ff9c984da42234","urls":["bzz-raw://9154a986b7a5565119b2c0993dd9bc9e6e9b3e07eede034c8fde1c9f39a56a30","dweb:/ipfs/QmXbgsr6kYYK5gmge6sosgwbHnFnQW5ntCZCyeNTQqTndD"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/Attestation.sol":{"keccak256":"0xcaa44022b5eb4bc7ab487b3b1a0125da67e2e891cee983ef6cdb6814f045efc8","urls":["bzz-raw://94829782b6dcb482d7c002511c590d1ad8de3b21e5e72575df18be73565b3638","dweb:/ipfs/QmZ4u9FxALzMzKR7auW8FmFkhGVw8kRDeDRJ1PKwKaWNWF"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/ISignalsImplicitMode.sol":{"keccak256":"0x6cb48f50c49bcb3c7071306fe9fac6c102bc9eabf73d9909e19ab3b9a835d0a8","urls":["bzz-raw://15297e969f64fc1152654d1cefbe276c15a0ecfc11f86b4c276bb0b454fe700a","dweb:/ipfs/QmeehNFYBPPtJePwUcqiYCgiuFotur4VVVCV1KvegdCCZ4"],"license":"Apache-2.0"},"src/extensions/sessions/implicit/ImplicitSessionManager.sol":{"keccak256":"0xe0d4f9f9c242e1e5781ba3a2eb4c4485b16de53769dacf7f448be01649d9997b","urls":["bzz-raw://f6f28cfeca83fffc74e63440243fcb0a7f9a7d5ac5efae21fa8e96926c1d0fae","dweb:/ipfs/Qmdnw9PrjjpUjWij9VDxBRe6besuJvpwiGaPewVcR2G9C1"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/interfaces/ISapient.sol":{"keccak256":"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359","urls":["bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489","dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"src/utils/LibOptim.sol":{"keccak256":"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde","urls":["bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81","dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x"],"license":"Apache-2.0"},"test/extensions/sessions/SessionTestBase.sol":{"keccak256":"0x96ed18b2829a94a4e2fa0331b595e931ba48114679aa9765799aa9583713a1e7","urls":["bzz-raw://1f5dc74df056ea0b6722898060c5f467d47c7961335d474d93a3d45a75575894","dweb:/ipfs/QmPT1ArcYmBUASEr2iL5TnRRkwShMahRh8YWurcbGkwJa4"],"license":"Apache-2.0"},"test/utils/PrimitivesRPC.sol":{"keccak256":"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe","urls":["bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe","dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv"],"license":"Apache-2.0"},"test/utils/TestUtils.sol":{"keccak256":"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79","urls":["bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad","dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa"],"license":"Apache-2.0"}},"version":1},"id":82} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Simulator.sol/Simulator.json b/contracts/artifacts/wallet-contracts-v3/Simulator.sol/Simulator.json new file mode 100644 index 00000000..8aeb5953 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Simulator.sol/Simulator.json @@ -0,0 +1 @@ +{"abi":[{"type":"constructor","inputs":[{"name":"_entryPoint","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"fallback","stateMutability":"payable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"addHook","inputs":[{"name":"selector","type":"bytes4","internalType":"bytes4"},{"name":"implementation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"entrypoint","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"execute","inputs":[{"name":"_payload","type":"bytes","internalType":"bytes"},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"executeUserOp","inputs":[{"name":"_payload","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getImplementation","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getStaticSignature","inputs":[{"name":"_hash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"imageHash","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"isValidSignature","inputs":[{"name":"_hash","type":"bytes32","internalType":"bytes32"},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"view"},{"type":"function","name":"onERC1155BatchReceived","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256[]","internalType":"uint256[]"},{"name":"","type":"uint256[]","internalType":"uint256[]"},{"name":"","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"pure"},{"type":"function","name":"onERC1155Received","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"pure"},{"type":"function","name":"onERC721Received","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"pure"},{"type":"function","name":"readHook","inputs":[{"name":"selector","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"readNonce","inputs":[{"name":"_space","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"recoverPartialSignature","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"threshold","type":"uint256","internalType":"uint256"},{"name":"weight","type":"uint256","internalType":"uint256"},{"name":"isValidImage","type":"bool","internalType":"bool"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"checkpoint","type":"uint256","internalType":"uint256"},{"name":"opHash","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"recoverSapientSignature","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"removeHook","inputs":[{"name":"selector","type":"bytes4","internalType":"bytes4"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"selfExecute","inputs":[{"name":"_payload","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"setStaticSignature","inputs":[{"name":"_hash","type":"bytes32","internalType":"bytes32"},{"name":"_address","type":"address","internalType":"address"},{"name":"_timestamp","type":"uint96","internalType":"uint96"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"simulate","inputs":[{"name":"_calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]}],"outputs":[{"name":"results","type":"tuple[]","internalType":"struct Simulator.Result[]","components":[{"name":"status","type":"uint8","internalType":"enum Simulator.Status"},{"name":"result","type":"bytes","internalType":"bytes"},{"name":"gasUsed","type":"uint256","internalType":"uint256"}]}],"stateMutability":"nonpayable"},{"type":"function","name":"tokenReceived","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"pure"},{"type":"function","name":"tokensReceived","inputs":[{"name":"operator","type":"address","internalType":"address"},{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"operatorData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateImageHash","inputs":[{"name":"_imageHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateImplementation","inputs":[{"name":"_implementation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"validateUserOp","inputs":[{"name":"userOp","type":"tuple","internalType":"struct PackedUserOperation","components":[{"name":"sender","type":"address","internalType":"address"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"initCode","type":"bytes","internalType":"bytes"},{"name":"callData","type":"bytes","internalType":"bytes"},{"name":"accountGasLimits","type":"bytes32","internalType":"bytes32"},{"name":"preVerificationGas","type":"uint256","internalType":"uint256"},{"name":"gasFees","type":"bytes32","internalType":"bytes32"},{"name":"paymasterAndData","type":"bytes","internalType":"bytes"},{"name":"signature","type":"bytes","internalType":"bytes"}]},{"name":"userOpHash","type":"bytes32","internalType":"bytes32"},{"name":"missingAccountFunds","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"validationData","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"event","name":"CallAborted","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"_returnData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"CallFailed","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"_returnData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"CallSkipped","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"CallSucceeded","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"DefinedHook","inputs":[{"name":"selector","type":"bytes4","indexed":false,"internalType":"bytes4"},{"name":"implementation","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"ImageHashUpdated","inputs":[{"name":"newImageHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"ImplementationUpdated","inputs":[{"name":"newImplementation","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"NonceChange","inputs":[{"name":"_space","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"_newNonce","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"StaticSignatureSet","inputs":[{"name":"_hash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_address","type":"address","indexed":false,"internalType":"address"},{"name":"_timestamp","type":"uint96","indexed":false,"internalType":"uint96"}],"anonymous":false},{"type":"error","name":"BadNonce","inputs":[{"name":"_space","type":"uint256","internalType":"uint256"},{"name":"_provided","type":"uint256","internalType":"uint256"},{"name":"_current","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC4337Disabled","inputs":[]},{"type":"error","name":"HookAlreadyExists","inputs":[{"name":"selector","type":"bytes4","internalType":"bytes4"}]},{"type":"error","name":"HookDoesNotExist","inputs":[{"name":"selector","type":"bytes4","internalType":"bytes4"}]},{"type":"error","name":"ImageHashIsZero","inputs":[]},{"type":"error","name":"InvalidERC1271Signature","inputs":[{"name":"_opHash","type":"bytes32","internalType":"bytes32"},{"name":"_signer","type":"address","internalType":"address"},{"name":"_signature","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"InvalidEntryPoint","inputs":[{"name":"_entrypoint","type":"address","internalType":"address"}]},{"type":"error","name":"InvalidKind","inputs":[{"name":"kind","type":"uint8","internalType":"uint8"}]},{"type":"error","name":"InvalidSapientSignature","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"InvalidSignature","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"InvalidSignatureFlag","inputs":[{"name":"_flag","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidSignatureWeight","inputs":[{"name":"_threshold","type":"uint256","internalType":"uint256"},{"name":"_weight","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidStaticSignatureExpired","inputs":[{"name":"_opHash","type":"bytes32","internalType":"bytes32"},{"name":"_expires","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidStaticSignatureWrongCaller","inputs":[{"name":"_opHash","type":"bytes32","internalType":"bytes32"},{"name":"_caller","type":"address","internalType":"address"},{"name":"_expectedCaller","type":"address","internalType":"address"}]},{"type":"error","name":"LowWeightChainedSignature","inputs":[{"name":"_signature","type":"bytes","internalType":"bytes"},{"name":"_threshold","type":"uint256","internalType":"uint256"},{"name":"_weight","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"NotEnoughGas","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_index","type":"uint256","internalType":"uint256"},{"name":"_gasLeft","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"OnlySelf","inputs":[{"name":"_sender","type":"address","internalType":"address"}]},{"type":"error","name":"Reverted","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_index","type":"uint256","internalType":"uint256"},{"name":"_returnData","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"UnusedSnapshot","inputs":[{"name":"_snapshot","type":"tuple","internalType":"struct Snapshot","components":[{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"checkpoint","type":"uint256","internalType":"uint256"}]}]},{"type":"error","name":"WrongChainedCheckpointOrder","inputs":[{"name":"_nextCheckpoint","type":"uint256","internalType":"uint256"},{"name":"_checkpoint","type":"uint256","internalType":"uint256"}]}],"bytecode":{"object":"0x60a034607457601f61434038819003918201601f19168301916001600160401b03831184841017607957808492602094604052833981010312607457516001600160a01b03811681036074576080526040516142b090816100908239608051818181610fe1015281816112db0152611adf0152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6080604052600436101561001e575b361561001c5761001c6120f4565b005b60003560e01c806223de291461019d578063025b22bc1461019857806313792a4a14610193578063150b7a021461018e5780631626ba7e1461018957806319822f7c146101845780631a9b23371461017f5780631f6a1eb91461017a57806329561426146101755780634fcf3eca1461017057806351605d801461016b5780636ea44577146101665780638943ec02146101615780638c3f55631461015c57806392dcb3fc146101575780639c145aed14610152578063a27c39221461014d578063a65d69d414610148578063aaf10f4214610143578063ad55366b1461013e578063b93ea7ad14610139578063bc197c8114610134578063f23a6e611461012f5763f727ef1c0361000e57611629565b61159c565b6114ca565b61139c565b611350565b6112ff565b611290565b611163565b610fbb565b610f5d565b610f21565b610e9d565b610e6e565b610dca565b610cae565b610bf5565b610b14565b610ab1565b6109fc565b610974565b6108e7565b6107ea565b6102eb565b61025f565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101c557565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101c557565b6044359073ffffffffffffffffffffffffffffffffffffffff821682036101c557565b359073ffffffffffffffffffffffffffffffffffffffff821682036101c557565b9181601f840112156101c55782359167ffffffffffffffff83116101c557602083818601950101116101c557565b346101c55760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576102966101a2565b5061029f6101ca565b506102a86101ed565b5060843567ffffffffffffffff81116101c5576102c9903690600401610231565b505060a43567ffffffffffffffff81116101c55761001c903690600401610231565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55761031d6101a2565b30330361036a576020817f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca0392305573ffffffffffffffffffffffffffffffffffffffff60405191168152a1005b7fa19dbf00000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff8211176103e357604052565b610398565b6040810190811067ffffffffffffffff8211176103e357604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176103e357604052565b6040519061045460e083610404565b565b6040519061045461012083610404565b359060ff821682036101c557565b359081151582036101c557565b67ffffffffffffffff81116103e35760051b60200190565b67ffffffffffffffff81116103e357601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926104df82610499565b916104ed6040519384610404565b8294818452818301116101c5578281602093846000960137010152565b9080601f830112156101c557816020610525933591016104d3565b90565b919060e0838203126101c55761053c610445565b9261054681610210565b845260208101356020850152604081013567ffffffffffffffff81116101c55760c09261057491830161050a565b60408501526060810135606085015261058f60808201610474565b60808501526105a060a08201610474565b60a0850152013560c0830152565b9080601f830112156101c55781356105c581610481565b926105d36040519485610404565b81845260208085019260051b820101918383116101c55760208201905b8382106105ff57505050505090565b813567ffffffffffffffff81116101c55760209161062287848094880101610528565b8152019101906105f0565b9080601f830112156101c557813561064481610481565b926106526040519485610404565b81845260208085019260051b8201019283116101c557602001905b82821061067a5750505090565b6020809161068784610210565b81520191019061066d565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126101c55760043567ffffffffffffffff81116101c5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82850301126101c557610704610456565b9061071181600401610466565b825261071f60248201610474565b6020830152604481013567ffffffffffffffff81116101c557846004610747928401016105ae565b6040830152606481013560608301526084810135608083015260a481013567ffffffffffffffff81116101c5578460046107839284010161050a565b60a083015260c481013560c083015260e481013560e083015261010481013567ffffffffffffffff81116101c557600485916107c093010161062d565b610100820152916024359067ffffffffffffffff82116101c5576107e691600401610231565b9091565b346101c5576107f836610692565b909161010081019261081361080e855151611731565b611751565b9160005b8551805182101561087a579061087461084f610835836001956117cf565b5173ffffffffffffffffffffffffffffffffffffffff1690565b61085983886117cf565b9073ffffffffffffffffffffffffffffffffffffffff169052565b01610817565b505083838661088f33610859835151856117cf565b5261089b8184846121c6565b50156108ad5760405160018152602090f35b6108e3906040519384937ff58cc8b5000000000000000000000000000000000000000000000000000000008552600485016119cb565b0390fd5b346101c55760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55761091e6101a2565b506109276101ca565b5060643567ffffffffffffffff81116101c557610948903690600401610231565b505060206040517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b346101c55760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760043560243567ffffffffffffffff81116101c5576020916109cc6109d2923690600401610231565b916119f0565b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b346101c55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760043567ffffffffffffffff81116101c5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126101c557610a7f60209160243560443591600401611ac5565b604051908152f35b7fffffffff000000000000000000000000000000000000000000000000000000008116036101c557565b346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576020610af6600435610af181610a87565b6123ab565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760043567ffffffffffffffff81116101c557610b5e903690600401610231565b9060243567ffffffffffffffff81116101c557610b82610b8c913690600401610231565b9190935a936124e0565b91610ba060608401516080850151906127a4565b610bab8285856121c6565b929015610bbd575061001c93506128fd565b836108e386926040519384937fa2b6d61b000000000000000000000000000000000000000000000000000000008552600485016119cb565b346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760043530330361036a578015610c84576020817f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf855604051908152a1005b7f4294d1270000000000000000000000000000000000000000000000000000000060005260046000fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c557600435610ce481610a87565b30330361036a5773ffffffffffffffffffffffffffffffffffffffff610d09826123ab565b1615610d6f5760407fffffffff000000000000000000000000000000000000000000000000000000007f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19216610d60600082613124565b815190815260006020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f1c3812cc000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b60009103126101c557565b346101c55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760207fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf854604051908152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101c5576004359067ffffffffffffffff82116101c5576107e691600401610231565b610e7736610e25565b9030330361036a57610e8d61001c925a926124e0565b90610e9782612bf0565b906128fd565b346101c55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c557610ed46101a2565b5060443567ffffffffffffffff81116101c557610ef5903690600401610231565b505060206040517f8943ec02000000000000000000000000000000000000000000000000000000008152f35b346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576020610a7f600435612c84565b346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576040610f99600435612cca565b73ffffffffffffffffffffffffffffffffffffffff8351921682526020820152f35b346101c557610fc936610e25565b9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001680156110a957330361107b57303b156101c55761104f9160009160405193849283927f6ea4457700000000000000000000000000000000000000000000000000000000845260048401611c66565b038183305af180156110765761106157005b80611070600061001c93610404565b80610dbf565b611a3c565b7f1d6ddbf4000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7fd13d78350000000000000000000000000000000000000000000000000000000060005260046000fd5b9181601f840112156101c55782359167ffffffffffffffff83116101c5576020808501948460051b0101116101c557565b919082519283825260005b84811061114e5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b8060208092840101518282860101520161110f565b346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760043567ffffffffffffffff81116101c5576111b56111bb9136906004016110d3565b90611d94565b60405160208101916020825280518093526040820192602060408260051b85010192019060005b8181106111ef5784840385f35b9091927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08582030186528351908151600681101561126157600192826020939284935260408061124c858501516060878601526060850190611104565b930151910152950196019101949190946111e2565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b346101c55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101c55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576020305473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346101c55760c061136c60008061136636610692565b91612dd1565b92611378839293613edb565b906040519586526020860152151560408501526060840152608083015260a0820152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576004356113d281610a87565b6113da6101ca565b9030330361036a5773ffffffffffffffffffffffffffffffffffffffff611400826123ab565b1661147a577f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19173ffffffffffffffffffffffffffffffffffffffff7fffffffff0000000000000000000000000000000000000000000000000000000060409316911661146d8183613124565b82519182526020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f5b4d6d6a000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b346101c55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576115016101a2565b5061150a6101ca565b5060443567ffffffffffffffff81116101c55761152b9036906004016110d3565b505060643567ffffffffffffffff81116101c55761154d9036906004016110d3565b505060843567ffffffffffffffff81116101c55761156f903690600401610231565b50506040517fbc197c81000000000000000000000000000000000000000000000000000000008152602090f35b346101c55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576115d36101a2565b506115dc6101ca565b5060843567ffffffffffffffff81116101c5576115fd903690600401610231565b505060206040517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b346101c55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576004356116636101ca565b604435916bffffffffffffffffffffffff83168093036101c55730330361036a578273ffffffffffffffffffffffffffffffffffffffff836116ee7febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1967fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606097881b1617856130df565b6040519384521660208301526040820152a1005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b906001820180921161173f57565b611702565b9190820180921161173f57565b9061175b82610481565b6117686040519182610404565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06117968294610481565b0190602036910137565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518210156117e35760209160051b010190565b6117a0565b9080602083519182815201916020808360051b8301019401926000915b83831061181457505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080611887604085015160e0604086015260e0850190611104565b936060810151606085015260808101511515608085015260a0810151151560a0850152015191015297019301930191939290611805565b906020808351928381520192019060005b8181106118dc5750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016118cf565b805160ff16825261052591602082810151151590820152610100611966611940604085015161012060408601526101208501906117e8565b606085015160608501526080850151608085015260a085015184820360a0860152611104565b9260c081015160c084015260e081015160e08401520151906101008184039101526118be565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b916119e26105259492604085526040850190611908565b92602081850391015261198c565b90611a0d92916119fe612350565b906003825260e08201526121c6565b5015611a37577f1626ba7e0000000000000000000000000000000000000000000000000000000090565b600090565b6040513d6000823e3d90fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101c5570180359067ffffffffffffffff82116101c5576020019181360383136101c557565b908160209103126101c5575161052581610a87565b60409061052594928152816020820152019161198c565b91909173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169182156110a95782330361107b5780611bf7575b506020915080610100611b27920190611a48565b92611b5f60405194859384937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611aae565b0381305afa908115611076577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091611bc8575b501603611bc357600090565b600190565b611bea915060203d602011611bf0575b611be28183610404565b810190611a99565b38611bb7565b503d611bd8565b823b156101c5576040517fb760faf900000000000000000000000000000000000000000000000000000000815230600482015292600091849160249183915af190811561107657602092611b2792611c51575b5090611b13565b806110706000611c6093610404565b38611c4a565b91602061052593818152019161198c565b90611c8182610481565b611c8e6040519182610404565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611cbc8294610481565b0160005b818110611ccc57505050565b60405190606082019180831067ffffffffffffffff8411176103e357602092604052600081526060838201526000604082015282828601015201611cc0565b91908110156117e35760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21813603018212156101c5570190565b610525903690610528565b9190820391821161173f57565b909260c092610525959460008452602084015260408301526060820152600060808201528160a08201520190611104565b90915a92600090611da481611c77565b94825b828110611db7575b505050509050565b611dca611dc5828589611d0b565b611d4b565b93611dd860a0860151151590565b806120bc575b6120b2575060009360608101518015908115806120a9575b6120385783611e086080850151151590565b15611fd957611eb390611ebb92935a94611e36875173ffffffffffffffffffffffffffffffffffffffff1690565b9115611fd357505a905b611eae89611e8260408a01518d6040519788947f4c4e814c00000000000000000000000000000000000000000000000000000000602087015260248601611d63565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101855284610404565b612d36565b915a90611d56565b6040611ec7858c6117cf565b5101525b15611f07575b5080611ee9611ee26001938a6117cf565b5160019052565b611ef1612d48565b6020611efd838b6117cf565b5101525b01611da7565b60c001805115611f9c576001815114611f635751600214611f285738611ed1565b939450505050611f42611f3b82856117cf565b5160039052565b6020611f56611f4f612d48565b92856117cf565b5101528038808080611daf565b509395809550611f829350611f7b92508491506117cf565b5160049052565b6020611f96611f8f612d48565b92846117cf565b51015290565b50925060018093611fb7611fb0828a6117cf565b5160029052565b611fbf612d48565b6020611fcb838b6117cf565b510152611f01565b90611e40565b50611eb361201e915a93612001865173ffffffffffffffffffffffffffffffffffffffff1690565b9160208701519160001461203257505a905b604087015192612d24565b604061202a858c6117cf565b510152611ecb565b90612013565b505050905085945060209250611f96915061206161205a8261207796986117cf565b5160059052565b6120a35a60405185810191825295869160200190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101865285610404565b846117cf565b50805a10611df6565b9350600190611f01565b508015611dde565b3d156120ef573d906120d582610499565b916120e36040519384610404565b82523d6000602084013e565b606090565b6004361080156121015750565b612137906000357fffffffff00000000000000000000000000000000000000000000000000000000811691612189575b506123ab565b73ffffffffffffffffffffffffffffffffffffffff81166121555750565b60008091604051368382378036810184815203915af46121736120c4565b901561218157602081519101f35b602081519101fd5b7fffffffff000000000000000000000000000000000000000000000000000000008092503660040360031b1b161638612131565b90156117e35790565b91907f80000000000000000000000000000000000000000000000000000000000000008061221d6121f785856121bd565b357fff000000000000000000000000000000000000000000000000000000000000001690565b161461227c57600091829161223194612dd1565b90509190919280821061224c57505061224990613edb565b91565b7ffd41fcba0000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b505061228790612bf0565b9061229182612cca565b4281111561231e575073ffffffffffffffffffffffffffffffffffffffff81168015159081612313575b506122c7575060019190565b7f8945c3130000000000000000000000000000000000000000000000000000000060005260048390523360245273ffffffffffffffffffffffffffffffffffffffff1660445260646000fd5b9050331415386122bb565b7ff95b6ab700000000000000000000000000000000000000000000000000000000600052600484905260245260446000fd5b60405190610120820182811067ffffffffffffffff8211176103e3576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b73ffffffffffffffffffffffffffffffffffffffff906040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a120845216604082015260408152612422606082610404565b519020541690565b9061243482610481565b6124416040519182610404565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061246f8294610481565b019060005b82811061248057505050565b60209060405161248f816103c7565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c082015282828501015201612474565b909392938483116101c55784116101c5578101920390565b9190916124eb612350565b6000815292600190823560f81c827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8183160161278d5750600060608701525b600761253a60ff831660011c90565b168061273c575b5060108181160361270757506001925b61255a8461242a565b92604087019384526000905b85821061257557505050505050565b8281013560f81c906001019091816001808516036126e557506125b93061259d8389516117cf565b519073ffffffffffffffffffffffffffffffffffffffff169052565b6002808416146126c5575b600480841614612677575b600880841614612644575b61262d61262760c0856126068a60806125fd8860108060019c9d161493516117cf565b51019015159052565b61261d8a60a06125fd8860208087161493516117cf565b1660061c60031690565b60ff1690565b60c061263a8389516117cf565b5101520190612566565b60019161262d906126279060c090878101359060200196906060612669878d516117cf565b5101529594505050506125da565b906126bf908481013560e81c906003016126b861269f6126978484611744565b838a8a6124c8565b919060406126ae888d516117cf565b51019236916104d3565b9052611744565b906125cf565b908381013590602001919060206126dd8389516117cf565b5101526125c4565b61270292508481013560601c90601401929061259d8389516117cf565b6125b9565b6020908116036127295761ffff918381013560f01c906002015b921692612551565b60ff918381013560f81c90600101612721565b612780919385929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290608087015238612541565b80850135606090811c90880152601401925061252b565b906127ae82612c84565b81810361283457509060017f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f8819201908160405160208101907f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e82528360408201526040815261281e606082610404565b51902055604080519182526020820192909252a1565b917f9b6514f40000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b61288060409295949395606083526060830190611908565b9460208201520152565b9261052596959260c09592855260208501526040840152606083015260808201528160a08201520190611104565b6105259392606092825260208201528160408201520190611104565b6128ea6105259492606083526060830190611908565b9260208201526040818403910152611104565b916000604082019384515190825b82811061291c575b50505050505050565b6129278188516117cf565b519361293660a0860151151590565b80612be8575b612ba8575060009360608101518015801580612b9f575b612b675784906129666080850151151590565b15612b21576129e09261298d855173ffffffffffffffffffffffffffffffffffffffff1690565b9115612b1b57505a905b611eae8b611e8260608d01516040890151908c8b604051998a967f4c4e814c0000000000000000000000000000000000000000000000000000000060208901526024880161288a565b15612a23575b506040805187815260208101839052600192917f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a91a15b0161290b565b60c001805115612ad2576001815114612a935751600214612a4457386129e6565b9493505050507fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b9250612a84612a78612d48565b604051938493846128b8565b0390a138808080808080612913565b50846108e3612aa0612d48565b6040519384937f7f6b0bb1000000000000000000000000000000000000000000000000000000008552600485016128d4565b509250600180937f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d612b13612b05612d48565b604051918291858c846128b8565b0390a1612a1d565b90612997565b8351612b5c93925073ffffffffffffffffffffffffffffffffffffffff1691602085015191600014612b6157505a905b604085015192612d24565b6129e0565b90612b51565b83886108e35a6040519384937f2139527400000000000000000000000000000000000000000000000000000000855260048501612868565b50815a10612953565b6040805188815260208101849052919550600192917f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b9181908101612b13565b50801561293c565b612c52612c7e612c10612c0a602085015115153090613163565b9361325e565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610404565b51902090565b60405160208101917f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8352604082015260408152612cc3606082610404565b5190205490565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e868352604082015260408152612d09606082610404565b51902054906bffffffffffffffffffffffff8260601c921690565b9160009391849360208451940192f190565b9160009291839260208351930191f490565b3d90604051916020818401016040528083526000602084013e565b60405190612d70826103e8565b60006020838281520152565b908160409103126101c557602060405191612d96836103e8565b805183520151602082015290565b60409073ffffffffffffffffffffffffffffffffffffffff61052594931681528160208201520190611104565b909491939291853560f81c60019093819087612deb612d63565b93604080891614806130c1575b612fc4575b505050600180861614612f9e5760028581161460208501526007600286901c1688820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101908096918196602016612e6d9060051c90565b612e7690611731565b8a820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101959098899a81612ec284612bf0565b988993612ece936124c8565b91612ed893613675565b9098612eec91600052602052604060002090565b90612eff91600052602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff16612f2891600052602052604060002090565b94815190868215159283612f93575b505081612f84575b50612f475750565b6040517fccbb534f000000000000000000000000000000000000000000000000000000008152815160048201526020909101516024820152604490fd5b90506020820151101538612f3f565b141591508638612f37565b86612fb99792949550612fb193986124c8565b939092613453565b919394909293929190565b8a81013560601c985060140192509087908a90849015612fe8575b50829150612dfd565b60038101955073ffffffffffffffffffffffffffffffffffffffff945081013560e81c9260409261306b9290916130369161302f9189906130298983611744565b926124c8565b36916104d3565b83519586809481937fccce3bc80000000000000000000000000000000000000000000000000000000083523060048401612da4565b0392165afa80156110765761308992600091613092575b5092611744565b86388981612fdf565b6130b4915060403d6040116130ba575b6130ac8183610404565b810190612d7c565b38613082565b503d6130a2565b5073ffffffffffffffffffffffffffffffffffffffff891615612df8565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e86835260408201526040815261311e606082610404565b51902055565b60405160208101917fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a120835260408201526040815261311e606082610404565b15613213576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a08152612c7e60c082610404565b469061316c565b805160209091019060005b8181106132325750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101613225565b61010081015160405161327981612c5260208201809561321a565b51902090613288815160ff1690565b60ff81168061330157505090612c7e6132a46040840151613f3e565b92612c5260806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b6001810361335f57505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46693810193845290810191909152606081019290925290612c7e8160808101612c52565b600281036133b557505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e460208201908152918101929092526060820192909252612c7e8160808101612c52565b600303613409575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46660208201908152918101929092526060820192909252612c7e8160808101612c52565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b90612880906040939695949660608452606084019161198c565b919492909260009560009560009560009560009561346f612350565b60028152937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9460005b8281106134c6575050505050505080511515806134b8575b612f475750565b5060208101518411156134b1565b600381019d50959b50939950919750929091906134ea908b9085013560e81c611744565b958a600084890361362e575089915b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c036135fe57509060016135338961353a9487896124c8565b908b612dd1565b9c939c9b929b9a919a99909a9b9d8e9d9e8f905b106135b85750928b8851146135af575b808b101561357d57508a60c08501528992959295949194939093613499565b7f37daf62b0000000000000000000000000000000000000000000000000000000060005260048b905260245260446000fd5b6000885261355e565b8d8f6108e36135c985858c8e6124c8565b9390926040519485947fb006aba000000000000000000000000000000000000000000000000000000000865260048601613439565b9798999a9160016136148b61361b94888a6124c8565b9086612dd1565b50929d919c909b929a9092918e8e61354e565b916134f9565b73ffffffffffffffffffffffffffffffffffffffff61052595936060938352166020820152816040820152019161198c565b908160209103126101c5575190565b9391909360009460009460005b818110613690575050505050565b8481013560f881901c9860019092019788979692909160fc1c988915613e74575060018914613e345760028914613c775760038914613c485760048914613bc75760068914613b275760058914613ad95760078914613a1257600889146139bc576009891461389357600a8914613730577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b90919293949596975060038916978815613882575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190810190816137a89187876124c8565b6040517f898bd921000000000000000000000000000000000000000000000000000000008152939184916137e0918a60048501611aae565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa918215611076576138239360009361384f575b5060ff909a168091019a61420a565b908015613849579061383d91600052602052604060002090565b955b9392919093613682565b5061383d565b60ff9193506138749060203d811161387b575b61386c8183610404565b810190613666565b9290613814565b503d613862565b8084013560f81c9850600101613745565b909192939495969750600389169788156139ab575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101908101908161390b9187876124c8565b6040517f13792a4a00000000000000000000000000000000000000000000000000000000815293918491613943918b600485016119cb565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa918215611076576139859360009361384f575060ff909a168091019a61420a565b9080156139a5579061399f91600052602052604060002090565b9561383f565b5061399f565b8084013560f81c98506001016138a8565b9850602087019750949593949293919290918201356139da866141b1565b81146139ea575b613985906141cb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506139e1565b975090919293949597600f16968715613ac7575b60206000613a38613aa59a9b86614079565b9c9092918a604051613a7b81612c528a82019485603c917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008252601c8201520190565b51902092604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa15611076576139859060ff6000519a16809101996140bc565b600189019883013560f81c9750613a26565b985060208701975094959394929391929091820135808514613aff575b61398590614172565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9850613af6565b989091929394959662ffffff9850613b49612627600c8416603f9060021c1690565b918215613bb3575b6003168015613ba2575b908190613b8690613b7e908781013560e81c906003019c168c01809c89896124c8565b90898b613675565b911115613b99575b906139859291614127565b99820199613b8e565b50600281019084013560f01c613b5b565b8482013560f81c9250600190910190613b51565b975097613c1d613c2a929394959697600f613c3293169085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b92908301809386866124c8565b908688613675565b9061399f92980198600052602052604060002090565b9850965093949293919290919080820135906020019680156139a5579061399f91600052602052604060002090565b90919293949596975060038916978815613e23575b8084013560601c99613ceb9160140190613cab9060021c600316612627565b9085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b90810190613d4f60208c613d0185858b8b6124c8565b919073ffffffffffffffffffffffffffffffffffffffff8c604051968795869485937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611aae565b0392165afa908115611076577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091613e05575b501603613dc157509060ff613985929916809101996140bc565b6108e3613dd28c93899389896124c8565b906040519485947fb2fed7ae00000000000000000000000000000000000000000000000000000000865260048601613634565b613e1d915060203d8111611bf057611be28183610404565b38613da7565b8381013560f81c9850600101613c8c565b98600f91929394959697985016968715613e63575b60148101976139859160ff9091169084013560601c6140bc565b8281013560f81c9750600101613e49565b98509091929394959698600f16978815613ec6575b5060206000613e9c613aa59a9b86614079565b9c90916040519384938c859094939260ff6060936080840197845216602083015260408201520152565b60018101995083013560f81c97506020613e89565b8015159081613ee8575090565b90507fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8541490565b805160209091019060005b818110613f285750505090565b8251845260209384019390920191600101613f1b565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0613f84613f6e83610481565b92613f7c6040519485610404565b808452610481565b0136602083013760005b83518110156140605780613fa4600192866117cf565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e0830152610100820152610100815261404c61012082610404565b51902061405982856117cf565b5201613f8e565b50909150604051612c7e81612c52602082018095613f10565b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff811161173f5791565b90604051907fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208301937f53657175656e6365207369676e65723a0a000000000000000000000000000000855260601b166031830152604582015260458152612c7e606582610404565b916040519160208301937f53657175656e6365206e657374656420636f6e6669673a0a0000000000000000855260388401526058830152607882015260788152612c7e609882610404565b60405160208101917f53657175656e636520737461746963206469676573743a0a00000000000000008352603882015260388152612c7e605882610404565b612c52612c7e612c10612c0a600060208601511515613163565b60405160208101917f53657175656e636520616e792061646472657373207375626469676573743a0a8352604082015260408152612c7e606082610404565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e63652073617069656e7420636f6e6669673a0a00000000000000865260601b166039840152604d830152606d820152606d8152612c7e608d8261040456fea2646970667358221220663e0e19a1f44876322f0807bffe0131225f2bf0bc3ca63984e33df77f73e01664736f6c634300081c0033","sourceMap":"406:2734:27:-:0;;;;;;;;;;;;;-1:-1:-1;;406:2734:27;;;;-1:-1:-1;;;;;406:2734:27;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;406:2734:27;;;;;;581:24:44;;406:2734:27;;;;;;;;581:24:44;406:2734:27;;;;;;;;;;;;;;;;;-1:-1:-1;406:2734:27;;;;;;-1:-1:-1;406:2734:27;;;;;-1:-1:-1;406:2734:27","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436101561001e575b361561001c5761001c6120f4565b005b60003560e01c806223de291461019d578063025b22bc1461019857806313792a4a14610193578063150b7a021461018e5780631626ba7e1461018957806319822f7c146101845780631a9b23371461017f5780631f6a1eb91461017a57806329561426146101755780634fcf3eca1461017057806351605d801461016b5780636ea44577146101665780638943ec02146101615780638c3f55631461015c57806392dcb3fc146101575780639c145aed14610152578063a27c39221461014d578063a65d69d414610148578063aaf10f4214610143578063ad55366b1461013e578063b93ea7ad14610139578063bc197c8114610134578063f23a6e611461012f5763f727ef1c0361000e57611629565b61159c565b6114ca565b61139c565b611350565b6112ff565b611290565b611163565b610fbb565b610f5d565b610f21565b610e9d565b610e6e565b610dca565b610cae565b610bf5565b610b14565b610ab1565b6109fc565b610974565b6108e7565b6107ea565b6102eb565b61025f565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101c557565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101c557565b6044359073ffffffffffffffffffffffffffffffffffffffff821682036101c557565b359073ffffffffffffffffffffffffffffffffffffffff821682036101c557565b9181601f840112156101c55782359167ffffffffffffffff83116101c557602083818601950101116101c557565b346101c55760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576102966101a2565b5061029f6101ca565b506102a86101ed565b5060843567ffffffffffffffff81116101c5576102c9903690600401610231565b505060a43567ffffffffffffffff81116101c55761001c903690600401610231565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55761031d6101a2565b30330361036a576020817f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca0392305573ffffffffffffffffffffffffffffffffffffffff60405191168152a1005b7fa19dbf00000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff8211176103e357604052565b610398565b6040810190811067ffffffffffffffff8211176103e357604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176103e357604052565b6040519061045460e083610404565b565b6040519061045461012083610404565b359060ff821682036101c557565b359081151582036101c557565b67ffffffffffffffff81116103e35760051b60200190565b67ffffffffffffffff81116103e357601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926104df82610499565b916104ed6040519384610404565b8294818452818301116101c5578281602093846000960137010152565b9080601f830112156101c557816020610525933591016104d3565b90565b919060e0838203126101c55761053c610445565b9261054681610210565b845260208101356020850152604081013567ffffffffffffffff81116101c55760c09261057491830161050a565b60408501526060810135606085015261058f60808201610474565b60808501526105a060a08201610474565b60a0850152013560c0830152565b9080601f830112156101c55781356105c581610481565b926105d36040519485610404565b81845260208085019260051b820101918383116101c55760208201905b8382106105ff57505050505090565b813567ffffffffffffffff81116101c55760209161062287848094880101610528565b8152019101906105f0565b9080601f830112156101c557813561064481610481565b926106526040519485610404565b81845260208085019260051b8201019283116101c557602001905b82821061067a5750505090565b6020809161068784610210565b81520191019061066d565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126101c55760043567ffffffffffffffff81116101c5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82850301126101c557610704610456565b9061071181600401610466565b825261071f60248201610474565b6020830152604481013567ffffffffffffffff81116101c557846004610747928401016105ae565b6040830152606481013560608301526084810135608083015260a481013567ffffffffffffffff81116101c5578460046107839284010161050a565b60a083015260c481013560c083015260e481013560e083015261010481013567ffffffffffffffff81116101c557600485916107c093010161062d565b610100820152916024359067ffffffffffffffff82116101c5576107e691600401610231565b9091565b346101c5576107f836610692565b909161010081019261081361080e855151611731565b611751565b9160005b8551805182101561087a579061087461084f610835836001956117cf565b5173ffffffffffffffffffffffffffffffffffffffff1690565b61085983886117cf565b9073ffffffffffffffffffffffffffffffffffffffff169052565b01610817565b505083838661088f33610859835151856117cf565b5261089b8184846121c6565b50156108ad5760405160018152602090f35b6108e3906040519384937ff58cc8b5000000000000000000000000000000000000000000000000000000008552600485016119cb565b0390fd5b346101c55760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55761091e6101a2565b506109276101ca565b5060643567ffffffffffffffff81116101c557610948903690600401610231565b505060206040517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b346101c55760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760043560243567ffffffffffffffff81116101c5576020916109cc6109d2923690600401610231565b916119f0565b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b346101c55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760043567ffffffffffffffff81116101c5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126101c557610a7f60209160243560443591600401611ac5565b604051908152f35b7fffffffff000000000000000000000000000000000000000000000000000000008116036101c557565b346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576020610af6600435610af181610a87565b6123ab565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760043567ffffffffffffffff81116101c557610b5e903690600401610231565b9060243567ffffffffffffffff81116101c557610b82610b8c913690600401610231565b9190935a936124e0565b91610ba060608401516080850151906127a4565b610bab8285856121c6565b929015610bbd575061001c93506128fd565b836108e386926040519384937fa2b6d61b000000000000000000000000000000000000000000000000000000008552600485016119cb565b346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760043530330361036a578015610c84576020817f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf855604051908152a1005b7f4294d1270000000000000000000000000000000000000000000000000000000060005260046000fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c557600435610ce481610a87565b30330361036a5773ffffffffffffffffffffffffffffffffffffffff610d09826123ab565b1615610d6f5760407fffffffff000000000000000000000000000000000000000000000000000000007f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19216610d60600082613124565b815190815260006020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f1c3812cc000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b60009103126101c557565b346101c55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760207fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf854604051908152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101c5576004359067ffffffffffffffff82116101c5576107e691600401610231565b610e7736610e25565b9030330361036a57610e8d61001c925a926124e0565b90610e9782612bf0565b906128fd565b346101c55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c557610ed46101a2565b5060443567ffffffffffffffff81116101c557610ef5903690600401610231565b505060206040517f8943ec02000000000000000000000000000000000000000000000000000000008152f35b346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576020610a7f600435612c84565b346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576040610f99600435612cca565b73ffffffffffffffffffffffffffffffffffffffff8351921682526020820152f35b346101c557610fc936610e25565b9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001680156110a957330361107b57303b156101c55761104f9160009160405193849283927f6ea4457700000000000000000000000000000000000000000000000000000000845260048401611c66565b038183305af180156110765761106157005b80611070600061001c93610404565b80610dbf565b611a3c565b7f1d6ddbf4000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7fd13d78350000000000000000000000000000000000000000000000000000000060005260046000fd5b9181601f840112156101c55782359167ffffffffffffffff83116101c5576020808501948460051b0101116101c557565b919082519283825260005b84811061114e5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b8060208092840101518282860101520161110f565b346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760043567ffffffffffffffff81116101c5576111b56111bb9136906004016110d3565b90611d94565b60405160208101916020825280518093526040820192602060408260051b85010192019060005b8181106111ef5784840385f35b9091927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08582030186528351908151600681101561126157600192826020939284935260408061124c858501516060878601526060850190611104565b930151910152950196019101949190946111e2565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b346101c55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101c55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576020305473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346101c55760c061136c60008061136636610692565b91612dd1565b92611378839293613edb565b906040519586526020860152151560408501526060840152608083015260a0820152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576004356113d281610a87565b6113da6101ca565b9030330361036a5773ffffffffffffffffffffffffffffffffffffffff611400826123ab565b1661147a577f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19173ffffffffffffffffffffffffffffffffffffffff7fffffffff0000000000000000000000000000000000000000000000000000000060409316911661146d8183613124565b82519182526020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f5b4d6d6a000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b346101c55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576115016101a2565b5061150a6101ca565b5060443567ffffffffffffffff81116101c55761152b9036906004016110d3565b505060643567ffffffffffffffff81116101c55761154d9036906004016110d3565b505060843567ffffffffffffffff81116101c55761156f903690600401610231565b50506040517fbc197c81000000000000000000000000000000000000000000000000000000008152602090f35b346101c55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576115d36101a2565b506115dc6101ca565b5060843567ffffffffffffffff81116101c5576115fd903690600401610231565b505060206040517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b346101c55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576004356116636101ca565b604435916bffffffffffffffffffffffff83168093036101c55730330361036a578273ffffffffffffffffffffffffffffffffffffffff836116ee7febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1967fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606097881b1617856130df565b6040519384521660208301526040820152a1005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b906001820180921161173f57565b611702565b9190820180921161173f57565b9061175b82610481565b6117686040519182610404565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06117968294610481565b0190602036910137565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518210156117e35760209160051b010190565b6117a0565b9080602083519182815201916020808360051b8301019401926000915b83831061181457505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080611887604085015160e0604086015260e0850190611104565b936060810151606085015260808101511515608085015260a0810151151560a0850152015191015297019301930191939290611805565b906020808351928381520192019060005b8181106118dc5750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016118cf565b805160ff16825261052591602082810151151590820152610100611966611940604085015161012060408601526101208501906117e8565b606085015160608501526080850151608085015260a085015184820360a0860152611104565b9260c081015160c084015260e081015160e08401520151906101008184039101526118be565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b916119e26105259492604085526040850190611908565b92602081850391015261198c565b90611a0d92916119fe612350565b906003825260e08201526121c6565b5015611a37577f1626ba7e0000000000000000000000000000000000000000000000000000000090565b600090565b6040513d6000823e3d90fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101c5570180359067ffffffffffffffff82116101c5576020019181360383136101c557565b908160209103126101c5575161052581610a87565b60409061052594928152816020820152019161198c565b91909173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169182156110a95782330361107b5780611bf7575b506020915080610100611b27920190611a48565b92611b5f60405194859384937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611aae565b0381305afa908115611076577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091611bc8575b501603611bc357600090565b600190565b611bea915060203d602011611bf0575b611be28183610404565b810190611a99565b38611bb7565b503d611bd8565b823b156101c5576040517fb760faf900000000000000000000000000000000000000000000000000000000815230600482015292600091849160249183915af190811561107657602092611b2792611c51575b5090611b13565b806110706000611c6093610404565b38611c4a565b91602061052593818152019161198c565b90611c8182610481565b611c8e6040519182610404565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611cbc8294610481565b0160005b818110611ccc57505050565b60405190606082019180831067ffffffffffffffff8411176103e357602092604052600081526060838201526000604082015282828601015201611cc0565b91908110156117e35760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21813603018212156101c5570190565b610525903690610528565b9190820391821161173f57565b909260c092610525959460008452602084015260408301526060820152600060808201528160a08201520190611104565b90915a92600090611da481611c77565b94825b828110611db7575b505050509050565b611dca611dc5828589611d0b565b611d4b565b93611dd860a0860151151590565b806120bc575b6120b2575060009360608101518015908115806120a9575b6120385783611e086080850151151590565b15611fd957611eb390611ebb92935a94611e36875173ffffffffffffffffffffffffffffffffffffffff1690565b9115611fd357505a905b611eae89611e8260408a01518d6040519788947f4c4e814c00000000000000000000000000000000000000000000000000000000602087015260248601611d63565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101855284610404565b612d36565b915a90611d56565b6040611ec7858c6117cf565b5101525b15611f07575b5080611ee9611ee26001938a6117cf565b5160019052565b611ef1612d48565b6020611efd838b6117cf565b5101525b01611da7565b60c001805115611f9c576001815114611f635751600214611f285738611ed1565b939450505050611f42611f3b82856117cf565b5160039052565b6020611f56611f4f612d48565b92856117cf565b5101528038808080611daf565b509395809550611f829350611f7b92508491506117cf565b5160049052565b6020611f96611f8f612d48565b92846117cf565b51015290565b50925060018093611fb7611fb0828a6117cf565b5160029052565b611fbf612d48565b6020611fcb838b6117cf565b510152611f01565b90611e40565b50611eb361201e915a93612001865173ffffffffffffffffffffffffffffffffffffffff1690565b9160208701519160001461203257505a905b604087015192612d24565b604061202a858c6117cf565b510152611ecb565b90612013565b505050905085945060209250611f96915061206161205a8261207796986117cf565b5160059052565b6120a35a60405185810191825295869160200190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101865285610404565b846117cf565b50805a10611df6565b9350600190611f01565b508015611dde565b3d156120ef573d906120d582610499565b916120e36040519384610404565b82523d6000602084013e565b606090565b6004361080156121015750565b612137906000357fffffffff00000000000000000000000000000000000000000000000000000000811691612189575b506123ab565b73ffffffffffffffffffffffffffffffffffffffff81166121555750565b60008091604051368382378036810184815203915af46121736120c4565b901561218157602081519101f35b602081519101fd5b7fffffffff000000000000000000000000000000000000000000000000000000008092503660040360031b1b161638612131565b90156117e35790565b91907f80000000000000000000000000000000000000000000000000000000000000008061221d6121f785856121bd565b357fff000000000000000000000000000000000000000000000000000000000000001690565b161461227c57600091829161223194612dd1565b90509190919280821061224c57505061224990613edb565b91565b7ffd41fcba0000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b505061228790612bf0565b9061229182612cca565b4281111561231e575073ffffffffffffffffffffffffffffffffffffffff81168015159081612313575b506122c7575060019190565b7f8945c3130000000000000000000000000000000000000000000000000000000060005260048390523360245273ffffffffffffffffffffffffffffffffffffffff1660445260646000fd5b9050331415386122bb565b7ff95b6ab700000000000000000000000000000000000000000000000000000000600052600484905260245260446000fd5b60405190610120820182811067ffffffffffffffff8211176103e3576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b73ffffffffffffffffffffffffffffffffffffffff906040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a120845216604082015260408152612422606082610404565b519020541690565b9061243482610481565b6124416040519182610404565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061246f8294610481565b019060005b82811061248057505050565b60209060405161248f816103c7565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c082015282828501015201612474565b909392938483116101c55784116101c5578101920390565b9190916124eb612350565b6000815292600190823560f81c827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8183160161278d5750600060608701525b600761253a60ff831660011c90565b168061273c575b5060108181160361270757506001925b61255a8461242a565b92604087019384526000905b85821061257557505050505050565b8281013560f81c906001019091816001808516036126e557506125b93061259d8389516117cf565b519073ffffffffffffffffffffffffffffffffffffffff169052565b6002808416146126c5575b600480841614612677575b600880841614612644575b61262d61262760c0856126068a60806125fd8860108060019c9d161493516117cf565b51019015159052565b61261d8a60a06125fd8860208087161493516117cf565b1660061c60031690565b60ff1690565b60c061263a8389516117cf565b5101520190612566565b60019161262d906126279060c090878101359060200196906060612669878d516117cf565b5101529594505050506125da565b906126bf908481013560e81c906003016126b861269f6126978484611744565b838a8a6124c8565b919060406126ae888d516117cf565b51019236916104d3565b9052611744565b906125cf565b908381013590602001919060206126dd8389516117cf565b5101526125c4565b61270292508481013560601c90601401929061259d8389516117cf565b6125b9565b6020908116036127295761ffff918381013560f01c906002015b921692612551565b60ff918381013560f81c90600101612721565b612780919385929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290608087015238612541565b80850135606090811c90880152601401925061252b565b906127ae82612c84565b81810361283457509060017f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f8819201908160405160208101907f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e82528360408201526040815261281e606082610404565b51902055604080519182526020820192909252a1565b917f9b6514f40000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b61288060409295949395606083526060830190611908565b9460208201520152565b9261052596959260c09592855260208501526040840152606083015260808201528160a08201520190611104565b6105259392606092825260208201528160408201520190611104565b6128ea6105259492606083526060830190611908565b9260208201526040818403910152611104565b916000604082019384515190825b82811061291c575b50505050505050565b6129278188516117cf565b519361293660a0860151151590565b80612be8575b612ba8575060009360608101518015801580612b9f575b612b675784906129666080850151151590565b15612b21576129e09261298d855173ffffffffffffffffffffffffffffffffffffffff1690565b9115612b1b57505a905b611eae8b611e8260608d01516040890151908c8b604051998a967f4c4e814c0000000000000000000000000000000000000000000000000000000060208901526024880161288a565b15612a23575b506040805187815260208101839052600192917f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a91a15b0161290b565b60c001805115612ad2576001815114612a935751600214612a4457386129e6565b9493505050507fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b9250612a84612a78612d48565b604051938493846128b8565b0390a138808080808080612913565b50846108e3612aa0612d48565b6040519384937f7f6b0bb1000000000000000000000000000000000000000000000000000000008552600485016128d4565b509250600180937f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d612b13612b05612d48565b604051918291858c846128b8565b0390a1612a1d565b90612997565b8351612b5c93925073ffffffffffffffffffffffffffffffffffffffff1691602085015191600014612b6157505a905b604085015192612d24565b6129e0565b90612b51565b83886108e35a6040519384937f2139527400000000000000000000000000000000000000000000000000000000855260048501612868565b50815a10612953565b6040805188815260208101849052919550600192917f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b9181908101612b13565b50801561293c565b612c52612c7e612c10612c0a602085015115153090613163565b9361325e565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610404565b51902090565b60405160208101917f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8352604082015260408152612cc3606082610404565b5190205490565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e868352604082015260408152612d09606082610404565b51902054906bffffffffffffffffffffffff8260601c921690565b9160009391849360208451940192f190565b9160009291839260208351930191f490565b3d90604051916020818401016040528083526000602084013e565b60405190612d70826103e8565b60006020838281520152565b908160409103126101c557602060405191612d96836103e8565b805183520151602082015290565b60409073ffffffffffffffffffffffffffffffffffffffff61052594931681528160208201520190611104565b909491939291853560f81c60019093819087612deb612d63565b93604080891614806130c1575b612fc4575b505050600180861614612f9e5760028581161460208501526007600286901c1688820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101908096918196602016612e6d9060051c90565b612e7690611731565b8a820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101959098899a81612ec284612bf0565b988993612ece936124c8565b91612ed893613675565b9098612eec91600052602052604060002090565b90612eff91600052602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff16612f2891600052602052604060002090565b94815190868215159283612f93575b505081612f84575b50612f475750565b6040517fccbb534f000000000000000000000000000000000000000000000000000000008152815160048201526020909101516024820152604490fd5b90506020820151101538612f3f565b141591508638612f37565b86612fb99792949550612fb193986124c8565b939092613453565b919394909293929190565b8a81013560601c985060140192509087908a90849015612fe8575b50829150612dfd565b60038101955073ffffffffffffffffffffffffffffffffffffffff945081013560e81c9260409261306b9290916130369161302f9189906130298983611744565b926124c8565b36916104d3565b83519586809481937fccce3bc80000000000000000000000000000000000000000000000000000000083523060048401612da4565b0392165afa80156110765761308992600091613092575b5092611744565b86388981612fdf565b6130b4915060403d6040116130ba575b6130ac8183610404565b810190612d7c565b38613082565b503d6130a2565b5073ffffffffffffffffffffffffffffffffffffffff891615612df8565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e86835260408201526040815261311e606082610404565b51902055565b60405160208101917fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a120835260408201526040815261311e606082610404565b15613213576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a08152612c7e60c082610404565b469061316c565b805160209091019060005b8181106132325750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101613225565b61010081015160405161327981612c5260208201809561321a565b51902090613288815160ff1690565b60ff81168061330157505090612c7e6132a46040840151613f3e565b92612c5260806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b6001810361335f57505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46693810193845290810191909152606081019290925290612c7e8160808101612c52565b600281036133b557505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e460208201908152918101929092526060820192909252612c7e8160808101612c52565b600303613409575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46660208201908152918101929092526060820192909252612c7e8160808101612c52565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b90612880906040939695949660608452606084019161198c565b919492909260009560009560009560009560009561346f612350565b60028152937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9460005b8281106134c6575050505050505080511515806134b8575b612f475750565b5060208101518411156134b1565b600381019d50959b50939950919750929091906134ea908b9085013560e81c611744565b958a600084890361362e575089915b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c036135fe57509060016135338961353a9487896124c8565b908b612dd1565b9c939c9b929b9a919a99909a9b9d8e9d9e8f905b106135b85750928b8851146135af575b808b101561357d57508a60c08501528992959295949194939093613499565b7f37daf62b0000000000000000000000000000000000000000000000000000000060005260048b905260245260446000fd5b6000885261355e565b8d8f6108e36135c985858c8e6124c8565b9390926040519485947fb006aba000000000000000000000000000000000000000000000000000000000865260048601613439565b9798999a9160016136148b61361b94888a6124c8565b9086612dd1565b50929d919c909b929a9092918e8e61354e565b916134f9565b73ffffffffffffffffffffffffffffffffffffffff61052595936060938352166020820152816040820152019161198c565b908160209103126101c5575190565b9391909360009460009460005b818110613690575050505050565b8481013560f881901c9860019092019788979692909160fc1c988915613e74575060018914613e345760028914613c775760038914613c485760048914613bc75760068914613b275760058914613ad95760078914613a1257600889146139bc576009891461389357600a8914613730577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b90919293949596975060038916978815613882575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190810190816137a89187876124c8565b6040517f898bd921000000000000000000000000000000000000000000000000000000008152939184916137e0918a60048501611aae565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa918215611076576138239360009361384f575b5060ff909a168091019a61420a565b908015613849579061383d91600052602052604060002090565b955b9392919093613682565b5061383d565b60ff9193506138749060203d811161387b575b61386c8183610404565b810190613666565b9290613814565b503d613862565b8084013560f81c9850600101613745565b909192939495969750600389169788156139ab575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101908101908161390b9187876124c8565b6040517f13792a4a00000000000000000000000000000000000000000000000000000000815293918491613943918b600485016119cb565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa918215611076576139859360009361384f575060ff909a168091019a61420a565b9080156139a5579061399f91600052602052604060002090565b9561383f565b5061399f565b8084013560f81c98506001016138a8565b9850602087019750949593949293919290918201356139da866141b1565b81146139ea575b613985906141cb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506139e1565b975090919293949597600f16968715613ac7575b60206000613a38613aa59a9b86614079565b9c9092918a604051613a7b81612c528a82019485603c917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008252601c8201520190565b51902092604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa15611076576139859060ff6000519a16809101996140bc565b600189019883013560f81c9750613a26565b985060208701975094959394929391929091820135808514613aff575b61398590614172565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9850613af6565b989091929394959662ffffff9850613b49612627600c8416603f9060021c1690565b918215613bb3575b6003168015613ba2575b908190613b8690613b7e908781013560e81c906003019c168c01809c89896124c8565b90898b613675565b911115613b99575b906139859291614127565b99820199613b8e565b50600281019084013560f01c613b5b565b8482013560f81c9250600190910190613b51565b975097613c1d613c2a929394959697600f613c3293169085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b92908301809386866124c8565b908688613675565b9061399f92980198600052602052604060002090565b9850965093949293919290919080820135906020019680156139a5579061399f91600052602052604060002090565b90919293949596975060038916978815613e23575b8084013560601c99613ceb9160140190613cab9060021c600316612627565b9085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b90810190613d4f60208c613d0185858b8b6124c8565b919073ffffffffffffffffffffffffffffffffffffffff8c604051968795869485937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611aae565b0392165afa908115611076577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091613e05575b501603613dc157509060ff613985929916809101996140bc565b6108e3613dd28c93899389896124c8565b906040519485947fb2fed7ae00000000000000000000000000000000000000000000000000000000865260048601613634565b613e1d915060203d8111611bf057611be28183610404565b38613da7565b8381013560f81c9850600101613c8c565b98600f91929394959697985016968715613e63575b60148101976139859160ff9091169084013560601c6140bc565b8281013560f81c9750600101613e49565b98509091929394959698600f16978815613ec6575b5060206000613e9c613aa59a9b86614079565b9c90916040519384938c859094939260ff6060936080840197845216602083015260408201520152565b60018101995083013560f81c97506020613e89565b8015159081613ee8575090565b90507fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8541490565b805160209091019060005b818110613f285750505090565b8251845260209384019390920191600101613f1b565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0613f84613f6e83610481565b92613f7c6040519485610404565b808452610481565b0136602083013760005b83518110156140605780613fa4600192866117cf565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e0830152610100820152610100815261404c61012082610404565b51902061405982856117cf565b5201613f8e565b50909150604051612c7e81612c52602082018095613f10565b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff811161173f5791565b90604051907fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208301937f53657175656e6365207369676e65723a0a000000000000000000000000000000855260601b166031830152604582015260458152612c7e606582610404565b916040519160208301937f53657175656e6365206e657374656420636f6e6669673a0a0000000000000000855260388401526058830152607882015260788152612c7e609882610404565b60405160208101917f53657175656e636520737461746963206469676573743a0a00000000000000008352603882015260388152612c7e605882610404565b612c52612c7e612c10612c0a600060208601511515613163565b60405160208101917f53657175656e636520616e792061646472657373207375626469676573743a0a8352604082015260408152612c7e606082610404565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e63652073617069656e7420636f6e6669673a0a00000000000000865260601b166039840152604d830152606d820152606d8152612c7e608d8261040456fea2646970667358221220663e0e19a1f44876322f0807bffe0131225f2bf0bc3ca63984e33df77f73e01664736f6c634300081c0033","sourceMap":"406:2734:27:-:0;;;;;;;;;-1:-1:-1;406:2734:27;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;401:4:52;379:10;:27;375:75;;406:2734:27;401:4:52;1013:38:46;401:4:52;;1125:46:46;406:2734:27;;;;;;;1013:38:46;406:2734:27;375:75:52;423:20;-1:-1:-1;423:20:52;379:10;406:2734:27;;;-1:-1:-1;423:20:52;406:2734:27;;;;;;;;;;;2321:4:48;406:2734:27;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;406:2734:27;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;4682:22:50;;;;;;4668:48;4682:33;:22;;406:2734:27;4682:33:50;:::i;:::-;4668:48;:::i;:::-;4728:13;-1:-1:-1;4778:3:50;4747:22;;406:2734:27;;4743:33:50;;;;;4810:25;4791:44;4810:25;;;4714:1;4810:25;;:::i;:::-;406:2734:27;;;;;4810:25:50;4791:44;;;;:::i;:::-;406:2734:27;;;;;;4791:44:50;406:2734:27;4728:13:50;;4743:33;;;;;;4848:57;4895:10;4848:57;4862:22;;406:2734:27;4848:57:50;;:::i;:::-;4911:38;4974:41;;;;;:::i;:::-;5025:8;;5021:81;;406:2734:27;;4714:1:50;406:2734:27;;;;;5021:81:50;5050:45;406:2734:27;;;5050:45:50;;;;;;406:2734:27;5050:45:50;;;:::i;:::-;;;;406:2734:27;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;3351:31:45;406:2734:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;1358:19:45;406:2734:27;;;;;:::i;:::-;1358:19:45;:::i;:::-;406:2734:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1572:33:43;406:2734:27;;;;;;:::i;:::-;1524:9:43;;;;1572:33;;:::i;:::-;1626:13;1641;1626;;;406:2734:27;1641:13:43;;;406:2734:27;1641:13:43;;:::i;:::-;1694:40;;;;;:::i;:::-;1745:8;;;1741:73;;1850:7;;;;;:::i;1741:73::-;406:2734:27;1770:37:43;406:2734:27;;;;1770:37:43;;;;;;406:2734:27;1770:37:43;;;:::i;406:2734:27:-;;;;;;;;;;;;;401:4:52;379:10;:27;375:75;;1242:24:54;;1238:69;;406:2734:27;260:41:49;1371:28:54;260:41:49;509:66:54;260:41:49;406:2734:27;;;;;1371:28:54;406:2734:27;1238:69:54;1283:17;-1:-1:-1;1283:17:54;406:2734:27;-1:-1:-1;1283:17:54;406:2734:27;;;;;;;;;;;;;:::i;:::-;401:4:52;379:10;:27;375:75;;406:2734:27;2005:19:45;;;:::i;:::-;406:2734:27;2005:33:45;2001:87;;406:2734:27;;2492:37:45;406:2734:27;;2439:41:45;406:2734:27;2439:41:45;;:::i;:::-;406:2734:27;;;;;;;;;;2492:37:45;406:2734:27;2001:87:45;406:2734:27;2055:26:45;;-1:-1:-1;2055:26:45;406:2734:27;;;;-1:-1:-1;2055:26:45;406:2734:27;;;;;;;:::o;:::-;;;;;;;;;;;;509:66:54;394:41:49;406:2734:27;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;401:4:52;;379:10;:27;375:75;;2142:33:43;2255:7;2094:9;;2142:33;;:::i;:::-;2198:21;;;;:::i;:::-;2255:7;;:::i;406:2734:27:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;3526:28:45;406:2734:27;;;;;;;;;;;;;;;806:50:47;406:2734:27;;806:50:47;:::i;406:2734:27:-;;;;;;;;;;;;2500:26:50;406:2734:27;;2500:26:50;:::i;:::-;406:2734:27;;;;;;;;;;;;;;;;;;;:::i;:::-;1358:10:44;406:2734:27;1358:10:44;406:2734:27;1358:24:44;;1354:69;;1433:10;:24;1429:81;;1516:4;:26;;;;;406:2734:27;1380:1:44;406:2734:27;;;1516:26:44;;;;;406:2734:27;1516:26:44;;406:2734:27;1516:26:44;;;:::i;:::-;;:4;;;:26;;;;;;;;406:2734:27;1516:26:44;;;1380:1;1516:26;;;:::i;:::-;;;:::i;:::-;;:::i;1429:81::-;1474:29;1380:1;1474:29;1433:10;406:2734:27;;;1380:1:44;1474:29;1354:69;1399:17;1380:1;1399:17;406:2734:27;1380:1:44;1399:17;406:2734:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;406:2734:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;406:2734:27;;;;;-1:-1:-1;406:2734:27;;;;;;;;;;;;;;;;418:35:44;406:2734:27;;;;;;;;;;;;;;;;1252:47:46;;406:2734:27;;;;;;;;;;;;;5879:56:50;-1:-1:-1;406:2734:27;;;;:::i;:::-;5879:56:50;;:::i;:::-;715:31:29;;;;;;:::i;:::-;406:2734:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;401:4:52;;379:10;:27;375:75;;406:2734:27;1667:19:45;;;:::i;:::-;406:2734:27;1663:88:45;;2492:37;406:2734:27;;;;;;;;2439:41:45;;;;:::i;:::-;406:2734:27;;;;;;;;;2492:37:45;406:2734:27;1663:88:45;406:2734:27;1717:27:45;;-1:-1:-1;1717:27:45;406:2734:27;;;;-1:-1:-1;1717:27:45;406:2734:27;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;406:2734:27;;2946:37:45;406:2734:27;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;2696:32:45;406:2734:27;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;401:4:52;379:10;:27;375:75;;406:2734:27;;;2043:85:50;2998:47;406:2734:27;;;;;;;2051:76:50;2043:85;;:::i;:::-;406:2734:27;;;;;;;;;;;;;;2998:47:50;406:2734:27;;;;;;;;;;;;;4714:1:50;406:2734:27;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;406:2734:27;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;406:2734:27;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;406:2734:27;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;5170:322:50:-;;5358:40;5170:322;;406:2734:27;;:::i;:::-;2556:4:48;;;;4826:15;;;406:2734:27;5358:40:50;:::i;:::-;5408:8;;5404:45;;406:2734:27;5170:322:50;:::o;5404:45::-;406:2734:27;5426:16:50;:::o;406:2734:27:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;614:665:44:-;;;;406:2734:27;792:10:44;406:2734:27;792:24:44;;;788:69;;867:10;;:24;863:81;;1006:24;1002:123;;614:665;1169:16;1135:51;1169:16;;;;;;;;;:::i;:::-;406:2734:27;1135:51:44;406:2734:27;;1135:51:44;;;;;406:2734:27;1135:51:44;;;;;;:::i;:::-;;:4;;:51;;;;;;;406:2734:27;1135:51:44;406:2734:27;1135:51:44;406:2734:27;1135:51:44;;;614:665;406:2734:27;;1135:80:44;1131:129;;406:2734:27;614:665:44;:::o;1131:129::-;412:1;1225:28;:::o;1135:51::-;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;1002:123;1040:78;;;;;406:2734:27;;;1040:78:44;;1112:4;1040:78;;;406:2734:27;;-1:-1:-1;;406:2734:27;;;;;;1040:78:44;;;;;;;1135:51;1040:78;1169:16;1040:78;;;1002:123;;;;;1040:78;;;406:2734:27;1040:78:44;;;:::i;:::-;;;;406:2734:27;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;-1:-1:-1;406:2734:27;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;406:2734:27;;;;;;;-1:-1:-1;406:2734:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;1072:5;406:2734;;;;;;;;;;;;;;1072:5;406:2734;;;;;;;;;;;;:::i;911:2226::-;;;1040:9;1055:22;1072:5;1132:22;;;;:::i;:::-;1165:13;;1180:12;;;;;;1160:1973;911:2226;;;;;;:::o;1194:3::-;1207:36;1234:9;;;;;:::i;:::-;1207:36;:::i;:::-;1310:17;406:2734;1310:17;;;406:2734;;;;;;1310:31;;;1194:3;1306:64;;1496:17;1072:5;1541:13;;;;406:2734;1566:13;;;;;:37;;;1194:3;1562:176;;1770:17;406:2734;1770:17;;;406:2734;;;;;;1770:17;;;1848:256;1817:9;2135:19;1817:9;;;406:2734;;;;;;;;;1900:36;;;;1916:9;;1900:36;;1948:146;2073:9;1948:146;2073:9;;;;406:2734;2073:9;406:2734;1948:146;;;1984:55;3085:17;1948:146;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;1848:256;:::i;:::-;2145:9;;2135:19;;:::i;:::-;2073:9;2114:10;;;;:::i;:::-;;:18;406:2734;1766:604;2382:8;2378:655;;1766:604;3041:10;;:36;:10;406:2734;3041:10;;;:::i;:::-;;406:2734;;;;3041:36;3105:21;;:::i;:::-;3085:17;:10;;;;:::i;:::-;;:17;:41;1165:13;406:2734;1165:13;;2378:655;2406:20;;406:2734;;2406:53;2402:216;;406:2734;;;2632:56;2628:199;;406:2734;2867:4:48;2841:55:27;2837:188;;2378:655;;;2837:188;2910:10;;;;;;:34;:10;;;;:::i;:::-;;2930:14;406:2734;;;2910:34;3085:17;2956:10;2976:21;;:::i;:::-;2956:10;;;:::i;:::-;;:17;:41;3009:5;;;;;;;2628:199;2702:10;;;;;;:35;:10;;;;;;;;;:::i;:::-;;2722:15;406:2734;;;2702:35;3085:17;2749:10;2769:21;;:::i;:::-;2749:10;;;:::i;:::-;;:17;:41;2802:14;:::o;2402:216::-;2473:16;;;406:2734;2473:16;2501:10;:33;:10;;;;:::i;:::-;;2521:13;406:2734;;;2501:33;2566:21;;:::i;:::-;3085:17;2546:10;;;;:::i;:::-;;:17;:41;2599:8;;1900:36;;;;1766:604;2197:9;2228:83;2342:19;2197:9;;406:2734;;;;;;;;;2251:10;3085:17;2251:10;;406:2734;2263:36;;;;;2279:9;;2263:36;;2301:9;;;;2228:83;;:::i;2342:19::-;2301:9;2321:10;;;;:::i;:::-;;:18;406:2734;1766:604;;2263:36;;;;1562:176;1615:10;;;;;;;;3085:17;1615:10;;1664;1615;;:39;:10;;1684:21;1615:10;;;:::i;:::-;;1635:19;406:2734;;;1615:39;1684:21;1695:9;406:2734;;1684:21;;;406:2734;;;;;;;;;;1684:21;;;;;;;;;:::i;:::-;1664:10;;:::i;1566:37::-;1583:9;;;:20;1566:37;;1306:64;1353:8;;406:2734;1353:8;;;1310:31;1331:10;;;1310:31;;406:2734;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;406:2734:27;;;;:::o;:::-;;;:::o;3638:392:45:-;3695:1;3676:8;:20;;;3672:354;;3638:392;:::o;3672:354::-;3723:27;3733:16;3676:8;406:2734:27;;;;;;;3672:354:45;3723:27;;:::i;:::-;406:2734:27;;;3758:262:45;;3638:392;:::o;3758:262::-;3676:8;406:2734:27;;;;3676:8:45;406:2734:27;;;3676:8:45;;406:2734:27;;;;;3832:29:45;;;;;;:::i;:::-;3871:141;;;;;;;;;;;;;;;;;406:2734:27;;3676:8:45;;;;3695:1;406:2734:27;;;;;;;;;;;;;;;:::o;3301:1109:50:-;;;406:2734:27;3555:13:50;;;;;;:::i;:::-;;406:2734:27;;;;3555:13:50;3579:20;:28;3575:429;;3566:1;4188:56;;;;;;:::i;:::-;4146:98;;;;;4282:18;;;;4278:87;;715:31:29;;;;;:::i;:::-;3301:1109:50;:::o;4278:87::-;4317:41;3566:1;4317:41;3772:48;406:2734:27;;;;1380:1:44;1474:29;3575:429:50;3626:15;;;;;:::i;:::-;3686:27;;;;:::i;:::-;3738:15;3725:28;;;3721:108;;406:2734:27;;;;3841:18:50;;;:40;;;;3575:429;3837:131;;;3976:21;3984:4;3976:21;;:::o;3837:131::-;3900:59;3566:1;3900:59;;406:2734:27;;;3942:10:50;406:2734:27;;;;;;;1380:1:44;1474:29;3841:40:50;3871:10;;;3863:18;;3841:40;;;3721:108;3772:48;3566:1;3772:48;;406:2734:27;;;;;;1380:1:44;1474:29;406:2734:27;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;406:2734:27;;-1:-1:-1;406:2734:27;;;;;;;;;-1:-1:-1;406:2734:27;;;;-1:-1:-1;406:2734:27;;;;;;;;;-1:-1:-1;406:2734:27;;;;-1:-1:-1;406:2734:27;;;;;;:::o;2134:172:45:-;406:2734:27;2134:172:45;406:2734:27;;;753:25:49;;;;:66:45;406:2734:27;;;;;;;;753:25:49;;;;;;:::i;:::-;406:2734:27;743:36:49;;785:40;406:2734:27;2134:172:45;:::o;2321:4:48:-;;406:2734:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;2321:4:48;;;;;:::i;:::-;;;-1:-1:-1;2321:4:48;;;;;;;;;:::o;:::-;;406:2734:27;;;;;;:::i;:::-;-1:-1:-1;2321:4:48;;-1:-1:-1;2321:4:48;;;;406:2734:27;;2321:4:48;;;-1:-1:-1;406:2734:27;2321:4:48;;;-1:-1:-1;2321:4:48;;;;-1:-1:-1;2321:4:48;;;;-1:-1:-1;2321:4:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4859:2701::-;;;;406:2734:27;;:::i;:::-;;2556:4:48;;;566:109:68;;;;;;;5163:25:48;:17;;;:25;5176:4;;5198:14;2657:4;5198:14;;;406:2734:27;5159:140:48;5396:4;5377:15;406:2734:27;;;;2321:4:48;;;5377:15;5376:24;5411:13;5407:122;;5159:140;-1:-1:-1;5635:4:48;5622:17;;;:25;5635:4;;5657:12;5176:4;5618:320;;5983:20;;;:::i;:::-;5966:14;;;;:37;;;2657:4;6010:1546;6030:12;;;;;;4859:2701;;;;;;:::o;6044:3::-;798:135:68;;;;;;;;;6076:44:48;;;5176:4;6227:12;;;:20;5176:4;;6314;6283:36;6314:4;6283:17;:14;;;:17;:::i;:::-;;406:2734:27;;;;;;6283:36:48;6529:4;6521:12;;;:20;6517:109;;6223:226;6704:4;6696:12;;;:20;6692:287;;6223:226;7065:4;7057:12;;;:20;7053:112;;6223:226;7494:55;7530:19;7539:4;7275:12;7241:55;7275:12;7241:30;:17;7275:12;5635:4;7275:12;5176:4;7275:12;;;:20;7241:14;;:17;:::i;:::-;;:30;2321:4;406:2734:27;;2321:4:48;;;7241:55;7364;7398:12;7364:30;:17;7398:12;7406:4;7398:12;;;:20;7364:14;;:17;:::i;:55::-;7531:12;406:2734:27;2321:4:48;;;;;7530:19;406:2734:27;;;;7494:55:48;7539:4;7494:17;:14;;;:17;:::i;:::-;;:33;406:2734:27;;6015:13:48;;;7053:112;5176:4;;7494:55;;7530:19;;7539:4;;2102:103:68;;;;;;;7090:14:48;;:26;:17;:14;;;:17;:::i;:::-;;:26;406:2734:27;7053:112:48;;;;;;;;6692:287;1201:256:68;6947:23:48;;1318:135:68;;;;;;;;;2321:4:48;6899:38;6914:22;1318:135:68;;6914:22:48;:::i;:::-;6899:38;;;;:::i;:::-;6874:14;;5966;6874:17;:14;;;:17;:::i;:::-;;:22;2321:4;;;;:::i;:::-;6874:63;;6947:23;:::i;:::-;6692:287;;;6517:109;1983:226:68;2102:103;;;;;;;6554:14:48;;7406:4;6554:17;:14;;;:17;:::i;:::-;;:23;406:2734:27;6517:109:48;;6223:226;6379:61;;-1:-1:-1;1840:135:68;;;;;;;;;6380:14:48;;:17;:14;;;:17;:::i;6379:61::-;6223:226;;5618:320;5779:4;5766:17;;;:25;5779:4;;2321;;1058:135:68;;;;;;;;;941:256;5803:48:48;2321:4;5762:170;5618:320;;5762:170;406:2734:27;;798:135:68;;;;;;;;;683:254;;5407:122:48;2213:380:68;;;;;;;;2363:226;;;;;;;;;;;;;;;;;;;2213:380;;;5458:64:48;;5459:14;;;406:2734:27;5407:122:48;;;5159:140;1840:135:68;;;;;;;;5238:14:48;;;406:2734:27;1840:135:68;;;-1:-1:-1;5159:140:48;;1011:362:47;;806:50;;;:::i;:::-;1131:22;;;1127:88;;406:2734:27;;1267:1:47;1319:29;406:2734:27;;;;;;552:25:49;;;;543:66:47;406:2734:27;;;;;;;;552:25:49;;;;;;:::i;:::-;406:2734:27;542:36:49;;584:40;406:2734:27;;;;;;;;;;;;;1319:29:47;1011:362::o;1127:88::-;1170:38;;-1:-1:-1;1170:38:47;;406:2734:27;;;;;;-1:-1:-1;1170:38:47;406:2734:27;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;2272:1859:43:-;;2393:5;2424:14;;;;;;406:2734:27;2456:13:43;;2471:12;;;;;;2451:1676;2272:1859;;;;;;;:::o;2485:3::-;2525:17;:14;;;:17;:::i;:::-;;2609;406:2734:27;2609:17:43;;;406:2734:27;;;;;;2609:31:43;;;2485:3;2605:102;;2833:17;2393:5;2878:13;;;;406:2734:27;2903:13:43;;;;:37;;;2485:3;2899:105;;3012:12;;406:2734:27;3036:17:43;;;406:2734:27;;;;;;3036:17:43;;;3077:348;406:2734:27;;;;;;;;;3129:36:43;;;;3145:9;;3129:36;;3177:238;3366:14;3177:238;2878:13;3366:14;;406:2734:27;2424:14:43;3394:9;;;406:2734:27;;;2424:14:43;406:2734:27;3177:238:43;;;3213:55;3177:238;;;;;;;;:::i;3077:348::-;3566:8;3562:520;;3032:522;-1:-1:-1;2424:14:43;406:2734:27;;;;;;;;;;;;;;4095:25:43;;;2456:13;406:2734:27;2456:13:43;;3562:520;3590:20;;406:2734:27;;3590:53:43;3586:180;;406:2734:27;;;3780:56:43;3776:136;;406:2734:27;2867:4:48;3926:55:43;3922:152;;3562:520;;;3922:152;4024:21;;;;;;4000:46;4024:21;;4000:46;4024:21;;:::i;:::-;2424:14;406:2734:27;4000:46:43;;;;;:::i;:::-;;;;4058:5;;;;;;;;;3776:136;3879:21;;3857:44;3879:21;;:::i;:::-;2424:14;406:2734:27;3857:44:43;;;;;;;;;;:::i;3586:180::-;3657:16;;;406:2734:27;3657:16:43;3713:21;3690:45;;3713:21;;:::i;:::-;2424:14;406:2734:27;3690:45:43;;;;;;;:::i;:::-;;;;3747:8;;3129:36;;;;3032:522;406:2734:27;;3462:83:43;;406:2734:27;-1:-1:-1;406:2734:27;;3485:10:43;;;;406:2734:27;3497:36:43;;;;;3513:9;;3497:36;;2424:14;3535:9;;;3462:83;;:::i;:::-;3032:522;;3497:36;;;;2899:105;2985:9;;2959:36;2985:9;2424:14;406:2734:27;2959:36:43;;;;;;;;;;:::i;2903:37::-;2920:9;;;:20;2903:37;;2605:102;2424:14;406:2734:27;;;;;;;;;;;;;-1:-1:-1;406:2734:27;;;2657:23:43;;406:2734:27;;;;2657:23:43;406:2734:27;2609:31:43;2630:10;;;2609:31;;9564:274:48;9784:48;;9743:18;9666:50;9682:18;;;406:2734:27;;;9710:4:48;9666:50;;:::i;:::-;9743:18;;:::i;:::-;406:2734:27;;9784:48:48;;;9682:18;9784:48;;;;406:2734:27;;;;;;;;;;;;;;;;;;9784:48:48;;;;;;;;;:::i;:::-;406:2734:27;9774:59:48;;9564:274;:::o;632:197:49:-;406:2734:27;;753:25:49;;;;543:66:47;406:2734:27;;;;;;;753:25:49;;;;;;:::i;:::-;406:2734:27;743:36:49;;785:40;632:197;:::o;1637:245:50:-;406:2734:27;;753:25:49;;;;834:66:50;406:2734:27;;;;;;;753:25:49;;;;;;:::i;:::-;406:2734:27;743:36:49;;785:40;2321:4:48;406:2734:27;2321:4:48;753:25:49;2321:4:48;406:2734:27;;1637:245:50;:::o;1431:196:69:-;;1538:85;1431:196;;;;1538:85;;;;;;;1431:196;:::o;1997:192::-;;2098:87;1997:192;;;;2098:87;;;;;;;1997:192;:::o;758:271::-;825:200;;;;;;;;;;;;;;;;;;;;758:271::o;406:2734:27:-;;;;;;;:::i;:::-;-1:-1:-1;406:2734:27;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;2963:3141:51:-;;;;;;;566:109:68;;;;;3268:69:51;;;3762:24;406:2734:27;;;:::i;:::-;3963:20:51;3979:4;3963:20;;;:28;:59;;;2963:3141;3959:742;;2963:3141;4774:20;;;4790:4;4774:20;;;:28;4770:126;;5004:4;4988:20;;;:28;4967:18;;;2321:4:48;;406:2734:27;2321:4:48;;;;2363:226:68;;;;;;;;;;;;;;;;;;;;;;;;;5158:67:51;;;;;5330:20;4967:18;5330:20;5329:27;;406:2734:27;2321:4:48;;;5329:27:51;5328:33;;;:::i;:::-;2363:226:68;;;;;;;;;;;;;;;;;;;;;;;;;5369:65:51;;;;5480:15;;;;;:::i;:::-;5555:19;;;;;;:::i;:::-;5523:52;;;;:::i;:::-;5501:74;5594:50;;;545:85:69;;;;;;;461:173;;5594:50:51;5662:51;;;545:85:69;;;;;;;461:173;;5662:51:51;406:2734:27;;;5731:72:51;;545:85:69;;;;;;;461:173;;5731:72:51;406:2734:27;;;5948:32:51;;;;;:67;;;;2963:3141;5948:104;;;;;2963:3141;5944:156;;;2963:3141;:::o;5944:156::-;3979:4;406:2734:27;6069:24:51;;;406:2734:27;;6069:24:51;;;406:2734:27;;;;;;;;;;;;5050:45:50;5948:104:51;6033:19;;4967:18;6033:19;;406:2734:27;-1:-1:-1;6019:33:51;5948:104;;;:67;5984:31;;;-1:-1:-1;5948:67:51;;;;4770:126;4869:19;4819:70;4869:19;;;;;;;;;:::i;:::-;4819:70;;;;:::i;:::-;4812:77;;;;;;;;;:::o;3959:742::-;1840:135:68;;;;;;;-1:-1:-1;1840:135:68;;;-1:-1:-1;3162:307:68;1840:135;;;;;;4197:20:51;4193:502;;3959:742;;;;;;;4193:502;1318:135:68;;;;-1:-1:-1;406:2734:27;;-1:-1:-1;1318:135:68;;;;;;3979:4:51;;4572:73;;3979:4;;2321::48;;4471:48:51;;1318:135:68;;4489:29:51;1318:135:68;;4489:29:51;:::i;:::-;4471:48;;:::i;:::-;2321:4:48;;;:::i;:::-;406:2734:27;;4572:73:51;;;;;;406:2734:27;4572:73:51;;4621:4;4572:73;;;;:::i;:::-;;406:2734:27;;4572:73:51;;;;;;4656:30;4572:73;-1:-1:-1;4572:73:51;;;4193:502;4561:84;4656:30;;:::i;:::-;4193:502;;;;;;4572:73;;;;3979:4;4572:73;3979:4;4572:73;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;3963:59;406:2734:27;;;;3995:27:51;3963:59;;443:185:49;406:2734:27;;552:25:49;;;;834:66:50;406:2734:27;;;;;;;552:25:49;;;;;;:::i;:::-;406:2734:27;542:36:49;;584:40;443:185::o;:::-;406:2734:27;;552:25:49;;;;753:66:45;406:2734:27;;;;;;;552:25:49;;;;;;:::i;939:351:48:-;1206:48;;;-1:-1:-1;1206:48:48;;406:2734:27;;;1077:202:48;;;;406:2734:27;539:66:48;406:2734:27;;709:66:48;406:2734:27;868:66:48;;406:2734:27;868:66:48;;;;406:2734:27;868:66:48;;;406:2734:27;;868:66:48;;;406:2734:27;868:66:48;1077:202;;;;;;:::i;1206:48::-;1240:13;1206:48;;;406:2734:27;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;8278:1282:48;8416:22;;;;406:2734:27;;8399:40:48;;406:2734:27;8399:40:48;;;406:2734:27;;;:::i;8399:40:48:-;406:2734:27;8389:51:48;;406:2734:27;;;;;;;;;;;;8451:34:48;406:2734:27;;8525:14:48;;;8712:82;8515:25;406:2734:27;8525:14:48;;;8515:25;:::i;:::-;8750:14;8712:82;8766:14;8750;;;406:2734:27;8766:14:48;;406:2734:27;;;;8712:82:48;;;8399:40;8712:82;;;;1799:66;;;;;;;;;406:2734:27;1799:66:48;406:2734:27;;1799:66:48;;;406:2734:27;1799:66:48;;;406:2734:27;1799:66:48;;;406:2734:27;1799:66:48;406:2734:27;1799:66:48;8447:1109;2763:4;8812:29;;2763:4;;-1:-1:-1;;8998:16:48;;;406:2734:27;;8399:40:48;406:2734:27;;;8988:27:48;406:2734:27;;;1979:66:48;8959:70;;;406:2734:27;;;1979:66:48;;;406:2734:27;;;;1979:66:48;;;406:2734:27;;;;8959:70:48;;406:2734:27;1979:66:48;;;8959:70;1979:66;8808:748;2867:4;9047:35;;2867:4;;-1:-1:-1;;9216:18:48;;406:2734:27;;;;2174:66:48;8399:40;9181:67;;406:2734:27;;;1979:66:48;;;406:2734:27;;;;1979:66:48;;;406:2734:27;;;;9181:67:48;406:2734:27;1979:66:48;;;9181:67;1979:66;9043:513;2556:4;9266:28;2556:4;;-1:-1:-1;9443:15:48;;406:2734:27;;;;1979:66:48;8399:40;9414:58;;406:2734:27;;;1979:66:48;;;406:2734:27;;;;1979:66:48;;;406:2734:27;;;;9414:58:48;406:2734:27;1979:66:48;;;9414:58;1979:66;9262:294;9523:26;406:2734:27;9523:26:48;406:2734:27;;9523:26:48;406:2734:27;2482:4:48;1380:1:44;1474:29;406:2734:27;;;;;;;;;;;;;;;;;;:::i;6108:1663:51:-;;;;;;406:2734:27;6304:14:51;406:2734:27;6320:17:51;406:2734:27;6339:18:51;406:2734:27;6359:14:51;406:2734:27;;;;:::i;:::-;;2556:4:48;;6423:47:51;6522:17;;406:2734:27;6553:26:51;;;;;;406:2734:27;;;;;;;;;7647:33:51;;:71;;;6546:1091;7643:124;;6108:1663;:::o;7647:71::-;7698:20;;;;406:2734:27;7684:34:51;;;7647:71;;6546:1091;1318:135:68;;;;-1:-1:-1;1201:256:68;;-1:-1:-1;1201:256:68;;-1:-1:-1;1201:256:68;;-1:-1:-1;1201:256:68;;;;6717:16:51;;1318:135:68;;;;;;;6717:16:51;:::i;:::-;6773:57;;406:2734:27;6773:28:51;;;;;:57;;;;6522:17;6843:35;;6522:17;;6971:26;;6999:4;6971:26;;6953:65;6971:26;;;;:::i;:::-;6953:65;;;:::i;:::-;6890:128;;;;;;;;;;;;;;;;6839:339;;;;7190:18;7186:122;;7315:16;406:2734:27;;;;7344:32:51;7340:89;;6839:339;7441:28;;;;7437:115;;7560:23;;;;;406:2734:27;7603:27:51;6546:1091;;;;;;;;;;;;7437:115;7488:55;406:2734:27;7488:55:51;3772:48:50;406:2734:27;;;;;;1380:1:44;1474:29;7340:89:51;406:2734:27;;;7340:89:51;;7186:122;7253:26;;7227:72;7253:26;;;;;;:::i;:::-;406:2734:27;;;;;7227:72:51;;;;;;;;;;:::i;6839:339::-;7122:26;;;;;7150:4;7122:26;;7099:70;7122:26;;;;:::i;:::-;7099:70;;;:::i;:::-;-1:-1:-1;7043:126:51;;;;;;;;;;;;;6839:339;;6773:57;;;;842:1;406:2734:27;842:1:51;;;;;406:2734:27;;;842:1:51;;;406:2734:27;842:1:51;;;;;;;;:::i;1206:::-;;;;;;;;;406:2734:27;1206:1:51;:::o;7775:11084::-;;;;;406:2734:27;7930:12:51;406:2734:27;7968:14:51;406:2734:27;8044:26:51;;;;;;7775:11084;;;;;:::o;8037:10812::-;798:135:68;;;;;;;;;;;;;;;;683:254;;;;2321:4:48;;8454:27:51;;;8450:864;;9374:20;412:1:44;9374:20:51;;9370:676;;842:1;10096:30;;10092:1383;;885:1;11512:17;;11508:279;;8405:1;11826:19;;11822:656;;1023:1;12517:19;;12513:1278;;978:1;13833:22;;13829:518;;1080:1;14398:31;;14394:933;;1150:1;15464:44;;15460:617;;1206:1;16127:30;;16123:1308;;1270:2;17489:38;;17485:1312;;18814:26;406:2734:27;18814:26:51;8405:1;406:2734:27;;;;1380:1:44;1474:29;17485:1312:51;17799:16;;;;;;;;;885:1;17799:16;;17832:15;;;17828:99;;17485:1312;1840:135:68;;;;;;;;;18081:16:51;;406:2734:27;2321:4:48;;;406:2734:27;;2363:226:68;;;;;;;;;;;;;;;;;;;;;;;;;406:2734:27;;;18467:26:51;;;;;;;:::i;:::-;406:2734:27;;;18405:89:51;;406:2734:27;;;;18405:89:51;;406:2734:27;8405:1:51;18405:89;;;:::i;:::-;;406:2734:27;;;;18405:89:51;;;;;;;;;;;;18637:51;18405:89;406:2734:27;18405:89:51;;;17485:1312;18506:16;406:2734:27;18506:16:51;406:2734:27;;;;;18637:51:51;;:::i;:::-;18707:59;:18;;;;18728:31;;;545:85:69;;;;;;;461:173;;18728:31:51;18778:8;8037:10812;;;;;;;;18707:59;;;;18405:89;406:2734:27;18405:89:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;17828:99;798:135:68;;;;;;;-1:-1:-1;798:135:68;;17828:99:51;;16123:1308;16429:16;;;;;;;;;885:1;16429:16;;16462:15;;;16458:99;;16123:1308;1840:135:68;;;;;;;;;16749:16:51;;406:2734:27;2321:4:48;;;406:2734:27;;2363:226:68;;;;;;;;;;;;;;;;;;;;;;;;;406:2734:27;;;17100:26:51;;;;;;;:::i;:::-;406:2734:27;;;17051:76:51;;406:2734:27;;;;17051:76:51;;406:2734:27;8405:1:51;17051:76;;;:::i;:::-;;406:2734:27;;;;17051:76:51;;;;;;;;;;;;17271:51;17051:76;406:2734:27;17051:76:51;;;17139:16;406:2734:27;17139:16:51;406:2734:27;;;;;17271:51:51;;:::i;:::-;17341:59;:18;;;;17362:31;;;545:85:69;;;;;;;461:173;;17362:31:51;17412:8;;;17341:59;;;;16458:99;798:135:68;;;;;;;-1:-1:-1;798:135:68;;16458:99:51;;15460:617;2926:232:68;-1:-1:-1;2102:103:68;;;;-1:-1:-1;2926:232:68;;;;;;;;;;2102:103;;;15775:28:51;2926:232:68;15775:28:51;:::i;:::-;15819:29;;15815:88;;15460:617;15930:38;;;:::i;15815:88::-;15873:17;;-1:-1:-1;15815:88:51;;14394:933;14742:16;;;;;;;;;14754:4;14742:16;14775:15;;;14771:99;;14394:933;15044:61;406:2734:27;3511:494:68;15024:92:51;3511:494:68;;;;:::i;:::-;14943:53:51;;;;406:2734:27;;;15044:61:51;;;;;;;;1080:1;;;;;;;;406:2734:27;1080:1:51;;;15044:61;406:2734:27;15034:72:51;;406:2734:27;;;15024:92:51;;;;740:1;;;;406:2734:27;740:1:51;;;;;406:2734:27;;;;740:1:51;;;406:2734:27;740:1:51;;;406:2734:27;740:1:51;406:2734:27;740:1:51;15024:92;;;;;;412:1:44;15024:92:51;;;;;15176:42;15024:92;406:2734:27;;15024:92:51;406:2734:27;;;;;15176:42:51;;:::i;14771:99::-;798:135:68;;;;;;;;;;-1:-1:-1;14771:99:51;;13829:518;2926:232:68;-1:-1:-1;2102:103:68;;;;-1:-1:-1;2926:232:68;;;;;;;;;;2102:103;;;14099:20:51;;;14095:79;;13829:518;14201:37;;;:::i;14095:79::-;14144:17;;-1:-1:-1;14095:79:51;;12513:1278;12882:16;;;;;;;;2321:4:48;12882:16:51;;12851:53;12876:28;12894:4;12882:16;;2321:4:48;;406:2734:27;2321:4:48;;;;12851:53:51;12920:19;;;12916:107;;12513:1278;885:1;13069:16;13102:22;;13098:114;;12513:1278;1201:256:68;;;13399:60:51;;13432:26;;1318:135:68;;;;;;;;;2321:4:48;;406:2734:27;;13432:26:51;;;;;:::i;:::-;13399:60;;;;:::i;:::-;13471:16;-1:-1:-1;13504:35:51;13500:92;;12513:1278;13619:63;;;;;:::i;13500:92::-;406:2734:27;;;;13500:92:51;;13098:114;-1:-1:-1;1058:135:68;;;;;;;;;13098:114:51;;12916:107;798:135:68;;;;;;;-1:-1:-1;798:135:68;;;;;12916:107:51;;11822:656;12023:16;;;2213:380:68;12312:26:51;12023:16;;;;;;12035:4;12279:60;12023:16;;2213:380:68;;;;;;2363:226;;;;;;;;;;;;;;;;;;;2213:380;;;406:2734:27;;;;12312:26:51;;;;;:::i;:::-;12279:60;;;;:::i;:::-;;12416:31;12279:60;406:2734:27;;12416:31:51;545:85:69;;;;;;;461:173;;11508:279:51;2926:232:68;-1:-1:-1;2926:232:68;-1:-1:-1;2926:232:68;;;;;;;;;2102:103;;;;;;;11697:59:51;:18;;;;11718:31;;;545:85:69;;;;;;;461:173;;10092:1383:51;10387:16;;;;;;;;;885:1;10387:16;;10420:15;;;10416:99;;10092:1383;1840:135:68;;;;;;;2213:380;;1840:135;;;10669:47:51;;406:2734:27;2321:4:48;;;10688:28:51;2321:4:48;10669:47:51;2213:380:68;;;;;;2363:226;;;;;;;;;;;;;;;;;;;2213:380;;;406:2734:27;;;11024:26:51;10983:68;;11024:26;;;;;;;:::i;:::-;406:2734:27;;;;;;10983:68:51;;;;;;;406:2734:27;10983:68:51;;8405:1;10983:68;;;:::i;:::-;;406:2734:27;;10983:68:51;;;;;;;406:2734:27;10983:68:51;406:2734:27;10983:68:51;406:2734:27;10983:68:51;;;10092:1383;406:2734:27;;10983:97:51;10979:203;;11193:16;;406:2734:27;11324:42:51;11193:16;406:2734:27;;;;;11324:42:51;;:::i;10979:203::-;11103:66;11142:26;;;;;;;;:::i;:::-;406:2734:27;;;11103:66:51;;;;;;8405:1;11103:66;;;:::i;10983:68::-;;;;;;;;;;;;;;:::i;:::-;;;;10416:99;798:135:68;;;;;;;-1:-1:-1;798:135:68;;10416:99:51;;9370:676;9567:16;9579:4;9567:16;;;;;;;;;;9600:15;;;9596:99;;9370:676;1840:135:68;;;;9895:42:51;;406:2734:27;;;;;1840:135:68;;;;;9895:42:51;:::i;9596:99::-;798:135:68;;;;;;;-1:-1:-1;798:135:68;;9596:99:51;;8450:864;8794:16;;;;;;;;;;8806:4;8794:16;8827:15;;;8823:99;;8450:864;3511:494:68;9076:27:51;406:2734:27;3511:494:68;9076:27:51;3511:494:68;;;;:::i;:::-;8995:53:51;;;406:2734:27;;9076:27:51;;;;;740:1;;;;406:2734:27;740:1:51;;;;;406:2734:27;;;;740:1:51;;;406:2734:27;740:1:51;;;406:2734:27;740:1:51;406:2734:27;740:1:51;8823:99;798:135:68;;;;-1:-1:-1;798:135:68;;;;;;-1:-1:-1;9076:27:51;8823:99;;956:192:54;1066:24;;;:77;;;;1059:84;956:192;:::o;1066:77::-;394:41:49;;509:66:54;394:41:49;1094:49:54;956:192;:::o;406:2734:27:-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;7820:454:48;;406:2734:27;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;-1:-1:-1;8164:3:48;406:2734:27;;8146:16:48;;;;;8202:8;;406:2734:27;8202:8:48;;;:::i;:::-;;406:2734:27;;;;7708:7:48;406:2734:27;7708:7:48;;406:2734:27;7727:6:48;406:2734:27;7727:6:48;;;406:2734:27;;;;;7717:17:48;7736:10;;;;406:2734:27;7748:14:48;;;406:2734:27;;;7764:14:48;7780:17;7764:14;;;406:2734:27;;;7780:17:48;;406:2734:27;;;;7667:138:48;406:2734:27;7667:138:48;;406:2734:27;1478:66:48;406:2734:27;;;1478:66:48;;406:2734:27;7736:10:48;1478:66;;406:2734:27;7748:14:48;1478:66;;406:2734:27;7764:14:48;1478:66;;406:2734:27;7780:17:48;1478:66;;406:2734:27;1478:66:48;;;406:2734:27;1478:66:48;;;406:2734:27;1478:66:48;7667:138;;;;;;:::i;:::-;406:2734:27;7650:161:48;;8177:34;;;;:::i;:::-;406:2734:27;;8131:13:48;;8146:16;;;;;406:2734:27;;8240:28:48;;406:2734:27;;8240:28:48;;406:2734:27;;;:::i;3511:494:68:-;3690:173;;;;;;;;;;;;3998:2;3955:14;3931:39;;2321:4:48;406:2734:27;2321:4:48;406:2734:27;;;;;;3511:494:68;:::o;1947:181:51:-;;406:2734:27;;2068:54:51;406:2734:27;2068:54:51;;;406:2734:27;;;;;;;;;;;;;;;;2068:54:51;;;;;;:::i;2132:210::-;;406:2734:27;;2263:73:51;;;;406:2734:27;;;;;;;;;;;;;;;;;2263:73:51;;;;;;:::i;2562:182::-;406:2734:27;;2681:57:51;;;406:2734:27;;;;;;;;;2681:57:51;;;;;;:::i;9842:280:48:-;10068:48;;10027:18;9956:44;406:2734:27;9972:18:48;;;406:2734:27;;;9956:44:48;:::i;2748:211:51:-;406:2734:27;;2878:75:51;;;406:2734:27;;;;;;;;;2878:75:51;;;;;;:::i;2346:212::-;;406:2734:27;;2478:74:51;406:2734:27;2478:74:51;;;406:2734:27;;;;;;;;;;;;;;;;;;;;2478:74:51;;;;;;:::i","linkReferences":{},"immutableReferences":{"45560":[{"start":4065,"length":32},{"start":4827,"length":32},{"start":6879,"length":32}]}},"methodIdentifiers":{"addHook(bytes4,address)":"b93ea7ad","entrypoint()":"a65d69d4","execute(bytes,bytes)":"1f6a1eb9","executeUserOp(bytes)":"9c145aed","getImplementation()":"aaf10f42","getStaticSignature(bytes32)":"92dcb3fc","imageHash()":"51605d80","isValidSignature(bytes32,bytes)":"1626ba7e","onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)":"bc197c81","onERC1155Received(address,address,uint256,uint256,bytes)":"f23a6e61","onERC721Received(address,address,uint256,bytes)":"150b7a02","readHook(bytes4)":"1a9b2337","readNonce(uint256)":"8c3f5563","recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":"ad55366b","recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":"13792a4a","removeHook(bytes4)":"4fcf3eca","selfExecute(bytes)":"6ea44577","setStaticSignature(bytes32,address,uint96)":"f727ef1c","simulate((address,uint256,bytes,uint256,bool,bool,uint256)[])":"a27c3922","tokenReceived(address,uint256,bytes)":"8943ec02","tokensReceived(address,address,address,uint256,bytes,bytes)":"0023de29","updateImageHash(bytes32)":"29561426","updateImplementation(address)":"025b22bc","validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)":"19822f7c"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_entryPoint\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_provided\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_current\",\"type\":\"uint256\"}],\"name\":\"BadNonce\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC4337Disabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"HookAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"HookDoesNotExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ImageHashIsZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_signer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"InvalidERC1271Signature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_entrypoint\",\"type\":\"address\"}],\"name\":\"InvalidEntryPoint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"}],\"name\":\"InvalidKind\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"InvalidSapientSignature\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"InvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_flag\",\"type\":\"uint256\"}],\"name\":\"InvalidSignatureFlag\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_weight\",\"type\":\"uint256\"}],\"name\":\"InvalidSignatureWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_expires\",\"type\":\"uint256\"}],\"name\":\"InvalidStaticSignatureExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_expectedCaller\",\"type\":\"address\"}],\"name\":\"InvalidStaticSignatureWrongCaller\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_weight\",\"type\":\"uint256\"}],\"name\":\"LowWeightChainedSignature\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_gasLeft\",\"type\":\"uint256\"}],\"name\":\"NotEnoughGas\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_returnData\",\"type\":\"bytes\"}],\"name\":\"Reverted\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"checkpoint\",\"type\":\"uint256\"}],\"internalType\":\"struct Snapshot\",\"name\":\"_snapshot\",\"type\":\"tuple\"}],\"name\":\"UnusedSnapshot\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nextCheckpoint\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_checkpoint\",\"type\":\"uint256\"}],\"name\":\"WrongChainedCheckpointOrder\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_returnData\",\"type\":\"bytes\"}],\"name\":\"CallAborted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_returnData\",\"type\":\"bytes\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"CallSkipped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"CallSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"DefinedHook\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"newImageHash\",\"type\":\"bytes32\"}],\"name\":\"ImageHashUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"ImplementationUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_space\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_newNonce\",\"type\":\"uint256\"}],\"name\":\"NonceChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"_timestamp\",\"type\":\"uint96\"}],\"name\":\"StaticSignatureSet\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"addHook\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"entrypoint\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"}],\"name\":\"executeUserOp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"getStaticSignature\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"imageHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"readHook\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_space\",\"type\":\"uint256\"}],\"name\":\"readNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"recoverPartialSignature\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isValidImage\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"checkpoint\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"opHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"recoverSapientSignature\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"removeHook\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"}],\"name\":\"selfExecute\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"_timestamp\",\"type\":\"uint96\"}],\"name\":\"setStaticSignature\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"_calls\",\"type\":\"tuple[]\"}],\"name\":\"simulate\",\"outputs\":[{\"components\":[{\"internalType\":\"enum Simulator.Status\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"internalType\":\"struct Simulator.Result[]\",\"name\":\"results\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"tokenReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"operatorData\",\"type\":\"bytes\"}],\"name\":\"tokensReceived\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_imageHash\",\"type\":\"bytes32\"}],\"name\":\"updateImageHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"}],\"name\":\"updateImplementation\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"accountGasLimits\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"gasFees\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct PackedUserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"userOpHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"missingAccountFunds\",\"type\":\"uint256\"}],\"name\":\"validateUserOp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"validationData\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"William Hua\",\"kind\":\"dev\",\"methods\":{\"addHook(bytes4,address)\":{\"details\":\"Callable only by the contract itself\",\"params\":{\"implementation\":\"The implementation address of the hook\",\"selector\":\"The selector of the hook\"}},\"execute(bytes,bytes)\":{\"params\":{\"_payload\":\"The payload\",\"_signature\":\"The signature\"}},\"getImplementation()\":{\"returns\":{\"_0\":\"implementation The implementation\"}},\"getStaticSignature(bytes32)\":{\"params\":{\"_hash\":\"The hash to get the static signature for\"},\"returns\":{\"_0\":\"address The address associated with the static signature\",\"_1\":\"timestamp The timestamp of the static signature\"}},\"imageHash()\":{\"returns\":{\"_0\":\"imageHash The image hash\"}},\"isValidSignature(bytes32,bytes)\":{\"details\":\"MUST return the correct magic value if the signature provided is valid for the provided hash > The bytes4 magic value to return when signature is valid is 0x1626ba7e : bytes4(keccak256(\\\"isValidSignature(bytes32,bytes)\\\") > This function MAY modify Ethereum's state\",\"params\":{\"_hash\":\"keccak256 hash that was signed\",\"_signature\":\"Signature byte array associated with _data\"},\"returns\":{\"_0\":\"Magic value 0x1626ba7e if the signature is valid and 0x0 otherwise\"}},\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\":{\"params\":{\"data\":\"Additional data with no specified format\",\"from\":\"The address which previously owned the token\",\"ids\":\"The list of token IDs being transferred\",\"operator\":\"The address which initiated the transfer\",\"values\":\"The amounts of each token being transferred\"},\"returns\":{\"_0\":\"On a success, the selector of the function that was called\"}},\"onERC1155Received(address,address,uint256,uint256,bytes)\":{\"params\":{\"data\":\"Additional data with no specified format\",\"from\":\"The address which previously owned the token\",\"operator\":\"The address which initiated the transfer\",\"tokenId\":\"The ID of the token being transferred\",\"value\":\"The amount of token being transferred\"},\"returns\":{\"_0\":\"On a success, the selector of the function that was called\"}},\"onERC721Received(address,address,uint256,bytes)\":{\"params\":{\"data\":\"Additional data with no specified format\",\"from\":\"The address which previously owned the token\",\"operator\":\"The address which initiated the transfer\",\"tokenId\":\"The ID of the token being transferred\"},\"returns\":{\"_0\":\"On a success, the selector of the function that was called\"}},\"readHook(bytes4)\":{\"params\":{\"selector\":\"The selector of the hook\"},\"returns\":{\"_0\":\"implementation The implementation address of the hook\"}},\"readNonce(uint256)\":{\"params\":{\"_space\":\"The space\"},\"returns\":{\"_0\":\"nonce The nonce\"}},\"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"params\":{\"_payload\":\"The payload\",\"_signature\":\"The signature to recover\"},\"returns\":{\"checkpoint\":\"The checkpoint identifier\",\"imageHash\":\"The derived image hash\",\"isValidImage\":\"Whether the image hash is valid\",\"opHash\":\"The hash of the payload\",\"threshold\":\"The signature threshold\",\"weight\":\"The derived weight\"}},\"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"params\":{\"payload\":\"The payload to recover the signature from\",\"signature\":\"The signature to recover the image hash from\"},\"returns\":{\"_0\":\"The recovered image hash\"}},\"removeHook(bytes4)\":{\"details\":\"Callable only by the contract itself\",\"params\":{\"selector\":\"The selector of the hook\"}},\"selfExecute(bytes)\":{\"details\":\"Callable only by the contract itself\",\"params\":{\"_payload\":\"The payload\"}},\"setStaticSignature(bytes32,address,uint96)\":{\"details\":\"Only callable by the wallet itself\",\"params\":{\"_address\":\"The address to associate with the static signature\",\"_hash\":\"The hash to set the static signature for\",\"_timestamp\":\"The timestamp of the static signature\"}},\"simulate((address,uint256,bytes,uint256,bool,bool,uint256)[])\":{\"params\":{\"_calls\":\"The calls to simulate\"},\"returns\":{\"results\":\"The results of the calls\"}},\"tokenReceived(address,uint256,bytes)\":{\"params\":{\"data\":\"Transaction metadata\",\"from\":\"The address which previously owned the tokens\",\"value\":\"The amount of tokens being transferred\"},\"returns\":{\"_0\":\"The signature of the function to be called\"}},\"tokensReceived(address,address,address,uint256,bytes,bytes)\":{\"params\":{\"amount\":\"The amount of tokens being transferred\",\"data\":\"Additional data with no specified format\",\"from\":\"The address which previously owned the tokens\",\"operator\":\"The address which initiated the transfer\",\"operatorData\":\"Additional data with no specified format\",\"to\":\"The address which is receiving the tokens\"}},\"updateImageHash(bytes32)\":{\"details\":\"Only callable by the wallet itself\",\"params\":{\"_imageHash\":\"The new image hash\"}},\"updateImplementation(address)\":{\"details\":\"Callable only by the contract itself\",\"params\":{\"_implementation\":\"The new implementation\"}},\"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)\":{\"details\":\"Must validate caller is the entryPoint. Must validate the signature and nonce\",\"params\":{\"missingAccountFunds\":\"- Missing funds on the account's deposit in the entrypoint. This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call. The excess is left as a deposit in the entrypoint for future calls. Can be withdrawn anytime using \\\"entryPoint.withdrawTo()\\\". In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.\",\"userOp\":\"- The operation that is about to be executed.\",\"userOpHash\":\"- Hash of the user's request data. can be used as the basis for signature.\"},\"returns\":{\"validationData\":\" - Packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode. <20-byte> aggregatorOrSigFail - 0 for valid signature, 1 to mark signature failure, otherwise, an address of an \\\"aggregator\\\" contract. <6-byte> validUntil - Last timestamp this operation is valid at, or 0 for \\\"indefinitely\\\" <6-byte> validAfter - First timestamp this operation is valid If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure. Note that the validation code cannot use block.timestamp (or block.number) directly.\"}}},\"title\":\"Simulator\",\"version\":1},\"userdoc\":{\"errors\":{\"BadNonce(uint256,uint256,uint256)\":[{\"notice\":\"Error thrown when the nonce is bad\"}],\"HookAlreadyExists(bytes4)\":[{\"notice\":\"Error thrown when a hook already exists\"}],\"HookDoesNotExist(bytes4)\":[{\"notice\":\"Error thrown when a hook does not exist\"}],\"ImageHashIsZero()\":[{\"notice\":\"Error thrown when the image hash is zero\"}],\"InvalidERC1271Signature(bytes32,address,bytes)\":[{\"notice\":\"Error thrown when the ERC1271 signature is invalid\"}],\"InvalidKind(uint8)\":[{\"notice\":\"Error thrown when the kind is invalid\"}],\"InvalidSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":[{\"notice\":\"Error thrown when the sapient signature is invalid\"}],\"InvalidSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":[{\"notice\":\"Error thrown when a signature is invalid\"}],\"InvalidSignatureFlag(uint256)\":[{\"notice\":\"Error thrown when the signature flag is invalid\"}],\"InvalidSignatureWeight(uint256,uint256)\":[{\"notice\":\"Error thrown when the signature weight is invalid\"}],\"InvalidStaticSignatureExpired(bytes32,uint256)\":[{\"notice\":\"Error thrown when the static signature has expired\"}],\"InvalidStaticSignatureWrongCaller(bytes32,address,address)\":[{\"notice\":\"Error thrown when the static signature has the wrong caller\"}],\"LowWeightChainedSignature(bytes,uint256,uint256)\":[{\"notice\":\"Error thrown when the weight is too low for a chained signature\"}],\"NotEnoughGas((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint256,uint256)\":[{\"notice\":\"Error thrown when there is not enough gas\"}],\"OnlySelf(address)\":[{\"notice\":\"Error thrown when the caller is not the same as the contract\"}],\"Reverted((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint256,bytes)\":[{\"notice\":\"Error thrown when a call reverts\"}],\"UnusedSnapshot((bytes32,uint256))\":[{\"notice\":\"Error thrown when the snapshot is unused\"}],\"WrongChainedCheckpointOrder(uint256,uint256)\":[{\"notice\":\"Error thrown when the checkpoint order is wrong\"}]},\"events\":{\"CallAborted(bytes32,uint256,bytes)\":{\"notice\":\"Emitted when a call is aborted\"},\"CallFailed(bytes32,uint256,bytes)\":{\"notice\":\"Emitted when a call fails\"},\"CallSkipped(bytes32,uint256)\":{\"notice\":\"Emitted when a call is skipped\"},\"CallSucceeded(bytes32,uint256)\":{\"notice\":\"Emitted when a call succeeds\"},\"DefinedHook(bytes4,address)\":{\"notice\":\"Emitted when a hook is defined\"},\"ImageHashUpdated(bytes32)\":{\"notice\":\"Emitted when the image hash is updated\"},\"ImplementationUpdated(address)\":{\"notice\":\"Emitted when the implementation is updated\"},\"NonceChange(uint256,uint256)\":{\"notice\":\"Emitted when the nonce is changed\"},\"StaticSignatureSet(bytes32,address,uint96)\":{\"notice\":\"Event emitted when a static signature is set\"}},\"kind\":\"user\",\"methods\":{\"addHook(bytes4,address)\":{\"notice\":\"Add a hook\"},\"execute(bytes,bytes)\":{\"notice\":\"Execute a call\"},\"getImplementation()\":{\"notice\":\"Get the implementation\"},\"getStaticSignature(bytes32)\":{\"notice\":\"Get the static signature for a specific hash\"},\"imageHash()\":{\"notice\":\"Get the image hash\"},\"isValidSignature(bytes32,bytes)\":{\"notice\":\"Verifies whether the provided signature is valid with respect to the provided hash\"},\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\":{\"notice\":\"Called when multiple ERC1155 tokens are transferred to this contract\"},\"onERC1155Received(address,address,uint256,uint256,bytes)\":{\"notice\":\"Called when a single ERC1155 token is transferred to this contract\"},\"onERC721Received(address,address,uint256,bytes)\":{\"notice\":\"Called when a single ERC721 token is transferred to this contract\"},\"readHook(bytes4)\":{\"notice\":\"Read a hook\"},\"readNonce(uint256)\":{\"notice\":\"Read the nonce\"},\"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"notice\":\"Recover the partial signature\"},\"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"notice\":\"Recovers the image hash of a given signature\"},\"removeHook(bytes4)\":{\"notice\":\"Remove a hook\"},\"selfExecute(bytes)\":{\"notice\":\"Execute a call\"},\"setStaticSignature(bytes32,address,uint96)\":{\"notice\":\"Set the static signature for a specific hash\"},\"simulate((address,uint256,bytes,uint256,bool,bool,uint256)[])\":{\"notice\":\"Simulate the execution of a payload\"},\"tokenReceived(address,uint256,bytes)\":{\"notice\":\"Called when ERC223 tokens are received by this contract\"},\"tokensReceived(address,address,address,uint256,bytes,bytes)\":{\"notice\":\"Called when tokens are received by this contract\"},\"updateImageHash(bytes32)\":{\"notice\":\"Update the image hash\"},\"updateImplementation(address)\":{\"notice\":\"Update the implementation\"},\"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)\":{\"notice\":\"Validate user's signature and nonce the entryPoint will make the call to the recipient only if this validation call returns successfully. signature failure should be reported by returning SIG_VALIDATION_FAILED (1). This allows making a \\\"simulation call\\\" without a valid signature Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.\"}},\"notice\":\"Helper for simulating the execution of a payload\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Simulator.sol\":\"Simulator\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/Simulator.sol\":{\"keccak256\":\"0xa589ec6c8736a19238c3a8bbe6db1b8ded5995aa613f347f5ae824963ced8876\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://7dc352f4d50da22cffbb75f957c45bc859768f8871186b76cf15e921c7372c69\",\"dweb:/ipfs/QmXZCHpTuuMZGqpyCkzooqEQXYsrWx1zNM8r9oFDKq9FNo\"]},\"src/Stage2Module.sol\":{\"keccak256\":\"0xd0b2c2fead81d32a3f83f95bd1dd2d90677fdd1e0a7194a25710ffd0fdaee428\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://8489e75346dbf462b0567da30c2e020cdde3975c38bdfee055284642a3bd2d19\",\"dweb:/ipfs/QmTDM2AkG8qLVjfn35UcXN89CdQS8p3Cm888EadYrMAYAR\"]},\"src/Wallet.sol\":{\"keccak256\":\"0xe01e9e937dd8d7572976ccc8ec3ec87e4a557069dafb05f85977a7b71f5c58d5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2e9ab78d33655f8e822258dff3f2d5ad01e84f6dc90174840d5a283b8e6413c1\",\"dweb:/ipfs/QmNMyYe3C1fs3cxKmUZ3S9VU5EE4WVWPVcwiGbgvbS1vrH\"]},\"src/modules/Calls.sol\":{\"keccak256\":\"0xcd0d38d0fd248e4443032dede2b8892ea0ca7e55538cd54082830f6b98d8edb1\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://617bb6d0724b18f3d77347cc454a57c1c916a0818a592552bd7fa226aa41a306\",\"dweb:/ipfs/Qmeet85Ux6cKq9JmC25JnTzFnRrgDpkyRik2svZLWt4fov\"]},\"src/modules/ERC4337v07.sol\":{\"keccak256\":\"0xbee11ed2498b892b16f72984c848fea85b58d15313fffa78c1e48ca7208f9189\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2d9296803bd52f5e2ae84011593f686802f1cadf6c68a4ee9f97e6455463ae0f\",\"dweb:/ipfs/QmXmWwUiV2eshxxdY5zCyJ7rxcH7bztxcAoh1scw2MPuhP\"]},\"src/modules/Hooks.sol\":{\"keccak256\":\"0xd1f9de45b83ae5f9f32a4d1c709d7a2b6543b1cddd09bf69d401dcdf1d154ab7\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://bf3161edf37479825588e07039752b79792666455cc0beb1ca0e873b3be31ad4\",\"dweb:/ipfs/QmYYpJeSsRgRx2oHcpvhqsNs7ZtDhVnxLmFpXz5eYcS8g4\"]},\"src/modules/Implementation.sol\":{\"keccak256\":\"0x16546d4be07865808890308750916b0a9a55e7a994a458c01edde4618f29b4e6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1b1f9785b08c9f29d6849ba2d3dee89fa3ea5f3c2feec4a59a6d1040e3fbe040\",\"dweb:/ipfs/QmU2Pm5C3Ztky7RQdCZggavyq7Eh1eS1HFqVz9jZKiMUML\"]},\"src/modules/Nonce.sol\":{\"keccak256\":\"0x56fbf6dc9b34ab60ae8a32ffb6f583c003bb8f4a5223ce704e982400fa403fab\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://492f53628633b862702cf8f9b726067a722c94028133a8a4c4fcf3d0e73ad803\",\"dweb:/ipfs/QmTHNy4XbH47YZaqKDpknb5aApjRH9HVAREHN7N5vEFWEV\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/Storage.sol\":{\"keccak256\":\"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da\",\"dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn\"]},\"src/modules/auth/BaseAuth.sol\":{\"keccak256\":\"0xbf2e40def03fcb5f4a5129b2f5803e21951325b92e00126cbe1427b7c25cfefd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://b560905fcc4b957d27c2abed78a1e82529c89fa472e91b3d108fbfd91aa7c3f7\",\"dweb:/ipfs/QmRjLLtTWE6dFX2kBQCgLz7ossfMxhAFgDC8Jx9XuGL6Wy\"]},\"src/modules/auth/BaseSig.sol\":{\"keccak256\":\"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8\",\"dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3\"]},\"src/modules/auth/SelfAuth.sol\":{\"keccak256\":\"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42\",\"dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W\"]},\"src/modules/auth/Stage2Auth.sol\":{\"keccak256\":\"0x5b23b530522ba1c02248d1f7470352c57fbc91c245c7c577044f93f6bb560a59\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c30b8e13edc7e18e4ea7bc7f4b8deaf16301a8f2bb23e7697e6f6b74882a39dc\",\"dweb:/ipfs/QmW69XvfeJepuPBrHb1Vpkikg43P4juEGdRkUWt8GrrAfL\"]},\"src/modules/interfaces/IAccount.sol\":{\"keccak256\":\"0x64ca3bb59ec4fc0a60d80402802365e2d5226afe7e7aabe3b21df936c84f2bcb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ccfd2381e1874cdec2f473a9a17799a3b57360c0593d68ee66fcea9c16eb39b4\",\"dweb:/ipfs/QmcjbJpGz3Exmu4fsj953Y2bG8rtQaVMEFUgT6W2dUXomr\"]},\"src/modules/interfaces/IAuth.sol\":{\"keccak256\":\"0xf6fa30af2ec91d5fbeac17c9b1f2aa73b7883c9ac98745605007e57666394b91\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://6e90a87978519462f9612f4a17e38fddc1c7bcf700ff834a1de7dce326f30353\",\"dweb:/ipfs/QmXmWAsRRK6t4jPs4VcXrouyokxdALM28D3odX7ub48WEp\"]},\"src/modules/interfaces/ICheckpointer.sol\":{\"keccak256\":\"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1\",\"dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t\"]},\"src/modules/interfaces/IDelegatedExtension.sol\":{\"keccak256\":\"0xa2ae897e90fd70dd4a9e172bc04d019ba9c512e72c2df65fcb6daf87dd5ceb90\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://cdf4b7c3dfb0aef6c9dbe8b2a0542018dc756ef2252d7101bcb3186192da0a11\",\"dweb:/ipfs/QmPHCVu1DJ7fBrPBYA5y3hoF3a3XFEBwYCZ1ErGaxPhcYL\"]},\"src/modules/interfaces/IERC1155Receiver.sol\":{\"keccak256\":\"0xa23d0bc29233a91085922ea8a7e2cbe8b5f3358d3f2c3cdc58adade9a171d9c1\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2f06b8f3ae7a45441cc26da5b2ddd15ba76d1664178958f63f536e6c5e4fd0fb\",\"dweb:/ipfs/QmR1Rnk8ciSn5s5wNLGvpE1QNRDsBVDfDT1ZXhei2brmFj\"]},\"src/modules/interfaces/IERC1271.sol\":{\"keccak256\":\"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b\",\"dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF\"]},\"src/modules/interfaces/IERC223Receiver.sol\":{\"keccak256\":\"0x426221c0d48b651ed692edfa5388d6e5304e94f48598a71748134b2659e3890d\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://9e1ed2fd5e390b5b943dc07c2e0ea9e524eb37263dc72c482365c159fc3659e5\",\"dweb:/ipfs/QmWRDBvb1cthVPm4BSzKX3J5GpGGSBuDokkpRK9x5aA7JR\"]},\"src/modules/interfaces/IERC721Receiver.sol\":{\"keccak256\":\"0xbe14c3b727f283a467dc2f2221d3322c5a69cd64a3aacad85acab05e94438f35\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://43ef086c509b8b88cae78f67c4bd979fd427736972cfe56f7423371ccc154e63\",\"dweb:/ipfs/Qmc7Yp7Z1dQ925gzEZYVNUXnWr3YomvWkXfaGYLZpoy8J3\"]},\"src/modules/interfaces/IERC777Receiver.sol\":{\"keccak256\":\"0xd9144d439a96b0c6439cd9a186701aa530f4f782ff09fdbf6c3ef16b78b0d4e5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d1f17484eda7184db4a00106b4952f15c1517872cbfe19663d6fce4e042729b2\",\"dweb:/ipfs/QmWdhYmLNkUpgvPpSyGHstxrFwMfhRTVmxDpe4frkUu1Qh\"]},\"src/modules/interfaces/IEntryPoint.sol\":{\"keccak256\":\"0xd19922ea7a8ae09072a721138dc93e175fa77ecaa3ac6f2d759d5e5e944fb665\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://20ecea69ddd4d8787c0bdc4487dea03e90f63f4296674a12728e331a78e62620\",\"dweb:/ipfs/QmZUrX8zEqfHZEJQjNtDUXGS47bj2UuRCLfbkLPrXsot1c\"]},\"src/modules/interfaces/IPartialAuth.sol\":{\"keccak256\":\"0x0d1aa021615d8e90696e71a9468331457a1babfa2ffe169654b7456e5bcb7a73\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://bbacd149a6358ab0d4b9c588d2e3a55fc71ed4723269150d7b91ca70092f6519\",\"dweb:/ipfs/QmUSwtrYCrRcRFsy5rCzdMPrw1FCU7ZoeXdsW6kK9yc8FK\"]},\"src/modules/interfaces/ISapient.sol\":{\"keccak256\":\"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489\",\"dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"src/utils/LibOptim.sol\":{\"keccak256\":\"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81\",\"dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_entryPoint","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"_space","type":"uint256"},{"internalType":"uint256","name":"_provided","type":"uint256"},{"internalType":"uint256","name":"_current","type":"uint256"}],"type":"error","name":"BadNonce"},{"inputs":[],"type":"error","name":"ERC4337Disabled"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"type":"error","name":"HookAlreadyExists"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"type":"error","name":"HookDoesNotExist"},{"inputs":[],"type":"error","name":"ImageHashIsZero"},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32"},{"internalType":"address","name":"_signer","type":"address"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"type":"error","name":"InvalidERC1271Signature"},{"inputs":[{"internalType":"address","name":"_entrypoint","type":"address"}],"type":"error","name":"InvalidEntryPoint"},{"inputs":[{"internalType":"uint8","name":"kind","type":"uint8"}],"type":"error","name":"InvalidKind"},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"type":"error","name":"InvalidSapientSignature"},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"type":"error","name":"InvalidSignature"},{"inputs":[{"internalType":"uint256","name":"_flag","type":"uint256"}],"type":"error","name":"InvalidSignatureFlag"},{"inputs":[{"internalType":"uint256","name":"_threshold","type":"uint256"},{"internalType":"uint256","name":"_weight","type":"uint256"}],"type":"error","name":"InvalidSignatureWeight"},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32"},{"internalType":"uint256","name":"_expires","type":"uint256"}],"type":"error","name":"InvalidStaticSignatureExpired"},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32"},{"internalType":"address","name":"_caller","type":"address"},{"internalType":"address","name":"_expectedCaller","type":"address"}],"type":"error","name":"InvalidStaticSignatureWrongCaller"},{"inputs":[{"internalType":"bytes","name":"_signature","type":"bytes"},{"internalType":"uint256","name":"_threshold","type":"uint256"},{"internalType":"uint256","name":"_weight","type":"uint256"}],"type":"error","name":"LowWeightChainedSignature"},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_gasLeft","type":"uint256"}],"type":"error","name":"NotEnoughGas"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"}],"type":"error","name":"OnlySelf"},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"bytes","name":"_returnData","type":"bytes"}],"type":"error","name":"Reverted"},{"inputs":[{"internalType":"struct Snapshot","name":"_snapshot","type":"tuple","components":[{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"uint256","name":"checkpoint","type":"uint256"}]}],"type":"error","name":"UnusedSnapshot"},{"inputs":[{"internalType":"uint256","name":"_nextCheckpoint","type":"uint256"},{"internalType":"uint256","name":"_checkpoint","type":"uint256"}],"type":"error","name":"WrongChainedCheckpointOrder"},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_index","type":"uint256","indexed":false},{"internalType":"bytes","name":"_returnData","type":"bytes","indexed":false}],"type":"event","name":"CallAborted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_index","type":"uint256","indexed":false},{"internalType":"bytes","name":"_returnData","type":"bytes","indexed":false}],"type":"event","name":"CallFailed","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_index","type":"uint256","indexed":false}],"type":"event","name":"CallSkipped","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_index","type":"uint256","indexed":false}],"type":"event","name":"CallSucceeded","anonymous":false},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4","indexed":false},{"internalType":"address","name":"implementation","type":"address","indexed":false}],"type":"event","name":"DefinedHook","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"newImageHash","type":"bytes32","indexed":false}],"type":"event","name":"ImageHashUpdated","anonymous":false},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address","indexed":false}],"type":"event","name":"ImplementationUpdated","anonymous":false},{"inputs":[{"internalType":"uint256","name":"_space","type":"uint256","indexed":false},{"internalType":"uint256","name":"_newNonce","type":"uint256","indexed":false}],"type":"event","name":"NonceChange","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32","indexed":false},{"internalType":"address","name":"_address","type":"address","indexed":false},{"internalType":"uint96","name":"_timestamp","type":"uint96","indexed":false}],"type":"event","name":"StaticSignatureSet","anonymous":false},{"inputs":[],"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"},{"internalType":"address","name":"implementation","type":"address"}],"stateMutability":"payable","type":"function","name":"addHook"},{"inputs":[],"stateMutability":"view","type":"function","name":"entrypoint","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"payable","type":"function","name":"execute"},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"executeUserOp"},{"inputs":[],"stateMutability":"view","type":"function","name":"getImplementation","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getStaticSignature","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"imageHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"view","type":"function","name":"isValidSignature","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function","name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function","name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function","name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"stateMutability":"view","type":"function","name":"readHook","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"_space","type":"uint256"}],"stateMutability":"view","type":"function","name":"readNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"view","type":"function","name":"recoverPartialSignature","outputs":[{"internalType":"uint256","name":"threshold","type":"uint256"},{"internalType":"uint256","name":"weight","type":"uint256"},{"internalType":"bool","name":"isValidImage","type":"bool"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"uint256","name":"checkpoint","type":"uint256"},{"internalType":"bytes32","name":"opHash","type":"bytes32"}]},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"view","type":"function","name":"recoverSapientSignature","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"stateMutability":"payable","type":"function","name":"removeHook"},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"}],"stateMutability":"payable","type":"function","name":"selfExecute"},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint96","name":"_timestamp","type":"uint96"}],"stateMutability":"nonpayable","type":"function","name":"setStaticSignature"},{"inputs":[{"internalType":"struct Payload.Call[]","name":"_calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"simulate","outputs":[{"internalType":"struct Simulator.Result[]","name":"results","type":"tuple[]","components":[{"internalType":"enum Simulator.Status","name":"status","type":"uint8"},{"internalType":"bytes","name":"result","type":"bytes"},{"internalType":"uint256","name":"gasUsed","type":"uint256"}]}]},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function","name":"tokenReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes","name":"operatorData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"tokensReceived"},{"inputs":[{"internalType":"bytes32","name":"_imageHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"updateImageHash"},{"inputs":[{"internalType":"address","name":"_implementation","type":"address"}],"stateMutability":"payable","type":"function","name":"updateImplementation"},{"inputs":[{"internalType":"struct PackedUserOperation","name":"userOp","type":"tuple","components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"initCode","type":"bytes"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"bytes32","name":"accountGasLimits","type":"bytes32"},{"internalType":"uint256","name":"preVerificationGas","type":"uint256"},{"internalType":"bytes32","name":"gasFees","type":"bytes32"},{"internalType":"bytes","name":"paymasterAndData","type":"bytes"},{"internalType":"bytes","name":"signature","type":"bytes"}]},{"internalType":"bytes32","name":"userOpHash","type":"bytes32"},{"internalType":"uint256","name":"missingAccountFunds","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"validateUserOp","outputs":[{"internalType":"uint256","name":"validationData","type":"uint256"}]},{"inputs":[],"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"addHook(bytes4,address)":{"details":"Callable only by the contract itself","params":{"implementation":"The implementation address of the hook","selector":"The selector of the hook"}},"execute(bytes,bytes)":{"params":{"_payload":"The payload","_signature":"The signature"}},"getImplementation()":{"returns":{"_0":"implementation The implementation"}},"getStaticSignature(bytes32)":{"params":{"_hash":"The hash to get the static signature for"},"returns":{"_0":"address The address associated with the static signature","_1":"timestamp The timestamp of the static signature"}},"imageHash()":{"returns":{"_0":"imageHash The image hash"}},"isValidSignature(bytes32,bytes)":{"details":"MUST return the correct magic value if the signature provided is valid for the provided hash > The bytes4 magic value to return when signature is valid is 0x1626ba7e : bytes4(keccak256(\"isValidSignature(bytes32,bytes)\") > This function MAY modify Ethereum's state","params":{"_hash":"keccak256 hash that was signed","_signature":"Signature byte array associated with _data"},"returns":{"_0":"Magic value 0x1626ba7e if the signature is valid and 0x0 otherwise"}},"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)":{"params":{"data":"Additional data with no specified format","from":"The address which previously owned the token","ids":"The list of token IDs being transferred","operator":"The address which initiated the transfer","values":"The amounts of each token being transferred"},"returns":{"_0":"On a success, the selector of the function that was called"}},"onERC1155Received(address,address,uint256,uint256,bytes)":{"params":{"data":"Additional data with no specified format","from":"The address which previously owned the token","operator":"The address which initiated the transfer","tokenId":"The ID of the token being transferred","value":"The amount of token being transferred"},"returns":{"_0":"On a success, the selector of the function that was called"}},"onERC721Received(address,address,uint256,bytes)":{"params":{"data":"Additional data with no specified format","from":"The address which previously owned the token","operator":"The address which initiated the transfer","tokenId":"The ID of the token being transferred"},"returns":{"_0":"On a success, the selector of the function that was called"}},"readHook(bytes4)":{"params":{"selector":"The selector of the hook"},"returns":{"_0":"implementation The implementation address of the hook"}},"readNonce(uint256)":{"params":{"_space":"The space"},"returns":{"_0":"nonce The nonce"}},"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"params":{"_payload":"The payload","_signature":"The signature to recover"},"returns":{"checkpoint":"The checkpoint identifier","imageHash":"The derived image hash","isValidImage":"Whether the image hash is valid","opHash":"The hash of the payload","threshold":"The signature threshold","weight":"The derived weight"}},"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"params":{"payload":"The payload to recover the signature from","signature":"The signature to recover the image hash from"},"returns":{"_0":"The recovered image hash"}},"removeHook(bytes4)":{"details":"Callable only by the contract itself","params":{"selector":"The selector of the hook"}},"selfExecute(bytes)":{"details":"Callable only by the contract itself","params":{"_payload":"The payload"}},"setStaticSignature(bytes32,address,uint96)":{"details":"Only callable by the wallet itself","params":{"_address":"The address to associate with the static signature","_hash":"The hash to set the static signature for","_timestamp":"The timestamp of the static signature"}},"simulate((address,uint256,bytes,uint256,bool,bool,uint256)[])":{"params":{"_calls":"The calls to simulate"},"returns":{"results":"The results of the calls"}},"tokenReceived(address,uint256,bytes)":{"params":{"data":"Transaction metadata","from":"The address which previously owned the tokens","value":"The amount of tokens being transferred"},"returns":{"_0":"The signature of the function to be called"}},"tokensReceived(address,address,address,uint256,bytes,bytes)":{"params":{"amount":"The amount of tokens being transferred","data":"Additional data with no specified format","from":"The address which previously owned the tokens","operator":"The address which initiated the transfer","operatorData":"Additional data with no specified format","to":"The address which is receiving the tokens"}},"updateImageHash(bytes32)":{"details":"Only callable by the wallet itself","params":{"_imageHash":"The new image hash"}},"updateImplementation(address)":{"details":"Callable only by the contract itself","params":{"_implementation":"The new implementation"}},"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)":{"details":"Must validate caller is the entryPoint. Must validate the signature and nonce","params":{"missingAccountFunds":"- Missing funds on the account's deposit in the entrypoint. This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call. The excess is left as a deposit in the entrypoint for future calls. Can be withdrawn anytime using \"entryPoint.withdrawTo()\". In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.","userOp":"- The operation that is about to be executed.","userOpHash":"- Hash of the user's request data. can be used as the basis for signature."},"returns":{"validationData":" - Packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode. <20-byte> aggregatorOrSigFail - 0 for valid signature, 1 to mark signature failure, otherwise, an address of an \"aggregator\" contract. <6-byte> validUntil - Last timestamp this operation is valid at, or 0 for \"indefinitely\" <6-byte> validAfter - First timestamp this operation is valid If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure. Note that the validation code cannot use block.timestamp (or block.number) directly."}}},"version":1},"userdoc":{"kind":"user","methods":{"addHook(bytes4,address)":{"notice":"Add a hook"},"execute(bytes,bytes)":{"notice":"Execute a call"},"getImplementation()":{"notice":"Get the implementation"},"getStaticSignature(bytes32)":{"notice":"Get the static signature for a specific hash"},"imageHash()":{"notice":"Get the image hash"},"isValidSignature(bytes32,bytes)":{"notice":"Verifies whether the provided signature is valid with respect to the provided hash"},"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)":{"notice":"Called when multiple ERC1155 tokens are transferred to this contract"},"onERC1155Received(address,address,uint256,uint256,bytes)":{"notice":"Called when a single ERC1155 token is transferred to this contract"},"onERC721Received(address,address,uint256,bytes)":{"notice":"Called when a single ERC721 token is transferred to this contract"},"readHook(bytes4)":{"notice":"Read a hook"},"readNonce(uint256)":{"notice":"Read the nonce"},"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"notice":"Recover the partial signature"},"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"notice":"Recovers the image hash of a given signature"},"removeHook(bytes4)":{"notice":"Remove a hook"},"selfExecute(bytes)":{"notice":"Execute a call"},"setStaticSignature(bytes32,address,uint96)":{"notice":"Set the static signature for a specific hash"},"simulate((address,uint256,bytes,uint256,bool,bool,uint256)[])":{"notice":"Simulate the execution of a payload"},"tokenReceived(address,uint256,bytes)":{"notice":"Called when ERC223 tokens are received by this contract"},"tokensReceived(address,address,address,uint256,bytes,bytes)":{"notice":"Called when tokens are received by this contract"},"updateImageHash(bytes32)":{"notice":"Update the image hash"},"updateImplementation(address)":{"notice":"Update the implementation"},"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)":{"notice":"Validate user's signature and nonce the entryPoint will make the call to the recipient only if this validation call returns successfully. signature failure should be reported by returning SIG_VALIDATION_FAILED (1). This allows making a \"simulation call\" without a valid signature Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure."}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/Simulator.sol":"Simulator"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/Simulator.sol":{"keccak256":"0xa589ec6c8736a19238c3a8bbe6db1b8ded5995aa613f347f5ae824963ced8876","urls":["bzz-raw://7dc352f4d50da22cffbb75f957c45bc859768f8871186b76cf15e921c7372c69","dweb:/ipfs/QmXZCHpTuuMZGqpyCkzooqEQXYsrWx1zNM8r9oFDKq9FNo"],"license":"Apache-2.0"},"src/Stage2Module.sol":{"keccak256":"0xd0b2c2fead81d32a3f83f95bd1dd2d90677fdd1e0a7194a25710ffd0fdaee428","urls":["bzz-raw://8489e75346dbf462b0567da30c2e020cdde3975c38bdfee055284642a3bd2d19","dweb:/ipfs/QmTDM2AkG8qLVjfn35UcXN89CdQS8p3Cm888EadYrMAYAR"],"license":"Apache-2.0"},"src/Wallet.sol":{"keccak256":"0xe01e9e937dd8d7572976ccc8ec3ec87e4a557069dafb05f85977a7b71f5c58d5","urls":["bzz-raw://2e9ab78d33655f8e822258dff3f2d5ad01e84f6dc90174840d5a283b8e6413c1","dweb:/ipfs/QmNMyYe3C1fs3cxKmUZ3S9VU5EE4WVWPVcwiGbgvbS1vrH"],"license":"Apache-2.0"},"src/modules/Calls.sol":{"keccak256":"0xcd0d38d0fd248e4443032dede2b8892ea0ca7e55538cd54082830f6b98d8edb1","urls":["bzz-raw://617bb6d0724b18f3d77347cc454a57c1c916a0818a592552bd7fa226aa41a306","dweb:/ipfs/Qmeet85Ux6cKq9JmC25JnTzFnRrgDpkyRik2svZLWt4fov"],"license":"Apache-2.0"},"src/modules/ERC4337v07.sol":{"keccak256":"0xbee11ed2498b892b16f72984c848fea85b58d15313fffa78c1e48ca7208f9189","urls":["bzz-raw://2d9296803bd52f5e2ae84011593f686802f1cadf6c68a4ee9f97e6455463ae0f","dweb:/ipfs/QmXmWwUiV2eshxxdY5zCyJ7rxcH7bztxcAoh1scw2MPuhP"],"license":"Apache-2.0"},"src/modules/Hooks.sol":{"keccak256":"0xd1f9de45b83ae5f9f32a4d1c709d7a2b6543b1cddd09bf69d401dcdf1d154ab7","urls":["bzz-raw://bf3161edf37479825588e07039752b79792666455cc0beb1ca0e873b3be31ad4","dweb:/ipfs/QmYYpJeSsRgRx2oHcpvhqsNs7ZtDhVnxLmFpXz5eYcS8g4"],"license":"Apache-2.0"},"src/modules/Implementation.sol":{"keccak256":"0x16546d4be07865808890308750916b0a9a55e7a994a458c01edde4618f29b4e6","urls":["bzz-raw://1b1f9785b08c9f29d6849ba2d3dee89fa3ea5f3c2feec4a59a6d1040e3fbe040","dweb:/ipfs/QmU2Pm5C3Ztky7RQdCZggavyq7Eh1eS1HFqVz9jZKiMUML"],"license":"Apache-2.0"},"src/modules/Nonce.sol":{"keccak256":"0x56fbf6dc9b34ab60ae8a32ffb6f583c003bb8f4a5223ce704e982400fa403fab","urls":["bzz-raw://492f53628633b862702cf8f9b726067a722c94028133a8a4c4fcf3d0e73ad803","dweb:/ipfs/QmTHNy4XbH47YZaqKDpknb5aApjRH9HVAREHN7N5vEFWEV"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/Storage.sol":{"keccak256":"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f","urls":["bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da","dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn"],"license":"Apache-2.0"},"src/modules/auth/BaseAuth.sol":{"keccak256":"0xbf2e40def03fcb5f4a5129b2f5803e21951325b92e00126cbe1427b7c25cfefd","urls":["bzz-raw://b560905fcc4b957d27c2abed78a1e82529c89fa472e91b3d108fbfd91aa7c3f7","dweb:/ipfs/QmRjLLtTWE6dFX2kBQCgLz7ossfMxhAFgDC8Jx9XuGL6Wy"],"license":"Apache-2.0"},"src/modules/auth/BaseSig.sol":{"keccak256":"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa","urls":["bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8","dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3"],"license":"Apache-2.0"},"src/modules/auth/SelfAuth.sol":{"keccak256":"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c","urls":["bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42","dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W"],"license":"Apache-2.0"},"src/modules/auth/Stage2Auth.sol":{"keccak256":"0x5b23b530522ba1c02248d1f7470352c57fbc91c245c7c577044f93f6bb560a59","urls":["bzz-raw://c30b8e13edc7e18e4ea7bc7f4b8deaf16301a8f2bb23e7697e6f6b74882a39dc","dweb:/ipfs/QmW69XvfeJepuPBrHb1Vpkikg43P4juEGdRkUWt8GrrAfL"],"license":"Apache-2.0"},"src/modules/interfaces/IAccount.sol":{"keccak256":"0x64ca3bb59ec4fc0a60d80402802365e2d5226afe7e7aabe3b21df936c84f2bcb","urls":["bzz-raw://ccfd2381e1874cdec2f473a9a17799a3b57360c0593d68ee66fcea9c16eb39b4","dweb:/ipfs/QmcjbJpGz3Exmu4fsj953Y2bG8rtQaVMEFUgT6W2dUXomr"],"license":"MIT"},"src/modules/interfaces/IAuth.sol":{"keccak256":"0xf6fa30af2ec91d5fbeac17c9b1f2aa73b7883c9ac98745605007e57666394b91","urls":["bzz-raw://6e90a87978519462f9612f4a17e38fddc1c7bcf700ff834a1de7dce326f30353","dweb:/ipfs/QmXmWAsRRK6t4jPs4VcXrouyokxdALM28D3odX7ub48WEp"],"license":"Apache-2.0"},"src/modules/interfaces/ICheckpointer.sol":{"keccak256":"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513","urls":["bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1","dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t"],"license":"Apache-2.0"},"src/modules/interfaces/IDelegatedExtension.sol":{"keccak256":"0xa2ae897e90fd70dd4a9e172bc04d019ba9c512e72c2df65fcb6daf87dd5ceb90","urls":["bzz-raw://cdf4b7c3dfb0aef6c9dbe8b2a0542018dc756ef2252d7101bcb3186192da0a11","dweb:/ipfs/QmPHCVu1DJ7fBrPBYA5y3hoF3a3XFEBwYCZ1ErGaxPhcYL"],"license":"Apache-2.0"},"src/modules/interfaces/IERC1155Receiver.sol":{"keccak256":"0xa23d0bc29233a91085922ea8a7e2cbe8b5f3358d3f2c3cdc58adade9a171d9c1","urls":["bzz-raw://2f06b8f3ae7a45441cc26da5b2ddd15ba76d1664178958f63f536e6c5e4fd0fb","dweb:/ipfs/QmR1Rnk8ciSn5s5wNLGvpE1QNRDsBVDfDT1ZXhei2brmFj"],"license":"Apache-2.0"},"src/modules/interfaces/IERC1271.sol":{"keccak256":"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9","urls":["bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b","dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF"],"license":"Apache-2.0"},"src/modules/interfaces/IERC223Receiver.sol":{"keccak256":"0x426221c0d48b651ed692edfa5388d6e5304e94f48598a71748134b2659e3890d","urls":["bzz-raw://9e1ed2fd5e390b5b943dc07c2e0ea9e524eb37263dc72c482365c159fc3659e5","dweb:/ipfs/QmWRDBvb1cthVPm4BSzKX3J5GpGGSBuDokkpRK9x5aA7JR"],"license":"Apache-2.0"},"src/modules/interfaces/IERC721Receiver.sol":{"keccak256":"0xbe14c3b727f283a467dc2f2221d3322c5a69cd64a3aacad85acab05e94438f35","urls":["bzz-raw://43ef086c509b8b88cae78f67c4bd979fd427736972cfe56f7423371ccc154e63","dweb:/ipfs/Qmc7Yp7Z1dQ925gzEZYVNUXnWr3YomvWkXfaGYLZpoy8J3"],"license":"Apache-2.0"},"src/modules/interfaces/IERC777Receiver.sol":{"keccak256":"0xd9144d439a96b0c6439cd9a186701aa530f4f782ff09fdbf6c3ef16b78b0d4e5","urls":["bzz-raw://d1f17484eda7184db4a00106b4952f15c1517872cbfe19663d6fce4e042729b2","dweb:/ipfs/QmWdhYmLNkUpgvPpSyGHstxrFwMfhRTVmxDpe4frkUu1Qh"],"license":"Apache-2.0"},"src/modules/interfaces/IEntryPoint.sol":{"keccak256":"0xd19922ea7a8ae09072a721138dc93e175fa77ecaa3ac6f2d759d5e5e944fb665","urls":["bzz-raw://20ecea69ddd4d8787c0bdc4487dea03e90f63f4296674a12728e331a78e62620","dweb:/ipfs/QmZUrX8zEqfHZEJQjNtDUXGS47bj2UuRCLfbkLPrXsot1c"],"license":"MIT"},"src/modules/interfaces/IPartialAuth.sol":{"keccak256":"0x0d1aa021615d8e90696e71a9468331457a1babfa2ffe169654b7456e5bcb7a73","urls":["bzz-raw://bbacd149a6358ab0d4b9c588d2e3a55fc71ed4723269150d7b91ca70092f6519","dweb:/ipfs/QmUSwtrYCrRcRFsy5rCzdMPrw1FCU7ZoeXdsW6kK9yc8FK"],"license":"Apache-2.0"},"src/modules/interfaces/ISapient.sol":{"keccak256":"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359","urls":["bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489","dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"src/utils/LibOptim.sol":{"keccak256":"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde","urls":["bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81","dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x"],"license":"Apache-2.0"}},"version":1},"id":27} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/SingletonDeployer.s.sol/SingletonDeployer.json b/contracts/artifacts/wallet-contracts-v3/SingletonDeployer.s.sol/SingletonDeployer.json new file mode 100644 index 00000000..a76849b2 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/SingletonDeployer.s.sol/SingletonDeployer.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"IS_SCRIPT","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"IS_SCRIPT()":"f8ccbf47"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"IS_SCRIPT\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/erc2470-libs/script/SingletonDeployer.s.sol\":\"SingletonDeployer\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/erc2470-libs/script/SingletonDeployer.s.sol\":{\"keccak256\":\"0x3fdec03d51d77fcda6d6c681e26e7c8d4b85f1457eac91e0ec15411a7ab1e1f6\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://a690bf4481a37f3f77acdeecac089462db83f0437307610981b24c04b5202f6e\",\"dweb:/ipfs/QmUA9TSjAkqefNBW8BiRqg8XDJiJxJPxSsZHQwJJAbrYQg\"]},\"lib/erc2470-libs/src/ISingletonFactory.sol\":{\"keccak256\":\"0x0a17871e1017f36a664b877f5b0db297dc998fdf8b0ab82d00ca50d5bdde88f7\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://160bc0d890492792f85dfea939160290d90562b27154f64c39c2a615243518a6\",\"dweb:/ipfs/QmbxmqPpTAH7X45G75UjmLh3RSTDj7trMtmkGU6RXmRyEJ\"]},\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/Script.sol\":{\"keccak256\":\"0xc942e27c7baae499beb01afbbae99f24d42af9a6e4aae675bc6901b704aa8e9b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0456008adf68947247f358b62863af4a8e349549d2260f2ff9569ff0e3cf5c98\",\"dweb:/ipfs/QmdviSUj2i7o3TPN5vd2xocqGMFVqjUzaiJTZRYyPxyHPx\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"view","type":"function","name":"IS_SCRIPT","outputs":[{"internalType":"bool","name":"","type":"bool"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"lib/erc2470-libs/script/SingletonDeployer.s.sol":"SingletonDeployer"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/erc2470-libs/script/SingletonDeployer.s.sol":{"keccak256":"0x3fdec03d51d77fcda6d6c681e26e7c8d4b85f1457eac91e0ec15411a7ab1e1f6","urls":["bzz-raw://a690bf4481a37f3f77acdeecac089462db83f0437307610981b24c04b5202f6e","dweb:/ipfs/QmUA9TSjAkqefNBW8BiRqg8XDJiJxJPxSsZHQwJJAbrYQg"],"license":"UNLICENSED"},"lib/erc2470-libs/src/ISingletonFactory.sol":{"keccak256":"0x0a17871e1017f36a664b877f5b0db297dc998fdf8b0ab82d00ca50d5bdde88f7","urls":["bzz-raw://160bc0d890492792f85dfea939160290d90562b27154f64c39c2a615243518a6","dweb:/ipfs/QmbxmqPpTAH7X45G75UjmLh3RSTDj7trMtmkGU6RXmRyEJ"],"license":"UNLICENSED"},"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/Script.sol":{"keccak256":"0xc942e27c7baae499beb01afbbae99f24d42af9a6e4aae675bc6901b704aa8e9b","urls":["bzz-raw://0456008adf68947247f358b62863af4a8e349549d2260f2ff9569ff0e3cf5c98","dweb:/ipfs/QmdviSUj2i7o3TPN5vd2xocqGMFVqjUzaiJTZRYyPxyHPx"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"}},"version":1},"id":0} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Stage1Auth.sol/Stage1Auth.json b/contracts/artifacts/wallet-contracts-v3/Stage1Auth.sol/Stage1Auth.json new file mode 100644 index 00000000..5574610d --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Stage1Auth.sol/Stage1Auth.json @@ -0,0 +1 @@ +{"abi":[{"type":"constructor","inputs":[{"name":"_factory","type":"address","internalType":"address"},{"name":"_stage2","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"FACTORY","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"INIT_CODE_HASH","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"STAGE_2_IMPLEMENTATION","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getImplementation","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getStaticSignature","inputs":[{"name":"_hash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"isValidSignature","inputs":[{"name":"_hash","type":"bytes32","internalType":"bytes32"},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"view"},{"type":"function","name":"recoverPartialSignature","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"threshold","type":"uint256","internalType":"uint256"},{"name":"weight","type":"uint256","internalType":"uint256"},{"name":"isValidImage","type":"bool","internalType":"bool"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"checkpoint","type":"uint256","internalType":"uint256"},{"name":"opHash","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"recoverSapientSignature","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"setStaticSignature","inputs":[{"name":"_hash","type":"bytes32","internalType":"bytes32"},{"name":"_address","type":"address","internalType":"address"},{"name":"_timestamp","type":"uint96","internalType":"uint96"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateImageHash","inputs":[{"name":"_imageHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateImplementation","inputs":[{"name":"_implementation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"payable"},{"type":"event","name":"ImageHashUpdated","inputs":[{"name":"newImageHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"ImplementationUpdated","inputs":[{"name":"newImplementation","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"StaticSignatureSet","inputs":[{"name":"_hash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_address","type":"address","indexed":false,"internalType":"address"},{"name":"_timestamp","type":"uint96","indexed":false,"internalType":"uint96"}],"anonymous":false},{"type":"error","name":"ImageHashIsZero","inputs":[]},{"type":"error","name":"InvalidERC1271Signature","inputs":[{"name":"_opHash","type":"bytes32","internalType":"bytes32"},{"name":"_signer","type":"address","internalType":"address"},{"name":"_signature","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"InvalidKind","inputs":[{"name":"kind","type":"uint8","internalType":"uint8"}]},{"type":"error","name":"InvalidSapientSignature","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"InvalidSignatureFlag","inputs":[{"name":"_flag","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidSignatureType","inputs":[{"name":"_type","type":"bytes1","internalType":"bytes1"}]},{"type":"error","name":"InvalidSignatureWeight","inputs":[{"name":"_threshold","type":"uint256","internalType":"uint256"},{"name":"_weight","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidStaticSignatureExpired","inputs":[{"name":"_opHash","type":"bytes32","internalType":"bytes32"},{"name":"_expires","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidStaticSignatureWrongCaller","inputs":[{"name":"_opHash","type":"bytes32","internalType":"bytes32"},{"name":"_caller","type":"address","internalType":"address"},{"name":"_expectedCaller","type":"address","internalType":"address"}]},{"type":"error","name":"LowWeightChainedSignature","inputs":[{"name":"_signature","type":"bytes","internalType":"bytes"},{"name":"_threshold","type":"uint256","internalType":"uint256"},{"name":"_weight","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"OnlySelf","inputs":[{"name":"_sender","type":"address","internalType":"address"}]},{"type":"error","name":"UnusedSnapshot","inputs":[{"name":"_snapshot","type":"tuple","internalType":"struct Snapshot","components":[{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"checkpoint","type":"uint256","internalType":"uint256"}]}]},{"type":"error","name":"WrongChainedCheckpointOrder","inputs":[{"name":"_nextCheckpoint","type":"uint256","internalType":"uint256"},{"name":"_checkpoint","type":"uint256","internalType":"uint256"}]}],"bytecode":{"object":"0x60e0806040523461013e57604081612a57803803809161001f8285610143565b83398101031261013e5761003e602061003783610166565b9201610166565b604051909190606081016001600160401b03811182821017610128576040908152602f82527f6041600e3d396021805130553df33d3d36153402601f57363d3d373d363d305460208301526e5af43d82803e903d91601f57fd5bf360881b82820152519060005b602f811061011357505030604f820152604f81526100c4606f82610143565b6020815191012060805260a05260c0526040516128dc908161017b82396080518181816107ca01526116b1015260a0518181816109180152611682015260c05181818161087f01526109e50152f35b806020809284010151828286010152016100a5565b634e487b7160e01b600052604160045260246000fd5b600080fd5b601f909101601f19168101906001600160401b0382119082101761012857604052565b51906001600160a01b038216820361013e5756fe6080604052600436101561001257600080fd5b60003560e01c8063025b22bc146100c757806313792a4a146100c25780631626ba7e146100bd578063257671f5146100b857806329561426146100b35780632dd31000146100ae57806392dcb3fc146100a95780639f69ef54146100a4578063aaf10f421461009f578063ad55366b1461009a5763f727ef1c1461009557600080fd5b610aa6565b610a5a565b610a09565b61099a565b61093c565b6108cd565b6107ed565b610794565b61070c565b61060f565b610115565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036100ef57565b600080fd5b359073ffffffffffffffffffffffffffffffffffffffff821682036100ef57565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef5760043573ffffffffffffffffffffffffffffffffffffffff811681036100ef573033036101715761016f90610fbe565b005b7fa19dbf00000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff8211176101ea57604052565b61019f565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176101ea57604052565b6040519061023f60e0836101ef565b565b6040519061023f610120836101ef565b359060ff821682036100ef57565b359081151582036100ef57565b67ffffffffffffffff81116101ea5760051b60200190565b92919267ffffffffffffffff82116101ea57604051916102cc60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601846101ef565b8294818452818301116100ef578281602093846000960137010152565b9080601f830112156100ef5781602061030493359101610284565b90565b81601f820112156100ef5780359061031e8261026c565b9261032c60405194856101ef565b82845260208085019360051b830101918183116100ef5760208101935b83851061035857505050505090565b843567ffffffffffffffff81116100ef57820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082860301126100ef5761039f610230565b916103ac602083016100f4565b83526040820135602084015260608201359267ffffffffffffffff84116100ef5760e0836103e18860208098819801016102e9565b6040840152608081013560608401526103fc60a0820161025f565b608084015261040d60c0820161025f565b60a0840152013560c0820152815201940193610349565b9080601f830112156100ef57813561043b8161026c565b9261044960405194856101ef565b81845260208085019260051b8201019283116100ef57602001905b8282106104715750505090565b6020809161047e846100f4565b815201910190610464565b9181601f840112156100ef5782359167ffffffffffffffff83116100ef57602083818601950101116100ef57565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126100ef5760043567ffffffffffffffff81116100ef576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82850301126100ef57610529610241565b9061053681600401610251565b82526105446024820161025f565b6020830152604481013567ffffffffffffffff81116100ef5784600461056c92840101610307565b6040830152606481013560608301526084810135608083015260a481013567ffffffffffffffff81116100ef578460046105a8928401016102e9565b60a083015260c481013560c083015260e481013560e083015261010481013567ffffffffffffffff81116100ef57600485916105e5930101610424565b610100820152916024359067ffffffffffffffff82116100ef5761060b91600401610489565b9091565b346100ef5761061d366104b7565b9091610100810192610638610633855151610c16565b610c36565b9160005b8551805182101561069f579061069961067461065a83600195610cb4565b5173ffffffffffffffffffffffffffffffffffffffff1690565b61067e8388610cb4565b9073ffffffffffffffffffffffffffffffffffffffff169052565b0161063c565b50508383866106b43361067e83515185610cb4565b526106c081848461100d565b50156106d25760405160018152602090f35b610708906040519384937ff58cc8b500000000000000000000000000000000000000000000000000000000855260048501610e8b565b0390fd5b346100ef5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef5760043560243567ffffffffffffffff81116100ef5760209161076461076a923690600401610489565b91610f72565b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b346100ef5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346100ef5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef576004353033036101715780156108a3576020817f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf855604051908152a161016f7f0000000000000000000000000000000000000000000000000000000000000000610fbe565b7f4294d1270000000000000000000000000000000000000000000000000000000060005260046000fd5b346100ef5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100ef5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef5760406109786004356111f2565b73ffffffffffffffffffffffffffffffffffffffff8351921682526020820152f35b346100ef5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100ef5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef576020305473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346100ef5760c0610a76600080610a70366104b7565b9161130b565b92610a8283929361161e565b906040519586526020860152151560408501526060840152608083015260a0820152f35b346100ef5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef57600435610ae06100cc565b604435916bffffffffffffffffffffffff83168093036100ef57303303610171577febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b19273ffffffffffffffffffffffffffffffffffffffff60609360405160208101610ba782610b7b88849190602060408401937fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e8681520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018452836101ef565b847fffffffffffffffffffffffffffffffffffffffff00000000000000000000000084891b161791519020556040519384521660208301526040820152a1005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9060018201809211610c2457565b610be7565b91908201809211610c2457565b90610c408261026c565b610c4d60405191826101ef565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610c7b829461026c565b0190602036910137565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8051821015610cc85760209160051b010190565b610c85565b919082519283825260005b848110610d175750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201610cd8565b9080602083519182815201916020808360051b8301019401926000915b838310610d5857505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080610dcb604085015160e0604086015260e0850190610ccd565b936060810151606085015260808101511515608085015260a0810151151560a0850152015191015297019301930191939290610d49565b906020808351928381520192019060005b818110610e205750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101610e13565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b91610f64610304949260408552610ea860408601825160ff169052565b602081015115156060860152610100610f1d610ed5604084015161012060808a0152610160890190610d2c565b606084015160a0890152608084015160c089015260a08401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08983030160e08a0152610ccd565b9160c08101518288015260e081015161012088015201517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086830301610140870152610e02565b926020818503910152610e4c565b90610f8f9291610f80611197565b906003825260e082015261100d565b5015610fb9577f1626ba7e0000000000000000000000000000000000000000000000000000000090565b600090565b60207f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca039180305573ffffffffffffffffffffffffffffffffffffffff60405191168152a1565b9015610cc85790565b91907f80000000000000000000000000000000000000000000000000000000000000008061106461103e8585611004565b357fff000000000000000000000000000000000000000000000000000000000000001690565b16146110c35760009182916110789461130b565b9050919091928082106110935750506110909061161e565b91565b7ffd41fcba0000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b50506110ce906116ed565b906110d8826111f2565b42811115611165575073ffffffffffffffffffffffffffffffffffffffff8116801515908161115a575b5061110e575060019190565b7f8945c3130000000000000000000000000000000000000000000000000000000060005260048390523360245273ffffffffffffffffffffffffffffffffffffffff1660445260646000fd5b905033141538611102565b7ff95b6ab700000000000000000000000000000000000000000000000000000000600052600484905260245260446000fd5b60405190610120820182811067ffffffffffffffff8211176101ea576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b60405161125e816112326020820194859190602060408401937fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e8681520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826101ef565b51902054906bffffffffffffffffffffffff8260601c921690565b60405190611286826101ce565b60006020838281520152565b909392938483116100ef5784116100ef578101920390565b908160409103126100ef576020604051916112c4836101ce565b805183520151602082015290565b60409073ffffffffffffffffffffffffffffffffffffffff61030494931681528160208201520190610ccd565b6040513d6000823e3d90fd5b909491939291853560f81c60019093819087611325611279565b9360408089161480611600575b6114fe575b5050506001808616146114d85760028581161460208501526007600286901c1688820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691019080969181966020166113a79060051c90565b6113b090610c16565b8a820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101959098899a816113fc846116ed565b98899361140893611292565b91611412936119ea565b909861142691600052602052604060002090565b9061143991600052602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff1661146291600052602052604060002090565b948151908682151592836114cd575b5050816114be575b506114815750565b6040517fccbb534f000000000000000000000000000000000000000000000000000000008152815160048201526020909101516024820152604490fd5b90506020820151101538611479565b141591508638611471565b866114f397929495506114eb9398611292565b939092611779565b919394909293929190565b8a81013560601c985060140192509087908a90849015611522575b50829150611337565b60038101955073ffffffffffffffffffffffffffffffffffffffff945081013560e81c926040926115a5929091611570916115699189906115638983610c29565b92611292565b3691610284565b83519586809481937fccce3bc800000000000000000000000000000000000000000000000000000000835230600484016112d2565b0392165afa80156115fb576115c3926000916115cc575b5092610c29565b86388981611519565b6115ee915060403d6040116115f4575b6115e681836101ef565b8101906112aa565b386115bc565b503d6115dc565b6112ff565b5073ffffffffffffffffffffffffffffffffffffffff891615611332565b73ffffffffffffffffffffffffffffffffffffffff9060405160208101917fff0000000000000000000000000000000000000000000000000000000000000083527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060601b16602183015260358201527f00000000000000000000000000000000000000000000000000000000000000006055820152605581526116e46075826101ef565b51902016301490565b61123261174f61170d611707602085015115153090612266565b93612361565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b51902090565b9061176f9060409396959496606084526060840191610e4c565b9460208201520152565b9194929092600095600095600095600095600095611795611197565b60028152937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9460005b8281106117ec575050505050505080511515806117de575b6114815750565b5060208101518411156117d7565b600381019d50959b5093995091975092909190611810908b9085013560e81c610c29565b958a6000848903611954575089915b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c03611924575090600161185989611860948789611292565b908b61130b565b9c939c9b929b9a919a99909a9b9d8e9d9e8f905b106118de5750928b8851146118d5575b808b10156118a357508a60c085015289929592959491949390936117bf565b7f37daf62b0000000000000000000000000000000000000000000000000000000060005260048b905260245260446000fd5b60008852611884565b8d8f6107086118ef85858c8e611292565b9390926040519485947fb006aba000000000000000000000000000000000000000000000000000000000865260048601611755565b9798999a91600161193a8b61194194888a611292565b908661130b565b50929d919c909b929a9092918e8e611874565b9161181f565b908160209103126100ef57517fffffffff00000000000000000000000000000000000000000000000000000000811681036100ef5790565b604090610304949281528160208201520191610e4c565b73ffffffffffffffffffffffffffffffffffffffff610304959360609383521660208201528160408201520191610e4c565b908160209103126100ef575190565b9391909360009460009460005b818110611a05575050505050565b8481013560f881901c9860019092019788979692909160fc1c9889156121ff5750600189146121bf5760028914611ff25760038914611fc35760048914611f425760068914611e9c5760058914611e4e5760078914611d875760088914611d315760098914611c0857600a8914611aa5577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b90919293949596975060038916978815611bf7575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691019081019081611b1d918787611292565b6040517f898bd92100000000000000000000000000000000000000000000000000000000815293918491611b55918a60048501611992565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa9182156115fb57611b9893600093611bc4575b5060ff909a168091019a6126cd565b908015611bbe5790611bb291600052602052604060002090565b955b93929190936119f7565b50611bb2565b60ff919350611be99060203d8111611bf0575b611be181836101ef565b8101906119db565b9290611b89565b503d611bd7565b8084013560f81c9850600101611aba565b90919293949596975060038916978815611d20575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691019081019081611c80918787611292565b6040517f13792a4a00000000000000000000000000000000000000000000000000000000815293918491611cb8918b60048501610e8b565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa9182156115fb57611cfa93600093611bc4575060ff909a168091019a6126cd565b908015611d1a5790611d1491600052602052604060002090565b95611bb4565b50611d14565b8084013560f81c9850600101611c1d565b985060208701975094959394929391929091820135611d4f86612674565b8114611d5f575b611cfa9061268e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9850611d56565b975090919293949597600f16968715611e3c575b60206000611dad611e1a9a9b8661253c565b9c9092918a604051611df0816112328a82019485603c917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008252601c8201520190565b51902092604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa156115fb57611cfa9060ff6000519a168091019961257f565b600189019883013560f81c9750611d9b565b985060208701975094959394929391929091820135808514611e74575b611cfa90612635565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9850611e6b565b989091929394959662ffffff9850611ec4611ebe600c8416603f9060021c1690565b60ff1690565b918215611f2e575b6003168015611f1d575b908190611f0190611ef9908781013560e81c906003019c168c01809c8989611292565b90898b6119ea565b911115611f14575b90611cfa92916125ea565b99820199611f09565b50600281019084013560f01c611ed6565b8482013560f81c9250600190910190611ecc565b975097611f98611fa5929394959697600f611fad93169085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290830180938686611292565b9086886119ea565b90611d1492980198600052602052604060002090565b985096509394929391929091908082013590602001968015611d1a5790611d1491600052602052604060002090565b909192939495969750600389169788156121ae575b8084013560601c9961206691601401906120269060021c600316611ebe565b9085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b908101906120ca60208c61207c85858b8b611292565b919073ffffffffffffffffffffffffffffffffffffffff8c604051968795869485937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611992565b0392165afa9081156115fb577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091612180575b50160361213c57509060ff611cfa9299168091019961257f565b61070861214d8c9389938989611292565b906040519485947fb2fed7ae000000000000000000000000000000000000000000000000000000008652600486016119a9565b6121a1915060203d81116121a7575b61219981836101ef565b81019061195a565b38612122565b503d61218f565b8381013560f81c9850600101612007565b98600f919293949596979850169687156121ee575b6014810197611cfa9160ff9091169084013560601c61257f565b8281013560f81c97506001016121d4565b98509091929394959698600f16978815612251575b5060206000612227611e1a9a9b8661253c565b9c90916040519384938c859094939260ff6060936080840197845216602083015260408201520152565b60018101995083013560f81c97506020612214565b15612316576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a0815261174f60c0826101ef565b469061226f565b805160209091019060005b8181106123355750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101612328565b61010081015160405161237c8161123260208201809561231d565b5190209061238b815160ff1690565b60ff8116806124045750509061174f6123a7604084015161276b565b9261123260806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b6001810361246257505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4669381019384529081019190915260608101929092529061174f8160808101611232565b600281036124b857505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e46020820190815291810192909252606082019290925261174f8160808101611232565b60030361250c575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4666020820190815291810192909252606082019290925261174f8160808101611232565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff8111610c245791565b90604051907fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208301937f53657175656e6365207369676e65723a0a000000000000000000000000000000855260601b16603183015260458201526045815261174f6065826101ef565b916040519160208301937f53657175656e6365206e657374656420636f6e6669673a0a000000000000000085526038840152605883015260788201526078815261174f6098826101ef565b60405160208101917f53657175656e636520737461746963206469676573743a0a0000000000000000835260388201526038815261174f6058826101ef565b61123261174f61170d611707600060208601511515612266565b60405160208101917f53657175656e636520616e792061646472657373207375626469676573743a0a835260408201526040815261174f6060826101ef565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e63652073617069656e7420636f6e6669673a0a00000000000000865260601b166039840152604d830152606d820152606d815261174f608d826101ef565b805160209091019060005b8181106127555750505090565b8251845260209384019390920191600101612748565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06127b161279b8361026c565b926127a960405194856101ef565b80845261026c565b0136602083013760005b835181101561288d57806127d160019286610cb4565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152612879610120826101ef565b5190206128868285610cb4565b52016127bb565b5090915060405161174f8161123260208201809561273d56fea2646970667358221220da3084895f9984b56bf4c4cf62d93ef7d2a70047d650e63bd53323224b4508e964736f6c634300081c0033","sourceMap":"334:1755:53:-:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;334:1755:53;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;334:1755:53;;;;;;-1:-1:-1;2177:99:30;334:1755:53;2177:99:30;;;;1335:4:53;;;2177:99:30;;;;1273:70:53;;;;;;;:::i;:::-;334:1755;2177:99:30;;1273:70:53;;1263:81;1351:29;;1386:18;;1410:32;;334:1755;;;;;;;;1351:29;334:1755;;;;;;;;;;1386:18;334:1755;;;;;;;;;;1410:32;334:1755;;;;;;;;;;;2177:99:30;;334:1755:53;2177:99:30;;;;;;;;;;;;;;;334:1755:53;;;;-1:-1:-1;334:1755:53;;;;;-1:-1:-1;334:1755:53;;-1:-1:-1;334:1755:53;;;;;;;-1:-1:-1;;334:1755:53;;;;-1:-1:-1;;;;;334:1755:53;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;334:1755:53;;;;;;:::o","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436101561001257600080fd5b60003560e01c8063025b22bc146100c757806313792a4a146100c25780631626ba7e146100bd578063257671f5146100b857806329561426146100b35780632dd31000146100ae57806392dcb3fc146100a95780639f69ef54146100a4578063aaf10f421461009f578063ad55366b1461009a5763f727ef1c1461009557600080fd5b610aa6565b610a5a565b610a09565b61099a565b61093c565b6108cd565b6107ed565b610794565b61070c565b61060f565b610115565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036100ef57565b600080fd5b359073ffffffffffffffffffffffffffffffffffffffff821682036100ef57565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef5760043573ffffffffffffffffffffffffffffffffffffffff811681036100ef573033036101715761016f90610fbe565b005b7fa19dbf00000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff8211176101ea57604052565b61019f565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176101ea57604052565b6040519061023f60e0836101ef565b565b6040519061023f610120836101ef565b359060ff821682036100ef57565b359081151582036100ef57565b67ffffffffffffffff81116101ea5760051b60200190565b92919267ffffffffffffffff82116101ea57604051916102cc60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601846101ef565b8294818452818301116100ef578281602093846000960137010152565b9080601f830112156100ef5781602061030493359101610284565b90565b81601f820112156100ef5780359061031e8261026c565b9261032c60405194856101ef565b82845260208085019360051b830101918183116100ef5760208101935b83851061035857505050505090565b843567ffffffffffffffff81116100ef57820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082860301126100ef5761039f610230565b916103ac602083016100f4565b83526040820135602084015260608201359267ffffffffffffffff84116100ef5760e0836103e18860208098819801016102e9565b6040840152608081013560608401526103fc60a0820161025f565b608084015261040d60c0820161025f565b60a0840152013560c0820152815201940193610349565b9080601f830112156100ef57813561043b8161026c565b9261044960405194856101ef565b81845260208085019260051b8201019283116100ef57602001905b8282106104715750505090565b6020809161047e846100f4565b815201910190610464565b9181601f840112156100ef5782359167ffffffffffffffff83116100ef57602083818601950101116100ef57565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126100ef5760043567ffffffffffffffff81116100ef576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82850301126100ef57610529610241565b9061053681600401610251565b82526105446024820161025f565b6020830152604481013567ffffffffffffffff81116100ef5784600461056c92840101610307565b6040830152606481013560608301526084810135608083015260a481013567ffffffffffffffff81116100ef578460046105a8928401016102e9565b60a083015260c481013560c083015260e481013560e083015261010481013567ffffffffffffffff81116100ef57600485916105e5930101610424565b610100820152916024359067ffffffffffffffff82116100ef5761060b91600401610489565b9091565b346100ef5761061d366104b7565b9091610100810192610638610633855151610c16565b610c36565b9160005b8551805182101561069f579061069961067461065a83600195610cb4565b5173ffffffffffffffffffffffffffffffffffffffff1690565b61067e8388610cb4565b9073ffffffffffffffffffffffffffffffffffffffff169052565b0161063c565b50508383866106b43361067e83515185610cb4565b526106c081848461100d565b50156106d25760405160018152602090f35b610708906040519384937ff58cc8b500000000000000000000000000000000000000000000000000000000855260048501610e8b565b0390fd5b346100ef5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef5760043560243567ffffffffffffffff81116100ef5760209161076461076a923690600401610489565b91610f72565b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b346100ef5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346100ef5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef576004353033036101715780156108a3576020817f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf855604051908152a161016f7f0000000000000000000000000000000000000000000000000000000000000000610fbe565b7f4294d1270000000000000000000000000000000000000000000000000000000060005260046000fd5b346100ef5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100ef5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef5760406109786004356111f2565b73ffffffffffffffffffffffffffffffffffffffff8351921682526020820152f35b346100ef5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100ef5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef576020305473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346100ef5760c0610a76600080610a70366104b7565b9161130b565b92610a8283929361161e565b906040519586526020860152151560408501526060840152608083015260a0820152f35b346100ef5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ef57600435610ae06100cc565b604435916bffffffffffffffffffffffff83168093036100ef57303303610171577febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b19273ffffffffffffffffffffffffffffffffffffffff60609360405160208101610ba782610b7b88849190602060408401937fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e8681520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018452836101ef565b847fffffffffffffffffffffffffffffffffffffffff00000000000000000000000084891b161791519020556040519384521660208301526040820152a1005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9060018201809211610c2457565b610be7565b91908201809211610c2457565b90610c408261026c565b610c4d60405191826101ef565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610c7b829461026c565b0190602036910137565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8051821015610cc85760209160051b010190565b610c85565b919082519283825260005b848110610d175750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201610cd8565b9080602083519182815201916020808360051b8301019401926000915b838310610d5857505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080610dcb604085015160e0604086015260e0850190610ccd565b936060810151606085015260808101511515608085015260a0810151151560a0850152015191015297019301930191939290610d49565b906020808351928381520192019060005b818110610e205750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101610e13565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b91610f64610304949260408552610ea860408601825160ff169052565b602081015115156060860152610100610f1d610ed5604084015161012060808a0152610160890190610d2c565b606084015160a0890152608084015160c089015260a08401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08983030160e08a0152610ccd565b9160c08101518288015260e081015161012088015201517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086830301610140870152610e02565b926020818503910152610e4c565b90610f8f9291610f80611197565b906003825260e082015261100d565b5015610fb9577f1626ba7e0000000000000000000000000000000000000000000000000000000090565b600090565b60207f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca039180305573ffffffffffffffffffffffffffffffffffffffff60405191168152a1565b9015610cc85790565b91907f80000000000000000000000000000000000000000000000000000000000000008061106461103e8585611004565b357fff000000000000000000000000000000000000000000000000000000000000001690565b16146110c35760009182916110789461130b565b9050919091928082106110935750506110909061161e565b91565b7ffd41fcba0000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b50506110ce906116ed565b906110d8826111f2565b42811115611165575073ffffffffffffffffffffffffffffffffffffffff8116801515908161115a575b5061110e575060019190565b7f8945c3130000000000000000000000000000000000000000000000000000000060005260048390523360245273ffffffffffffffffffffffffffffffffffffffff1660445260646000fd5b905033141538611102565b7ff95b6ab700000000000000000000000000000000000000000000000000000000600052600484905260245260446000fd5b60405190610120820182811067ffffffffffffffff8211176101ea576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b60405161125e816112326020820194859190602060408401937fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e8681520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826101ef565b51902054906bffffffffffffffffffffffff8260601c921690565b60405190611286826101ce565b60006020838281520152565b909392938483116100ef5784116100ef578101920390565b908160409103126100ef576020604051916112c4836101ce565b805183520151602082015290565b60409073ffffffffffffffffffffffffffffffffffffffff61030494931681528160208201520190610ccd565b6040513d6000823e3d90fd5b909491939291853560f81c60019093819087611325611279565b9360408089161480611600575b6114fe575b5050506001808616146114d85760028581161460208501526007600286901c1688820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691019080969181966020166113a79060051c90565b6113b090610c16565b8a820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101959098899a816113fc846116ed565b98899361140893611292565b91611412936119ea565b909861142691600052602052604060002090565b9061143991600052602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff1661146291600052602052604060002090565b948151908682151592836114cd575b5050816114be575b506114815750565b6040517fccbb534f000000000000000000000000000000000000000000000000000000008152815160048201526020909101516024820152604490fd5b90506020820151101538611479565b141591508638611471565b866114f397929495506114eb9398611292565b939092611779565b919394909293929190565b8a81013560601c985060140192509087908a90849015611522575b50829150611337565b60038101955073ffffffffffffffffffffffffffffffffffffffff945081013560e81c926040926115a5929091611570916115699189906115638983610c29565b92611292565b3691610284565b83519586809481937fccce3bc800000000000000000000000000000000000000000000000000000000835230600484016112d2565b0392165afa80156115fb576115c3926000916115cc575b5092610c29565b86388981611519565b6115ee915060403d6040116115f4575b6115e681836101ef565b8101906112aa565b386115bc565b503d6115dc565b6112ff565b5073ffffffffffffffffffffffffffffffffffffffff891615611332565b73ffffffffffffffffffffffffffffffffffffffff9060405160208101917fff0000000000000000000000000000000000000000000000000000000000000083527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060601b16602183015260358201527f00000000000000000000000000000000000000000000000000000000000000006055820152605581526116e46075826101ef565b51902016301490565b61123261174f61170d611707602085015115153090612266565b93612361565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b51902090565b9061176f9060409396959496606084526060840191610e4c565b9460208201520152565b9194929092600095600095600095600095600095611795611197565b60028152937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9460005b8281106117ec575050505050505080511515806117de575b6114815750565b5060208101518411156117d7565b600381019d50959b5093995091975092909190611810908b9085013560e81c610c29565b958a6000848903611954575089915b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c03611924575090600161185989611860948789611292565b908b61130b565b9c939c9b929b9a919a99909a9b9d8e9d9e8f905b106118de5750928b8851146118d5575b808b10156118a357508a60c085015289929592959491949390936117bf565b7f37daf62b0000000000000000000000000000000000000000000000000000000060005260048b905260245260446000fd5b60008852611884565b8d8f6107086118ef85858c8e611292565b9390926040519485947fb006aba000000000000000000000000000000000000000000000000000000000865260048601611755565b9798999a91600161193a8b61194194888a611292565b908661130b565b50929d919c909b929a9092918e8e611874565b9161181f565b908160209103126100ef57517fffffffff00000000000000000000000000000000000000000000000000000000811681036100ef5790565b604090610304949281528160208201520191610e4c565b73ffffffffffffffffffffffffffffffffffffffff610304959360609383521660208201528160408201520191610e4c565b908160209103126100ef575190565b9391909360009460009460005b818110611a05575050505050565b8481013560f881901c9860019092019788979692909160fc1c9889156121ff5750600189146121bf5760028914611ff25760038914611fc35760048914611f425760068914611e9c5760058914611e4e5760078914611d875760088914611d315760098914611c0857600a8914611aa5577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b90919293949596975060038916978815611bf7575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691019081019081611b1d918787611292565b6040517f898bd92100000000000000000000000000000000000000000000000000000000815293918491611b55918a60048501611992565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa9182156115fb57611b9893600093611bc4575b5060ff909a168091019a6126cd565b908015611bbe5790611bb291600052602052604060002090565b955b93929190936119f7565b50611bb2565b60ff919350611be99060203d8111611bf0575b611be181836101ef565b8101906119db565b9290611b89565b503d611bd7565b8084013560f81c9850600101611aba565b90919293949596975060038916978815611d20575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691019081019081611c80918787611292565b6040517f13792a4a00000000000000000000000000000000000000000000000000000000815293918491611cb8918b60048501610e8b565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa9182156115fb57611cfa93600093611bc4575060ff909a168091019a6126cd565b908015611d1a5790611d1491600052602052604060002090565b95611bb4565b50611d14565b8084013560f81c9850600101611c1d565b985060208701975094959394929391929091820135611d4f86612674565b8114611d5f575b611cfa9061268e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9850611d56565b975090919293949597600f16968715611e3c575b60206000611dad611e1a9a9b8661253c565b9c9092918a604051611df0816112328a82019485603c917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008252601c8201520190565b51902092604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa156115fb57611cfa9060ff6000519a168091019961257f565b600189019883013560f81c9750611d9b565b985060208701975094959394929391929091820135808514611e74575b611cfa90612635565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9850611e6b565b989091929394959662ffffff9850611ec4611ebe600c8416603f9060021c1690565b60ff1690565b918215611f2e575b6003168015611f1d575b908190611f0190611ef9908781013560e81c906003019c168c01809c8989611292565b90898b6119ea565b911115611f14575b90611cfa92916125ea565b99820199611f09565b50600281019084013560f01c611ed6565b8482013560f81c9250600190910190611ecc565b975097611f98611fa5929394959697600f611fad93169085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290830180938686611292565b9086886119ea565b90611d1492980198600052602052604060002090565b985096509394929391929091908082013590602001968015611d1a5790611d1491600052602052604060002090565b909192939495969750600389169788156121ae575b8084013560601c9961206691601401906120269060021c600316611ebe565b9085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b908101906120ca60208c61207c85858b8b611292565b919073ffffffffffffffffffffffffffffffffffffffff8c604051968795869485937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611992565b0392165afa9081156115fb577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091612180575b50160361213c57509060ff611cfa9299168091019961257f565b61070861214d8c9389938989611292565b906040519485947fb2fed7ae000000000000000000000000000000000000000000000000000000008652600486016119a9565b6121a1915060203d81116121a7575b61219981836101ef565b81019061195a565b38612122565b503d61218f565b8381013560f81c9850600101612007565b98600f919293949596979850169687156121ee575b6014810197611cfa9160ff9091169084013560601c61257f565b8281013560f81c97506001016121d4565b98509091929394959698600f16978815612251575b5060206000612227611e1a9a9b8661253c565b9c90916040519384938c859094939260ff6060936080840197845216602083015260408201520152565b60018101995083013560f81c97506020612214565b15612316576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a0815261174f60c0826101ef565b469061226f565b805160209091019060005b8181106123355750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101612328565b61010081015160405161237c8161123260208201809561231d565b5190209061238b815160ff1690565b60ff8116806124045750509061174f6123a7604084015161276b565b9261123260806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b6001810361246257505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4669381019384529081019190915260608101929092529061174f8160808101611232565b600281036124b857505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e46020820190815291810192909252606082019290925261174f8160808101611232565b60030361250c575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4666020820190815291810192909252606082019290925261174f8160808101611232565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff8111610c245791565b90604051907fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208301937f53657175656e6365207369676e65723a0a000000000000000000000000000000855260601b16603183015260458201526045815261174f6065826101ef565b916040519160208301937f53657175656e6365206e657374656420636f6e6669673a0a000000000000000085526038840152605883015260788201526078815261174f6098826101ef565b60405160208101917f53657175656e636520737461746963206469676573743a0a0000000000000000835260388201526038815261174f6058826101ef565b61123261174f61170d611707600060208601511515612266565b60405160208101917f53657175656e636520616e792061646472657373207375626469676573743a0a835260408201526040815261174f6060826101ef565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e63652073617069656e7420636f6e6669673a0a00000000000000865260601b166039840152604d830152606d820152606d815261174f608d826101ef565b805160209091019060005b8181106127555750505090565b8251845260209384019390920191600101612748565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06127b161279b8361026c565b926127a960405194856101ef565b80845261026c565b0136602083013760005b835181101561288d57806127d160019286610cb4565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152612879610120826101ef565b5190206128868285610cb4565b52016127bb565b5090915060405161174f8161123260208201809561273d56fea2646970667358221220da3084895f9984b56bf4c4cf62d93ef7d2a70047d650e63bd53323224b4508e964736f6c634300081c0033","sourceMap":"334:1755:53:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;401:4:52;379:10;:27;375:75;;659:15:46;;;:::i;:::-;334:1755:53;375:75:52;423:20;-1:-1:-1;423:20:52;379:10;334:1755:53;;;-1:-1:-1;423:20:52;334:1755:53;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;334:1755:53;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;4682:22:50;;;;;;4668:48;4682:33;:22;;334:1755:53;4682:33:50;:::i;:::-;4668:48;:::i;:::-;4728:13;-1:-1:-1;4778:3:50;4747:22;;334:1755:53;;4743:33:50;;;;;4810:25;4791:44;4810:25;;;4714:1;4810:25;;:::i;:::-;334:1755:53;;;;;4810:25:50;4791:44;;;;:::i;:::-;334:1755:53;;;;;;4791:44:50;334:1755:53;4728:13:50;;4743:33;;;;;;4848:57;4895:10;4848:57;4862:22;;334:1755:53;4848:57:50;;:::i;:::-;4911:38;4974:41;;;;;:::i;:::-;5025:8;;5021:81;;334:1755:53;;4714:1:50;334:1755:53;;;;;5021:81:50;5050:45;334:1755:53;;;5050:45:50;;;;;;334:1755:53;5050:45:50;;;:::i;:::-;;;;334:1755:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;615:39;334:1755;;;;;;;;;;;;;;;;401:4:52;379:10;:27;375:75;;1576:24:53;;1572:69;;334:1755;260:41:49;1705:28:53;260:41:49;943:66:53;260:41:49;334:1755:53;;;;;1705:28;1816:22;;;:::i;1572:69::-;1617:17;-1:-1:-1;1617:17:53;334:1755;-1:-1:-1;1617:17:53;334:1755;;;;;;;;;;;;;;;688:32;334:1755;;;;;;;;;;;;;;;;2500:26:50;334:1755:53;;2500:26:50;:::i;:::-;334:1755:53;;;;;;;;;;;;;;;;;;;;;;;;;;;769:47;334:1755;;;;;;;;;;;;;;;;1252:47:46;;334:1755:53;;;;;;;;;;;;;5879:56:50;-1:-1:-1;334:1755:53;;;;:::i;:::-;5879:56:50;;:::i;:::-;5956:24;;;;;;:::i;:::-;334:1755:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;401:4:52;379:10;:27;375:75;;2998:47:50;334:1755:53;;;;;;;552:25:49;;;;;;;334:1755:53;;;;;;;834:66:50;334:1755:53;;;;;552:25:49;;;;;;;;;:::i;:::-;334:1755:53;;;;;;2051:76:50;334:1755:53;;542:36:49;;584:40;334:1755:53;;;;;;;;;;;;;;2998:47:50;334:1755:53;;;;;;;;;;;;;4714:1:50;334:1755:53;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;334:1755:53;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;334:1755:53;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;334:1755:53;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;5170:322:50:-;;5358:40;5170:322;;334:1755:53;;:::i;:::-;2556:4:48;;;;4826:15;;;2556:4;5358:40:50;:::i;:::-;5408:8;;5404:45;;334:1755:53;5170:322:50;:::o;5404:45::-;334:1755:53;5426:16:50;:::o;880:176:46:-;334:1755:53;1013:38:46;880:176;1125:46;;;334:1755:53;;;;;;;1013:38:46;880:176::o;334:1755:53:-;;;;;;:::o;3301:1109:50:-;;;334:1755:53;3555:13:50;;;;;;:::i;:::-;;334:1755:53;;;;3555:13:50;3579:20;:28;3575:429;;3566:1;4188:56;;;;;;:::i;:::-;4146:98;;;;;4282:18;;;;4278:87;;4381:24;;;;;:::i;:::-;3301:1109;:::o;4278:87::-;4317:41;3566:1;4317:41;3772:48;334:1755:53;;;;3566:1:50;4317:41;3575:429;3626:15;;;;;:::i;:::-;3686:27;;;;:::i;:::-;3738:15;3725:28;;;3721:108;;334:1755:53;;;;3841:18:50;;;:40;;;;3575:429;3837:131;;;3976:21;3984:4;3976:21;;:::o;3837:131::-;3900:59;3566:1;3900:59;;334:1755:53;;;3942:10:50;334:1755:53;;;;;;;3566:1:50;4317:41;3841:40;3871:10;;;3863:18;;3841:40;;;3721:108;3772:48;3566:1;3772:48;;334:1755:53;;;;;;3566:1:50;4317:41;334:1755:53;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;334:1755:53;;-1:-1:-1;334:1755:53;;;;;;;;;-1:-1:-1;334:1755:53;;;;-1:-1:-1;334:1755:53;;;;;;;;;-1:-1:-1;334:1755:53;;;;-1:-1:-1;334:1755:53;;;;;;:::o;1637:245:50:-;334:1755:53;;753:25:49;;;;;;;;334:1755:53;;;;;;;834:66:50;334:1755:53;;;;;753:25:49;;;;;;;;;:::i;:::-;334:1755:53;743:36:49;;785:40;826:75:50;334:1755:53;826:75:50;1849:2;826:75;334:1755:53;;1637:245:50;:::o;334:1755:53:-;;;;;;;:::i;:::-;-1:-1:-1;334:1755:53;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2963:3141:51;;;;;;;566:109:68;;;;;3268:69:51;;;3762:24;334:1755:53;;;:::i;:::-;3963:20:51;3979:4;3963:20;;;:28;:59;;;2963:3141;3959:742;;2963:3141;4774:20;;;4790:4;4774:20;;;:28;4770:126;;5004:4;4988:20;;;:28;4967:18;;;334:1755:53;826:75:50;334:1755:53;826:75:50;;;;2363:226:68;;;;;;;;;;;;;;;;;;;;;;;;;5158:67:51;;;;;5330:20;4967:18;5330:20;5329:27;;334:1755:53;826:75:50;;;5329:27:51;5328:33;;;:::i;:::-;2363:226:68;;;;;;;;;;;;;;;;;;;;;;;;;5369:65:51;;;;5480:15;;;;;:::i;:::-;5555:19;;;;;;:::i;:::-;5523:52;;;;:::i;:::-;5501:74;5594:50;;;545:85:69;;;;;;;461:173;;5594:50:51;5662:51;;;545:85:69;;;;;;;461:173;;5662:51:51;334:1755:53;;;5731:72:51;;545:85:69;;;;;;;461:173;;5731:72:51;334:1755:53;;;5948:32:51;;;;;:67;;;;2963:3141;5948:104;;;;;2963:3141;5944:156;;;2963:3141;:::o;5944:156::-;3979:4;334:1755:53;6069:24:51;;;334:1755:53;;6069:24:51;;;334:1755:53;;;;;;;;;;;;5050:45:50;5948:104:51;6033:19;;4967:18;6033:19;;334:1755:53;-1:-1:-1;6019:33:51;5948:104;;;:67;5984:31;;;-1:-1:-1;5948:67:51;;;;4770:126;4869:19;4819:70;4869:19;;;;;;;;;:::i;:::-;4819:70;;;;:::i;:::-;4812:77;;;;;;;;;:::o;3959:742::-;3281:184:68;;;;;;;-1:-1:-1;3281:184:68;;;-1:-1:-1;3162:307:68;3281:184;;;;;;4197:20:51;4193:502;;3959:742;;;;;;;4193:502;1318:135:68;;;;-1:-1:-1;334:1755:53;;-1:-1:-1;1318:135:68;;;;;;3979:4:51;;4572:73;;3979:4;;334:1755:53;;4471:48:51;;1318:135:68;;4489:29:51;1318:135:68;;4489:29:51;:::i;:::-;4471:48;;:::i;:::-;334:1755:53;;;:::i;:::-;;;4572:73:51;;;;;;334:1755:53;4572:73:51;;4621:4;4572:73;;;;:::i;:::-;;334:1755:53;;4572:73:51;;;;;;4656:30;4572:73;-1:-1:-1;4572:73:51;;;4193:502;4561:84;4656:30;;:::i;:::-;4193:502;;;;;;4572:73;;;;3979:4;4572:73;3979:4;4572:73;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;:::i;3963:59::-;334:1755:53;;;;3995:27:51;3963:59;;1848:238:53;334:1755;1848:238;334:1755;;1992:62;;;334:1755;;;;;2018:7;334:1755;;;;;;;;;;;2039:14;334:1755;;;;;1992:62;;;;;;:::i;:::-;334:1755;1982:73;;334:1755;2076:4;1958:123;1848:238;:::o;9564:274:48:-;9784:48;;9743:18;9666:50;9682:18;;;334:1755:53;;;9710:4:48;9666:50;;:::i;:::-;9743:18;;:::i;:::-;334:1755:53;;9784:48:48;;;9682:18;9784:48;;;;334:1755:53;;;;;;;;;;;;;;;;;;9784:48:48;334:1755:53;9774:59:48;;9564:274;:::o;2482:4::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;334:1755:53;2482:4:48;334:1755:53;2482:4:48:o;6108:1663:51:-;;;;;;334:1755:53;6304:14:51;334:1755:53;6320:17:51;334:1755:53;6339:18:51;334:1755:53;6359:14:51;334:1755:53;;;;:::i;:::-;;2556:4:48;;6423:47:51;6522:17;;334:1755:53;6553:26:51;;;;;;334:1755:53;;;;;;;;;7647:33:51;;:71;;;6546:1091;7643:124;;6108:1663;:::o;7647:71::-;7698:20;;;;334:1755:53;7684:34:51;;;7647:71;;6546:1091;1318:135:68;;;;-1:-1:-1;1201:256:68;;-1:-1:-1;1201:256:68;;-1:-1:-1;1201:256:68;;-1:-1:-1;1201:256:68;;;;6717:16:51;;1318:135:68;;;;;;;6717:16:51;:::i;:::-;6773:57;;334:1755:53;6773:28:51;;;;;:57;;;;6522:17;6843:35;;6522:17;;6971:26;;6999:4;6971:26;;6953:65;6971:26;;;;:::i;:::-;6953:65;;;:::i;:::-;6890:128;;;;;;;;;;;;;;;;6839:339;;;;7190:18;7186:122;;7315:16;334:1755:53;;;;7344:32:51;7340:89;;6839:339;7441:28;;;;7437:115;;7560:23;;;;;2556:4:48;7603:27:51;6546:1091;;;;;;;;;;;;7437:115;7488:55;334:1755:53;7488:55:51;3772:48:50;334:1755:53;;;;;;3566:1:50;4317:41;7340:89:51;334:1755:53;2556:4:48;;7340:89:51;;7186:122;7253:26;;7227:72;7253:26;;;;;;:::i;:::-;334:1755:53;;;;;7227:72:51;;;;;;;;;;:::i;6839:339::-;7122:26;;;;;7150:4;7122:26;;7099:70;7122:26;;;;:::i;:::-;7099:70;;;:::i;:::-;-1:-1:-1;7043:126:51;;;;;;;;;;;;;6839:339;;6773:57;;;;842:1;;;;;;;;;;334:1755:53;;;842:1:51;;;;;:::o;:::-;;;;;;334:1755:53;;842:1:51;;;;;;;;:::i;:::-;334:1755:53;842:1:51;;;;;334:1755:53;;;842:1:51;;;334:1755:53;842:1:51;;;;;;;;:::i;1206:::-;;;;;;;;;334:1755:53;1206:1:51;:::o;7775:11084::-;;;;;334:1755:53;7930:12:51;334:1755:53;7968:14:51;334:1755:53;8044:26:51;;;;;;7775:11084;;;;;:::o;8037:10812::-;798:135:68;;;;;;;;;;;;;;;;683:254;;;;826:75:50;;8454:27:51;;;8450:864;;9374:20;786:1;9374:20;;9370:676;;842:1;10096:30;;10092:1383;;885:1;11512:17;;11508:279;;8405:1;11826:19;;11822:656;;1023:1;12517:19;;12513:1278;;978:1;13833:22;;13829:518;;1080:1;14398:31;;14394:933;;1150:1;15464:44;;15460:617;;1206:1;16127:30;;16123:1308;;1270:2;17489:38;;17485:1312;;18814:26;334:1755:53;18814:26:51;8405:1;334:1755:53;;;1270:2:51;3566:1:50;4317:41;17485:1312:51;17799:16;;;;;;;;;885:1;17799:16;;17832:15;;;17828:99;;17485:1312;3281:184:68;;;;;;;;;18081:16:51;;334:1755:53;826:75:50;;;334:1755:53;;2363:226:68;;;;;;;;;;;;;;;;;;;;;;;;;740:1:51;;;18467:26;;;;;;;:::i;:::-;334:1755:53;;;18405:89:51;;334:1755:53;;;;18405:89:51;;334:1755:53;8405:1:51;18405:89;;;:::i;:::-;;334:1755:53;;;;18405:89:51;;;;;;;;;;;;18637:51;18405:89;334:1755:53;18405:89:51;;;17485:1312;18506:16;334:1755:53;18506:16:51;334:1755:53;;740:1:51;;;18637:51;;:::i;:::-;18707:59;:18;;;;18728:31;;;545:85:69;;;;;;;461:173;;18728:31:51;18778:8;8037:10812;;;;;;;;18707:59;;;;18405:89;334:1755:53;18405:89:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;17828:99;798:135:68;;;;;;;-1:-1:-1;798:135:68;;17828:99:51;;16123:1308;16429:16;;;;;;;;;885:1;16429:16;;16462:15;;;16458:99;;16123:1308;3281:184:68;;;;;;;;;16749:16:51;;334:1755:53;826:75:50;;;334:1755:53;;2363:226:68;;;;;;;;;;;;;;;;;;;;;;;;;740:1:51;;;17100:26;;;;;;;:::i;:::-;334:1755:53;;;17051:76:51;;334:1755:53;;;;17051:76:51;;334:1755:53;8405:1:51;17051:76;;;:::i;:::-;;334:1755:53;;;;17051:76:51;;;;;;;;;;;;17271:51;17051:76;334:1755:53;17051:76:51;;;17139:16;334:1755:53;17139:16:51;334:1755:53;;740:1:51;;;17271:51;;:::i;:::-;17341:59;:18;;;;17362:31;;;545:85:69;;;;;;;461:173;;17362:31:51;17412:8;;;17341:59;;;;16458:99;798:135:68;;;;;;;-1:-1:-1;798:135:68;;16458:99:51;;15460:617;2926:232:68;-1:-1:-1;3047:107:68;;;;-1:-1:-1;2926:232:68;;;;;;;;;;3047:107;;;15775:28:51;2926:232:68;15775:28:51;:::i;:::-;15819:29;;15815:88;;15460:617;15930:38;;;:::i;15815:88::-;15873:17;;-1:-1:-1;15815:88:51;;14394:933;14742:16;;;;;;;;;14754:4;14742:16;14775:15;;;14771:99;;14394:933;15044:61;334:1755:53;3511:494:68;15024:92:51;3511:494:68;;;;:::i;:::-;14943:53:51;;;;334:1755:53;;;15044:61:51;;;;;;;;1080:1;;;;;;;;334:1755:53;1080:1:51;;;15044:61;334:1755:53;15034:72:51;;334:1755:53;;;15024:92:51;;;;740:1;;;;334:1755:53;740:1:51;;;;;334:1755:53;;;;740:1:51;;;334:1755:53;740:1:51;;;334:1755:53;740:1:51;334:1755:53;740:1:51;15024:92;;;;;;786:1;15024:92;;;;;15176:42;15024:92;334:1755:53;;15024:92:51;334:1755:53;;740:1:51;;;15176:42;;:::i;14771:99::-;798:135:68;;;;;;;;;;-1:-1:-1;14771:99:51;;13829:518;2926:232:68;-1:-1:-1;3047:107:68;;;;-1:-1:-1;2926:232:68;;;;;;;;;;3047:107;;;14099:20:51;;;14095:79;;13829:518;14201:37;;;:::i;14095:79::-;14144:17;;-1:-1:-1;14095:79:51;;12513:1278;12882:16;;;;;;;;334:1755:53;12882:16:51;;12851:53;12876:28;12894:4;12882:16;;826:75:50;842:1:51;334:1755:53;826:75:50;;842:1:51;;12876:28;334:1755:53;;;;12851:53:51;12920:19;;;12916:107;;12513:1278;885:1;13069:16;13102:22;;13098:114;;12513:1278;1201:256:68;;;13399:60:51;;13432:26;;1318:135:68;;;;;;;;;334:1755:53;;740:1:51;;13432:26;;;;;:::i;:::-;13399:60;;;;:::i;:::-;13471:16;-1:-1:-1;13504:35:51;13500:92;;12513:1278;13619:63;;;;;:::i;13500:92::-;740:1;;;;13500:92;;13098:114;-1:-1:-1;1058:135:68;;;;;;;;;13098:114:51;;12916:107;798:135:68;;;;;;;-1:-1:-1;798:135:68;;;;;12916:107:51;;11822:656;12023:16;;;2213:380:68;12312:26:51;12023:16;;;;;;12035:4;12279:60;12023:16;;2213:380:68;;;;;;2363:226;;;;;;;;;;;;;;;;;;;2213:380;;;740:1:51;;;;12312:26;;;;;:::i;:::-;12279:60;;;;:::i;:::-;;12416:31;12279:60;740:1;;12416:31;545:85:69;;;;;;;461:173;;11508:279:51;2926:232:68;-1:-1:-1;2926:232:68;-1:-1:-1;2926:232:68;;;;;;;;;3047:107;;;;;;;11697:59:51;:18;;;;11718:31;;;545:85:69;;;;;;;461:173;;10092:1383:51;10387:16;;;;;;;;;885:1;10387:16;;10420:15;;;10416:99;;10092:1383;3281:184:68;;;;;;;2213:380;;3281:184;;;10669:47:51;;334:1755:53;826:75:50;;;10688:28:51;842:1;10669:47;2213:380:68;;;;;;2363:226;;;;;;;;;;;;;;;;;;;2213:380;;;740:1:51;;;11024:26;10983:68;;11024:26;;;;;;;:::i;:::-;334:1755:53;;;;;;10983:68:51;;;;;;;334:1755:53;10983:68:51;;8405:1;10983:68;;;:::i;:::-;;334:1755:53;;10983:68:51;;;;;;;334:1755:53;10983:68:51;334:1755:53;10983:68:51;334:1755:53;10983:68:51;;;10092:1383;334:1755:53;;10983:97:51;10979:203;;11193:16;;334:1755:53;11324:42:51;11193:16;334:1755:53;;740:1:51;;;11324:42;;:::i;10979:203::-;11103:66;11142:26;;;;;;;;:::i;:::-;334:1755:53;;;11103:66:51;;;;;;8405:1;11103:66;;;:::i;10983:68::-;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;10416:99;798:135:68;;;;;;;-1:-1:-1;798:135:68;;10416:99:51;;9370:676;9567:16;9579:4;9567:16;;;;;;;;;;9600:15;;;9596:99;;9370:676;3281:184:68;;;;9895:42:51;;334:1755:53;;;;;3281:184:68;;;;;9895:42:51;:::i;9596:99::-;798:135:68;;;;;;;-1:-1:-1;798:135:68;;9596:99:51;;8450:864;8794:16;;;;;;;;;;8806:4;8794:16;8827:15;;;8823:99;;8450:864;3511:494:68;9076:27:51;334:1755:53;3511:494:68;9076:27:51;3511:494:68;;;;:::i;:::-;8995:53:51;;;334:1755:53;;9076:27:51;;;;;740:1;;;;334:1755:53;740:1:51;;;;;334:1755:53;;;;740:1:51;;;334:1755:53;740:1:51;;;334:1755:53;740:1:51;334:1755:53;740:1:51;8823:99;798:135:68;;;;-1:-1:-1;798:135:68;;;;;;-1:-1:-1;9076:27:51;8823:99;;939:351:48;1206:48;;;-1:-1:-1;1206:48:48;;334:1755:53;;;1077:202:48;;;;334:1755:53;539:66:48;334:1755:53;;709:66:48;334:1755:53;868:66:48;;334:1755:53;868:66:48;;;;334:1755:53;868:66:48;;;334:1755:53;;868:66:48;;;334:1755:53;868:66:48;1077:202;;;;;;:::i;1206:48::-;1240:13;1206:48;;;334:1755:53;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;8278:1282:48;8416:22;;;;334:1755:53;;8399:40:48;;334:1755:53;8399:40:48;;;334:1755:53;;;:::i;8399:40:48:-;334:1755:53;8389:51:48;;334:1755:53;;;;;;;;;;;;8451:34:48;334:1755:53;;8525:14:48;;;8712:82;8515:25;334:1755:53;8525:14:48;;;8515:25;:::i;:::-;8750:14;8712:82;8766:14;8750;;;334:1755:53;8766:14:48;;334:1755:53;;;;8712:82:48;;;8399:40;8712:82;;;;1799:66;;;;;;;;;334:1755:53;1799:66:48;334:1755:53;;1799:66:48;;;334:1755:53;1799:66:48;;;334:1755:53;1799:66:48;;;334:1755:53;1799:66:48;334:1755:53;1799:66:48;8447:1109;2395:4;8812:29;;2395:4;;-1:-1:-1;;8998:16:48;;;334:1755:53;;8399:40:48;334:1755:53;;;8988:27:48;334:1755:53;;;1979:66:48;8959:70;;;334:1755:53;;;1979:66:48;;;334:1755:53;;;;1979:66:48;;;334:1755:53;;;;8959:70:48;;334:1755:53;1979:66:48;;;8959:70;1979:66;8808:748;2482:4;9047:35;;2482:4;;-1:-1:-1;;9216:18:48;;334:1755:53;;;;2174:66:48;8399:40;9181:67;;334:1755:53;;;1979:66:48;;;334:1755:53;;;;1979:66:48;;;334:1755:53;;;;9181:67:48;334:1755:53;1979:66:48;;;9181:67;1979:66;9043:513;2556:4;9266:28;2556:4;;-1:-1:-1;9443:15:48;;334:1755:53;;;;1979:66:48;8399:40;9414:58;;334:1755:53;;;1979:66:48;;;334:1755:53;;;;1979:66:48;;;334:1755:53;;;;9414:58:48;334:1755:53;1979:66:48;;;9414:58;1979:66;9262:294;9523:26;334:1755:53;9523:26:48;334:1755:53;;9523:26:48;334:1755:53;2395:4:48;3566:1:50;4317:41;3511:494:68;3690:173;;;;;;;;;;;;3998:2;3955:14;3931:39;;826:75:50;334:1755:53;826:75:50;334:1755:53;;;;;;3511:494:68;:::o;1947:181:51:-;;334:1755:53;;2068:54:51;334:1755:53;2068:54:51;;;334:1755:53;;;;;;;;;;;;;;;;2068:54:51;;;;;;:::i;2132:210::-;;334:1755:53;;2263:73:51;;;;334:1755:53;;;;;;;;;;;;;;;;;2263:73:51;;;;;;:::i;2562:182::-;334:1755:53;;2681:57:51;;;334:1755:53;;;;;;;;;2681:57:51;;;;;;:::i;9842:280:48:-;10068:48;;10027:18;9956:44;334:1755:53;9972:18:48;;;334:1755:53;;;9956:44:48;:::i;2748:211:51:-;334:1755:53;;2878:75:51;;;334:1755:53;;;;;;;;;2878:75:51;;;;;;:::i;2346:212::-;;334:1755:53;;2478:74:51;334:1755:53;2478:74:51;;;334:1755:53;;;;;;;;;;;;;;;;;;;;2478:74:51;;;;;;:::i;334:1755:53:-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;7820:454:48;;334:1755:53;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;-1:-1:-1;8164:3:48;334:1755:53;;8146:16:48;;;;;8202:8;;334:1755:53;8202:8:48;;;:::i;:::-;;334:1755:53;;;;7708:7:48;334:1755:53;7708:7:48;;334:1755:53;7727:6:48;334:1755:53;7727:6:48;;;334:1755:53;;;;;7717:17:48;7736:10;;;;334:1755:53;7748:14:48;;;334:1755:53;;;7764:14:48;7780:17;7764:14;;;334:1755:53;;;7780:17:48;;334:1755:53;;;;7667:138:48;334:1755:53;7667:138:48;;334:1755:53;1478:66:48;334:1755:53;;;1478:66:48;;334:1755:53;7736:10:48;1478:66;;334:1755:53;7748:14:48;1478:66;;334:1755:53;7764:14:48;1478:66;;334:1755:53;7780:17:48;1478:66;;334:1755:53;1478:66:48;;;334:1755:53;1478:66:48;;;334:1755:53;1478:66:48;7667:138;;;;;;:::i;:::-;334:1755:53;7650:161:48;;8177:34;;;;:::i;:::-;2556:4;334:1755:53;8131:13:48;;8146:16;;;;;334:1755:53;;8240:28:48;;334:1755:53;;8240:28:48;;334:1755:53;;;:::i","linkReferences":{},"immutableReferences":{"49185":[{"start":1994,"length":32},{"start":5809,"length":32}],"49188":[{"start":2328,"length":32},{"start":5762,"length":32}],"49191":[{"start":2175,"length":32},{"start":2533,"length":32}]}},"methodIdentifiers":{"FACTORY()":"2dd31000","INIT_CODE_HASH()":"257671f5","STAGE_2_IMPLEMENTATION()":"9f69ef54","getImplementation()":"aaf10f42","getStaticSignature(bytes32)":"92dcb3fc","isValidSignature(bytes32,bytes)":"1626ba7e","recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":"ad55366b","recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":"13792a4a","setStaticSignature(bytes32,address,uint96)":"f727ef1c","updateImageHash(bytes32)":"29561426","updateImplementation(address)":"025b22bc"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_factory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_stage2\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ImageHashIsZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_signer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"InvalidERC1271Signature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"}],\"name\":\"InvalidKind\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"InvalidSapientSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_flag\",\"type\":\"uint256\"}],\"name\":\"InvalidSignatureFlag\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes1\",\"name\":\"_type\",\"type\":\"bytes1\"}],\"name\":\"InvalidSignatureType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_weight\",\"type\":\"uint256\"}],\"name\":\"InvalidSignatureWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_expires\",\"type\":\"uint256\"}],\"name\":\"InvalidStaticSignatureExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_expectedCaller\",\"type\":\"address\"}],\"name\":\"InvalidStaticSignatureWrongCaller\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_weight\",\"type\":\"uint256\"}],\"name\":\"LowWeightChainedSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"checkpoint\",\"type\":\"uint256\"}],\"internalType\":\"struct Snapshot\",\"name\":\"_snapshot\",\"type\":\"tuple\"}],\"name\":\"UnusedSnapshot\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nextCheckpoint\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_checkpoint\",\"type\":\"uint256\"}],\"name\":\"WrongChainedCheckpointOrder\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"newImageHash\",\"type\":\"bytes32\"}],\"name\":\"ImageHashUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"ImplementationUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"_timestamp\",\"type\":\"uint96\"}],\"name\":\"StaticSignatureSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"FACTORY\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INIT_CODE_HASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STAGE_2_IMPLEMENTATION\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"getStaticSignature\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"recoverPartialSignature\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isValidImage\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"checkpoint\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"opHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"recoverSapientSignature\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"_timestamp\",\"type\":\"uint96\"}],\"name\":\"setStaticSignature\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_imageHash\",\"type\":\"bytes32\"}],\"name\":\"updateImageHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"}],\"name\":\"updateImplementation\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Agustin Aguilar\",\"kind\":\"dev\",\"methods\":{\"getImplementation()\":{\"returns\":{\"_0\":\"implementation The implementation\"}},\"getStaticSignature(bytes32)\":{\"params\":{\"_hash\":\"The hash to get the static signature for\"},\"returns\":{\"_0\":\"address The address associated with the static signature\",\"_1\":\"timestamp The timestamp of the static signature\"}},\"isValidSignature(bytes32,bytes)\":{\"details\":\"MUST return the correct magic value if the signature provided is valid for the provided hash > The bytes4 magic value to return when signature is valid is 0x1626ba7e : bytes4(keccak256(\\\"isValidSignature(bytes32,bytes)\\\") > This function MAY modify Ethereum's state\",\"params\":{\"_hash\":\"keccak256 hash that was signed\",\"_signature\":\"Signature byte array associated with _data\"},\"returns\":{\"_0\":\"Magic value 0x1626ba7e if the signature is valid and 0x0 otherwise\"}},\"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"params\":{\"_payload\":\"The payload\",\"_signature\":\"The signature to recover\"},\"returns\":{\"checkpoint\":\"The checkpoint identifier\",\"imageHash\":\"The derived image hash\",\"isValidImage\":\"Whether the image hash is valid\",\"opHash\":\"The hash of the payload\",\"threshold\":\"The signature threshold\",\"weight\":\"The derived weight\"}},\"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"params\":{\"payload\":\"The payload to recover the signature from\",\"signature\":\"The signature to recover the image hash from\"},\"returns\":{\"_0\":\"The recovered image hash\"}},\"setStaticSignature(bytes32,address,uint96)\":{\"details\":\"Only callable by the wallet itself\",\"params\":{\"_address\":\"The address to associate with the static signature\",\"_hash\":\"The hash to set the static signature for\",\"_timestamp\":\"The timestamp of the static signature\"}},\"updateImageHash(bytes32)\":{\"details\":\"Only callable by the wallet itself\",\"params\":{\"_imageHash\":\"The new image hash\"}},\"updateImplementation(address)\":{\"details\":\"Callable only by the contract itself\",\"params\":{\"_implementation\":\"The new implementation\"}}},\"stateVariables\":{\"IMAGE_HASH_KEY\":{\"details\":\"keccak256(\\\"org.arcadeum.module.auth.upgradable.image.hash\\\")\"}},\"title\":\"Stage1Auth\",\"version\":1},\"userdoc\":{\"errors\":{\"ImageHashIsZero()\":[{\"notice\":\"Error thrown when the image hash is zero\"}],\"InvalidERC1271Signature(bytes32,address,bytes)\":[{\"notice\":\"Error thrown when the ERC1271 signature is invalid\"}],\"InvalidKind(uint8)\":[{\"notice\":\"Error thrown when the kind is invalid\"}],\"InvalidSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":[{\"notice\":\"Error thrown when the sapient signature is invalid\"}],\"InvalidSignatureFlag(uint256)\":[{\"notice\":\"Error thrown when the signature flag is invalid\"}],\"InvalidSignatureType(bytes1)\":[{\"notice\":\"Error thrown when the signature type is invalid\"}],\"InvalidSignatureWeight(uint256,uint256)\":[{\"notice\":\"Error thrown when the signature weight is invalid\"}],\"InvalidStaticSignatureExpired(bytes32,uint256)\":[{\"notice\":\"Error thrown when the static signature has expired\"}],\"InvalidStaticSignatureWrongCaller(bytes32,address,address)\":[{\"notice\":\"Error thrown when the static signature has the wrong caller\"}],\"LowWeightChainedSignature(bytes,uint256,uint256)\":[{\"notice\":\"Error thrown when the weight is too low for a chained signature\"}],\"OnlySelf(address)\":[{\"notice\":\"Error thrown when the caller is not the same as the contract\"}],\"UnusedSnapshot((bytes32,uint256))\":[{\"notice\":\"Error thrown when the snapshot is unused\"}],\"WrongChainedCheckpointOrder(uint256,uint256)\":[{\"notice\":\"Error thrown when the checkpoint order is wrong\"}]},\"events\":{\"ImageHashUpdated(bytes32)\":{\"notice\":\"Emitted when the image hash is updated\"},\"ImplementationUpdated(address)\":{\"notice\":\"Emitted when the implementation is updated\"},\"StaticSignatureSet(bytes32,address,uint96)\":{\"notice\":\"Event emitted when a static signature is set\"}},\"kind\":\"user\",\"methods\":{\"FACTORY()\":{\"notice\":\"Factory address\"},\"INIT_CODE_HASH()\":{\"notice\":\"Initialization code hash\"},\"STAGE_2_IMPLEMENTATION()\":{\"notice\":\"Stage 2 implementation address\"},\"getImplementation()\":{\"notice\":\"Get the implementation\"},\"getStaticSignature(bytes32)\":{\"notice\":\"Get the static signature for a specific hash\"},\"isValidSignature(bytes32,bytes)\":{\"notice\":\"Verifies whether the provided signature is valid with respect to the provided hash\"},\"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"notice\":\"Recover the partial signature\"},\"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"notice\":\"Recovers the image hash of a given signature\"},\"setStaticSignature(bytes32,address,uint96)\":{\"notice\":\"Set the static signature for a specific hash\"},\"updateImageHash(bytes32)\":{\"notice\":\"Update the image hash\"},\"updateImplementation(address)\":{\"notice\":\"Update the implementation\"}},\"notice\":\"Stage 1 auth contract\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/modules/auth/Stage1Auth.sol\":\"Stage1Auth\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/Wallet.sol\":{\"keccak256\":\"0xe01e9e937dd8d7572976ccc8ec3ec87e4a557069dafb05f85977a7b71f5c58d5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2e9ab78d33655f8e822258dff3f2d5ad01e84f6dc90174840d5a283b8e6413c1\",\"dweb:/ipfs/QmNMyYe3C1fs3cxKmUZ3S9VU5EE4WVWPVcwiGbgvbS1vrH\"]},\"src/modules/Implementation.sol\":{\"keccak256\":\"0x16546d4be07865808890308750916b0a9a55e7a994a458c01edde4618f29b4e6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1b1f9785b08c9f29d6849ba2d3dee89fa3ea5f3c2feec4a59a6d1040e3fbe040\",\"dweb:/ipfs/QmU2Pm5C3Ztky7RQdCZggavyq7Eh1eS1HFqVz9jZKiMUML\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/Storage.sol\":{\"keccak256\":\"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da\",\"dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn\"]},\"src/modules/auth/BaseAuth.sol\":{\"keccak256\":\"0xbf2e40def03fcb5f4a5129b2f5803e21951325b92e00126cbe1427b7c25cfefd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://b560905fcc4b957d27c2abed78a1e82529c89fa472e91b3d108fbfd91aa7c3f7\",\"dweb:/ipfs/QmRjLLtTWE6dFX2kBQCgLz7ossfMxhAFgDC8Jx9XuGL6Wy\"]},\"src/modules/auth/BaseSig.sol\":{\"keccak256\":\"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8\",\"dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3\"]},\"src/modules/auth/SelfAuth.sol\":{\"keccak256\":\"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42\",\"dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W\"]},\"src/modules/auth/Stage1Auth.sol\":{\"keccak256\":\"0x399e21aad2b30bf80a21766bd3442d676a26eb66c02423617b2772df7204cb0a\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://25c698dee10c6fbb8b63adb4023f1886669b8e9c54dcd98871f0bd6a2b6acf03\",\"dweb:/ipfs/QmNzUFWCoymaoV7CFgJvbAWRsJAZkqBhSpgff26JVAr9hf\"]},\"src/modules/interfaces/IAuth.sol\":{\"keccak256\":\"0xf6fa30af2ec91d5fbeac17c9b1f2aa73b7883c9ac98745605007e57666394b91\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://6e90a87978519462f9612f4a17e38fddc1c7bcf700ff834a1de7dce326f30353\",\"dweb:/ipfs/QmXmWAsRRK6t4jPs4VcXrouyokxdALM28D3odX7ub48WEp\"]},\"src/modules/interfaces/ICheckpointer.sol\":{\"keccak256\":\"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1\",\"dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t\"]},\"src/modules/interfaces/IERC1271.sol\":{\"keccak256\":\"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b\",\"dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF\"]},\"src/modules/interfaces/IPartialAuth.sol\":{\"keccak256\":\"0x0d1aa021615d8e90696e71a9468331457a1babfa2ffe169654b7456e5bcb7a73\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://bbacd149a6358ab0d4b9c588d2e3a55fc71ed4723269150d7b91ca70092f6519\",\"dweb:/ipfs/QmUSwtrYCrRcRFsy5rCzdMPrw1FCU7ZoeXdsW6kK9yc8FK\"]},\"src/modules/interfaces/ISapient.sol\":{\"keccak256\":\"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489\",\"dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"src/utils/LibOptim.sol\":{\"keccak256\":\"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81\",\"dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_stage2","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"ImageHashIsZero"},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32"},{"internalType":"address","name":"_signer","type":"address"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"type":"error","name":"InvalidERC1271Signature"},{"inputs":[{"internalType":"uint8","name":"kind","type":"uint8"}],"type":"error","name":"InvalidKind"},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"type":"error","name":"InvalidSapientSignature"},{"inputs":[{"internalType":"uint256","name":"_flag","type":"uint256"}],"type":"error","name":"InvalidSignatureFlag"},{"inputs":[{"internalType":"bytes1","name":"_type","type":"bytes1"}],"type":"error","name":"InvalidSignatureType"},{"inputs":[{"internalType":"uint256","name":"_threshold","type":"uint256"},{"internalType":"uint256","name":"_weight","type":"uint256"}],"type":"error","name":"InvalidSignatureWeight"},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32"},{"internalType":"uint256","name":"_expires","type":"uint256"}],"type":"error","name":"InvalidStaticSignatureExpired"},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32"},{"internalType":"address","name":"_caller","type":"address"},{"internalType":"address","name":"_expectedCaller","type":"address"}],"type":"error","name":"InvalidStaticSignatureWrongCaller"},{"inputs":[{"internalType":"bytes","name":"_signature","type":"bytes"},{"internalType":"uint256","name":"_threshold","type":"uint256"},{"internalType":"uint256","name":"_weight","type":"uint256"}],"type":"error","name":"LowWeightChainedSignature"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"}],"type":"error","name":"OnlySelf"},{"inputs":[{"internalType":"struct Snapshot","name":"_snapshot","type":"tuple","components":[{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"uint256","name":"checkpoint","type":"uint256"}]}],"type":"error","name":"UnusedSnapshot"},{"inputs":[{"internalType":"uint256","name":"_nextCheckpoint","type":"uint256"},{"internalType":"uint256","name":"_checkpoint","type":"uint256"}],"type":"error","name":"WrongChainedCheckpointOrder"},{"inputs":[{"internalType":"bytes32","name":"newImageHash","type":"bytes32","indexed":false}],"type":"event","name":"ImageHashUpdated","anonymous":false},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address","indexed":false}],"type":"event","name":"ImplementationUpdated","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32","indexed":false},{"internalType":"address","name":"_address","type":"address","indexed":false},{"internalType":"uint96","name":"_timestamp","type":"uint96","indexed":false}],"type":"event","name":"StaticSignatureSet","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"FACTORY","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"INIT_CODE_HASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"STAGE_2_IMPLEMENTATION","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getImplementation","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getStaticSignature","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"view","type":"function","name":"isValidSignature","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"view","type":"function","name":"recoverPartialSignature","outputs":[{"internalType":"uint256","name":"threshold","type":"uint256"},{"internalType":"uint256","name":"weight","type":"uint256"},{"internalType":"bool","name":"isValidImage","type":"bool"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"uint256","name":"checkpoint","type":"uint256"},{"internalType":"bytes32","name":"opHash","type":"bytes32"}]},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"view","type":"function","name":"recoverSapientSignature","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint96","name":"_timestamp","type":"uint96"}],"stateMutability":"nonpayable","type":"function","name":"setStaticSignature"},{"inputs":[{"internalType":"bytes32","name":"_imageHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"updateImageHash"},{"inputs":[{"internalType":"address","name":"_implementation","type":"address"}],"stateMutability":"payable","type":"function","name":"updateImplementation"}],"devdoc":{"kind":"dev","methods":{"getImplementation()":{"returns":{"_0":"implementation The implementation"}},"getStaticSignature(bytes32)":{"params":{"_hash":"The hash to get the static signature for"},"returns":{"_0":"address The address associated with the static signature","_1":"timestamp The timestamp of the static signature"}},"isValidSignature(bytes32,bytes)":{"details":"MUST return the correct magic value if the signature provided is valid for the provided hash > The bytes4 magic value to return when signature is valid is 0x1626ba7e : bytes4(keccak256(\"isValidSignature(bytes32,bytes)\") > This function MAY modify Ethereum's state","params":{"_hash":"keccak256 hash that was signed","_signature":"Signature byte array associated with _data"},"returns":{"_0":"Magic value 0x1626ba7e if the signature is valid and 0x0 otherwise"}},"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"params":{"_payload":"The payload","_signature":"The signature to recover"},"returns":{"checkpoint":"The checkpoint identifier","imageHash":"The derived image hash","isValidImage":"Whether the image hash is valid","opHash":"The hash of the payload","threshold":"The signature threshold","weight":"The derived weight"}},"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"params":{"payload":"The payload to recover the signature from","signature":"The signature to recover the image hash from"},"returns":{"_0":"The recovered image hash"}},"setStaticSignature(bytes32,address,uint96)":{"details":"Only callable by the wallet itself","params":{"_address":"The address to associate with the static signature","_hash":"The hash to set the static signature for","_timestamp":"The timestamp of the static signature"}},"updateImageHash(bytes32)":{"details":"Only callable by the wallet itself","params":{"_imageHash":"The new image hash"}},"updateImplementation(address)":{"details":"Callable only by the contract itself","params":{"_implementation":"The new implementation"}}},"version":1},"userdoc":{"kind":"user","methods":{"FACTORY()":{"notice":"Factory address"},"INIT_CODE_HASH()":{"notice":"Initialization code hash"},"STAGE_2_IMPLEMENTATION()":{"notice":"Stage 2 implementation address"},"getImplementation()":{"notice":"Get the implementation"},"getStaticSignature(bytes32)":{"notice":"Get the static signature for a specific hash"},"isValidSignature(bytes32,bytes)":{"notice":"Verifies whether the provided signature is valid with respect to the provided hash"},"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"notice":"Recover the partial signature"},"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"notice":"Recovers the image hash of a given signature"},"setStaticSignature(bytes32,address,uint96)":{"notice":"Set the static signature for a specific hash"},"updateImageHash(bytes32)":{"notice":"Update the image hash"},"updateImplementation(address)":{"notice":"Update the implementation"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/modules/auth/Stage1Auth.sol":"Stage1Auth"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/Wallet.sol":{"keccak256":"0xe01e9e937dd8d7572976ccc8ec3ec87e4a557069dafb05f85977a7b71f5c58d5","urls":["bzz-raw://2e9ab78d33655f8e822258dff3f2d5ad01e84f6dc90174840d5a283b8e6413c1","dweb:/ipfs/QmNMyYe3C1fs3cxKmUZ3S9VU5EE4WVWPVcwiGbgvbS1vrH"],"license":"Apache-2.0"},"src/modules/Implementation.sol":{"keccak256":"0x16546d4be07865808890308750916b0a9a55e7a994a458c01edde4618f29b4e6","urls":["bzz-raw://1b1f9785b08c9f29d6849ba2d3dee89fa3ea5f3c2feec4a59a6d1040e3fbe040","dweb:/ipfs/QmU2Pm5C3Ztky7RQdCZggavyq7Eh1eS1HFqVz9jZKiMUML"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/Storage.sol":{"keccak256":"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f","urls":["bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da","dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn"],"license":"Apache-2.0"},"src/modules/auth/BaseAuth.sol":{"keccak256":"0xbf2e40def03fcb5f4a5129b2f5803e21951325b92e00126cbe1427b7c25cfefd","urls":["bzz-raw://b560905fcc4b957d27c2abed78a1e82529c89fa472e91b3d108fbfd91aa7c3f7","dweb:/ipfs/QmRjLLtTWE6dFX2kBQCgLz7ossfMxhAFgDC8Jx9XuGL6Wy"],"license":"Apache-2.0"},"src/modules/auth/BaseSig.sol":{"keccak256":"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa","urls":["bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8","dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3"],"license":"Apache-2.0"},"src/modules/auth/SelfAuth.sol":{"keccak256":"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c","urls":["bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42","dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W"],"license":"Apache-2.0"},"src/modules/auth/Stage1Auth.sol":{"keccak256":"0x399e21aad2b30bf80a21766bd3442d676a26eb66c02423617b2772df7204cb0a","urls":["bzz-raw://25c698dee10c6fbb8b63adb4023f1886669b8e9c54dcd98871f0bd6a2b6acf03","dweb:/ipfs/QmNzUFWCoymaoV7CFgJvbAWRsJAZkqBhSpgff26JVAr9hf"],"license":"Apache-2.0"},"src/modules/interfaces/IAuth.sol":{"keccak256":"0xf6fa30af2ec91d5fbeac17c9b1f2aa73b7883c9ac98745605007e57666394b91","urls":["bzz-raw://6e90a87978519462f9612f4a17e38fddc1c7bcf700ff834a1de7dce326f30353","dweb:/ipfs/QmXmWAsRRK6t4jPs4VcXrouyokxdALM28D3odX7ub48WEp"],"license":"Apache-2.0"},"src/modules/interfaces/ICheckpointer.sol":{"keccak256":"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513","urls":["bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1","dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t"],"license":"Apache-2.0"},"src/modules/interfaces/IERC1271.sol":{"keccak256":"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9","urls":["bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b","dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF"],"license":"Apache-2.0"},"src/modules/interfaces/IPartialAuth.sol":{"keccak256":"0x0d1aa021615d8e90696e71a9468331457a1babfa2ffe169654b7456e5bcb7a73","urls":["bzz-raw://bbacd149a6358ab0d4b9c588d2e3a55fc71ed4723269150d7b91ca70092f6519","dweb:/ipfs/QmUSwtrYCrRcRFsy5rCzdMPrw1FCU7ZoeXdsW6kK9yc8FK"],"license":"Apache-2.0"},"src/modules/interfaces/ISapient.sol":{"keccak256":"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359","urls":["bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489","dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"src/utils/LibOptim.sol":{"keccak256":"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde","urls":["bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81","dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x"],"license":"Apache-2.0"}},"version":1},"id":53} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Stage1Module.sol/Stage1Module.json b/contracts/artifacts/wallet-contracts-v3/Stage1Module.sol/Stage1Module.json new file mode 100644 index 00000000..2c39e5f0 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Stage1Module.sol/Stage1Module.json @@ -0,0 +1 @@ +{"abi":[{"type":"constructor","inputs":[{"name":"_factory","type":"address","internalType":"address"},{"name":"_entryPoint","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"fallback","stateMutability":"payable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"FACTORY","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"INIT_CODE_HASH","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"STAGE_2_IMPLEMENTATION","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"addHook","inputs":[{"name":"selector","type":"bytes4","internalType":"bytes4"},{"name":"implementation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"entrypoint","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"execute","inputs":[{"name":"_payload","type":"bytes","internalType":"bytes"},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"executeUserOp","inputs":[{"name":"_payload","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getImplementation","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getStaticSignature","inputs":[{"name":"_hash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"isValidSignature","inputs":[{"name":"_hash","type":"bytes32","internalType":"bytes32"},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"view"},{"type":"function","name":"onERC1155BatchReceived","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256[]","internalType":"uint256[]"},{"name":"","type":"uint256[]","internalType":"uint256[]"},{"name":"","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"pure"},{"type":"function","name":"onERC1155Received","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"pure"},{"type":"function","name":"onERC721Received","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"pure"},{"type":"function","name":"readHook","inputs":[{"name":"selector","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"readNonce","inputs":[{"name":"_space","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"recoverPartialSignature","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"threshold","type":"uint256","internalType":"uint256"},{"name":"weight","type":"uint256","internalType":"uint256"},{"name":"isValidImage","type":"bool","internalType":"bool"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"checkpoint","type":"uint256","internalType":"uint256"},{"name":"opHash","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"recoverSapientSignature","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"removeHook","inputs":[{"name":"selector","type":"bytes4","internalType":"bytes4"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"selfExecute","inputs":[{"name":"_payload","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"setStaticSignature","inputs":[{"name":"_hash","type":"bytes32","internalType":"bytes32"},{"name":"_address","type":"address","internalType":"address"},{"name":"_timestamp","type":"uint96","internalType":"uint96"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"tokenReceived","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"pure"},{"type":"function","name":"tokensReceived","inputs":[{"name":"operator","type":"address","internalType":"address"},{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"operatorData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateImageHash","inputs":[{"name":"_imageHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateImplementation","inputs":[{"name":"_implementation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"validateUserOp","inputs":[{"name":"userOp","type":"tuple","internalType":"struct PackedUserOperation","components":[{"name":"sender","type":"address","internalType":"address"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"initCode","type":"bytes","internalType":"bytes"},{"name":"callData","type":"bytes","internalType":"bytes"},{"name":"accountGasLimits","type":"bytes32","internalType":"bytes32"},{"name":"preVerificationGas","type":"uint256","internalType":"uint256"},{"name":"gasFees","type":"bytes32","internalType":"bytes32"},{"name":"paymasterAndData","type":"bytes","internalType":"bytes"},{"name":"signature","type":"bytes","internalType":"bytes"}]},{"name":"userOpHash","type":"bytes32","internalType":"bytes32"},{"name":"missingAccountFunds","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"validationData","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"event","name":"CallAborted","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"_returnData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"CallFailed","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"_returnData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"CallSkipped","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"CallSucceeded","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"DefinedHook","inputs":[{"name":"selector","type":"bytes4","indexed":false,"internalType":"bytes4"},{"name":"implementation","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"ImageHashUpdated","inputs":[{"name":"newImageHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"ImplementationUpdated","inputs":[{"name":"newImplementation","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"NonceChange","inputs":[{"name":"_space","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"_newNonce","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"StaticSignatureSet","inputs":[{"name":"_hash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_address","type":"address","indexed":false,"internalType":"address"},{"name":"_timestamp","type":"uint96","indexed":false,"internalType":"uint96"}],"anonymous":false},{"type":"error","name":"BadNonce","inputs":[{"name":"_space","type":"uint256","internalType":"uint256"},{"name":"_provided","type":"uint256","internalType":"uint256"},{"name":"_current","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC4337Disabled","inputs":[]},{"type":"error","name":"HookAlreadyExists","inputs":[{"name":"selector","type":"bytes4","internalType":"bytes4"}]},{"type":"error","name":"HookDoesNotExist","inputs":[{"name":"selector","type":"bytes4","internalType":"bytes4"}]},{"type":"error","name":"ImageHashIsZero","inputs":[]},{"type":"error","name":"InvalidERC1271Signature","inputs":[{"name":"_opHash","type":"bytes32","internalType":"bytes32"},{"name":"_signer","type":"address","internalType":"address"},{"name":"_signature","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"InvalidEntryPoint","inputs":[{"name":"_entrypoint","type":"address","internalType":"address"}]},{"type":"error","name":"InvalidKind","inputs":[{"name":"kind","type":"uint8","internalType":"uint8"}]},{"type":"error","name":"InvalidSapientSignature","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"InvalidSignature","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"InvalidSignatureFlag","inputs":[{"name":"_flag","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidSignatureType","inputs":[{"name":"_type","type":"bytes1","internalType":"bytes1"}]},{"type":"error","name":"InvalidSignatureWeight","inputs":[{"name":"_threshold","type":"uint256","internalType":"uint256"},{"name":"_weight","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidStaticSignatureExpired","inputs":[{"name":"_opHash","type":"bytes32","internalType":"bytes32"},{"name":"_expires","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidStaticSignatureWrongCaller","inputs":[{"name":"_opHash","type":"bytes32","internalType":"bytes32"},{"name":"_caller","type":"address","internalType":"address"},{"name":"_expectedCaller","type":"address","internalType":"address"}]},{"type":"error","name":"LowWeightChainedSignature","inputs":[{"name":"_signature","type":"bytes","internalType":"bytes"},{"name":"_threshold","type":"uint256","internalType":"uint256"},{"name":"_weight","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"NotEnoughGas","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_index","type":"uint256","internalType":"uint256"},{"name":"_gasLeft","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"OnlySelf","inputs":[{"name":"_sender","type":"address","internalType":"address"}]},{"type":"error","name":"Reverted","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_index","type":"uint256","internalType":"uint256"},{"name":"_returnData","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"UnusedSnapshot","inputs":[{"name":"_snapshot","type":"tuple","internalType":"struct Snapshot","components":[{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"checkpoint","type":"uint256","internalType":"uint256"}]}]},{"type":"error","name":"WrongChainedCheckpointOrder","inputs":[{"name":"_nextCheckpoint","type":"uint256","internalType":"uint256"},{"name":"_checkpoint","type":"uint256","internalType":"uint256"}]}],"bytecode":{"object":"0x61010080604052346101ae57604081617f1f803803809161002082856101b3565b8339810103126101ae5761003f6020610038836101d6565b92016101d6565b604051909190613dff808201906001600160401b0382118383101761018c57602091839161412083396001600160a01b03861681520301906000f09081156101a257604051606081016001600160401b0381118282101761018c576040908152602f82527f6041600e3d396021805130553df33d3d36153402601f57363d3d373d363d305460208301526e5af43d82803e903d91601f57fd5bf360881b82820152519060005b602f811061017757505030604f820152604f8152610104606f826101b3565b805160209091012060805260a0526001600160a01b031660c05260e052604051613f3590816101eb8239608051818181610c210152613b59015260a051818181610d6f0152613b2a015260c051818181610cd6015261119d015260e0518181816110600152818161120c0152611aa00152f35b806020809284010151828286010152016100e5565b634e487b7160e01b600052604160045260246000fd5b6040513d6000823e3d90fd5b600080fd5b601f909101601f19168101906001600160401b0382119082101761018c57604052565b51906001600160a01b03821682036101ae5756fe6080604052600436101561001e575b361561001c5761001c611c68565b005b60003560e01c806223de29146101ad578063025b22bc146101a857806313792a4a146101a3578063150b7a021461019e5780631626ba7e1461019957806319822f7c146101945780631a9b23371461018f5780631f6a1eb91461018a578063257671f51461018557806329561426146101805780632dd310001461017b5780634fcf3eca146101765780636ea44577146101715780638943ec021461016c5780638c3f55631461016757806392dcb3fc146101625780639c145aed1461015d5780639f69ef5414610158578063a65d69d414610153578063aaf10f421461014e578063ad55366b14610149578063b93ea7ad14610144578063bc197c811461013f578063f23a6e611461013a5763f727ef1c0361000e5761158b565b6114fe565b61142c565b6112cd565b611281565b611230565b6111c1565b611152565b61103a565b610fdc565b610fa0565b610f1c565b610eed565b610d93565b610d24565b610c44565b610beb565b610aff565b610a9c565b6109e7565b61095f565b6108d2565b6107d5565b6102fb565b61026f565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101d557565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101d557565b6044359073ffffffffffffffffffffffffffffffffffffffff821682036101d557565b359073ffffffffffffffffffffffffffffffffffffffff821682036101d557565b9181601f840112156101d55782359167ffffffffffffffff83116101d557602083818601950101116101d557565b346101d55760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576102a66101b2565b506102af6101da565b506102b86101fd565b5060843567ffffffffffffffff81116101d5576102d9903690600401610241565b505060a43567ffffffffffffffff81116101d55761001c903690600401610241565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55761032d6101b2565b30330361033d5761001c90611d31565b7fa19dbf00000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff8211176103b657604052565b61036b565b6040810190811067ffffffffffffffff8211176103b657604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176103b657604052565b6040519061042760e0836103d7565b565b60405190610427610120836103d7565b359060ff821682036101d557565b359081151582036101d557565b67ffffffffffffffff81116103b65760051b60200190565b67ffffffffffffffff81116103b657601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926104b28261046c565b916104c060405193846103d7565b8294818452818301116101d5578281602093846000960137010152565b9080601f830112156101d5578160206104f8933591016104a6565b90565b81601f820112156101d55780359061051282610454565b9261052060405194856103d7565b82845260208085019360051b830101918183116101d55760208101935b83851061054c57505050505090565b843567ffffffffffffffff81116101d557820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082860301126101d557610593610418565b916105a060208301610220565b83526040820135602084015260608201359267ffffffffffffffff84116101d55760e0836105d58860208098819801016104dd565b6040840152608081013560608401526105f060a08201610447565b608084015261060160c08201610447565b60a0840152013560c082015281520194019361053d565b9080601f830112156101d557813561062f81610454565b9261063d60405194856103d7565b81845260208085019260051b8201019283116101d557602001905b8282106106655750505090565b6020809161067284610220565b815201910190610658565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126101d55760043567ffffffffffffffff81116101d5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82850301126101d5576106ef610429565b906106fc81600401610439565b825261070a60248201610447565b6020830152604481013567ffffffffffffffff81116101d557846004610732928401016104fb565b6040830152606481013560608301526084810135608083015260a481013567ffffffffffffffff81116101d55784600461076e928401016104dd565b60a083015260c481013560c083015260e481013560e083015261010481013567ffffffffffffffff81116101d557600485916107ab930101610618565b610100820152916024359067ffffffffffffffff82116101d5576107d191600401610241565b9091565b346101d5576107e33661067d565b90916101008101926107fe6107f9855151611693565b6116b3565b9160005b85518051821015610865579061085f61083a61082083600195611731565b5173ffffffffffffffffffffffffffffffffffffffff1690565b6108448388611731565b9073ffffffffffffffffffffffffffffffffffffffff169052565b01610802565b505083838661087a3361084483515185611731565b52610886818484611d80565b50156108985760405160018152602090f35b6108ce906040519384937ff58cc8b50000000000000000000000000000000000000000000000000000000085526004850161198c565b0390fd5b346101d55760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576109096101b2565b506109126101da565b5060643567ffffffffffffffff81116101d557610933903690600401610241565b505060206040517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b346101d55760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760043560243567ffffffffffffffff81116101d5576020916109b76109bd923690600401610241565b916119b1565b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b346101d55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760043567ffffffffffffffff81116101d5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126101d557610a6a60209160243560443591600401611a86565b604051908152f35b7fffffffff000000000000000000000000000000000000000000000000000000008116036101d557565b346101d55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576020610ae1600435610adc81610a72565b611f65565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760043567ffffffffffffffff81116101d557610b49903690600401610241565b9060243567ffffffffffffffff81116101d557610b6d610b77913690600401610241565b9190935a9361209a565b91610b8b606084015160808501519061235e565b610b96828585611d80565b929015610ba8575061001c93506124b7565b836108ce86926040519384937fa2b6d61b0000000000000000000000000000000000000000000000000000000085526004850161198c565b60009103126101d557565b346101d55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346101d55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760043530330361033d578015610cfa576020817f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf855604051908152a161001c7f0000000000000000000000000000000000000000000000000000000000000000611d31565b7f4294d1270000000000000000000000000000000000000000000000000000000060005260046000fd5b346101d55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d557600435610dc981610a72565b30330361033d5773ffffffffffffffffffffffffffffffffffffffff610dee82611f65565b1615610e545760407fffffffff000000000000000000000000000000000000000000000000000000007f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19216610e45600082612d0f565b815190815260006020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f1c3812cc000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101d5576004359067ffffffffffffffff82116101d5576107d191600401610241565b610ef636610ea4565b9030330361033d57610f0c61001c925a9261209a565b90610f16826127db565b906124b7565b346101d55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d557610f536101b2565b5060443567ffffffffffffffff81116101d557610f74903690600401610241565b505060206040517f8943ec02000000000000000000000000000000000000000000000000000000008152f35b346101d55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576020610a6a60043561286f565b346101d55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760406110186004356128b5565b73ffffffffffffffffffffffffffffffffffffffff8351921682526020820152f35b346101d55761104836610ea4565b9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001680156111285733036110fa57303b156101d5576110ce9160009160405193849283927f6ea4457700000000000000000000000000000000000000000000000000000000845260048401611c27565b038183305af180156110f5576110e057005b806110ef600061001c936103d7565b80610be0565b6119fd565b7f1d6ddbf4000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7fd13d78350000000000000000000000000000000000000000000000000000000060005260046000fd5b346101d55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101d55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101d55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576020305473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346101d55760c061129d6000806112973661067d565b9161297d565b926112a9839293613ac6565b906040519586526020860152151560408501526060840152608083015260a0820152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760043561130381610a72565b61130b6101da565b9030330361033d5773ffffffffffffffffffffffffffffffffffffffff61133182611f65565b166113ab577f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19173ffffffffffffffffffffffffffffffffffffffff7fffffffff0000000000000000000000000000000000000000000000000000000060409316911661139e8183612d0f565b82519182526020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f5b4d6d6a000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b9181601f840112156101d55782359167ffffffffffffffff83116101d5576020808501948460051b0101116101d557565b346101d55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576114636101b2565b5061146c6101da565b5060443567ffffffffffffffff81116101d55761148d9036906004016113fb565b505060643567ffffffffffffffff81116101d5576114af9036906004016113fb565b505060843567ffffffffffffffff81116101d5576114d1903690600401610241565b50506040517fbc197c81000000000000000000000000000000000000000000000000000000008152602090f35b346101d55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576115356101b2565b5061153e6101da565b5060843567ffffffffffffffff81116101d55761155f903690600401610241565b505060206040517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b346101d55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576004356115c56101da565b604435916bffffffffffffffffffffffff83168093036101d55730330361033d578273ffffffffffffffffffffffffffffffffffffffff836116507febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1967fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606097881b161785612cca565b6040519384521660208301526040820152a1005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90600182018092116116a157565b611664565b919082018092116116a157565b906116bd82610454565b6116ca60405191826103d7565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06116f88294610454565b0190602036910137565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518210156117455760209160051b010190565b611702565b919082519283825260005b8481106117945750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201611755565b9080602083519182815201916020808360051b8301019401926000915b8383106117d557505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080611848604085015160e0604086015260e085019061174a565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152970193019301919392906117c6565b906020808351928381520192019060005b81811061189d5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101611890565b805160ff1682526104f891602082810151151590820152610100611927611901604085015161012060408601526101208501906117a9565b606085015160608501526080850151608085015260a085015184820360a086015261174a565b9260c081015160c084015260e081015160e084015201519061010081840391015261187f565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b916119a36104f894926040855260408501906118c9565b92602081850391015261194d565b906119ce92916119bf611f0a565b906003825260e0820152611d80565b50156119f8577f1626ba7e0000000000000000000000000000000000000000000000000000000090565b600090565b6040513d6000823e3d90fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101d5570180359067ffffffffffffffff82116101d5576020019181360383136101d557565b908160209103126101d557516104f881610a72565b6040906104f894928152816020820152019161194d565b91909173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016918215611128578233036110fa5780611bb8575b506020915080610100611ae8920190611a09565b92611b2060405194859384937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611a6f565b0381305afa9081156110f5577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091611b89575b501603611b8457600090565b600190565b611bab915060203d602011611bb1575b611ba381836103d7565b810190611a5a565b38611b78565b503d611b99565b823b156101d5576040517fb760faf900000000000000000000000000000000000000000000000000000000815230600482015292600091849160249183915af19081156110f557602092611ae892611c12575b5090611ad4565b806110ef6000611c21936103d7565b38611c0b565b9160206104f893818152019161194d565b3d15611c63573d90611c498261046c565b91611c5760405193846103d7565b82523d6000602084013e565b606090565b600436108015611c755750565b611cab906000357fffffffff00000000000000000000000000000000000000000000000000000000811691611cfd575b50611f65565b73ffffffffffffffffffffffffffffffffffffffff8116611cc95750565b60008091604051368382378036810184815203915af4611ce7611c38565b9015611cf557602081519101f35b602081519101fd5b7fffffffff000000000000000000000000000000000000000000000000000000008092503660040360031b1b161638611ca5565b60207f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca039180305573ffffffffffffffffffffffffffffffffffffffff60405191168152a1565b90156117455790565b91907f800000000000000000000000000000000000000000000000000000000000000080611dd7611db18585611d77565b357fff000000000000000000000000000000000000000000000000000000000000001690565b1614611e36576000918291611deb9461297d565b905091909192808210611e06575050611e0390613ac6565b91565b7ffd41fcba0000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b5050611e41906127db565b90611e4b826128b5565b42811115611ed8575073ffffffffffffffffffffffffffffffffffffffff81168015159081611ecd575b50611e81575060019190565b7f8945c3130000000000000000000000000000000000000000000000000000000060005260048390523360245273ffffffffffffffffffffffffffffffffffffffff1660445260646000fd5b905033141538611e75565b7ff95b6ab700000000000000000000000000000000000000000000000000000000600052600484905260245260446000fd5b60405190610120820182811067ffffffffffffffff8211176103b6576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b73ffffffffffffffffffffffffffffffffffffffff906040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a120845216604082015260408152611fdc6060826103d7565b519020541690565b90611fee82610454565b611ffb60405191826103d7565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06120298294610454565b019060005b82811061203a57505050565b6020906040516120498161039a565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c08201528282850101520161202e565b909392938483116101d55784116101d5578101920390565b9190916120a5611f0a565b6000815292600190823560f81c827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818316016123475750600060608701525b60076120f460ff831660011c90565b16806122f6575b506010818116036122c157506001925b61211484611fe4565b92604087019384526000905b85821061212f57505050505050565b8281013560f81c9060010190918160018085160361229f575061217330612157838951611731565b519073ffffffffffffffffffffffffffffffffffffffff169052565b60028084161461227f575b600480841614612231575b6008808416146121fe575b6121e76121e160c0856121c08a60806121b78860108060019c9d16149351611731565b51019015159052565b6121d78a60a06121b7886020808716149351611731565b1660061c60031690565b60ff1690565b60c06121f4838951611731565b5101520190612120565b6001916121e7906121e19060c090878101359060200196906060612223878d51611731565b510152959450505050612194565b90612279908481013560e81c9060030161227261225961225184846116a6565b838a8a612082565b91906040612268888d51611731565b51019236916104a6565b90526116a6565b90612189565b90838101359060200191906020612297838951611731565b51015261217e565b6122bc92508481013560601c906014019290612157838951611731565b612173565b6020908116036122e35761ffff918381013560f01c906002015b92169261210b565b60ff918381013560f81c906001016122db565b61233a919385929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b92906080870152386120fb565b80850135606090811c9088015260140192506120e5565b906123688261286f565b8181036123ee57509060017f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f8819201908160405160208101907f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8252836040820152604081526123d86060826103d7565b51902055604080519182526020820192909252a1565b917f9b6514f40000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b61243a604092959493956060835260608301906118c9565b9460208201520152565b926104f896959260c09592855260208501526040840152606083015260808201528160a0820152019061174a565b6104f8939260609282526020820152816040820152019061174a565b6124a46104f894926060835260608301906118c9565b926020820152604081840391015261174a565b916000604082019384515190825b8281106124d6575b50505050505050565b6124e1818851611731565b51936124f060a0860151151590565b806127d3575b61279357506000936060810151801580158061278a575b6127525784906125206080850151151590565b1561270c576125cb92612547855173ffffffffffffffffffffffffffffffffffffffff1690565b911561270657505a905b6125c68b61259a60608d01516040890151908c8b604051998a967f4c4e814c00000000000000000000000000000000000000000000000000000000602089015260248801612444565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018552846103d7565b612c9d565b1561260e575b506040805187815260208101839052600192917f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a91a15b016124c5565b60c0018051156126bd57600181511461267e575160021461262f57386125d1565b9493505050507fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b925061266f612663612caf565b60405193849384612472565b0390a1388080808080806124cd565b50846108ce61268b612caf565b6040519384937f7f6b0bb10000000000000000000000000000000000000000000000000000000085526004850161248e565b509250600180937f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d6126fe6126f0612caf565b604051918291858c84612472565b0390a1612608565b90612551565b835161274793925073ffffffffffffffffffffffffffffffffffffffff169160208501519160001461274c57505a905b604085015192612c8b565b6125cb565b9061273c565b83886108ce5a6040519384937f2139527400000000000000000000000000000000000000000000000000000000855260048501612422565b50815a1061250d565b6040805188815260208101849052919550600192917f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b91819081016126fe565b5080156124f6565b61283d6128696127fb6127f5602085015115153090612d4e565b93612e49565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826103d7565b51902090565b60405160208101917f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83526040820152604081526128ae6060826103d7565b5190205490565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e8683526040820152604081526128f46060826103d7565b51902054906bffffffffffffffffffffffff8260601c921690565b6040519061291c826103bb565b60006020838281520152565b908160409103126101d557602060405191612942836103bb565b805183520151602082015290565b60409073ffffffffffffffffffffffffffffffffffffffff6104f89493168152816020820152019061174a565b909491939291853560f81c6001909381908761299761290f565b9360408089161480612c6d575b612b70575b505050600180861614612b4a5760028581161460208501526007600286901c1688820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101908096918196602016612a199060051c90565b612a2290611693565b8a820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101959098899a81612a6e846127db565b988993612a7a93612082565b91612a8493613260565b9098612a9891600052602052604060002090565b90612aab91600052602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff16612ad491600052602052604060002090565b94815190868215159283612b3f575b505081612b30575b50612af35750565b6040517fccbb534f000000000000000000000000000000000000000000000000000000008152815160048201526020909101516024820152604490fd5b90506020820151101538612aeb565b141591508638612ae3565b86612b659792949550612b5d9398612082565b93909261303e565b919394909293929190565b8a81013560601c985060140192509087908a90849015612b94575b508291506129a9565b60038101955073ffffffffffffffffffffffffffffffffffffffff945081013560e81c92604092612c17929091612be291612bdb918990612bd589836116a6565b92612082565b36916104a6565b83519586809481937fccce3bc80000000000000000000000000000000000000000000000000000000083523060048401612950565b0392165afa80156110f557612c3592600091612c3e575b50926116a6565b86388981612b8b565b612c60915060403d604011612c66575b612c5881836103d7565b810190612928565b38612c2e565b503d612c4e565b5073ffffffffffffffffffffffffffffffffffffffff8916156129a4565b9160009391849360208451940192f190565b9160009291839260208351930191f490565b3d90604051916020818401016040528083526000602084013e565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e868352604082015260408152612d096060826103d7565b51902055565b60405160208101917fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1208352604082015260408152612d096060826103d7565b15612dfe576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a0815261286960c0826103d7565b4690612d57565b805160209091019060005b818110612e1d5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101612e10565b610100810151604051612e648161283d602082018095612e05565b51902090612e73815160ff1690565b60ff811680612eec57505090612869612e8f6040840151613bc3565b9261283d60806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b60018103612f4a57505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46693810193845290810191909152606081019290925290612869816080810161283d565b60028103612fa057505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e460208201908152918101929092526060820192909252612869816080810161283d565b600303612ff4575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46660208201908152918101929092526060820192909252612869816080810161283d565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b9061243a906040939695949660608452606084019161194d565b919492909260009560009560009560009560009561305a611f0a565b60028152937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9460005b8281106130b1575050505050505080511515806130a3575b612af35750565b50602081015184111561309c565b600381019d50959b50939950919750929091906130d5908b9085013560e81c6116a6565b958a6000848903613219575089915b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c036131e9575090600161311e89613125948789612082565b908b61297d565b9c939c9b929b9a919a99909a9b9d8e9d9e8f905b106131a35750928b88511461319a575b808b101561316857508a60c08501528992959295949194939093613084565b7f37daf62b0000000000000000000000000000000000000000000000000000000060005260048b905260245260446000fd5b60008852613149565b8d8f6108ce6131b485858c8e612082565b9390926040519485947fb006aba000000000000000000000000000000000000000000000000000000000865260048601613024565b9798999a9160016131ff8b61320694888a612082565b908661297d565b50929d919c909b929a9092918e8e613139565b916130e4565b73ffffffffffffffffffffffffffffffffffffffff6104f895936060938352166020820152816040820152019161194d565b908160209103126101d5575190565b9391909360009460009460005b81811061327b575050505050565b8481013560f881901c9860019092019788979692909160fc1c988915613a5f575060018914613a1f5760028914613862576003891461383357600489146137b2576006891461371257600589146136c457600789146135fd57600889146135a7576009891461347e57600a891461331b577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b9091929394959697506003891697881561346d575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691019081019081613393918787612082565b6040517f898bd921000000000000000000000000000000000000000000000000000000008152939184916133cb918a60048501611a6f565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa9182156110f55761340e9360009361343a575b5060ff909a168091019a613e8f565b908015613434579061342891600052602052604060002090565b955b939291909361326d565b50613428565b60ff91935061345f9060203d8111613466575b61345781836103d7565b810190613251565b92906133ff565b503d61344d565b8084013560f81c9850600101613330565b90919293949596975060038916978815613596575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190810190816134f6918787612082565b6040517f13792a4a0000000000000000000000000000000000000000000000000000000081529391849161352e918b6004850161198c565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa9182156110f5576135709360009361343a575060ff909a168091019a613e8f565b908015613590579061358a91600052602052604060002090565b9561342a565b5061358a565b8084013560f81c9850600101613493565b9850602087019750949593949293919290918201356135c586613e36565b81146135d5575b61357090613e50565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506135cc565b975090919293949597600f169687156136b2575b602060006136236136909a9b86613cfe565b9c9092918a6040516136668161283d8a82019485603c917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008252601c8201520190565b51902092604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa156110f5576135709060ff6000519a1680910199613d41565b600189019883013560f81c9750613611565b9850602087019750949593949293919290918201358085146136ea575b61357090613df7565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506136e1565b989091929394959662ffffff98506137346121e1600c8416603f9060021c1690565b91821561379e575b600316801561378d575b90819061377190613769908781013560e81c906003019c168c01809c8989612082565b90898b613260565b911115613784575b906135709291613dac565b99820199613779565b50600281019084013560f01c613746565b8482013560f81c925060019091019061373c565b975097613808613815929394959697600f61381d93169085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290830180938686612082565b908688613260565b9061358a92980198600052602052604060002090565b985096509394929391929091908082013590602001968015613590579061358a91600052602052604060002090565b90919293949596975060038916978815613a0e575b8084013560601c996138d691601401906138969060021c6003166121e1565b9085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9081019061393a60208c6138ec85858b8b612082565b919073ffffffffffffffffffffffffffffffffffffffff8c604051968795869485937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611a6f565b0392165afa9081156110f5577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000916000916139f0575b5016036139ac57509060ff61357092991680910199613d41565b6108ce6139bd8c9389938989612082565b906040519485947fb2fed7ae0000000000000000000000000000000000000000000000000000000086526004860161321f565b613a08915060203d8111611bb157611ba381836103d7565b38613992565b8381013560f81c9850600101613877565b98600f91929394959697985016968715613a4e575b60148101976135709160ff9091169084013560601c613d41565b8281013560f81c9750600101613a34565b98509091929394959698600f16978815613ab1575b5060206000613a876136909a9b86613cfe565b9c90916040519384938c859094939260ff6060936080840197845216602083015260408201520152565b60018101995083013560f81c97506020613a74565b73ffffffffffffffffffffffffffffffffffffffff9060405160208101917fff0000000000000000000000000000000000000000000000000000000000000083527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060601b16602183015260358201527f0000000000000000000000000000000000000000000000000000000000000000605582015260558152613b8c6075826103d7565b51902016301490565b805160209091019060005b818110613bad5750505090565b8251845260209384019390920191600101613ba0565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0613c09613bf383610454565b92613c0160405194856103d7565b808452610454565b0136602083013760005b8351811015613ce55780613c2960019286611731565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152613cd1610120826103d7565b519020613cde8285611731565b5201613c13565b509091506040516128698161283d602082018095613b95565b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff81116116a15791565b90604051907fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208301937f53657175656e6365207369676e65723a0a000000000000000000000000000000855260601b1660318301526045820152604581526128696065826103d7565b916040519160208301937f53657175656e6365206e657374656420636f6e6669673a0a00000000000000008552603884015260588301526078820152607881526128696098826103d7565b60405160208101917f53657175656e636520737461746963206469676573743a0a000000000000000083526038820152603881526128696058826103d7565b61283d6128696127fb6127f5600060208601511515612d4e565b60405160208101917f53657175656e636520616e792061646472657373207375626469676573743a0a83526040820152604081526128696060826103d7565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e63652073617069656e7420636f6e6669673a0a00000000000000865260601b166039840152604d830152606d820152606d8152612869608d826103d756fea2646970667358221220825b940dd691f79f4782ba8dca1eaa7ff741f07679c4faf28637d8117499069a64736f6c634300081c003360a034607457601f613dff38819003918201601f19168301916001600160401b03831184841017607957808492602094604052833981010312607457516001600160a01b0381168103607457608052604051613d6f90816100908239608051818181610fe90152818161112601526119ba0152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6080604052600436101561001e575b361561001c5761001c611b82565b005b60003560e01c806223de291461018d578063025b22bc1461018857806313792a4a14610183578063150b7a021461017e5780631626ba7e1461017957806319822f7c146101745780631a9b23371461016f5780631f6a1eb91461016a57806329561426146101655780634fcf3eca1461016057806351605d801461015b5780636ea44577146101565780638943ec02146101515780638c3f55631461014c57806392dcb3fc146101475780639c145aed14610142578063a65d69d41461013d578063aaf10f4214610138578063ad55366b14610133578063b93ea7ad1461012e578063bc197c8114610129578063f23a6e61146101245763f727ef1c0361000e576114a5565b611418565b611346565b6111e7565b61119b565b61114a565b6110db565b610fc3565b610f65565b610f29565b610ea5565b610e76565b610dd2565b610cb6565b610bfd565b610b1c565b610ab9565b610a04565b61097c565b6108ef565b6107f2565b6102db565b61024f565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101b557565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101b557565b6044359073ffffffffffffffffffffffffffffffffffffffff821682036101b557565b359073ffffffffffffffffffffffffffffffffffffffff821682036101b557565b9181601f840112156101b55782359167ffffffffffffffff83116101b557602083818601950101116101b557565b346101b55760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557610286610192565b5061028f6101ba565b506102986101dd565b5060843567ffffffffffffffff81116101b5576102b9903690600401610221565b505060a43567ffffffffffffffff81116101b55761001c903690600401610221565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55761030d610192565b30330361035a576020817f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca0392305573ffffffffffffffffffffffffffffffffffffffff60405191168152a1005b7fa19dbf00000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff8211176103d357604052565b610388565b6040810190811067ffffffffffffffff8211176103d357604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176103d357604052565b6040519061044460e0836103f4565b565b60405190610444610120836103f4565b359060ff821682036101b557565b359081151582036101b557565b67ffffffffffffffff81116103d35760051b60200190565b67ffffffffffffffff81116103d357601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926104cf82610489565b916104dd60405193846103f4565b8294818452818301116101b5578281602093846000960137010152565b9080601f830112156101b557816020610515933591016104c3565b90565b81601f820112156101b55780359061052f82610471565b9261053d60405194856103f4565b82845260208085019360051b830101918183116101b55760208101935b83851061056957505050505090565b843567ffffffffffffffff81116101b557820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082860301126101b5576105b0610435565b916105bd60208301610200565b83526040820135602084015260608201359267ffffffffffffffff84116101b55760e0836105f28860208098819801016104fa565b60408401526080810135606084015261060d60a08201610464565b608084015261061e60c08201610464565b60a0840152013560c082015281520194019361055a565b9080601f830112156101b557813561064c81610471565b9261065a60405194856103f4565b81845260208085019260051b8201019283116101b557602001905b8282106106825750505090565b6020809161068f84610200565b815201910190610675565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126101b55760043567ffffffffffffffff81116101b5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82850301126101b55761070c610446565b9061071981600401610456565b825261072760248201610464565b6020830152604481013567ffffffffffffffff81116101b55784600461074f92840101610518565b6040830152606481013560608301526084810135608083015260a481013567ffffffffffffffff81116101b55784600461078b928401016104fa565b60a083015260c481013560c083015260e481013560e083015261010481013567ffffffffffffffff81116101b557600485916107c8930101610635565b610100820152916024359067ffffffffffffffff82116101b5576107ee91600401610221565b9091565b346101b5576108003661069a565b909161010081019261081b6108168551516115ad565b6115cd565b9160005b85518051821015610882579061087c61085761083d8360019561164b565b5173ffffffffffffffffffffffffffffffffffffffff1690565b610861838861164b565b9073ffffffffffffffffffffffffffffffffffffffff169052565b0161081f565b5050838386610897336108618351518561164b565b526108a3818484611c54565b50156108b55760405160018152602090f35b6108eb906040519384937ff58cc8b5000000000000000000000000000000000000000000000000000000008552600485016118a6565b0390fd5b346101b55760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557610926610192565b5061092f6101ba565b5060643567ffffffffffffffff81116101b557610950903690600401610221565b505060206040517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b346101b55760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043560243567ffffffffffffffff81116101b5576020916109d46109da923690600401610221565b916118cb565b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b346101b55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043567ffffffffffffffff81116101b5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126101b557610a87602091602435604435916004016119a0565b604051908152f35b7fffffffff000000000000000000000000000000000000000000000000000000008116036101b557565b346101b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576020610afe600435610af981610a8f565b611e39565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043567ffffffffffffffff81116101b557610b66903690600401610221565b9060243567ffffffffffffffff81116101b557610b8a610b94913690600401610221565b9190935a93611f6e565b91610ba86060840151608085015190612232565b610bb3828585611c54565b929015610bc5575061001c935061238b565b836108eb86926040519384937fa2b6d61b000000000000000000000000000000000000000000000000000000008552600485016118a6565b346101b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043530330361035a578015610c8c576020817f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf855604051908152a1005b7f4294d1270000000000000000000000000000000000000000000000000000000060005260046000fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557600435610cec81610a8f565b30330361035a5773ffffffffffffffffffffffffffffffffffffffff610d1182611e39565b1615610d775760407fffffffff000000000000000000000000000000000000000000000000000000007f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19216610d68600082612be3565b815190815260006020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f1c3812cc000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b60009103126101b557565b346101b55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760207fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf854604051908152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101b5576004359067ffffffffffffffff82116101b5576107ee91600401610221565b610e7f36610e2d565b9030330361035a57610e9561001c925a92611f6e565b90610e9f826126af565b9061238b565b346101b55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557610edc610192565b5060443567ffffffffffffffff81116101b557610efd903690600401610221565b505060206040517f8943ec02000000000000000000000000000000000000000000000000000000008152f35b346101b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576020610a87600435612743565b346101b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576040610fa1600435612789565b73ffffffffffffffffffffffffffffffffffffffff8351921682526020820152f35b346101b557610fd136610e2d565b9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001680156110b157330361108357303b156101b5576110579160009160405193849283927f6ea4457700000000000000000000000000000000000000000000000000000000845260048401611b41565b038183305af1801561107e5761106957005b80611078600061001c936103f4565b80610dc7565b611917565b7f1d6ddbf4000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7fd13d78350000000000000000000000000000000000000000000000000000000060005260046000fd5b346101b55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101b55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576020305473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346101b55760c06111b76000806111b13661069a565b91612851565b926111c383929361399a565b906040519586526020860152151560408501526060840152608083015260a0820152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043561121d81610a8f565b6112256101ba565b9030330361035a5773ffffffffffffffffffffffffffffffffffffffff61124b82611e39565b166112c5577f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19173ffffffffffffffffffffffffffffffffffffffff7fffffffff000000000000000000000000000000000000000000000000000000006040931691166112b88183612be3565b82519182526020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f5b4d6d6a000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b9181601f840112156101b55782359167ffffffffffffffff83116101b5576020808501948460051b0101116101b557565b346101b55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55761137d610192565b506113866101ba565b5060443567ffffffffffffffff81116101b5576113a7903690600401611315565b505060643567ffffffffffffffff81116101b5576113c9903690600401611315565b505060843567ffffffffffffffff81116101b5576113eb903690600401610221565b50506040517fbc197c81000000000000000000000000000000000000000000000000000000008152602090f35b346101b55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55761144f610192565b506114586101ba565b5060843567ffffffffffffffff81116101b557611479903690600401610221565b505060206040517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b346101b55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576004356114df6101ba565b604435916bffffffffffffffffffffffff83168093036101b55730330361035a578273ffffffffffffffffffffffffffffffffffffffff8361156a7febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1967fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606097881b161785612b9e565b6040519384521660208301526040820152a1005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90600182018092116115bb57565b61157e565b919082018092116115bb57565b906115d782610471565b6115e460405191826103f4565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06116128294610471565b0190602036910137565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805182101561165f5760209160051b010190565b61161c565b919082519283825260005b8481106116ae5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b8060208092840101518282860101520161166f565b9080602083519182815201916020808360051b8301019401926000915b8383106116ef57505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080611762604085015160e0604086015260e0850190611664565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152970193019301919392906116e0565b906020808351928381520192019060005b8181106117b75750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016117aa565b805160ff1682526105159160208281015115159082015261010061184161181b604085015161012060408601526101208501906116c3565b606085015160608501526080850151608085015260a085015184820360a0860152611664565b9260c081015160c084015260e081015160e0840152015190610100818403910152611799565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b916118bd61051594926040855260408501906117e3565b926020818503910152611867565b906118e892916118d9611dde565b906003825260e0820152611c54565b5015611912577f1626ba7e0000000000000000000000000000000000000000000000000000000090565b600090565b6040513d6000823e3d90fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101b5570180359067ffffffffffffffff82116101b5576020019181360383136101b557565b908160209103126101b5575161051581610a8f565b604090610515949281528160208201520191611867565b91909173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169182156110b1578233036110835780611ad2575b506020915080610100611a02920190611923565b92611a3a60405194859384937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611989565b0381305afa90811561107e577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091611aa3575b501603611a9e57600090565b600190565b611ac5915060203d602011611acb575b611abd81836103f4565b810190611974565b38611a92565b503d611ab3565b823b156101b5576040517fb760faf900000000000000000000000000000000000000000000000000000000815230600482015292600091849160249183915af190811561107e57602092611a0292611b2c575b50906119ee565b806110786000611b3b936103f4565b38611b25565b916020610515938181520191611867565b3d15611b7d573d90611b6382610489565b91611b7160405193846103f4565b82523d6000602084013e565b606090565b600436108015611b8f5750565b611bc5906000357fffffffff00000000000000000000000000000000000000000000000000000000811691611c17575b50611e39565b73ffffffffffffffffffffffffffffffffffffffff8116611be35750565b60008091604051368382378036810184815203915af4611c01611b52565b9015611c0f57602081519101f35b602081519101fd5b7fffffffff000000000000000000000000000000000000000000000000000000008092503660040360031b1b161638611bbf565b901561165f5790565b91907f800000000000000000000000000000000000000000000000000000000000000080611cab611c858585611c4b565b357fff000000000000000000000000000000000000000000000000000000000000001690565b1614611d0a576000918291611cbf94612851565b905091909192808210611cda575050611cd79061399a565b91565b7ffd41fcba0000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b5050611d15906126af565b90611d1f82612789565b42811115611dac575073ffffffffffffffffffffffffffffffffffffffff81168015159081611da1575b50611d55575060019190565b7f8945c3130000000000000000000000000000000000000000000000000000000060005260048390523360245273ffffffffffffffffffffffffffffffffffffffff1660445260646000fd5b905033141538611d49565b7ff95b6ab700000000000000000000000000000000000000000000000000000000600052600484905260245260446000fd5b60405190610120820182811067ffffffffffffffff8211176103d3576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b73ffffffffffffffffffffffffffffffffffffffff906040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a120845216604082015260408152611eb06060826103f4565b519020541690565b90611ec282610471565b611ecf60405191826103f4565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611efd8294610471565b019060005b828110611f0e57505050565b602090604051611f1d816103b7565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c082015282828501015201611f02565b909392938483116101b55784116101b5578101920390565b919091611f79611dde565b6000815292600190823560f81c827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8183160161221b5750600060608701525b6007611fc860ff831660011c90565b16806121ca575b5060108181160361219557506001925b611fe884611eb8565b92604087019384526000905b85821061200357505050505050565b8281013560f81c9060010190918160018085160361217357506120473061202b83895161164b565b519073ffffffffffffffffffffffffffffffffffffffff169052565b600280841614612153575b600480841614612105575b6008808416146120d2575b6120bb6120b560c0856120948a608061208b8860108060019c9d1614935161164b565b51019015159052565b6120ab8a60a061208b88602080871614935161164b565b1660061c60031690565b60ff1690565b60c06120c883895161164b565b5101520190611ff4565b6001916120bb906120b59060c0908781013590602001969060606120f7878d5161164b565b510152959450505050612068565b9061214d908481013560e81c9060030161214661212d61212584846115c0565b838a8a611f56565b9190604061213c888d5161164b565b51019236916104c3565b90526115c0565b9061205d565b9083810135906020019190602061216b83895161164b565b510152612052565b61219092508481013560601c90601401929061202b83895161164b565b612047565b6020908116036121b75761ffff918381013560f01c906002015b921692611fdf565b60ff918381013560f81c906001016121af565b61220e919385929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290608087015238611fcf565b80850135606090811c908801526014019250611fb9565b9061223c82612743565b8181036122c257509060017f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f8819201908160405160208101907f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8252836040820152604081526122ac6060826103f4565b51902055604080519182526020820192909252a1565b917f9b6514f40000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b61230e604092959493956060835260608301906117e3565b9460208201520152565b9261051596959260c09592855260208501526040840152606083015260808201528160a08201520190611664565b6105159392606092825260208201528160408201520190611664565b61237861051594926060835260608301906117e3565b9260208201526040818403910152611664565b916000604082019384515190825b8281106123aa575b50505050505050565b6123b581885161164b565b51936123c460a0860151151590565b806126a7575b61266757506000936060810151801580158061265e575b6126265784906123f46080850151151590565b156125e05761249f9261241b855173ffffffffffffffffffffffffffffffffffffffff1690565b91156125da57505a905b61249a8b61246e60608d01516040890151908c8b604051998a967f4c4e814c00000000000000000000000000000000000000000000000000000000602089015260248801612318565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018552846103f4565b612b71565b156124e2575b506040805187815260208101839052600192917f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a91a15b01612399565b60c001805115612591576001815114612552575160021461250357386124a5565b9493505050507fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b9250612543612537612b83565b60405193849384612346565b0390a1388080808080806123a1565b50846108eb61255f612b83565b6040519384937f7f6b0bb100000000000000000000000000000000000000000000000000000000855260048501612362565b509250600180937f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d6125d26125c4612b83565b604051918291858c84612346565b0390a16124dc565b90612425565b835161261b93925073ffffffffffffffffffffffffffffffffffffffff169160208501519160001461262057505a905b604085015192612b5f565b61249f565b90612610565b83886108eb5a6040519384937f21395274000000000000000000000000000000000000000000000000000000008552600485016122f6565b50815a106123e1565b6040805188815260208101849052919550600192917f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b91819081016125d2565b5080156123ca565b61271161273d6126cf6126c9602085015115153090612c22565b93612d1d565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826103f4565b51902090565b60405160208101917f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83526040820152604081526127826060826103f4565b5190205490565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e8683526040820152604081526127c86060826103f4565b51902054906bffffffffffffffffffffffff8260601c921690565b604051906127f0826103d8565b60006020838281520152565b908160409103126101b557602060405191612816836103d8565b805183520151602082015290565b60409073ffffffffffffffffffffffffffffffffffffffff61051594931681528160208201520190611664565b909491939291853560f81c6001909381908761286b6127e3565b9360408089161480612b41575b612a44575b505050600180861614612a1e5760028581161460208501526007600286901c1688820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691019080969181966020166128ed9060051c90565b6128f6906115ad565b8a820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101959098899a81612942846126af565b98899361294e93611f56565b9161295893613134565b909861296c91600052602052604060002090565b9061297f91600052602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff166129a891600052602052604060002090565b94815190868215159283612a13575b505081612a04575b506129c75750565b6040517fccbb534f000000000000000000000000000000000000000000000000000000008152815160048201526020909101516024820152604490fd5b905060208201511015386129bf565b1415915086386129b7565b86612a399792949550612a319398611f56565b939092612f12565b919394909293929190565b8a81013560601c985060140192509087908a90849015612a68575b5082915061287d565b60038101955073ffffffffffffffffffffffffffffffffffffffff945081013560e81c92604092612aeb929091612ab691612aaf918990612aa989836115c0565b92611f56565b36916104c3565b83519586809481937fccce3bc80000000000000000000000000000000000000000000000000000000083523060048401612824565b0392165afa801561107e57612b0992600091612b12575b50926115c0565b86388981612a5f565b612b34915060403d604011612b3a575b612b2c81836103f4565b8101906127fc565b38612b02565b503d612b22565b5073ffffffffffffffffffffffffffffffffffffffff891615612878565b9160009391849360208451940192f190565b9160009291839260208351930191f490565b3d90604051916020818401016040528083526000602084013e565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e868352604082015260408152612bdd6060826103f4565b51902055565b60405160208101917fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1208352604082015260408152612bdd6060826103f4565b15612cd2576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a0815261273d60c0826103f4565b4690612c2b565b805160209091019060005b818110612cf15750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101612ce4565b610100810151604051612d3881612711602082018095612cd9565b51902090612d47815160ff1690565b60ff811680612dc05750509061273d612d6360408401516139fd565b9261271160806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b60018103612e1e57505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4669381019384529081019190915260608101929092529061273d8160808101612711565b60028103612e7457505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e46020820190815291810192909252606082019290925261273d8160808101612711565b600303612ec8575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4666020820190815291810192909252606082019290925261273d8160808101612711565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b9061230e9060409396959496606084526060840191611867565b9194929092600095600095600095600095600095612f2e611dde565b60028152937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9460005b828110612f8557505050505050508051151580612f77575b6129c75750565b506020810151841115612f70565b600381019d50959b5093995091975092909190612fa9908b9085013560e81c6115c0565b958a60008489036130ed575089915b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c036130bd5750906001612ff289612ff9948789611f56565b908b612851565b9c939c9b929b9a919a99909a9b9d8e9d9e8f905b106130775750928b88511461306e575b808b101561303c57508a60c08501528992959295949194939093612f58565b7f37daf62b0000000000000000000000000000000000000000000000000000000060005260048b905260245260446000fd5b6000885261301d565b8d8f6108eb61308885858c8e611f56565b9390926040519485947fb006aba000000000000000000000000000000000000000000000000000000000865260048601612ef8565b9798999a9160016130d38b6130da94888a611f56565b9086612851565b50929d919c909b929a9092918e8e61300d565b91612fb8565b73ffffffffffffffffffffffffffffffffffffffff610515959360609383521660208201528160408201520191611867565b908160209103126101b5575190565b9391909360009460009460005b81811061314f575050505050565b8481013560f881901c9860019092019788979692909160fc1c9889156139335750600189146138f357600289146137365760038914613707576004891461368657600689146135e6576005891461359857600789146134d1576008891461347b576009891461335257600a89146131ef577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b90919293949596975060038916978815613341575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691019081019081613267918787611f56565b6040517f898bd9210000000000000000000000000000000000000000000000000000000081529391849161329f918a60048501611989565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa91821561107e576132e29360009361330e575b5060ff909a168091019a613cc9565b90801561330857906132fc91600052602052604060002090565b955b9392919093613141565b506132fc565b60ff9193506133339060203d811161333a575b61332b81836103f4565b810190613125565b92906132d3565b503d613321565b8084013560f81c9850600101613204565b9091929394959697506003891697881561346a575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190810190816133ca918787611f56565b6040517f13792a4a00000000000000000000000000000000000000000000000000000000815293918491613402918b600485016118a6565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa91821561107e576134449360009361330e575060ff909a168091019a613cc9565b908015613464579061345e91600052602052604060002090565b956132fe565b5061345e565b8084013560f81c9850600101613367565b98506020870197509495939492939192909182013561349986613c70565b81146134a9575b61344490613c8a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506134a0565b975090919293949597600f16968715613586575b602060006134f76135649a9b86613b38565b9c9092918a60405161353a816127118a82019485603c917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008252601c8201520190565b51902092604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa1561107e576134449060ff6000519a1680910199613b7b565b600189019883013560f81c97506134e5565b9850602087019750949593949293919290918201358085146135be575b61344490613c31565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506135b5565b989091929394959662ffffff98506136086120b5600c8416603f9060021c1690565b918215613672575b6003168015613661575b9081906136459061363d908781013560e81c906003019c168c01809c8989611f56565b90898b613134565b911115613658575b906134449291613be6565b9982019961364d565b50600281019084013560f01c61361a565b8482013560f81c9250600190910190613610565b9750976136dc6136e9929394959697600f6136f193169085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290830180938686611f56565b908688613134565b9061345e92980198600052602052604060002090565b985096509394929391929091908082013590602001968015613464579061345e91600052602052604060002090565b909192939495969750600389169788156138e2575b8084013560601c996137aa916014019061376a9060021c6003166120b5565b9085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9081019061380e60208c6137c085858b8b611f56565b919073ffffffffffffffffffffffffffffffffffffffff8c604051968795869485937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611989565b0392165afa90811561107e577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000916000916138c4575b50160361388057509060ff61344492991680910199613b7b565b6108eb6138918c9389938989611f56565b906040519485947fb2fed7ae000000000000000000000000000000000000000000000000000000008652600486016130f3565b6138dc915060203d8111611acb57611abd81836103f4565b38613866565b8381013560f81c985060010161374b565b98600f91929394959697985016968715613922575b60148101976134449160ff9091169084013560601c613b7b565b8281013560f81c9750600101613908565b98509091929394959698600f16978815613985575b506020600061395b6135649a9b86613b38565b9c90916040519384938c859094939260ff6060936080840197845216602083015260408201520152565b60018101995083013560f81c97506020613948565b80151590816139a7575090565b90507fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8541490565b805160209091019060005b8181106139e75750505090565b82518452602093840193909201916001016139da565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0613a43613a2d83610471565b92613a3b60405194856103f4565b808452610471565b0136602083013760005b8351811015613b1f5780613a636001928661164b565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152613b0b610120826103f4565b519020613b18828561164b565b5201613a4d565b5090915060405161273d816127116020820180956139cf565b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff81116115bb5791565b90604051907fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208301937f53657175656e6365207369676e65723a0a000000000000000000000000000000855260601b16603183015260458201526045815261273d6065826103f4565b916040519160208301937f53657175656e6365206e657374656420636f6e6669673a0a000000000000000085526038840152605883015260788201526078815261273d6098826103f4565b60405160208101917f53657175656e636520737461746963206469676573743a0a0000000000000000835260388201526038815261273d6058826103f4565b61271161273d6126cf6126c9600060208601511515612c22565b60405160208101917f53657175656e636520616e792061646472657373207375626469676573743a0a835260408201526040815261273d6060826103f4565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e63652073617069656e7420636f6e6669673a0a00000000000000865260601b166039840152604d830152606d820152606d815261273d608d826103f456fea264697066735822122071c846bfb3a07ed1d03bb0cecee955d8b864be4c4d91b0f9a960528ecc060e8964736f6c634300081c0033","sourceMap":"475:414:28:-:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;634:29;;;;;-1:-1:-1;;;;;634:29:28;;;;;;;;475:414;634:29;;;;;;-1:-1:-1;;;;;475:414:28;;;;634:29;;;-1:-1:-1;634:29:28;;;;;;475:414;;;;;-1:-1:-1;;;;;475:414:28;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;475:414:28;;;;;;-1:-1:-1;2177:99:30;475:414:28;2177:99:30;;;;1335:4:53;;;2177:99:30;;;;1273:70:53;;;;;;;:::i;:::-;2177:99:30;;475:414:28;1273:70:53;;;1263:81;1351:29;;1386:18;;-1:-1:-1;;;;;475:414:28;1410:32:53;;581:24:44;;475:414:28;;;;;;;;1351:29:53;475:414:28;;;;;;;;;;1386:18:53;475:414:28;;;;;;;;;;1410:32:53;475:414:28;;;;;;;;;;581:24:44;475:414:28;;;;;;;;;;;;;;;;2177:99:30;;475:414:28;2177:99:30;;;;;;;;;;;;;;;475:414:28;;;;-1:-1:-1;475:414:28;;;;;-1:-1:-1;475:414:28;634:29;475:414;;;-1:-1:-1;475:414:28;;;;;;-1:-1:-1;475:414:28;;;;;;;-1:-1:-1;;475:414:28;;;;-1:-1:-1;;;;;475:414:28;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;475:414:28;;;;;;:::o","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436101561001e575b361561001c5761001c611c68565b005b60003560e01c806223de29146101ad578063025b22bc146101a857806313792a4a146101a3578063150b7a021461019e5780631626ba7e1461019957806319822f7c146101945780631a9b23371461018f5780631f6a1eb91461018a578063257671f51461018557806329561426146101805780632dd310001461017b5780634fcf3eca146101765780636ea44577146101715780638943ec021461016c5780638c3f55631461016757806392dcb3fc146101625780639c145aed1461015d5780639f69ef5414610158578063a65d69d414610153578063aaf10f421461014e578063ad55366b14610149578063b93ea7ad14610144578063bc197c811461013f578063f23a6e611461013a5763f727ef1c0361000e5761158b565b6114fe565b61142c565b6112cd565b611281565b611230565b6111c1565b611152565b61103a565b610fdc565b610fa0565b610f1c565b610eed565b610d93565b610d24565b610c44565b610beb565b610aff565b610a9c565b6109e7565b61095f565b6108d2565b6107d5565b6102fb565b61026f565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101d557565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101d557565b6044359073ffffffffffffffffffffffffffffffffffffffff821682036101d557565b359073ffffffffffffffffffffffffffffffffffffffff821682036101d557565b9181601f840112156101d55782359167ffffffffffffffff83116101d557602083818601950101116101d557565b346101d55760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576102a66101b2565b506102af6101da565b506102b86101fd565b5060843567ffffffffffffffff81116101d5576102d9903690600401610241565b505060a43567ffffffffffffffff81116101d55761001c903690600401610241565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55761032d6101b2565b30330361033d5761001c90611d31565b7fa19dbf00000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff8211176103b657604052565b61036b565b6040810190811067ffffffffffffffff8211176103b657604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176103b657604052565b6040519061042760e0836103d7565b565b60405190610427610120836103d7565b359060ff821682036101d557565b359081151582036101d557565b67ffffffffffffffff81116103b65760051b60200190565b67ffffffffffffffff81116103b657601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926104b28261046c565b916104c060405193846103d7565b8294818452818301116101d5578281602093846000960137010152565b9080601f830112156101d5578160206104f8933591016104a6565b90565b81601f820112156101d55780359061051282610454565b9261052060405194856103d7565b82845260208085019360051b830101918183116101d55760208101935b83851061054c57505050505090565b843567ffffffffffffffff81116101d557820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082860301126101d557610593610418565b916105a060208301610220565b83526040820135602084015260608201359267ffffffffffffffff84116101d55760e0836105d58860208098819801016104dd565b6040840152608081013560608401526105f060a08201610447565b608084015261060160c08201610447565b60a0840152013560c082015281520194019361053d565b9080601f830112156101d557813561062f81610454565b9261063d60405194856103d7565b81845260208085019260051b8201019283116101d557602001905b8282106106655750505090565b6020809161067284610220565b815201910190610658565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126101d55760043567ffffffffffffffff81116101d5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82850301126101d5576106ef610429565b906106fc81600401610439565b825261070a60248201610447565b6020830152604481013567ffffffffffffffff81116101d557846004610732928401016104fb565b6040830152606481013560608301526084810135608083015260a481013567ffffffffffffffff81116101d55784600461076e928401016104dd565b60a083015260c481013560c083015260e481013560e083015261010481013567ffffffffffffffff81116101d557600485916107ab930101610618565b610100820152916024359067ffffffffffffffff82116101d5576107d191600401610241565b9091565b346101d5576107e33661067d565b90916101008101926107fe6107f9855151611693565b6116b3565b9160005b85518051821015610865579061085f61083a61082083600195611731565b5173ffffffffffffffffffffffffffffffffffffffff1690565b6108448388611731565b9073ffffffffffffffffffffffffffffffffffffffff169052565b01610802565b505083838661087a3361084483515185611731565b52610886818484611d80565b50156108985760405160018152602090f35b6108ce906040519384937ff58cc8b50000000000000000000000000000000000000000000000000000000085526004850161198c565b0390fd5b346101d55760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576109096101b2565b506109126101da565b5060643567ffffffffffffffff81116101d557610933903690600401610241565b505060206040517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b346101d55760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760043560243567ffffffffffffffff81116101d5576020916109b76109bd923690600401610241565b916119b1565b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b346101d55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760043567ffffffffffffffff81116101d5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126101d557610a6a60209160243560443591600401611a86565b604051908152f35b7fffffffff000000000000000000000000000000000000000000000000000000008116036101d557565b346101d55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576020610ae1600435610adc81610a72565b611f65565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760043567ffffffffffffffff81116101d557610b49903690600401610241565b9060243567ffffffffffffffff81116101d557610b6d610b77913690600401610241565b9190935a9361209a565b91610b8b606084015160808501519061235e565b610b96828585611d80565b929015610ba8575061001c93506124b7565b836108ce86926040519384937fa2b6d61b0000000000000000000000000000000000000000000000000000000085526004850161198c565b60009103126101d557565b346101d55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346101d55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760043530330361033d578015610cfa576020817f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf855604051908152a161001c7f0000000000000000000000000000000000000000000000000000000000000000611d31565b7f4294d1270000000000000000000000000000000000000000000000000000000060005260046000fd5b346101d55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d557600435610dc981610a72565b30330361033d5773ffffffffffffffffffffffffffffffffffffffff610dee82611f65565b1615610e545760407fffffffff000000000000000000000000000000000000000000000000000000007f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19216610e45600082612d0f565b815190815260006020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f1c3812cc000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101d5576004359067ffffffffffffffff82116101d5576107d191600401610241565b610ef636610ea4565b9030330361033d57610f0c61001c925a9261209a565b90610f16826127db565b906124b7565b346101d55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d557610f536101b2565b5060443567ffffffffffffffff81116101d557610f74903690600401610241565b505060206040517f8943ec02000000000000000000000000000000000000000000000000000000008152f35b346101d55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576020610a6a60043561286f565b346101d55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760406110186004356128b5565b73ffffffffffffffffffffffffffffffffffffffff8351921682526020820152f35b346101d55761104836610ea4565b9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001680156111285733036110fa57303b156101d5576110ce9160009160405193849283927f6ea4457700000000000000000000000000000000000000000000000000000000845260048401611c27565b038183305af180156110f5576110e057005b806110ef600061001c936103d7565b80610be0565b6119fd565b7f1d6ddbf4000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7fd13d78350000000000000000000000000000000000000000000000000000000060005260046000fd5b346101d55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101d55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101d55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576020305473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346101d55760c061129d6000806112973661067d565b9161297d565b926112a9839293613ac6565b906040519586526020860152151560408501526060840152608083015260a0820152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760043561130381610a72565b61130b6101da565b9030330361033d5773ffffffffffffffffffffffffffffffffffffffff61133182611f65565b166113ab577f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19173ffffffffffffffffffffffffffffffffffffffff7fffffffff0000000000000000000000000000000000000000000000000000000060409316911661139e8183612d0f565b82519182526020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f5b4d6d6a000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b9181601f840112156101d55782359167ffffffffffffffff83116101d5576020808501948460051b0101116101d557565b346101d55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576114636101b2565b5061146c6101da565b5060443567ffffffffffffffff81116101d55761148d9036906004016113fb565b505060643567ffffffffffffffff81116101d5576114af9036906004016113fb565b505060843567ffffffffffffffff81116101d5576114d1903690600401610241565b50506040517fbc197c81000000000000000000000000000000000000000000000000000000008152602090f35b346101d55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576115356101b2565b5061153e6101da565b5060843567ffffffffffffffff81116101d55761155f903690600401610241565b505060206040517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b346101d55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576004356115c56101da565b604435916bffffffffffffffffffffffff83168093036101d55730330361033d578273ffffffffffffffffffffffffffffffffffffffff836116507febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1967fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606097881b161785612cca565b6040519384521660208301526040820152a1005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90600182018092116116a157565b611664565b919082018092116116a157565b906116bd82610454565b6116ca60405191826103d7565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06116f88294610454565b0190602036910137565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518210156117455760209160051b010190565b611702565b919082519283825260005b8481106117945750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201611755565b9080602083519182815201916020808360051b8301019401926000915b8383106117d557505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080611848604085015160e0604086015260e085019061174a565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152970193019301919392906117c6565b906020808351928381520192019060005b81811061189d5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101611890565b805160ff1682526104f891602082810151151590820152610100611927611901604085015161012060408601526101208501906117a9565b606085015160608501526080850151608085015260a085015184820360a086015261174a565b9260c081015160c084015260e081015160e084015201519061010081840391015261187f565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b916119a36104f894926040855260408501906118c9565b92602081850391015261194d565b906119ce92916119bf611f0a565b906003825260e0820152611d80565b50156119f8577f1626ba7e0000000000000000000000000000000000000000000000000000000090565b600090565b6040513d6000823e3d90fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101d5570180359067ffffffffffffffff82116101d5576020019181360383136101d557565b908160209103126101d557516104f881610a72565b6040906104f894928152816020820152019161194d565b91909173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016918215611128578233036110fa5780611bb8575b506020915080610100611ae8920190611a09565b92611b2060405194859384937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611a6f565b0381305afa9081156110f5577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091611b89575b501603611b8457600090565b600190565b611bab915060203d602011611bb1575b611ba381836103d7565b810190611a5a565b38611b78565b503d611b99565b823b156101d5576040517fb760faf900000000000000000000000000000000000000000000000000000000815230600482015292600091849160249183915af19081156110f557602092611ae892611c12575b5090611ad4565b806110ef6000611c21936103d7565b38611c0b565b9160206104f893818152019161194d565b3d15611c63573d90611c498261046c565b91611c5760405193846103d7565b82523d6000602084013e565b606090565b600436108015611c755750565b611cab906000357fffffffff00000000000000000000000000000000000000000000000000000000811691611cfd575b50611f65565b73ffffffffffffffffffffffffffffffffffffffff8116611cc95750565b60008091604051368382378036810184815203915af4611ce7611c38565b9015611cf557602081519101f35b602081519101fd5b7fffffffff000000000000000000000000000000000000000000000000000000008092503660040360031b1b161638611ca5565b60207f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca039180305573ffffffffffffffffffffffffffffffffffffffff60405191168152a1565b90156117455790565b91907f800000000000000000000000000000000000000000000000000000000000000080611dd7611db18585611d77565b357fff000000000000000000000000000000000000000000000000000000000000001690565b1614611e36576000918291611deb9461297d565b905091909192808210611e06575050611e0390613ac6565b91565b7ffd41fcba0000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b5050611e41906127db565b90611e4b826128b5565b42811115611ed8575073ffffffffffffffffffffffffffffffffffffffff81168015159081611ecd575b50611e81575060019190565b7f8945c3130000000000000000000000000000000000000000000000000000000060005260048390523360245273ffffffffffffffffffffffffffffffffffffffff1660445260646000fd5b905033141538611e75565b7ff95b6ab700000000000000000000000000000000000000000000000000000000600052600484905260245260446000fd5b60405190610120820182811067ffffffffffffffff8211176103b6576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b73ffffffffffffffffffffffffffffffffffffffff906040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a120845216604082015260408152611fdc6060826103d7565b519020541690565b90611fee82610454565b611ffb60405191826103d7565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06120298294610454565b019060005b82811061203a57505050565b6020906040516120498161039a565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c08201528282850101520161202e565b909392938483116101d55784116101d5578101920390565b9190916120a5611f0a565b6000815292600190823560f81c827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818316016123475750600060608701525b60076120f460ff831660011c90565b16806122f6575b506010818116036122c157506001925b61211484611fe4565b92604087019384526000905b85821061212f57505050505050565b8281013560f81c9060010190918160018085160361229f575061217330612157838951611731565b519073ffffffffffffffffffffffffffffffffffffffff169052565b60028084161461227f575b600480841614612231575b6008808416146121fe575b6121e76121e160c0856121c08a60806121b78860108060019c9d16149351611731565b51019015159052565b6121d78a60a06121b7886020808716149351611731565b1660061c60031690565b60ff1690565b60c06121f4838951611731565b5101520190612120565b6001916121e7906121e19060c090878101359060200196906060612223878d51611731565b510152959450505050612194565b90612279908481013560e81c9060030161227261225961225184846116a6565b838a8a612082565b91906040612268888d51611731565b51019236916104a6565b90526116a6565b90612189565b90838101359060200191906020612297838951611731565b51015261217e565b6122bc92508481013560601c906014019290612157838951611731565b612173565b6020908116036122e35761ffff918381013560f01c906002015b92169261210b565b60ff918381013560f81c906001016122db565b61233a919385929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b92906080870152386120fb565b80850135606090811c9088015260140192506120e5565b906123688261286f565b8181036123ee57509060017f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f8819201908160405160208101907f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8252836040820152604081526123d86060826103d7565b51902055604080519182526020820192909252a1565b917f9b6514f40000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b61243a604092959493956060835260608301906118c9565b9460208201520152565b926104f896959260c09592855260208501526040840152606083015260808201528160a0820152019061174a565b6104f8939260609282526020820152816040820152019061174a565b6124a46104f894926060835260608301906118c9565b926020820152604081840391015261174a565b916000604082019384515190825b8281106124d6575b50505050505050565b6124e1818851611731565b51936124f060a0860151151590565b806127d3575b61279357506000936060810151801580158061278a575b6127525784906125206080850151151590565b1561270c576125cb92612547855173ffffffffffffffffffffffffffffffffffffffff1690565b911561270657505a905b6125c68b61259a60608d01516040890151908c8b604051998a967f4c4e814c00000000000000000000000000000000000000000000000000000000602089015260248801612444565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018552846103d7565b612c9d565b1561260e575b506040805187815260208101839052600192917f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a91a15b016124c5565b60c0018051156126bd57600181511461267e575160021461262f57386125d1565b9493505050507fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b925061266f612663612caf565b60405193849384612472565b0390a1388080808080806124cd565b50846108ce61268b612caf565b6040519384937f7f6b0bb10000000000000000000000000000000000000000000000000000000085526004850161248e565b509250600180937f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d6126fe6126f0612caf565b604051918291858c84612472565b0390a1612608565b90612551565b835161274793925073ffffffffffffffffffffffffffffffffffffffff169160208501519160001461274c57505a905b604085015192612c8b565b6125cb565b9061273c565b83886108ce5a6040519384937f2139527400000000000000000000000000000000000000000000000000000000855260048501612422565b50815a1061250d565b6040805188815260208101849052919550600192917f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b91819081016126fe565b5080156124f6565b61283d6128696127fb6127f5602085015115153090612d4e565b93612e49565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826103d7565b51902090565b60405160208101917f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83526040820152604081526128ae6060826103d7565b5190205490565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e8683526040820152604081526128f46060826103d7565b51902054906bffffffffffffffffffffffff8260601c921690565b6040519061291c826103bb565b60006020838281520152565b908160409103126101d557602060405191612942836103bb565b805183520151602082015290565b60409073ffffffffffffffffffffffffffffffffffffffff6104f89493168152816020820152019061174a565b909491939291853560f81c6001909381908761299761290f565b9360408089161480612c6d575b612b70575b505050600180861614612b4a5760028581161460208501526007600286901c1688820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101908096918196602016612a199060051c90565b612a2290611693565b8a820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101959098899a81612a6e846127db565b988993612a7a93612082565b91612a8493613260565b9098612a9891600052602052604060002090565b90612aab91600052602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff16612ad491600052602052604060002090565b94815190868215159283612b3f575b505081612b30575b50612af35750565b6040517fccbb534f000000000000000000000000000000000000000000000000000000008152815160048201526020909101516024820152604490fd5b90506020820151101538612aeb565b141591508638612ae3565b86612b659792949550612b5d9398612082565b93909261303e565b919394909293929190565b8a81013560601c985060140192509087908a90849015612b94575b508291506129a9565b60038101955073ffffffffffffffffffffffffffffffffffffffff945081013560e81c92604092612c17929091612be291612bdb918990612bd589836116a6565b92612082565b36916104a6565b83519586809481937fccce3bc80000000000000000000000000000000000000000000000000000000083523060048401612950565b0392165afa80156110f557612c3592600091612c3e575b50926116a6565b86388981612b8b565b612c60915060403d604011612c66575b612c5881836103d7565b810190612928565b38612c2e565b503d612c4e565b5073ffffffffffffffffffffffffffffffffffffffff8916156129a4565b9160009391849360208451940192f190565b9160009291839260208351930191f490565b3d90604051916020818401016040528083526000602084013e565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e868352604082015260408152612d096060826103d7565b51902055565b60405160208101917fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1208352604082015260408152612d096060826103d7565b15612dfe576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a0815261286960c0826103d7565b4690612d57565b805160209091019060005b818110612e1d5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101612e10565b610100810151604051612e648161283d602082018095612e05565b51902090612e73815160ff1690565b60ff811680612eec57505090612869612e8f6040840151613bc3565b9261283d60806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b60018103612f4a57505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46693810193845290810191909152606081019290925290612869816080810161283d565b60028103612fa057505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e460208201908152918101929092526060820192909252612869816080810161283d565b600303612ff4575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46660208201908152918101929092526060820192909252612869816080810161283d565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b9061243a906040939695949660608452606084019161194d565b919492909260009560009560009560009560009561305a611f0a565b60028152937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9460005b8281106130b1575050505050505080511515806130a3575b612af35750565b50602081015184111561309c565b600381019d50959b50939950919750929091906130d5908b9085013560e81c6116a6565b958a6000848903613219575089915b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c036131e9575090600161311e89613125948789612082565b908b61297d565b9c939c9b929b9a919a99909a9b9d8e9d9e8f905b106131a35750928b88511461319a575b808b101561316857508a60c08501528992959295949194939093613084565b7f37daf62b0000000000000000000000000000000000000000000000000000000060005260048b905260245260446000fd5b60008852613149565b8d8f6108ce6131b485858c8e612082565b9390926040519485947fb006aba000000000000000000000000000000000000000000000000000000000865260048601613024565b9798999a9160016131ff8b61320694888a612082565b908661297d565b50929d919c909b929a9092918e8e613139565b916130e4565b73ffffffffffffffffffffffffffffffffffffffff6104f895936060938352166020820152816040820152019161194d565b908160209103126101d5575190565b9391909360009460009460005b81811061327b575050505050565b8481013560f881901c9860019092019788979692909160fc1c988915613a5f575060018914613a1f5760028914613862576003891461383357600489146137b2576006891461371257600589146136c457600789146135fd57600889146135a7576009891461347e57600a891461331b577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b9091929394959697506003891697881561346d575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691019081019081613393918787612082565b6040517f898bd921000000000000000000000000000000000000000000000000000000008152939184916133cb918a60048501611a6f565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa9182156110f55761340e9360009361343a575b5060ff909a168091019a613e8f565b908015613434579061342891600052602052604060002090565b955b939291909361326d565b50613428565b60ff91935061345f9060203d8111613466575b61345781836103d7565b810190613251565b92906133ff565b503d61344d565b8084013560f81c9850600101613330565b90919293949596975060038916978815613596575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190810190816134f6918787612082565b6040517f13792a4a0000000000000000000000000000000000000000000000000000000081529391849161352e918b6004850161198c565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa9182156110f5576135709360009361343a575060ff909a168091019a613e8f565b908015613590579061358a91600052602052604060002090565b9561342a565b5061358a565b8084013560f81c9850600101613493565b9850602087019750949593949293919290918201356135c586613e36565b81146135d5575b61357090613e50565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506135cc565b975090919293949597600f169687156136b2575b602060006136236136909a9b86613cfe565b9c9092918a6040516136668161283d8a82019485603c917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008252601c8201520190565b51902092604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa156110f5576135709060ff6000519a1680910199613d41565b600189019883013560f81c9750613611565b9850602087019750949593949293919290918201358085146136ea575b61357090613df7565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506136e1565b989091929394959662ffffff98506137346121e1600c8416603f9060021c1690565b91821561379e575b600316801561378d575b90819061377190613769908781013560e81c906003019c168c01809c8989612082565b90898b613260565b911115613784575b906135709291613dac565b99820199613779565b50600281019084013560f01c613746565b8482013560f81c925060019091019061373c565b975097613808613815929394959697600f61381d93169085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290830180938686612082565b908688613260565b9061358a92980198600052602052604060002090565b985096509394929391929091908082013590602001968015613590579061358a91600052602052604060002090565b90919293949596975060038916978815613a0e575b8084013560601c996138d691601401906138969060021c6003166121e1565b9085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9081019061393a60208c6138ec85858b8b612082565b919073ffffffffffffffffffffffffffffffffffffffff8c604051968795869485937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611a6f565b0392165afa9081156110f5577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000916000916139f0575b5016036139ac57509060ff61357092991680910199613d41565b6108ce6139bd8c9389938989612082565b906040519485947fb2fed7ae0000000000000000000000000000000000000000000000000000000086526004860161321f565b613a08915060203d8111611bb157611ba381836103d7565b38613992565b8381013560f81c9850600101613877565b98600f91929394959697985016968715613a4e575b60148101976135709160ff9091169084013560601c613d41565b8281013560f81c9750600101613a34565b98509091929394959698600f16978815613ab1575b5060206000613a876136909a9b86613cfe565b9c90916040519384938c859094939260ff6060936080840197845216602083015260408201520152565b60018101995083013560f81c97506020613a74565b73ffffffffffffffffffffffffffffffffffffffff9060405160208101917fff0000000000000000000000000000000000000000000000000000000000000083527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060601b16602183015260358201527f0000000000000000000000000000000000000000000000000000000000000000605582015260558152613b8c6075826103d7565b51902016301490565b805160209091019060005b818110613bad5750505090565b8251845260209384019390920191600101613ba0565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0613c09613bf383610454565b92613c0160405194856103d7565b808452610454565b0136602083013760005b8351811015613ce55780613c2960019286611731565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152613cd1610120826103d7565b519020613cde8285611731565b5201613c13565b509091506040516128698161283d602082018095613b95565b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff81116116a15791565b90604051907fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208301937f53657175656e6365207369676e65723a0a000000000000000000000000000000855260601b1660318301526045820152604581526128696065826103d7565b916040519160208301937f53657175656e6365206e657374656420636f6e6669673a0a00000000000000008552603884015260588301526078820152607881526128696098826103d7565b60405160208101917f53657175656e636520737461746963206469676573743a0a000000000000000083526038820152603881526128696058826103d7565b61283d6128696127fb6127f5600060208601511515612d4e565b60405160208101917f53657175656e636520616e792061646472657373207375626469676573743a0a83526040820152604081526128696060826103d7565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e63652073617069656e7420636f6e6669673a0a00000000000000865260601b166039840152604d830152606d820152606d8152612869608d826103d756fea2646970667358221220825b940dd691f79f4782ba8dca1eaa7ff741f07679c4faf28637d8117499069a64736f6c634300081c0033","sourceMap":"475:414:28:-:0;;;;;;;;;-1:-1:-1;475:414:28;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;401:4:52;379:10;:27;375:75;;659:15:46;;;:::i;375:75:52:-;423:20;-1:-1:-1;423:20:52;379:10;475:414:28;;;-1:-1:-1;423:20:52;475:414:28;;;;;;;;;;;2321:4:48;475:414:28;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;475:414:28;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;4682:22:50;;;;;;4668:48;4682:33;:22;;475:414:28;4682:33:50;:::i;:::-;4668:48;:::i;:::-;4728:13;-1:-1:-1;4778:3:50;4747:22;;475:414:28;;4743:33:50;;;;;4810:25;4791:44;4810:25;;;4714:1;4810:25;;:::i;:::-;475:414:28;;;;;4810:25:50;4791:44;;;;:::i;:::-;475:414:28;;;;;;4791:44:50;475:414:28;4728:13:50;;4743:33;;;;;;4848:57;4895:10;4848:57;4862:22;;475:414:28;4848:57:50;;:::i;:::-;4911:38;4974:41;;;;;:::i;:::-;5025:8;;5021:81;;475:414:28;;4714:1:50;475:414:28;;;;;5021:81:50;5050:45;475:414:28;;;5050:45:50;;;;;;475:414:28;5050:45:50;;;:::i;:::-;;;;475:414:28;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;3351:31:45;475:414:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;1358:19:45;475:414:28;;;;;:::i;:::-;1358:19:45;:::i;:::-;475:414:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1572:33:43;475:414:28;;;;;;:::i;:::-;1524:9:43;;;;1572:33;;:::i;:::-;1626:13;1641;1626;;;475:414:28;1641:13:43;;;475:414:28;1641:13:43;;:::i;:::-;1694:40;;;;;:::i;:::-;1745:8;;;1741:73;;1850:7;;;;;:::i;1741:73::-;475:414:28;1770:37:43;475:414:28;;;;1770:37:43;;;;;;475:414:28;1770:37:43;;;:::i;475:414:28:-;;;;;;;:::o;:::-;;;;;;;;;;;;;;615:39:53;475:414:28;;;;;;;;;;;;;;;;401:4:52;379:10;:27;375:75;;1576:24:53;;1572:69;;475:414:28;260:41:49;1705:28:53;260:41:49;943:66:53;260:41:49;475:414:28;;;;;1705:28:53;1816:22;;;:::i;1572:69::-;1617:17;-1:-1:-1;1617:17:53;475:414:28;-1:-1:-1;1617:17:53;475:414:28;;;;;;;;;;;;;;;688:32:53;475:414:28;;;;;;;;;;;;;;;;;:::i;:::-;401:4:52;379:10;:27;375:75;;475:414:28;2005:19:45;;;:::i;:::-;475:414:28;2005:33:45;2001:87;;475:414:28;;2492:37:45;475:414:28;;2439:41:45;475:414:28;2439:41:45;;:::i;:::-;475:414:28;;;;;;;;;;2492:37:45;475:414:28;2001:87:45;475:414:28;2055:26:45;;-1:-1:-1;2055:26:45;475:414:28;;;;-1:-1:-1;2055:26:45;475:414:28;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;401:4:52;;379:10;:27;375:75;;2142:33:43;2255:7;2094:9;;2142:33;;:::i;:::-;2198:21;;;;:::i;:::-;2255:7;;:::i;475:414:28:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;3526:28:45;475:414:28;;;;;;;;;;;;;;;806:50:47;475:414:28;;806:50:47;:::i;475:414:28:-;;;;;;;;;;;;2500:26:50;475:414:28;;2500:26:50;:::i;:::-;475:414:28;;;;;;;;;;;;;;;;;;;:::i;:::-;1358:10:44;475:414:28;1358:10:44;475:414:28;1358:24:44;;1354:69;;1433:10;:24;1429:81;;1516:4;:26;;;;;475:414:28;1380:1:44;475:414:28;;;1516:26:44;;;;;475:414:28;1516:26:44;;475:414:28;1516:26:44;;;:::i;:::-;;:4;;;:26;;;;;;;;475:414:28;1516:26:44;;;1380:1;1516:26;;;:::i;:::-;;;:::i;:::-;;:::i;1429:81::-;1474:29;1380:1;1474:29;1433:10;475:414:28;;;1380:1:44;1474:29;1354:69;1399:17;1380:1;1399:17;475:414:28;1380:1:44;1399:17;475:414:28;;;;;;;;;;;;;;;769:47:53;475:414:28;;;;;;;;;;;;;;;;;;;418:35:44;475:414:28;;;;;;;;;;;;;;;;1252:47:46;;475:414:28;;;;;;;;;;;;;5879:56:50;-1:-1:-1;475:414:28;;;;:::i;:::-;5879:56:50;;:::i;:::-;850:31:28;;;;;;:::i;:::-;475:414;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;401:4:52;;379:10;:27;375:75;;475:414:28;1667:19:45;;;:::i;:::-;475:414:28;1663:88:45;;2492:37;475:414:28;;;;;;;;2439:41:45;;;;:::i;:::-;475:414:28;;;;;;;;;2492:37:45;475:414:28;1663:88:45;475:414:28;1717:27:45;;-1:-1:-1;1717:27:45;475:414:28;;;;-1:-1:-1;1717:27:45;475:414:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;475:414:28;;2946:37:45;475:414:28;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;2696:32:45;475:414:28;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;401:4:52;379:10;:27;375:75;;475:414:28;;;2043:85:50;2998:47;475:414:28;;;;;;;2051:76:50;2043:85;;:::i;:::-;475:414:28;;;;;;;;;;;;;;2998:47:50;475:414:28;;;;;;;;;;;;;4714:1:50;475:414:28;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;475:414:28;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;475:414:28;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;475:414:28;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;5170:322:50:-;;5358:40;5170:322;;475:414:28;;:::i;:::-;2556:4:48;;;;4826:15;;;2556:4;5358:40:50;:::i;:::-;5408:8;;5404:45;;475:414:28;5170:322:50;:::o;5404:45::-;475:414:28;5426:16:50;:::o;475:414:28:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;614:665:44:-;;;;475:414:28;792:10:44;475:414:28;792:24:44;;;788:69;;867:10;;:24;863:81;;1006:24;1002:123;;614:665;1169:16;1135:51;1169:16;;;;;;;;;:::i;:::-;475:414:28;1135:51:44;475:414:28;;1135:51:44;;;;;475:414:28;1135:51:44;;;;;;:::i;:::-;;:4;;:51;;;;;;;475:414:28;1135:51:44;475:414:28;1135:51:44;475:414:28;1135:51:44;;;614:665;475:414:28;;1135:80:44;1131:129;;475:414:28;614:665:44;:::o;1131:129::-;412:1;1225:28;:::o;1135:51::-;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;1002:123;1040:78;;;;;475:414:28;;;1040:78:44;;1112:4;1040:78;;;475:414:28;;-1:-1:-1;;475:414:28;;;;;;1040:78:44;;;;;;;1135:51;1040:78;1169:16;1040:78;;;1002:123;;;;;1040:78;;;475:414:28;1040:78:44;;;:::i;:::-;;;;475:414:28;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;475:414:28;;;;:::o;:::-;;;:::o;3638:392:45:-;3695:1;3676:8;:20;;;3672:354;;3638:392;:::o;3672:354::-;3723:27;3733:16;3676:8;475:414:28;;;;;;;3672:354:45;3723:27;;:::i;:::-;475:414:28;;;3758:262:45;;3638:392;:::o;3758:262::-;3676:8;475:414:28;;;;3676:8:45;475:414:28;;;3676:8:45;;475:414:28;;;;;3832:29:45;;;;;;:::i;:::-;3871:141;;;;;;;;;;;;;;;;;475:414:28;;3676:8:45;;;;3695:1;475:414:28;;;;;;;;;880:176:46;475:414:28;1013:38:46;880:176;1125:46;;;475:414:28;;;;;;;1013:38:46;880:176::o;475:414:28:-;;;;;;:::o;3301:1109:50:-;;;475:414:28;3555:13:50;;;;;;:::i;:::-;;475:414:28;;;;3555:13:50;3579:20;:28;3575:429;;3566:1;4188:56;;;;;;:::i;:::-;4146:98;;;;;4282:18;;;;4278:87;;850:31:28;;;;;:::i;:::-;3301:1109:50;:::o;4278:87::-;4317:41;3566:1;4317:41;3772:48;475:414:28;;;;1380:1:44;1474:29;3575:429:50;3626:15;;;;;:::i;:::-;3686:27;;;;:::i;:::-;3738:15;3725:28;;;3721:108;;475:414:28;;;;3841:18:50;;;:40;;;;3575:429;3837:131;;;3976:21;3984:4;3976:21;;:::o;3837:131::-;3900:59;3566:1;3900:59;;475:414:28;;;3942:10:50;475:414:28;;;;;;;1380:1:44;1474:29;3841:40:50;3871:10;;;3863:18;;3841:40;;;3721:108;3772:48;3566:1;3772:48;;475:414:28;;;;;;1380:1:44;1474:29;475:414:28;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;475:414:28;;-1:-1:-1;475:414:28;;;;;;;;;-1:-1:-1;475:414:28;;;;-1:-1:-1;475:414:28;;;;;;;;;-1:-1:-1;475:414:28;;;;-1:-1:-1;475:414:28;;;;;;:::o;2134:172:45:-;475:414:28;2134:172:45;475:414:28;;;753:25:49;;;;:66:45;475:414:28;;;;;;;;753:25:49;;;;;;:::i;:::-;475:414:28;743:36:49;;785:40;475:414:28;2134:172:45;:::o;2321:4:48:-;;475:414:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;2321:4:48;;;;;:::i;:::-;;;-1:-1:-1;2321:4:48;;;;;;;;;:::o;:::-;;475:414:28;;;;;;:::i;:::-;-1:-1:-1;2321:4:48;;-1:-1:-1;2321:4:48;;;;475:414:28;;2321:4:48;;;-1:-1:-1;475:414:28;2321:4:48;;;-1:-1:-1;2321:4:48;;;;-1:-1:-1;2321:4:48;;;;-1:-1:-1;2321:4:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4859:2701::-;;;;475:414:28;;:::i;:::-;;2556:4:48;;;566:109:68;;;;;;;5163:25:48;:17;;;:25;5176:4;;5198:14;2321:4;5198:14;;;2556:4;5159:140;5396:4;5377:15;475:414:28;;;;2321:4:48;;;5377:15;5376:24;5411:13;5407:122;;5159:140;-1:-1:-1;5635:4:48;5622:17;;;:25;5635:4;;5657:12;5176:4;5618:320;;5983:20;;;:::i;:::-;5966:14;;;;:37;;;2321:4;6010:1546;6030:12;;;;;;4859:2701;;;;;;:::o;6044:3::-;798:135:68;;;;;;;;;6076:44:48;;;5176:4;6227:12;;;:20;5176:4;;6314;6283:36;6314:4;6283:17;:14;;;:17;:::i;:::-;;475:414:28;;;;;;6283:36:48;6529:4;6521:12;;;:20;6517:109;;6223:226;6704:4;6696:12;;;:20;6692:287;;6223:226;7065:4;7057:12;;;:20;7053:112;;6223:226;7494:55;7530:19;7539:4;7275:12;7241:55;7275:12;7241:30;:17;7275:12;5635:4;7275:12;5176:4;7275:12;;;:20;7241:14;;:17;:::i;:::-;;:30;2321:4;475:414:28;;2321:4:48;;;7241:55;7364;7398:12;7364:30;:17;7398:12;7406:4;7398:12;;;:20;7364:14;;:17;:::i;:55::-;7531:12;475:414:28;2321:4:48;;;;;7530:19;475:414:28;;;;7494:55:48;7539:4;7494:17;:14;;;:17;:::i;:::-;;:33;2556:4;475:414:28;6015:13:48;;;7053:112;5176:4;;7494:55;;7530:19;;7539:4;;2102:103:68;;;;;;;7090:14:48;;:26;:17;:14;;;:17;:::i;:::-;;:26;2556:4;7053:112;;;;;;;;6692:287;1201:256:68;6947:23:48;;1318:135:68;;;;;;;;;2321:4:48;6899:38;6914:22;1318:135:68;;6914:22:48;:::i;:::-;6899:38;;;;:::i;:::-;6874:14;;5966;6874:17;:14;;;:17;:::i;:::-;;:22;2321:4;;;;:::i;:::-;6874:63;;6947:23;:::i;:::-;6692:287;;;6517:109;1983:226:68;2102:103;;;;;;;6554:14:48;;7406:4;6554:17;:14;;;:17;:::i;:::-;;:23;2556:4;6517:109;;6223:226;6379:61;;-1:-1:-1;1840:135:68;;;;;;;;;6380:14:48;;:17;:14;;;:17;:::i;6379:61::-;6223:226;;5618:320;5779:4;5766:17;;;:25;5779:4;;2321;;1058:135:68;;;;;;;;;941:256;5803:48:48;2321:4;5762:170;5618:320;;5762:170;475:414:28;;798:135:68;;;;;;;;;683:254;;5407:122:48;2213:380:68;;;;;;;;2363:226;;;;;;;;;;;;;;;;;;;2213:380;;;5458:64:48;;5459:14;;;2556:4;5407:122;;;5159:140;1840:135:68;;;;;;;;5238:14:48;;;2556:4;1840:135:68;;;-1:-1:-1;5159:140:48;;1011:362:47;;806:50;;;:::i;:::-;1131:22;;;1127:88;;475:414:28;;1267:1:47;1319:29;475:414:28;;;;;;552:25:49;;;;543:66:47;475:414:28;;;;;;;;552:25:49;;;;;;:::i;:::-;475:414:28;542:36:49;;584:40;475:414:28;;;;;;;;;;;;;1319:29:47;1011:362::o;1127:88::-;1170:38;;-1:-1:-1;1170:38:47;;475:414:28;;;;;;-1:-1:-1;1170:38:47;475:414:28;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2657:4:48:-;;;;;;475:414:28;;2657:4:48;;;475:414:28;2657:4:48;;;;;;;;:::i;2763:::-;;;;;;;;;;;;;:::i;:::-;;;;;475:414:28;2763:4:48;;;;;;;;:::i;2272:1859:43:-;;2393:5;2424:14;;;;;;475:414:28;2456:13:43;;2471:12;;;;;;2451:1676;2272:1859;;;;;;;:::o;2485:3::-;2525:17;:14;;;:17;:::i;:::-;;2609;475:414:28;2609:17:43;;;475:414:28;;;;;;2609:31:43;;;2485:3;2605:102;;2833:17;2393:5;2878:13;;;;475:414:28;2903:13:43;;;;:37;;;2485:3;2899:105;;3012:12;;475:414:28;3036:17:43;;;475:414:28;;;;;;3036:17:43;;;3077:348;475:414:28;;;;;;;;;3129:36:43;;;;3145:9;;3129:36;;3177:238;3366:14;3177:238;2878:13;3366:14;;475:414:28;2424:14:43;3394:9;;;475:414:28;;;2424:14:43;475:414:28;3177:238:43;;;3213:55;3177:238;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;3077:348;:::i;:::-;3566:8;3562:520;;3032:522;-1:-1:-1;2424:14:43;475:414:28;;;;;;;;;;;;;;4095:25:43;;;2456:13;475:414:28;2456:13:43;;3562:520;3590:20;;475:414:28;;3590:53:43;3586:180;;475:414:28;;;3780:56:43;3776:136;;475:414:28;2867:4:48;3926:55:43;3922:152;;3562:520;;;3922:152;4024:21;;;;;;4000:46;4024:21;;4000:46;4024:21;;:::i;:::-;2424:14;475:414:28;4000:46:43;;;;;:::i;:::-;;;;4058:5;;;;;;;;;3776:136;3879:21;;3857:44;3879:21;;:::i;:::-;2424:14;475:414:28;3857:44:43;;;;;;;;;;:::i;3586:180::-;3657:16;;;475:414:28;3657:16:43;3713:21;3690:45;;3713:21;;:::i;:::-;2424:14;475:414:28;3690:45:43;;;;;;;:::i;:::-;;;;3747:8;;3129:36;;;;3032:522;475:414:28;;3462:83:43;;475:414:28;-1:-1:-1;475:414:28;;3485:10:43;;;;475:414:28;3497:36:43;;;;;3513:9;;3497:36;;2424:14;3535:9;;;3462:83;;:::i;:::-;3032:522;;3497:36;;;;2899:105;2985:9;;2959:36;2985:9;2424:14;475:414:28;2959:36:43;;;;;;;;;;:::i;2903:37::-;2920:9;;;:20;2903:37;;2605:102;2424:14;475:414:28;;;;;;;;;;;;;-1:-1:-1;475:414:28;;;2657:23:43;;475:414:28;;;;2657:23:43;475:414:28;2609:31:43;2630:10;;;2609:31;;9564:274:48;9784:48;;9743:18;9666:50;9682:18;;;475:414:28;;;9710:4:48;9666:50;;:::i;:::-;9743:18;;:::i;:::-;475:414:28;;9784:48:48;;;9682:18;9784:48;;;;475:414:28;;;;;;;;;;;;;;;;;;9784:48:48;;;;;;;;;:::i;:::-;475:414:28;9774:59:48;;9564:274;:::o;632:197:49:-;475:414:28;;753:25:49;;;;543:66:47;475:414:28;;;;;;;753:25:49;;;;;;:::i;:::-;475:414:28;743:36:49;;785:40;632:197;:::o;1637:245:50:-;475:414:28;;753:25:49;;;;834:66:50;475:414:28;;;;;;;753:25:49;;;;;;:::i;:::-;475:414:28;743:36:49;;785:40;2321:4:48;475:414:28;2321:4:48;753:25:49;2321:4:48;475:414:28;;1637:245:50;:::o;475:414:28:-;;;;;;;:::i;:::-;-1:-1:-1;475:414:28;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;2963:3141:51:-;;;;;;;566:109:68;;;;;3268:69:51;;;3762:24;475:414:28;;;:::i;:::-;3963:20:51;3979:4;3963:20;;;:28;:59;;;2963:3141;3959:742;;2963:3141;4774:20;;;4790:4;4774:20;;;:28;4770:126;;5004:4;4988:20;;;:28;4967:18;;;2321:4:48;;475:414:28;2321:4:48;;;;2363:226:68;;;;;;;;;;;;;;;;;;;;;;;;;5158:67:51;;;;;5330:20;4967:18;5330:20;5329:27;;475:414:28;2321:4:48;;;5329:27:51;5328:33;;;:::i;:::-;2363:226:68;;;;;;;;;;;;;;;;;;;;;;;;;5369:65:51;;;;5480:15;;;;;:::i;:::-;5555:19;;;;;;:::i;:::-;5523:52;;;;:::i;:::-;5501:74;5594:50;;;545:85:69;;;;;;;461:173;;5594:50:51;5662:51;;;545:85:69;;;;;;;461:173;;5662:51:51;475:414:28;;;5731:72:51;;545:85:69;;;;;;;461:173;;5731:72:51;475:414:28;;;5948:32:51;;;;;:67;;;;2963:3141;5948:104;;;;;2963:3141;5944:156;;;2963:3141;:::o;5944:156::-;3979:4;475:414:28;6069:24:51;;;475:414:28;;6069:24:51;;;475:414:28;;;;;;;;;;;;5050:45:50;5948:104:51;6033:19;;4967:18;6033:19;;475:414:28;-1:-1:-1;6019:33:51;5948:104;;;:67;5984:31;;;-1:-1:-1;5948:67:51;;;;4770:126;4869:19;4819:70;4869:19;;;;;;;;;:::i;:::-;4819:70;;;;:::i;:::-;4812:77;;;;;;;;;:::o;3959:742::-;1840:135:68;;;;;;;-1:-1:-1;1840:135:68;;;-1:-1:-1;3162:307:68;1840:135;;;;;;4197:20:51;4193:502;;3959:742;;;;;;;4193:502;1318:135:68;;;;-1:-1:-1;475:414:28;;-1:-1:-1;1318:135:68;;;;;;3979:4:51;;4572:73;;3979:4;;2321::48;;4471:48:51;;1318:135:68;;4489:29:51;1318:135:68;;4489:29:51;:::i;:::-;4471:48;;:::i;:::-;2321:4:48;;;:::i;:::-;475:414:28;;4572:73:51;;;;;;475:414:28;4572:73:51;;4621:4;4572:73;;;;:::i;:::-;;475:414:28;;4572:73:51;;;;;;4656:30;4572:73;-1:-1:-1;4572:73:51;;;4193:502;4561:84;4656:30;;:::i;:::-;4193:502;;;;;;4572:73;;;;3979:4;4572:73;3979:4;4572:73;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;3963:59;475:414:28;;;;3995:27:51;3963:59;;1431:196:69;;1538:85;1431:196;;;;1538:85;;;;;;;1431:196;:::o;1997:192::-;;2098:87;1997:192;;;;2098:87;;;;;;;1997:192;:::o;758:271::-;825:200;;;;;;;;;;;;;;;;;;;;758:271::o;443:185:49:-;475:414:28;;552:25:49;;;;834:66:50;475:414:28;;;;;;;552:25:49;;;;;;:::i;:::-;475:414:28;542:36:49;;584:40;443:185::o;:::-;475:414:28;;552:25:49;;;;753:66:45;475:414:28;;;;;;;552:25:49;;;;;;:::i;939:351:48:-;1206:48;;;-1:-1:-1;1206:48:48;;475:414:28;;;1077:202:48;;;;475:414:28;539:66:48;475:414:28;;709:66:48;475:414:28;868:66:48;;475:414:28;868:66:48;;;;475:414:28;868:66:48;;;475:414:28;;868:66:48;;;475:414:28;868:66:48;1077:202;;;;;;:::i;1206:48::-;1240:13;1206:48;;;475:414:28;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;8278:1282:48;8416:22;;;;475:414:28;;8399:40:48;;475:414:28;8399:40:48;;;475:414:28;;;:::i;8399:40:48:-;475:414:28;8389:51:48;;475:414:28;;;;;;;;;;;;8451:34:48;475:414:28;;8525:14:48;;;8712:82;8515:25;475:414:28;8525:14:48;;;8515:25;:::i;:::-;8750:14;8712:82;8766:14;8750;;;475:414:28;8766:14:48;;475:414:28;;;;8712:82:48;;;8399:40;8712:82;;;;1799:66;;;;;;;;;475:414:28;1799:66:48;475:414:28;;1799:66:48;;;475:414:28;1799:66:48;;;475:414:28;1799:66:48;;;475:414:28;1799:66:48;475:414:28;1799:66:48;8447:1109;2763:4;8812:29;;2763:4;;-1:-1:-1;;8998:16:48;;;475:414:28;;8399:40:48;475:414:28;;;8988:27:48;475:414:28;;;1979:66:48;8959:70;;;475:414:28;;;1979:66:48;;;475:414:28;;;;1979:66:48;;;475:414:28;;;;8959:70:48;;475:414:28;1979:66:48;;;8959:70;1979:66;8808:748;2867:4;9047:35;;2867:4;;-1:-1:-1;;9216:18:48;;475:414:28;;;;2174:66:48;8399:40;9181:67;;475:414:28;;;1979:66:48;;;475:414:28;;;;1979:66:48;;;475:414:28;;;;9181:67:48;475:414:28;1979:66:48;;;9181:67;1979:66;9043:513;2556:4;9266:28;2556:4;;-1:-1:-1;9443:15:48;;475:414:28;;;;1979:66:48;8399:40;9414:58;;475:414:28;;;1979:66:48;;;475:414:28;;;;1979:66:48;;;475:414:28;;;;9414:58:48;475:414:28;1979:66:48;;;9414:58;1979:66;9262:294;9523:26;475:414:28;9523:26:48;475:414:28;;9523:26:48;475:414:28;2482:4:48;1380:1:44;1474:29;475:414:28;;;;;;;;;;;;;;;;;;:::i;6108:1663:51:-;;;;;;475:414:28;6304:14:51;475:414:28;6320:17:51;475:414:28;6339:18:51;475:414:28;6359:14:51;475:414:28;;;;:::i;:::-;;2556:4:48;;6423:47:51;6522:17;;475:414:28;6553:26:51;;;;;;475:414:28;;;;;;;;;7647:33:51;;:71;;;6546:1091;7643:124;;6108:1663;:::o;7647:71::-;7698:20;;;;475:414:28;7684:34:51;;;7647:71;;6546:1091;1318:135:68;;;;-1:-1:-1;1201:256:68;;-1:-1:-1;1201:256:68;;-1:-1:-1;1201:256:68;;-1:-1:-1;1201:256:68;;;;6717:16:51;;1318:135:68;;;;;;;6717:16:51;:::i;:::-;6773:57;;475:414:28;6773:28:51;;;;;:57;;;;6522:17;6843:35;;6522:17;;6971:26;;6999:4;6971:26;;6953:65;6971:26;;;;:::i;:::-;6953:65;;;:::i;:::-;6890:128;;;;;;;;;;;;;;;;6839:339;;;;7190:18;7186:122;;7315:16;475:414:28;;;;7344:32:51;7340:89;;6839:339;7441:28;;;;7437:115;;7560:23;;;;;2556:4:48;7603:27:51;6546:1091;;;;;;;;;;;;7437:115;7488:55;475:414:28;7488:55:51;3772:48:50;475:414:28;;;;;;1380:1:44;1474:29;7340:89:51;475:414:28;2556:4:48;;7340:89:51;;7186:122;7253:26;;7227:72;7253:26;;;;;;:::i;:::-;475:414:28;;;;;7227:72:51;;;;;;;;;;:::i;6839:339::-;7122:26;;;;;7150:4;7122:26;;7099:70;7122:26;;;;:::i;:::-;7099:70;;;:::i;:::-;-1:-1:-1;7043:126:51;;;;;;;;;;;;;6839:339;;6773:57;;;;842:1;475:414:28;842:1:51;;;;;475:414:28;;;842:1:51;;;475:414:28;842:1:51;;;;;;;;:::i;1206:::-;;;;;;;;;475:414:28;1206:1:51;:::o;7775:11084::-;;;;;475:414:28;7930:12:51;475:414:28;7968:14:51;475:414:28;8044:26:51;;;;;;7775:11084;;;;;:::o;8037:10812::-;798:135:68;;;;;;;;;;;;;;;;683:254;;;;2321:4:48;;8454:27:51;;;8450:864;;9374:20;412:1:44;9374:20:51;;9370:676;;842:1;10096:30;;10092:1383;;885:1;11512:17;;11508:279;;8405:1;11826:19;;11822:656;;1023:1;12517:19;;12513:1278;;978:1;13833:22;;13829:518;;1080:1;14398:31;;14394:933;;1150:1;15464:44;;15460:617;;1206:1;16127:30;;16123:1308;;1270:2;17489:38;;17485:1312;;18814:26;475:414:28;18814:26:51;8405:1;475:414:28;;;;1380:1:44;1474:29;17485:1312:51;17799:16;;;;;;;;;885:1;17799:16;;17832:15;;;17828:99;;17485:1312;1840:135:68;;;;;;;;;18081:16:51;;475:414:28;2321:4:48;;;475:414:28;;2363:226:68;;;;;;;;;;;;;;;;;;;;;;;;;475:414:28;;;18467:26:51;;;;;;;:::i;:::-;475:414:28;;;18405:89:51;;475:414:28;;;;18405:89:51;;475:414:28;8405:1:51;18405:89;;;:::i;:::-;;475:414:28;;;;18405:89:51;;;;;;;;;;;;18637:51;18405:89;475:414:28;18405:89:51;;;17485:1312;18506:16;475:414:28;18506:16:51;475:414:28;;;;;18637:51:51;;:::i;:::-;18707:59;:18;;;;18728:31;;;545:85:69;;;;;;;461:173;;18728:31:51;18778:8;8037:10812;;;;;;;;18707:59;;;;18405:89;475:414:28;18405:89:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;17828:99;798:135:68;;;;;;;-1:-1:-1;798:135:68;;17828:99:51;;16123:1308;16429:16;;;;;;;;;885:1;16429:16;;16462:15;;;16458:99;;16123:1308;1840:135:68;;;;;;;;;16749:16:51;;475:414:28;2321:4:48;;;475:414:28;;2363:226:68;;;;;;;;;;;;;;;;;;;;;;;;;475:414:28;;;17100:26:51;;;;;;;:::i;:::-;475:414:28;;;17051:76:51;;475:414:28;;;;17051:76:51;;475:414:28;8405:1:51;17051:76;;;:::i;:::-;;475:414:28;;;;17051:76:51;;;;;;;;;;;;17271:51;17051:76;475:414:28;17051:76:51;;;17139:16;475:414:28;17139:16:51;475:414:28;;;;;17271:51:51;;:::i;:::-;17341:59;:18;;;;17362:31;;;545:85:69;;;;;;;461:173;;17362:31:51;17412:8;;;17341:59;;;;16458:99;798:135:68;;;;;;;-1:-1:-1;798:135:68;;16458:99:51;;15460:617;2926:232:68;-1:-1:-1;2102:103:68;;;;-1:-1:-1;2926:232:68;;;;;;;;;;2102:103;;;15775:28:51;2926:232:68;15775:28:51;:::i;:::-;15819:29;;15815:88;;15460:617;15930:38;;;:::i;15815:88::-;15873:17;;-1:-1:-1;15815:88:51;;14394:933;14742:16;;;;;;;;;14754:4;14742:16;14775:15;;;14771:99;;14394:933;15044:61;475:414:28;3511:494:68;15024:92:51;3511:494:68;;;;:::i;:::-;14943:53:51;;;;475:414:28;;;15044:61:51;;;;;;;;1080:1;;;;;;;;475:414:28;1080:1:51;;;15044:61;475:414:28;15034:72:51;;475:414:28;;;15024:92:51;;;;740:1;;;;475:414:28;740:1:51;;;;;475:414:28;;;;740:1:51;;;475:414:28;740:1:51;;;475:414:28;740:1:51;475:414:28;740:1:51;15024:92;;;;;;412:1:44;15024:92:51;;;;;15176:42;15024:92;475:414:28;;15024:92:51;475:414:28;;;;;15176:42:51;;:::i;14771:99::-;798:135:68;;;;;;;;;;-1:-1:-1;14771:99:51;;13829:518;2926:232:68;-1:-1:-1;2102:103:68;;;;-1:-1:-1;2926:232:68;;;;;;;;;;2102:103;;;14099:20:51;;;14095:79;;13829:518;14201:37;;;:::i;14095:79::-;14144:17;;-1:-1:-1;14095:79:51;;12513:1278;12882:16;;;;;;;;2321:4:48;12882:16:51;;12851:53;12876:28;12894:4;12882:16;;2321:4:48;;475:414:28;2321:4:48;;;;12851:53:51;12920:19;;;12916:107;;12513:1278;885:1;13069:16;13102:22;;13098:114;;12513:1278;1201:256:68;;;13399:60:51;;13432:26;;1318:135:68;;;;;;;;;2321:4:48;;475:414:28;;13432:26:51;;;;;:::i;:::-;13399:60;;;;:::i;:::-;13471:16;-1:-1:-1;13504:35:51;13500:92;;12513:1278;13619:63;;;;;:::i;13500:92::-;475:414:28;;;;13500:92:51;;13098:114;-1:-1:-1;1058:135:68;;;;;;;;;13098:114:51;;12916:107;798:135:68;;;;;;;-1:-1:-1;798:135:68;;;;;12916:107:51;;11822:656;12023:16;;;2213:380:68;12312:26:51;12023:16;;;;;;12035:4;12279:60;12023:16;;2213:380:68;;;;;;2363:226;;;;;;;;;;;;;;;;;;;2213:380;;;475:414:28;;;;12312:26:51;;;;;:::i;:::-;12279:60;;;;:::i;:::-;;12416:31;12279:60;475:414:28;;12416:31:51;545:85:69;;;;;;;461:173;;11508:279:51;2926:232:68;-1:-1:-1;2926:232:68;-1:-1:-1;2926:232:68;;;;;;;;;2102:103;;;;;;;11697:59:51;:18;;;;11718:31;;;545:85:69;;;;;;;461:173;;10092:1383:51;10387:16;;;;;;;;;885:1;10387:16;;10420:15;;;10416:99;;10092:1383;1840:135:68;;;;;;;2213:380;;1840:135;;;10669:47:51;;475:414:28;2321:4:48;;;10688:28:51;2321:4:48;10669:47:51;2213:380:68;;;;;;2363:226;;;;;;;;;;;;;;;;;;;2213:380;;;475:414:28;;;11024:26:51;10983:68;;11024:26;;;;;;;:::i;:::-;475:414:28;;;;;;10983:68:51;;;;;;;475:414:28;10983:68:51;;8405:1;10983:68;;;:::i;:::-;;475:414:28;;10983:68:51;;;;;;;475:414:28;10983:68:51;475:414:28;10983:68:51;475:414:28;10983:68:51;;;10092:1383;475:414:28;;10983:97:51;10979:203;;11193:16;;475:414:28;11324:42:51;11193:16;475:414:28;;;;;11324:42:51;;:::i;10979:203::-;11103:66;11142:26;;;;;;;;:::i;:::-;475:414:28;;;11103:66:51;;;;;;8405:1;11103:66;;;:::i;10983:68::-;;;;;;;;;;;;;;:::i;:::-;;;;10416:99;798:135:68;;;;;;;-1:-1:-1;798:135:68;;10416:99:51;;9370:676;9567:16;9579:4;9567:16;;;;;;;;;;9600:15;;;9596:99;;9370:676;1840:135:68;;;;9895:42:51;;475:414:28;;;;;1840:135:68;;;;;9895:42:51;:::i;9596:99::-;798:135:68;;;;;;;-1:-1:-1;798:135:68;;9596:99:51;;8450:864;8794:16;;;;;;;;;;8806:4;8794:16;8827:15;;;8823:99;;8450:864;3511:494:68;9076:27:51;475:414:28;3511:494:68;9076:27:51;3511:494:68;;;;:::i;:::-;8995:53:51;;;475:414:28;;9076:27:51;;;;;740:1;;;;475:414:28;740:1:51;;;;;475:414:28;;;;740:1:51;;;475:414:28;740:1:51;;;475:414:28;740:1:51;475:414:28;740:1:51;8823:99;798:135:68;;;;-1:-1:-1;798:135:68;;;;;;-1:-1:-1;9076:27:51;8823:99;;1848:238:53;475:414:28;1848:238:53;475:414:28;;1992:62:53;;;475:414:28;;;;;2018:7:53;475:414:28;;;;;;;;;;;2039:14:53;475:414:28;;;;;1992:62:53;;;;;;:::i;:::-;475:414:28;1982:73:53;;475:414:28;2076:4:53;1958:123;1848:238;:::o;475:414:28:-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;7820:454:48;;475:414:28;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;-1:-1:-1;8164:3:48;475:414:28;;8146:16:48;;;;;8202:8;;475:414:28;8202:8:48;;;:::i;:::-;;475:414:28;;;;7708:7:48;475:414:28;7708:7:48;;475:414:28;7727:6:48;475:414:28;7727:6:48;;;475:414:28;;;;;7717:17:48;7736:10;;;;475:414:28;7748:14:48;;;475:414:28;;;7764:14:48;7780:17;7764:14;;;475:414:28;;;7780:17:48;;475:414:28;;;;7667:138:48;475:414:28;7667:138:48;;475:414:28;1478:66:48;475:414:28;;;1478:66:48;;475:414:28;7736:10:48;1478:66;;475:414:28;7748:14:48;1478:66;;475:414:28;7764:14:48;1478:66;;475:414:28;7780:17:48;1478:66;;475:414:28;1478:66:48;;;475:414:28;1478:66:48;;;475:414:28;1478:66:48;7667:138;;;;;;:::i;:::-;475:414:28;7650:161:48;;8177:34;;;;:::i;:::-;2556:4;475:414:28;8131:13:48;;8146:16;;;;;475:414:28;;8240:28:48;;475:414:28;;8240:28:48;;475:414:28;;;:::i;3511:494:68:-;3690:173;;;;;;;;;;;;3998:2;3955:14;3931:39;;2321:4:48;475:414:28;2321:4:48;475:414:28;;;;;;3511:494:68;:::o;1947:181:51:-;;475:414:28;;2068:54:51;475:414:28;2068:54:51;;;475:414:28;;;;;;;;;;;;;;;;2068:54:51;;;;;;:::i;2132:210::-;;475:414:28;;2263:73:51;;;;475:414:28;;;;;;;;;;;;;;;;;2263:73:51;;;;;;:::i;2562:182::-;475:414:28;;2681:57:51;;;475:414:28;;;;;;;;;2681:57:51;;;;;;:::i;9842:280:48:-;10068:48;;10027:18;9956:44;475:414:28;9972:18:48;;;475:414:28;;;9956:44:48;:::i;2748:211:51:-;475:414:28;;2878:75:51;;;475:414:28;;;;;;;;;2878:75:51;;;;;;:::i;2346:212::-;;475:414:28;;2478:74:51;475:414:28;2478:74:51;;;475:414:28;;;;;;;;;;;;;;;;;;;;2478:74:51;;;;;;:::i","linkReferences":{},"immutableReferences":{"45560":[{"start":4192,"length":32},{"start":4620,"length":32},{"start":6816,"length":32}],"49185":[{"start":3105,"length":32},{"start":15193,"length":32}],"49188":[{"start":3439,"length":32},{"start":15146,"length":32}],"49191":[{"start":3286,"length":32},{"start":4509,"length":32}]}},"methodIdentifiers":{"FACTORY()":"2dd31000","INIT_CODE_HASH()":"257671f5","STAGE_2_IMPLEMENTATION()":"9f69ef54","addHook(bytes4,address)":"b93ea7ad","entrypoint()":"a65d69d4","execute(bytes,bytes)":"1f6a1eb9","executeUserOp(bytes)":"9c145aed","getImplementation()":"aaf10f42","getStaticSignature(bytes32)":"92dcb3fc","isValidSignature(bytes32,bytes)":"1626ba7e","onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)":"bc197c81","onERC1155Received(address,address,uint256,uint256,bytes)":"f23a6e61","onERC721Received(address,address,uint256,bytes)":"150b7a02","readHook(bytes4)":"1a9b2337","readNonce(uint256)":"8c3f5563","recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":"ad55366b","recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":"13792a4a","removeHook(bytes4)":"4fcf3eca","selfExecute(bytes)":"6ea44577","setStaticSignature(bytes32,address,uint96)":"f727ef1c","tokenReceived(address,uint256,bytes)":"8943ec02","tokensReceived(address,address,address,uint256,bytes,bytes)":"0023de29","updateImageHash(bytes32)":"29561426","updateImplementation(address)":"025b22bc","validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)":"19822f7c"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_factory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_entryPoint\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_provided\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_current\",\"type\":\"uint256\"}],\"name\":\"BadNonce\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC4337Disabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"HookAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"HookDoesNotExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ImageHashIsZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_signer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"InvalidERC1271Signature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_entrypoint\",\"type\":\"address\"}],\"name\":\"InvalidEntryPoint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"}],\"name\":\"InvalidKind\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"InvalidSapientSignature\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"InvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_flag\",\"type\":\"uint256\"}],\"name\":\"InvalidSignatureFlag\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes1\",\"name\":\"_type\",\"type\":\"bytes1\"}],\"name\":\"InvalidSignatureType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_weight\",\"type\":\"uint256\"}],\"name\":\"InvalidSignatureWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_expires\",\"type\":\"uint256\"}],\"name\":\"InvalidStaticSignatureExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_expectedCaller\",\"type\":\"address\"}],\"name\":\"InvalidStaticSignatureWrongCaller\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_weight\",\"type\":\"uint256\"}],\"name\":\"LowWeightChainedSignature\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_gasLeft\",\"type\":\"uint256\"}],\"name\":\"NotEnoughGas\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_returnData\",\"type\":\"bytes\"}],\"name\":\"Reverted\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"checkpoint\",\"type\":\"uint256\"}],\"internalType\":\"struct Snapshot\",\"name\":\"_snapshot\",\"type\":\"tuple\"}],\"name\":\"UnusedSnapshot\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nextCheckpoint\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_checkpoint\",\"type\":\"uint256\"}],\"name\":\"WrongChainedCheckpointOrder\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_returnData\",\"type\":\"bytes\"}],\"name\":\"CallAborted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_returnData\",\"type\":\"bytes\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"CallSkipped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"CallSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"DefinedHook\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"newImageHash\",\"type\":\"bytes32\"}],\"name\":\"ImageHashUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"ImplementationUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_space\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_newNonce\",\"type\":\"uint256\"}],\"name\":\"NonceChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"_timestamp\",\"type\":\"uint96\"}],\"name\":\"StaticSignatureSet\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"FACTORY\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INIT_CODE_HASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STAGE_2_IMPLEMENTATION\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"addHook\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"entrypoint\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"}],\"name\":\"executeUserOp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"getStaticSignature\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"readHook\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_space\",\"type\":\"uint256\"}],\"name\":\"readNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"recoverPartialSignature\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isValidImage\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"checkpoint\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"opHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"recoverSapientSignature\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"removeHook\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"}],\"name\":\"selfExecute\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"_timestamp\",\"type\":\"uint96\"}],\"name\":\"setStaticSignature\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"tokenReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"operatorData\",\"type\":\"bytes\"}],\"name\":\"tokensReceived\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_imageHash\",\"type\":\"bytes32\"}],\"name\":\"updateImageHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"}],\"name\":\"updateImplementation\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"accountGasLimits\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"gasFees\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct PackedUserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"userOpHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"missingAccountFunds\",\"type\":\"uint256\"}],\"name\":\"validateUserOp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"validationData\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"Agustin Aguilar\",\"kind\":\"dev\",\"methods\":{\"addHook(bytes4,address)\":{\"details\":\"Callable only by the contract itself\",\"params\":{\"implementation\":\"The implementation address of the hook\",\"selector\":\"The selector of the hook\"}},\"execute(bytes,bytes)\":{\"params\":{\"_payload\":\"The payload\",\"_signature\":\"The signature\"}},\"getImplementation()\":{\"returns\":{\"_0\":\"implementation The implementation\"}},\"getStaticSignature(bytes32)\":{\"params\":{\"_hash\":\"The hash to get the static signature for\"},\"returns\":{\"_0\":\"address The address associated with the static signature\",\"_1\":\"timestamp The timestamp of the static signature\"}},\"isValidSignature(bytes32,bytes)\":{\"details\":\"MUST return the correct magic value if the signature provided is valid for the provided hash > The bytes4 magic value to return when signature is valid is 0x1626ba7e : bytes4(keccak256(\\\"isValidSignature(bytes32,bytes)\\\") > This function MAY modify Ethereum's state\",\"params\":{\"_hash\":\"keccak256 hash that was signed\",\"_signature\":\"Signature byte array associated with _data\"},\"returns\":{\"_0\":\"Magic value 0x1626ba7e if the signature is valid and 0x0 otherwise\"}},\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\":{\"params\":{\"data\":\"Additional data with no specified format\",\"from\":\"The address which previously owned the token\",\"ids\":\"The list of token IDs being transferred\",\"operator\":\"The address which initiated the transfer\",\"values\":\"The amounts of each token being transferred\"},\"returns\":{\"_0\":\"On a success, the selector of the function that was called\"}},\"onERC1155Received(address,address,uint256,uint256,bytes)\":{\"params\":{\"data\":\"Additional data with no specified format\",\"from\":\"The address which previously owned the token\",\"operator\":\"The address which initiated the transfer\",\"tokenId\":\"The ID of the token being transferred\",\"value\":\"The amount of token being transferred\"},\"returns\":{\"_0\":\"On a success, the selector of the function that was called\"}},\"onERC721Received(address,address,uint256,bytes)\":{\"params\":{\"data\":\"Additional data with no specified format\",\"from\":\"The address which previously owned the token\",\"operator\":\"The address which initiated the transfer\",\"tokenId\":\"The ID of the token being transferred\"},\"returns\":{\"_0\":\"On a success, the selector of the function that was called\"}},\"readHook(bytes4)\":{\"params\":{\"selector\":\"The selector of the hook\"},\"returns\":{\"_0\":\"implementation The implementation address of the hook\"}},\"readNonce(uint256)\":{\"params\":{\"_space\":\"The space\"},\"returns\":{\"_0\":\"nonce The nonce\"}},\"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"params\":{\"_payload\":\"The payload\",\"_signature\":\"The signature to recover\"},\"returns\":{\"checkpoint\":\"The checkpoint identifier\",\"imageHash\":\"The derived image hash\",\"isValidImage\":\"Whether the image hash is valid\",\"opHash\":\"The hash of the payload\",\"threshold\":\"The signature threshold\",\"weight\":\"The derived weight\"}},\"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"params\":{\"payload\":\"The payload to recover the signature from\",\"signature\":\"The signature to recover the image hash from\"},\"returns\":{\"_0\":\"The recovered image hash\"}},\"removeHook(bytes4)\":{\"details\":\"Callable only by the contract itself\",\"params\":{\"selector\":\"The selector of the hook\"}},\"selfExecute(bytes)\":{\"details\":\"Callable only by the contract itself\",\"params\":{\"_payload\":\"The payload\"}},\"setStaticSignature(bytes32,address,uint96)\":{\"details\":\"Only callable by the wallet itself\",\"params\":{\"_address\":\"The address to associate with the static signature\",\"_hash\":\"The hash to set the static signature for\",\"_timestamp\":\"The timestamp of the static signature\"}},\"tokenReceived(address,uint256,bytes)\":{\"params\":{\"data\":\"Transaction metadata\",\"from\":\"The address which previously owned the tokens\",\"value\":\"The amount of tokens being transferred\"},\"returns\":{\"_0\":\"The signature of the function to be called\"}},\"tokensReceived(address,address,address,uint256,bytes,bytes)\":{\"params\":{\"amount\":\"The amount of tokens being transferred\",\"data\":\"Additional data with no specified format\",\"from\":\"The address which previously owned the tokens\",\"operator\":\"The address which initiated the transfer\",\"operatorData\":\"Additional data with no specified format\",\"to\":\"The address which is receiving the tokens\"}},\"updateImageHash(bytes32)\":{\"details\":\"Only callable by the wallet itself\",\"params\":{\"_imageHash\":\"The new image hash\"}},\"updateImplementation(address)\":{\"details\":\"Callable only by the contract itself\",\"params\":{\"_implementation\":\"The new implementation\"}},\"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)\":{\"details\":\"Must validate caller is the entryPoint. Must validate the signature and nonce\",\"params\":{\"missingAccountFunds\":\"- Missing funds on the account's deposit in the entrypoint. This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call. The excess is left as a deposit in the entrypoint for future calls. Can be withdrawn anytime using \\\"entryPoint.withdrawTo()\\\". In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.\",\"userOp\":\"- The operation that is about to be executed.\",\"userOpHash\":\"- Hash of the user's request data. can be used as the basis for signature.\"},\"returns\":{\"validationData\":\" - Packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode. <20-byte> aggregatorOrSigFail - 0 for valid signature, 1 to mark signature failure, otherwise, an address of an \\\"aggregator\\\" contract. <6-byte> validUntil - Last timestamp this operation is valid at, or 0 for \\\"indefinitely\\\" <6-byte> validAfter - First timestamp this operation is valid If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure. Note that the validation code cannot use block.timestamp (or block.number) directly.\"}}},\"title\":\"Stage1Module\",\"version\":1},\"userdoc\":{\"errors\":{\"BadNonce(uint256,uint256,uint256)\":[{\"notice\":\"Error thrown when the nonce is bad\"}],\"HookAlreadyExists(bytes4)\":[{\"notice\":\"Error thrown when a hook already exists\"}],\"HookDoesNotExist(bytes4)\":[{\"notice\":\"Error thrown when a hook does not exist\"}],\"ImageHashIsZero()\":[{\"notice\":\"Error thrown when the image hash is zero\"}],\"InvalidERC1271Signature(bytes32,address,bytes)\":[{\"notice\":\"Error thrown when the ERC1271 signature is invalid\"}],\"InvalidKind(uint8)\":[{\"notice\":\"Error thrown when the kind is invalid\"}],\"InvalidSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":[{\"notice\":\"Error thrown when the sapient signature is invalid\"}],\"InvalidSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":[{\"notice\":\"Error thrown when a signature is invalid\"}],\"InvalidSignatureFlag(uint256)\":[{\"notice\":\"Error thrown when the signature flag is invalid\"}],\"InvalidSignatureType(bytes1)\":[{\"notice\":\"Error thrown when the signature type is invalid\"}],\"InvalidSignatureWeight(uint256,uint256)\":[{\"notice\":\"Error thrown when the signature weight is invalid\"}],\"InvalidStaticSignatureExpired(bytes32,uint256)\":[{\"notice\":\"Error thrown when the static signature has expired\"}],\"InvalidStaticSignatureWrongCaller(bytes32,address,address)\":[{\"notice\":\"Error thrown when the static signature has the wrong caller\"}],\"LowWeightChainedSignature(bytes,uint256,uint256)\":[{\"notice\":\"Error thrown when the weight is too low for a chained signature\"}],\"NotEnoughGas((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint256,uint256)\":[{\"notice\":\"Error thrown when there is not enough gas\"}],\"OnlySelf(address)\":[{\"notice\":\"Error thrown when the caller is not the same as the contract\"}],\"Reverted((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint256,bytes)\":[{\"notice\":\"Error thrown when a call reverts\"}],\"UnusedSnapshot((bytes32,uint256))\":[{\"notice\":\"Error thrown when the snapshot is unused\"}],\"WrongChainedCheckpointOrder(uint256,uint256)\":[{\"notice\":\"Error thrown when the checkpoint order is wrong\"}]},\"events\":{\"CallAborted(bytes32,uint256,bytes)\":{\"notice\":\"Emitted when a call is aborted\"},\"CallFailed(bytes32,uint256,bytes)\":{\"notice\":\"Emitted when a call fails\"},\"CallSkipped(bytes32,uint256)\":{\"notice\":\"Emitted when a call is skipped\"},\"CallSucceeded(bytes32,uint256)\":{\"notice\":\"Emitted when a call succeeds\"},\"DefinedHook(bytes4,address)\":{\"notice\":\"Emitted when a hook is defined\"},\"ImageHashUpdated(bytes32)\":{\"notice\":\"Emitted when the image hash is updated\"},\"ImplementationUpdated(address)\":{\"notice\":\"Emitted when the implementation is updated\"},\"NonceChange(uint256,uint256)\":{\"notice\":\"Emitted when the nonce is changed\"},\"StaticSignatureSet(bytes32,address,uint96)\":{\"notice\":\"Event emitted when a static signature is set\"}},\"kind\":\"user\",\"methods\":{\"FACTORY()\":{\"notice\":\"Factory address\"},\"INIT_CODE_HASH()\":{\"notice\":\"Initialization code hash\"},\"STAGE_2_IMPLEMENTATION()\":{\"notice\":\"Stage 2 implementation address\"},\"addHook(bytes4,address)\":{\"notice\":\"Add a hook\"},\"execute(bytes,bytes)\":{\"notice\":\"Execute a call\"},\"getImplementation()\":{\"notice\":\"Get the implementation\"},\"getStaticSignature(bytes32)\":{\"notice\":\"Get the static signature for a specific hash\"},\"isValidSignature(bytes32,bytes)\":{\"notice\":\"Verifies whether the provided signature is valid with respect to the provided hash\"},\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\":{\"notice\":\"Called when multiple ERC1155 tokens are transferred to this contract\"},\"onERC1155Received(address,address,uint256,uint256,bytes)\":{\"notice\":\"Called when a single ERC1155 token is transferred to this contract\"},\"onERC721Received(address,address,uint256,bytes)\":{\"notice\":\"Called when a single ERC721 token is transferred to this contract\"},\"readHook(bytes4)\":{\"notice\":\"Read a hook\"},\"readNonce(uint256)\":{\"notice\":\"Read the nonce\"},\"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"notice\":\"Recover the partial signature\"},\"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"notice\":\"Recovers the image hash of a given signature\"},\"removeHook(bytes4)\":{\"notice\":\"Remove a hook\"},\"selfExecute(bytes)\":{\"notice\":\"Execute a call\"},\"setStaticSignature(bytes32,address,uint96)\":{\"notice\":\"Set the static signature for a specific hash\"},\"tokenReceived(address,uint256,bytes)\":{\"notice\":\"Called when ERC223 tokens are received by this contract\"},\"tokensReceived(address,address,address,uint256,bytes,bytes)\":{\"notice\":\"Called when tokens are received by this contract\"},\"updateImageHash(bytes32)\":{\"notice\":\"Update the image hash\"},\"updateImplementation(address)\":{\"notice\":\"Update the implementation\"},\"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)\":{\"notice\":\"Validate user's signature and nonce the entryPoint will make the call to the recipient only if this validation call returns successfully. signature failure should be reported by returning SIG_VALIDATION_FAILED (1). This allows making a \\\"simulation call\\\" without a valid signature Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.\"}},\"notice\":\"The initial stage of the wallet\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Stage1Module.sol\":\"Stage1Module\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/Stage1Module.sol\":{\"keccak256\":\"0x3e3be2778ac65aded03c15a73b4382a6a7dde0bcc69d1268255fd734e320d084\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c4d8846d35267bf7bc895c04e3d91b525274ae0677ec3b5529cba02577a2bb67\",\"dweb:/ipfs/QmaZq74rdyLUwRGCfacFXVS7kAL2FhTm3u356kHLtggfiW\"]},\"src/Stage2Module.sol\":{\"keccak256\":\"0xd0b2c2fead81d32a3f83f95bd1dd2d90677fdd1e0a7194a25710ffd0fdaee428\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://8489e75346dbf462b0567da30c2e020cdde3975c38bdfee055284642a3bd2d19\",\"dweb:/ipfs/QmTDM2AkG8qLVjfn35UcXN89CdQS8p3Cm888EadYrMAYAR\"]},\"src/Wallet.sol\":{\"keccak256\":\"0xe01e9e937dd8d7572976ccc8ec3ec87e4a557069dafb05f85977a7b71f5c58d5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2e9ab78d33655f8e822258dff3f2d5ad01e84f6dc90174840d5a283b8e6413c1\",\"dweb:/ipfs/QmNMyYe3C1fs3cxKmUZ3S9VU5EE4WVWPVcwiGbgvbS1vrH\"]},\"src/modules/Calls.sol\":{\"keccak256\":\"0xcd0d38d0fd248e4443032dede2b8892ea0ca7e55538cd54082830f6b98d8edb1\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://617bb6d0724b18f3d77347cc454a57c1c916a0818a592552bd7fa226aa41a306\",\"dweb:/ipfs/Qmeet85Ux6cKq9JmC25JnTzFnRrgDpkyRik2svZLWt4fov\"]},\"src/modules/ERC4337v07.sol\":{\"keccak256\":\"0xbee11ed2498b892b16f72984c848fea85b58d15313fffa78c1e48ca7208f9189\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2d9296803bd52f5e2ae84011593f686802f1cadf6c68a4ee9f97e6455463ae0f\",\"dweb:/ipfs/QmXmWwUiV2eshxxdY5zCyJ7rxcH7bztxcAoh1scw2MPuhP\"]},\"src/modules/Hooks.sol\":{\"keccak256\":\"0xd1f9de45b83ae5f9f32a4d1c709d7a2b6543b1cddd09bf69d401dcdf1d154ab7\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://bf3161edf37479825588e07039752b79792666455cc0beb1ca0e873b3be31ad4\",\"dweb:/ipfs/QmYYpJeSsRgRx2oHcpvhqsNs7ZtDhVnxLmFpXz5eYcS8g4\"]},\"src/modules/Implementation.sol\":{\"keccak256\":\"0x16546d4be07865808890308750916b0a9a55e7a994a458c01edde4618f29b4e6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1b1f9785b08c9f29d6849ba2d3dee89fa3ea5f3c2feec4a59a6d1040e3fbe040\",\"dweb:/ipfs/QmU2Pm5C3Ztky7RQdCZggavyq7Eh1eS1HFqVz9jZKiMUML\"]},\"src/modules/Nonce.sol\":{\"keccak256\":\"0x56fbf6dc9b34ab60ae8a32ffb6f583c003bb8f4a5223ce704e982400fa403fab\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://492f53628633b862702cf8f9b726067a722c94028133a8a4c4fcf3d0e73ad803\",\"dweb:/ipfs/QmTHNy4XbH47YZaqKDpknb5aApjRH9HVAREHN7N5vEFWEV\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/Storage.sol\":{\"keccak256\":\"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da\",\"dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn\"]},\"src/modules/auth/BaseAuth.sol\":{\"keccak256\":\"0xbf2e40def03fcb5f4a5129b2f5803e21951325b92e00126cbe1427b7c25cfefd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://b560905fcc4b957d27c2abed78a1e82529c89fa472e91b3d108fbfd91aa7c3f7\",\"dweb:/ipfs/QmRjLLtTWE6dFX2kBQCgLz7ossfMxhAFgDC8Jx9XuGL6Wy\"]},\"src/modules/auth/BaseSig.sol\":{\"keccak256\":\"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8\",\"dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3\"]},\"src/modules/auth/SelfAuth.sol\":{\"keccak256\":\"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42\",\"dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W\"]},\"src/modules/auth/Stage1Auth.sol\":{\"keccak256\":\"0x399e21aad2b30bf80a21766bd3442d676a26eb66c02423617b2772df7204cb0a\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://25c698dee10c6fbb8b63adb4023f1886669b8e9c54dcd98871f0bd6a2b6acf03\",\"dweb:/ipfs/QmNzUFWCoymaoV7CFgJvbAWRsJAZkqBhSpgff26JVAr9hf\"]},\"src/modules/auth/Stage2Auth.sol\":{\"keccak256\":\"0x5b23b530522ba1c02248d1f7470352c57fbc91c245c7c577044f93f6bb560a59\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c30b8e13edc7e18e4ea7bc7f4b8deaf16301a8f2bb23e7697e6f6b74882a39dc\",\"dweb:/ipfs/QmW69XvfeJepuPBrHb1Vpkikg43P4juEGdRkUWt8GrrAfL\"]},\"src/modules/interfaces/IAccount.sol\":{\"keccak256\":\"0x64ca3bb59ec4fc0a60d80402802365e2d5226afe7e7aabe3b21df936c84f2bcb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ccfd2381e1874cdec2f473a9a17799a3b57360c0593d68ee66fcea9c16eb39b4\",\"dweb:/ipfs/QmcjbJpGz3Exmu4fsj953Y2bG8rtQaVMEFUgT6W2dUXomr\"]},\"src/modules/interfaces/IAuth.sol\":{\"keccak256\":\"0xf6fa30af2ec91d5fbeac17c9b1f2aa73b7883c9ac98745605007e57666394b91\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://6e90a87978519462f9612f4a17e38fddc1c7bcf700ff834a1de7dce326f30353\",\"dweb:/ipfs/QmXmWAsRRK6t4jPs4VcXrouyokxdALM28D3odX7ub48WEp\"]},\"src/modules/interfaces/ICheckpointer.sol\":{\"keccak256\":\"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1\",\"dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t\"]},\"src/modules/interfaces/IDelegatedExtension.sol\":{\"keccak256\":\"0xa2ae897e90fd70dd4a9e172bc04d019ba9c512e72c2df65fcb6daf87dd5ceb90\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://cdf4b7c3dfb0aef6c9dbe8b2a0542018dc756ef2252d7101bcb3186192da0a11\",\"dweb:/ipfs/QmPHCVu1DJ7fBrPBYA5y3hoF3a3XFEBwYCZ1ErGaxPhcYL\"]},\"src/modules/interfaces/IERC1155Receiver.sol\":{\"keccak256\":\"0xa23d0bc29233a91085922ea8a7e2cbe8b5f3358d3f2c3cdc58adade9a171d9c1\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2f06b8f3ae7a45441cc26da5b2ddd15ba76d1664178958f63f536e6c5e4fd0fb\",\"dweb:/ipfs/QmR1Rnk8ciSn5s5wNLGvpE1QNRDsBVDfDT1ZXhei2brmFj\"]},\"src/modules/interfaces/IERC1271.sol\":{\"keccak256\":\"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b\",\"dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF\"]},\"src/modules/interfaces/IERC223Receiver.sol\":{\"keccak256\":\"0x426221c0d48b651ed692edfa5388d6e5304e94f48598a71748134b2659e3890d\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://9e1ed2fd5e390b5b943dc07c2e0ea9e524eb37263dc72c482365c159fc3659e5\",\"dweb:/ipfs/QmWRDBvb1cthVPm4BSzKX3J5GpGGSBuDokkpRK9x5aA7JR\"]},\"src/modules/interfaces/IERC721Receiver.sol\":{\"keccak256\":\"0xbe14c3b727f283a467dc2f2221d3322c5a69cd64a3aacad85acab05e94438f35\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://43ef086c509b8b88cae78f67c4bd979fd427736972cfe56f7423371ccc154e63\",\"dweb:/ipfs/Qmc7Yp7Z1dQ925gzEZYVNUXnWr3YomvWkXfaGYLZpoy8J3\"]},\"src/modules/interfaces/IERC777Receiver.sol\":{\"keccak256\":\"0xd9144d439a96b0c6439cd9a186701aa530f4f782ff09fdbf6c3ef16b78b0d4e5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d1f17484eda7184db4a00106b4952f15c1517872cbfe19663d6fce4e042729b2\",\"dweb:/ipfs/QmWdhYmLNkUpgvPpSyGHstxrFwMfhRTVmxDpe4frkUu1Qh\"]},\"src/modules/interfaces/IEntryPoint.sol\":{\"keccak256\":\"0xd19922ea7a8ae09072a721138dc93e175fa77ecaa3ac6f2d759d5e5e944fb665\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://20ecea69ddd4d8787c0bdc4487dea03e90f63f4296674a12728e331a78e62620\",\"dweb:/ipfs/QmZUrX8zEqfHZEJQjNtDUXGS47bj2UuRCLfbkLPrXsot1c\"]},\"src/modules/interfaces/IPartialAuth.sol\":{\"keccak256\":\"0x0d1aa021615d8e90696e71a9468331457a1babfa2ffe169654b7456e5bcb7a73\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://bbacd149a6358ab0d4b9c588d2e3a55fc71ed4723269150d7b91ca70092f6519\",\"dweb:/ipfs/QmUSwtrYCrRcRFsy5rCzdMPrw1FCU7ZoeXdsW6kK9yc8FK\"]},\"src/modules/interfaces/ISapient.sol\":{\"keccak256\":\"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489\",\"dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"src/utils/LibOptim.sol\":{\"keccak256\":\"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81\",\"dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_entryPoint","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"_space","type":"uint256"},{"internalType":"uint256","name":"_provided","type":"uint256"},{"internalType":"uint256","name":"_current","type":"uint256"}],"type":"error","name":"BadNonce"},{"inputs":[],"type":"error","name":"ERC4337Disabled"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"type":"error","name":"HookAlreadyExists"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"type":"error","name":"HookDoesNotExist"},{"inputs":[],"type":"error","name":"ImageHashIsZero"},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32"},{"internalType":"address","name":"_signer","type":"address"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"type":"error","name":"InvalidERC1271Signature"},{"inputs":[{"internalType":"address","name":"_entrypoint","type":"address"}],"type":"error","name":"InvalidEntryPoint"},{"inputs":[{"internalType":"uint8","name":"kind","type":"uint8"}],"type":"error","name":"InvalidKind"},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"type":"error","name":"InvalidSapientSignature"},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"type":"error","name":"InvalidSignature"},{"inputs":[{"internalType":"uint256","name":"_flag","type":"uint256"}],"type":"error","name":"InvalidSignatureFlag"},{"inputs":[{"internalType":"bytes1","name":"_type","type":"bytes1"}],"type":"error","name":"InvalidSignatureType"},{"inputs":[{"internalType":"uint256","name":"_threshold","type":"uint256"},{"internalType":"uint256","name":"_weight","type":"uint256"}],"type":"error","name":"InvalidSignatureWeight"},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32"},{"internalType":"uint256","name":"_expires","type":"uint256"}],"type":"error","name":"InvalidStaticSignatureExpired"},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32"},{"internalType":"address","name":"_caller","type":"address"},{"internalType":"address","name":"_expectedCaller","type":"address"}],"type":"error","name":"InvalidStaticSignatureWrongCaller"},{"inputs":[{"internalType":"bytes","name":"_signature","type":"bytes"},{"internalType":"uint256","name":"_threshold","type":"uint256"},{"internalType":"uint256","name":"_weight","type":"uint256"}],"type":"error","name":"LowWeightChainedSignature"},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_gasLeft","type":"uint256"}],"type":"error","name":"NotEnoughGas"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"}],"type":"error","name":"OnlySelf"},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"bytes","name":"_returnData","type":"bytes"}],"type":"error","name":"Reverted"},{"inputs":[{"internalType":"struct Snapshot","name":"_snapshot","type":"tuple","components":[{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"uint256","name":"checkpoint","type":"uint256"}]}],"type":"error","name":"UnusedSnapshot"},{"inputs":[{"internalType":"uint256","name":"_nextCheckpoint","type":"uint256"},{"internalType":"uint256","name":"_checkpoint","type":"uint256"}],"type":"error","name":"WrongChainedCheckpointOrder"},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_index","type":"uint256","indexed":false},{"internalType":"bytes","name":"_returnData","type":"bytes","indexed":false}],"type":"event","name":"CallAborted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_index","type":"uint256","indexed":false},{"internalType":"bytes","name":"_returnData","type":"bytes","indexed":false}],"type":"event","name":"CallFailed","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_index","type":"uint256","indexed":false}],"type":"event","name":"CallSkipped","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_index","type":"uint256","indexed":false}],"type":"event","name":"CallSucceeded","anonymous":false},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4","indexed":false},{"internalType":"address","name":"implementation","type":"address","indexed":false}],"type":"event","name":"DefinedHook","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"newImageHash","type":"bytes32","indexed":false}],"type":"event","name":"ImageHashUpdated","anonymous":false},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address","indexed":false}],"type":"event","name":"ImplementationUpdated","anonymous":false},{"inputs":[{"internalType":"uint256","name":"_space","type":"uint256","indexed":false},{"internalType":"uint256","name":"_newNonce","type":"uint256","indexed":false}],"type":"event","name":"NonceChange","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32","indexed":false},{"internalType":"address","name":"_address","type":"address","indexed":false},{"internalType":"uint96","name":"_timestamp","type":"uint96","indexed":false}],"type":"event","name":"StaticSignatureSet","anonymous":false},{"inputs":[],"stateMutability":"payable","type":"fallback"},{"inputs":[],"stateMutability":"view","type":"function","name":"FACTORY","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"INIT_CODE_HASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"STAGE_2_IMPLEMENTATION","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"},{"internalType":"address","name":"implementation","type":"address"}],"stateMutability":"payable","type":"function","name":"addHook"},{"inputs":[],"stateMutability":"view","type":"function","name":"entrypoint","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"payable","type":"function","name":"execute"},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"executeUserOp"},{"inputs":[],"stateMutability":"view","type":"function","name":"getImplementation","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getStaticSignature","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"view","type":"function","name":"isValidSignature","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function","name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function","name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function","name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"stateMutability":"view","type":"function","name":"readHook","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"_space","type":"uint256"}],"stateMutability":"view","type":"function","name":"readNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"view","type":"function","name":"recoverPartialSignature","outputs":[{"internalType":"uint256","name":"threshold","type":"uint256"},{"internalType":"uint256","name":"weight","type":"uint256"},{"internalType":"bool","name":"isValidImage","type":"bool"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"uint256","name":"checkpoint","type":"uint256"},{"internalType":"bytes32","name":"opHash","type":"bytes32"}]},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"view","type":"function","name":"recoverSapientSignature","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"stateMutability":"payable","type":"function","name":"removeHook"},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"}],"stateMutability":"payable","type":"function","name":"selfExecute"},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint96","name":"_timestamp","type":"uint96"}],"stateMutability":"nonpayable","type":"function","name":"setStaticSignature"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function","name":"tokenReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes","name":"operatorData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"tokensReceived"},{"inputs":[{"internalType":"bytes32","name":"_imageHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"updateImageHash"},{"inputs":[{"internalType":"address","name":"_implementation","type":"address"}],"stateMutability":"payable","type":"function","name":"updateImplementation"},{"inputs":[{"internalType":"struct PackedUserOperation","name":"userOp","type":"tuple","components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"initCode","type":"bytes"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"bytes32","name":"accountGasLimits","type":"bytes32"},{"internalType":"uint256","name":"preVerificationGas","type":"uint256"},{"internalType":"bytes32","name":"gasFees","type":"bytes32"},{"internalType":"bytes","name":"paymasterAndData","type":"bytes"},{"internalType":"bytes","name":"signature","type":"bytes"}]},{"internalType":"bytes32","name":"userOpHash","type":"bytes32"},{"internalType":"uint256","name":"missingAccountFunds","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"validateUserOp","outputs":[{"internalType":"uint256","name":"validationData","type":"uint256"}]},{"inputs":[],"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"addHook(bytes4,address)":{"details":"Callable only by the contract itself","params":{"implementation":"The implementation address of the hook","selector":"The selector of the hook"}},"execute(bytes,bytes)":{"params":{"_payload":"The payload","_signature":"The signature"}},"getImplementation()":{"returns":{"_0":"implementation The implementation"}},"getStaticSignature(bytes32)":{"params":{"_hash":"The hash to get the static signature for"},"returns":{"_0":"address The address associated with the static signature","_1":"timestamp The timestamp of the static signature"}},"isValidSignature(bytes32,bytes)":{"details":"MUST return the correct magic value if the signature provided is valid for the provided hash > The bytes4 magic value to return when signature is valid is 0x1626ba7e : bytes4(keccak256(\"isValidSignature(bytes32,bytes)\") > This function MAY modify Ethereum's state","params":{"_hash":"keccak256 hash that was signed","_signature":"Signature byte array associated with _data"},"returns":{"_0":"Magic value 0x1626ba7e if the signature is valid and 0x0 otherwise"}},"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)":{"params":{"data":"Additional data with no specified format","from":"The address which previously owned the token","ids":"The list of token IDs being transferred","operator":"The address which initiated the transfer","values":"The amounts of each token being transferred"},"returns":{"_0":"On a success, the selector of the function that was called"}},"onERC1155Received(address,address,uint256,uint256,bytes)":{"params":{"data":"Additional data with no specified format","from":"The address which previously owned the token","operator":"The address which initiated the transfer","tokenId":"The ID of the token being transferred","value":"The amount of token being transferred"},"returns":{"_0":"On a success, the selector of the function that was called"}},"onERC721Received(address,address,uint256,bytes)":{"params":{"data":"Additional data with no specified format","from":"The address which previously owned the token","operator":"The address which initiated the transfer","tokenId":"The ID of the token being transferred"},"returns":{"_0":"On a success, the selector of the function that was called"}},"readHook(bytes4)":{"params":{"selector":"The selector of the hook"},"returns":{"_0":"implementation The implementation address of the hook"}},"readNonce(uint256)":{"params":{"_space":"The space"},"returns":{"_0":"nonce The nonce"}},"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"params":{"_payload":"The payload","_signature":"The signature to recover"},"returns":{"checkpoint":"The checkpoint identifier","imageHash":"The derived image hash","isValidImage":"Whether the image hash is valid","opHash":"The hash of the payload","threshold":"The signature threshold","weight":"The derived weight"}},"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"params":{"payload":"The payload to recover the signature from","signature":"The signature to recover the image hash from"},"returns":{"_0":"The recovered image hash"}},"removeHook(bytes4)":{"details":"Callable only by the contract itself","params":{"selector":"The selector of the hook"}},"selfExecute(bytes)":{"details":"Callable only by the contract itself","params":{"_payload":"The payload"}},"setStaticSignature(bytes32,address,uint96)":{"details":"Only callable by the wallet itself","params":{"_address":"The address to associate with the static signature","_hash":"The hash to set the static signature for","_timestamp":"The timestamp of the static signature"}},"tokenReceived(address,uint256,bytes)":{"params":{"data":"Transaction metadata","from":"The address which previously owned the tokens","value":"The amount of tokens being transferred"},"returns":{"_0":"The signature of the function to be called"}},"tokensReceived(address,address,address,uint256,bytes,bytes)":{"params":{"amount":"The amount of tokens being transferred","data":"Additional data with no specified format","from":"The address which previously owned the tokens","operator":"The address which initiated the transfer","operatorData":"Additional data with no specified format","to":"The address which is receiving the tokens"}},"updateImageHash(bytes32)":{"details":"Only callable by the wallet itself","params":{"_imageHash":"The new image hash"}},"updateImplementation(address)":{"details":"Callable only by the contract itself","params":{"_implementation":"The new implementation"}},"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)":{"details":"Must validate caller is the entryPoint. Must validate the signature and nonce","params":{"missingAccountFunds":"- Missing funds on the account's deposit in the entrypoint. This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call. The excess is left as a deposit in the entrypoint for future calls. Can be withdrawn anytime using \"entryPoint.withdrawTo()\". In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.","userOp":"- The operation that is about to be executed.","userOpHash":"- Hash of the user's request data. can be used as the basis for signature."},"returns":{"validationData":" - Packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode. <20-byte> aggregatorOrSigFail - 0 for valid signature, 1 to mark signature failure, otherwise, an address of an \"aggregator\" contract. <6-byte> validUntil - Last timestamp this operation is valid at, or 0 for \"indefinitely\" <6-byte> validAfter - First timestamp this operation is valid If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure. Note that the validation code cannot use block.timestamp (or block.number) directly."}}},"version":1},"userdoc":{"kind":"user","methods":{"FACTORY()":{"notice":"Factory address"},"INIT_CODE_HASH()":{"notice":"Initialization code hash"},"STAGE_2_IMPLEMENTATION()":{"notice":"Stage 2 implementation address"},"addHook(bytes4,address)":{"notice":"Add a hook"},"execute(bytes,bytes)":{"notice":"Execute a call"},"getImplementation()":{"notice":"Get the implementation"},"getStaticSignature(bytes32)":{"notice":"Get the static signature for a specific hash"},"isValidSignature(bytes32,bytes)":{"notice":"Verifies whether the provided signature is valid with respect to the provided hash"},"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)":{"notice":"Called when multiple ERC1155 tokens are transferred to this contract"},"onERC1155Received(address,address,uint256,uint256,bytes)":{"notice":"Called when a single ERC1155 token is transferred to this contract"},"onERC721Received(address,address,uint256,bytes)":{"notice":"Called when a single ERC721 token is transferred to this contract"},"readHook(bytes4)":{"notice":"Read a hook"},"readNonce(uint256)":{"notice":"Read the nonce"},"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"notice":"Recover the partial signature"},"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"notice":"Recovers the image hash of a given signature"},"removeHook(bytes4)":{"notice":"Remove a hook"},"selfExecute(bytes)":{"notice":"Execute a call"},"setStaticSignature(bytes32,address,uint96)":{"notice":"Set the static signature for a specific hash"},"tokenReceived(address,uint256,bytes)":{"notice":"Called when ERC223 tokens are received by this contract"},"tokensReceived(address,address,address,uint256,bytes,bytes)":{"notice":"Called when tokens are received by this contract"},"updateImageHash(bytes32)":{"notice":"Update the image hash"},"updateImplementation(address)":{"notice":"Update the implementation"},"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)":{"notice":"Validate user's signature and nonce the entryPoint will make the call to the recipient only if this validation call returns successfully. signature failure should be reported by returning SIG_VALIDATION_FAILED (1). This allows making a \"simulation call\" without a valid signature Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure."}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/Stage1Module.sol":"Stage1Module"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/Stage1Module.sol":{"keccak256":"0x3e3be2778ac65aded03c15a73b4382a6a7dde0bcc69d1268255fd734e320d084","urls":["bzz-raw://c4d8846d35267bf7bc895c04e3d91b525274ae0677ec3b5529cba02577a2bb67","dweb:/ipfs/QmaZq74rdyLUwRGCfacFXVS7kAL2FhTm3u356kHLtggfiW"],"license":"Apache-2.0"},"src/Stage2Module.sol":{"keccak256":"0xd0b2c2fead81d32a3f83f95bd1dd2d90677fdd1e0a7194a25710ffd0fdaee428","urls":["bzz-raw://8489e75346dbf462b0567da30c2e020cdde3975c38bdfee055284642a3bd2d19","dweb:/ipfs/QmTDM2AkG8qLVjfn35UcXN89CdQS8p3Cm888EadYrMAYAR"],"license":"Apache-2.0"},"src/Wallet.sol":{"keccak256":"0xe01e9e937dd8d7572976ccc8ec3ec87e4a557069dafb05f85977a7b71f5c58d5","urls":["bzz-raw://2e9ab78d33655f8e822258dff3f2d5ad01e84f6dc90174840d5a283b8e6413c1","dweb:/ipfs/QmNMyYe3C1fs3cxKmUZ3S9VU5EE4WVWPVcwiGbgvbS1vrH"],"license":"Apache-2.0"},"src/modules/Calls.sol":{"keccak256":"0xcd0d38d0fd248e4443032dede2b8892ea0ca7e55538cd54082830f6b98d8edb1","urls":["bzz-raw://617bb6d0724b18f3d77347cc454a57c1c916a0818a592552bd7fa226aa41a306","dweb:/ipfs/Qmeet85Ux6cKq9JmC25JnTzFnRrgDpkyRik2svZLWt4fov"],"license":"Apache-2.0"},"src/modules/ERC4337v07.sol":{"keccak256":"0xbee11ed2498b892b16f72984c848fea85b58d15313fffa78c1e48ca7208f9189","urls":["bzz-raw://2d9296803bd52f5e2ae84011593f686802f1cadf6c68a4ee9f97e6455463ae0f","dweb:/ipfs/QmXmWwUiV2eshxxdY5zCyJ7rxcH7bztxcAoh1scw2MPuhP"],"license":"Apache-2.0"},"src/modules/Hooks.sol":{"keccak256":"0xd1f9de45b83ae5f9f32a4d1c709d7a2b6543b1cddd09bf69d401dcdf1d154ab7","urls":["bzz-raw://bf3161edf37479825588e07039752b79792666455cc0beb1ca0e873b3be31ad4","dweb:/ipfs/QmYYpJeSsRgRx2oHcpvhqsNs7ZtDhVnxLmFpXz5eYcS8g4"],"license":"Apache-2.0"},"src/modules/Implementation.sol":{"keccak256":"0x16546d4be07865808890308750916b0a9a55e7a994a458c01edde4618f29b4e6","urls":["bzz-raw://1b1f9785b08c9f29d6849ba2d3dee89fa3ea5f3c2feec4a59a6d1040e3fbe040","dweb:/ipfs/QmU2Pm5C3Ztky7RQdCZggavyq7Eh1eS1HFqVz9jZKiMUML"],"license":"Apache-2.0"},"src/modules/Nonce.sol":{"keccak256":"0x56fbf6dc9b34ab60ae8a32ffb6f583c003bb8f4a5223ce704e982400fa403fab","urls":["bzz-raw://492f53628633b862702cf8f9b726067a722c94028133a8a4c4fcf3d0e73ad803","dweb:/ipfs/QmTHNy4XbH47YZaqKDpknb5aApjRH9HVAREHN7N5vEFWEV"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/Storage.sol":{"keccak256":"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f","urls":["bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da","dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn"],"license":"Apache-2.0"},"src/modules/auth/BaseAuth.sol":{"keccak256":"0xbf2e40def03fcb5f4a5129b2f5803e21951325b92e00126cbe1427b7c25cfefd","urls":["bzz-raw://b560905fcc4b957d27c2abed78a1e82529c89fa472e91b3d108fbfd91aa7c3f7","dweb:/ipfs/QmRjLLtTWE6dFX2kBQCgLz7ossfMxhAFgDC8Jx9XuGL6Wy"],"license":"Apache-2.0"},"src/modules/auth/BaseSig.sol":{"keccak256":"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa","urls":["bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8","dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3"],"license":"Apache-2.0"},"src/modules/auth/SelfAuth.sol":{"keccak256":"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c","urls":["bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42","dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W"],"license":"Apache-2.0"},"src/modules/auth/Stage1Auth.sol":{"keccak256":"0x399e21aad2b30bf80a21766bd3442d676a26eb66c02423617b2772df7204cb0a","urls":["bzz-raw://25c698dee10c6fbb8b63adb4023f1886669b8e9c54dcd98871f0bd6a2b6acf03","dweb:/ipfs/QmNzUFWCoymaoV7CFgJvbAWRsJAZkqBhSpgff26JVAr9hf"],"license":"Apache-2.0"},"src/modules/auth/Stage2Auth.sol":{"keccak256":"0x5b23b530522ba1c02248d1f7470352c57fbc91c245c7c577044f93f6bb560a59","urls":["bzz-raw://c30b8e13edc7e18e4ea7bc7f4b8deaf16301a8f2bb23e7697e6f6b74882a39dc","dweb:/ipfs/QmW69XvfeJepuPBrHb1Vpkikg43P4juEGdRkUWt8GrrAfL"],"license":"Apache-2.0"},"src/modules/interfaces/IAccount.sol":{"keccak256":"0x64ca3bb59ec4fc0a60d80402802365e2d5226afe7e7aabe3b21df936c84f2bcb","urls":["bzz-raw://ccfd2381e1874cdec2f473a9a17799a3b57360c0593d68ee66fcea9c16eb39b4","dweb:/ipfs/QmcjbJpGz3Exmu4fsj953Y2bG8rtQaVMEFUgT6W2dUXomr"],"license":"MIT"},"src/modules/interfaces/IAuth.sol":{"keccak256":"0xf6fa30af2ec91d5fbeac17c9b1f2aa73b7883c9ac98745605007e57666394b91","urls":["bzz-raw://6e90a87978519462f9612f4a17e38fddc1c7bcf700ff834a1de7dce326f30353","dweb:/ipfs/QmXmWAsRRK6t4jPs4VcXrouyokxdALM28D3odX7ub48WEp"],"license":"Apache-2.0"},"src/modules/interfaces/ICheckpointer.sol":{"keccak256":"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513","urls":["bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1","dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t"],"license":"Apache-2.0"},"src/modules/interfaces/IDelegatedExtension.sol":{"keccak256":"0xa2ae897e90fd70dd4a9e172bc04d019ba9c512e72c2df65fcb6daf87dd5ceb90","urls":["bzz-raw://cdf4b7c3dfb0aef6c9dbe8b2a0542018dc756ef2252d7101bcb3186192da0a11","dweb:/ipfs/QmPHCVu1DJ7fBrPBYA5y3hoF3a3XFEBwYCZ1ErGaxPhcYL"],"license":"Apache-2.0"},"src/modules/interfaces/IERC1155Receiver.sol":{"keccak256":"0xa23d0bc29233a91085922ea8a7e2cbe8b5f3358d3f2c3cdc58adade9a171d9c1","urls":["bzz-raw://2f06b8f3ae7a45441cc26da5b2ddd15ba76d1664178958f63f536e6c5e4fd0fb","dweb:/ipfs/QmR1Rnk8ciSn5s5wNLGvpE1QNRDsBVDfDT1ZXhei2brmFj"],"license":"Apache-2.0"},"src/modules/interfaces/IERC1271.sol":{"keccak256":"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9","urls":["bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b","dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF"],"license":"Apache-2.0"},"src/modules/interfaces/IERC223Receiver.sol":{"keccak256":"0x426221c0d48b651ed692edfa5388d6e5304e94f48598a71748134b2659e3890d","urls":["bzz-raw://9e1ed2fd5e390b5b943dc07c2e0ea9e524eb37263dc72c482365c159fc3659e5","dweb:/ipfs/QmWRDBvb1cthVPm4BSzKX3J5GpGGSBuDokkpRK9x5aA7JR"],"license":"Apache-2.0"},"src/modules/interfaces/IERC721Receiver.sol":{"keccak256":"0xbe14c3b727f283a467dc2f2221d3322c5a69cd64a3aacad85acab05e94438f35","urls":["bzz-raw://43ef086c509b8b88cae78f67c4bd979fd427736972cfe56f7423371ccc154e63","dweb:/ipfs/Qmc7Yp7Z1dQ925gzEZYVNUXnWr3YomvWkXfaGYLZpoy8J3"],"license":"Apache-2.0"},"src/modules/interfaces/IERC777Receiver.sol":{"keccak256":"0xd9144d439a96b0c6439cd9a186701aa530f4f782ff09fdbf6c3ef16b78b0d4e5","urls":["bzz-raw://d1f17484eda7184db4a00106b4952f15c1517872cbfe19663d6fce4e042729b2","dweb:/ipfs/QmWdhYmLNkUpgvPpSyGHstxrFwMfhRTVmxDpe4frkUu1Qh"],"license":"Apache-2.0"},"src/modules/interfaces/IEntryPoint.sol":{"keccak256":"0xd19922ea7a8ae09072a721138dc93e175fa77ecaa3ac6f2d759d5e5e944fb665","urls":["bzz-raw://20ecea69ddd4d8787c0bdc4487dea03e90f63f4296674a12728e331a78e62620","dweb:/ipfs/QmZUrX8zEqfHZEJQjNtDUXGS47bj2UuRCLfbkLPrXsot1c"],"license":"MIT"},"src/modules/interfaces/IPartialAuth.sol":{"keccak256":"0x0d1aa021615d8e90696e71a9468331457a1babfa2ffe169654b7456e5bcb7a73","urls":["bzz-raw://bbacd149a6358ab0d4b9c588d2e3a55fc71ed4723269150d7b91ca70092f6519","dweb:/ipfs/QmUSwtrYCrRcRFsy5rCzdMPrw1FCU7ZoeXdsW6kK9yc8FK"],"license":"Apache-2.0"},"src/modules/interfaces/ISapient.sol":{"keccak256":"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359","urls":["bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489","dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"src/utils/LibOptim.sol":{"keccak256":"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde","urls":["bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81","dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x"],"license":"Apache-2.0"}},"version":1},"id":28} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Stage1Module.t.sol/TestStage1Module.json b/contracts/artifacts/wallet-contracts-v3/Stage1Module.t.sol/TestStage1Module.json new file mode 100644 index 00000000..5bf77541 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Stage1Module.t.sol/TestStage1Module.json @@ -0,0 +1 @@ +{"abi":[{"type":"receive","stateMutability":"payable"},{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"excludeArtifacts","inputs":[],"outputs":[{"name":"excludedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"excludeContracts","inputs":[],"outputs":[{"name":"excludedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"excludeSelectors","inputs":[],"outputs":[{"name":"excludedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"excludeSenders","inputs":[],"outputs":[{"name":"excludedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"factory","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract Factory"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"stage1Module","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract Stage1Module"}],"stateMutability":"view"},{"type":"function","name":"targetArtifactSelectors","inputs":[],"outputs":[{"name":"targetedArtifactSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzArtifactSelector[]","components":[{"name":"artifact","type":"string","internalType":"string"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetArtifacts","inputs":[],"outputs":[{"name":"targetedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"targetContracts","inputs":[],"outputs":[{"name":"targetedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"targetInterfaces","inputs":[],"outputs":[{"name":"targetedInterfaces_","type":"tuple[]","internalType":"struct StdInvariant.FuzzInterface[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"artifacts","type":"string[]","internalType":"string[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSelectors","inputs":[],"outputs":[{"name":"targetedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSenders","inputs":[],"outputs":[{"name":"targetedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"test_1271_single_signer","inputs":[{"name":"_threshold","type":"uint16","internalType":"uint16"},{"name":"_checkpoint","type":"uint56","internalType":"uint56"},{"name":"_weight","type":"uint8","internalType":"uint8"},{"name":"_pk","type":"uint256","internalType":"uint256"},{"name":"_digest","type":"bytes32","internalType":"bytes32"},{"name":"_noChainId","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fails_on_low_weight","inputs":[{"name":"_threshold","type":"uint16","internalType":"uint16"},{"name":"_checkpoint","type":"uint56","internalType":"uint56"},{"name":"_weight","type":"uint8","internalType":"uint8"},{"name":"_pk","type":"uint256","internalType":"uint256"},{"name":"_digest","type":"bytes32","internalType":"bytes32"},{"name":"_noChainId","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_invalid_is_valid_signature","inputs":[{"name":"params","type":"tuple","internalType":"struct TestStage1Module.test_invalid_is_valid_signature_params","components":[{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"threshold","type":"uint16","internalType":"uint16"},{"name":"checkpoint","type":"uint56","internalType":"uint56"},{"name":"weight","type":"uint8","internalType":"uint8"},{"name":"intendedPk","type":"uint256","internalType":"uint256"},{"name":"actualPk","type":"uint256","internalType":"uint256"},{"name":"noChainId","type":"bool","internalType":"bool"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_receiveETH_stage1","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_receiveETH_stage2","inputs":[{"name":"params","type":"tuple","internalType":"struct TestStage1Module.test_receiveETH_stage2_params","components":[{"name":"pk","type":"uint256","internalType":"uint256"},{"name":"nextPk","type":"uint256","internalType":"uint256"},{"name":"threshold","type":"uint16","internalType":"uint16"},{"name":"nextThreshold","type":"uint16","internalType":"uint16"},{"name":"checkpoint","type":"uint56","internalType":"uint56"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_recover_partial_signature","inputs":[{"name":"params","type":"tuple","internalType":"struct TestStage1Module.test_recover_partial_signature_params","components":[{"name":"payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"threshold","type":"uint16","internalType":"uint16"},{"name":"checkpoint","type":"uint56","internalType":"uint56"},{"name":"signerWeight","type":"uint8","internalType":"uint8"},{"name":"pk","type":"uint256","internalType":"uint256"},{"name":"signPayload","type":"bool","internalType":"bool"},{"name":"useEthSign","type":"bool","internalType":"bool"},{"name":"noChainId","type":"bool","internalType":"bool"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_recover_sapient_as_if_nested","inputs":[{"name":"params","type":"tuple","internalType":"struct TestStage1Module.nested_sapient_test_params","components":[{"name":"payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"threshold","type":"uint16","internalType":"uint16"},{"name":"checkpoint","type":"uint56","internalType":"uint56"},{"name":"weight","type":"uint8","internalType":"uint8"},{"name":"pk","type":"uint256","internalType":"uint256"},{"name":"parentWallet","type":"address","internalType":"address"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_recover_sapient_as_if_nested_wrong_signature_fail","inputs":[{"name":"params","type":"tuple","internalType":"struct TestStage1Module.nested_sapient_test_params","components":[{"name":"payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"threshold","type":"uint16","internalType":"uint16"},{"name":"checkpoint","type":"uint56","internalType":"uint56"},{"name":"weight","type":"uint8","internalType":"uint8"},{"name":"pk","type":"uint256","internalType":"uint256"},{"name":"parentWallet","type":"address","internalType":"address"}]},{"name":"_differentCheckpoint","type":"uint56","internalType":"uint56"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_reverts_invalid_static_signature_expired","inputs":[{"name":"_digest","type":"bytes32","internalType":"bytes32"},{"name":"_imageHash","type":"bytes32","internalType":"bytes32"},{"name":"_startTime","type":"uint256","internalType":"uint256"},{"name":"_validUntil","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_reverts_set_static_signature_not_self","inputs":[{"name":"_hash","type":"bytes32","internalType":"bytes32"},{"name":"_imageHash","type":"bytes32","internalType":"bytes32"},{"name":"_sigAddress","type":"address","internalType":"address"},{"name":"_timestamp","type":"uint96","internalType":"uint96"},{"name":"_caller","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_reverts_update_to_zero_image_hash","inputs":[{"name":"_threshold","type":"uint16","internalType":"uint16"},{"name":"_checkpoint","type":"uint56","internalType":"uint56"},{"name":"_weight","type":"uint8","internalType":"uint8"},{"name":"_pk","type":"uint256","internalType":"uint256"},{"name":"_noChainId","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_static_signature_any_address","inputs":[{"name":"_digest","type":"bytes32","internalType":"bytes32"},{"name":"_imageHash","type":"bytes32","internalType":"bytes32"},{"name":"_timestamp","type":"uint256","internalType":"uint256"},{"name":"_validUntil","type":"uint256","internalType":"uint256"},{"name":"_otherCaller","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_static_signature_specific_address","inputs":[{"name":"_digest","type":"bytes32","internalType":"bytes32"},{"name":"_imageHash","type":"bytes32","internalType":"bytes32"},{"name":"_timestamp","type":"uint256","internalType":"uint256"},{"name":"_validUntil","type":"uint256","internalType":"uint256"},{"name":"_onlyAddress","type":"address","internalType":"address"},{"name":"_otherCaller","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_update_config","inputs":[{"name":"params","type":"tuple","internalType":"struct TestStage1Module.test_update_config_params","components":[{"name":"threshold","type":"uint16","internalType":"uint16"},{"name":"checkpoint","type":"uint56","internalType":"uint56"},{"name":"weight","type":"uint8","internalType":"uint8"},{"name":"pk","type":"uint256","internalType":"uint256"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"nextThreshold","type":"uint16","internalType":"uint16"},{"name":"nextCheckpoint","type":"uint56","internalType":"uint56"},{"name":"nextWeight","type":"uint8","internalType":"uint8"},{"name":"nextPk","type":"uint256","internalType":"uint256"},{"name":"digest","type":"bytes32","internalType":"bytes32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_update_image_hash_then_zero","inputs":[{"name":"params","type":"tuple","internalType":"struct TestStage1Module.test_update_image_hash_then_zero_params","components":[{"name":"threshold1","type":"uint16","internalType":"uint16"},{"name":"checkpoint1","type":"uint56","internalType":"uint56"},{"name":"weight1","type":"uint8","internalType":"uint8"},{"name":"pk1","type":"uint256","internalType":"uint256"},{"name":"threshold2","type":"uint16","internalType":"uint16"},{"name":"checkpoint2","type":"uint56","internalType":"uint56"},{"name":"weight2","type":"uint8","internalType":"uint8"},{"name":"pk2","type":"uint256","internalType":"uint256"},{"name":"noChainId","type":"bool","internalType":"bool"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_update_image_hash_twice","inputs":[{"name":"params","type":"tuple","internalType":"struct TestStage1Module.test_update_image_hash_twice_params","components":[{"name":"threshold1","type":"uint16","internalType":"uint16"},{"name":"checkpoint1","type":"uint56","internalType":"uint56"},{"name":"weight1","type":"uint8","internalType":"uint8"},{"name":"pk1","type":"uint256","internalType":"uint256"},{"name":"threshold2","type":"uint16","internalType":"uint16"},{"name":"checkpoint2","type":"uint56","internalType":"uint56"},{"name":"weight2","type":"uint8","internalType":"uint8"},{"name":"pk2","type":"uint256","internalType":"uint256"},{"name":"noChainId","type":"bool","internalType":"bool"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"ImageHashUpdated","inputs":[{"name":"newImageHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"StaticSignatureSet","inputs":[{"name":"_hash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_address","type":"address","indexed":false,"internalType":"address"},{"name":"_timestamp","type":"uint96","indexed":false,"internalType":"uint96"}],"anonymous":false},{"type":"event","name":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"error","name":"InvalidKind","inputs":[{"name":"kind","type":"uint8","internalType":"uint8"}]}],"bytecode":{"object":"0x6080806040523461011057600160ff19600c541617600c55600160ff19601f541617601f556102b680820182811060018060401b038211176100fa57829162010ebe833903906000f080156100ee57601f8054610100600160a81b03191660089290921b610100600160a81b0316919091179081905560405190617f1f8083016001600160401b038111848210176100fa57604092849262011174843960018060a01b039060081c168152600060208201520301906000f080156100ee57602080546001600160a01b0319166001600160a01b039290921691909117905560405162010da89081620001168239f35b6040513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b600080fdfe60e060405260043610156200001d575b36156200001b57600080fd5b005b600060c05260c0513560e01c80630ba6dabf146200ca5c5780631cc7bfe3146200c1e65780631e648566146200bb3b5780631ed7831c146200ba8657806322fe81fe146200a8615780632ade3880146200a67c5780632dcbe49a146200a6285780633e5e3c23146200a5735780633f7286f4146200a4be5780634385978114620099785780634d02ac711462008d555780634f7cf1761462007d0d57806366d9a9a01462007b9457806367c5560a146200674757806367df3e871462005dba5780636e614e9c146200566d57806385226c8114620055c55780638d7f2e0d1462004c21578063916a17c61462004b3757806397aef38314620036c75780639a11e1001462002ffd578063b0464fdc1462002f13578063b5508aa91462002e6b578063ba414fa61462002e23578063c45a01551462002dcb578063c7b2834c1462001e54578063ce047ab4146200049c578063e20c9f7114620003d6578063f7c73c1314620001da5763fa7626d4036200000f5734620001d45760c0517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d457602060ff601f54166040519015158152f35b60c05180fd5b34620001d45760c0517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d45773ffffffffffffffffffffffffffffffffffffffff601f5460081c16602073ffffffffffffffffffffffffffffffffffffffff8154166044604051809481937f32c02a14000000000000000000000000000000000000000000000000000000008352600483015260c051602483015260c051905af18015620003575760c0519062000381575b73ffffffffffffffffffffffffffffffffffffffff915016737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4576040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152670de0b6b3a7640000602482015260c0518160448183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015620003575762000364575b5060c051808080670de0b6b3a76400008582f11562000357576200035190316200fe0e565b60c05180f35b6040513d60c051823e3d90fd5b60c05162000372916200dcfe565b60c051620001d457816200032c565b506020813d602011620003cd575b816200039e602093836200dcfe565b81010312620001d457620003c773ffffffffffffffffffffffffffffffffffffffff916200e5c1565b62000292565b3d91506200038f565b34620001d45760c0517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d457604051806020601554918281520190601560c051527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4759060c0515b8181106200046f576200046b856200045e818703826200dcfe565b604051918291826200de12565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff1684526020909301926001928301920162000443565b34620001d4576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d457620004d9366200e497565b61ffff620004f38183511660ff604085015116906200f007565b16815261ffff620005138160808401511660ff60c085015116906200f007565b1660808201526200052860608201516200ef77565b60608201526200053c60e08201516200ef77565b60e0820152604051906101e0820182811067ffffffffffffffff82111762001e235760405260c051825260c0516020830152606060408301526060808301526060608083015260c05160a083015260c05160c083015260c05160e083015260c051610100830152620005ad6200e576565b610120830152620005bd6200e576565b6101408301526060610160830152606061018083015260606101a083015260606101c08301526060810151604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620003575760c0519062001dce575b73ffffffffffffffffffffffffffffffffffffffff915016825260e0810151604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620003575760c0519062001d79575b73ffffffffffffffffffffffffffffffffffffffff915016602083015273ffffffffffffffffffffffffffffffffffffffff825116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c0519162001d59575b5060ff60408301511690604051917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156200035757620008a660206200088c6001829560076200094498620008b29760c0519162001d39575b50604051958693606051620007e4818488016200de64565b85017f7369676e65723a00000000000000000000000000000000000000000000000000838201526200082082518093856027850191016200de89565b01017f3a00000000000000000000000000000000000000000000000000000000000000838201526200085c825180938c6008850191016200de89565b010103017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826200dcfe565b61ffff86511666ffffffffffffff8588015116906200f053565b8060408701526200f33c565b8060a086015273ffffffffffffffffffffffffffffffffffffffff601f5460081c1673ffffffffffffffffffffffffffffffffffffffff8354166040518095819482937f32c02a14000000000000000000000000000000000000000000000000000000008452600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b039160c051905af18015620003575760c0519062001ce4575b73ffffffffffffffffffffffffffffffffffffffff91501661010083015273ffffffffffffffffffffffffffffffffffffffff602083015116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c0519162001cc4575b5060ff60c08301511690604051917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575762000afe6001602092600762000b1c9562000b289760c0519162001ad6575b5060405195869360605162000a85818488016200de64565b85017f7369676e65723a000000000000000000000000000000000000000000000000008382015262000ac182518093856027850191016200de89565b01017f3a00000000000000000000000000000000000000000000000000000000000000838201526200085c8251809360206008850191016200de89565b61ffff60808501511666ffffffffffffff60a086015116906200f053565b8060608501526200f33c565b60c083015260c0516101208301515262000b416200e64f565b6040610120840151015262000c0b73ffffffffffffffffffffffffffffffffffffffff6101008401511660c0840151604051907f2956142600000000000000000000000000000000000000000000000000000000602083015260248201526024815262000bb06044826200dcfe565b6040519162000bbf836200dc89565b825260c05160208301526040820152620186a0606082015260c051608082015260c05160a0820152600160c0820152604061012085015101519062000c04826200e6e5565b526200e6e5565b50610100810151151560206101208401510152606081015162000c5061012084015173ffffffffffffffffffffffffffffffffffffffff61010086015116906200f4ce565b604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620003575760c05191829182919062001c9c575b5060408501519173ffffffffffffffffffffffffffffffffffffffff86511690604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620003575760c0519262001c7a575b50604051927fb11a19e8000000000000000000000000000000000000000000000000000000008452600484015260c05183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa928315620003575760c0519362001c58575b50604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c0519162001c38575b5060ff604051957f6900a3ae00000000000000000000000000000000000000000000000000000000875216600486015260c05185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156200035757600162000f2e93819362000f3c9860c0519262001c13575b506006906020604051988662000e788b9851809285808c0191016200de89565b87017f3a686173683a00000000000000000000000000000000000000000000000000008382015262000eb482518093856026850191016200de89565b01017f3a000000000000000000000000000000000000000000000000000000000000008382015262000ef18251809360206007850191016200de89565b01017f3a00000000000000000000000000000000000000000000000000000000000000838201526200085c8251809360206002850191016200de89565b61010084015115916200f5ec565b61016083015262000f526101208301516200f961565b6101a083015273ffffffffffffffffffffffffffffffffffffffff61010083015116737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4576040517f81bad6f300000000000000000000000000000000000000000000000000000000815260c0516001600483018190526024830181905260006044840152606483015273ffffffffffffffffffffffffffffffffffffffff909216608482015290818060a48101038160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015620003575762001bf6575b507f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa602060c0840151604051908152a173ffffffffffffffffffffffffffffffffffffffff610100830151166101a0830151610160840151823b15620001d457620010c09260405180809581947f1f6a1eb900000000000000000000000000000000000000000000000000000000835260c05196600484016200e75e565b039160c051905af18015620003575762001bd9575b506004602073ffffffffffffffffffffffffffffffffffffffff61010085015116604051928380927faaf10f420000000000000000000000000000000000000000000000000000000082525afa8015620003575760c0519062001b97575b60049150602073ffffffffffffffffffffffffffffffffffffffff815416604051938480927f9f69ef540000000000000000000000000000000000000000000000000000000082525afa908115620003575760c0519162001b51575b6200119b92506200fbc7565b6004602073ffffffffffffffffffffffffffffffffffffffff61010085015116604051928380927f51605d800000000000000000000000000000000000000000000000000000000082525afa8015620003575760c0519062001b16575b6200120a915060c0840151906200fd01565b73ffffffffffffffffffffffffffffffffffffffff825116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c0519162001af6575b5060ff60408301511690604051917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575762001310600160209260076200132b95620013379760c0519162001ad6575060405195869360605162000a85818488016200de64565b61ffff84511666ffffffffffffff602086015116906200f053565b8060808501526200f33c565b60e083015260c05161014083015152620013506200e64f565b604061014084015101526200141373ffffffffffffffffffffffffffffffffffffffff6101008401511660e0840151604051907f29561426000000000000000000000000000000000000000000000000000000006020830152602482015260248152620013bf6044826200dcfe565b60405191620013ce836200dc89565b825260c05160208301526040820152620186a0606082015260c051608082015260c05160a0820152600160c0820152604061014085015101519062000c04826200e6e5565b5061010081015115156020610140840151015260016080610140840151015260e0810151906200146561014084015173ffffffffffffffffffffffffffffffffffffffff61010086015116906200f4ce565b604051927fe341eaa400000000000000000000000000000000000000000000000000000000845260048401526024830152606082604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620003575760c051928391829162001a9a575b5060608501519273ffffffffffffffffffffffffffffffffffffffff60208701511694604051957f56ca623e000000000000000000000000000000000000000000000000000000008752600487015260c05186602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa958615620003575760c0519662001a78575b50604051937fb11a19e8000000000000000000000000000000000000000000000000000000008552600485015260c05184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa938415620003575760c0519462001a56575b50604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c0519162001a36575b5060ff604051937f6900a3ae00000000000000000000000000000000000000000000000000000000855216600484015260c05183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156200035757620017849660016200177a9381936101009760c0519262001a08575b5060069060206040519a86620016948d9851809285808c0191016200de89565b87017f3a686173683a000000000000000000000000000000000000000000000000000083820152620016d082518093856026850191016200de89565b01017f3a00000000000000000000000000000000000000000000000000000000000000838201526200170d8251809360206007850191016200de89565b01017f3a00000000000000000000000000000000000000000000000000000000000000838201526200174a8251809360206002850191016200de89565b010103017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018552846200dcfe565b015115916200f5ec565b6101808201526200179a6101408201516200f961565b6101c082015273ffffffffffffffffffffffffffffffffffffffff61010082015116737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4576040517f81bad6f300000000000000000000000000000000000000000000000000000000815260c0516001600483018190526024830181905260006044840152606483015273ffffffffffffffffffffffffffffffffffffffff909216608482015290818060a48101038160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156200035757620019eb575b507f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa602060e0830151604051908152a173ffffffffffffffffffffffffffffffffffffffff610100820151166101c0820151610180830151823b15620001d457620019089260405180809581947f1f6a1eb900000000000000000000000000000000000000000000000000000000835260c05196600484016200e75e565b039160c051905af180156200035757620019ce575b5080602073ffffffffffffffffffffffffffffffffffffffff610100600494015116604051938480927f51605d800000000000000000000000000000000000000000000000000000000082525afa918215620003575760c051926200198e575b620003518360e0840151906200fd01565b91506020823d602011620019c5575b81620019ac602093836200dcfe565b81010312620019c05790519060e06200197d565b600080fd5b3d91506200199d565b60c051620019dc916200dcfe565b60c051620001d457816200191d565b60c051620019f9916200dcfe565b60c051620001d457816200186a565b600691925062001a2e903d8060c051833e62001a2581836200dcfe565b8101906200e5e3565b919062001674565b62001a4f91503d8060c051833e62001a2581836200dcfe565b8762001602565b62001a709194503d8060c051833e62001a2581836200dcfe565b9287620015a5565b62001a929196503d8060c051833e62001a2581836200dcfe565b948762001548565b91505062001ac591925060603d60601162001ace575b62001abc81836200dcfe565b8101906200e737565b929185620014c9565b503d62001ab0565b62001aef91503d8060c051833e62001a2581836200dcfe565b8a62000a6d565b62001b0f91503d8060c051833e62001a2581836200dcfe565b836200127e565b506020813d60201162001b48575b8162001b33602093836200dcfe565b81010312620019c0576200120a9051620011f8565b3d915062001b24565b90506020823d60201162001b8e575b8162001b6f602093836200dcfe565b81010312620001d45762001b876200119b926200e5c1565b906200118f565b3d915062001b60565b506020813d60201162001bd0575b8162001bb4602093836200dcfe565b81010312620001d45762001bca6004916200e5c1565b62001133565b3d915062001ba5565b60c05162001be7916200dcfe565b60c051620001d45782620010d5565b60c05162001c04916200dcfe565b60c051620001d4578262001022565b600691925062001c30903d8060c051833e62001a2581836200dcfe565b919062000e58565b62001c5191503d8060c051833e62001a2581836200dcfe565b8762000dea565b62001c729193503d8060c051833e62001a2581836200dcfe565b918762000d8d565b62001c949192503d8060c051833e62001a2581836200dcfe565b908762000d30565b91505062001cbc915060603d60601162001ace5762001abc81836200dcfe565b908562000cb4565b62001cdd91503d8060c051833e62001a2581836200dcfe565b83620009f2565b506020813d60201162001d30575b8162001d01602093836200dcfe565b81010312620001d45762001d2a73ffffffffffffffffffffffffffffffffffffffff916200e5c1565b6200095d565b3d915062001cf2565b62001d5291503d8060c051833e62001a2581836200dcfe565b8c620007cc565b62001d7291503d8060c051833e62001a2581836200dcfe565b836200074c565b506020813d60201162001dc5575b8162001d96602093836200dcfe565b81010312620001d45762001dbf73ffffffffffffffffffffffffffffffffffffffff916200e5c1565b620006bb565b3d915062001d87565b506020813d60201162001e1a575b8162001deb602093836200dcfe565b81010312620001d45762001e1473ffffffffffffffffffffffffffffffffffffffff916200e5c1565b62000642565b3d915062001ddc565b7f4e487b710000000000000000000000000000000000000000000000000000000060c051526041600452602460c051fd5b34620001d45760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d45760405162001e93816200dc89565b600435815260243561ffff81168103620001d457602082015260443566ffffffffffffff81168103620001d457604082015260643560ff81168103620001d45760608201526084356080820181905260a43560a083015260c435908115158203620001d45762001f089160c08401526200ef77565b608082015262001f1c60a08201516200ef77565b8060a083015260808201511415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d457604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620003575762002dae575b5060ff62001fcd8161ffff62001fb8816020870151166200f02e565b166020850181905260608501518216620102b4565b6040608081905280519062001fe390826200dcfe565b600c81527f426f756e6420726573756c74000000000000000000000000000000000000000060208201526080515162002088816200205560208201947fb60e72cc000000000000000000000000000000000000000000000000000000008652608051602484015260648301906200deae565b856044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826200dcfe565b60c0519160c0519151906a636f6e736f6c652e6c6f675afa5016606082015260805151610180810181811067ffffffffffffffff82111762001e23576080515260c051815260c0516020820152606060805182015260608082015260c051608082015260c05160a0820152620020fd6200e576565b60c082015260c05160e082015260c05161010082015260c05161012082015260c0516101408201526060610160820152608082015160805151907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562002b275760c0519062002d59575b73ffffffffffffffffffffffffffffffffffffffff915016815260a082015160805151907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562002b275760c0519062002d04575b73ffffffffffffffffffffffffffffffffffffffff915016602082015273ffffffffffffffffffffffffffffffffffffffff81511660805151907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562002b275760c0519162002ce4575b5060ff60608401511660805151907f6900a3ae000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562002b2757620023bc92620023af9260c0519262002cba575b50600162002391916027608051519485927f7369676e65723a0000000000000000000000000000000000000000000000000060208501526200235481518092602086880191016200de89565b83017f3a00000000000000000000000000000000000000000000000000000000000000838201526200085c8251809360206028850191016200de89565b61ffff60208601511666ffffffffffffff604087015116906200f053565b806080518401526200f33c565b608082015273ffffffffffffffffffffffffffffffffffffffff60208201511660805151907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562002b275760c0519162002c9a575b5060ff6060840151169060805151917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562002b27576200250f9260c0519262002c70575b506001620024f1916027608051519485927f7369676e65723a0000000000000000000000000000000000000000000000000060208501526200235481518092602086880191016200de89565b61ffff60208501511666ffffffffffffff604086015116906200f053565b6060820152601f54602080546080808501519051517f32c02a1400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152602481019190915260c051909384926044928492909160089190911c165af1801562002b275760c0519062002c1b575b73ffffffffffffffffffffffffffffffffffffffff91501660a0820152600360c082015152815160e060c0830151015260c08201511515602060c08301510152620025ff60c082015173ffffffffffffffffffffffffffffffffffffffff60a084015116906200f4ce565b8060e083015260a08301519060805151917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562002b275760c05160ff9290918291829162002bf4575b506101408501526101208401521661010082015273ffffffffffffffffffffffffffffffffffffffff6020820151169060805151917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562002b275760c0519262002bd2575b506101208101519260805151937fb11a19e8000000000000000000000000000000000000000000000000000000008552600485015260c05184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa93841562002b275760c0519462002bb0575b5061014082015160805151907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562002b275760c0519162002b90575b5060ff610100840151169360805151947f6900a3ae000000000000000000000000000000000000000000000000000000008652600486015260c05185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa94851562002b27576200298b9662002934600160a0948160209a73ffffffffffffffffffffffffffffffffffffffff98620029479760c0519262002b6b575b506006908d6080515198866200287e8b9851809285808c0191016200de89565b87017f3a686173683a000000000000000000000000000000000000000000000000000083820152620028ba82518093856026850191016200de89565b01017f3a0000000000000000000000000000000000000000000000000000000000000083820152620028f8825160209381946007850191016200de89565b01017f3a00000000000000000000000000000000000000000000000000000000000000838201526200085c825180938f6002850191016200de89565b60608601519060c086015115916200f5ec565b93846101608201520151169051608051518095819482937f1626ba7e000000000000000000000000000000000000000000000000000000008452600484016200e7d1565b03915afa90811562002b275760c0519162002b35575b5060805151620029b360a0826200dcfe565b606481527f697356616c69645369676e61747572652073686f756c642072657475726e203060208201527f78303030303030303020666f7220696e76616c6964207369676e6174757265206080518201527f2877726f6e67207369676e6572202d3e20696d61676548617368206d69736d6160608201527f74636829000000000000000000000000000000000000000000000000000000006080820152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4577fffffffff0000000000000000000000000000000000000000000000000000000060805151927fc1fa1ed000000000000000000000000000000000000000000000000000000000845216600483015260c051602483015260606044830152818062002adf60c0519360648301906200deae565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562002b275762002b0a5760c05180f35b60c05162002b18916200dcfe565b60c051620001d4578062000351565b608051513d60c051823e3d90fd5b62002b5c915060203d60201162002b63575b62002b5381836200dcfe565b8101906200e797565b81620029a1565b503d62002b47565b600691925062002b88903d8060c051833e62001a2581836200dcfe565b91906200285e565b62002ba991503d8060c051833e62001a2581836200dcfe565b85620027c9565b62002bca9194503d8060c051833e62001a2581836200dcfe565b928462002765565b62002bec9192503d8060c051833e62001a2581836200dcfe565b908362002700565b91505062002c14915060603d60601162001ace5762001abc81836200dcfe565b8662002673565b506020813d60201162002c67575b8162002c38602093836200dcfe565b81010312620001d45762002c6173ffffffffffffffffffffffffffffffffffffffff916200e5c1565b62002594565b3d915062002c29565b620024f191925062002c916001913d8060c051833e62001a2581836200dcfe565b929150620024a5565b62002cb391503d8060c051833e62001a2581836200dcfe565b8362002439565b6200239191925062002cdb6001913d8060c051833e62001a2581836200dcfe565b92915062002308565b62002cfd91503d8060c051833e62001a2581836200dcfe565b8362002299565b506020813d60201162002d50575b8162002d21602093836200dcfe565b81010312620001d45762002d4a73ffffffffffffffffffffffffffffffffffffffff916200e5c1565b62002207565b3d915062002d12565b506020813d60201162002da5575b8162002d76602093836200dcfe565b81010312620001d45762002d9f73ffffffffffffffffffffffffffffffffffffffff916200e5c1565b6200218d565b3d915062002d67565b60c05162002dbc916200dcfe565b60c051620001d4578162001f9c565b34620001d45760c0517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d457602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051908152f35b34620001d45760c0517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d457602062002e616200ee88565b6040519015158152f35b34620001d45760c0517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d45760195462002eab816200df6e565b9062002ebb60405192836200dcfe565b80825260208201601960c05152602060c0512060c051915b83831062002ef357604051602080825281906200046b908201886200def3565b60016020819262002f04856200e9d0565b81520192019201919062002ed3565b34620001d45760c0517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d457601c5462002f53816200df6e565b9062002f6360405192836200dcfe565b80825260208201601c60c051527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a21160c051915b83831062002fae57604051806200046b87826200e3ee565b6002602060019260405162002fc3816200dcc3565b73ffffffffffffffffffffffffffffffffffffffff865416815262002fea8587016200ebcd565b8382015281520192019201919062002f96565b34620001d45760ff620030e46200303a60018361ffff620031818162003023366200e377565b9b949a939c9260c09a929a999199515016620102b4565b96600160ff6040998a62002055620030c082516200305984826200dcfe565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152835192839160208301957fb60e72cc000000000000000000000000000000000000000000000000000000008752602484015260648301906200deae565b60c0519160c0519151906a636f6e736f6c652e6c6f675afa501695869216620102b4565b8651620030f288826200dcfe565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152875162003160816200205560208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528c602484015260648301906200deae565b60c0519160c0519151906a636f6e736f6c652e6c6f675afa5016936200ef77565b908451917fffa186490000000000000000000000000000000000000000000000000000000083526004830152602082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620036555760c0519262003683575b5073ffffffffffffffffffffffffffffffffffffffff8551927f56ca623e00000000000000000000000000000000000000000000000000000000845216600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620036555760c0519262003661575b508451907f6900a3ae000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156200365557620033fa96976200335960016200336195600760209666ffffffffffffff9660c0519162003635575b508b51978893606051620032e0818488016200de64565b85017f7369676e65723a00000000000000000000000000000000000000000000000000838201526200331c82518093856027850191016200de89565b01017f3a00000000000000000000000000000000000000000000000000000000000000838201526200174a8251809360206008850191016200de89565b16846200f053565b9460206200336f876200f33c565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c1673ffffffffffffffffffffffffffffffffffffffff83541687518099819482937f32c02a14000000000000000000000000000000000000000000000000000000008452600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b039160c051905af1948515620035e15760c05195620035ed575b506200345590620034246200e576565b90600382528360e08301521590602082159101526020968551906200344a89836200dcfe565b60c05182526200f5ec565b918351907ffd41fcba0000000000000000000000000000000000000000000000000000000087830152602482015260c0516044820152604481526200349c6064826200dcfe565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4578351907ff28dceb30000000000000000000000000000000000000000000000000000000082528660048301528180620034f960c0519360248301906200deae565b038160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015620035e1579086939291620035bf575b5093620035789473ffffffffffffffffffffffffffffffffffffffff85518097819582947f1626ba7e000000000000000000000000000000000000000000000000000000008452600484016200e7d1565b0392165afa908115620035b45750620035915760c05180f35b81620035ab92903d1062002b635762002b5381836200dcfe565b50808062000351565b513d60c051823e3d90fd5b620035d091935060c051906200dcfe565b60c051620001d45784918662003527565b84513d60c051823e3d90fd5b9094506020813d6020116200362c575b816200360c602093836200dcfe565b81010312620001d4576200362462003455916200e5c1565b949062003414565b3d9150620035fd565b6200364e91503d8060c051833e62001a2581836200dcfe565b8e620032c9565b85513d60c051823e3d90fd5b6200367b9192503d8060c051833e62001a2581836200dcfe565b90876200324e565b9091506020813d602011620036be575b81620036a2602093836200dcfe565b81010312620001d457620036b6906200e5c1565b9087620031dc565b3d915062003693565b34620001d4576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d45762003704366200e497565b61ffff6200371e8183511660ff604085015116906200f007565b16815261ffff6200373e8160808401511660ff60c085015116906200f007565b1660808201526200375360608201516200ef77565b60608201526200376760e08201516200ef77565b60e0820152604051906101a0820182811067ffffffffffffffff82111762001e235760405260c051825260c05160208301526060604083015260608083015260c051608083015260c05160a083015260c05160c0830152620037c86200e576565b60e0830152620037d76200e576565b61010083015260606101208301526060610140830152606061016083015260606101808301526060810151604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620003575760c0519062004ae2575b73ffffffffffffffffffffffffffffffffffffffff915016825260e0810151604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620003575760c0519062004a8d575b73ffffffffffffffffffffffffffffffffffffffff915016602083015273ffffffffffffffffffffffffffffffffffffffff825116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c0519162004a6d575b5060ff60408301511690604051917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156200035757620008a660206200088c60018295600762003a8f98620039fd9760c0519162001d395750604051958693606051620007e4818488016200de64565b80608086015273ffffffffffffffffffffffffffffffffffffffff601f5460081c1673ffffffffffffffffffffffffffffffffffffffff8354166040518095819482937f32c02a14000000000000000000000000000000000000000000000000000000008452600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b039160c051905af18015620003575760c0519062004a18575b73ffffffffffffffffffffffffffffffffffffffff91501660c083015273ffffffffffffffffffffffffffffffffffffffff602083015116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c05191620049f8575b5060ff60c08301511690604051917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575762000afe6001602092600762000b1c9562003bce9760c0519162001ad6575060405195869360605162000a85818488016200de64565b60a083015260c05160e08301515262003be66200e64f565b604060e0840151015262003ca673ffffffffffffffffffffffffffffffffffffffff60c08401511660a0840151604051907f2956142600000000000000000000000000000000000000000000000000000000602083015260248201526024815262003c536044826200dcfe565b6040519162003c62836200dc89565b825260c05160208301526040820152620186a0606082015260c051608082015260c05160a0820152600160c0820152604060e085015101519062000c04826200e6e5565b506101008101511515602060e08401510152606081015162003ce860e084015173ffffffffffffffffffffffffffffffffffffffff60c086015116906200f4ce565b604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620003575760c051918291829190620049d0575b5060408501519173ffffffffffffffffffffffffffffffffffffffff86511690604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620003575760c05192620049ae575b50604051927fb11a19e8000000000000000000000000000000000000000000000000000000008452600484015260c05183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa928315620003575760c051936200498c575b50604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c051916200496c575b5060ff604051957f6900a3ae00000000000000000000000000000000000000000000000000000000875216600486015260c05185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156200035757600162000f2e93819362003f0f9860c0519262001c1357506006906020604051988662000e788b9851809285808c0191016200de89565b61012083015262003f2460e08301516200f961565b61016083015273ffffffffffffffffffffffffffffffffffffffff60c083015116737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4576040517f81bad6f300000000000000000000000000000000000000000000000000000000815260c0516001600483018190526024830181905260006044840152606483015273ffffffffffffffffffffffffffffffffffffffff909216608482015290818060a48101038160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562000357576200494f575b507f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa602060a0840151604051908152a173ffffffffffffffffffffffffffffffffffffffff60c083015116610160830151610120840151823b15620001d457620040909260405180809581947f1f6a1eb900000000000000000000000000000000000000000000000000000000835260c05196600484016200e75e565b039160c051905af18015620003575762004932575b506004602073ffffffffffffffffffffffffffffffffffffffff60c085015116604051928380927faaf10f420000000000000000000000000000000000000000000000000000000082525afa8015620003575760c05190620048f0575b60049150602073ffffffffffffffffffffffffffffffffffffffff815416604051938480927f9f69ef540000000000000000000000000000000000000000000000000000000082525afa908115620003575760c05191620048aa575b6200416a92506200fbc7565b6004602073ffffffffffffffffffffffffffffffffffffffff60c085015116604051928380927f51605d800000000000000000000000000000000000000000000000000000000082525afa8015620003575760c051906200486f575b620041d8915060a0840151906200fd01565b60c05161010083015152620041ec6200e64f565b60406101008401510152620042ab73ffffffffffffffffffffffffffffffffffffffff60c0840151166040517f2956142600000000000000000000000000000000000000000000000000000000602082015260c051602482015260248152620042576044826200dcfe565b6040519162004266836200dc89565b825260c05160208301526040820152620186a0606082015260c051608082015260c05160a0820152600160c0820152604061010085015101519062000c04826200e6e5565b5061010081015115156020610100840151015260016080610100840151015260e081015190620042fc61010084015173ffffffffffffffffffffffffffffffffffffffff60c086015116906200f4ce565b604051927fe341eaa400000000000000000000000000000000000000000000000000000000845260048401526024830152606082604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620003575760c051928391829162004845575b5060608501519273ffffffffffffffffffffffffffffffffffffffff60208701511694604051957f56ca623e000000000000000000000000000000000000000000000000000000008752600487015260c05186602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa958615620003575760c0519662004823575b50604051937fb11a19e8000000000000000000000000000000000000000000000000000000008552600485015260c05184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa938415620003575760c0519462004801575b50604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c05191620047e1575b5060ff604051937f6900a3ae00000000000000000000000000000000000000000000000000000000855216600484015260c05183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562000357576200452a9660016200177a9381936101009760c0519262001a08575060069060206040519a86620016948d9851809285808c0191016200de89565b610140820152620045406101008201516200f961565b6101808201526040517f4294d12700000000000000000000000000000000000000000000000000000000602082015260048152620045806024826200dcfe565b620045f1610100830151620045c46040519384927f7f6b0bb1000000000000000000000000000000000000000000000000000000006020850152602484016200e980565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826200dcfe565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d457604051907ff28dceb30000000000000000000000000000000000000000000000000000000082526020600483015281806200465060c0519360248301906200deae565b038160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156200035757620047c4575b5073ffffffffffffffffffffffffffffffffffffffff60c082015116610180820151610140830151823b15620001d457620046e79260405180809581947f1f6a1eb900000000000000000000000000000000000000000000000000000000835260c05196600484016200e75e565b039160c051905af180156200035757620047a7575b5080602073ffffffffffffffffffffffffffffffffffffffff60c0600494015116604051938480927f51605d800000000000000000000000000000000000000000000000000000000082525afa918215620003575760c051926200476c575b620003518360a0840151906200fd01565b91506020823d6020116200479e575b816200478a602093836200dcfe565b81010312620019c05790519060a06200475b565b3d91506200477b565b60c051620047b5916200dcfe565b60c051620001d45781620046fc565b60c051620047d2916200dcfe565b60c051620001d4578162004679565b620047fa91503d8060c051833e62001a2581836200dcfe565b8762004499565b6200481b9194503d8060c051833e62001a2581836200dcfe565b92876200443c565b6200483d9196503d8060c051833e62001a2581836200dcfe565b9487620043df565b9150506200486691925060603d60601162001ace5762001abc81836200dcfe565b92918562004360565b506020813d602011620048a1575b816200488c602093836200dcfe565b81010312620019c057620041d89051620041c6565b3d91506200487d565b90506020823d602011620048e7575b81620048c8602093836200dcfe565b81010312620001d457620048e06200416a926200e5c1565b906200415e565b3d9150620048b9565b506020813d60201162004929575b816200490d602093836200dcfe565b81010312620001d457620049236004916200e5c1565b62004102565b3d9150620048fe565b60c05162004940916200dcfe565b60c051620001d45782620040a5565b60c0516200495d916200dcfe565b60c051620001d4578262003ff3565b6200498591503d8060c051833e62001a2581836200dcfe565b8762003e82565b620049a69193503d8060c051833e62001a2581836200dcfe565b918762003e25565b620049c89192503d8060c051833e62001a2581836200dcfe565b908762003dc8565b915050620049f0915060603d60601162001ace5762001abc81836200dcfe565b908562003d4c565b62004a1191503d8060c051833e62001a2581836200dcfe565b8362003b3c565b506020813d60201162004a64575b8162004a35602093836200dcfe565b81010312620001d45762004a5e73ffffffffffffffffffffffffffffffffffffffff916200e5c1565b62003aa8565b3d915062004a26565b62004a8691503d8060c051833e62001a2581836200dcfe565b8362003966565b506020813d60201162004ad9575b8162004aaa602093836200dcfe565b81010312620001d45762004ad373ffffffffffffffffffffffffffffffffffffffff916200e5c1565b620038d5565b3d915062004a9b565b506020813d60201162004b2e575b8162004aff602093836200dcfe565b81010312620001d45762004b2873ffffffffffffffffffffffffffffffffffffffff916200e5c1565b6200385c565b3d915062004af0565b34620001d45760c0517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d457601d5462004b77816200df6e565b9062004b8760405192836200dcfe565b80825260208201601d60c051527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f60c051915b83831062004bd257604051806200046b87826200e3ee565b6002602060019260405162004be7816200dcc3565b73ffffffffffffffffffffffffffffffffffffffff865416815262004c0e8587016200ebcd565b8382015281520192019201919062004bba565b34620001d45760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d45760043567ffffffffffffffff8111620001d45762004c759036906004016200e275565b62004c8181516200ff0a565b602081019061ffff8251169161ffff62004ca5606084019460ff865116906200f007565b168152608082019262004cb984516200ef77565b845262004cc56200eae4565b918451604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620003575760c0519062005570575b73ffffffffffffffffffffffffffffffffffffffff91501691828452604051927f56ca623e000000000000000000000000000000000000000000000000000000008452600484015260c05183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa928315620003575760c051936200554b575b5060ff90511691604051927f6900a3ae000000000000000000000000000000000000000000000000000000008452600484015260c05183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620003575762004e29600161ffff93600760209662004e409860c051916200552b575b50604051978893606051620032e0818488016200de64565b511666ffffffffffffff604086015116906200f053565b9162004eea602062004e58818501958087526200f33c565b80604086015273ffffffffffffffffffffffffffffffffffffffff601f5460081c1673ffffffffffffffffffffffffffffffffffffffff8354166040518095819482937f32c02a14000000000000000000000000000000000000000000000000000000008452600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b039160c051905af18015620003575760c05190620054d6575b73ffffffffffffffffffffffffffffffffffffffff9150166060830152610100815101515160018101809111620054a55762004f3f906200eb50565b9160c0515b61010083510151805182101562004f8f579073ffffffffffffffffffffffffffffffffffffffff62004f79826001946200e722565b511662004f8782876200e722565b520162004f44565b505090928473ffffffffffffffffffffffffffffffffffffffff60a08601511662004fc26101008751015151866200e722565b5261010085510193845194525162004ff7855173ffffffffffffffffffffffffffffffffffffffff606086015116906200f4ce565b604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c0519283928392906200547b575b50519173ffffffffffffffffffffffffffffffffffffffff85511690604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620003575760c0519262005459575b50604051927fb11a19e8000000000000000000000000000000000000000000000000000000008452600484015260c05183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa928315620003575760c0519362005437575b50604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c0519162005417575b5060ff604051957f6900a3ae00000000000000000000000000000000000000000000000000000000875216600486015260c05185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620003575760016200521b938193620052299860c0519262001c1357506006906020604051988662000e788b9851809285808c0191016200de89565b60208651015115916200f5ec565b91608082019283526101008451015273ffffffffffffffffffffffffffffffffffffffff60a084015116737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d457604051907fca669fa7000000000000000000000000000000000000000000000000000000008252600482015260c0518160248160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156200035757620053f6575b5090620053289273ffffffffffffffffffffffffffffffffffffffff606060209401511690519151916040518095819482937f13792a4a000000000000000000000000000000000000000000000000000000008452600484016200eba5565b03915afa908115620003575760c05191620053be575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d457604051907f7c84c69b00000000000000000000000000000000000000000000000000000000825260048201526001602482015260c05181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620003575762002b0a5760c05180f35b90506020813d602011620053ed575b81620053dc602093836200dcfe565b81010312620019c05751816200533e565b3d9150620053cd565b60c05191929162005407916200dcfe565b60c051620001d4579083620052c9565b6200543091503d8060c051833e62001a2581836200dcfe565b886200518e565b620054519193503d8060c051833e62001a2581836200dcfe565b918862005131565b620054739192503d8060c051833e62001a2581836200dcfe565b9088620050d4565b915092506200549c915060603d60601162001ace5762001abc81836200dcfe565b9192876200505c565b7f4e487b710000000000000000000000000000000000000000000000000000000060c051526011600452602460c051fd5b506020813d60201162005522575b81620054f3602093836200dcfe565b81010312620001d4576200551c73ffffffffffffffffffffffffffffffffffffffff916200e5c1565b62004f03565b3d9150620054e4565b6200554491503d8060c051833e62001a2581836200dcfe565b8c62004e11565b60ff91935062005568903d8060c051833e62001a2581836200dcfe565b929062004d9a565b506020813d602011620055bc575b816200558d602093836200dcfe565b81010312620001d457620055b673ffffffffffffffffffffffffffffffffffffffff916200e5c1565b62004d22565b3d91506200557e565b34620001d45760c0517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d457601a5462005605816200df6e565b906200561560405192836200dcfe565b80825260208201601a60c05152602060c0512060c051915b8383106200564d57604051602080825281906200046b908201886200def3565b6001602081926200565e856200e9d0565b8152019201920191906200562d565b34620001d45760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d457600435620056ab6200ddcc565b620056b56200e576565b90600382528260e0830152620056cd6044356200f03d565b60018101808211620054a557620056e7906064356200f015565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d457604051907fe5d6bf02000000000000000000000000000000000000000000000000000000008252600482015260c0518160248160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015620003575762005d9d575b50601f54602080546040517f32c02a1400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152602480359082015260c051909384926044928492909160089190911c165af18015620003575760c0519062005d48575b73ffffffffffffffffffffffffffffffffffffffff91501692737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4576040517fca669fa700000000000000000000000000000000000000000000000000000000815284600482015260c0518160248160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015620003575762005d2b575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4576040517f81bad6f300000000000000000000000000000000000000000000000000000000815260c0516001600483018190526024830181905260006044840152606483015273ffffffffffffffffffffffffffffffffffffffff86166084830152818060a48101038160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015620003575762005d0e575b506200592284826200f4ce565b60408051918252600060208301526bffffffffffffffffffffffff8416908201819052907febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b190606090a16200597885836200f4ce565b853b15620001d4576040517ff727ef1c00000000000000000000000000000000000000000000000000000000815260c0516004820192909252600060248201526bffffffffffffffffffffffff9092166044830152818060648101038160c051895af19081156200035757859162005cee575b50620059f7916200f4ce565b90604051917f92dcb3fc0000000000000000000000000000000000000000000000000000000083526004830152604082602481875afa8015620003575762005a599260c0519060c0519262005cb2575b5062005a53906200fb16565b6200fe90565b6040517f1626ba7e0000000000000000000000000000000000000000000000000000000081526020818062005ac98760048301608091815260406020820152600160408201527f800000000000000000000000000000000000000000000000000000000000000060608201520190565b0381865afa908115620003575762005b0f917fffffffff000000000000000000000000000000000000000000000000000000009160c0519162005c8e575b50166200fc67565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d45773ffffffffffffffffffffffffffffffffffffffff604051917fca669fa700000000000000000000000000000000000000000000000000000000835216600482015260c0518160248160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015620003575762005c71575b50604080517f1626ba7e00000000000000000000000000000000000000000000000000000000815260048101939093526024830152600160448301527f8000000000000000000000000000000000000000000000000000000000000000606483015260209082908180608481015b03915afa908115620003575762000351917fffffffff000000000000000000000000000000000000000000000000000000009160c0519162005c4d5750166200fc67565b62005c6a915060203d60201162002b635762002b5381836200dcfe565b8362005b07565b60c05162005c7f916200dcfe565b60c051620001d4578262005b9b565b62005cab915060203d60201162002b635762002b5381836200dcfe565b8662005b07565b62005a53925062005cdf915060403d60401162005ce6575b62005cd681836200dcfe565b8101906200e9b0565b9162005a47565b503d62005cca565b62005cfe915060c051906200dcfe565b60c051620001d4578386620059eb565b60c05162005d1c916200dcfe565b60c051620001d4578562005915565b60c05162005d39916200dcfe565b60c051620001d4578562005868565b506020813d60201162005d94575b8162005d65602093836200dcfe565b81010312620001d45762005d8e73ffffffffffffffffffffffffffffffffffffffff916200e5c1565b620057d9565b3d915062005d56565b60c05162005dab916200dcfe565b60c051620001d457846200575e565b34620001d45760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d45760043562005df86200ddcc565b60a43573ffffffffffffffffffffffffffffffffffffffff811690819003620001d45773ffffffffffffffffffffffffffffffffffffffff8216801515806200673c575b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d457604051907f4c63e5620000000000000000000000000000000000000000000000000000000082521515600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562000357576200671f575b5062005ebc6200e576565b600381528460e082015262005ed36044356200f03d565b9360018501808611620054a55762005eee906064356200f015565b94737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d457604051907fe5d6bf02000000000000000000000000000000000000000000000000000000008252600482015260c0518160248160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015620003575762006702575b50601f54602080546040517f32c02a1400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152602480359082015260c051909384926044928492909160089190911c165af18015620003575760c05190620066ad575b73ffffffffffffffffffffffffffffffffffffffff91501694737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4576040517fca669fa700000000000000000000000000000000000000000000000000000000815286600482015260c0518160248160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015620003575762006690575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4576040517f81bad6f300000000000000000000000000000000000000000000000000000000815260c0516001600483018190526024830181905260006044840152606483015273ffffffffffffffffffffffffffffffffffffffff88166084830152818060a48101038160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015620003575762006673575b506200612986846200f4ce565b6040805191825273ffffffffffffffffffffffffffffffffffffffff841660208301526bffffffffffffffffffffffff8316908201819052907febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b190606090a16200619487856200f4ce565b873b15620001d4576040517ff727ef1c00000000000000000000000000000000000000000000000000000000815260c051600482019290925273ffffffffffffffffffffffffffffffffffffffff851660248201526bffffffffffffffffffffffff9092166044830152818060648101038160c0518b5af18015620003575762006656575b506200622686846200f4ce565b91604051927f92dcb3fc00000000000000000000000000000000000000000000000000000000845260048401526040836024818a5afa9081156200035757620062849360c0519060c051936200662a575b509062005a53916200fbc7565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4576040517fca669fa700000000000000000000000000000000000000000000000000000000815282600482015260c0518160248160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562000357576200660d575b506040517f1626ba7e000000000000000000000000000000000000000000000000000000008152602081806200636b8960048301608091815260406020820152600160408201527f800000000000000000000000000000000000000000000000000000000000000060608201520190565b0381885afa9081156200035757620063b0917fffffffff000000000000000000000000000000000000000000000000000000009160c05191620065e95750166200fc67565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4576040517fca669fa700000000000000000000000000000000000000000000000000000000815283600482015260c0518160248160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811562000357578591620065c9575b5062006435916200f4ce565b91604051927f8945c31300000000000000000000000000000000000000000000000000000000602085015260248401526044830152606482015260648152620064806084826200dcfe565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d457604051907ff28dceb3000000000000000000000000000000000000000000000000000000008252602060048301528180620064df60c0519360248301906200deae565b038160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156200035757620065ac575b50604080517f1626ba7e00000000000000000000000000000000000000000000000000000000815260048101939093526024830152600160448301527f80000000000000000000000000000000000000000000000000000000000000006064830152602090829060849082905afa80156200035757620065885760c05180f35b620065a49060203d60201162002b635762002b5381836200dcfe565b508062000351565b60c051620065ba916200dcfe565b60c051620001d4578262006508565b620065d9915060c051906200dcfe565b60c051620001d457838662006429565b62006606915060203d60201162002b635762002b5381836200dcfe565b8862005b07565b60c0516200661b916200dcfe565b60c051620001d45785620062fa565b62005a539293506200664e915060403d60401162005ce65762005cd681836200dcfe565b929162006277565b60c05162006664916200dcfe565b60c051620001d4578762006219565b60c05162006681916200dcfe565b60c051620001d457876200611c565b60c0516200669e916200dcfe565b60c051620001d457876200606f565b506020813d602011620066f9575b81620066ca602093836200dcfe565b81010312620001d457620066f373ffffffffffffffffffffffffffffffffffffffff916200e5c1565b62005fe0565b3d9150620066bb565b60c05162006710916200dcfe565b60c051620001d4578662005f65565b60c0516200672d916200dcfe565b60c051620001d4578462005eb1565b508181141562005e3c565b34620001d4576200677b61ffff60ff620067838262006766366200e377565b9694919893999297909716948591166200f007565b16946200ef77565b94604051947fffa18649000000000000000000000000000000000000000000000000000000008652866004870152602086602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa958615620003575760c0519662007b50575b5073ffffffffffffffffffffffffffffffffffffffff604051967f56ca623e000000000000000000000000000000000000000000000000000000008852169586600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c0519162007b30575b50604051937f6900a3ae000000000000000000000000000000000000000000000000000000008552600485015260c05184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562000357576200698c600166ffffffffffffff936007602097620069949960c0519162007b10575b50604051988993606051620068e3818488016200de64565b85017f7369676e65723a00000000000000000000000000000000000000000000000000838201526200691f82518093856027850191016200de89565b01017f3a00000000000000000000000000000000000000000000000000000000000000838201526200695c8251809360206008850191016200de89565b010103017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018652856200dcfe565b16906200f053565b6200699f816200f33c565b601f54602080546040517f32c02a1400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810185905260c051949694909384926044928492909160089190911c165af18015620003575760c0519062007abb575b73ffffffffffffffffffffffffffffffffffffffff9150169273ffffffffffffffffffffffffffffffffffffffff601f5460081c169073ffffffffffffffffffffffffffffffffffffffff60205416604051917fb11a19e8000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620003575760c0519262007a99575b50604051927f56ca623e000000000000000000000000000000000000000000000000000000008452600484015260c05183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa928315620003575760c0519362007a77575b50604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620003575762006ca092600d600c9260029460c0519162007a57575b50602e6040519788947f7b22696d61676548617368223a22000000000000000000000000000000000000602087015262006bd0815180926020868a0191016200de89565b85017f222c22666163746f7279223a22000000000000000000000000000000000000008382015262006c0d825180936020603b850191016200de89565b01017f222c226d6f64756c65223a2200000000000000000000000000000000000000008382015262006c4a8251809360206019850191016200de89565b01017f227d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe28101845201826200dcfe565b6040517fc1978d1f000000000000000000000000000000000000000000000000000000008152602060048201819052601460248301527f5345515f53444b5f5250435f4d494e5f504f5254000000000000000000000000604483015281606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c0519162007a1f575b50604051907fc1978d1f00000000000000000000000000000000000000000000000000000000825260206004830152601460248301527f5345515f53444b5f5250435f4d41585f504f52540000000000000000000000006044830152602082606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620003575760c05192620079e5575b5080821062007987577fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a654801562007930575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114620054a55781600162006e42920193847fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a6556200ebbf565b9160018301809311620054a55762006e669262006e5f916201027a565b906200eb13565b90604051917ff877cb1900000000000000000000000000000000000000000000000000000000835260206004840152601660248401527f5345515f53444b5f5250435f55524c5f50524546495800000000000000000000604484015260c05183606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa928315620003575760c051936200790e575b506040517ff877cb1900000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5345515f53444b5f5250435f55524c5f53554646495800000000000000000000604482015260c05181606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c05191620078ee575b50604051917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620003575762007108946200709c9360c05192620078c6575b5060206200705f9293620070318260405196856200700b899751809285808b0191016200de89565b860162007021825180938580850191016200de89565b010191828151948592016200de89565b01037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826200dcfe565b60405193849283927f0199a2200000000000000000000000000000000000000000000000000000000084526060600485015260648401906200deae565b93603c8386037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024860152601187527f616464726573735f63616c63756c6174650000000000000000000000000000006020880152016044840152604060c0519501906200deae565b038160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115620003575760c05191620078a6575b50604051907f71aad10d0000000000000000000000000000000000000000000000000000000082526020600483015281806200717a60c0519360248301906200deae565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c0519162007886575b50602a815103620078285760c051906002905b602a8210620075fb57505073ffffffffffffffffffffffffffffffffffffffff620071e59116846200fbc7565b6200720e83620071f46200e576565b92600384528660e08501521592831560208201526200f4ce565b604051967fe341eaa400000000000000000000000000000000000000000000000000000000885260048801526024870152606086604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa958615620003575760c0519260c0519160c05198620075ce575b50604051967f56ca623e000000000000000000000000000000000000000000000000000000008852600488015260c05187602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa968715620003575760c05197620075ac575b50604051917fb11a19e8000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620003575760c051926200758a575b50604051977fb11a19e8000000000000000000000000000000000000000000000000000000008952600489015260c05188602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa978815620003575760c0519862007568575b5060ff604051947f6900a3ae00000000000000000000000000000000000000000000000000000000865216600485015260c05184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156200035757600160209881620075069362005c099c6200750c9960c0519262007543575b506006908d6040519986620074208c9851809285808c0191016200de89565b87017f3a686173683a0000000000000000000000000000000000000000000000000000838201526200745c82518093856026850191016200de89565b01017f3a00000000000000000000000000000000000000000000000000000000000000838201526200749a825160209381946007850191016200de89565b01017f3a0000000000000000000000000000000000000000000000000000000000000083820152620074d6825180938f6002850191016200de89565b010103017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018452836200dcfe565b6200f5ec565b916040518095819482937f1626ba7e000000000000000000000000000000000000000000000000000000008452600484016200e7d1565b600691925062007560903d8060c051833e62001a2581836200dcfe565b919062007401565b620075829198503d8060c051833e62001a2581836200dcfe565b96886200738d565b620075a49192503d8060c051833e62001a2581836200dcfe565b908862007330565b620075c69197503d8060c051833e62001a2581836200dcfe565b9588620072d3565b91509650620075f091925060603d60601162001ace5762001abc81836200dcfe565b969192918862007276565b909173ffffffffffffffffffffffffffffffffffffff0073ffffffffffffffffffffffffffffffffffffffff82169160081b16908082046101001490151715620054a5576200764b838362010cca565b5160f81c60018401808511620054a55762007667908462010cca565b5160f81c906030811015806200781c575b15620077c357620076899062010d40565b905b603081101580620077b7575b15620076ff57620076a89062010d40565b905b60041b90610ff060f0831692168203620054a55760ff160160ff8111620054a55760ff160173ffffffffffffffffffffffffffffffffffffffff8111620054a5579160028101809111620054a55790620071b8565b604181101580620077ab575b1562007723576200771c9062010d0e565b90620076aa565b6061811015806200779f575b1562007740576200771c9062010cdc565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e76616c6964206865782063686172000000000000000000000000000000006044820152606490fd5b5060668111156200772f565b5060468111156200770b565b50603981111562007697565b60418110158062007810575b15620077e757620077e09062010d0e565b906200768b565b60618110158062007804575b156200774057620077e09062010cdc565b506066811115620077f3565b506046811115620077cf565b50603981111562007678565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f496e76616c6964206164647265737320666f726d6174000000000000000000006044820152fd5b6200789f91503d8060c051833e62001a2581836200dcfe565b87620071a5565b620078bf91503d8060c051833e62001a2581836200dcfe565b8762007136565b6200705f9250620078e66020913d8060c051833e62001a2581836200dcfe565b925062006fe3565b6200790791503d8060c051833e62001a2581836200dcfe565b8a62006f7d565b620079289193503d8060c051833e62001a2581836200dcfe565b918962006ef2565b5060405160208101903660c05183376200797e60208236810160c0518382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826200dcfe565b51902062006de7565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e76616c696420706f72742072616e676500000000000000000000000000006044820152fd5b9091506020813d60201162007a16575b8162007a04602093836200dcfe565b81010312620019c05751908962006db4565b3d9150620079f5565b90506020813d60201162007a4e575b8162007a3d602093836200dcfe565b81010312620019c057518862006d29565b3d915062007a2e565b62007a7091503d8060c051833e62001a2581836200dcfe565b8d62006b8c565b62007a919193503d8060c051833e62001a2581836200dcfe565b918962006b23565b62007ab39192503d8060c051833e62001a2581836200dcfe565b908962006ac6565b506020813d60201162007b07575b8162007ad8602093836200dcfe565b81010312620001d45762007b0173ffffffffffffffffffffffffffffffffffffffff916200e5c1565b62006a1b565b3d915062007ac9565b62007b2991503d8060c051833e62001a2581836200dcfe565b8e620068cb565b62007b4991503d8060c051833e62001a2581836200dcfe565b8862006855565b9095506020813d60201162007b8b575b8162007b6f602093836200dcfe565b81010312620001d45762007b83906200e5c1565b9487620067e0565b3d915062007b60565b34620001d45760c0517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d457601b5462007bd4816200df6e565b9062007be460405192836200dcfe565b808252602082019081601b60c051527f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc160c051915b83831062007ccb57848660405191829160208301906020845251809152604083019060408160051b850101929160c051905b82821062007c5b57505050500390f35b9193602062007cba827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc060019597998495030186528851908362007ca983516040845260408401906200deae565b92015190848184039101526200e31f565b960192019201859493919262007c4b565b6002602060019260405162007ce0816200dcc3565b62007ceb866200e9d0565b815262007cfa8587016200ebcd565b8382015281520192019201919062007c19565b34620001d45760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d45760043567ffffffffffffffff8111620001d4576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8236030112620001d45760405190610100820182811067ffffffffffffffff82111762001e235760405280600401359067ffffffffffffffff8211620001d45762007e4560e462007dd162007e5094600436918601016200e00f565b9283865262007de3602482016200dd52565b602087015262007df6604482016200dd79565b604087015262007e09606482016200dd9f565b60608701526084810135608087015262007e2660a482016200ddbe565b60a087015262007e3960c482016200ddbe565b60c0870152016200ddbe565b60e08401526200ff0a565b62007e5f60808201516200ef77565b608082015260e0810151151560208251015260a0810151151560001462008ce45761ffff62007e9b8160018160208601511660c05150620102b4565b60406200205562007eb382516200305984826200dcfe565b60c0519160c0519151906a636f6e736f6c652e6c6f675afa5016602082015260ff62007ee5816060840151166200f02e565b1660608201525b60405160a05262007eff60a0516200dc3c565b60c05160a051526060602060a051015260c051604060a051015260608060a051015260c051608060a051015260c05160a08051015260c05160c060a051015260c05160e060a051015260c05161010060a051015260c05161012060a05101526080810151604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620003575760c0519062008c8f575b73ffffffffffffffffffffffffffffffffffffffff9150168060a05152604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c0519162008c6f575b5060ff60608301511690604051917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562000357576200814f6020926200815c92620081f09560c0519262008c45575b506001620081329160276040519485927f7369676e65723a000000000000000000000000000000000000000000000000008a850152620080f6815180928c86880191016200de89565b83017f3a00000000000000000000000000000000000000000000000000000000000000838201526200085c825180938c6028850191016200de89565b61ffff848701511666ffffffffffffff604088015116906200f053565b808360a05101526200f33c565b80604060a051015273ffffffffffffffffffffffffffffffffffffffff601f5460081c1673ffffffffffffffffffffffffffffffffffffffff8354166040518095819482937f32c02a14000000000000000000000000000000000000000000000000000000008452600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b039160c051905af1908115620003575760c0519162008be9575b5073ffffffffffffffffffffffffffffffffffffffff6200823791168061010060a051015282516200f4ce565b60e060a051015260206040516200824f82826200dcfe565b60c051815260c05161012060a051015260a083015162008746575b9060c06200828b620082e993602060a05101519060e087015115916200f5ec565b80606060a051015273ffffffffffffffffffffffffffffffffffffffff61010060a05101511685516040518096819482937fad55366b000000000000000000000000000000000000000000000000000000008452600484016200eba5565b03915afa8015620003575760c0519283918291829182918291620086d8575b50620083a3906200835d61ffff60208b015116986040998a51916200832e8c846200dcfe565b601283527f5468726573686f6c64206d69736d6174636800000000000000000000000000008b8401526200fd7b565b61012060a0510151885191620083748a846200dcfe565b600f83527f576569676874206d69736d617463680000000000000000000000000000000000898401526200fd7b565b6004601f548673ffffffffffffffffffffffffffffffffffffffff8154168951938480927f257671f50000000000000000000000000000000000000000000000000000000082525afa8015620086cc5760c0519062008685575b73ffffffffffffffffffffffffffffffffffffffff92508851907fffffffffffffffffffffffffffffffffffffffff000000000000000000000000898301937fff00000000000000000000000000000000000000000000000000000000000000855260581b166021830152856035830152605582015260558152620084846075826200dcfe565b51902060a051610100015188519273ffffffffffffffffffffffffffffffffffffffff91909116911614620084ba88836200dcfe565b601582527f697356616c6964496d616765206d69736d61746368000000000000000000000087830152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4578751927f4db19e7e0000000000000000000000000000000000000000000000000000000084521515600484015260248301526060604483015281806200854d60c0519360648301906200deae565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620086795762008658575b509066ffffffffffffff60406200035197620085d162008614958360a05101518a5191620085a28c846200dcfe565b601283527f496d61676548617368206d69736d6174636800000000000000000000000000008b8401526201020f565b0151865192911690620085e587846200dcfe565b601383527f436865636b706f696e74206d69736d6174636800000000000000000000000000868401526200fd7b565b7f4f7048617368206d69736d61746368000000000000000000000000000000000060e060a0510151926200864b855195866200dcfe565b600f85528401526201020f565b60c05191929162008669916200dcfe565b60c051620001d457908662008573565b86513d60c051823e3d90fd5b508682813d8311620086c4575b6200869e81836200dcfe565b81010312620019c05773ffffffffffffffffffffffffffffffffffffffff9151620083fd565b503d62008692565b88513d60c051823e3d90fd5b9650505050505060c0823d60c0116200873d575b81620086fb60c093836200dcfe565b81010312620001d45781519181810151926040820151918215158303620001d4576060810151620083a360a06080840151930151939694919293949062008308565b3d9150620086ec565b5060e060a051015160c083015162008ba0575b608083015190604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620003575760c05160ff9290918291829162008b79575b5060c060a051015260a08051015216608060a051015260c0820151151560c0515060001462008b385760408051906200880090826200dcfe565b600a81527f3a6574685f7369676e3a0000000000000000000000000000000000000000000082820152905b73ffffffffffffffffffffffffffffffffffffffff60a051511691604051927f56ca623e000000000000000000000000000000000000000000000000000000008452600484015260c05183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa928315620003575760c0519362008b16575b5060a080510151604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c0519162008af6575b5060c060a0510151604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c0519162008ad6575b5060ff608060a051015116604051907f6900a3ae000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9283156200035757620082e99660016200828b9562008a099589839560c09a62008a92988c519562008aad575b508262008a1f91816040519c8d8b83829d519485930191016200de89565b890162007021825180938580850191016200de89565b017f3a00000000000000000000000000000000000000000000000000000000000000815262008a57825180938d87850191016200de89565b017f3a00000000000000000000000000000000000000000000000000000000000000838201526200085c825180938c6002850191016200de89565b60ff60608701511661012060a051015292935050506200826a565b62008a1f91955062008acd84913d8f819051833e62001a2581836200dcfe565b959150620089eb565b62008aef91503d8060c051833e62001a2581836200dcfe565b8662008969565b62008b0f91503d8060c051833e62001a2581836200dcfe565b8562008905565b62008b309193503d8060c051833e62001a2581836200dcfe565b9184620088a2565b604080519062008b4990826200dcfe565b600681527f3a686173683a000000000000000000000000000000000000000000000000000082820152906200882b565b91505062008b99915060603d60601162001ace5762001abc81836200dcfe565b86620087c6565b604051828101917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008352603c820152603c815262008be0605c826200dcfe565b51902062008759565b90506020813d60201162008c3c575b8162008c07602093836200dcfe565b81010312620001d45773ffffffffffffffffffffffffffffffffffffffff62008c3462008237926200e5c1565b91506200820a565b3d915062008bf8565b6200813291925062008c666001913d8060c051833e62001a2581836200dcfe565b929150620080ad565b62008c8891503d8060c051833e62001a2581836200dcfe565b8262008036565b506020813d60201162008cdb575b8162008cac602093836200dcfe565b81010312620001d45762008cd573ffffffffffffffffffffffffffffffffffffffff916200e5c1565b62007fbd565b3d915062008c9d565b602081015160c05161ffff9162008cff9183918216620102b4565b60406200205562008d1782516200305984826200dcfe565b60c0519160c0519151906a636f6e736f6c652e6c6f675afa5016602082015260ff62008d49816060840151166200f02e565b16606082015262007eec565b34620001d45760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d45760043560c0515062008daa6bfffffffffffffffffffffffe60c051604435620102b4565b604090815162008dbb83826200dcfe565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152825162008e29816200205560208201947fb60e72cc00000000000000000000000000000000000000000000000000000000865287602484015260648301906200deae565b60c0519160c0519151906a636f6e736f6c652e6c6f675afa5060018101808211620054a55762008e5c906064356200f015565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4578251907fe5d6bf02000000000000000000000000000000000000000000000000000000008252600482015260c0518160248160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015620097ab576200995b575b50601f546020805484517f32c02a1400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152602480359082015260c051909384926044928492909160089190911c165af18015620097ab5760c0519062009906575b73ffffffffffffffffffffffffffffffffffffffff9150169062008f848262008f746200e576565b600381528660e08201526200f4ce565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d45783517fca669fa700000000000000000000000000000000000000000000000000000000815283600482015260c0518160248160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156200365557620098e9575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d45783517f81bad6f300000000000000000000000000000000000000000000000000000000815260c0516001600483018190526024830181905260006044840152606483015273ffffffffffffffffffffffffffffffffffffffff85166084830152818060a48101038160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156200365557620098cc575b508351828152600060208201526bffffffffffffffffffffffff821660408201819052907febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b190606090a1833b15620001d45784517ff727ef1c00000000000000000000000000000000000000000000000000000000815260c05160048201859052600060248301526bffffffffffffffffffffffff909216604482015290818060648101038160c051885af180156200365557620098af575b5083517f92dcb3fc0000000000000000000000000000000000000000000000000000000081528260048201528481602481875afa908115620036555760c051620091b892849282916200988e575062005a53906200fb16565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818111620054a557737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4578451907fe5d6bf02000000000000000000000000000000000000000000000000000000008252600482015260c0518160248160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015620036555762009871575b5083517f1626ba7e0000000000000000000000000000000000000000000000000000000081526004810186905260406024820152600160448201527f80000000000000000000000000000000000000000000000000000000000000006064820152602081608481875afa908115620036555760c051916200984d575b508451620092e46060826200dcfe565b602781527f5369676e61747572652073686f756c642062652076616c6964206265666f726560208201527f206578706972790000000000000000000000000000000000000000000000000086820152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4577fffffffff000000000000000000000000000000000000000000000000000000008651927fc1fa1ed00000000000000000000000000000000000000000000000000000000084521660048301527f1626ba7e000000000000000000000000000000000000000000000000000000006024830152606060448301528180620093de60c0519360648301906200deae565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620036555762009830575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d45783517fe5d6bf0200000000000000000000000000000000000000000000000000000000815281600482015260c0518160248160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015620036555762009813575b5083517ff95b6ab700000000000000000000000000000000000000000000000000000000602082015282602482015281604482015260448152620094c06064826200dcfe565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4578451907ff28dceb30000000000000000000000000000000000000000000000000000000082526020600483015281806200951e60c0519360248301906200deae565b038160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156200365557620097f6575b5083517f1626ba7e0000000000000000000000000000000000000000000000000000000081526004810186905260406024820152600160448201527f80000000000000000000000000000000000000000000000000000000000000006064820152602081608481875afa80156200365557620097d4575b5060018101808211620054a557737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4578451907fe5d6bf02000000000000000000000000000000000000000000000000000000008252600482015260c0518160248160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156200365557620097b7575b508351917ff95b6ab70000000000000000000000000000000000000000000000000000000060208401526024830152604482015260448152620096856064826200dcfe565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4578251907ff28dceb3000000000000000000000000000000000000000000000000000000008252602060048301528180620096e360c0519360248301906200deae565b038160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015620097ab576200978e575b5081517f1626ba7e000000000000000000000000000000000000000000000000000000008152600481019390935260406024840152600160448401527f80000000000000000000000000000000000000000000000000000000000000006064840152602090839060849082905afa908115620035b45750620065885760c05180f35b60c0516200979c916200dcfe565b60c051620001d457836200970c565b83513d60c051823e3d90fd5b60c051620097c5916200dcfe565b60c051620001d4578562009640565b620097f09060203d60201162002b635762002b5381836200dcfe565b620095be565b60c05162009804916200dcfe565b60c051620001d4578562009547565b60c05162009821916200dcfe565b60c051620001d457856200947a565b60c0516200983e916200dcfe565b60c051620001d4578562009404565b6200986a915060203d60201162002b635762002b5381836200dcfe565b86620092d4565b60c0516200987f916200dcfe565b60c051620001d4578562009258565b62005a53925062005cdf9150883d8a1162005ce65762005cd681836200dcfe565b60c051620098bd916200dcfe565b60c051620001d457856200915f565b60c051620098da916200dcfe565b60c051620001d45785620090a6565b60c051620098f7916200dcfe565b60c051620001d4578562008ffa565b506020813d60201162009952575b8162009923602093836200dcfe565b81010312620001d4576200994c73ffffffffffffffffffffffffffffffffffffffff916200e5c1565b62008f4c565b3d915062009914565b60c05162009969916200dcfe565b60c051620001d4578362008ed2565b34620001d45760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d45760043567ffffffffffffffff8111620001d457620099cc9036906004016200e275565b620099d66200dd62565b604082019066ffffffffffffff80835116911690737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d457604051907f4c63e562000000000000000000000000000000000000000000000000000000008252821415600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562000357576200a4a1575b5062009a6d83516200ff0a565b602083019261ffff84511661ffff62009a90606084019260ff845116906200f007565b168552608082019362009aa485516200ef77565b855262009ab06200eae4565b918551604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620003575760c051906200a44c575b73ffffffffffffffffffffffffffffffffffffffff91501690818452604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620003575760c051926200a427575b5060ff90511690604051917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620003575762009d8f966020948a62009cf59462009cfd9660c051956200a3e3575b5061ffff9266ffffffffffffff8462009ce69462009cda60018d9660076040519c8d998a9360605162009c30818488016200de64565b85017f7369676e65723a000000000000000000000000000000000000000000000000008382015262009c6c82518093856027850191016200de89565b01017f3a000000000000000000000000000000000000000000000000000000000000008382015262009caa825160209381946008850191016200de89565b010103017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018752866200dcfe565b5116915116906200f053565b9a8688019b8c5251166200f053565b96516200f33c565b80604084015273ffffffffffffffffffffffffffffffffffffffff601f5460081c1673ffffffffffffffffffffffffffffffffffffffff8354166040518097819482937f32c02a14000000000000000000000000000000000000000000000000000000008452600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b039160c051905af1928315620003575760c051936200a39f575b5073ffffffffffffffffffffffffffffffffffffffff6060820193168352610100825101515160018101809111620054a55762009de6906200eb50565b9260c0515b61010084510151805182101562009e36579073ffffffffffffffffffffffffffffffffffffffff62009e20826001946200e722565b511662009e2e82886200e722565b520162009deb565b505083858760a086019173ffffffffffffffffffffffffffffffffffffffff83511662009e6b6101008951015151866200e722565b5261010087510193845194525162009e9d875173ffffffffffffffffffffffffffffffffffffffff875116906200f4ce565b604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620003575760c05192839283916200a375575b5073ffffffffffffffffffffffffffffffffffffffff88511693604051947f56ca623e000000000000000000000000000000000000000000000000000000008652600486015260c05185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa948515620003575760c051956200a353575b50604051917fb11a19e8000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620003575760c051926200a331575b50604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c051916200a311575b5060ff604051947f6900a3ae00000000000000000000000000000000000000000000000000000000865216600485015260c05184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760809560016200a0c19381936200a0cf9860c0519262001c1357506006906020604051988662000e788b9851809285808c0191016200de89565b60208951015115916200f5ec565b9401938085526200a1158651620045c46040519384927ff58cc8b5000000000000000000000000000000000000000000000000000000006020850152602484016200eba5565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d457604051907ff28dceb30000000000000000000000000000000000000000000000000000000082526020600483015281806200a17460c0519360248301906200deae565b038160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562000357576200a2f4575b5073ffffffffffffffffffffffffffffffffffffffff91610100865101525116737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d457604051907fca669fa7000000000000000000000000000000000000000000000000000000008252600482015260c0518160248160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562000357576200a2d3575b50906200a28f9273ffffffffffffffffffffffffffffffffffffffff602093511690519151916040518095819482937f13792a4a000000000000000000000000000000000000000000000000000000008452600484016200eba5565b03915afa801562000357576200a2a55760c05180f35b620065a49060203d6020116200a2cb575b6200a2c281836200dcfe565b8101906200e787565b503d6200a2b6565b60c0519192916200a2e4916200dcfe565b60c051620001d45790836200a233565b60c0516200a302916200dcfe565b60c051620001d457856200a19d565b6200a32a91503d8060c051833e62001a2581836200dcfe565b8a6200a031565b6200a34b9192503d8060c051833e62001a2581836200dcfe565b908a62009fd4565b6200a36d9195503d8060c051833e62001a2581836200dcfe565b938a62009f77565b919350506200a396915060603d60601162001ace5762001abc81836200dcfe565b92908962009f01565b9092506020813d6020116200a3da575b816200a3be602093836200dcfe565b81010312620001d4576200a3d2906200e5c1565b918562009da9565b3d91506200a3af565b889195509266ffffffffffffff61ffff62009ce69462009cda60016200a41784993d8060c051833e62001a2581836200dcfe565b9a96505050945050509262009bfa565b60ff9192506200a444903d8060c051833e62001a2581836200dcfe565b919062009b85565b506020813d6020116200a498575b816200a469602093836200dcfe565b81010312620001d4576200a49273ffffffffffffffffffffffffffffffffffffffff916200e5c1565b62009b0d565b3d91506200a45a565b60c0516200a4af916200dcfe565b60c051620001d4578362009a60565b34620001d45760c0517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d457604051806020601754918281520190601760c051527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c159060c0515b8181106200a546576200046b856200045e818703826200dcfe565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016200a52b565b34620001d45760c0517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d457604051806020601854918281520190601860c051527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e9060c0515b8181106200a5fb576200046b856200045e818703826200dcfe565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016200a5e0565b34620001d45760c0517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d457602073ffffffffffffffffffffffffffffffffffffffff815416604051908152f35b34620001d45760c0517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d457601e546200a6bc816200df6e565b906200a6cc60405192836200dcfe565b808252602082019081601e60c051527f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e35060c051915b8383106200a7b857848660405191829160208301906020845251809152604083019060408160051b850101929160c051905b8282106200a74357505050500390f35b919360206200a7a7827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc060019597998495030186526040838a5173ffffffffffffffffffffffffffffffffffffffff8151168452015191818582015201906200def3565b96019201920185949391926200a733565b6040516200a7c6816200dcc3565b825473ffffffffffffffffffffffffffffffffffffffff1681526001830180546200a7f1816200df6e565b916200a80160405193846200dcfe565b818352602083019060c05152602060c051209060c051905b8382106200a8415750505050600192826020928360029501528152019201920191906200a701565b6001602081926200a852866200e9d0565b8152019301910190916200a819565b34620001d45760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d4576040516200a8a0816200dca6565b600435808252602435602083015260443561ffff81168103620001d457604083015260643561ffff81168103620001d45760608301526084359066ffffffffffffff82168203620001d4576200a8fb9160808401526200ef77565b81526040516200a90b816200dc3c565b60c0518152602081019160c051835260408201906060825260608301926060845260808101916060835260a082016060815260c083016060815260e084016060815261010085019560c051875261012086019660c05188528551604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620003575760c051906200ba31575b73ffffffffffffffffffffffffffffffffffffffff91501691828852604051927f56ca623e000000000000000000000000000000000000000000000000000000008452600484015260c05183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa928315620003575760c051936200ba0f575b5060405180916200aad9600260278460208101987f7369676e65723a000000000000000000000000000000000000000000000000008a526200aa8381518092602086860191016200de89565b81017f3a310000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe28101855201836200dcfe565b526040517f6900a3ae0000000000000000000000000000000000000000000000000000000081526001600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c051916200b9ef575b50604051937f6900a3ae00000000000000000000000000000000000000000000000000000000855260c051600486015260c05185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562000357576200ad309560c051946200b904575b506200ac64926010600293601b9362006c4a602e604051998a967f7b227468726573686f6c64223a2200000000000000000000000000000000000060208901526200abf1815180926020868c0191016200de89565b87017f222c22636865636b706f696e74223a2200000000000000000000000000000000838201526200ac2e825180936020603e850191016200de89565b0101917f222c2266726f6d223a22666c6174222c22636f6e74656e74223a22000000000085840152518093602b8401906200de89565b6200acc46200ac87737109709ecfa91a80626ff3989d68f67f5b1dd12d620104b6565b60405194859283927f0199a2200000000000000000000000000000000000000000000000000000000084526060600485015260648401906200deae565b93603c8386037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024860152600a87527f636f6e6669675f6e6577000000000000000000000000000000000000000000006020880152016044840152604060c0519501906200deae565b038160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811562000357576200ad746020926200ae039460c051916200b9cf575b508088526200f33c565b80915273ffffffffffffffffffffffffffffffffffffffff601f5460081c1673ffffffffffffffffffffffffffffffffffffffff8354166040518095819482937f32c02a14000000000000000000000000000000000000000000000000000000008452600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b039160c051905af18015620003575760c051906200b97a575b73ffffffffffffffffffffffffffffffffffffffff915016895273ffffffffffffffffffffffffffffffffffffffff85511691604051927f56ca623e000000000000000000000000000000000000000000000000000000008452600484015260c05183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa928315620003575760c051936200b958575b5060405180916200aef7600260278460208101987f7369676e65723a000000000000000000000000000000000000000000000000008a526200aa8381518092602086860191016200de89565b526040517f6900a3ae0000000000000000000000000000000000000000000000000000000081526001600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c051916200b938575b50604051937f6900a3ae0000000000000000000000000000000000000000000000000000000085526001600486015260c05185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562000357576200b00d9560c051946200b90457506200ac64926010600293601b9362006c4a602e604051998a967f7b227468726573686f6c64223a2200000000000000000000000000000000000060208901526200abf1815180926020868c0191016200de89565b038160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562000357576200b0499260c051916200b8e4575b508091526200f33c565b84526200b0556200e576565b9160c05183526200b1166200b0696200e64f565b6040850190815273ffffffffffffffffffffffffffffffffffffffff8a5116908751604051907f295614260000000000000000000000000000000000000000000000000000000060208301526024820152602481526200b0cb6044826200dcfe565b604051926200b0da846200dc89565b835260c05160208401526040830152620186a0606083015260c051608083015260c05160a0830152600160c0830152519062000c04826200e6e5565b50516200b13b73ffffffffffffffffffffffffffffffffffffffff895116846200f4ce565b604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa938415620003575760c0519260c0519260c051966200b89f575b5073ffffffffffffffffffffffffffffffffffffffff905191511694604051957f56ca623e000000000000000000000000000000000000000000000000000000008752600487015260c05186602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa958615620003575760c051966200b87d575b50604051927fb11a19e8000000000000000000000000000000000000000000000000000000008452600484015260c05183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa928315620003575760c051936200b85b575b50604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c051916200b83b575b5060ff604051947f6900a3ae00000000000000000000000000000000000000000000000000000000865216600485015260c05184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562000357576200b42c9660016200b41e9381936200b4249860c051926200b816575b50600690602060405199866200b3688c9851809285808c0191016200de89565b87017f3a686173683a0000000000000000000000000000000000000000000000000000838201526200b3a482518093856026850191016200de89565b01017f3a00000000000000000000000000000000000000000000000000000000000000838201526200b3e18251809360206007850191016200de89565b01017f3a0000000000000000000000000000000000000000000000000000000000000083820152620074d68251809360206002850191016200de89565b6200f7fc565b84526200f961565b835273ffffffffffffffffffffffffffffffffffffffff845116737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4576040517f81bad6f300000000000000000000000000000000000000000000000000000000815260c0516001600483018190526024830181905260006044840152606483015273ffffffffffffffffffffffffffffffffffffffff909216608482015290818060a48101038160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562000357576200b7f9575b5060207f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa9151604051908152a173ffffffffffffffffffffffffffffffffffffffff83511691519051823b15620001d4576200b5839260405180809581947f1f6a1eb900000000000000000000000000000000000000000000000000000000835260c05196600484016200e75e565b039160c051905af1801562000357576200b7dc575b506004602073ffffffffffffffffffffffffffffffffffffffff835116604051928380927faaf10f420000000000000000000000000000000000000000000000000000000082525afa8015620003575760c051906200b79a575b60049150602073ffffffffffffffffffffffffffffffffffffffff815416604051938480927f9f69ef540000000000000000000000000000000000000000000000000000000082525afa908115620003575760c051916200b754575b6200b65a92506200fbc7565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4576040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152670de0b6b3a7640000602482015260c0518160448183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562000357576200b737575b5060c05160c05160c05160c051670de0b6b3a764000073ffffffffffffffffffffffffffffffffffffffff86511660c051f115620003575773ffffffffffffffffffffffffffffffffffffffff62000351915116316200fe0e565b60c0516200b745916200dcfe565b60c051620001d457816200b6dc565b90506020823d6020116200b791575b816200b772602093836200dcfe565b81010312620001d4576200b78a6200b65a926200e5c1565b906200b64e565b3d91506200b763565b506020813d6020116200b7d3575b816200b7b7602093836200dcfe565b81010312620001d4576200b7cd6004916200e5c1565b6200b5f2565b3d91506200b7a8565b60c0516200b7ea916200dcfe565b60c051620001d457816200b598565b60c0516200b807916200dcfe565b60c051620001d457846200b4f4565b60069192506200b833903d8060c051833e62001a2581836200dcfe565b91906200b348565b6200b85491503d8060c051833e62001a2581836200dcfe565b8a6200b2d5565b6200b8759193503d8060c051833e62001a2581836200dcfe565b918a6200b278565b6200b8979196503d8060c051833e62001a2581836200dcfe565b948a6200b21b565b90955073ffffffffffffffffffffffffffffffffffffffff93506200b8d791925060603d60601162001ace5762001abc81836200dcfe565b929193909295906200b1a3565b6200b8fd91503d8060c051833e62001a2581836200dcfe565b8a6200b03f565b601b9194509260106002936200b92b6200ac64963d8060c051833e62001a2581836200dcfe565b969350935050926200ab9c565b6200b95191503d8060c051833e62001a2581836200dcfe565b8b6200af55565b6200b9729193503d8060c051833e62001a2581836200dcfe565b918a6200aeab565b506020813d6020116200b9c6575b816200b997602093836200dcfe565b81010312620001d4576200b9c073ffffffffffffffffffffffffffffffffffffffff916200e5c1565b6200ae1c565b3d91506200b988565b6200b9e891503d8060c051833e62001a2581836200dcfe565b8e6200ad6a565b6200ba0891503d8060c051833e62001a2581836200dcfe565b8d6200ab37565b6200ba299193503d8060c051833e62001a2581836200dcfe565b918c6200aa37565b506020813d6020116200ba7d575b816200ba4e602093836200dcfe565b81010312620001d4576200ba7773ffffffffffffffffffffffffffffffffffffffff916200e5c1565b6200a9bf565b3d91506200ba3f565b34620001d45760c0517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d457604051806020601654918281520190601660c051527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b51242899060c0515b8181106200bb0e576200046b856200045e818703826200dcfe565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016200baf3565b34620001d45760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d45760443560043573ffffffffffffffffffffffffffffffffffffffff82168203620001d4576064356bffffffffffffffffffffffff81168103620001d4576200bbb36200ddcc565b601f54602080546040517f32c02a1400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152602480359082015260c051949794909384926044928492909160089190911c165af1908115620003575760c051916200c18d575b5073ffffffffffffffffffffffffffffffffffffffff8091169416737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4576040517f4c63e56200000000000000000000000000000000000000000000000000000000815285821415600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562000357576200c170575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4576040517fca669fa700000000000000000000000000000000000000000000000000000000815281600482015260c0518160248160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562000357576200c153575b50604051907fa19dbf000000000000000000000000000000000000000000000000000000000060208301526024820152602481526200bd7a6044826200dcfe565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d457604051907ff28dceb30000000000000000000000000000000000000000000000000000000082526020600483015281806200bdd960c0519360248301906200deae565b038160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562000357576200c136575b50833b15620001d4576040517ff727ef1c00000000000000000000000000000000000000000000000000000000815260c0516004820185905273ffffffffffffffffffffffffffffffffffffffff90921660248201526bffffffffffffffffffffffff9092166044830152818060648101038160c051875af1801562000357576200c119575b5060409060248251809481937f92dcb3fc00000000000000000000000000000000000000000000000000000000835260048301525afa908115620003575760c0519060c051926200c0f2575b50604051606091906200bee883826200dcfe565b602a81527f537461746963207369676e617475726520616464726573732073686f756c642060208201527f6e6f7420626520736574000000000000000000000000000000000000000000006040820152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d45773ffffffffffffffffffffffffffffffffffffffff604051927f2f2769d100000000000000000000000000000000000000000000000000000000845216600483015260c051602483015282604483015281806200bfb960c0519360648301906200deae565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562000357576200c0d5575b50604051906200bff081836200dcfe565b602c82527f537461746963207369676e61747572652074696d657374616d702073686f756c60208301527f64206e6f742062652073657400000000000000000000000000000000000000006040830152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d457604051927f88b44c85000000000000000000000000000000000000000000000000000000008452600484015260c0516024840152604483015281806200c0aa60c0519360648301906200deae565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620003575762002b0a5760c05180f35b60c0516200c0e3916200dcfe565b60c051620001d457826200bfdf565b90506200c111915060403d60401162005ce65762005cd681836200dcfe565b90826200bed4565b60c0516200c127916200dcfe565b60c051620001d457826200be88565b60c0516200c144916200dcfe565b60c051620001d457846200be02565b60c0516200c161916200dcfe565b60c051620001d457856200bd39565b60c0516200c17e916200dcfe565b60c051620001d457856200bcc2565b90506020813d6020116200c1dd575b816200c1ab602093836200dcfe565b81010312620001d45773ffffffffffffffffffffffffffffffffffffffff6200c1d581926200e5c1565b91506200bc31565b3d91506200c19c565b34620001d45760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d4576200c2216200dd40565b6200c22b6200dd62565b9061ffff806200c2576200c23e6200dd8e565b9360ff6200c24b6200ddae565b9516938491166200f007565b16906200c2666064356200ef77565b93604051927fffa18649000000000000000000000000000000000000000000000000000000008452856004850152602084602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa938415620003575760c051946200ca18575b5073ffffffffffffffffffffffffffffffffffffffff604051947f56ca623e000000000000000000000000000000000000000000000000000000008652169384600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c051916200c9f8575b50604051937f6900a3ae000000000000000000000000000000000000000000000000000000008552600485015260c05184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562000357576200698c600166ffffffffffffff9360076020976200c3c59960c051916200c9d85750604051988993606051620068e3818488016200de64565b6200c46260206200c3d6836200f33c565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c1673ffffffffffffffffffffffffffffffffffffffff8354166040518095819482937f32c02a14000000000000000000000000000000000000000000000000000000008452600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b039160c051905af18015620003575760c051906200c983575b73ffffffffffffffffffffffffffffffffffffffff915016936200c49e6200e576565b9360c05185526200c5486200c4b26200e64f565b60408701908152604051907f2956142600000000000000000000000000000000000000000000000000000000602083015260c0516024830152602482526200c4fc6044836200dcfe565b604051916200c50b836200dc89565b89835260c05160208401526040830152620186a0606083015260c051608083015260c05160a0830152600160c0830152519062000c04826200e6e5565b501591821560208601526200c55e86866200f4ce565b604051927fe341eaa400000000000000000000000000000000000000000000000000000000845260048401526024830152606082604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa938415620003575760c05194859384916200c955575b50604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620003575760c051926200c933575b50604051937fb11a19e8000000000000000000000000000000000000000000000000000000008552600485015260c05184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa938415620003575760c051946200c911575b50604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c051916200c8f1575b5060ff604051967f6900a3ae00000000000000000000000000000000000000000000000000000000885216600487015260c05186602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562000357576001620075069381936200c7669960c051926200b8165750600690602060405199866200b3688c9851809285808c0191016200de89565b6200c771826200f961565b916200c7eb604051917f4294d127000000000000000000000000000000000000000000000000000000006020840152600483526200c7b16024846200dcfe565b620045c46040519384927f7f6b0bb1000000000000000000000000000000000000000000000000000000006020850152602484016200e980565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d457604051907ff28dceb30000000000000000000000000000000000000000000000000000000082526020600483015281806200c84a60c0519360248301906200deae565b038160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562000357576200c8d4575b50823b15620001d4576200c8ba9260405180809581947f1f6a1eb900000000000000000000000000000000000000000000000000000000835260c05196600484016200e75e565b039160c051905af18015620003575762002b0a5760c05180f35b60c0516200c8e2916200dcfe565b60c051620001d457836200c873565b6200c90a91503d8060c051833e62001a2581836200dcfe565b886200c6d9565b6200c92b9194503d8060c051833e62001a2581836200dcfe565b92886200c67c565b6200c94d9192503d8060c051833e62001a2581836200dcfe565b90886200c61f565b919550506200c97791925060603d60601162001ace5762001abc81836200dcfe565b9291949092886200c5c2565b506020813d6020116200c9cf575b816200c9a0602093836200dcfe565b81010312620001d4576200c9c973ffffffffffffffffffffffffffffffffffffffff916200e5c1565b6200c47b565b3d91506200c991565b6200c9f191503d8060c051833e62001a2581836200dcfe565b8d620068cb565b6200ca1191503d8060c051833e62001a2581836200dcfe565b876200c338565b9093506020813d6020116200ca53575b816200ca37602093836200dcfe565b81010312620001d4576200ca4b906200e5c1565b92866200c2c3565b3d91506200ca28565b34620001d4576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d4576200ca9a60e06200dc3c565b6200caa46200dd40565b60e0526200cab16200dd62565b610100526200cabf6200dd8e565b610120526064356101408190526200cad66200ddae565b6101605260a43561ffff81168103620001d4576101805260c43566ffffffffffffff81168103620001d4576101a05260e4359060ff82168203620001d4576101c091909152610104356101e05261012435610200526200cb36906200ef77565b610140526101e0516200cb49906200ef77565b6101e05260e0516101205161ffff916200cb699160ff169083166200f007565b1660e052610180516101c05161ffff916200cb8a9160ff169083166200f007565b1661018052604051610160810167ffffffffffffffff81118282101762001e235760405260c051815260c05160208201526060604082015260608082015260c051608082015260c05160a08201526200cbe26200e576565b60c0820152606060e082015260606101008201526200cc006200e576565b6101208201526060610140820152606060e00151604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620003575760c051906200dbe7575b73ffffffffffffffffffffffffffffffffffffffff915016808252604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c051916200dbc7575b5060ff604060e001511690604051917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562000357576200cd9960206200cd7d6001829560076200ce37986200cda59760c051916200dba75750604051958693606051620007e4818488016200de64565b61ffff60e0511666ffffffffffffff8560e0015116906200f053565b8060408601526200f33c565b80608085015273ffffffffffffffffffffffffffffffffffffffff601f5460081c1673ffffffffffffffffffffffffffffffffffffffff8354166040518095819482937f32c02a14000000000000000000000000000000000000000000000000000000008452600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b039160c051905af1908115620003575760c051916200db65575b5061010060e00151604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620003575760c051906200db10575b73ffffffffffffffffffffffffffffffffffffffff915016806020840152604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c051916200daf0575b5060ff60e08001511690604051917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562000357576200cfbf6001602092600762000b1c956200cfdb9760c0519162001ad6575060405195869360605162000a85818488016200de64565b610180516101a05166ffffffffffffff169061ffff166200f053565b60a083015260c05160c0830151526200cff36200e64f565b604060c084015101526200d0af60a0830151604051907f295614260000000000000000000000000000000000000000000000000000000060208301526024820152602481526200d0456044826200dcfe565b604051906200d054826200dc89565b73ffffffffffffffffffffffffffffffffffffffff8416825260c05160208301526040820152620186a0606082015260c051608082015260c05160a0820152600160c0820152604060c085015101519062000c04826200e6e5565b50608060e001511515602060c08401510152606060e001516200d0ed73ffffffffffffffffffffffffffffffffffffffff831660c08501516200f4ce565b604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620003575760c0519182918291906200dac8575b5060408501519173ffffffffffffffffffffffffffffffffffffffff86511690604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620003575760c051926200daa6575b50604051927fb11a19e8000000000000000000000000000000000000000000000000000000008452600484015260c05183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa928315620003575760c051936200da84575b50604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c051916200da64575b5060ff604051957f6900a3ae00000000000000000000000000000000000000000000000000000000875216600486015260c05185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620003575760016200d3149381936200d3209860c0519262001c1357506006906020604051988662000e788b9851809285808c0191016200de89565b6101605115916200f5ec565b60e08301526200d33460c08301516200f961565b610100830152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4576040517f81bad6f300000000000000000000000000000000000000000000000000000000815260c0516001600483018190526024830181905260006044840152606483015273ffffffffffffffffffffffffffffffffffffffff83166084830152818060a48101038160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562000357576200da4f575b507f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa602060a0840151604051908152a161010082015160e08301519073ffffffffffffffffffffffffffffffffffffffff83163b15620001d4576200d47d91604051809381927f1f6a1eb900000000000000000000000000000000000000000000000000000000835260c05194600484016200e75e565b038160c05173ffffffffffffffffffffffffffffffffffffffff87165af1801562000357576200da32575b506040517faaf10f4200000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff86165afa8015620003575760c051906200d9f0575b60049150602073ffffffffffffffffffffffffffffffffffffffff815416604051938480927f9f69ef540000000000000000000000000000000000000000000000000000000082525afa908115620003575760c051916200d9aa575b6200d56792506200fbc7565b6040517f51605d8000000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff86165afa8015620003575760c051906200d96f575b6200d5cf915060a0840151906200fd01565b610120820180516003905261020051815160e001526101e05190516200d60d9073ffffffffffffffffffffffffffffffffffffffff8416906200f4ce565b604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620003575760c0519384938493906200d941575b5060608101519473ffffffffffffffffffffffffffffffffffffffff60208301511693604051947f56ca623e000000000000000000000000000000000000000000000000000000008652600486015260c05185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa948515620003575760c051956200d91f575b50604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c051916200d8ff575b50604051957fb11a19e8000000000000000000000000000000000000000000000000000000008752600487015260c05186602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa958615620003575760c051966200d8dd575b5060ff604051927f6900a3ae00000000000000000000000000000000000000000000000000000000845216600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa96871562000357576200b41e600161014097816200d8989b60209b6200d8419860c051926200754357506006908d6040519986620074208c9851809285808c0191016200de89565b928391015261012060e0015173ffffffffffffffffffffffffffffffffffffffff6040518096819582947f1626ba7e000000000000000000000000000000000000000000000000000000008452600484016200e7d1565b0392165afa908115620003575762000351917fffffffff000000000000000000000000000000000000000000000000000000009160c0519162005c4d5750166200fc67565b6200d8f79196503d8060c051833e62001a2581836200dcfe565b94876200d7ab565b6200d91891503d8060c051833e62001a2581836200dcfe565b876200d74e565b6200d9399195503d8060c051833e62001a2581836200dcfe565b93876200d6f1565b91945092506200d963915060603d60601162001ace5762001abc81836200dcfe565b9193909192856200d672565b506020813d6020116200d9a1575b816200d98c602093836200dcfe565b81010312620019c0576200d5cf90516200d5bd565b3d91506200d97d565b90506020823d6020116200d9e7575b816200d9c8602093836200dcfe565b81010312620001d4576200d9e06200d567926200e5c1565b906200d55b565b3d91506200d9b9565b506020813d6020116200da29575b816200da0d602093836200dcfe565b81010312620001d4576200da236004916200e5c1565b6200d4ff565b3d91506200d9fe565b60c0516200da40916200dcfe565b60c051620001d457826200d4a8565b60c0516200da5d916200dcfe565b826200d3e6565b6200da7d91503d8060c051833e62001a2581836200dcfe565b876200d287565b6200da9e9193503d8060c051833e62001a2581836200dcfe565b91876200d22a565b6200dac09192503d8060c051833e62001a2581836200dcfe565b90876200d1cd565b9150506200dae8915060603d60601162001ace5762001abc81836200dcfe565b90856200d151565b6200db0991503d8060c051833e62001a2581836200dcfe565b836200cf2d565b506020813d6020116200db5c575b816200db2d602093836200dcfe565b81010312620001d4576200db5673ffffffffffffffffffffffffffffffffffffffff916200e5c1565b6200ceb3565b3d91506200db1e565b90506020813d6020116200db9e575b816200db83602093836200dcfe565b81010312620001d4576200db97906200e5c1565b826200ce51565b3d91506200db74565b6200dbc091503d8060c051833e62001a2581836200dcfe565b8b620007cc565b6200dbe091503d8060c051833e62001a2581836200dcfe565b826200cce5565b506020813d6020116200dc33575b816200dc04602093836200dcfe565b81010312620001d4576200dc2d73ffffffffffffffffffffffffffffffffffffffff916200e5c1565b6200cc6e565b3d91506200dbf5565b610140810190811067ffffffffffffffff8211176200dc5a57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff8211176200dc5a57604052565b60a0810190811067ffffffffffffffff8211176200dc5a57604052565b6040810190811067ffffffffffffffff8211176200dc5a57604052565b610120810190811067ffffffffffffffff8211176200dc5a57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176200dc5a57604052565b6004359061ffff82168203620019c057565b359061ffff82168203620019c057565b6024359066ffffffffffffff82168203620019c057565b359066ffffffffffffff82168203620019c057565b6044359060ff82168203620019c057565b359060ff82168203620019c057565b608435908115158203620019c057565b35908115158203620019c057565b6084359073ffffffffffffffffffffffffffffffffffffffff82168203620019c057565b359073ffffffffffffffffffffffffffffffffffffffff82168203620019c057565b602060408183019282815284518094520192019060005b8181106200de375750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016200de29565b60005b8281106200de7757506000910152565b6080810151828201526020016200de67565b60005b8381106200de9d5750506000910152565b81810151838201526020016200de8c565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936200deec815180928187528780880191016200de89565b0116010190565b9080602083519182815201916020808360051b8301019401926000915b8383106200df2057505050505090565b90919293946020806200df5e837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0866001960301875289516200deae565b970193019301919392906200df10565b67ffffffffffffffff81116200dc5a5760051b60200190565b67ffffffffffffffff81116200dc5a57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b81601f82011215620019c0578035906200dfdc826200df87565b926200dfec60405194856200dcfe565b82845260208383010111620019c057816000926020809301838601378301015290565b919061012083820312620019c0576040516200e02b816200dce0565b80936200e038816200dd9f565b82526200e048602082016200ddbe565b6020830152604081013567ffffffffffffffff8111620019c057810183601f82011215620019c05780356200e07d816200df6e565b916200e08d60405193846200dcfe565b81835260208084019260051b82010190868211620019c05760208101925b8284106200e19757505050506040830152606081013560608301526080810135608083015260a081013567ffffffffffffffff8111620019c057836200e0f39183016200dfc2565b60a083015260c081013560c083015260e081013560e08301526101008101359067ffffffffffffffff8211620019c057019180601f84011215620019c05782356200e13e816200df6e565b936200e14e60405195866200dcfe565b81855260208086019260051b820101928311620019c057602001905b8282106200e17c575050506101000152565b602080916200e18b846200ddf0565b8152019101906200e16a565b833567ffffffffffffffff8111620019c057820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828b030112620019c057604051916200e1e7836200dc89565b6200e1f5602083016200ddf0565b83526040820135602084015260608201359267ffffffffffffffff8411620019c05760e0836200e22d8d60208098819801016200dfc2565b6040840152608081013560608401526200e24a60a082016200ddbe565b60808401526200e25d60c082016200ddbe565b60a0840152013560c08201528152019301926200e0ab565b91909160c081840312620019c0576040519060c0820182811067ffffffffffffffff8211176200dc5a57604052819381359067ffffffffffffffff8211620019c057826200e2ce60a094926200e31a948694016200e00f565b85526200e2de602082016200dd52565b60208601526200e2f1604082016200dd79565b60408601526200e304606082016200dd9f565b606086015260808101356080860152016200ddf0565b910152565b906020808351928381520192019060005b8181106200e33e5750505090565b82517fffffffff00000000000000000000000000000000000000000000000000000000168452602093840193909201916001016200e330565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60c0910112620019c05760043561ffff81168103620019c0579060243566ffffffffffffff81168103620019c0579060443560ff81168103620019c05790606435906084359060a4358015158103620019c05790565b602081016020825282518091526040820191602060408360051b8301019401926000915b8383106200e42257505050505090565b90919293946020806200e487837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff8151168452015191818582015201906200e31f565b970193019301919392906200e412565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc610120910112620019c057604051906200e4d2826200dce0565b8160043561ffff81168103620019c057815260243566ffffffffffffff81168103620019c057602082015260443560ff81168103620019c0576040820152606435606082015260843561ffff81168103620019c057608082015260a43566ffffffffffffff81168103620019c05760a082015260c43560ff81168103620019c05760c082015260e43560e082015261010435908115158203620019c0576101000152565b604051906200e585826200dce0565b6060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b519073ffffffffffffffffffffffffffffffffffffffff82168203620019c057565b602081830312620019c05780519067ffffffffffffffff8211620019c0570181601f82011215620019c057602081519101906200e620816200df87565b926200e63060405194856200dcfe565b81845281830111620019c0576200e64c9160208401906200de89565b90565b604080519091906200e66283826200dcfe565b60018152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018260005b8281106200e69a57505050565b6020906040516200e6ab816200dc89565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c0820152828285010152016200e68d565b8051156200e6f35760200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518210156200e6f35760209160051b010190565b90816060910312620019c057805160ff81168103620019c057916040602083015192015190565b90916200e7786200e64c936040845260408401906200deae565b9160208184039101526200deae565b90816020910312620019c0575190565b90816020910312620019c057517fffffffff0000000000000000000000000000000000000000000000000000000081168103620019c05790565b6040906200e64c9392815281602082015201906200deae565b610120820160ff82511683526020820151151560208401526040820151906101206040850152815180915261014084019060206101408260051b8701019301916000905b8282106200e8d557505050506200e86961010091606084015160608601526080840151608086015260a084015185820360a08701526200deae565b9160c081015160c085015260e081015160e08501520151916101008183039101526020808351928381520192019060005b8181106200e8a85750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016200e89a565b90919293602080827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec08a6001950301855287519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c0806200e949604085015160e0604086015260e08501906200deae565b936060810151606085015260808101511515608085015260a0810151151560a085015201519101529601920192019092916200e82e565b90916200e99a6200e64c936060845260608401906200e7ea565b916000602082015260408184039101526200deae565b9190826040910312620019c05760206200e9ca836200e5c1565b92015190565b906040519160008154918260011c926001811680156200ead9575b6020851081146200eaac578487528693929181156200ea6a57506001146200ea1f575b506200ea1d925003836200dcfe565b565b90506000929192526020600020906000915b8183106200ea4d5750509060206200ea1d92820101386200ea0e565b60209193508060019154838589010152019101909184926200ea31565b602093506200ea1d9592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b820101386200ea0e565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f16936200e9eb565b604051906200eaf3826200dca6565b606060808360008152826020820152600060408201526000838201520152565b919082018092116200eb2157565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b906200eb5c826200df6e565b6200eb6b60405191826200dcfe565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06200eb9b82946200df6e565b0190602036910137565b90916200e7786200e64c936040845260408401906200e7ea565b919082039182116200eb2157565b90604051918281549182825260208201906000526020600020926000905b8060078301106200edfa576200ea1d9454918181106200edc3575b8181106200ed8c575b8181106200ed55575b8181106200ed1e575b8181106200ece7575b8181106200ecb0575b8181106200ec7a575b106200ec4c575b5003836200dcfe565b7fffffffff00000000000000000000000000000000000000000000000000000000168152602001386200ec43565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b1681520193016200ec3c565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b1681520193016200ec33565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b1681520193016200ec2a565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b1681520193016200ec21565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b1681520193016200ec18565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b1681520193016200ec0f565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b1681520193016200ec06565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e08201520194019201859293916200ebeb565b60085460ff1680156200ee985790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156200ef6b576000916200ef33575b50151590565b90506020813d6020116200ef62575b816200ef51602093836200dcfe565b81010312620019c05751386200ef2d565b3d91506200ef42565b6040513d6000823e3d90fd5b7ffffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036413960016200efa592620102b4565b9060008060406200efc16200eff482516200305984826200dcfe565b886044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826200dcfe565b51906a636f6e736f6c652e6c6f675afa50565b9060006200efa592620102b4565b6200efa5916bffffffffffffffffffffffff91620102b4565b60ff60006200efa592620102b4565b67ffffffffffffffff60006200efa592620102b4565b919061ffff604051937f6900a3ae000000000000000000000000000000000000000000000000000000008552166004840152600083602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9283156200ef6b576000936200f31b575b50604051907f6900a3ae0000000000000000000000000000000000000000000000000000000082526004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156200ef6b576040936000936200f2409385936200f2eb575b50601b6200f1e0926010600293602e8a519788947f7b227468726573686f6c64223a2200000000000000000000000000000000000060208701526200f166815180926020868a0191016200de89565b85017f222c22636865636b706f696e74223a2200000000000000000000000000000000838201526200f1a3825180936020603e850191016200de89565b01017f222c2266726f6d223a22666c6174222c22636f6e74656e74223a2200000000008382015262006c4a825180936020602b850191016200de89565b6200f2a56200f203737109709ecfa91a80626ff3989d68f67f5b1dd12d620104b6565b91855195869485947f0199a2200000000000000000000000000000000000000000000000000000000086526060600487015260648601906200deae565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152600a83527f636f6e6669675f6e657700000000000000000000000000000000000000000000602084015201604486015201906200deae565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156200ef6b576000916200f2d3575090565b6200e64c91503d806000833e62001a2581836200dcfe565b60029193506200f1e09260106200f30f601b933d808b833e62001a2581836200dcfe565b9593505092506200f117565b6200f3349193503d806000833e62001a2581836200dcfe565b91386200f0b3565b60006200f4056040926200f3e260016029865180947f7b22696e707574223a000000000000000000000000000000000000000000000060208301526200f38c81518092602086860191016200de89565b81017f7d000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18101845201826200dcfe565b6200f46a6200f203737109709ecfa91a80626ff3989d68f67f5b1dd12d620104b6565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152601083527f636f6e6669675f696d6167654861736800000000000000000000000000000000602084015201604486015201906200deae565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156200ef6b576000916200f4af575b5060208151918180820193849201010312620019c0575190565b6200f4c791503d806000833e62001a2581836200dcfe565b386200f495565b602081015190916200f59791156200f5e4576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a081526200f58d60c0826200dcfe565b51902091620108ef565b6040519060208201927f1901000000000000000000000000000000000000000000000000000000000000845260228301526042820152604281526200f5de6062826200dcfe565b51902090565b46906200f4e4565b6000916200f1e06001600c6200f75694604097879088146200f7bb5750600f88516200f6198a826200dcfe565b600481527f747275650000000000000000000000000000000000000000000000000000000060208201525b60298a519788947f7b22696e707574223a000000000000000000000000000000000000000000000060208701526200f686815180926020868a0191016200de89565b85017f2c227369676e617475726573223a220000000000000000000000000000000000838201526200f6c38251809360206038850191016200de89565b01017f222c22636861696e4964223a0000000000000000000000000000000000000000838201526200f700825180936020601b850191016200de89565b01017f7d000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18101845201826200dcfe565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152601083527f7369676e61747572655f656e636f646500000000000000000000000000000000602084015201604486015201906200deae565b50600f88516200f7cc8a826200dcfe565b600581527f66616c736500000000000000000000000000000000000000000000000000000060208201526200f644565b60006200f756600c936200f90560016040968796600f88516200f8208a826200dcfe565b6004815260208101907f747275650000000000000000000000000000000000000000000000000000000082526200f70060298c51998a967f7b22696e707574223a000000000000000000000000000000000000000000000060208901526200f892815180926020868c0191016200de89565b87017f2c227369676e617475726573223a220000000000000000000000000000000000838201526200f8cf8251809360206038850191016200de89565b0101917f222c22636861696e4964223a000000000000000000000000000000000000000085840152518093601b8401906200de89565b6200f9286200f203737109709ecfa91a80626ff3989d68f67f5b1dd12d620104b6565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19182156200f95757506000916200f2d3575090565b513d6000823e3d90fd5b6000620045c46200f9876200f9c39360405192839160208084015260408301906200e7ea565b604051809381927f71aad10d0000000000000000000000000000000000000000000000000000000083526020600484015260248301906200deae565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156200ef6b576200fa9360009160409383916200faf8575b506200f1e06002602c865180947f7b227061796c6f6164223a22000000000000000000000000000000000000000060208301526200fa3d81518092602086860191016200de89565b81017f227d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe28101845201826200dcfe565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152601083527f7061796c6f61645f746f5061636b656400000000000000000000000000000000602084015201604486015201906200deae565b6200fb0f91503d8085833e62001a2581836200dcfe565b386200f9f5565b600090737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200fbc35773ffffffffffffffffffffffffffffffffffffffff604051917f515361f60000000000000000000000000000000000000000000000000000000083521660048201528160248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156200fbb8576200fba9575050565b816200fbb5916200dcfe565b50565b6040513d84823e3d90fd5b5080fd5b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620019c05773ffffffffffffffffffffffffffffffffffffffff9081604051937f515361f6000000000000000000000000000000000000000000000000000000008552166004840152166024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156200ef6b576200fc5a5750565b60006200ea1d916200dcfe565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620019c057604051907f7c84c69b00000000000000000000000000000000000000000000000000000000825260048201527f1626ba7e000000000000000000000000000000000000000000000000000000006024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156200ef6b576200fc5a5750565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620019c057604051917f7c84c69b00000000000000000000000000000000000000000000000000000000835260048301526024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156200ef6b576200fc5a5750565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620019c0576000916200fde660405194859384937f88b44c85000000000000000000000000000000000000000000000000000000008552600485015260248401526060604484015260648301906200deae565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156200ef6b576200fc5a5750565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620019c057604051907f98296c540000000000000000000000000000000000000000000000000000000082526004820152670de0b6b3a76400006024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156200ef6b576200fc5a5750565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620019c057604051917f98296c5400000000000000000000000000000000000000000000000000000000835260048301526024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156200ef6b576200fc5a5750565b6200ff1d6003600060ff845116620102b4565b60ff60409160008084516200ff3386826200dcfe565b600c81527f426f756e6420726573756c740000000000000000000000000000000000000000602082015285516200ffd4816200ffa160208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528a602484015260648301906200deae565b876044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826200dcfe565b51906a636f6e736f6c652e6c6f675afa5016808352156200fff3575050565b606082016201001a73ffffffffffffffffffffffffffffffffffffffff60008351620102b4565b9060008084516201002c86826200dcfe565b600c81527f426f756e6420726573756c740000000000000000000000000000000000000000602082015285516201009a816200efc160208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528a602484015260648301906200deae565b51906a636f6e736f6c652e6c6f675afa505260808201620100c666ffffffffffffff60008351620102b4565b906000808451620100d886826200dcfe565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152855162010146816200efc160208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528a602484015260648301906200deae565b51906a636f6e736f6c652e6c6f675afa505260005b8183019081519081518110156201020857839260c0620101fc83620101966002846201018a8460019a6200e722565b510151600090620102b4565b9360008089620101b1620101e482516200305984826200dcfe565b8b6044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826200dcfe565b51906a636f6e736f6c652e6c6f675afa50516200e722565b5101520190506201015b565b5050505050565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620019c0576000916200fde660405194859384937fc1fa1ed0000000000000000000000000000000000000000000000000000000008552600485015260248401526060604484015260648301906200deae565b811562010285570690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60009083831162010432578281109182158062010427575b6201041f57620102dd84866200ebbf565b92600184018094116200eb215760038311158062010415575b62010404577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83101580620103f9575b620103e65785831115620103945750509062010347846201034d936200ebbf565b6201027a565b9081156201038f576201036192506200eb13565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081116200eb215790565b505090565b959492919095620103a6575b50505050565b839495506201034790620103bb93946200ebbf565b9081156201038f57620103cf92506200ebbf565b600181018091116200eb21579038808080620103a0565b505090506200e64c92915019906200ebbf565b508219841162010326565b50509190506200e64c92506200eb13565b50828411620102f6565b509250505090565b5084821115620102cc565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374645574696c7320626f756e642875696e743235362c75696e743235362c7560448201527f696e74323536293a204d6178206973206c657373207468616e206d696e2e00006064820152fd5b73ffffffffffffffffffffffffffffffffffffffff166040517fc1978d1f00000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5345515f53444b5f5250435f4d494e5f504f52540000000000000000000000006044820152602081606481855afa9081156200ef6b57600091620108b7575b50604051907fc1978d1f00000000000000000000000000000000000000000000000000000000825260206004830152601460248301527f5345515f53444b5f5250435f4d41585f504f52540000000000000000000000006044830152602082606481865afa9182156200ef6b576000926201087a575b5080821062007987577fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a654801562010825575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146200eb215781600162010644920193847fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a6556200ebbf565b91600183018093116200eb2157620106619262006e5f916201027a565b906040517ff877cb1900000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5345515f53444b5f5250435f55524c5f505245464958000000000000000000006044820152600081606481855afa9081156200ef6b5760009162010806575b50604051927ff877cb1900000000000000000000000000000000000000000000000000000000845260206004850152601660248501527f5345515f53444b5f5250435f55524c5f535546464958000000000000000000006044850152600084606481865afa9384156200ef6b57600094620107e3575b506000906024604051809581937f6900a3ae00000000000000000000000000000000000000000000000000000000835260048301525afa9182156200ef6b57600092620107bc575b5060206200e64c9293620070318260405196856200700b899751809285808b0191016200de89565b6200e64c9250620107db6020913d806000833e62001a2581836200dcfe565b925062010794565b6000919450620107fe903d8084833e62001a2581836200dcfe565b93906201074c565b6201081e91503d806000833e62001a2581836200dcfe565b38620106d6565b50604051602081019036600083376201087160208236810160008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826200dcfe565b519020620105e9565b90916020823d602011620108ae575b8162010898602093836200dcfe565b81010312620108ab5750519038620105b6565b80fd5b3d915062010889565b906020823d602011620108e6575b81620108d4602093836200dcfe565b81010312620108ab5750513862010540565b3d9150620108c5565b61010081015160405160208101818193602081519391019260005b81811062010c9a575050620109479250037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826200dcfe565b5190209060ff815116801560001462010b645750906040820151928351916201098d62010974846200df6e565b936201098460405195866200dcfe565b8085526200df6e565b937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe060208501950136863760005b865181101562010a955780620109d4600192896200e722565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e0830152610100820152610100815262010a7e610120826200dcfe565b51902062010a8d82886200e722565b5201620109bb565b5092919450926040519081602081019182945192909260005b81811062010b4a57505062010aeb9250037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826200dcfe565b51902091608060608301519201516040519260208401947f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a2865260408501526060840152608083015260a082015260a081526200f5de60c0826200dcfe565b845183526020948501948694509092019160010162010aae565b6001810362010bc1575060a0015160208151910120906040519060208201927fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d466845260408301526060820152606081526200f5de6080826200dcfe565b6002810362010c17575060c00151906040519060208201927f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e4845260408301526060820152606081526200f5de6080826200dcfe565b6003810362010c6d575060e00151906040519060208201927fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d466845260408301526060820152606081526200f5de6080826200dcfe565b7f048183200000000000000000000000000000000000000000000000000000000060005260045260246000fd5b845173ffffffffffffffffffffffffffffffffffffffff168352602094850194869450909201916001016201090a565b9081518110156200e6f3570160200190565b60ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa99116019060ff82116200eb2157565b60ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc99116019060ff82116200eb2157565b60ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd09116019060ff82116200eb215756fea2646970667358221220cb84ec7e62f24f8a7a42be4806a7af7ea15ed3cf3206bc72532d6bbc97419cd364736f6c634300081c00336080806040523460155761029b908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c6332c02a141461002757600080fd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019f5760043573ffffffffffffffffffffffffffffffffffffffff811680820361019f5760243580916100eb6101176040519261008a846101d3565b602f84527f6041600e3d396021805130553df33d3d36153402601f57363d3d373d363d305460208501527f5af43d82803e903d91601f57fd5bf300000000000000000000000000000000006040850152604051928391602083019586610235565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826101f4565b519034f59173ffffffffffffffffffffffffffffffffffffffff8316156101595760405173ffffffffffffffffffffffffffffffffffffffff84168152602090f35b7f8caac8050000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff1660045260245260446000fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6060810190811067ffffffffffffffff8211176101ef57604052565b6101a4565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176101ef57604052565b9291909283519060005b8281106102525750019081526020019150565b806020809288010151818401520161023f56fea2646970667358221220be04d6b1fea99f8da63c42ae89d7f45bd43865e722cddb9cb70f1713011e9fe264736f6c634300081c003361010080604052346101ae57604081617f1f803803809161002082856101b3565b8339810103126101ae5761003f6020610038836101d6565b92016101d6565b604051909190613dff808201906001600160401b0382118383101761018c57602091839161412083396001600160a01b03861681520301906000f09081156101a257604051606081016001600160401b0381118282101761018c576040908152602f82527f6041600e3d396021805130553df33d3d36153402601f57363d3d373d363d305460208301526e5af43d82803e903d91601f57fd5bf360881b82820152519060005b602f811061017757505030604f820152604f8152610104606f826101b3565b805160209091012060805260a0526001600160a01b031660c05260e052604051613f3590816101eb8239608051818181610c210152613b59015260a051818181610d6f0152613b2a015260c051818181610cd6015261119d015260e0518181816110600152818161120c0152611aa00152f35b806020809284010151828286010152016100e5565b634e487b7160e01b600052604160045260246000fd5b6040513d6000823e3d90fd5b600080fd5b601f909101601f19168101906001600160401b0382119082101761018c57604052565b51906001600160a01b03821682036101ae5756fe6080604052600436101561001e575b361561001c5761001c611c68565b005b60003560e01c806223de29146101ad578063025b22bc146101a857806313792a4a146101a3578063150b7a021461019e5780631626ba7e1461019957806319822f7c146101945780631a9b23371461018f5780631f6a1eb91461018a578063257671f51461018557806329561426146101805780632dd310001461017b5780634fcf3eca146101765780636ea44577146101715780638943ec021461016c5780638c3f55631461016757806392dcb3fc146101625780639c145aed1461015d5780639f69ef5414610158578063a65d69d414610153578063aaf10f421461014e578063ad55366b14610149578063b93ea7ad14610144578063bc197c811461013f578063f23a6e611461013a5763f727ef1c0361000e5761158b565b6114fe565b61142c565b6112cd565b611281565b611230565b6111c1565b611152565b61103a565b610fdc565b610fa0565b610f1c565b610eed565b610d93565b610d24565b610c44565b610beb565b610aff565b610a9c565b6109e7565b61095f565b6108d2565b6107d5565b6102fb565b61026f565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101d557565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101d557565b6044359073ffffffffffffffffffffffffffffffffffffffff821682036101d557565b359073ffffffffffffffffffffffffffffffffffffffff821682036101d557565b9181601f840112156101d55782359167ffffffffffffffff83116101d557602083818601950101116101d557565b346101d55760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576102a66101b2565b506102af6101da565b506102b86101fd565b5060843567ffffffffffffffff81116101d5576102d9903690600401610241565b505060a43567ffffffffffffffff81116101d55761001c903690600401610241565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55761032d6101b2565b30330361033d5761001c90611d31565b7fa19dbf00000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff8211176103b657604052565b61036b565b6040810190811067ffffffffffffffff8211176103b657604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176103b657604052565b6040519061042760e0836103d7565b565b60405190610427610120836103d7565b359060ff821682036101d557565b359081151582036101d557565b67ffffffffffffffff81116103b65760051b60200190565b67ffffffffffffffff81116103b657601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926104b28261046c565b916104c060405193846103d7565b8294818452818301116101d5578281602093846000960137010152565b9080601f830112156101d5578160206104f8933591016104a6565b90565b81601f820112156101d55780359061051282610454565b9261052060405194856103d7565b82845260208085019360051b830101918183116101d55760208101935b83851061054c57505050505090565b843567ffffffffffffffff81116101d557820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082860301126101d557610593610418565b916105a060208301610220565b83526040820135602084015260608201359267ffffffffffffffff84116101d55760e0836105d58860208098819801016104dd565b6040840152608081013560608401526105f060a08201610447565b608084015261060160c08201610447565b60a0840152013560c082015281520194019361053d565b9080601f830112156101d557813561062f81610454565b9261063d60405194856103d7565b81845260208085019260051b8201019283116101d557602001905b8282106106655750505090565b6020809161067284610220565b815201910190610658565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126101d55760043567ffffffffffffffff81116101d5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82850301126101d5576106ef610429565b906106fc81600401610439565b825261070a60248201610447565b6020830152604481013567ffffffffffffffff81116101d557846004610732928401016104fb565b6040830152606481013560608301526084810135608083015260a481013567ffffffffffffffff81116101d55784600461076e928401016104dd565b60a083015260c481013560c083015260e481013560e083015261010481013567ffffffffffffffff81116101d557600485916107ab930101610618565b610100820152916024359067ffffffffffffffff82116101d5576107d191600401610241565b9091565b346101d5576107e33661067d565b90916101008101926107fe6107f9855151611693565b6116b3565b9160005b85518051821015610865579061085f61083a61082083600195611731565b5173ffffffffffffffffffffffffffffffffffffffff1690565b6108448388611731565b9073ffffffffffffffffffffffffffffffffffffffff169052565b01610802565b505083838661087a3361084483515185611731565b52610886818484611d80565b50156108985760405160018152602090f35b6108ce906040519384937ff58cc8b50000000000000000000000000000000000000000000000000000000085526004850161198c565b0390fd5b346101d55760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576109096101b2565b506109126101da565b5060643567ffffffffffffffff81116101d557610933903690600401610241565b505060206040517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b346101d55760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760043560243567ffffffffffffffff81116101d5576020916109b76109bd923690600401610241565b916119b1565b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b346101d55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760043567ffffffffffffffff81116101d5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126101d557610a6a60209160243560443591600401611a86565b604051908152f35b7fffffffff000000000000000000000000000000000000000000000000000000008116036101d557565b346101d55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576020610ae1600435610adc81610a72565b611f65565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760043567ffffffffffffffff81116101d557610b49903690600401610241565b9060243567ffffffffffffffff81116101d557610b6d610b77913690600401610241565b9190935a9361209a565b91610b8b606084015160808501519061235e565b610b96828585611d80565b929015610ba8575061001c93506124b7565b836108ce86926040519384937fa2b6d61b0000000000000000000000000000000000000000000000000000000085526004850161198c565b60009103126101d557565b346101d55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346101d55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760043530330361033d578015610cfa576020817f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf855604051908152a161001c7f0000000000000000000000000000000000000000000000000000000000000000611d31565b7f4294d1270000000000000000000000000000000000000000000000000000000060005260046000fd5b346101d55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d557600435610dc981610a72565b30330361033d5773ffffffffffffffffffffffffffffffffffffffff610dee82611f65565b1615610e545760407fffffffff000000000000000000000000000000000000000000000000000000007f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19216610e45600082612d0f565b815190815260006020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f1c3812cc000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101d5576004359067ffffffffffffffff82116101d5576107d191600401610241565b610ef636610ea4565b9030330361033d57610f0c61001c925a9261209a565b90610f16826127db565b906124b7565b346101d55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d557610f536101b2565b5060443567ffffffffffffffff81116101d557610f74903690600401610241565b505060206040517f8943ec02000000000000000000000000000000000000000000000000000000008152f35b346101d55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576020610a6a60043561286f565b346101d55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760406110186004356128b5565b73ffffffffffffffffffffffffffffffffffffffff8351921682526020820152f35b346101d55761104836610ea4565b9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001680156111285733036110fa57303b156101d5576110ce9160009160405193849283927f6ea4457700000000000000000000000000000000000000000000000000000000845260048401611c27565b038183305af180156110f5576110e057005b806110ef600061001c936103d7565b80610be0565b6119fd565b7f1d6ddbf4000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7fd13d78350000000000000000000000000000000000000000000000000000000060005260046000fd5b346101d55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101d55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101d55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576020305473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346101d55760c061129d6000806112973661067d565b9161297d565b926112a9839293613ac6565b906040519586526020860152151560408501526060840152608083015260a0820152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760043561130381610a72565b61130b6101da565b9030330361033d5773ffffffffffffffffffffffffffffffffffffffff61133182611f65565b166113ab577f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19173ffffffffffffffffffffffffffffffffffffffff7fffffffff0000000000000000000000000000000000000000000000000000000060409316911661139e8183612d0f565b82519182526020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f5b4d6d6a000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b9181601f840112156101d55782359167ffffffffffffffff83116101d5576020808501948460051b0101116101d557565b346101d55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576114636101b2565b5061146c6101da565b5060443567ffffffffffffffff81116101d55761148d9036906004016113fb565b505060643567ffffffffffffffff81116101d5576114af9036906004016113fb565b505060843567ffffffffffffffff81116101d5576114d1903690600401610241565b50506040517fbc197c81000000000000000000000000000000000000000000000000000000008152602090f35b346101d55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576115356101b2565b5061153e6101da565b5060843567ffffffffffffffff81116101d55761155f903690600401610241565b505060206040517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b346101d55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576004356115c56101da565b604435916bffffffffffffffffffffffff83168093036101d55730330361033d578273ffffffffffffffffffffffffffffffffffffffff836116507febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1967fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606097881b161785612cca565b6040519384521660208301526040820152a1005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90600182018092116116a157565b611664565b919082018092116116a157565b906116bd82610454565b6116ca60405191826103d7565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06116f88294610454565b0190602036910137565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518210156117455760209160051b010190565b611702565b919082519283825260005b8481106117945750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201611755565b9080602083519182815201916020808360051b8301019401926000915b8383106117d557505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080611848604085015160e0604086015260e085019061174a565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152970193019301919392906117c6565b906020808351928381520192019060005b81811061189d5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101611890565b805160ff1682526104f891602082810151151590820152610100611927611901604085015161012060408601526101208501906117a9565b606085015160608501526080850151608085015260a085015184820360a086015261174a565b9260c081015160c084015260e081015160e084015201519061010081840391015261187f565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b916119a36104f894926040855260408501906118c9565b92602081850391015261194d565b906119ce92916119bf611f0a565b906003825260e0820152611d80565b50156119f8577f1626ba7e0000000000000000000000000000000000000000000000000000000090565b600090565b6040513d6000823e3d90fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101d5570180359067ffffffffffffffff82116101d5576020019181360383136101d557565b908160209103126101d557516104f881610a72565b6040906104f894928152816020820152019161194d565b91909173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016918215611128578233036110fa5780611bb8575b506020915080610100611ae8920190611a09565b92611b2060405194859384937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611a6f565b0381305afa9081156110f5577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091611b89575b501603611b8457600090565b600190565b611bab915060203d602011611bb1575b611ba381836103d7565b810190611a5a565b38611b78565b503d611b99565b823b156101d5576040517fb760faf900000000000000000000000000000000000000000000000000000000815230600482015292600091849160249183915af19081156110f557602092611ae892611c12575b5090611ad4565b806110ef6000611c21936103d7565b38611c0b565b9160206104f893818152019161194d565b3d15611c63573d90611c498261046c565b91611c5760405193846103d7565b82523d6000602084013e565b606090565b600436108015611c755750565b611cab906000357fffffffff00000000000000000000000000000000000000000000000000000000811691611cfd575b50611f65565b73ffffffffffffffffffffffffffffffffffffffff8116611cc95750565b60008091604051368382378036810184815203915af4611ce7611c38565b9015611cf557602081519101f35b602081519101fd5b7fffffffff000000000000000000000000000000000000000000000000000000008092503660040360031b1b161638611ca5565b60207f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca039180305573ffffffffffffffffffffffffffffffffffffffff60405191168152a1565b90156117455790565b91907f800000000000000000000000000000000000000000000000000000000000000080611dd7611db18585611d77565b357fff000000000000000000000000000000000000000000000000000000000000001690565b1614611e36576000918291611deb9461297d565b905091909192808210611e06575050611e0390613ac6565b91565b7ffd41fcba0000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b5050611e41906127db565b90611e4b826128b5565b42811115611ed8575073ffffffffffffffffffffffffffffffffffffffff81168015159081611ecd575b50611e81575060019190565b7f8945c3130000000000000000000000000000000000000000000000000000000060005260048390523360245273ffffffffffffffffffffffffffffffffffffffff1660445260646000fd5b905033141538611e75565b7ff95b6ab700000000000000000000000000000000000000000000000000000000600052600484905260245260446000fd5b60405190610120820182811067ffffffffffffffff8211176103b6576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b73ffffffffffffffffffffffffffffffffffffffff906040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a120845216604082015260408152611fdc6060826103d7565b519020541690565b90611fee82610454565b611ffb60405191826103d7565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06120298294610454565b019060005b82811061203a57505050565b6020906040516120498161039a565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c08201528282850101520161202e565b909392938483116101d55784116101d5578101920390565b9190916120a5611f0a565b6000815292600190823560f81c827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818316016123475750600060608701525b60076120f460ff831660011c90565b16806122f6575b506010818116036122c157506001925b61211484611fe4565b92604087019384526000905b85821061212f57505050505050565b8281013560f81c9060010190918160018085160361229f575061217330612157838951611731565b519073ffffffffffffffffffffffffffffffffffffffff169052565b60028084161461227f575b600480841614612231575b6008808416146121fe575b6121e76121e160c0856121c08a60806121b78860108060019c9d16149351611731565b51019015159052565b6121d78a60a06121b7886020808716149351611731565b1660061c60031690565b60ff1690565b60c06121f4838951611731565b5101520190612120565b6001916121e7906121e19060c090878101359060200196906060612223878d51611731565b510152959450505050612194565b90612279908481013560e81c9060030161227261225961225184846116a6565b838a8a612082565b91906040612268888d51611731565b51019236916104a6565b90526116a6565b90612189565b90838101359060200191906020612297838951611731565b51015261217e565b6122bc92508481013560601c906014019290612157838951611731565b612173565b6020908116036122e35761ffff918381013560f01c906002015b92169261210b565b60ff918381013560f81c906001016122db565b61233a919385929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b92906080870152386120fb565b80850135606090811c9088015260140192506120e5565b906123688261286f565b8181036123ee57509060017f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f8819201908160405160208101907f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8252836040820152604081526123d86060826103d7565b51902055604080519182526020820192909252a1565b917f9b6514f40000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b61243a604092959493956060835260608301906118c9565b9460208201520152565b926104f896959260c09592855260208501526040840152606083015260808201528160a0820152019061174a565b6104f8939260609282526020820152816040820152019061174a565b6124a46104f894926060835260608301906118c9565b926020820152604081840391015261174a565b916000604082019384515190825b8281106124d6575b50505050505050565b6124e1818851611731565b51936124f060a0860151151590565b806127d3575b61279357506000936060810151801580158061278a575b6127525784906125206080850151151590565b1561270c576125cb92612547855173ffffffffffffffffffffffffffffffffffffffff1690565b911561270657505a905b6125c68b61259a60608d01516040890151908c8b604051998a967f4c4e814c00000000000000000000000000000000000000000000000000000000602089015260248801612444565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018552846103d7565b612c9d565b1561260e575b506040805187815260208101839052600192917f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a91a15b016124c5565b60c0018051156126bd57600181511461267e575160021461262f57386125d1565b9493505050507fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b925061266f612663612caf565b60405193849384612472565b0390a1388080808080806124cd565b50846108ce61268b612caf565b6040519384937f7f6b0bb10000000000000000000000000000000000000000000000000000000085526004850161248e565b509250600180937f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d6126fe6126f0612caf565b604051918291858c84612472565b0390a1612608565b90612551565b835161274793925073ffffffffffffffffffffffffffffffffffffffff169160208501519160001461274c57505a905b604085015192612c8b565b6125cb565b9061273c565b83886108ce5a6040519384937f2139527400000000000000000000000000000000000000000000000000000000855260048501612422565b50815a1061250d565b6040805188815260208101849052919550600192917f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b91819081016126fe565b5080156124f6565b61283d6128696127fb6127f5602085015115153090612d4e565b93612e49565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826103d7565b51902090565b60405160208101917f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83526040820152604081526128ae6060826103d7565b5190205490565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e8683526040820152604081526128f46060826103d7565b51902054906bffffffffffffffffffffffff8260601c921690565b6040519061291c826103bb565b60006020838281520152565b908160409103126101d557602060405191612942836103bb565b805183520151602082015290565b60409073ffffffffffffffffffffffffffffffffffffffff6104f89493168152816020820152019061174a565b909491939291853560f81c6001909381908761299761290f565b9360408089161480612c6d575b612b70575b505050600180861614612b4a5760028581161460208501526007600286901c1688820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101908096918196602016612a199060051c90565b612a2290611693565b8a820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101959098899a81612a6e846127db565b988993612a7a93612082565b91612a8493613260565b9098612a9891600052602052604060002090565b90612aab91600052602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff16612ad491600052602052604060002090565b94815190868215159283612b3f575b505081612b30575b50612af35750565b6040517fccbb534f000000000000000000000000000000000000000000000000000000008152815160048201526020909101516024820152604490fd5b90506020820151101538612aeb565b141591508638612ae3565b86612b659792949550612b5d9398612082565b93909261303e565b919394909293929190565b8a81013560601c985060140192509087908a90849015612b94575b508291506129a9565b60038101955073ffffffffffffffffffffffffffffffffffffffff945081013560e81c92604092612c17929091612be291612bdb918990612bd589836116a6565b92612082565b36916104a6565b83519586809481937fccce3bc80000000000000000000000000000000000000000000000000000000083523060048401612950565b0392165afa80156110f557612c3592600091612c3e575b50926116a6565b86388981612b8b565b612c60915060403d604011612c66575b612c5881836103d7565b810190612928565b38612c2e565b503d612c4e565b5073ffffffffffffffffffffffffffffffffffffffff8916156129a4565b9160009391849360208451940192f190565b9160009291839260208351930191f490565b3d90604051916020818401016040528083526000602084013e565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e868352604082015260408152612d096060826103d7565b51902055565b60405160208101917fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1208352604082015260408152612d096060826103d7565b15612dfe576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a0815261286960c0826103d7565b4690612d57565b805160209091019060005b818110612e1d5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101612e10565b610100810151604051612e648161283d602082018095612e05565b51902090612e73815160ff1690565b60ff811680612eec57505090612869612e8f6040840151613bc3565b9261283d60806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b60018103612f4a57505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46693810193845290810191909152606081019290925290612869816080810161283d565b60028103612fa057505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e460208201908152918101929092526060820192909252612869816080810161283d565b600303612ff4575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46660208201908152918101929092526060820192909252612869816080810161283d565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b9061243a906040939695949660608452606084019161194d565b919492909260009560009560009560009560009561305a611f0a565b60028152937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9460005b8281106130b1575050505050505080511515806130a3575b612af35750565b50602081015184111561309c565b600381019d50959b50939950919750929091906130d5908b9085013560e81c6116a6565b958a6000848903613219575089915b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c036131e9575090600161311e89613125948789612082565b908b61297d565b9c939c9b929b9a919a99909a9b9d8e9d9e8f905b106131a35750928b88511461319a575b808b101561316857508a60c08501528992959295949194939093613084565b7f37daf62b0000000000000000000000000000000000000000000000000000000060005260048b905260245260446000fd5b60008852613149565b8d8f6108ce6131b485858c8e612082565b9390926040519485947fb006aba000000000000000000000000000000000000000000000000000000000865260048601613024565b9798999a9160016131ff8b61320694888a612082565b908661297d565b50929d919c909b929a9092918e8e613139565b916130e4565b73ffffffffffffffffffffffffffffffffffffffff6104f895936060938352166020820152816040820152019161194d565b908160209103126101d5575190565b9391909360009460009460005b81811061327b575050505050565b8481013560f881901c9860019092019788979692909160fc1c988915613a5f575060018914613a1f5760028914613862576003891461383357600489146137b2576006891461371257600589146136c457600789146135fd57600889146135a7576009891461347e57600a891461331b577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b9091929394959697506003891697881561346d575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691019081019081613393918787612082565b6040517f898bd921000000000000000000000000000000000000000000000000000000008152939184916133cb918a60048501611a6f565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa9182156110f55761340e9360009361343a575b5060ff909a168091019a613e8f565b908015613434579061342891600052602052604060002090565b955b939291909361326d565b50613428565b60ff91935061345f9060203d8111613466575b61345781836103d7565b810190613251565b92906133ff565b503d61344d565b8084013560f81c9850600101613330565b90919293949596975060038916978815613596575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190810190816134f6918787612082565b6040517f13792a4a0000000000000000000000000000000000000000000000000000000081529391849161352e918b6004850161198c565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa9182156110f5576135709360009361343a575060ff909a168091019a613e8f565b908015613590579061358a91600052602052604060002090565b9561342a565b5061358a565b8084013560f81c9850600101613493565b9850602087019750949593949293919290918201356135c586613e36565b81146135d5575b61357090613e50565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506135cc565b975090919293949597600f169687156136b2575b602060006136236136909a9b86613cfe565b9c9092918a6040516136668161283d8a82019485603c917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008252601c8201520190565b51902092604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa156110f5576135709060ff6000519a1680910199613d41565b600189019883013560f81c9750613611565b9850602087019750949593949293919290918201358085146136ea575b61357090613df7565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506136e1565b989091929394959662ffffff98506137346121e1600c8416603f9060021c1690565b91821561379e575b600316801561378d575b90819061377190613769908781013560e81c906003019c168c01809c8989612082565b90898b613260565b911115613784575b906135709291613dac565b99820199613779565b50600281019084013560f01c613746565b8482013560f81c925060019091019061373c565b975097613808613815929394959697600f61381d93169085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290830180938686612082565b908688613260565b9061358a92980198600052602052604060002090565b985096509394929391929091908082013590602001968015613590579061358a91600052602052604060002090565b90919293949596975060038916978815613a0e575b8084013560601c996138d691601401906138969060021c6003166121e1565b9085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9081019061393a60208c6138ec85858b8b612082565b919073ffffffffffffffffffffffffffffffffffffffff8c604051968795869485937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611a6f565b0392165afa9081156110f5577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000916000916139f0575b5016036139ac57509060ff61357092991680910199613d41565b6108ce6139bd8c9389938989612082565b906040519485947fb2fed7ae0000000000000000000000000000000000000000000000000000000086526004860161321f565b613a08915060203d8111611bb157611ba381836103d7565b38613992565b8381013560f81c9850600101613877565b98600f91929394959697985016968715613a4e575b60148101976135709160ff9091169084013560601c613d41565b8281013560f81c9750600101613a34565b98509091929394959698600f16978815613ab1575b5060206000613a876136909a9b86613cfe565b9c90916040519384938c859094939260ff6060936080840197845216602083015260408201520152565b60018101995083013560f81c97506020613a74565b73ffffffffffffffffffffffffffffffffffffffff9060405160208101917fff0000000000000000000000000000000000000000000000000000000000000083527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060601b16602183015260358201527f0000000000000000000000000000000000000000000000000000000000000000605582015260558152613b8c6075826103d7565b51902016301490565b805160209091019060005b818110613bad5750505090565b8251845260209384019390920191600101613ba0565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0613c09613bf383610454565b92613c0160405194856103d7565b808452610454565b0136602083013760005b8351811015613ce55780613c2960019286611731565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152613cd1610120826103d7565b519020613cde8285611731565b5201613c13565b509091506040516128698161283d602082018095613b95565b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff81116116a15791565b90604051907fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208301937f53657175656e6365207369676e65723a0a000000000000000000000000000000855260601b1660318301526045820152604581526128696065826103d7565b916040519160208301937f53657175656e6365206e657374656420636f6e6669673a0a00000000000000008552603884015260588301526078820152607881526128696098826103d7565b60405160208101917f53657175656e636520737461746963206469676573743a0a000000000000000083526038820152603881526128696058826103d7565b61283d6128696127fb6127f5600060208601511515612d4e565b60405160208101917f53657175656e636520616e792061646472657373207375626469676573743a0a83526040820152604081526128696060826103d7565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e63652073617069656e7420636f6e6669673a0a00000000000000865260601b166039840152604d830152606d820152606d8152612869608d826103d756fea2646970667358221220825b940dd691f79f4782ba8dca1eaa7ff741f07679c4faf28637d8117499069a64736f6c634300081c003360a034607457601f613dff38819003918201601f19168301916001600160401b03831184841017607957808492602094604052833981010312607457516001600160a01b0381168103607457608052604051613d6f90816100908239608051818181610fe90152818161112601526119ba0152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6080604052600436101561001e575b361561001c5761001c611b82565b005b60003560e01c806223de291461018d578063025b22bc1461018857806313792a4a14610183578063150b7a021461017e5780631626ba7e1461017957806319822f7c146101745780631a9b23371461016f5780631f6a1eb91461016a57806329561426146101655780634fcf3eca1461016057806351605d801461015b5780636ea44577146101565780638943ec02146101515780638c3f55631461014c57806392dcb3fc146101475780639c145aed14610142578063a65d69d41461013d578063aaf10f4214610138578063ad55366b14610133578063b93ea7ad1461012e578063bc197c8114610129578063f23a6e61146101245763f727ef1c0361000e576114a5565b611418565b611346565b6111e7565b61119b565b61114a565b6110db565b610fc3565b610f65565b610f29565b610ea5565b610e76565b610dd2565b610cb6565b610bfd565b610b1c565b610ab9565b610a04565b61097c565b6108ef565b6107f2565b6102db565b61024f565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101b557565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101b557565b6044359073ffffffffffffffffffffffffffffffffffffffff821682036101b557565b359073ffffffffffffffffffffffffffffffffffffffff821682036101b557565b9181601f840112156101b55782359167ffffffffffffffff83116101b557602083818601950101116101b557565b346101b55760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557610286610192565b5061028f6101ba565b506102986101dd565b5060843567ffffffffffffffff81116101b5576102b9903690600401610221565b505060a43567ffffffffffffffff81116101b55761001c903690600401610221565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55761030d610192565b30330361035a576020817f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca0392305573ffffffffffffffffffffffffffffffffffffffff60405191168152a1005b7fa19dbf00000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff8211176103d357604052565b610388565b6040810190811067ffffffffffffffff8211176103d357604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176103d357604052565b6040519061044460e0836103f4565b565b60405190610444610120836103f4565b359060ff821682036101b557565b359081151582036101b557565b67ffffffffffffffff81116103d35760051b60200190565b67ffffffffffffffff81116103d357601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926104cf82610489565b916104dd60405193846103f4565b8294818452818301116101b5578281602093846000960137010152565b9080601f830112156101b557816020610515933591016104c3565b90565b81601f820112156101b55780359061052f82610471565b9261053d60405194856103f4565b82845260208085019360051b830101918183116101b55760208101935b83851061056957505050505090565b843567ffffffffffffffff81116101b557820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082860301126101b5576105b0610435565b916105bd60208301610200565b83526040820135602084015260608201359267ffffffffffffffff84116101b55760e0836105f28860208098819801016104fa565b60408401526080810135606084015261060d60a08201610464565b608084015261061e60c08201610464565b60a0840152013560c082015281520194019361055a565b9080601f830112156101b557813561064c81610471565b9261065a60405194856103f4565b81845260208085019260051b8201019283116101b557602001905b8282106106825750505090565b6020809161068f84610200565b815201910190610675565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126101b55760043567ffffffffffffffff81116101b5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82850301126101b55761070c610446565b9061071981600401610456565b825261072760248201610464565b6020830152604481013567ffffffffffffffff81116101b55784600461074f92840101610518565b6040830152606481013560608301526084810135608083015260a481013567ffffffffffffffff81116101b55784600461078b928401016104fa565b60a083015260c481013560c083015260e481013560e083015261010481013567ffffffffffffffff81116101b557600485916107c8930101610635565b610100820152916024359067ffffffffffffffff82116101b5576107ee91600401610221565b9091565b346101b5576108003661069a565b909161010081019261081b6108168551516115ad565b6115cd565b9160005b85518051821015610882579061087c61085761083d8360019561164b565b5173ffffffffffffffffffffffffffffffffffffffff1690565b610861838861164b565b9073ffffffffffffffffffffffffffffffffffffffff169052565b0161081f565b5050838386610897336108618351518561164b565b526108a3818484611c54565b50156108b55760405160018152602090f35b6108eb906040519384937ff58cc8b5000000000000000000000000000000000000000000000000000000008552600485016118a6565b0390fd5b346101b55760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557610926610192565b5061092f6101ba565b5060643567ffffffffffffffff81116101b557610950903690600401610221565b505060206040517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b346101b55760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043560243567ffffffffffffffff81116101b5576020916109d46109da923690600401610221565b916118cb565b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b346101b55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043567ffffffffffffffff81116101b5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126101b557610a87602091602435604435916004016119a0565b604051908152f35b7fffffffff000000000000000000000000000000000000000000000000000000008116036101b557565b346101b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576020610afe600435610af981610a8f565b611e39565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043567ffffffffffffffff81116101b557610b66903690600401610221565b9060243567ffffffffffffffff81116101b557610b8a610b94913690600401610221565b9190935a93611f6e565b91610ba86060840151608085015190612232565b610bb3828585611c54565b929015610bc5575061001c935061238b565b836108eb86926040519384937fa2b6d61b000000000000000000000000000000000000000000000000000000008552600485016118a6565b346101b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043530330361035a578015610c8c576020817f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf855604051908152a1005b7f4294d1270000000000000000000000000000000000000000000000000000000060005260046000fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557600435610cec81610a8f565b30330361035a5773ffffffffffffffffffffffffffffffffffffffff610d1182611e39565b1615610d775760407fffffffff000000000000000000000000000000000000000000000000000000007f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19216610d68600082612be3565b815190815260006020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f1c3812cc000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b60009103126101b557565b346101b55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760207fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf854604051908152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101b5576004359067ffffffffffffffff82116101b5576107ee91600401610221565b610e7f36610e2d565b9030330361035a57610e9561001c925a92611f6e565b90610e9f826126af565b9061238b565b346101b55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557610edc610192565b5060443567ffffffffffffffff81116101b557610efd903690600401610221565b505060206040517f8943ec02000000000000000000000000000000000000000000000000000000008152f35b346101b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576020610a87600435612743565b346101b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576040610fa1600435612789565b73ffffffffffffffffffffffffffffffffffffffff8351921682526020820152f35b346101b557610fd136610e2d565b9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001680156110b157330361108357303b156101b5576110579160009160405193849283927f6ea4457700000000000000000000000000000000000000000000000000000000845260048401611b41565b038183305af1801561107e5761106957005b80611078600061001c936103f4565b80610dc7565b611917565b7f1d6ddbf4000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7fd13d78350000000000000000000000000000000000000000000000000000000060005260046000fd5b346101b55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101b55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576020305473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346101b55760c06111b76000806111b13661069a565b91612851565b926111c383929361399a565b906040519586526020860152151560408501526060840152608083015260a0820152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043561121d81610a8f565b6112256101ba565b9030330361035a5773ffffffffffffffffffffffffffffffffffffffff61124b82611e39565b166112c5577f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19173ffffffffffffffffffffffffffffffffffffffff7fffffffff000000000000000000000000000000000000000000000000000000006040931691166112b88183612be3565b82519182526020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f5b4d6d6a000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b9181601f840112156101b55782359167ffffffffffffffff83116101b5576020808501948460051b0101116101b557565b346101b55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55761137d610192565b506113866101ba565b5060443567ffffffffffffffff81116101b5576113a7903690600401611315565b505060643567ffffffffffffffff81116101b5576113c9903690600401611315565b505060843567ffffffffffffffff81116101b5576113eb903690600401610221565b50506040517fbc197c81000000000000000000000000000000000000000000000000000000008152602090f35b346101b55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55761144f610192565b506114586101ba565b5060843567ffffffffffffffff81116101b557611479903690600401610221565b505060206040517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b346101b55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576004356114df6101ba565b604435916bffffffffffffffffffffffff83168093036101b55730330361035a578273ffffffffffffffffffffffffffffffffffffffff8361156a7febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1967fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606097881b161785612b9e565b6040519384521660208301526040820152a1005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90600182018092116115bb57565b61157e565b919082018092116115bb57565b906115d782610471565b6115e460405191826103f4565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06116128294610471565b0190602036910137565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805182101561165f5760209160051b010190565b61161c565b919082519283825260005b8481106116ae5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b8060208092840101518282860101520161166f565b9080602083519182815201916020808360051b8301019401926000915b8383106116ef57505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080611762604085015160e0604086015260e0850190611664565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152970193019301919392906116e0565b906020808351928381520192019060005b8181106117b75750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016117aa565b805160ff1682526105159160208281015115159082015261010061184161181b604085015161012060408601526101208501906116c3565b606085015160608501526080850151608085015260a085015184820360a0860152611664565b9260c081015160c084015260e081015160e0840152015190610100818403910152611799565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b916118bd61051594926040855260408501906117e3565b926020818503910152611867565b906118e892916118d9611dde565b906003825260e0820152611c54565b5015611912577f1626ba7e0000000000000000000000000000000000000000000000000000000090565b600090565b6040513d6000823e3d90fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101b5570180359067ffffffffffffffff82116101b5576020019181360383136101b557565b908160209103126101b5575161051581610a8f565b604090610515949281528160208201520191611867565b91909173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169182156110b1578233036110835780611ad2575b506020915080610100611a02920190611923565b92611a3a60405194859384937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611989565b0381305afa90811561107e577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091611aa3575b501603611a9e57600090565b600190565b611ac5915060203d602011611acb575b611abd81836103f4565b810190611974565b38611a92565b503d611ab3565b823b156101b5576040517fb760faf900000000000000000000000000000000000000000000000000000000815230600482015292600091849160249183915af190811561107e57602092611a0292611b2c575b50906119ee565b806110786000611b3b936103f4565b38611b25565b916020610515938181520191611867565b3d15611b7d573d90611b6382610489565b91611b7160405193846103f4565b82523d6000602084013e565b606090565b600436108015611b8f5750565b611bc5906000357fffffffff00000000000000000000000000000000000000000000000000000000811691611c17575b50611e39565b73ffffffffffffffffffffffffffffffffffffffff8116611be35750565b60008091604051368382378036810184815203915af4611c01611b52565b9015611c0f57602081519101f35b602081519101fd5b7fffffffff000000000000000000000000000000000000000000000000000000008092503660040360031b1b161638611bbf565b901561165f5790565b91907f800000000000000000000000000000000000000000000000000000000000000080611cab611c858585611c4b565b357fff000000000000000000000000000000000000000000000000000000000000001690565b1614611d0a576000918291611cbf94612851565b905091909192808210611cda575050611cd79061399a565b91565b7ffd41fcba0000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b5050611d15906126af565b90611d1f82612789565b42811115611dac575073ffffffffffffffffffffffffffffffffffffffff81168015159081611da1575b50611d55575060019190565b7f8945c3130000000000000000000000000000000000000000000000000000000060005260048390523360245273ffffffffffffffffffffffffffffffffffffffff1660445260646000fd5b905033141538611d49565b7ff95b6ab700000000000000000000000000000000000000000000000000000000600052600484905260245260446000fd5b60405190610120820182811067ffffffffffffffff8211176103d3576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b73ffffffffffffffffffffffffffffffffffffffff906040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a120845216604082015260408152611eb06060826103f4565b519020541690565b90611ec282610471565b611ecf60405191826103f4565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611efd8294610471565b019060005b828110611f0e57505050565b602090604051611f1d816103b7565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c082015282828501015201611f02565b909392938483116101b55784116101b5578101920390565b919091611f79611dde565b6000815292600190823560f81c827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8183160161221b5750600060608701525b6007611fc860ff831660011c90565b16806121ca575b5060108181160361219557506001925b611fe884611eb8565b92604087019384526000905b85821061200357505050505050565b8281013560f81c9060010190918160018085160361217357506120473061202b83895161164b565b519073ffffffffffffffffffffffffffffffffffffffff169052565b600280841614612153575b600480841614612105575b6008808416146120d2575b6120bb6120b560c0856120948a608061208b8860108060019c9d1614935161164b565b51019015159052565b6120ab8a60a061208b88602080871614935161164b565b1660061c60031690565b60ff1690565b60c06120c883895161164b565b5101520190611ff4565b6001916120bb906120b59060c0908781013590602001969060606120f7878d5161164b565b510152959450505050612068565b9061214d908481013560e81c9060030161214661212d61212584846115c0565b838a8a611f56565b9190604061213c888d5161164b565b51019236916104c3565b90526115c0565b9061205d565b9083810135906020019190602061216b83895161164b565b510152612052565b61219092508481013560601c90601401929061202b83895161164b565b612047565b6020908116036121b75761ffff918381013560f01c906002015b921692611fdf565b60ff918381013560f81c906001016121af565b61220e919385929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290608087015238611fcf565b80850135606090811c908801526014019250611fb9565b9061223c82612743565b8181036122c257509060017f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f8819201908160405160208101907f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8252836040820152604081526122ac6060826103f4565b51902055604080519182526020820192909252a1565b917f9b6514f40000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b61230e604092959493956060835260608301906117e3565b9460208201520152565b9261051596959260c09592855260208501526040840152606083015260808201528160a08201520190611664565b6105159392606092825260208201528160408201520190611664565b61237861051594926060835260608301906117e3565b9260208201526040818403910152611664565b916000604082019384515190825b8281106123aa575b50505050505050565b6123b581885161164b565b51936123c460a0860151151590565b806126a7575b61266757506000936060810151801580158061265e575b6126265784906123f46080850151151590565b156125e05761249f9261241b855173ffffffffffffffffffffffffffffffffffffffff1690565b91156125da57505a905b61249a8b61246e60608d01516040890151908c8b604051998a967f4c4e814c00000000000000000000000000000000000000000000000000000000602089015260248801612318565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018552846103f4565b612b71565b156124e2575b506040805187815260208101839052600192917f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a91a15b01612399565b60c001805115612591576001815114612552575160021461250357386124a5565b9493505050507fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b9250612543612537612b83565b60405193849384612346565b0390a1388080808080806123a1565b50846108eb61255f612b83565b6040519384937f7f6b0bb100000000000000000000000000000000000000000000000000000000855260048501612362565b509250600180937f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d6125d26125c4612b83565b604051918291858c84612346565b0390a16124dc565b90612425565b835161261b93925073ffffffffffffffffffffffffffffffffffffffff169160208501519160001461262057505a905b604085015192612b5f565b61249f565b90612610565b83886108eb5a6040519384937f21395274000000000000000000000000000000000000000000000000000000008552600485016122f6565b50815a106123e1565b6040805188815260208101849052919550600192917f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b91819081016125d2565b5080156123ca565b61271161273d6126cf6126c9602085015115153090612c22565b93612d1d565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826103f4565b51902090565b60405160208101917f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83526040820152604081526127826060826103f4565b5190205490565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e8683526040820152604081526127c86060826103f4565b51902054906bffffffffffffffffffffffff8260601c921690565b604051906127f0826103d8565b60006020838281520152565b908160409103126101b557602060405191612816836103d8565b805183520151602082015290565b60409073ffffffffffffffffffffffffffffffffffffffff61051594931681528160208201520190611664565b909491939291853560f81c6001909381908761286b6127e3565b9360408089161480612b41575b612a44575b505050600180861614612a1e5760028581161460208501526007600286901c1688820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691019080969181966020166128ed9060051c90565b6128f6906115ad565b8a820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101959098899a81612942846126af565b98899361294e93611f56565b9161295893613134565b909861296c91600052602052604060002090565b9061297f91600052602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff166129a891600052602052604060002090565b94815190868215159283612a13575b505081612a04575b506129c75750565b6040517fccbb534f000000000000000000000000000000000000000000000000000000008152815160048201526020909101516024820152604490fd5b905060208201511015386129bf565b1415915086386129b7565b86612a399792949550612a319398611f56565b939092612f12565b919394909293929190565b8a81013560601c985060140192509087908a90849015612a68575b5082915061287d565b60038101955073ffffffffffffffffffffffffffffffffffffffff945081013560e81c92604092612aeb929091612ab691612aaf918990612aa989836115c0565b92611f56565b36916104c3565b83519586809481937fccce3bc80000000000000000000000000000000000000000000000000000000083523060048401612824565b0392165afa801561107e57612b0992600091612b12575b50926115c0565b86388981612a5f565b612b34915060403d604011612b3a575b612b2c81836103f4565b8101906127fc565b38612b02565b503d612b22565b5073ffffffffffffffffffffffffffffffffffffffff891615612878565b9160009391849360208451940192f190565b9160009291839260208351930191f490565b3d90604051916020818401016040528083526000602084013e565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e868352604082015260408152612bdd6060826103f4565b51902055565b60405160208101917fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1208352604082015260408152612bdd6060826103f4565b15612cd2576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a0815261273d60c0826103f4565b4690612c2b565b805160209091019060005b818110612cf15750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101612ce4565b610100810151604051612d3881612711602082018095612cd9565b51902090612d47815160ff1690565b60ff811680612dc05750509061273d612d6360408401516139fd565b9261271160806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b60018103612e1e57505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4669381019384529081019190915260608101929092529061273d8160808101612711565b60028103612e7457505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e46020820190815291810192909252606082019290925261273d8160808101612711565b600303612ec8575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4666020820190815291810192909252606082019290925261273d8160808101612711565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b9061230e9060409396959496606084526060840191611867565b9194929092600095600095600095600095600095612f2e611dde565b60028152937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9460005b828110612f8557505050505050508051151580612f77575b6129c75750565b506020810151841115612f70565b600381019d50959b5093995091975092909190612fa9908b9085013560e81c6115c0565b958a60008489036130ed575089915b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c036130bd5750906001612ff289612ff9948789611f56565b908b612851565b9c939c9b929b9a919a99909a9b9d8e9d9e8f905b106130775750928b88511461306e575b808b101561303c57508a60c08501528992959295949194939093612f58565b7f37daf62b0000000000000000000000000000000000000000000000000000000060005260048b905260245260446000fd5b6000885261301d565b8d8f6108eb61308885858c8e611f56565b9390926040519485947fb006aba000000000000000000000000000000000000000000000000000000000865260048601612ef8565b9798999a9160016130d38b6130da94888a611f56565b9086612851565b50929d919c909b929a9092918e8e61300d565b91612fb8565b73ffffffffffffffffffffffffffffffffffffffff610515959360609383521660208201528160408201520191611867565b908160209103126101b5575190565b9391909360009460009460005b81811061314f575050505050565b8481013560f881901c9860019092019788979692909160fc1c9889156139335750600189146138f357600289146137365760038914613707576004891461368657600689146135e6576005891461359857600789146134d1576008891461347b576009891461335257600a89146131ef577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b90919293949596975060038916978815613341575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691019081019081613267918787611f56565b6040517f898bd9210000000000000000000000000000000000000000000000000000000081529391849161329f918a60048501611989565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa91821561107e576132e29360009361330e575b5060ff909a168091019a613cc9565b90801561330857906132fc91600052602052604060002090565b955b9392919093613141565b506132fc565b60ff9193506133339060203d811161333a575b61332b81836103f4565b810190613125565b92906132d3565b503d613321565b8084013560f81c9850600101613204565b9091929394959697506003891697881561346a575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190810190816133ca918787611f56565b6040517f13792a4a00000000000000000000000000000000000000000000000000000000815293918491613402918b600485016118a6565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa91821561107e576134449360009361330e575060ff909a168091019a613cc9565b908015613464579061345e91600052602052604060002090565b956132fe565b5061345e565b8084013560f81c9850600101613367565b98506020870197509495939492939192909182013561349986613c70565b81146134a9575b61344490613c8a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506134a0565b975090919293949597600f16968715613586575b602060006134f76135649a9b86613b38565b9c9092918a60405161353a816127118a82019485603c917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008252601c8201520190565b51902092604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa1561107e576134449060ff6000519a1680910199613b7b565b600189019883013560f81c97506134e5565b9850602087019750949593949293919290918201358085146135be575b61344490613c31565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506135b5565b989091929394959662ffffff98506136086120b5600c8416603f9060021c1690565b918215613672575b6003168015613661575b9081906136459061363d908781013560e81c906003019c168c01809c8989611f56565b90898b613134565b911115613658575b906134449291613be6565b9982019961364d565b50600281019084013560f01c61361a565b8482013560f81c9250600190910190613610565b9750976136dc6136e9929394959697600f6136f193169085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290830180938686611f56565b908688613134565b9061345e92980198600052602052604060002090565b985096509394929391929091908082013590602001968015613464579061345e91600052602052604060002090565b909192939495969750600389169788156138e2575b8084013560601c996137aa916014019061376a9060021c6003166120b5565b9085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9081019061380e60208c6137c085858b8b611f56565b919073ffffffffffffffffffffffffffffffffffffffff8c604051968795869485937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611989565b0392165afa90811561107e577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000916000916138c4575b50160361388057509060ff61344492991680910199613b7b565b6108eb6138918c9389938989611f56565b906040519485947fb2fed7ae000000000000000000000000000000000000000000000000000000008652600486016130f3565b6138dc915060203d8111611acb57611abd81836103f4565b38613866565b8381013560f81c985060010161374b565b98600f91929394959697985016968715613922575b60148101976134449160ff9091169084013560601c613b7b565b8281013560f81c9750600101613908565b98509091929394959698600f16978815613985575b506020600061395b6135649a9b86613b38565b9c90916040519384938c859094939260ff6060936080840197845216602083015260408201520152565b60018101995083013560f81c97506020613948565b80151590816139a7575090565b90507fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8541490565b805160209091019060005b8181106139e75750505090565b82518452602093840193909201916001016139da565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0613a43613a2d83610471565b92613a3b60405194856103f4565b808452610471565b0136602083013760005b8351811015613b1f5780613a636001928661164b565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152613b0b610120826103f4565b519020613b18828561164b565b5201613a4d565b5090915060405161273d816127116020820180956139cf565b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff81116115bb5791565b90604051907fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208301937f53657175656e6365207369676e65723a0a000000000000000000000000000000855260601b16603183015260458201526045815261273d6065826103f4565b916040519160208301937f53657175656e6365206e657374656420636f6e6669673a0a000000000000000085526038840152605883015260788201526078815261273d6098826103f4565b60405160208101917f53657175656e636520737461746963206469676573743a0a0000000000000000835260388201526038815261273d6058826103f4565b61271161273d6126cf6126c9600060208601511515612c22565b60405160208101917f53657175656e636520616e792061646472657373207375626469676573743a0a835260408201526040815261273d6060826103f4565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e63652073617069656e7420636f6e6669673a0a00000000000000865260601b166039840152604d830152606d820152606d815261273d608d826103f456fea264697066735822122071c846bfb3a07ed1d03bb0cecee955d8b864be4c4d91b0f9a960528ecc060e8964736f6c634300081c0033","sourceMap":"770:40659:74:-:0;;;;;;;3166:4:5;770:40659:74;;3166:4:5;770:40659:74;;;3166:4:5;770:40659:74;3166:4:5;770:40659:74;;1087:4:16;770:40659:74;;;1087:4:16;770:40659:74;886:13;;;;;;;;;;;;;;;;;;;;;;;;770:40659;886:13;;;;;1087:4:16;770:40659:74;;-1:-1:-1;;;;;;770:40659:74;;;;;;-1:-1:-1;;;;;770:40659:74;;;;;;;;;;;;938:46;;;;-1:-1:-1;;;;;938:46:74;;;;;;;;770:40659;938:46;;;;;;886:13;770:40659;;;;;;;;;;;;;;;938:46;;;770:40659;938:46;;;;;770:40659;;;-1:-1:-1;;;;;;770:40659:74;-1:-1:-1;;;;;770:40659:74;;;;;;;;;;;;;;;;;;;938:46;770:40659;;;;;;;;;938:46;770:40659;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60e060405260043610156200001d575b36156200001b57600080fd5b005b600060c05260c0513560e01c80630ba6dabf146200ca5c5780631cc7bfe3146200c1e65780631e648566146200bb3b5780631ed7831c146200ba8657806322fe81fe146200a8615780632ade3880146200a67c5780632dcbe49a146200a6285780633e5e3c23146200a5735780633f7286f4146200a4be5780634385978114620099785780634d02ac711462008d555780634f7cf1761462007d0d57806366d9a9a01462007b9457806367c5560a146200674757806367df3e871462005dba5780636e614e9c146200566d57806385226c8114620055c55780638d7f2e0d1462004c21578063916a17c61462004b3757806397aef38314620036c75780639a11e1001462002ffd578063b0464fdc1462002f13578063b5508aa91462002e6b578063ba414fa61462002e23578063c45a01551462002dcb578063c7b2834c1462001e54578063ce047ab4146200049c578063e20c9f7114620003d6578063f7c73c1314620001da5763fa7626d4036200000f5734620001d45760c0517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d457602060ff601f54166040519015158152f35b60c05180fd5b34620001d45760c0517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d45773ffffffffffffffffffffffffffffffffffffffff601f5460081c16602073ffffffffffffffffffffffffffffffffffffffff8154166044604051809481937f32c02a14000000000000000000000000000000000000000000000000000000008352600483015260c051602483015260c051905af18015620003575760c0519062000381575b73ffffffffffffffffffffffffffffffffffffffff915016737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4576040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152670de0b6b3a7640000602482015260c0518160448183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015620003575762000364575b5060c051808080670de0b6b3a76400008582f11562000357576200035190316200fe0e565b60c05180f35b6040513d60c051823e3d90fd5b60c05162000372916200dcfe565b60c051620001d457816200032c565b506020813d602011620003cd575b816200039e602093836200dcfe565b81010312620001d457620003c773ffffffffffffffffffffffffffffffffffffffff916200e5c1565b62000292565b3d91506200038f565b34620001d45760c0517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d457604051806020601554918281520190601560c051527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4759060c0515b8181106200046f576200046b856200045e818703826200dcfe565b604051918291826200de12565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff1684526020909301926001928301920162000443565b34620001d4576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d457620004d9366200e497565b61ffff620004f38183511660ff604085015116906200f007565b16815261ffff620005138160808401511660ff60c085015116906200f007565b1660808201526200052860608201516200ef77565b60608201526200053c60e08201516200ef77565b60e0820152604051906101e0820182811067ffffffffffffffff82111762001e235760405260c051825260c0516020830152606060408301526060808301526060608083015260c05160a083015260c05160c083015260c05160e083015260c051610100830152620005ad6200e576565b610120830152620005bd6200e576565b6101408301526060610160830152606061018083015260606101a083015260606101c08301526060810151604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620003575760c0519062001dce575b73ffffffffffffffffffffffffffffffffffffffff915016825260e0810151604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620003575760c0519062001d79575b73ffffffffffffffffffffffffffffffffffffffff915016602083015273ffffffffffffffffffffffffffffffffffffffff825116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c0519162001d59575b5060ff60408301511690604051917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156200035757620008a660206200088c6001829560076200094498620008b29760c0519162001d39575b50604051958693606051620007e4818488016200de64565b85017f7369676e65723a00000000000000000000000000000000000000000000000000838201526200082082518093856027850191016200de89565b01017f3a00000000000000000000000000000000000000000000000000000000000000838201526200085c825180938c6008850191016200de89565b010103017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826200dcfe565b61ffff86511666ffffffffffffff8588015116906200f053565b8060408701526200f33c565b8060a086015273ffffffffffffffffffffffffffffffffffffffff601f5460081c1673ffffffffffffffffffffffffffffffffffffffff8354166040518095819482937f32c02a14000000000000000000000000000000000000000000000000000000008452600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b039160c051905af18015620003575760c0519062001ce4575b73ffffffffffffffffffffffffffffffffffffffff91501661010083015273ffffffffffffffffffffffffffffffffffffffff602083015116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c0519162001cc4575b5060ff60c08301511690604051917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575762000afe6001602092600762000b1c9562000b289760c0519162001ad6575b5060405195869360605162000a85818488016200de64565b85017f7369676e65723a000000000000000000000000000000000000000000000000008382015262000ac182518093856027850191016200de89565b01017f3a00000000000000000000000000000000000000000000000000000000000000838201526200085c8251809360206008850191016200de89565b61ffff60808501511666ffffffffffffff60a086015116906200f053565b8060608501526200f33c565b60c083015260c0516101208301515262000b416200e64f565b6040610120840151015262000c0b73ffffffffffffffffffffffffffffffffffffffff6101008401511660c0840151604051907f2956142600000000000000000000000000000000000000000000000000000000602083015260248201526024815262000bb06044826200dcfe565b6040519162000bbf836200dc89565b825260c05160208301526040820152620186a0606082015260c051608082015260c05160a0820152600160c0820152604061012085015101519062000c04826200e6e5565b526200e6e5565b50610100810151151560206101208401510152606081015162000c5061012084015173ffffffffffffffffffffffffffffffffffffffff61010086015116906200f4ce565b604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620003575760c05191829182919062001c9c575b5060408501519173ffffffffffffffffffffffffffffffffffffffff86511690604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620003575760c0519262001c7a575b50604051927fb11a19e8000000000000000000000000000000000000000000000000000000008452600484015260c05183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa928315620003575760c0519362001c58575b50604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c0519162001c38575b5060ff604051957f6900a3ae00000000000000000000000000000000000000000000000000000000875216600486015260c05185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156200035757600162000f2e93819362000f3c9860c0519262001c13575b506006906020604051988662000e788b9851809285808c0191016200de89565b87017f3a686173683a00000000000000000000000000000000000000000000000000008382015262000eb482518093856026850191016200de89565b01017f3a000000000000000000000000000000000000000000000000000000000000008382015262000ef18251809360206007850191016200de89565b01017f3a00000000000000000000000000000000000000000000000000000000000000838201526200085c8251809360206002850191016200de89565b61010084015115916200f5ec565b61016083015262000f526101208301516200f961565b6101a083015273ffffffffffffffffffffffffffffffffffffffff61010083015116737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4576040517f81bad6f300000000000000000000000000000000000000000000000000000000815260c0516001600483018190526024830181905260006044840152606483015273ffffffffffffffffffffffffffffffffffffffff909216608482015290818060a48101038160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015620003575762001bf6575b507f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa602060c0840151604051908152a173ffffffffffffffffffffffffffffffffffffffff610100830151166101a0830151610160840151823b15620001d457620010c09260405180809581947f1f6a1eb900000000000000000000000000000000000000000000000000000000835260c05196600484016200e75e565b039160c051905af18015620003575762001bd9575b506004602073ffffffffffffffffffffffffffffffffffffffff61010085015116604051928380927faaf10f420000000000000000000000000000000000000000000000000000000082525afa8015620003575760c0519062001b97575b60049150602073ffffffffffffffffffffffffffffffffffffffff815416604051938480927f9f69ef540000000000000000000000000000000000000000000000000000000082525afa908115620003575760c0519162001b51575b6200119b92506200fbc7565b6004602073ffffffffffffffffffffffffffffffffffffffff61010085015116604051928380927f51605d800000000000000000000000000000000000000000000000000000000082525afa8015620003575760c0519062001b16575b6200120a915060c0840151906200fd01565b73ffffffffffffffffffffffffffffffffffffffff825116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c0519162001af6575b5060ff60408301511690604051917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575762001310600160209260076200132b95620013379760c0519162001ad6575060405195869360605162000a85818488016200de64565b61ffff84511666ffffffffffffff602086015116906200f053565b8060808501526200f33c565b60e083015260c05161014083015152620013506200e64f565b604061014084015101526200141373ffffffffffffffffffffffffffffffffffffffff6101008401511660e0840151604051907f29561426000000000000000000000000000000000000000000000000000000006020830152602482015260248152620013bf6044826200dcfe565b60405191620013ce836200dc89565b825260c05160208301526040820152620186a0606082015260c051608082015260c05160a0820152600160c0820152604061014085015101519062000c04826200e6e5565b5061010081015115156020610140840151015260016080610140840151015260e0810151906200146561014084015173ffffffffffffffffffffffffffffffffffffffff61010086015116906200f4ce565b604051927fe341eaa400000000000000000000000000000000000000000000000000000000845260048401526024830152606082604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620003575760c051928391829162001a9a575b5060608501519273ffffffffffffffffffffffffffffffffffffffff60208701511694604051957f56ca623e000000000000000000000000000000000000000000000000000000008752600487015260c05186602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa958615620003575760c0519662001a78575b50604051937fb11a19e8000000000000000000000000000000000000000000000000000000008552600485015260c05184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa938415620003575760c0519462001a56575b50604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c0519162001a36575b5060ff604051937f6900a3ae00000000000000000000000000000000000000000000000000000000855216600484015260c05183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156200035757620017849660016200177a9381936101009760c0519262001a08575b5060069060206040519a86620016948d9851809285808c0191016200de89565b87017f3a686173683a000000000000000000000000000000000000000000000000000083820152620016d082518093856026850191016200de89565b01017f3a00000000000000000000000000000000000000000000000000000000000000838201526200170d8251809360206007850191016200de89565b01017f3a00000000000000000000000000000000000000000000000000000000000000838201526200174a8251809360206002850191016200de89565b010103017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018552846200dcfe565b015115916200f5ec565b6101808201526200179a6101408201516200f961565b6101c082015273ffffffffffffffffffffffffffffffffffffffff61010082015116737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4576040517f81bad6f300000000000000000000000000000000000000000000000000000000815260c0516001600483018190526024830181905260006044840152606483015273ffffffffffffffffffffffffffffffffffffffff909216608482015290818060a48101038160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156200035757620019eb575b507f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa602060e0830151604051908152a173ffffffffffffffffffffffffffffffffffffffff610100820151166101c0820151610180830151823b15620001d457620019089260405180809581947f1f6a1eb900000000000000000000000000000000000000000000000000000000835260c05196600484016200e75e565b039160c051905af180156200035757620019ce575b5080602073ffffffffffffffffffffffffffffffffffffffff610100600494015116604051938480927f51605d800000000000000000000000000000000000000000000000000000000082525afa918215620003575760c051926200198e575b620003518360e0840151906200fd01565b91506020823d602011620019c5575b81620019ac602093836200dcfe565b81010312620019c05790519060e06200197d565b600080fd5b3d91506200199d565b60c051620019dc916200dcfe565b60c051620001d457816200191d565b60c051620019f9916200dcfe565b60c051620001d457816200186a565b600691925062001a2e903d8060c051833e62001a2581836200dcfe565b8101906200e5e3565b919062001674565b62001a4f91503d8060c051833e62001a2581836200dcfe565b8762001602565b62001a709194503d8060c051833e62001a2581836200dcfe565b9287620015a5565b62001a929196503d8060c051833e62001a2581836200dcfe565b948762001548565b91505062001ac591925060603d60601162001ace575b62001abc81836200dcfe565b8101906200e737565b929185620014c9565b503d62001ab0565b62001aef91503d8060c051833e62001a2581836200dcfe565b8a62000a6d565b62001b0f91503d8060c051833e62001a2581836200dcfe565b836200127e565b506020813d60201162001b48575b8162001b33602093836200dcfe565b81010312620019c0576200120a9051620011f8565b3d915062001b24565b90506020823d60201162001b8e575b8162001b6f602093836200dcfe565b81010312620001d45762001b876200119b926200e5c1565b906200118f565b3d915062001b60565b506020813d60201162001bd0575b8162001bb4602093836200dcfe565b81010312620001d45762001bca6004916200e5c1565b62001133565b3d915062001ba5565b60c05162001be7916200dcfe565b60c051620001d45782620010d5565b60c05162001c04916200dcfe565b60c051620001d4578262001022565b600691925062001c30903d8060c051833e62001a2581836200dcfe565b919062000e58565b62001c5191503d8060c051833e62001a2581836200dcfe565b8762000dea565b62001c729193503d8060c051833e62001a2581836200dcfe565b918762000d8d565b62001c949192503d8060c051833e62001a2581836200dcfe565b908762000d30565b91505062001cbc915060603d60601162001ace5762001abc81836200dcfe565b908562000cb4565b62001cdd91503d8060c051833e62001a2581836200dcfe565b83620009f2565b506020813d60201162001d30575b8162001d01602093836200dcfe565b81010312620001d45762001d2a73ffffffffffffffffffffffffffffffffffffffff916200e5c1565b6200095d565b3d915062001cf2565b62001d5291503d8060c051833e62001a2581836200dcfe565b8c620007cc565b62001d7291503d8060c051833e62001a2581836200dcfe565b836200074c565b506020813d60201162001dc5575b8162001d96602093836200dcfe565b81010312620001d45762001dbf73ffffffffffffffffffffffffffffffffffffffff916200e5c1565b620006bb565b3d915062001d87565b506020813d60201162001e1a575b8162001deb602093836200dcfe565b81010312620001d45762001e1473ffffffffffffffffffffffffffffffffffffffff916200e5c1565b62000642565b3d915062001ddc565b7f4e487b710000000000000000000000000000000000000000000000000000000060c051526041600452602460c051fd5b34620001d45760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d45760405162001e93816200dc89565b600435815260243561ffff81168103620001d457602082015260443566ffffffffffffff81168103620001d457604082015260643560ff81168103620001d45760608201526084356080820181905260a43560a083015260c435908115158203620001d45762001f089160c08401526200ef77565b608082015262001f1c60a08201516200ef77565b8060a083015260808201511415737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d457604051907f4c63e562000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620003575762002dae575b5060ff62001fcd8161ffff62001fb8816020870151166200f02e565b166020850181905260608501518216620102b4565b6040608081905280519062001fe390826200dcfe565b600c81527f426f756e6420726573756c74000000000000000000000000000000000000000060208201526080515162002088816200205560208201947fb60e72cc000000000000000000000000000000000000000000000000000000008652608051602484015260648301906200deae565b856044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826200dcfe565b60c0519160c0519151906a636f6e736f6c652e6c6f675afa5016606082015260805151610180810181811067ffffffffffffffff82111762001e23576080515260c051815260c0516020820152606060805182015260608082015260c051608082015260c05160a0820152620020fd6200e576565b60c082015260c05160e082015260c05161010082015260c05161012082015260c0516101408201526060610160820152608082015160805151907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562002b275760c0519062002d59575b73ffffffffffffffffffffffffffffffffffffffff915016815260a082015160805151907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562002b275760c0519062002d04575b73ffffffffffffffffffffffffffffffffffffffff915016602082015273ffffffffffffffffffffffffffffffffffffffff81511660805151907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562002b275760c0519162002ce4575b5060ff60608401511660805151907f6900a3ae000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562002b2757620023bc92620023af9260c0519262002cba575b50600162002391916027608051519485927f7369676e65723a0000000000000000000000000000000000000000000000000060208501526200235481518092602086880191016200de89565b83017f3a00000000000000000000000000000000000000000000000000000000000000838201526200085c8251809360206028850191016200de89565b61ffff60208601511666ffffffffffffff604087015116906200f053565b806080518401526200f33c565b608082015273ffffffffffffffffffffffffffffffffffffffff60208201511660805151907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562002b275760c0519162002c9a575b5060ff6060840151169060805151917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562002b27576200250f9260c0519262002c70575b506001620024f1916027608051519485927f7369676e65723a0000000000000000000000000000000000000000000000000060208501526200235481518092602086880191016200de89565b61ffff60208501511666ffffffffffffff604086015116906200f053565b6060820152601f54602080546080808501519051517f32c02a1400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152602481019190915260c051909384926044928492909160089190911c165af1801562002b275760c0519062002c1b575b73ffffffffffffffffffffffffffffffffffffffff91501660a0820152600360c082015152815160e060c0830151015260c08201511515602060c08301510152620025ff60c082015173ffffffffffffffffffffffffffffffffffffffff60a084015116906200f4ce565b8060e083015260a08301519060805151917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562002b275760c05160ff9290918291829162002bf4575b506101408501526101208401521661010082015273ffffffffffffffffffffffffffffffffffffffff6020820151169060805151917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562002b275760c0519262002bd2575b506101208101519260805151937fb11a19e8000000000000000000000000000000000000000000000000000000008552600485015260c05184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa93841562002b275760c0519462002bb0575b5061014082015160805151907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562002b275760c0519162002b90575b5060ff610100840151169360805151947f6900a3ae000000000000000000000000000000000000000000000000000000008652600486015260c05185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa94851562002b27576200298b9662002934600160a0948160209a73ffffffffffffffffffffffffffffffffffffffff98620029479760c0519262002b6b575b506006908d6080515198866200287e8b9851809285808c0191016200de89565b87017f3a686173683a000000000000000000000000000000000000000000000000000083820152620028ba82518093856026850191016200de89565b01017f3a0000000000000000000000000000000000000000000000000000000000000083820152620028f8825160209381946007850191016200de89565b01017f3a00000000000000000000000000000000000000000000000000000000000000838201526200085c825180938f6002850191016200de89565b60608601519060c086015115916200f5ec565b93846101608201520151169051608051518095819482937f1626ba7e000000000000000000000000000000000000000000000000000000008452600484016200e7d1565b03915afa90811562002b275760c0519162002b35575b5060805151620029b360a0826200dcfe565b606481527f697356616c69645369676e61747572652073686f756c642072657475726e203060208201527f78303030303030303020666f7220696e76616c6964207369676e6174757265206080518201527f2877726f6e67207369676e6572202d3e20696d61676548617368206d69736d6160608201527f74636829000000000000000000000000000000000000000000000000000000006080820152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4577fffffffff0000000000000000000000000000000000000000000000000000000060805151927fc1fa1ed000000000000000000000000000000000000000000000000000000000845216600483015260c051602483015260606044830152818062002adf60c0519360648301906200deae565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562002b275762002b0a5760c05180f35b60c05162002b18916200dcfe565b60c051620001d4578062000351565b608051513d60c051823e3d90fd5b62002b5c915060203d60201162002b63575b62002b5381836200dcfe565b8101906200e797565b81620029a1565b503d62002b47565b600691925062002b88903d8060c051833e62001a2581836200dcfe565b91906200285e565b62002ba991503d8060c051833e62001a2581836200dcfe565b85620027c9565b62002bca9194503d8060c051833e62001a2581836200dcfe565b928462002765565b62002bec9192503d8060c051833e62001a2581836200dcfe565b908362002700565b91505062002c14915060603d60601162001ace5762001abc81836200dcfe565b8662002673565b506020813d60201162002c67575b8162002c38602093836200dcfe565b81010312620001d45762002c6173ffffffffffffffffffffffffffffffffffffffff916200e5c1565b62002594565b3d915062002c29565b620024f191925062002c916001913d8060c051833e62001a2581836200dcfe565b929150620024a5565b62002cb391503d8060c051833e62001a2581836200dcfe565b8362002439565b6200239191925062002cdb6001913d8060c051833e62001a2581836200dcfe565b92915062002308565b62002cfd91503d8060c051833e62001a2581836200dcfe565b8362002299565b506020813d60201162002d50575b8162002d21602093836200dcfe565b81010312620001d45762002d4a73ffffffffffffffffffffffffffffffffffffffff916200e5c1565b62002207565b3d915062002d12565b506020813d60201162002da5575b8162002d76602093836200dcfe565b81010312620001d45762002d9f73ffffffffffffffffffffffffffffffffffffffff916200e5c1565b6200218d565b3d915062002d67565b60c05162002dbc916200dcfe565b60c051620001d4578162001f9c565b34620001d45760c0517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d457602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051908152f35b34620001d45760c0517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d457602062002e616200ee88565b6040519015158152f35b34620001d45760c0517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d45760195462002eab816200df6e565b9062002ebb60405192836200dcfe565b80825260208201601960c05152602060c0512060c051915b83831062002ef357604051602080825281906200046b908201886200def3565b60016020819262002f04856200e9d0565b81520192019201919062002ed3565b34620001d45760c0517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d457601c5462002f53816200df6e565b9062002f6360405192836200dcfe565b80825260208201601c60c051527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a21160c051915b83831062002fae57604051806200046b87826200e3ee565b6002602060019260405162002fc3816200dcc3565b73ffffffffffffffffffffffffffffffffffffffff865416815262002fea8587016200ebcd565b8382015281520192019201919062002f96565b34620001d45760ff620030e46200303a60018361ffff620031818162003023366200e377565b9b949a939c9260c09a929a999199515016620102b4565b96600160ff6040998a62002055620030c082516200305984826200dcfe565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152835192839160208301957fb60e72cc000000000000000000000000000000000000000000000000000000008752602484015260648301906200deae565b60c0519160c0519151906a636f6e736f6c652e6c6f675afa501695869216620102b4565b8651620030f288826200dcfe565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152875162003160816200205560208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528c602484015260648301906200deae565b60c0519160c0519151906a636f6e736f6c652e6c6f675afa5016936200ef77565b908451917fffa186490000000000000000000000000000000000000000000000000000000083526004830152602082602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620036555760c0519262003683575b5073ffffffffffffffffffffffffffffffffffffffff8551927f56ca623e00000000000000000000000000000000000000000000000000000000845216600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620036555760c0519262003661575b508451907f6900a3ae000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156200365557620033fa96976200335960016200336195600760209666ffffffffffffff9660c0519162003635575b508b51978893606051620032e0818488016200de64565b85017f7369676e65723a00000000000000000000000000000000000000000000000000838201526200331c82518093856027850191016200de89565b01017f3a00000000000000000000000000000000000000000000000000000000000000838201526200174a8251809360206008850191016200de89565b16846200f053565b9460206200336f876200f33c565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c1673ffffffffffffffffffffffffffffffffffffffff83541687518099819482937f32c02a14000000000000000000000000000000000000000000000000000000008452600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b039160c051905af1948515620035e15760c05195620035ed575b506200345590620034246200e576565b90600382528360e08301521590602082159101526020968551906200344a89836200dcfe565b60c05182526200f5ec565b918351907ffd41fcba0000000000000000000000000000000000000000000000000000000087830152602482015260c0516044820152604481526200349c6064826200dcfe565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4578351907ff28dceb30000000000000000000000000000000000000000000000000000000082528660048301528180620034f960c0519360248301906200deae565b038160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015620035e1579086939291620035bf575b5093620035789473ffffffffffffffffffffffffffffffffffffffff85518097819582947f1626ba7e000000000000000000000000000000000000000000000000000000008452600484016200e7d1565b0392165afa908115620035b45750620035915760c05180f35b81620035ab92903d1062002b635762002b5381836200dcfe565b50808062000351565b513d60c051823e3d90fd5b620035d091935060c051906200dcfe565b60c051620001d45784918662003527565b84513d60c051823e3d90fd5b9094506020813d6020116200362c575b816200360c602093836200dcfe565b81010312620001d4576200362462003455916200e5c1565b949062003414565b3d9150620035fd565b6200364e91503d8060c051833e62001a2581836200dcfe565b8e620032c9565b85513d60c051823e3d90fd5b6200367b9192503d8060c051833e62001a2581836200dcfe565b90876200324e565b9091506020813d602011620036be575b81620036a2602093836200dcfe565b81010312620001d457620036b6906200e5c1565b9087620031dc565b3d915062003693565b34620001d4576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d45762003704366200e497565b61ffff6200371e8183511660ff604085015116906200f007565b16815261ffff6200373e8160808401511660ff60c085015116906200f007565b1660808201526200375360608201516200ef77565b60608201526200376760e08201516200ef77565b60e0820152604051906101a0820182811067ffffffffffffffff82111762001e235760405260c051825260c05160208301526060604083015260608083015260c051608083015260c05160a083015260c05160c0830152620037c86200e576565b60e0830152620037d76200e576565b61010083015260606101208301526060610140830152606061016083015260606101808301526060810151604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620003575760c0519062004ae2575b73ffffffffffffffffffffffffffffffffffffffff915016825260e0810151604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620003575760c0519062004a8d575b73ffffffffffffffffffffffffffffffffffffffff915016602083015273ffffffffffffffffffffffffffffffffffffffff825116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c0519162004a6d575b5060ff60408301511690604051917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156200035757620008a660206200088c60018295600762003a8f98620039fd9760c0519162001d395750604051958693606051620007e4818488016200de64565b80608086015273ffffffffffffffffffffffffffffffffffffffff601f5460081c1673ffffffffffffffffffffffffffffffffffffffff8354166040518095819482937f32c02a14000000000000000000000000000000000000000000000000000000008452600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b039160c051905af18015620003575760c0519062004a18575b73ffffffffffffffffffffffffffffffffffffffff91501660c083015273ffffffffffffffffffffffffffffffffffffffff602083015116604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c05191620049f8575b5060ff60c08301511690604051917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575762000afe6001602092600762000b1c9562003bce9760c0519162001ad6575060405195869360605162000a85818488016200de64565b60a083015260c05160e08301515262003be66200e64f565b604060e0840151015262003ca673ffffffffffffffffffffffffffffffffffffffff60c08401511660a0840151604051907f2956142600000000000000000000000000000000000000000000000000000000602083015260248201526024815262003c536044826200dcfe565b6040519162003c62836200dc89565b825260c05160208301526040820152620186a0606082015260c051608082015260c05160a0820152600160c0820152604060e085015101519062000c04826200e6e5565b506101008101511515602060e08401510152606081015162003ce860e084015173ffffffffffffffffffffffffffffffffffffffff60c086015116906200f4ce565b604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620003575760c051918291829190620049d0575b5060408501519173ffffffffffffffffffffffffffffffffffffffff86511690604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620003575760c05192620049ae575b50604051927fb11a19e8000000000000000000000000000000000000000000000000000000008452600484015260c05183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa928315620003575760c051936200498c575b50604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c051916200496c575b5060ff604051957f6900a3ae00000000000000000000000000000000000000000000000000000000875216600486015260c05185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156200035757600162000f2e93819362003f0f9860c0519262001c1357506006906020604051988662000e788b9851809285808c0191016200de89565b61012083015262003f2460e08301516200f961565b61016083015273ffffffffffffffffffffffffffffffffffffffff60c083015116737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4576040517f81bad6f300000000000000000000000000000000000000000000000000000000815260c0516001600483018190526024830181905260006044840152606483015273ffffffffffffffffffffffffffffffffffffffff909216608482015290818060a48101038160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562000357576200494f575b507f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa602060a0840151604051908152a173ffffffffffffffffffffffffffffffffffffffff60c083015116610160830151610120840151823b15620001d457620040909260405180809581947f1f6a1eb900000000000000000000000000000000000000000000000000000000835260c05196600484016200e75e565b039160c051905af18015620003575762004932575b506004602073ffffffffffffffffffffffffffffffffffffffff60c085015116604051928380927faaf10f420000000000000000000000000000000000000000000000000000000082525afa8015620003575760c05190620048f0575b60049150602073ffffffffffffffffffffffffffffffffffffffff815416604051938480927f9f69ef540000000000000000000000000000000000000000000000000000000082525afa908115620003575760c05191620048aa575b6200416a92506200fbc7565b6004602073ffffffffffffffffffffffffffffffffffffffff60c085015116604051928380927f51605d800000000000000000000000000000000000000000000000000000000082525afa8015620003575760c051906200486f575b620041d8915060a0840151906200fd01565b60c05161010083015152620041ec6200e64f565b60406101008401510152620042ab73ffffffffffffffffffffffffffffffffffffffff60c0840151166040517f2956142600000000000000000000000000000000000000000000000000000000602082015260c051602482015260248152620042576044826200dcfe565b6040519162004266836200dc89565b825260c05160208301526040820152620186a0606082015260c051608082015260c05160a0820152600160c0820152604061010085015101519062000c04826200e6e5565b5061010081015115156020610100840151015260016080610100840151015260e081015190620042fc61010084015173ffffffffffffffffffffffffffffffffffffffff60c086015116906200f4ce565b604051927fe341eaa400000000000000000000000000000000000000000000000000000000845260048401526024830152606082604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620003575760c051928391829162004845575b5060608501519273ffffffffffffffffffffffffffffffffffffffff60208701511694604051957f56ca623e000000000000000000000000000000000000000000000000000000008752600487015260c05186602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa958615620003575760c0519662004823575b50604051937fb11a19e8000000000000000000000000000000000000000000000000000000008552600485015260c05184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa938415620003575760c0519462004801575b50604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c05191620047e1575b5060ff604051937f6900a3ae00000000000000000000000000000000000000000000000000000000855216600484015260c05183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562000357576200452a9660016200177a9381936101009760c0519262001a08575060069060206040519a86620016948d9851809285808c0191016200de89565b610140820152620045406101008201516200f961565b6101808201526040517f4294d12700000000000000000000000000000000000000000000000000000000602082015260048152620045806024826200dcfe565b620045f1610100830151620045c46040519384927f7f6b0bb1000000000000000000000000000000000000000000000000000000006020850152602484016200e980565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826200dcfe565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d457604051907ff28dceb30000000000000000000000000000000000000000000000000000000082526020600483015281806200465060c0519360248301906200deae565b038160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156200035757620047c4575b5073ffffffffffffffffffffffffffffffffffffffff60c082015116610180820151610140830151823b15620001d457620046e79260405180809581947f1f6a1eb900000000000000000000000000000000000000000000000000000000835260c05196600484016200e75e565b039160c051905af180156200035757620047a7575b5080602073ffffffffffffffffffffffffffffffffffffffff60c0600494015116604051938480927f51605d800000000000000000000000000000000000000000000000000000000082525afa918215620003575760c051926200476c575b620003518360a0840151906200fd01565b91506020823d6020116200479e575b816200478a602093836200dcfe565b81010312620019c05790519060a06200475b565b3d91506200477b565b60c051620047b5916200dcfe565b60c051620001d45781620046fc565b60c051620047d2916200dcfe565b60c051620001d4578162004679565b620047fa91503d8060c051833e62001a2581836200dcfe565b8762004499565b6200481b9194503d8060c051833e62001a2581836200dcfe565b92876200443c565b6200483d9196503d8060c051833e62001a2581836200dcfe565b9487620043df565b9150506200486691925060603d60601162001ace5762001abc81836200dcfe565b92918562004360565b506020813d602011620048a1575b816200488c602093836200dcfe565b81010312620019c057620041d89051620041c6565b3d91506200487d565b90506020823d602011620048e7575b81620048c8602093836200dcfe565b81010312620001d457620048e06200416a926200e5c1565b906200415e565b3d9150620048b9565b506020813d60201162004929575b816200490d602093836200dcfe565b81010312620001d457620049236004916200e5c1565b62004102565b3d9150620048fe565b60c05162004940916200dcfe565b60c051620001d45782620040a5565b60c0516200495d916200dcfe565b60c051620001d4578262003ff3565b6200498591503d8060c051833e62001a2581836200dcfe565b8762003e82565b620049a69193503d8060c051833e62001a2581836200dcfe565b918762003e25565b620049c89192503d8060c051833e62001a2581836200dcfe565b908762003dc8565b915050620049f0915060603d60601162001ace5762001abc81836200dcfe565b908562003d4c565b62004a1191503d8060c051833e62001a2581836200dcfe565b8362003b3c565b506020813d60201162004a64575b8162004a35602093836200dcfe565b81010312620001d45762004a5e73ffffffffffffffffffffffffffffffffffffffff916200e5c1565b62003aa8565b3d915062004a26565b62004a8691503d8060c051833e62001a2581836200dcfe565b8362003966565b506020813d60201162004ad9575b8162004aaa602093836200dcfe565b81010312620001d45762004ad373ffffffffffffffffffffffffffffffffffffffff916200e5c1565b620038d5565b3d915062004a9b565b506020813d60201162004b2e575b8162004aff602093836200dcfe565b81010312620001d45762004b2873ffffffffffffffffffffffffffffffffffffffff916200e5c1565b6200385c565b3d915062004af0565b34620001d45760c0517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d457601d5462004b77816200df6e565b9062004b8760405192836200dcfe565b80825260208201601d60c051527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f60c051915b83831062004bd257604051806200046b87826200e3ee565b6002602060019260405162004be7816200dcc3565b73ffffffffffffffffffffffffffffffffffffffff865416815262004c0e8587016200ebcd565b8382015281520192019201919062004bba565b34620001d45760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d45760043567ffffffffffffffff8111620001d45762004c759036906004016200e275565b62004c8181516200ff0a565b602081019061ffff8251169161ffff62004ca5606084019460ff865116906200f007565b168152608082019262004cb984516200ef77565b845262004cc56200eae4565b918451604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620003575760c0519062005570575b73ffffffffffffffffffffffffffffffffffffffff91501691828452604051927f56ca623e000000000000000000000000000000000000000000000000000000008452600484015260c05183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa928315620003575760c051936200554b575b5060ff90511691604051927f6900a3ae000000000000000000000000000000000000000000000000000000008452600484015260c05183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620003575762004e29600161ffff93600760209662004e409860c051916200552b575b50604051978893606051620032e0818488016200de64565b511666ffffffffffffff604086015116906200f053565b9162004eea602062004e58818501958087526200f33c565b80604086015273ffffffffffffffffffffffffffffffffffffffff601f5460081c1673ffffffffffffffffffffffffffffffffffffffff8354166040518095819482937f32c02a14000000000000000000000000000000000000000000000000000000008452600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b039160c051905af18015620003575760c05190620054d6575b73ffffffffffffffffffffffffffffffffffffffff9150166060830152610100815101515160018101809111620054a55762004f3f906200eb50565b9160c0515b61010083510151805182101562004f8f579073ffffffffffffffffffffffffffffffffffffffff62004f79826001946200e722565b511662004f8782876200e722565b520162004f44565b505090928473ffffffffffffffffffffffffffffffffffffffff60a08601511662004fc26101008751015151866200e722565b5261010085510193845194525162004ff7855173ffffffffffffffffffffffffffffffffffffffff606086015116906200f4ce565b604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c0519283928392906200547b575b50519173ffffffffffffffffffffffffffffffffffffffff85511690604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620003575760c0519262005459575b50604051927fb11a19e8000000000000000000000000000000000000000000000000000000008452600484015260c05183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa928315620003575760c0519362005437575b50604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c0519162005417575b5060ff604051957f6900a3ae00000000000000000000000000000000000000000000000000000000875216600486015260c05185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620003575760016200521b938193620052299860c0519262001c1357506006906020604051988662000e788b9851809285808c0191016200de89565b60208651015115916200f5ec565b91608082019283526101008451015273ffffffffffffffffffffffffffffffffffffffff60a084015116737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d457604051907fca669fa7000000000000000000000000000000000000000000000000000000008252600482015260c0518160248160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156200035757620053f6575b5090620053289273ffffffffffffffffffffffffffffffffffffffff606060209401511690519151916040518095819482937f13792a4a000000000000000000000000000000000000000000000000000000008452600484016200eba5565b03915afa908115620003575760c05191620053be575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d457604051907f7c84c69b00000000000000000000000000000000000000000000000000000000825260048201526001602482015260c05181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620003575762002b0a5760c05180f35b90506020813d602011620053ed575b81620053dc602093836200dcfe565b81010312620019c05751816200533e565b3d9150620053cd565b60c05191929162005407916200dcfe565b60c051620001d4579083620052c9565b6200543091503d8060c051833e62001a2581836200dcfe565b886200518e565b620054519193503d8060c051833e62001a2581836200dcfe565b918862005131565b620054739192503d8060c051833e62001a2581836200dcfe565b9088620050d4565b915092506200549c915060603d60601162001ace5762001abc81836200dcfe565b9192876200505c565b7f4e487b710000000000000000000000000000000000000000000000000000000060c051526011600452602460c051fd5b506020813d60201162005522575b81620054f3602093836200dcfe565b81010312620001d4576200551c73ffffffffffffffffffffffffffffffffffffffff916200e5c1565b62004f03565b3d9150620054e4565b6200554491503d8060c051833e62001a2581836200dcfe565b8c62004e11565b60ff91935062005568903d8060c051833e62001a2581836200dcfe565b929062004d9a565b506020813d602011620055bc575b816200558d602093836200dcfe565b81010312620001d457620055b673ffffffffffffffffffffffffffffffffffffffff916200e5c1565b62004d22565b3d91506200557e565b34620001d45760c0517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d457601a5462005605816200df6e565b906200561560405192836200dcfe565b80825260208201601a60c05152602060c0512060c051915b8383106200564d57604051602080825281906200046b908201886200def3565b6001602081926200565e856200e9d0565b8152019201920191906200562d565b34620001d45760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d457600435620056ab6200ddcc565b620056b56200e576565b90600382528260e0830152620056cd6044356200f03d565b60018101808211620054a557620056e7906064356200f015565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d457604051907fe5d6bf02000000000000000000000000000000000000000000000000000000008252600482015260c0518160248160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015620003575762005d9d575b50601f54602080546040517f32c02a1400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152602480359082015260c051909384926044928492909160089190911c165af18015620003575760c0519062005d48575b73ffffffffffffffffffffffffffffffffffffffff91501692737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4576040517fca669fa700000000000000000000000000000000000000000000000000000000815284600482015260c0518160248160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015620003575762005d2b575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4576040517f81bad6f300000000000000000000000000000000000000000000000000000000815260c0516001600483018190526024830181905260006044840152606483015273ffffffffffffffffffffffffffffffffffffffff86166084830152818060a48101038160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015620003575762005d0e575b506200592284826200f4ce565b60408051918252600060208301526bffffffffffffffffffffffff8416908201819052907febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b190606090a16200597885836200f4ce565b853b15620001d4576040517ff727ef1c00000000000000000000000000000000000000000000000000000000815260c0516004820192909252600060248201526bffffffffffffffffffffffff9092166044830152818060648101038160c051895af19081156200035757859162005cee575b50620059f7916200f4ce565b90604051917f92dcb3fc0000000000000000000000000000000000000000000000000000000083526004830152604082602481875afa8015620003575762005a599260c0519060c0519262005cb2575b5062005a53906200fb16565b6200fe90565b6040517f1626ba7e0000000000000000000000000000000000000000000000000000000081526020818062005ac98760048301608091815260406020820152600160408201527f800000000000000000000000000000000000000000000000000000000000000060608201520190565b0381865afa908115620003575762005b0f917fffffffff000000000000000000000000000000000000000000000000000000009160c0519162005c8e575b50166200fc67565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d45773ffffffffffffffffffffffffffffffffffffffff604051917fca669fa700000000000000000000000000000000000000000000000000000000835216600482015260c0518160248160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015620003575762005c71575b50604080517f1626ba7e00000000000000000000000000000000000000000000000000000000815260048101939093526024830152600160448301527f8000000000000000000000000000000000000000000000000000000000000000606483015260209082908180608481015b03915afa908115620003575762000351917fffffffff000000000000000000000000000000000000000000000000000000009160c0519162005c4d5750166200fc67565b62005c6a915060203d60201162002b635762002b5381836200dcfe565b8362005b07565b60c05162005c7f916200dcfe565b60c051620001d4578262005b9b565b62005cab915060203d60201162002b635762002b5381836200dcfe565b8662005b07565b62005a53925062005cdf915060403d60401162005ce6575b62005cd681836200dcfe565b8101906200e9b0565b9162005a47565b503d62005cca565b62005cfe915060c051906200dcfe565b60c051620001d4578386620059eb565b60c05162005d1c916200dcfe565b60c051620001d4578562005915565b60c05162005d39916200dcfe565b60c051620001d4578562005868565b506020813d60201162005d94575b8162005d65602093836200dcfe565b81010312620001d45762005d8e73ffffffffffffffffffffffffffffffffffffffff916200e5c1565b620057d9565b3d915062005d56565b60c05162005dab916200dcfe565b60c051620001d457846200575e565b34620001d45760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d45760043562005df86200ddcc565b60a43573ffffffffffffffffffffffffffffffffffffffff811690819003620001d45773ffffffffffffffffffffffffffffffffffffffff8216801515806200673c575b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d457604051907f4c63e5620000000000000000000000000000000000000000000000000000000082521515600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562000357576200671f575b5062005ebc6200e576565b600381528460e082015262005ed36044356200f03d565b9360018501808611620054a55762005eee906064356200f015565b94737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d457604051907fe5d6bf02000000000000000000000000000000000000000000000000000000008252600482015260c0518160248160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015620003575762006702575b50601f54602080546040517f32c02a1400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152602480359082015260c051909384926044928492909160089190911c165af18015620003575760c05190620066ad575b73ffffffffffffffffffffffffffffffffffffffff91501694737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4576040517fca669fa700000000000000000000000000000000000000000000000000000000815286600482015260c0518160248160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015620003575762006690575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4576040517f81bad6f300000000000000000000000000000000000000000000000000000000815260c0516001600483018190526024830181905260006044840152606483015273ffffffffffffffffffffffffffffffffffffffff88166084830152818060a48101038160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015620003575762006673575b506200612986846200f4ce565b6040805191825273ffffffffffffffffffffffffffffffffffffffff841660208301526bffffffffffffffffffffffff8316908201819052907febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b190606090a16200619487856200f4ce565b873b15620001d4576040517ff727ef1c00000000000000000000000000000000000000000000000000000000815260c051600482019290925273ffffffffffffffffffffffffffffffffffffffff851660248201526bffffffffffffffffffffffff9092166044830152818060648101038160c0518b5af18015620003575762006656575b506200622686846200f4ce565b91604051927f92dcb3fc00000000000000000000000000000000000000000000000000000000845260048401526040836024818a5afa9081156200035757620062849360c0519060c051936200662a575b509062005a53916200fbc7565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4576040517fca669fa700000000000000000000000000000000000000000000000000000000815282600482015260c0518160248160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562000357576200660d575b506040517f1626ba7e000000000000000000000000000000000000000000000000000000008152602081806200636b8960048301608091815260406020820152600160408201527f800000000000000000000000000000000000000000000000000000000000000060608201520190565b0381885afa9081156200035757620063b0917fffffffff000000000000000000000000000000000000000000000000000000009160c05191620065e95750166200fc67565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4576040517fca669fa700000000000000000000000000000000000000000000000000000000815283600482015260c0518160248160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811562000357578591620065c9575b5062006435916200f4ce565b91604051927f8945c31300000000000000000000000000000000000000000000000000000000602085015260248401526044830152606482015260648152620064806084826200dcfe565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d457604051907ff28dceb3000000000000000000000000000000000000000000000000000000008252602060048301528180620064df60c0519360248301906200deae565b038160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156200035757620065ac575b50604080517f1626ba7e00000000000000000000000000000000000000000000000000000000815260048101939093526024830152600160448301527f80000000000000000000000000000000000000000000000000000000000000006064830152602090829060849082905afa80156200035757620065885760c05180f35b620065a49060203d60201162002b635762002b5381836200dcfe565b508062000351565b60c051620065ba916200dcfe565b60c051620001d4578262006508565b620065d9915060c051906200dcfe565b60c051620001d457838662006429565b62006606915060203d60201162002b635762002b5381836200dcfe565b8862005b07565b60c0516200661b916200dcfe565b60c051620001d45785620062fa565b62005a539293506200664e915060403d60401162005ce65762005cd681836200dcfe565b929162006277565b60c05162006664916200dcfe565b60c051620001d4578762006219565b60c05162006681916200dcfe565b60c051620001d457876200611c565b60c0516200669e916200dcfe565b60c051620001d457876200606f565b506020813d602011620066f9575b81620066ca602093836200dcfe565b81010312620001d457620066f373ffffffffffffffffffffffffffffffffffffffff916200e5c1565b62005fe0565b3d9150620066bb565b60c05162006710916200dcfe565b60c051620001d4578662005f65565b60c0516200672d916200dcfe565b60c051620001d4578462005eb1565b508181141562005e3c565b34620001d4576200677b61ffff60ff620067838262006766366200e377565b9694919893999297909716948591166200f007565b16946200ef77565b94604051947fffa18649000000000000000000000000000000000000000000000000000000008652866004870152602086602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa958615620003575760c0519662007b50575b5073ffffffffffffffffffffffffffffffffffffffff604051967f56ca623e000000000000000000000000000000000000000000000000000000008852169586600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c0519162007b30575b50604051937f6900a3ae000000000000000000000000000000000000000000000000000000008552600485015260c05184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562000357576200698c600166ffffffffffffff936007602097620069949960c0519162007b10575b50604051988993606051620068e3818488016200de64565b85017f7369676e65723a00000000000000000000000000000000000000000000000000838201526200691f82518093856027850191016200de89565b01017f3a00000000000000000000000000000000000000000000000000000000000000838201526200695c8251809360206008850191016200de89565b010103017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018652856200dcfe565b16906200f053565b6200699f816200f33c565b601f54602080546040517f32c02a1400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526024810185905260c051949694909384926044928492909160089190911c165af18015620003575760c0519062007abb575b73ffffffffffffffffffffffffffffffffffffffff9150169273ffffffffffffffffffffffffffffffffffffffff601f5460081c169073ffffffffffffffffffffffffffffffffffffffff60205416604051917fb11a19e8000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620003575760c0519262007a99575b50604051927f56ca623e000000000000000000000000000000000000000000000000000000008452600484015260c05183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa928315620003575760c0519362007a77575b50604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620003575762006ca092600d600c9260029460c0519162007a57575b50602e6040519788947f7b22696d61676548617368223a22000000000000000000000000000000000000602087015262006bd0815180926020868a0191016200de89565b85017f222c22666163746f7279223a22000000000000000000000000000000000000008382015262006c0d825180936020603b850191016200de89565b01017f222c226d6f64756c65223a2200000000000000000000000000000000000000008382015262006c4a8251809360206019850191016200de89565b01017f227d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe28101845201826200dcfe565b6040517fc1978d1f000000000000000000000000000000000000000000000000000000008152602060048201819052601460248301527f5345515f53444b5f5250435f4d494e5f504f5254000000000000000000000000604483015281606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c0519162007a1f575b50604051907fc1978d1f00000000000000000000000000000000000000000000000000000000825260206004830152601460248301527f5345515f53444b5f5250435f4d41585f504f52540000000000000000000000006044830152602082606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620003575760c05192620079e5575b5080821062007987577fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a654801562007930575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114620054a55781600162006e42920193847fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a6556200ebbf565b9160018301809311620054a55762006e669262006e5f916201027a565b906200eb13565b90604051917ff877cb1900000000000000000000000000000000000000000000000000000000835260206004840152601660248401527f5345515f53444b5f5250435f55524c5f50524546495800000000000000000000604484015260c05183606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa928315620003575760c051936200790e575b506040517ff877cb1900000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5345515f53444b5f5250435f55524c5f53554646495800000000000000000000604482015260c05181606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c05191620078ee575b50604051917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620003575762007108946200709c9360c05192620078c6575b5060206200705f9293620070318260405196856200700b899751809285808b0191016200de89565b860162007021825180938580850191016200de89565b010191828151948592016200de89565b01037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826200dcfe565b60405193849283927f0199a2200000000000000000000000000000000000000000000000000000000084526060600485015260648401906200deae565b93603c8386037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024860152601187527f616464726573735f63616c63756c6174650000000000000000000000000000006020880152016044840152604060c0519501906200deae565b038160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115620003575760c05191620078a6575b50604051907f71aad10d0000000000000000000000000000000000000000000000000000000082526020600483015281806200717a60c0519360248301906200deae565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c0519162007886575b50602a815103620078285760c051906002905b602a8210620075fb57505073ffffffffffffffffffffffffffffffffffffffff620071e59116846200fbc7565b6200720e83620071f46200e576565b92600384528660e08501521592831560208201526200f4ce565b604051967fe341eaa400000000000000000000000000000000000000000000000000000000885260048801526024870152606086604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa958615620003575760c0519260c0519160c05198620075ce575b50604051967f56ca623e000000000000000000000000000000000000000000000000000000008852600488015260c05187602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa968715620003575760c05197620075ac575b50604051917fb11a19e8000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620003575760c051926200758a575b50604051977fb11a19e8000000000000000000000000000000000000000000000000000000008952600489015260c05188602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa978815620003575760c0519862007568575b5060ff604051947f6900a3ae00000000000000000000000000000000000000000000000000000000865216600485015260c05184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156200035757600160209881620075069362005c099c6200750c9960c0519262007543575b506006908d6040519986620074208c9851809285808c0191016200de89565b87017f3a686173683a0000000000000000000000000000000000000000000000000000838201526200745c82518093856026850191016200de89565b01017f3a00000000000000000000000000000000000000000000000000000000000000838201526200749a825160209381946007850191016200de89565b01017f3a0000000000000000000000000000000000000000000000000000000000000083820152620074d6825180938f6002850191016200de89565b010103017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018452836200dcfe565b6200f5ec565b916040518095819482937f1626ba7e000000000000000000000000000000000000000000000000000000008452600484016200e7d1565b600691925062007560903d8060c051833e62001a2581836200dcfe565b919062007401565b620075829198503d8060c051833e62001a2581836200dcfe565b96886200738d565b620075a49192503d8060c051833e62001a2581836200dcfe565b908862007330565b620075c69197503d8060c051833e62001a2581836200dcfe565b9588620072d3565b91509650620075f091925060603d60601162001ace5762001abc81836200dcfe565b969192918862007276565b909173ffffffffffffffffffffffffffffffffffffff0073ffffffffffffffffffffffffffffffffffffffff82169160081b16908082046101001490151715620054a5576200764b838362010cca565b5160f81c60018401808511620054a55762007667908462010cca565b5160f81c906030811015806200781c575b15620077c357620076899062010d40565b905b603081101580620077b7575b15620076ff57620076a89062010d40565b905b60041b90610ff060f0831692168203620054a55760ff160160ff8111620054a55760ff160173ffffffffffffffffffffffffffffffffffffffff8111620054a5579160028101809111620054a55790620071b8565b604181101580620077ab575b1562007723576200771c9062010d0e565b90620076aa565b6061811015806200779f575b1562007740576200771c9062010cdc565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e76616c6964206865782063686172000000000000000000000000000000006044820152606490fd5b5060668111156200772f565b5060468111156200770b565b50603981111562007697565b60418110158062007810575b15620077e757620077e09062010d0e565b906200768b565b60618110158062007804575b156200774057620077e09062010cdc565b506066811115620077f3565b506046811115620077cf565b50603981111562007678565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f496e76616c6964206164647265737320666f726d6174000000000000000000006044820152fd5b6200789f91503d8060c051833e62001a2581836200dcfe565b87620071a5565b620078bf91503d8060c051833e62001a2581836200dcfe565b8762007136565b6200705f9250620078e66020913d8060c051833e62001a2581836200dcfe565b925062006fe3565b6200790791503d8060c051833e62001a2581836200dcfe565b8a62006f7d565b620079289193503d8060c051833e62001a2581836200dcfe565b918962006ef2565b5060405160208101903660c05183376200797e60208236810160c0518382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826200dcfe565b51902062006de7565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f496e76616c696420706f72742072616e676500000000000000000000000000006044820152fd5b9091506020813d60201162007a16575b8162007a04602093836200dcfe565b81010312620019c05751908962006db4565b3d9150620079f5565b90506020813d60201162007a4e575b8162007a3d602093836200dcfe565b81010312620019c057518862006d29565b3d915062007a2e565b62007a7091503d8060c051833e62001a2581836200dcfe565b8d62006b8c565b62007a919193503d8060c051833e62001a2581836200dcfe565b918962006b23565b62007ab39192503d8060c051833e62001a2581836200dcfe565b908962006ac6565b506020813d60201162007b07575b8162007ad8602093836200dcfe565b81010312620001d45762007b0173ffffffffffffffffffffffffffffffffffffffff916200e5c1565b62006a1b565b3d915062007ac9565b62007b2991503d8060c051833e62001a2581836200dcfe565b8e620068cb565b62007b4991503d8060c051833e62001a2581836200dcfe565b8862006855565b9095506020813d60201162007b8b575b8162007b6f602093836200dcfe565b81010312620001d45762007b83906200e5c1565b9487620067e0565b3d915062007b60565b34620001d45760c0517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d457601b5462007bd4816200df6e565b9062007be460405192836200dcfe565b808252602082019081601b60c051527f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc160c051915b83831062007ccb57848660405191829160208301906020845251809152604083019060408160051b850101929160c051905b82821062007c5b57505050500390f35b9193602062007cba827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc060019597998495030186528851908362007ca983516040845260408401906200deae565b92015190848184039101526200e31f565b960192019201859493919262007c4b565b6002602060019260405162007ce0816200dcc3565b62007ceb866200e9d0565b815262007cfa8587016200ebcd565b8382015281520192019201919062007c19565b34620001d45760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d45760043567ffffffffffffffff8111620001d4576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8236030112620001d45760405190610100820182811067ffffffffffffffff82111762001e235760405280600401359067ffffffffffffffff8211620001d45762007e4560e462007dd162007e5094600436918601016200e00f565b9283865262007de3602482016200dd52565b602087015262007df6604482016200dd79565b604087015262007e09606482016200dd9f565b60608701526084810135608087015262007e2660a482016200ddbe565b60a087015262007e3960c482016200ddbe565b60c0870152016200ddbe565b60e08401526200ff0a565b62007e5f60808201516200ef77565b608082015260e0810151151560208251015260a0810151151560001462008ce45761ffff62007e9b8160018160208601511660c05150620102b4565b60406200205562007eb382516200305984826200dcfe565b60c0519160c0519151906a636f6e736f6c652e6c6f675afa5016602082015260ff62007ee5816060840151166200f02e565b1660608201525b60405160a05262007eff60a0516200dc3c565b60c05160a051526060602060a051015260c051604060a051015260608060a051015260c051608060a051015260c05160a08051015260c05160c060a051015260c05160e060a051015260c05161010060a051015260c05161012060a05101526080810151604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620003575760c0519062008c8f575b73ffffffffffffffffffffffffffffffffffffffff9150168060a05152604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c0519162008c6f575b5060ff60608301511690604051917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562000357576200814f6020926200815c92620081f09560c0519262008c45575b506001620081329160276040519485927f7369676e65723a000000000000000000000000000000000000000000000000008a850152620080f6815180928c86880191016200de89565b83017f3a00000000000000000000000000000000000000000000000000000000000000838201526200085c825180938c6028850191016200de89565b61ffff848701511666ffffffffffffff604088015116906200f053565b808360a05101526200f33c565b80604060a051015273ffffffffffffffffffffffffffffffffffffffff601f5460081c1673ffffffffffffffffffffffffffffffffffffffff8354166040518095819482937f32c02a14000000000000000000000000000000000000000000000000000000008452600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b039160c051905af1908115620003575760c0519162008be9575b5073ffffffffffffffffffffffffffffffffffffffff6200823791168061010060a051015282516200f4ce565b60e060a051015260206040516200824f82826200dcfe565b60c051815260c05161012060a051015260a083015162008746575b9060c06200828b620082e993602060a05101519060e087015115916200f5ec565b80606060a051015273ffffffffffffffffffffffffffffffffffffffff61010060a05101511685516040518096819482937fad55366b000000000000000000000000000000000000000000000000000000008452600484016200eba5565b03915afa8015620003575760c0519283918291829182918291620086d8575b50620083a3906200835d61ffff60208b015116986040998a51916200832e8c846200dcfe565b601283527f5468726573686f6c64206d69736d6174636800000000000000000000000000008b8401526200fd7b565b61012060a0510151885191620083748a846200dcfe565b600f83527f576569676874206d69736d617463680000000000000000000000000000000000898401526200fd7b565b6004601f548673ffffffffffffffffffffffffffffffffffffffff8154168951938480927f257671f50000000000000000000000000000000000000000000000000000000082525afa8015620086cc5760c0519062008685575b73ffffffffffffffffffffffffffffffffffffffff92508851907fffffffffffffffffffffffffffffffffffffffff000000000000000000000000898301937fff00000000000000000000000000000000000000000000000000000000000000855260581b166021830152856035830152605582015260558152620084846075826200dcfe565b51902060a051610100015188519273ffffffffffffffffffffffffffffffffffffffff91909116911614620084ba88836200dcfe565b601582527f697356616c6964496d616765206d69736d61746368000000000000000000000087830152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4578751927f4db19e7e0000000000000000000000000000000000000000000000000000000084521515600484015260248301526060604483015281806200854d60c0519360648301906200deae565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620086795762008658575b509066ffffffffffffff60406200035197620085d162008614958360a05101518a5191620085a28c846200dcfe565b601283527f496d61676548617368206d69736d6174636800000000000000000000000000008b8401526201020f565b0151865192911690620085e587846200dcfe565b601383527f436865636b706f696e74206d69736d6174636800000000000000000000000000868401526200fd7b565b7f4f7048617368206d69736d61746368000000000000000000000000000000000060e060a0510151926200864b855195866200dcfe565b600f85528401526201020f565b60c05191929162008669916200dcfe565b60c051620001d457908662008573565b86513d60c051823e3d90fd5b508682813d8311620086c4575b6200869e81836200dcfe565b81010312620019c05773ffffffffffffffffffffffffffffffffffffffff9151620083fd565b503d62008692565b88513d60c051823e3d90fd5b9650505050505060c0823d60c0116200873d575b81620086fb60c093836200dcfe565b81010312620001d45781519181810151926040820151918215158303620001d4576060810151620083a360a06080840151930151939694919293949062008308565b3d9150620086ec565b5060e060a051015160c083015162008ba0575b608083015190604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620003575760c05160ff9290918291829162008b79575b5060c060a051015260a08051015216608060a051015260c0820151151560c0515060001462008b385760408051906200880090826200dcfe565b600a81527f3a6574685f7369676e3a0000000000000000000000000000000000000000000082820152905b73ffffffffffffffffffffffffffffffffffffffff60a051511691604051927f56ca623e000000000000000000000000000000000000000000000000000000008452600484015260c05183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa928315620003575760c0519362008b16575b5060a080510151604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c0519162008af6575b5060c060a0510151604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c0519162008ad6575b5060ff608060a051015116604051907f6900a3ae000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9283156200035757620082e99660016200828b9562008a099589839560c09a62008a92988c519562008aad575b508262008a1f91816040519c8d8b83829d519485930191016200de89565b890162007021825180938580850191016200de89565b017f3a00000000000000000000000000000000000000000000000000000000000000815262008a57825180938d87850191016200de89565b017f3a00000000000000000000000000000000000000000000000000000000000000838201526200085c825180938c6002850191016200de89565b60ff60608701511661012060a051015292935050506200826a565b62008a1f91955062008acd84913d8f819051833e62001a2581836200dcfe565b959150620089eb565b62008aef91503d8060c051833e62001a2581836200dcfe565b8662008969565b62008b0f91503d8060c051833e62001a2581836200dcfe565b8562008905565b62008b309193503d8060c051833e62001a2581836200dcfe565b9184620088a2565b604080519062008b4990826200dcfe565b600681527f3a686173683a000000000000000000000000000000000000000000000000000082820152906200882b565b91505062008b99915060603d60601162001ace5762001abc81836200dcfe565b86620087c6565b604051828101917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008352603c820152603c815262008be0605c826200dcfe565b51902062008759565b90506020813d60201162008c3c575b8162008c07602093836200dcfe565b81010312620001d45773ffffffffffffffffffffffffffffffffffffffff62008c3462008237926200e5c1565b91506200820a565b3d915062008bf8565b6200813291925062008c666001913d8060c051833e62001a2581836200dcfe565b929150620080ad565b62008c8891503d8060c051833e62001a2581836200dcfe565b8262008036565b506020813d60201162008cdb575b8162008cac602093836200dcfe565b81010312620001d45762008cd573ffffffffffffffffffffffffffffffffffffffff916200e5c1565b62007fbd565b3d915062008c9d565b602081015160c05161ffff9162008cff9183918216620102b4565b60406200205562008d1782516200305984826200dcfe565b60c0519160c0519151906a636f6e736f6c652e6c6f675afa5016602082015260ff62008d49816060840151166200f02e565b16606082015262007eec565b34620001d45760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d45760043560c0515062008daa6bfffffffffffffffffffffffe60c051604435620102b4565b604090815162008dbb83826200dcfe565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152825162008e29816200205560208201947fb60e72cc00000000000000000000000000000000000000000000000000000000865287602484015260648301906200deae565b60c0519160c0519151906a636f6e736f6c652e6c6f675afa5060018101808211620054a55762008e5c906064356200f015565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4578251907fe5d6bf02000000000000000000000000000000000000000000000000000000008252600482015260c0518160248160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015620097ab576200995b575b50601f546020805484517f32c02a1400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152602480359082015260c051909384926044928492909160089190911c165af18015620097ab5760c0519062009906575b73ffffffffffffffffffffffffffffffffffffffff9150169062008f848262008f746200e576565b600381528660e08201526200f4ce565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d45783517fca669fa700000000000000000000000000000000000000000000000000000000815283600482015260c0518160248160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156200365557620098e9575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d45783517f81bad6f300000000000000000000000000000000000000000000000000000000815260c0516001600483018190526024830181905260006044840152606483015273ffffffffffffffffffffffffffffffffffffffff85166084830152818060a48101038160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156200365557620098cc575b508351828152600060208201526bffffffffffffffffffffffff821660408201819052907febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b190606090a1833b15620001d45784517ff727ef1c00000000000000000000000000000000000000000000000000000000815260c05160048201859052600060248301526bffffffffffffffffffffffff909216604482015290818060648101038160c051885af180156200365557620098af575b5083517f92dcb3fc0000000000000000000000000000000000000000000000000000000081528260048201528481602481875afa908115620036555760c051620091b892849282916200988e575062005a53906200fb16565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818111620054a557737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4578451907fe5d6bf02000000000000000000000000000000000000000000000000000000008252600482015260c0518160248160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015620036555762009871575b5083517f1626ba7e0000000000000000000000000000000000000000000000000000000081526004810186905260406024820152600160448201527f80000000000000000000000000000000000000000000000000000000000000006064820152602081608481875afa908115620036555760c051916200984d575b508451620092e46060826200dcfe565b602781527f5369676e61747572652073686f756c642062652076616c6964206265666f726560208201527f206578706972790000000000000000000000000000000000000000000000000086820152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4577fffffffff000000000000000000000000000000000000000000000000000000008651927fc1fa1ed00000000000000000000000000000000000000000000000000000000084521660048301527f1626ba7e000000000000000000000000000000000000000000000000000000006024830152606060448301528180620093de60c0519360648301906200deae565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620036555762009830575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d45783517fe5d6bf0200000000000000000000000000000000000000000000000000000000815281600482015260c0518160248160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015620036555762009813575b5083517ff95b6ab700000000000000000000000000000000000000000000000000000000602082015282602482015281604482015260448152620094c06064826200dcfe565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4578451907ff28dceb30000000000000000000000000000000000000000000000000000000082526020600483015281806200951e60c0519360248301906200deae565b038160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156200365557620097f6575b5083517f1626ba7e0000000000000000000000000000000000000000000000000000000081526004810186905260406024820152600160448201527f80000000000000000000000000000000000000000000000000000000000000006064820152602081608481875afa80156200365557620097d4575b5060018101808211620054a557737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4578451907fe5d6bf02000000000000000000000000000000000000000000000000000000008252600482015260c0518160248160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156200365557620097b7575b508351917ff95b6ab70000000000000000000000000000000000000000000000000000000060208401526024830152604482015260448152620096856064826200dcfe565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4578251907ff28dceb3000000000000000000000000000000000000000000000000000000008252602060048301528180620096e360c0519360248301906200deae565b038160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015620097ab576200978e575b5081517f1626ba7e000000000000000000000000000000000000000000000000000000008152600481019390935260406024840152600160448401527f80000000000000000000000000000000000000000000000000000000000000006064840152602090839060849082905afa908115620035b45750620065885760c05180f35b60c0516200979c916200dcfe565b60c051620001d457836200970c565b83513d60c051823e3d90fd5b60c051620097c5916200dcfe565b60c051620001d4578562009640565b620097f09060203d60201162002b635762002b5381836200dcfe565b620095be565b60c05162009804916200dcfe565b60c051620001d4578562009547565b60c05162009821916200dcfe565b60c051620001d457856200947a565b60c0516200983e916200dcfe565b60c051620001d4578562009404565b6200986a915060203d60201162002b635762002b5381836200dcfe565b86620092d4565b60c0516200987f916200dcfe565b60c051620001d4578562009258565b62005a53925062005cdf9150883d8a1162005ce65762005cd681836200dcfe565b60c051620098bd916200dcfe565b60c051620001d457856200915f565b60c051620098da916200dcfe565b60c051620001d45785620090a6565b60c051620098f7916200dcfe565b60c051620001d4578562008ffa565b506020813d60201162009952575b8162009923602093836200dcfe565b81010312620001d4576200994c73ffffffffffffffffffffffffffffffffffffffff916200e5c1565b62008f4c565b3d915062009914565b60c05162009969916200dcfe565b60c051620001d4578362008ed2565b34620001d45760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d45760043567ffffffffffffffff8111620001d457620099cc9036906004016200e275565b620099d66200dd62565b604082019066ffffffffffffff80835116911690737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d457604051907f4c63e562000000000000000000000000000000000000000000000000000000008252821415600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562000357576200a4a1575b5062009a6d83516200ff0a565b602083019261ffff84511661ffff62009a90606084019260ff845116906200f007565b168552608082019362009aa485516200ef77565b855262009ab06200eae4565b918551604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620003575760c051906200a44c575b73ffffffffffffffffffffffffffffffffffffffff91501690818452604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620003575760c051926200a427575b5060ff90511690604051917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620003575762009d8f966020948a62009cf59462009cfd9660c051956200a3e3575b5061ffff9266ffffffffffffff8462009ce69462009cda60018d9660076040519c8d998a9360605162009c30818488016200de64565b85017f7369676e65723a000000000000000000000000000000000000000000000000008382015262009c6c82518093856027850191016200de89565b01017f3a000000000000000000000000000000000000000000000000000000000000008382015262009caa825160209381946008850191016200de89565b010103017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018752866200dcfe565b5116915116906200f053565b9a8688019b8c5251166200f053565b96516200f33c565b80604084015273ffffffffffffffffffffffffffffffffffffffff601f5460081c1673ffffffffffffffffffffffffffffffffffffffff8354166040518097819482937f32c02a14000000000000000000000000000000000000000000000000000000008452600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b039160c051905af1928315620003575760c051936200a39f575b5073ffffffffffffffffffffffffffffffffffffffff6060820193168352610100825101515160018101809111620054a55762009de6906200eb50565b9260c0515b61010084510151805182101562009e36579073ffffffffffffffffffffffffffffffffffffffff62009e20826001946200e722565b511662009e2e82886200e722565b520162009deb565b505083858760a086019173ffffffffffffffffffffffffffffffffffffffff83511662009e6b6101008951015151866200e722565b5261010087510193845194525162009e9d875173ffffffffffffffffffffffffffffffffffffffff875116906200f4ce565b604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620003575760c05192839283916200a375575b5073ffffffffffffffffffffffffffffffffffffffff88511693604051947f56ca623e000000000000000000000000000000000000000000000000000000008652600486015260c05185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa948515620003575760c051956200a353575b50604051917fb11a19e8000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620003575760c051926200a331575b50604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c051916200a311575b5060ff604051947f6900a3ae00000000000000000000000000000000000000000000000000000000865216600485015260c05184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760809560016200a0c19381936200a0cf9860c0519262001c1357506006906020604051988662000e788b9851809285808c0191016200de89565b60208951015115916200f5ec565b9401938085526200a1158651620045c46040519384927ff58cc8b5000000000000000000000000000000000000000000000000000000006020850152602484016200eba5565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d457604051907ff28dceb30000000000000000000000000000000000000000000000000000000082526020600483015281806200a17460c0519360248301906200deae565b038160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562000357576200a2f4575b5073ffffffffffffffffffffffffffffffffffffffff91610100865101525116737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d457604051907fca669fa7000000000000000000000000000000000000000000000000000000008252600482015260c0518160248160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562000357576200a2d3575b50906200a28f9273ffffffffffffffffffffffffffffffffffffffff602093511690519151916040518095819482937f13792a4a000000000000000000000000000000000000000000000000000000008452600484016200eba5565b03915afa801562000357576200a2a55760c05180f35b620065a49060203d6020116200a2cb575b6200a2c281836200dcfe565b8101906200e787565b503d6200a2b6565b60c0519192916200a2e4916200dcfe565b60c051620001d45790836200a233565b60c0516200a302916200dcfe565b60c051620001d457856200a19d565b6200a32a91503d8060c051833e62001a2581836200dcfe565b8a6200a031565b6200a34b9192503d8060c051833e62001a2581836200dcfe565b908a62009fd4565b6200a36d9195503d8060c051833e62001a2581836200dcfe565b938a62009f77565b919350506200a396915060603d60601162001ace5762001abc81836200dcfe565b92908962009f01565b9092506020813d6020116200a3da575b816200a3be602093836200dcfe565b81010312620001d4576200a3d2906200e5c1565b918562009da9565b3d91506200a3af565b889195509266ffffffffffffff61ffff62009ce69462009cda60016200a41784993d8060c051833e62001a2581836200dcfe565b9a96505050945050509262009bfa565b60ff9192506200a444903d8060c051833e62001a2581836200dcfe565b919062009b85565b506020813d6020116200a498575b816200a469602093836200dcfe565b81010312620001d4576200a49273ffffffffffffffffffffffffffffffffffffffff916200e5c1565b62009b0d565b3d91506200a45a565b60c0516200a4af916200dcfe565b60c051620001d4578362009a60565b34620001d45760c0517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d457604051806020601754918281520190601760c051527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c159060c0515b8181106200a546576200046b856200045e818703826200dcfe565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016200a52b565b34620001d45760c0517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d457604051806020601854918281520190601860c051527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e9060c0515b8181106200a5fb576200046b856200045e818703826200dcfe565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016200a5e0565b34620001d45760c0517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d457602073ffffffffffffffffffffffffffffffffffffffff815416604051908152f35b34620001d45760c0517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d457601e546200a6bc816200df6e565b906200a6cc60405192836200dcfe565b808252602082019081601e60c051527f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e35060c051915b8383106200a7b857848660405191829160208301906020845251809152604083019060408160051b850101929160c051905b8282106200a74357505050500390f35b919360206200a7a7827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc060019597998495030186526040838a5173ffffffffffffffffffffffffffffffffffffffff8151168452015191818582015201906200def3565b96019201920185949391926200a733565b6040516200a7c6816200dcc3565b825473ffffffffffffffffffffffffffffffffffffffff1681526001830180546200a7f1816200df6e565b916200a80160405193846200dcfe565b818352602083019060c05152602060c051209060c051905b8382106200a8415750505050600192826020928360029501528152019201920191906200a701565b6001602081926200a852866200e9d0565b8152019301910190916200a819565b34620001d45760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d4576040516200a8a0816200dca6565b600435808252602435602083015260443561ffff81168103620001d457604083015260643561ffff81168103620001d45760608301526084359066ffffffffffffff82168203620001d4576200a8fb9160808401526200ef77565b81526040516200a90b816200dc3c565b60c0518152602081019160c051835260408201906060825260608301926060845260808101916060835260a082016060815260c083016060815260e084016060815261010085019560c051875261012086019660c05188528551604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620003575760c051906200ba31575b73ffffffffffffffffffffffffffffffffffffffff91501691828852604051927f56ca623e000000000000000000000000000000000000000000000000000000008452600484015260c05183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa928315620003575760c051936200ba0f575b5060405180916200aad9600260278460208101987f7369676e65723a000000000000000000000000000000000000000000000000008a526200aa8381518092602086860191016200de89565b81017f3a310000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe28101855201836200dcfe565b526040517f6900a3ae0000000000000000000000000000000000000000000000000000000081526001600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c051916200b9ef575b50604051937f6900a3ae00000000000000000000000000000000000000000000000000000000855260c051600486015260c05185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562000357576200ad309560c051946200b904575b506200ac64926010600293601b9362006c4a602e604051998a967f7b227468726573686f6c64223a2200000000000000000000000000000000000060208901526200abf1815180926020868c0191016200de89565b87017f222c22636865636b706f696e74223a2200000000000000000000000000000000838201526200ac2e825180936020603e850191016200de89565b0101917f222c2266726f6d223a22666c6174222c22636f6e74656e74223a22000000000085840152518093602b8401906200de89565b6200acc46200ac87737109709ecfa91a80626ff3989d68f67f5b1dd12d620104b6565b60405194859283927f0199a2200000000000000000000000000000000000000000000000000000000084526060600485015260648401906200deae565b93603c8386037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024860152600a87527f636f6e6669675f6e6577000000000000000000000000000000000000000000006020880152016044840152604060c0519501906200deae565b038160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af190811562000357576200ad746020926200ae039460c051916200b9cf575b508088526200f33c565b80915273ffffffffffffffffffffffffffffffffffffffff601f5460081c1673ffffffffffffffffffffffffffffffffffffffff8354166040518095819482937f32c02a14000000000000000000000000000000000000000000000000000000008452600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b039160c051905af18015620003575760c051906200b97a575b73ffffffffffffffffffffffffffffffffffffffff915016895273ffffffffffffffffffffffffffffffffffffffff85511691604051927f56ca623e000000000000000000000000000000000000000000000000000000008452600484015260c05183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa928315620003575760c051936200b958575b5060405180916200aef7600260278460208101987f7369676e65723a000000000000000000000000000000000000000000000000008a526200aa8381518092602086860191016200de89565b526040517f6900a3ae0000000000000000000000000000000000000000000000000000000081526001600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c051916200b938575b50604051937f6900a3ae0000000000000000000000000000000000000000000000000000000085526001600486015260c05185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562000357576200b00d9560c051946200b90457506200ac64926010600293601b9362006c4a602e604051998a967f7b227468726573686f6c64223a2200000000000000000000000000000000000060208901526200abf1815180926020868c0191016200de89565b038160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562000357576200b0499260c051916200b8e4575b508091526200f33c565b84526200b0556200e576565b9160c05183526200b1166200b0696200e64f565b6040850190815273ffffffffffffffffffffffffffffffffffffffff8a5116908751604051907f295614260000000000000000000000000000000000000000000000000000000060208301526024820152602481526200b0cb6044826200dcfe565b604051926200b0da846200dc89565b835260c05160208401526040830152620186a0606083015260c051608083015260c05160a0830152600160c0830152519062000c04826200e6e5565b50516200b13b73ffffffffffffffffffffffffffffffffffffffff895116846200f4ce565b604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa938415620003575760c0519260c0519260c051966200b89f575b5073ffffffffffffffffffffffffffffffffffffffff905191511694604051957f56ca623e000000000000000000000000000000000000000000000000000000008752600487015260c05186602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa958615620003575760c051966200b87d575b50604051927fb11a19e8000000000000000000000000000000000000000000000000000000008452600484015260c05183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa928315620003575760c051936200b85b575b50604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c051916200b83b575b5060ff604051947f6900a3ae00000000000000000000000000000000000000000000000000000000865216600485015260c05184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562000357576200b42c9660016200b41e9381936200b4249860c051926200b816575b50600690602060405199866200b3688c9851809285808c0191016200de89565b87017f3a686173683a0000000000000000000000000000000000000000000000000000838201526200b3a482518093856026850191016200de89565b01017f3a00000000000000000000000000000000000000000000000000000000000000838201526200b3e18251809360206007850191016200de89565b01017f3a0000000000000000000000000000000000000000000000000000000000000083820152620074d68251809360206002850191016200de89565b6200f7fc565b84526200f961565b835273ffffffffffffffffffffffffffffffffffffffff845116737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4576040517f81bad6f300000000000000000000000000000000000000000000000000000000815260c0516001600483018190526024830181905260006044840152606483015273ffffffffffffffffffffffffffffffffffffffff909216608482015290818060a48101038160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562000357576200b7f9575b5060207f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa9151604051908152a173ffffffffffffffffffffffffffffffffffffffff83511691519051823b15620001d4576200b5839260405180809581947f1f6a1eb900000000000000000000000000000000000000000000000000000000835260c05196600484016200e75e565b039160c051905af1801562000357576200b7dc575b506004602073ffffffffffffffffffffffffffffffffffffffff835116604051928380927faaf10f420000000000000000000000000000000000000000000000000000000082525afa8015620003575760c051906200b79a575b60049150602073ffffffffffffffffffffffffffffffffffffffff815416604051938480927f9f69ef540000000000000000000000000000000000000000000000000000000082525afa908115620003575760c051916200b754575b6200b65a92506200fbc7565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4576040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152670de0b6b3a7640000602482015260c0518160448183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562000357576200b737575b5060c05160c05160c05160c051670de0b6b3a764000073ffffffffffffffffffffffffffffffffffffffff86511660c051f115620003575773ffffffffffffffffffffffffffffffffffffffff62000351915116316200fe0e565b60c0516200b745916200dcfe565b60c051620001d457816200b6dc565b90506020823d6020116200b791575b816200b772602093836200dcfe565b81010312620001d4576200b78a6200b65a926200e5c1565b906200b64e565b3d91506200b763565b506020813d6020116200b7d3575b816200b7b7602093836200dcfe565b81010312620001d4576200b7cd6004916200e5c1565b6200b5f2565b3d91506200b7a8565b60c0516200b7ea916200dcfe565b60c051620001d457816200b598565b60c0516200b807916200dcfe565b60c051620001d457846200b4f4565b60069192506200b833903d8060c051833e62001a2581836200dcfe565b91906200b348565b6200b85491503d8060c051833e62001a2581836200dcfe565b8a6200b2d5565b6200b8759193503d8060c051833e62001a2581836200dcfe565b918a6200b278565b6200b8979196503d8060c051833e62001a2581836200dcfe565b948a6200b21b565b90955073ffffffffffffffffffffffffffffffffffffffff93506200b8d791925060603d60601162001ace5762001abc81836200dcfe565b929193909295906200b1a3565b6200b8fd91503d8060c051833e62001a2581836200dcfe565b8a6200b03f565b601b9194509260106002936200b92b6200ac64963d8060c051833e62001a2581836200dcfe565b969350935050926200ab9c565b6200b95191503d8060c051833e62001a2581836200dcfe565b8b6200af55565b6200b9729193503d8060c051833e62001a2581836200dcfe565b918a6200aeab565b506020813d6020116200b9c6575b816200b997602093836200dcfe565b81010312620001d4576200b9c073ffffffffffffffffffffffffffffffffffffffff916200e5c1565b6200ae1c565b3d91506200b988565b6200b9e891503d8060c051833e62001a2581836200dcfe565b8e6200ad6a565b6200ba0891503d8060c051833e62001a2581836200dcfe565b8d6200ab37565b6200ba299193503d8060c051833e62001a2581836200dcfe565b918c6200aa37565b506020813d6020116200ba7d575b816200ba4e602093836200dcfe565b81010312620001d4576200ba7773ffffffffffffffffffffffffffffffffffffffff916200e5c1565b6200a9bf565b3d91506200ba3f565b34620001d45760c0517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d457604051806020601654918281520190601660c051527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b51242899060c0515b8181106200bb0e576200046b856200045e818703826200dcfe565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016200baf3565b34620001d45760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d45760443560043573ffffffffffffffffffffffffffffffffffffffff82168203620001d4576064356bffffffffffffffffffffffff81168103620001d4576200bbb36200ddcc565b601f54602080546040517f32c02a1400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152602480359082015260c051949794909384926044928492909160089190911c165af1908115620003575760c051916200c18d575b5073ffffffffffffffffffffffffffffffffffffffff8091169416737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4576040517f4c63e56200000000000000000000000000000000000000000000000000000000815285821415600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562000357576200c170575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4576040517fca669fa700000000000000000000000000000000000000000000000000000000815281600482015260c0518160248160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562000357576200c153575b50604051907fa19dbf000000000000000000000000000000000000000000000000000000000060208301526024820152602481526200bd7a6044826200dcfe565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d457604051907ff28dceb30000000000000000000000000000000000000000000000000000000082526020600483015281806200bdd960c0519360248301906200deae565b038160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562000357576200c136575b50833b15620001d4576040517ff727ef1c00000000000000000000000000000000000000000000000000000000815260c0516004820185905273ffffffffffffffffffffffffffffffffffffffff90921660248201526bffffffffffffffffffffffff9092166044830152818060648101038160c051875af1801562000357576200c119575b5060409060248251809481937f92dcb3fc00000000000000000000000000000000000000000000000000000000835260048301525afa908115620003575760c0519060c051926200c0f2575b50604051606091906200bee883826200dcfe565b602a81527f537461746963207369676e617475726520616464726573732073686f756c642060208201527f6e6f7420626520736574000000000000000000000000000000000000000000006040820152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d45773ffffffffffffffffffffffffffffffffffffffff604051927f2f2769d100000000000000000000000000000000000000000000000000000000845216600483015260c051602483015282604483015281806200bfb960c0519360648301906200deae565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801562000357576200c0d5575b50604051906200bff081836200dcfe565b602c82527f537461746963207369676e61747572652074696d657374616d702073686f756c60208301527f64206e6f742062652073657400000000000000000000000000000000000000006040830152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d457604051927f88b44c85000000000000000000000000000000000000000000000000000000008452600484015260c0516024840152604483015281806200c0aa60c0519360648301906200deae565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620003575762002b0a5760c05180f35b60c0516200c0e3916200dcfe565b60c051620001d457826200bfdf565b90506200c111915060403d60401162005ce65762005cd681836200dcfe565b90826200bed4565b60c0516200c127916200dcfe565b60c051620001d457826200be88565b60c0516200c144916200dcfe565b60c051620001d457846200be02565b60c0516200c161916200dcfe565b60c051620001d457856200bd39565b60c0516200c17e916200dcfe565b60c051620001d457856200bcc2565b90506020813d6020116200c1dd575b816200c1ab602093836200dcfe565b81010312620001d45773ffffffffffffffffffffffffffffffffffffffff6200c1d581926200e5c1565b91506200bc31565b3d91506200c19c565b34620001d45760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d4576200c2216200dd40565b6200c22b6200dd62565b9061ffff806200c2576200c23e6200dd8e565b9360ff6200c24b6200ddae565b9516938491166200f007565b16906200c2666064356200ef77565b93604051927fffa18649000000000000000000000000000000000000000000000000000000008452856004850152602084602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa938415620003575760c051946200ca18575b5073ffffffffffffffffffffffffffffffffffffffff604051947f56ca623e000000000000000000000000000000000000000000000000000000008652169384600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c051916200c9f8575b50604051937f6900a3ae000000000000000000000000000000000000000000000000000000008552600485015260c05184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa92831562000357576200698c600166ffffffffffffff9360076020976200c3c59960c051916200c9d85750604051988993606051620068e3818488016200de64565b6200c46260206200c3d6836200f33c565b73ffffffffffffffffffffffffffffffffffffffff601f5460081c1673ffffffffffffffffffffffffffffffffffffffff8354166040518095819482937f32c02a14000000000000000000000000000000000000000000000000000000008452600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b039160c051905af18015620003575760c051906200c983575b73ffffffffffffffffffffffffffffffffffffffff915016936200c49e6200e576565b9360c05185526200c5486200c4b26200e64f565b60408701908152604051907f2956142600000000000000000000000000000000000000000000000000000000602083015260c0516024830152602482526200c4fc6044836200dcfe565b604051916200c50b836200dc89565b89835260c05160208401526040830152620186a0606083015260c051608083015260c05160a0830152600160c0830152519062000c04826200e6e5565b501591821560208601526200c55e86866200f4ce565b604051927fe341eaa400000000000000000000000000000000000000000000000000000000845260048401526024830152606082604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa938415620003575760c05194859384916200c955575b50604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620003575760c051926200c933575b50604051937fb11a19e8000000000000000000000000000000000000000000000000000000008552600485015260c05184602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa938415620003575760c051946200c911575b50604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c051916200c8f1575b5060ff604051967f6900a3ae00000000000000000000000000000000000000000000000000000000885216600487015260c05186602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562000357576001620075069381936200c7669960c051926200b8165750600690602060405199866200b3688c9851809285808c0191016200de89565b6200c771826200f961565b916200c7eb604051917f4294d127000000000000000000000000000000000000000000000000000000006020840152600483526200c7b16024846200dcfe565b620045c46040519384927f7f6b0bb1000000000000000000000000000000000000000000000000000000006020850152602484016200e980565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d457604051907ff28dceb30000000000000000000000000000000000000000000000000000000082526020600483015281806200c84a60c0519360248301906200deae565b038160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562000357576200c8d4575b50823b15620001d4576200c8ba9260405180809581947f1f6a1eb900000000000000000000000000000000000000000000000000000000835260c05196600484016200e75e565b039160c051905af18015620003575762002b0a5760c05180f35b60c0516200c8e2916200dcfe565b60c051620001d457836200c873565b6200c90a91503d8060c051833e62001a2581836200dcfe565b886200c6d9565b6200c92b9194503d8060c051833e62001a2581836200dcfe565b92886200c67c565b6200c94d9192503d8060c051833e62001a2581836200dcfe565b90886200c61f565b919550506200c97791925060603d60601162001ace5762001abc81836200dcfe565b9291949092886200c5c2565b506020813d6020116200c9cf575b816200c9a0602093836200dcfe565b81010312620001d4576200c9c973ffffffffffffffffffffffffffffffffffffffff916200e5c1565b6200c47b565b3d91506200c991565b6200c9f191503d8060c051833e62001a2581836200dcfe565b8d620068cb565b6200ca1191503d8060c051833e62001a2581836200dcfe565b876200c338565b9093506020813d6020116200ca53575b816200ca37602093836200dcfe565b81010312620001d4576200ca4b906200e5c1565b92866200c2c3565b3d91506200ca28565b34620001d4576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112620001d4576200ca9a60e06200dc3c565b6200caa46200dd40565b60e0526200cab16200dd62565b610100526200cabf6200dd8e565b610120526064356101408190526200cad66200ddae565b6101605260a43561ffff81168103620001d4576101805260c43566ffffffffffffff81168103620001d4576101a05260e4359060ff82168203620001d4576101c091909152610104356101e05261012435610200526200cb36906200ef77565b610140526101e0516200cb49906200ef77565b6101e05260e0516101205161ffff916200cb699160ff169083166200f007565b1660e052610180516101c05161ffff916200cb8a9160ff169083166200f007565b1661018052604051610160810167ffffffffffffffff81118282101762001e235760405260c051815260c05160208201526060604082015260608082015260c051608082015260c05160a08201526200cbe26200e576565b60c0820152606060e082015260606101008201526200cc006200e576565b6101208201526060610140820152606060e00151604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620003575760c051906200dbe7575b73ffffffffffffffffffffffffffffffffffffffff915016808252604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c051916200dbc7575b5060ff604060e001511690604051917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa91821562000357576200cd9960206200cd7d6001829560076200ce37986200cda59760c051916200dba75750604051958693606051620007e4818488016200de64565b61ffff60e0511666ffffffffffffff8560e0015116906200f053565b8060408601526200f33c565b80608085015273ffffffffffffffffffffffffffffffffffffffff601f5460081c1673ffffffffffffffffffffffffffffffffffffffff8354166040518095819482937f32c02a14000000000000000000000000000000000000000000000000000000008452600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b039160c051905af1908115620003575760c051916200db65575b5061010060e00151604051907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620003575760c051906200db10575b73ffffffffffffffffffffffffffffffffffffffff915016806020840152604051907f56ca623e000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c051916200daf0575b5060ff60e08001511690604051917f6900a3ae000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa90811562000357576200cfbf6001602092600762000b1c956200cfdb9760c0519162001ad6575060405195869360605162000a85818488016200de64565b610180516101a05166ffffffffffffff169061ffff166200f053565b60a083015260c05160c0830151526200cff36200e64f565b604060c084015101526200d0af60a0830151604051907f295614260000000000000000000000000000000000000000000000000000000060208301526024820152602481526200d0456044826200dcfe565b604051906200d054826200dc89565b73ffffffffffffffffffffffffffffffffffffffff8416825260c05160208301526040820152620186a0606082015260c051608082015260c05160a0820152600160c0820152604060c085015101519062000c04826200e6e5565b50608060e001511515602060c08401510152606060e001516200d0ed73ffffffffffffffffffffffffffffffffffffffff831660c08501516200f4ce565b604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015620003575760c0519182918291906200dac8575b5060408501519173ffffffffffffffffffffffffffffffffffffffff86511690604051917f56ca623e000000000000000000000000000000000000000000000000000000008352600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620003575760c051926200daa6575b50604051927fb11a19e8000000000000000000000000000000000000000000000000000000008452600484015260c05183602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa928315620003575760c051936200da84575b50604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c051916200da64575b5060ff604051957f6900a3ae00000000000000000000000000000000000000000000000000000000875216600486015260c05185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620003575760016200d3149381936200d3209860c0519262001c1357506006906020604051988662000e788b9851809285808c0191016200de89565b6101605115916200f5ec565b60e08301526200d33460c08301516200f961565b610100830152737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620001d4576040517f81bad6f300000000000000000000000000000000000000000000000000000000815260c0516001600483018190526024830181905260006044840152606483015273ffffffffffffffffffffffffffffffffffffffff83166084830152818060a48101038160c051737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801562000357576200da4f575b507f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa602060a0840151604051908152a161010082015160e08301519073ffffffffffffffffffffffffffffffffffffffff83163b15620001d4576200d47d91604051809381927f1f6a1eb900000000000000000000000000000000000000000000000000000000835260c05194600484016200e75e565b038160c05173ffffffffffffffffffffffffffffffffffffffff87165af1801562000357576200da32575b506040517faaf10f4200000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff86165afa8015620003575760c051906200d9f0575b60049150602073ffffffffffffffffffffffffffffffffffffffff815416604051938480927f9f69ef540000000000000000000000000000000000000000000000000000000082525afa908115620003575760c051916200d9aa575b6200d56792506200fbc7565b6040517f51605d8000000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff86165afa8015620003575760c051906200d96f575b6200d5cf915060a0840151906200fd01565b610120820180516003905261020051815160e001526101e05190516200d60d9073ffffffffffffffffffffffffffffffffffffffff8416906200f4ce565b604051917fe341eaa400000000000000000000000000000000000000000000000000000000835260048301526024820152606081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215620003575760c0519384938493906200d941575b5060608101519473ffffffffffffffffffffffffffffffffffffffff60208301511693604051947f56ca623e000000000000000000000000000000000000000000000000000000008652600486015260c05185602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa948515620003575760c051956200d91f575b50604051907fb11a19e8000000000000000000000000000000000000000000000000000000008252600482015260c05181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115620003575760c051916200d8ff575b50604051957fb11a19e8000000000000000000000000000000000000000000000000000000008752600487015260c05186602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa958615620003575760c051966200d8dd575b5060ff604051927f6900a3ae00000000000000000000000000000000000000000000000000000000845216600483015260c05182602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa96871562000357576200b41e600161014097816200d8989b60209b6200d8419860c051926200754357506006908d6040519986620074208c9851809285808c0191016200de89565b928391015261012060e0015173ffffffffffffffffffffffffffffffffffffffff6040518096819582947f1626ba7e000000000000000000000000000000000000000000000000000000008452600484016200e7d1565b0392165afa908115620003575762000351917fffffffff000000000000000000000000000000000000000000000000000000009160c0519162005c4d5750166200fc67565b6200d8f79196503d8060c051833e62001a2581836200dcfe565b94876200d7ab565b6200d91891503d8060c051833e62001a2581836200dcfe565b876200d74e565b6200d9399195503d8060c051833e62001a2581836200dcfe565b93876200d6f1565b91945092506200d963915060603d60601162001ace5762001abc81836200dcfe565b9193909192856200d672565b506020813d6020116200d9a1575b816200d98c602093836200dcfe565b81010312620019c0576200d5cf90516200d5bd565b3d91506200d97d565b90506020823d6020116200d9e7575b816200d9c8602093836200dcfe565b81010312620001d4576200d9e06200d567926200e5c1565b906200d55b565b3d91506200d9b9565b506020813d6020116200da29575b816200da0d602093836200dcfe565b81010312620001d4576200da236004916200e5c1565b6200d4ff565b3d91506200d9fe565b60c0516200da40916200dcfe565b60c051620001d457826200d4a8565b60c0516200da5d916200dcfe565b826200d3e6565b6200da7d91503d8060c051833e62001a2581836200dcfe565b876200d287565b6200da9e9193503d8060c051833e62001a2581836200dcfe565b91876200d22a565b6200dac09192503d8060c051833e62001a2581836200dcfe565b90876200d1cd565b9150506200dae8915060603d60601162001ace5762001abc81836200dcfe565b90856200d151565b6200db0991503d8060c051833e62001a2581836200dcfe565b836200cf2d565b506020813d6020116200db5c575b816200db2d602093836200dcfe565b81010312620001d4576200db5673ffffffffffffffffffffffffffffffffffffffff916200e5c1565b6200ceb3565b3d91506200db1e565b90506020813d6020116200db9e575b816200db83602093836200dcfe565b81010312620001d4576200db97906200e5c1565b826200ce51565b3d91506200db74565b6200dbc091503d8060c051833e62001a2581836200dcfe565b8b620007cc565b6200dbe091503d8060c051833e62001a2581836200dcfe565b826200cce5565b506020813d6020116200dc33575b816200dc04602093836200dcfe565b81010312620001d4576200dc2d73ffffffffffffffffffffffffffffffffffffffff916200e5c1565b6200cc6e565b3d91506200dbf5565b610140810190811067ffffffffffffffff8211176200dc5a57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff8211176200dc5a57604052565b60a0810190811067ffffffffffffffff8211176200dc5a57604052565b6040810190811067ffffffffffffffff8211176200dc5a57604052565b610120810190811067ffffffffffffffff8211176200dc5a57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176200dc5a57604052565b6004359061ffff82168203620019c057565b359061ffff82168203620019c057565b6024359066ffffffffffffff82168203620019c057565b359066ffffffffffffff82168203620019c057565b6044359060ff82168203620019c057565b359060ff82168203620019c057565b608435908115158203620019c057565b35908115158203620019c057565b6084359073ffffffffffffffffffffffffffffffffffffffff82168203620019c057565b359073ffffffffffffffffffffffffffffffffffffffff82168203620019c057565b602060408183019282815284518094520192019060005b8181106200de375750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016200de29565b60005b8281106200de7757506000910152565b6080810151828201526020016200de67565b60005b8381106200de9d5750506000910152565b81810151838201526020016200de8c565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936200deec815180928187528780880191016200de89565b0116010190565b9080602083519182815201916020808360051b8301019401926000915b8383106200df2057505050505090565b90919293946020806200df5e837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0866001960301875289516200deae565b970193019301919392906200df10565b67ffffffffffffffff81116200dc5a5760051b60200190565b67ffffffffffffffff81116200dc5a57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b81601f82011215620019c0578035906200dfdc826200df87565b926200dfec60405194856200dcfe565b82845260208383010111620019c057816000926020809301838601378301015290565b919061012083820312620019c0576040516200e02b816200dce0565b80936200e038816200dd9f565b82526200e048602082016200ddbe565b6020830152604081013567ffffffffffffffff8111620019c057810183601f82011215620019c05780356200e07d816200df6e565b916200e08d60405193846200dcfe565b81835260208084019260051b82010190868211620019c05760208101925b8284106200e19757505050506040830152606081013560608301526080810135608083015260a081013567ffffffffffffffff8111620019c057836200e0f39183016200dfc2565b60a083015260c081013560c083015260e081013560e08301526101008101359067ffffffffffffffff8211620019c057019180601f84011215620019c05782356200e13e816200df6e565b936200e14e60405195866200dcfe565b81855260208086019260051b820101928311620019c057602001905b8282106200e17c575050506101000152565b602080916200e18b846200ddf0565b8152019101906200e16a565b833567ffffffffffffffff8111620019c057820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828b030112620019c057604051916200e1e7836200dc89565b6200e1f5602083016200ddf0565b83526040820135602084015260608201359267ffffffffffffffff8411620019c05760e0836200e22d8d60208098819801016200dfc2565b6040840152608081013560608401526200e24a60a082016200ddbe565b60808401526200e25d60c082016200ddbe565b60a0840152013560c08201528152019301926200e0ab565b91909160c081840312620019c0576040519060c0820182811067ffffffffffffffff8211176200dc5a57604052819381359067ffffffffffffffff8211620019c057826200e2ce60a094926200e31a948694016200e00f565b85526200e2de602082016200dd52565b60208601526200e2f1604082016200dd79565b60408601526200e304606082016200dd9f565b606086015260808101356080860152016200ddf0565b910152565b906020808351928381520192019060005b8181106200e33e5750505090565b82517fffffffff00000000000000000000000000000000000000000000000000000000168452602093840193909201916001016200e330565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60c0910112620019c05760043561ffff81168103620019c0579060243566ffffffffffffff81168103620019c0579060443560ff81168103620019c05790606435906084359060a4358015158103620019c05790565b602081016020825282518091526040820191602060408360051b8301019401926000915b8383106200e42257505050505090565b90919293946020806200e487837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff8151168452015191818582015201906200e31f565b970193019301919392906200e412565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc610120910112620019c057604051906200e4d2826200dce0565b8160043561ffff81168103620019c057815260243566ffffffffffffff81168103620019c057602082015260443560ff81168103620019c0576040820152606435606082015260843561ffff81168103620019c057608082015260a43566ffffffffffffff81168103620019c05760a082015260c43560ff81168103620019c05760c082015260e43560e082015261010435908115158203620019c0576101000152565b604051906200e585826200dce0565b6060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b519073ffffffffffffffffffffffffffffffffffffffff82168203620019c057565b602081830312620019c05780519067ffffffffffffffff8211620019c0570181601f82011215620019c057602081519101906200e620816200df87565b926200e63060405194856200dcfe565b81845281830111620019c0576200e64c9160208401906200de89565b90565b604080519091906200e66283826200dcfe565b60018152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018260005b8281106200e69a57505050565b6020906040516200e6ab816200dc89565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c0820152828285010152016200e68d565b8051156200e6f35760200190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518210156200e6f35760209160051b010190565b90816060910312620019c057805160ff81168103620019c057916040602083015192015190565b90916200e7786200e64c936040845260408401906200deae565b9160208184039101526200deae565b90816020910312620019c0575190565b90816020910312620019c057517fffffffff0000000000000000000000000000000000000000000000000000000081168103620019c05790565b6040906200e64c9392815281602082015201906200deae565b610120820160ff82511683526020820151151560208401526040820151906101206040850152815180915261014084019060206101408260051b8701019301916000905b8282106200e8d557505050506200e86961010091606084015160608601526080840151608086015260a084015185820360a08701526200deae565b9160c081015160c085015260e081015160e08501520151916101008183039101526020808351928381520192019060005b8181106200e8a85750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016200e89a565b90919293602080827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec08a6001950301855287519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c0806200e949604085015160e0604086015260e08501906200deae565b936060810151606085015260808101511515608085015260a0810151151560a085015201519101529601920192019092916200e82e565b90916200e99a6200e64c936060845260608401906200e7ea565b916000602082015260408184039101526200deae565b9190826040910312620019c05760206200e9ca836200e5c1565b92015190565b906040519160008154918260011c926001811680156200ead9575b6020851081146200eaac578487528693929181156200ea6a57506001146200ea1f575b506200ea1d925003836200dcfe565b565b90506000929192526020600020906000915b8183106200ea4d5750509060206200ea1d92820101386200ea0e565b60209193508060019154838589010152019101909184926200ea31565b602093506200ea1d9592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b820101386200ea0e565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f16936200e9eb565b604051906200eaf3826200dca6565b606060808360008152826020820152600060408201526000838201520152565b919082018092116200eb2157565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b906200eb5c826200df6e565b6200eb6b60405191826200dcfe565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06200eb9b82946200df6e565b0190602036910137565b90916200e7786200e64c936040845260408401906200e7ea565b919082039182116200eb2157565b90604051918281549182825260208201906000526020600020926000905b8060078301106200edfa576200ea1d9454918181106200edc3575b8181106200ed8c575b8181106200ed55575b8181106200ed1e575b8181106200ece7575b8181106200ecb0575b8181106200ec7a575b106200ec4c575b5003836200dcfe565b7fffffffff00000000000000000000000000000000000000000000000000000000168152602001386200ec43565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b1681520193016200ec3c565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b1681520193016200ec33565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b1681520193016200ec2a565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b1681520193016200ec21565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b1681520193016200ec18565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b1681520193016200ec0f565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b1681520193016200ec06565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e08201520194019201859293916200ebeb565b60085460ff1680156200ee985790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156200ef6b576000916200ef33575b50151590565b90506020813d6020116200ef62575b816200ef51602093836200dcfe565b81010312620019c05751386200ef2d565b3d91506200ef42565b6040513d6000823e3d90fd5b7ffffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036413960016200efa592620102b4565b9060008060406200efc16200eff482516200305984826200dcfe565b886044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826200dcfe565b51906a636f6e736f6c652e6c6f675afa50565b9060006200efa592620102b4565b6200efa5916bffffffffffffffffffffffff91620102b4565b60ff60006200efa592620102b4565b67ffffffffffffffff60006200efa592620102b4565b919061ffff604051937f6900a3ae000000000000000000000000000000000000000000000000000000008552166004840152600083602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9283156200ef6b576000936200f31b575b50604051907f6900a3ae0000000000000000000000000000000000000000000000000000000082526004820152600081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156200ef6b576040936000936200f2409385936200f2eb575b50601b6200f1e0926010600293602e8a519788947f7b227468726573686f6c64223a2200000000000000000000000000000000000060208701526200f166815180926020868a0191016200de89565b85017f222c22636865636b706f696e74223a2200000000000000000000000000000000838201526200f1a3825180936020603e850191016200de89565b01017f222c2266726f6d223a22666c6174222c22636f6e74656e74223a2200000000008382015262006c4a825180936020602b850191016200de89565b6200f2a56200f203737109709ecfa91a80626ff3989d68f67f5b1dd12d620104b6565b91855195869485947f0199a2200000000000000000000000000000000000000000000000000000000086526060600487015260648601906200deae565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152600a83527f636f6e6669675f6e657700000000000000000000000000000000000000000000602084015201604486015201906200deae565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156200ef6b576000916200f2d3575090565b6200e64c91503d806000833e62001a2581836200dcfe565b60029193506200f1e09260106200f30f601b933d808b833e62001a2581836200dcfe565b9593505092506200f117565b6200f3349193503d806000833e62001a2581836200dcfe565b91386200f0b3565b60006200f4056040926200f3e260016029865180947f7b22696e707574223a000000000000000000000000000000000000000000000060208301526200f38c81518092602086860191016200de89565b81017f7d000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18101845201826200dcfe565b6200f46a6200f203737109709ecfa91a80626ff3989d68f67f5b1dd12d620104b6565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152601083527f636f6e6669675f696d6167654861736800000000000000000000000000000000602084015201604486015201906200deae565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156200ef6b576000916200f4af575b5060208151918180820193849201010312620019c0575190565b6200f4c791503d806000833e62001a2581836200dcfe565b386200f495565b602081015190916200f59791156200f5e4576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a081526200f58d60c0826200dcfe565b51902091620108ef565b6040519060208201927f1901000000000000000000000000000000000000000000000000000000000000845260228301526042820152604281526200f5de6062826200dcfe565b51902090565b46906200f4e4565b6000916200f1e06001600c6200f75694604097879088146200f7bb5750600f88516200f6198a826200dcfe565b600481527f747275650000000000000000000000000000000000000000000000000000000060208201525b60298a519788947f7b22696e707574223a000000000000000000000000000000000000000000000060208701526200f686815180926020868a0191016200de89565b85017f2c227369676e617475726573223a220000000000000000000000000000000000838201526200f6c38251809360206038850191016200de89565b01017f222c22636861696e4964223a0000000000000000000000000000000000000000838201526200f700825180936020601b850191016200de89565b01017f7d000000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18101845201826200dcfe565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152601083527f7369676e61747572655f656e636f646500000000000000000000000000000000602084015201604486015201906200deae565b50600f88516200f7cc8a826200dcfe565b600581527f66616c736500000000000000000000000000000000000000000000000000000060208201526200f644565b60006200f756600c936200f90560016040968796600f88516200f8208a826200dcfe565b6004815260208101907f747275650000000000000000000000000000000000000000000000000000000082526200f70060298c51998a967f7b22696e707574223a000000000000000000000000000000000000000000000060208901526200f892815180926020868c0191016200de89565b87017f2c227369676e617475726573223a220000000000000000000000000000000000838201526200f8cf8251809360206038850191016200de89565b0101917f222c22636861696e4964223a000000000000000000000000000000000000000085840152518093601b8401906200de89565b6200f9286200f203737109709ecfa91a80626ff3989d68f67f5b1dd12d620104b6565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19182156200f95757506000916200f2d3575090565b513d6000823e3d90fd5b6000620045c46200f9876200f9c39360405192839160208084015260408301906200e7ea565b604051809381927f71aad10d0000000000000000000000000000000000000000000000000000000083526020600484015260248301906200deae565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156200ef6b576200fa9360009160409383916200faf8575b506200f1e06002602c865180947f7b227061796c6f6164223a22000000000000000000000000000000000000000060208301526200fa3d81518092602086860191016200de89565b81017f227d0000000000000000000000000000000000000000000000000000000000008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe28101845201826200dcfe565b603c8582037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc81016024880152601083527f7061796c6f61645f746f5061636b656400000000000000000000000000000000602084015201604486015201906200deae565b6200fb0f91503d8085833e62001a2581836200dcfe565b386200f9f5565b600090737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156200fbc35773ffffffffffffffffffffffffffffffffffffffff604051917f515361f60000000000000000000000000000000000000000000000000000000083521660048201528160248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156200fbb8576200fba9575050565b816200fbb5916200dcfe565b50565b6040513d84823e3d90fd5b5080fd5b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620019c05773ffffffffffffffffffffffffffffffffffffffff9081604051937f515361f6000000000000000000000000000000000000000000000000000000008552166004840152166024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156200ef6b576200fc5a5750565b60006200ea1d916200dcfe565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620019c057604051907f7c84c69b00000000000000000000000000000000000000000000000000000000825260048201527f1626ba7e000000000000000000000000000000000000000000000000000000006024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156200ef6b576200fc5a5750565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620019c057604051917f7c84c69b00000000000000000000000000000000000000000000000000000000835260048301526024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156200ef6b576200fc5a5750565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620019c0576000916200fde660405194859384937f88b44c85000000000000000000000000000000000000000000000000000000008552600485015260248401526060604484015260648301906200deae565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156200ef6b576200fc5a5750565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620019c057604051907f98296c540000000000000000000000000000000000000000000000000000000082526004820152670de0b6b3a76400006024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156200ef6b576200fc5a5750565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620019c057604051917f98296c5400000000000000000000000000000000000000000000000000000000835260048301526024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156200ef6b576200fc5a5750565b6200ff1d6003600060ff845116620102b4565b60ff60409160008084516200ff3386826200dcfe565b600c81527f426f756e6420726573756c740000000000000000000000000000000000000000602082015285516200ffd4816200ffa160208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528a602484015260648301906200deae565b876044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826200dcfe565b51906a636f6e736f6c652e6c6f675afa5016808352156200fff3575050565b606082016201001a73ffffffffffffffffffffffffffffffffffffffff60008351620102b4565b9060008084516201002c86826200dcfe565b600c81527f426f756e6420726573756c740000000000000000000000000000000000000000602082015285516201009a816200efc160208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528a602484015260648301906200deae565b51906a636f6e736f6c652e6c6f675afa505260808201620100c666ffffffffffffff60008351620102b4565b906000808451620100d886826200dcfe565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152855162010146816200efc160208201947fb60e72cc0000000000000000000000000000000000000000000000000000000086528a602484015260648301906200deae565b51906a636f6e736f6c652e6c6f675afa505260005b8183019081519081518110156201020857839260c0620101fc83620101966002846201018a8460019a6200e722565b510151600090620102b4565b9360008089620101b1620101e482516200305984826200dcfe565b8b6044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826200dcfe565b51906a636f6e736f6c652e6c6f675afa50516200e722565b5101520190506201015b565b5050505050565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620019c0576000916200fde660405194859384937fc1fa1ed0000000000000000000000000000000000000000000000000000000008552600485015260248401526060604484015260648301906200deae565b811562010285570690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60009083831162010432578281109182158062010427575b6201041f57620102dd84866200ebbf565b92600184018094116200eb215760038311158062010415575b62010404577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83101580620103f9575b620103e65785831115620103945750509062010347846201034d936200ebbf565b6201027a565b9081156201038f576201036192506200eb13565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081116200eb215790565b505090565b959492919095620103a6575b50505050565b839495506201034790620103bb93946200ebbf565b9081156201038f57620103cf92506200ebbf565b600181018091116200eb21579038808080620103a0565b505090506200e64c92915019906200ebbf565b508219841162010326565b50509190506200e64c92506200eb13565b50828411620102f6565b509250505090565b5084821115620102cc565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374645574696c7320626f756e642875696e743235362c75696e743235362c7560448201527f696e74323536293a204d6178206973206c657373207468616e206d696e2e00006064820152fd5b73ffffffffffffffffffffffffffffffffffffffff166040517fc1978d1f00000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5345515f53444b5f5250435f4d494e5f504f52540000000000000000000000006044820152602081606481855afa9081156200ef6b57600091620108b7575b50604051907fc1978d1f00000000000000000000000000000000000000000000000000000000825260206004830152601460248301527f5345515f53444b5f5250435f4d41585f504f52540000000000000000000000006044830152602082606481865afa9182156200ef6b576000926201087a575b5080821062007987577fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a654801562010825575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146200eb215781600162010644920193847fc60878921888fe127cbe5171adc431257b45a2d44944efca5835e765144713a6556200ebbf565b91600183018093116200eb2157620106619262006e5f916201027a565b906040517ff877cb1900000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5345515f53444b5f5250435f55524c5f505245464958000000000000000000006044820152600081606481855afa9081156200ef6b5760009162010806575b50604051927ff877cb1900000000000000000000000000000000000000000000000000000000845260206004850152601660248501527f5345515f53444b5f5250435f55524c5f535546464958000000000000000000006044850152600084606481865afa9384156200ef6b57600094620107e3575b506000906024604051809581937f6900a3ae00000000000000000000000000000000000000000000000000000000835260048301525afa9182156200ef6b57600092620107bc575b5060206200e64c9293620070318260405196856200700b899751809285808b0191016200de89565b6200e64c9250620107db6020913d806000833e62001a2581836200dcfe565b925062010794565b6000919450620107fe903d8084833e62001a2581836200dcfe565b93906201074c565b6201081e91503d806000833e62001a2581836200dcfe565b38620106d6565b50604051602081019036600083376201087160208236810160008382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826200dcfe565b519020620105e9565b90916020823d602011620108ae575b8162010898602093836200dcfe565b81010312620108ab5750519038620105b6565b80fd5b3d915062010889565b906020823d602011620108e6575b81620108d4602093836200dcfe565b81010312620108ab5750513862010540565b3d9150620108c5565b61010081015160405160208101818193602081519391019260005b81811062010c9a575050620109479250037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826200dcfe565b5190209060ff815116801560001462010b645750906040820151928351916201098d62010974846200df6e565b936201098460405195866200dcfe565b8085526200df6e565b937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe060208501950136863760005b865181101562010a955780620109d4600192896200e722565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e0830152610100820152610100815262010a7e610120826200dcfe565b51902062010a8d82886200e722565b5201620109bb565b5092919450926040519081602081019182945192909260005b81811062010b4a57505062010aeb9250037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826200dcfe565b51902091608060608301519201516040519260208401947f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a2865260408501526060840152608083015260a082015260a081526200f5de60c0826200dcfe565b845183526020948501948694509092019160010162010aae565b6001810362010bc1575060a0015160208151910120906040519060208201927fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d466845260408301526060820152606081526200f5de6080826200dcfe565b6002810362010c17575060c00151906040519060208201927f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e4845260408301526060820152606081526200f5de6080826200dcfe565b6003810362010c6d575060e00151906040519060208201927fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d466845260408301526060820152606081526200f5de6080826200dcfe565b7f048183200000000000000000000000000000000000000000000000000000000060005260045260246000fd5b845173ffffffffffffffffffffffffffffffffffffffff168352602094850194869450909201916001016201090a565b9081518110156200e6f3570160200190565b60ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa99116019060ff82116200eb2157565b60ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc99116019060ff82116200eb2157565b60ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd09116019060ff82116200eb215756fea2646970667358221220cb84ec7e62f24f8a7a42be4806a7af7ea15ed3cf3206bc72532d6bbc97419cd364736f6c634300081c0033","sourceMap":"770:40659:74:-:0;;;;;;;;;-1:-1:-1;770:40659:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;903:81;770:40659;903:81;;;770:40659;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1065:26:16;770:40659:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;8373:7;2024:14:2;;;770:40659:74;8396:12;770:40659;2024:14:2;;770:40659:74;8373:49;770:40659;;8373:49;;;;2024:14:2;8373:49:74;;770:40659;8373:49;;770:40659;;;2024:14:2;;;;770:40659:74;;8373:49;;;;;;;770:40659;;8373:49;;;770:40659;;;;;336:42:2;8429:31:74;;;;770:40659;;2024:14:2;8429:31:74;;8445:4;770:40659;8429:31;;770:40659;8452:7;2024:14:2;770:40659:74;;2024:14:2;770:40659:74;;;8373:49;770:40659;;336:42:2;8429:31:74;;;;;;;;770:40659;-1:-1:-1;770:40659:74;;;;;8452:7;770:40659;;8466:24;;;;8496:42;8505:23;;8496:42;:::i;:::-;770:40659;;;;8466:24;770:40659;;2024:14:2;770:40659:74;;2024:14:2;;;;;8429:31:74;770:40659;;8429:31;;;:::i;:::-;770:40659;;;;8429:31;;;8373:49;;8396:12;8373:49;;8396:12;8373:49;;;;;;8396:12;8373:49;;;:::i;:::-;;;2024:14:2;;;;;770:40659:74;2024:14:2;;:::i;:::-;8373:49:74;;;;;-1:-1:-1;8373:49:74;;770:40659;;;;;;;;;;;;;;;;2723:18:9;770:40659:74;;;;;;;2723:18:9;770:40659:74;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27093:43;770:40659;;;;;;27121:14;;770:40659;;27093:43;;:::i;:::-;770:40659;;;;27170:43;27176:17;;;;770:40659;;;27198:14;;;770:40659;;27170:43;;:::i;:::-;770:40659;27176:17;;;770:40659;294:80:98;27241:10:74;;;770:40659;294:80:98;:::i;:::-;27241:10:74;;;770:40659;294:80:98;770:40659:74;27279:10;;770:40659;294:80:98;:::i;:::-;770:40659:74;27279:10;;770:40659;;;;;;;;;;;;;;;;;;;;;;;;;;;;27241:10;770:40659;;;;27241:10;770:40659;;;;27241:10;27176:17;770:40659;;;;;;;;;;;27198:14;770:40659;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;27241:10;770:40659;;;;27241:10;770:40659;;;;27241:10;770:40659;;;;27241:10;770:40659;;;;27241:10;;;770:40659;;;27363:19;2024:14:2;27363:19:74;;770:40659;27363:19;;2024:14:2;770:40659:74;27363:19;;;336:42:2;27363:19:74;;;;;;770:40659;;27363:19;;;770:40659;;;;;2024:14:2;;770:40659:74;27279:10;;770:40659;;;27403:19;2024:14:2;27403:19:74;;770:40659;27403:19;;2024:14:2;770:40659:74;27403:19;27363;27403;336:42:2;27403:19:74;;;;;;770:40659;;27403:19;;;770:40659;;;;;;;;2024:14:2;770:40659:74;2024:14:2;;770:40659:74;;;27525:25;2024:14:2;27525:25:74;;770:40659;27525:25;;770:40659;;;27525:25;27363:19;27525:25;336:42:2;27525:25:74;;;;;;;770:40659;;27525:25;;;770:40659;27121:14;770:40659;;27121:14;;770:40659;;;;;27557:27;2024:14:2;27557:27:74;;770:40659;27557:27;;2024:14:2;770:40659:74;;27557:27;27363:19;27557:27;336:42:2;27557:27:74;;;;;;;27609:70;770:40659;27493:92;304:1:98;770:40659:74;;2024:14:2;27822:55:74;770:40659;27710:44;770:40659;;;27557:27;;;770:40659;;;;;;;27241:10;770:40659;2024:14:2;27493:92:74;;;;2024:14:2;:::i;:::-;;;;;;;;;770:40659:74;;2024:14:2;;;;;;;;;:::i;:::-;;;;;;;;;770:40659:74;;2024:14:2;;;;;;;;;:::i;:::-;;;27493:92:74;;770:40659;27493:92;;;;;;:::i;:::-;770:40659;;;;;27656:18;;;2024:14:2;770:40659:74;27609:70;;:::i;:::-;770:40659;;;;27594:85;27710:44;:::i;:::-;770:40659;;;;;;;2024:14:2;;;770:40659:74;;2024:14:2;;770:40659:74;;;27822:55;;;;;;2024:14:2;27822:55:74;;770:40659;27822:55;;2024:14:2;;;;;;770:40659:74;2024:14:2;;;770:40659:74;;;;2024:14:2;;;27822:55:74;;770:40659;;;27822:55;;;;;;;770:40659;;27822:55;;;770:40659;;;;;;;;2024:14:2;770:40659:74;;;;2024:14:2;770:40659:74;;;27982:25;2024:14:2;27982:25:74;;770:40659;27982:25;;770:40659;;;27982:25;27363:19;27982:25;336:42:2;27982:25:74;;;;;;;770:40659;;27982:25;;;770:40659;27198:14;770:40659;27198:14;;;770:40659;;;;;28014:27;2024:14:2;28014:27:74;;770:40659;28014:27;;2024:14:2;770:40659:74;;28014:27;27363:19;28014:27;336:42:2;28014:27:74;;;;;;;27950:92;304:1:98;770:40659:74;;2024:14:2;28066:70:74;770:40659;28167:44;770:40659;;;28014:27;;;770:40659;;;;;;;27241:10;770:40659;2024:14:2;27950:92:74;;;;2024:14:2;:::i;:::-;;;;;;;;;770:40659:74;;2024:14:2;;;;;;;;;:::i;:::-;;;;;;;;;770:40659:74;;2024:14:2;;770:40659:74;2024:14:2;;;;;;:::i;27950:92:74:-;770:40659;27176:17;;;770:40659;;;;28113:18;;2024:14:2;770:40659:74;28066:70;;:::i;:::-;770:40659;27241:10;770:40659;;28051:85;28167:44;:::i;:::-;27198:14;770:40659;;;;;;;;28238:25;2321:4:48;28336:21:74;;:::i;:::-;770:40659;;;;28302:25;:31;:55;28363:329;770:40659;;;;;;27198:14;770:40659;;2024:14:2;770:40659:74;;28475:75;28498:33;770:40659;28475:75;;;27363:19;28475:75;;2024:14:2;27363:19:74;28475:75;;;;;;:::i;:::-;770:40659;;;;;;:::i;:::-;2024:14:2;;770:40659:74;;;28400:292;;770:40659;;28400:292;;770:40659;28568:6;27241:10;28400:292;;770:40659;;;27176:17;28400:292;;2763:4:48;770:40659:74;;;28400:292;;2763:4:48;304:1:98;27198:14:74;28400:292;;770:40659;;;;;28363:25;:31;;:329;;;;:::i;:::-;;;:::i;:::-;;770:40659;28736:16;;2763:4:48;770:40659:74;;;;;;28698:25;:35;2763:4:48;27241:10:74;;;770:40659;28848:55;770:40659;;;28864:25;770:40659;;;;;;28848:55;;:::i;:::-;770:40659;;28828:76;2024:14:2;28828:76:74;;770:40659;28828:76;;2024:14:2;27363:19:74;2763:4:48;;2024:14:2;27241:10:74;28828:76;28475:75;28828:76;336:42:2;28828:76:74;;;;;;770:40659;;;;;;;;28828:76;;770:40659;;;;;29016:12;2024:14:2;770:40659:74;2024:14:2;;770:40659:74;;;;29080:25;2024:14:2;29080:25:74;;770:40659;29080:25;;770:40659;;;29080:25;27363:19;29080:25;336:42:2;29080:25:74;;;;;;;770:40659;;29080:25;;;770:40659;;;;29117:15;2024:14:2;29117:15:74;;770:40659;29117:15;;2024:14:2;770:40659:74;;29117:15;27363:19;29117:15;336:42:2;29117:15:74;;;;;;;770:40659;;29117:15;;;770:40659;;;;29139:15;2024:14:2;29139:15:74;;770:40659;29139:15;;2024:14:2;770:40659:74;;29139:15;27363:19;29139:15;336:42:2;29139:15:74;;;;;;;770:40659;;29139:15;;;770:40659;;;;;29161:15;2024:14:2;29161:15:74;;770:40659;;29161:15;;2024:14:2;770:40659:74;;29161:15;27363:19;29161:15;336:42:2;29161:15:74;;;;;;;304:1:98;29052:134:74;770:40659;;;28966:259;770:40659;;;29161:15;;;770:40659;;2763:4:48;770:40659:74;;;;;;2024:14:2;770:40659:74;;;29052:134;;;;;;2024:14:2;;;:::i;:::-;;;2763:4:48;2024:14:2;;;2763:4:48;2024:14:2;770:40659:74;;2763:4:48;;;;;;2024:14:2;;;:::i;:::-;;;;;;;;;770:40659:74;;2024:14:2;;770:40659:74;2024:14:2;;;;;;:::i;:::-;;;;;;;;;770:40659:74;;2024:14:2;;770:40659:74;2024:14:2;;;;;;:::i;29052:134:74:-;770:40659;28736:16;;2763:4:48;770:40659:74;28966:259;;:::i;:::-;770:40659;;;28936:289;29292:60;770:40659;;;29326:25;29292:60;:::i;:::-;770:40659;;;29258:94;770:40659;;;;;;336:42:2;29387:51:74;;;;770:40659;;2024:14:2;29387:51:74;;770:40659;;304:1:98;770:40659:74;29387:51;;770:40659;;;2763:4:48;;;770:40659:74;;;-1:-1:-1;2763:4:48;;;770:40659:74;2763:4:48;;;770:40659:74;;;;;2763:4:48;;;770:40659:74;;;;2763:4:48;;;29387:51:74;770:40659;;;336:42:2;29387:51:74;;;;;;;;770:40659;;29449:34;770:40659;27198:14;770:40659;;2024:14:2;770:40659:74;;2024:14:2;;;29449:34:74;770:40659;;;;;;;;;29523:31;770:40659;;;29556:27;29489:95;;;;;;770:40659;;;29489:95;;;;;2024:14:2;29489:95:74;;770:40659;;29489:95;770:40659;29489:95;;;:::i;:::-;;770:40659;;;29489:95;;;;;;;;;770:40659;;;;;;;;;;;;29634:45;;;;2024:14:2;29634:45:74;;;;;;;;770:40659;;29634:45;;;770:40659;;2024:14:2;;770:40659:74;;2024:14:2;;770:40659:74;;;29681:37;;;;2024:14:2;29681:37:74;;;;;;;;;770:40659;;29681:37;;;770:40659;29681:37;;;;:::i;:::-;770:40659;;;;;;;;;;29734:37;;;;2024:14:2;29734:37:74;;;;;;;;770:40659;;29734:37;;;770:40659;29773:16;770:40659;;27198:14;770:40659;;2024:14:2;29773:16:74;;:::i;:::-;770:40659;2024:14:2;;770:40659:74;;;29893:25;2024:14:2;29893:25:74;;770:40659;29893:25;;770:40659;;;29893:25;27363:19;29893:25;336:42:2;29893:25:74;;;;;;;770:40659;;29893:25;;;770:40659;27121:14;770:40659;;27121:14;;770:40659;;;;;29925:27;2024:14:2;29925:27:74;;770:40659;29925:27;;2024:14:2;770:40659:74;;29925:27;27363:19;29925:27;336:42:2;29925:27:74;;;;;;;29861:92;304:1:98;770:40659:74;;2024:14:2;29977:70:74;770:40659;30078:44;770:40659;;;29925:27;;;770:40659;;;;;;27241:10;770:40659;2024:14:2;29861:92:74;;;;2024:14:2;:::i;29861:92:74:-;770:40659;;;;;;27656:18;;2024:14:2;770:40659:74;29977:70;;:::i;:::-;770:40659;27176:17;770:40659;;29962:85;30078:44;:::i;:::-;770:40659;;;;;;;;;30150:25;2321:4:48;30248:21:74;;:::i;:::-;770:40659;;;;30214:25;:31;:55;30275:329;770:40659;;;;;;;;;2024:14:2;770:40659:74;;30387:75;28498:33;770:40659;30387:75;;;27363:19;30387:75;;2024:14:2;27363:19:74;30387:75;;;28475;30387;;:::i;:::-;770:40659;;;;;;:::i;:::-;2024:14:2;;770:40659:74;;;30312:292;;770:40659;;30312:292;;770:40659;28568:6;27241:10;30312:292;;770:40659;;;27176:17;30312:292;;2763:4:48;770:40659:74;;;30312:292;;2763:4:48;304:1:98;27198:14:74;30312:292;;770:40659;;;;;30275:25;:31;;:329;;;;:::i;:::-;;770:40659;28736:16;;2763:4:48;770:40659:74;;;;;;30610:25;:35;2763:4:48;304:1:98;27176:17:74;770:40659;;;30670:25;:31;770:40659;;27279:10;;770:40659;;30802:55;770:40659;;;30818:25;770:40659;;;;;;30802:55;;:::i;:::-;770:40659;;30782:76;2024:14:2;30782:76:74;;770:40659;30782:76;;2024:14:2;27363:19:74;2763:4:48;;2024:14:2;27241:10:74;30782:76;28475:75;30782:76;336:42:2;30782:76:74;;;;;;;770:40659;;;;;;;30782:76;;770:40659;;27241:10;770:40659;;30971:12;770:40659;;;;;2024:14:2;770:40659:74;;;;31035:25;2024:14:2;31035:25:74;;770:40659;31035:25;;770:40659;;;31035:25;27363:19;31035:25;336:42:2;31035:25:74;;;;;;;770:40659;;31035:25;;;770:40659;;;;31072:15;2024:14:2;31072:15:74;;770:40659;31072:15;;2024:14:2;770:40659:74;;31072:15;27363:19;31072:15;336:42:2;31072:15:74;;;;;;;770:40659;;31072:15;;;770:40659;;;;31094:15;2024:14:2;31094:15:74;;770:40659;31094:15;;2024:14:2;770:40659:74;;31094:15;27363:19;31094:15;336:42:2;31094:15:74;;;;;;;770:40659;;31094:15;;;770:40659;;;;;31116:15;2024:14:2;31116:15:74;;770:40659;;31116:15;;2024:14:2;770:40659:74;;31116:15;27363:19;31116:15;336:42:2;31116:15:74;;;;;;;30921:259;770:40659;304:1:98;31007:134:74;770:40659;;;;;;;31116:15;;;770:40659;;2763:4:48;770:40659:74;;;;;;2024:14:2;770:40659:74;;;31007:134;;;;;;2024:14:2;;;:::i;:::-;;;2763:4:48;2024:14:2;;;2763:4:48;2024:14:2;770:40659:74;;2763:4:48;;;;;;2024:14:2;;;:::i;:::-;;;;;;;;;770:40659:74;;2024:14:2;;770:40659:74;2024:14:2;;;;;;:::i;:::-;;;;;;;;;770:40659:74;;2024:14:2;;770:40659:74;2024:14:2;;;;;;:::i;:::-;;;31007:134:74;;770:40659;31007:134;;;;;;:::i;:::-;28736:16;2763:4:48;770:40659:74;30921:259;;:::i;:::-;770:40659;;;30891:289;31248:60;770:40659;;;31282:25;31248:60;:::i;:::-;770:40659;;;31214:94;770:40659;;;;;;336:42:2;31344:51:74;;;;770:40659;;2024:14:2;31344:51:74;;770:40659;;304:1:98;770:40659:74;31344:51;;770:40659;;;2763:4:48;;;770:40659:74;;;-1:-1:-1;2763:4:48;;;770:40659:74;2763:4:48;;;770:40659:74;;;;;2763:4:48;;;770:40659:74;;;;2763:4:48;;;31344:51:74;770:40659;;;336:42:2;31344:51:74;;;;;;;;770:40659;;29449:34;770:40659;;;;2024:14:2;770:40659:74;;2024:14:2;;;31406:34:74;770:40659;;;;;;;;;31480:31;770:40659;;;31513:27;31446:95;;;;;;770:40659;;;31446:95;;;;;2024:14:2;31446:95:74;;770:40659;;31446:95;770:40659;31446:95;;;:::i;:::-;;770:40659;;;31446:95;;;;;;;;;770:40659;;;;;;;;;;;;;31592:37;;;;2024:14:2;31592:37:74;;;;;;;;;770:40659;;31592:37;;;770:40659;31631:16;770:40659;;;;2024:14:2;31631:16:74;;:::i;31592:37::-;;;770:40659;31592:37;;770:40659;31592:37;;;;;;2763:4:48;31592:37:74;;;:::i;:::-;;;2763:4:48;;;;;;;770:40659:74;31592:37;;2763:4:48;-1:-1:-1;770:40659:74;;31592:37;;;-1:-1:-1;31592:37:74;;31446:95;770:40659;;31446:95;;;:::i;:::-;770:40659;;;;31446:95;;;31344:51;770:40659;;31344:51;;;:::i;:::-;770:40659;;;;31344:51;;;31116:15;2763:4:48;31116:15:74;;;;;;770:40659;;;31116:15;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;31094;;;;;770:40659;;;31094:15;;;;;;:::i;:::-;;;;31072;;;;;;770:40659;;;31072:15;;;;;;:::i;:::-;;;;;31035:25;;;;;;770:40659;;;31035:25;;;;;;:::i;:::-;;;;;30782:76;;;;;;;;27241:10;30782:76;27241:10;30782:76;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;29925:27;;;;;770:40659;;;29925:27;;;;;;:::i;:::-;;;;29893:25;;;;;770:40659;;;29893:25;;;;;;:::i;:::-;;;;29734:37;;770:40659;29734:37;;770:40659;29734:37;;;;;;2763:4:48;29734:37:74;;;:::i;:::-;;;2763:4:48;;;;29773:16:74;2763:4:48;;29734:37:74;;;;;-1:-1:-1;29734:37:74;;29681;;;770:40659;29681:37;;770:40659;29681:37;;;;;;770:40659;29681:37;;;:::i;:::-;;;2024:14:2;;;;;29681:37:74;2024:14:2;;:::i;:::-;29681:37:74;;;;;;-1:-1:-1;29681:37:74;;29634:45;;770:40659;29634:45;;770:40659;29634:45;;;;;;770:40659;29634:45;;;:::i;:::-;;;2024:14:2;;;;;770:40659:74;2024:14:2;;:::i;:::-;29634:45:74;;;;;-1:-1:-1;29634:45:74;;29489:95;770:40659;;29489:95;;;:::i;:::-;770:40659;;;;29489:95;;;29387:51;770:40659;;29387:51;;;:::i;:::-;770:40659;;;;29387:51;;;29161:15;2763:4:48;29161:15:74;;;;;;770:40659;;;29161:15;;;;;;:::i;:::-;;;;;29139;;;;;770:40659;;;29139:15;;;;;;:::i;:::-;;;;29117;;;;;;770:40659;;;29117:15;;;;;;:::i;:::-;;;;;29080:25;;;;;;770:40659;;;29080:25;;;;;;:::i;:::-;;;;;28828:76;;;;;;;27241:10;28828:76;27241:10;28828:76;;;;;;;:::i;:::-;;;;;27982:25;;;;;770:40659;;;27982:25;;;;;;:::i;:::-;;;;27822:55;;770:40659;27822:55;;770:40659;27822:55;;;;;;770:40659;27822:55;;;:::i;:::-;;;2024:14:2;;;;;770:40659:74;2024:14:2;;:::i;:::-;27822:55:74;;;;;-1:-1:-1;27822:55:74;;27557:27;;;;;770:40659;;;27557:27;;;;;;:::i;:::-;;;;27525:25;;;;;770:40659;;;27525:25;;;;;;:::i;:::-;;;;27403:19;;770:40659;27403:19;;770:40659;27403:19;;;;;;770:40659;27403:19;;;:::i;:::-;;;2024:14:2;;;;;770:40659:74;2024:14:2;;:::i;:::-;27403:19:74;;;;;-1:-1:-1;27403:19:74;;27363;;770:40659;27363:19;;770:40659;27363:19;;;;;;770:40659;27363:19;;;:::i;:::-;;;2024:14:2;;;;;770:40659:74;2024:14:2;;:::i;:::-;27363:19:74;;;;;-1:-1:-1;27363:19:74;;770:40659;;-1:-1:-1;;770:40659:74;;;;;-1:-1:-1;;770:40659:74;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;294:80:98;770:40659:74;;;;;294:80:98;:::i;:::-;770:40659:74;;;;294:80:98;770:40659:74;;;;294:80:98;:::i;:::-;770:40659:74;;;;;;;;;22204:36;;336:42:2;22194:47:74;;;;770:40659;;22194:47;2024:14:2;22194:47:74;;770:40659;22194:47;;770:40659;;;22194:47;770:40659;22194:47;336:42:2;22194:47:74;;;;;;;;770:40659;;;2933:19:15;770:40659:74;;22273:43;770:40659;;;;;;22273:43;:::i;:::-;770:40659;;;;;;;;;;;;;2933:19:15;:::i;:::-;770:40659:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;9786:54:15;;770:40659:74;;9786:54:15;;;;;;770:40659:74;;;9786:54:15;;770:40659:74;;;;;;:::i;:::-;;;;;2024:14:2;9786:54:15;;;;;;;;:::i;:::-;-1:-1:-1;;;;;770:40659:74;;9371:159:15;679:42;9371:159;;;770:40659:74;;;;2321:4:48;770:40659:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22484:26;2024:14:2;22484:26:74;;770:40659;22484:26;;2024:14:2;770:40659:74;22484:26;770:40659;22484:26;336:42:2;22484:26:74;;;;;;770:40659;;22484:26;;;770:40659;;;;;2024:14:2;;770:40659:74;;;;;;;22536:24;2024:14:2;22536:24:74;;770:40659;22536:24;;2024:14:2;770:40659:74;22536:24;770:40659;22536:24;336:42:2;22536:24:74;;;;;;770:40659;;22536:24;;;770:40659;;;;;;;;2024:14:2;770:40659:74;2024:14:2;;770:40659:74;;;;22627:32;2024:14:2;22627:32:74;;770:40659;22627:32;;770:40659;;;22627:32;770:40659;22627:32;336:42:2;22627:32:74;;;;;;;770:40659;;22627:32;;;770:40659;;;;;;;;;;;22666:26;2024:14:2;22666:26:74;;770:40659;22666:26;;2024:14:2;770:40659:74;;22666:26;770:40659;22666:26;336:42:2;22666:26:74;;;;;;22806:43;770:40659;22714:68;770:40659;;;22666:26;;;770:40659;;;22599:94;770:40659;2024:14:2;770:40659:74;;;22599:94;;;2024:14:2;770:40659:74;22599:94;;2024:14:2;;770:40659:74;;2024:14:2;;770:40659:74;2024:14:2;;;;;;:::i;:::-;;;;;;;;;770:40659:74;;2024:14:2;;770:40659:74;2024:14:2;;;;;;:::i;22599:94:74:-;770:40659;;;;;;;;;;2024:14:2;770:40659:74;22714:68;;:::i;:::-;770:40659;;;;;22700:82;22806:43;:::i;:::-;770:40659;;;;;;;;2024:14:2;770:40659:74;;;;22919:30;2024:14:2;22919:30:74;;770:40659;22919:30;;770:40659;;;22919:30;770:40659;22919:30;336:42:2;22919:30:74;;;;;;;770:40659;;22919:30;;;770:40659;;;;;;;;;;;;22956:26;2024:14:2;22956:26:74;;770:40659;22956:26;;2024:14:2;770:40659:74;;22956:26;770:40659;22956:26;336:42:2;22956:26:74;;;;;;;23007:71;770:40659;;;22956:26;;;770:40659;;;22891:92;770:40659;2024:14:2;770:40659:74;;;22891:92;;;2024:14:2;770:40659:74;22891:92;;2024:14:2;;770:40659:74;;2024:14:2;;770:40659:74;2024:14:2;;;;;;:::i;22891:92:74:-;770:40659;;;;;;;;;;2024:14:2;770:40659:74;23007:71;;:::i;:::-;770:40659;;;22990:88;770:40659;2024:14:2;770:40659:74;2024:14:2;;770:40659:74;;;;2024:14:2;770:40659:74;;;2024:14:2;23107:54:74;;770:40659;;;;;23107:54;;770:40659;2024:14:2;;;;;;;770:40659:74;;;;;;2024:14:2;;770:40659:74;;;;2024:14:2;;;;;770:40659:74;23107:54;;;;;;770:40659;;23107:54;;;770:40659;;;;;;;;2024:14:2;2556:4:48;770:40659:74;;;23169:12;2321:4:48;2024:14:2;;770:40659:74;;;;23214:12;:19;770:40659;;;;2763:4:48;770:40659:74;;;;;;23255:12;:22;2763:4:48;23322:42:74;770:40659;;;23338:12;770:40659;;;;;;23322:42;;:::i;:::-;770:40659;;;;;;;;;;;;;23398:42;2024:14:2;23398:42:74;;770:40659;23398:42;;2024:14:2;770:40659:74;2763:4:48;;2024:14:2;770:40659:74;23398:42;770:40659;23398:42;336::2;23398::74;;;;;;770:40659;;;;;;;;;;23398:42;;770:40659;;;;;;;;;;;;;;2321:4:48;770:40659:74;;;;2024:14:2;770:40659:74;;;;;23514:30;2024:14:2;23514:30:74;;770:40659;23514:30;;770:40659;;;23514:30;770:40659;23514:30;336:42:2;23514:30:74;;;;;;;770:40659;;23514:30;;;770:40659;;;;;2024:14:2;770:40659:74;;;;23572:19;2024:14:2;23572:19:74;;770:40659;23572:19;;2024:14:2;770:40659:74;;23572:19;770:40659;23572:19;336:42:2;23572:19:74;;;;;;;770:40659;;23572:19;;;770:40659;;;;;2024:14:2;770:40659:74;;;23614:19;2024:14:2;23614:19:74;;770:40659;23614:19;;2024:14:2;770:40659:74;;23614:19;770:40659;23614:19;336:42:2;23614:19:74;;;;;;;770:40659;;23614:19;;;770:40659;;;;;;;;;;;;23656:19;2024:14:2;23656:19:74;;770:40659;23656:19;;2024:14:2;770:40659:74;;23656:19;770:40659;23656:19;336:42:2;23656:19:74;;;;;;;23825:80;770:40659;23488:195;770:40659;;;;;;;;23719:83;770:40659;;;23656:19;;;770:40659;;2763:4:48;770:40659:74;;;;;;;2024:14:2;770:40659:74;;;23488:195;;;;;;2024:14:2;;;:::i;:::-;;;2763:4:48;2024:14:2;;;2763:4:48;2024:14:2;770:40659:74;;2763:4:48;;;;;;2024:14:2;;;:::i;:::-;;;;;;;;;770:40659:74;;;2024:14:2;;;;;;;;;:::i;:::-;;;;;;;;;770:40659:74;;2024:14:2;;;;;;;;;:::i;23488:195:74:-;770:40659;;;23756:14;770:40659;;;;2763:4:48;770:40659:74;23719:83;;:::i;:::-;770:40659;;;;;23695:107;770:40659;;;2024:14:2;;770:40659:74;;;23825:80;;;;;;2024:14:2;23825:80:74;;770:40659;23825:80;;;:::i;:::-;;;;;;;;;;770:40659;;23825:80;;;770:40659;-1:-1:-1;770:40659:74;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;336:42:2;3924:29:4;;;;770:40659:74;;;;3924:29:4;2024:14:2;3924:29:4;;770:40659:74;;3924:29:4;;2024:14:2;770:40659:74;;;;;2024:14:2;770:40659:74;;;;;;;;;;;;;;;;:::i;:::-;3924:29:4;;336:42:2;3924:29:4;;;;;;;;770:40659:74;;;;3924:29:4;770:40659:74;;3924:29:4;;;:::i;:::-;770:40659:74;;;;3924:29:4;;;;770:40659:74;;;2024:14:2;770:40659:74;;2024:14:2;;;;;23825:80:74;;;;770:40659;23825:80;770:40659;23825:80;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;23656:19;2763:4:48;23656:19:74;;;;;;770:40659;;;23656:19;;;;;;:::i;:::-;;;;;23614;;;;;770:40659;;;23614:19;;;;;;:::i;:::-;;;;23572;;;;;;770:40659;;;23572:19;;;;;;:::i;:::-;;;;;23514:30;;;;;;770:40659;;;23514:30;;;;;;:::i;:::-;;;;;23398:42;;;;;;;770:40659;23398:42;770:40659;23398:42;;;;;;;:::i;:::-;;;;23107:54;;770:40659;23107:54;;770:40659;23107:54;;;;;;770:40659;23107:54;;;:::i;:::-;;;2024:14:2;;;;;770:40659:74;2024:14:2;;:::i;:::-;23107:54:74;;;;;-1:-1:-1;23107:54:74;;22956:26;22891:92;22956:26;;;;770:40659;22956:26;;770:40659;;;22956:26;;;;;;:::i;:::-;;;;;;22919:30;;;;;770:40659;;;22919:30;;;;;;:::i;:::-;;;;22666:26;22599:94;22666:26;;;;770:40659;22666:26;;770:40659;;;22666:26;;;;;;:::i;:::-;;;;;;22627:32;;;;;770:40659;;;22627:32;;;;;;:::i;:::-;;;;22536:24;;770:40659;22536:24;;770:40659;22536:24;;;;;;770:40659;22536:24;;;:::i;:::-;;;2024:14:2;;;;;770:40659:74;2024:14:2;;:::i;:::-;22536:24:74;;;;;-1:-1:-1;22536:24:74;;22484:26;;770:40659;22484:26;;770:40659;22484:26;;;;;;770:40659;22484:26;;;:::i;:::-;;;2024:14:2;;;;;770:40659:74;2024:14:2;;:::i;:::-;22484:26:74;;;;;-1:-1:-1;22484:26:74;;22194:47;770:40659;;22194:47;;;:::i;:::-;770:40659;;;;22194:47;;;770:40659;;;;;;;;;;;;;;861:38;770:40659;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2575:18:9;770:40659:74;2321:4:48;770:40659:74;2321:4:48;:::i;:::-;770:40659:74;;;;;;;:::i;:::-;2321:4:48;;;770:40659:74;;;2575:18:9;-1:-1:-1;;770:40659:74;;-1:-1:-1;;770:40659:74;-1:-1:-1;;770:40659:74;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;2876:18:9;770:40659:74;2321:4:48;;;:::i;:::-;770:40659:74;;;;;;;:::i;:::-;2321:4:48;;;770:40659:74;;;2876:18:9;770:40659:74;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;2024:14:2;;770:40659:74;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2933:19:15;;1279:1:74;770:40659;;294:80:98;770:40659:74;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;770:40659:74;;2933:19:15;:::i;:::-;770:40659:74;1279:1;770:40659;;;;;9786:54:15;770:40659:74;;;;;;:::i;:::-;;;;;;;;;;;9786:54:15;;;770:40659:74;9786:54:15;;;;;;;;;770:40659:74;;;;;;:::i;9786:54:15:-;-1:-1:-1;;;;;770:40659:74;;9371:159:15;679:42;9371:159;;-1:-1:-1;770:40659:74;;;;;2933:19:15;:::i;:::-;770:40659:74;;;;;;:::i;:::-;;;;;;;;;;;9786:54:15;;770:40659:74;;9786:54:15;;;;;;;;;;770:40659:74;;;;;;:::i;9786:54:15:-;-1:-1:-1;;;;;770:40659:74;;9371:159:15;679:42;9371:159;;;770:40659:74;294:80:98;;:::i;:::-;770:40659:74;;;1403:12;2024:14:2;1403:12:74;;770:40659;1403:12;;2024:14:2;770:40659:74;1403:12;9786:54:15;1403:12:74;336:42:2;1403:12:74;;;;;;;770:40659;;1403:12;;;770:40659;;;;;1525:19;2024:14:2;1525:19:74;;770:40659;;1525:19;;770:40659;;;1525:19;9786:54:15;1525:19:74;336:42:2;1525:19:74;;;;;;;770:40659;;1525:19;;;770:40659;;;;1551:20;2024:14:2;1551:20:74;;770:40659;1551:20;;2024:14:2;770:40659:74;;1551:20;9786:54:15;1551:20:74;336:42:2;1551:20:74;;;;;;;1795:49;770:40659;;1493:79;1279:1;1590:56;770:40659;2024:14:2;770:40659:74;;;;;;1551:20;;;770:40659;;;;;;;;;2024:14:2;1493:79:74;;;;2024:14:2;:::i;:::-;;;;;;;;;770:40659:74;;2024:14:2;;;;;;;;;:::i;:::-;;;;;;;;;770:40659:74;;2024:14:2;;770:40659:74;2024:14:2;;;;;;:::i;1493:79:74:-;770:40659;1590:56;;:::i;:::-;1680:38;770:40659;1680:38;;;:::i;:::-;770:40659;1795:7;2024:14:2;;;770:40659:74;;2024:14:2;;770:40659:74;;;1795:49;;;;;;2024:14:2;1795:49:74;;770:40659;1795:49;;2024:14:2;;;;;;770:40659:74;2024:14:2;;;770:40659:74;;;;2024:14:2;;;1795:49:74;;770:40659;;;1795:49;;;;;;;;770:40659;;1795:49;;;770:40659;;2062:61;770:40659;;;:::i;:::-;2321:4:48;2556;2321;;1928:14:74;770:40659;1928:14;;770:40659;;;;;;1958:17;;2763:4:48;770:40659:74;;;;;;;;;:::i;:::-;;;;;2062:61;:::i;:::-;770:40659;;;2197:79;2220:40;2197:79;;;;9786:54:15;2197:79:74;;770:40659;;;;;;2024:14:2;770:40659:74;2197:79;;;770:40659;2197:79;;:::i;:::-;336:42:2;2181:96:74;;;;770:40659;;2181:96;2024:14:2;2181:96:74;;;770:40659;2181:96;;770:40659;;;;;;;9786:54:15;770:40659:74;;;;:::i;:::-;2181:96;770:40659;;;336:42:2;2181:96:74;;;;;;;;;;;;;770:40659;;;2283:57;770:40659;;;;2283:57;;;;;;2024:14:2;2283:57:74;;770:40659;2283:57;;;:::i;:::-;;770:40659;;2283:57;;;;;;;;;;770:40659;;;;2283:57;;;;;;-1:-1:-1;2283:57:74;;;;;;:::i;:::-;;;;;;;770:40659;2024:14:2;770:40659:74;;2024:14:2;;;;;2181:96:74;;770:40659;;;;;2181:96;;:::i;:::-;770:40659;;;;2181:96;;;;;;770:40659;;2024:14:2;770:40659:74;;2024:14:2;;;;;1795:49:74;;;;770:40659;1795:49;;770:40659;1795:49;;;;;;770:40659;1795:49;;;:::i;:::-;;;2024:14:2;;;;;2062:61:74;2024:14:2;;:::i;:::-;1795:49:74;;;;;;;-1:-1:-1;1795:49:74;;1551:20;;;;;770:40659;;;1551:20;;;;;;:::i;:::-;;;;;770:40659;;2024:14:2;770:40659:74;;2024:14:2;;;;;1525:19:74;;;;;;770:40659;;;1525:19;;;;;;:::i;:::-;;;;;1403:12;;;;770:40659;1403:12;;770:40659;1403:12;;;;;;770:40659;1403:12;;;:::i;:::-;;;2024:14:2;;;;;;;:::i;:::-;1403:12:74;;;;;;;-1:-1:-1;1403:12:74;;770:40659;;;;;;;;;;;;;;:::i;:::-;;32488:43;770:40659;;;;;;32516:14;;770:40659;;32488:43;;:::i;:::-;770:40659;;;;32565:43;32571:17;;;;770:40659;;;32593:14;;;770:40659;;32565:43;;:::i;:::-;770:40659;32571:17;;;770:40659;294:80:98;32636:10:74;;;770:40659;294:80:98;:::i;:::-;32636:10:74;;;770:40659;294:80:98;770:40659:74;32674:10;;770:40659;294:80:98;:::i;:::-;770:40659:74;32674:10;;770:40659;;;;;;;;;;;;;;;;;;;;;;;;;;;;32636:10;770:40659;;;;32636:10;770:40659;;;;;;32571:17;770:40659;;;;;;;;;;;32593:14;770:40659;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;32636:10;770:40659;;;;32636:10;770:40659;;;;32636:10;770:40659;;;;32636:10;770:40659;;;;32636:10;;;770:40659;;;32762:19;2024:14:2;32762:19:74;;770:40659;32762:19;;2024:14:2;770:40659:74;32762:19;;;336:42:2;32762:19:74;;;;;;770:40659;;32762:19;;;770:40659;;;;;2024:14:2;;770:40659:74;32674:10;;770:40659;;;32802:19;2024:14:2;32802:19:74;;770:40659;32802:19;;2024:14:2;770:40659:74;32802:19;32762;32802;336:42:2;32802:19:74;;;;;;770:40659;;32802:19;;;770:40659;;;;;;;;2024:14:2;770:40659:74;2024:14:2;;770:40659:74;;;32924:25;2024:14:2;32924:25:74;;770:40659;32924:25;;770:40659;;;32924:25;32762:19;32924:25;336:42:2;32924:25:74;;;;;;;770:40659;;32924:25;;;770:40659;32516:14;770:40659;;32516:14;;770:40659;;;;;32956:27;2024:14:2;32956:27:74;;770:40659;32956:27;;2024:14:2;770:40659:74;;32956:27;32762:19;32956:27;336:42:2;32956:27:74;;;;;;;33008:70;770:40659;32892:92;304:1:98;770:40659:74;;2024:14:2;33221:55:74;770:40659;33109:44;770:40659;;;32956:27;;;770:40659;;;;;;32636:10;770:40659;2024:14:2;32892:92:74;;;;2024:14:2;:::i;33109:44:74:-;770:40659;32571:17;770:40659;;;;;2024:14:2;;;770:40659:74;;2024:14:2;;770:40659:74;;;33221:55;;;;;;2024:14:2;33221:55:74;;770:40659;33221:55;;2024:14:2;;;;;;770:40659:74;2024:14:2;;;770:40659:74;;;;2024:14:2;;;33221:55:74;;770:40659;;;33221:55;;;;;;;770:40659;;33221:55;;;770:40659;;;;;32593:14;770:40659;;2024:14:2;770:40659:74;;;;2024:14:2;770:40659:74;;;33381:25;2024:14:2;33381:25:74;;770:40659;33381:25;;770:40659;;;33381:25;32762:19;33381:25;336:42:2;33381:25:74;;;;;;;770:40659;;33381:25;;;770:40659;32593:14;770:40659;32593:14;;;770:40659;;;;;33413:27;2024:14:2;33413:27:74;;770:40659;33413:27;;2024:14:2;770:40659:74;;33413:27;32762:19;33413:27;336:42:2;33413:27:74;;;;;;;33349:92;304:1:98;770:40659:74;;2024:14:2;33465:70:74;770:40659;33566:44;770:40659;;;33413:27;;;770:40659;;;;;;32636:10;770:40659;2024:14:2;33349:92:74;;;;2024:14:2;:::i;33566:44:74:-;770:40659;;;;;;;;;33637:25;2321:4:48;33735:21:74;;:::i;:::-;770:40659;;;;33701:25;:31;:55;33762:329;770:40659;32593:14;770:40659;;;;;;;2024:14:2;770:40659:74;;33874:75;33897:33;770:40659;33874:75;;;32762:19;33874:75;;2024:14:2;32762:19:74;33874:75;;;;;;:::i;:::-;770:40659;;;;;;:::i;:::-;2024:14:2;;770:40659:74;;;33799:292;;770:40659;;33799:292;;770:40659;33967:6;32636:10;33799:292;;770:40659;;;32571:17;33799:292;;2763:4:48;770:40659:74;;;33799:292;;2763:4:48;304:1:98;32593:14:74;33799:292;;770:40659;;;;;33762:25;:31;;:329;;;;:::i;:::-;;770:40659;34135:16;;2763:4:48;770:40659:74;;;;;;34097:25;:35;2763:4:48;32636:10:74;;;770:40659;34247:55;770:40659;;;34263:25;770:40659;32593:14;770:40659;;;;34247:55;;:::i;:::-;770:40659;;34227:76;2024:14:2;34227:76:74;;770:40659;34227:76;;2024:14:2;32762:19:74;2763:4:48;;2024:14:2;32636:10:74;34227:76;33874:75;34227:76;336:42:2;34227:76:74;;;;;;770:40659;;;;;;;;34227:76;;770:40659;;;;;34415:12;2024:14:2;770:40659:74;2024:14:2;;770:40659:74;;;;34479:25;2024:14:2;34479:25:74;;770:40659;34479:25;;770:40659;;;34479:25;32762:19;34479:25;336:42:2;34479:25:74;;;;;;;770:40659;;34479:25;;;770:40659;;;;34516:15;2024:14:2;34516:15:74;;770:40659;34516:15;;2024:14:2;770:40659:74;;34516:15;32762:19;34516:15;336:42:2;34516:15:74;;;;;;;770:40659;;34516:15;;;770:40659;;;;34538:15;2024:14:2;34538:15:74;;770:40659;34538:15;;2024:14:2;770:40659:74;;34538:15;32762:19;34538:15;336:42:2;34538:15:74;;;;;;;770:40659;;34538:15;;;770:40659;;;;;34560:15;2024:14:2;34560:15:74;;770:40659;;34560:15;;2024:14:2;770:40659:74;;34560:15;32762:19;34560:15;336:42:2;34560:15:74;;;;;;;304:1:98;34451:134:74;770:40659;;;34365:259;770:40659;;;34560:15;;;770:40659;2763:4:48;770:40659:74;;;;;;2024:14:2;770:40659:74;;;34451:134;;;;;;2024:14:2;;;:::i;34365:259:74:-;770:40659;;;34335:289;34691:60;770:40659;;;34725:25;34691:60;:::i;:::-;770:40659;;;34657:94;770:40659;32593:14;770:40659;;;;336:42:2;34786:51:74;;;;770:40659;;2024:14:2;34786:51:74;;770:40659;;304:1:98;770:40659:74;34786:51;;770:40659;;;2763:4:48;;;770:40659:74;;;-1:-1:-1;2763:4:48;;;770:40659:74;2763:4:48;;;770:40659:74;;;;;2763:4:48;;;770:40659:74;;;;2763:4:48;;;34786:51:74;770:40659;;;336:42:2;34786:51:74;;;;;;;;770:40659;;34848:34;770:40659;;;;2024:14:2;770:40659:74;;2024:14:2;;;34848:34:74;770:40659;32593:14;770:40659;;;;;;;34922:31;770:40659;;;34955:27;34888:95;;;;;;770:40659;;;34888:95;;;;;2024:14:2;34888:95:74;;770:40659;;34888:95;770:40659;34888:95;;;:::i;:::-;;770:40659;;;34888:95;;;;;;;;;770:40659;;;;;32593:14;770:40659;;;;;;35033:45;;;;2024:14:2;35033:45:74;;;;;;;;770:40659;;35033:45;;;770:40659;;2024:14:2;;770:40659:74;;2024:14:2;;770:40659:74;;;35080:37;;;;2024:14:2;35080:37:74;;;;;;;;;770:40659;;35080:37;;;770:40659;35080:37;;;;:::i;:::-;770:40659;;;32593:14;770:40659;;;;;;35133:37;;;;2024:14:2;35133:37:74;;;;;;;;770:40659;;35133:37;;;770:40659;35172:16;770:40659;;;;;2024:14:2;35172:16:74;;:::i;:::-;770:40659;;;;;35245:25;2321:4:48;35343:21:74;;:::i;:::-;770:40659;;;;35309:25;:31;:55;35370:323;770:40659;32593:14;770:40659;;;;;;33897:33;770:40659;35482:69;;;770:40659;;32762:19;35482:69;;2024:14:2;32762:19:74;35482:69;;;33874:75;35482:69;;:::i;:::-;770:40659;;;;;;:::i;:::-;2024:14:2;;770:40659:74;;;35407:286;;770:40659;;35407:286;;770:40659;33967:6;32636:10;35407:286;;770:40659;;;32571:17;35407:286;;2763:4:48;770:40659:74;;;35407:286;;2763:4:48;304:1:98;32593:14:74;35407:286;;770:40659;;;;;35370:25;:31;;:323;;;;:::i;:::-;;770:40659;34135:16;;2763:4:48;770:40659:74;;;;;;35699:25;:35;2763:4:48;304:1:98;32571:17:74;770:40659;;;35759:25;:31;770:40659;;32674:10;;770:40659;;35891:55;770:40659;;;35907:25;770:40659;32593:14;770:40659;;;;35891:55;;:::i;:::-;770:40659;;35871:76;2024:14:2;35871:76:74;;770:40659;35871:76;;2024:14:2;32762:19:74;2763:4:48;;2024:14:2;32636:10:74;35871:76;33874:75;35871:76;336:42:2;35871:76:74;;;;;;;770:40659;;;;;;;35871:76;;770:40659;;32636:10;770:40659;;36060:12;770:40659;;;;;2024:14:2;770:40659:74;;;;36124:25;2024:14:2;36124:25:74;;770:40659;36124:25;;770:40659;;;36124:25;32762:19;36124:25;336:42:2;36124:25:74;;;;;;;770:40659;;36124:25;;;770:40659;;;;36161:15;2024:14:2;36161:15:74;;770:40659;36161:15;;2024:14:2;770:40659:74;;36161:15;32762:19;36161:15;336:42:2;36161:15:74;;;;;;;770:40659;;36161:15;;;770:40659;;;;36183:15;2024:14:2;36183:15:74;;770:40659;36183:15;;2024:14:2;770:40659:74;;36183:15;32762:19;36183:15;336:42:2;36183:15:74;;;;;;;770:40659;;36183:15;;;770:40659;;;;;36205:15;2024:14:2;36205:15:74;;770:40659;;36205:15;;2024:14:2;770:40659:74;;36205:15;32762:19;36205:15;336:42:2;36205:15:74;;;;;;;36010:259;770:40659;304:1:98;36096:134:74;770:40659;;;;;;;36205:15;;;770:40659;2763:4:48;770:40659:74;;;;;;2024:14:2;770:40659:74;;;36096:134;;;;;;2024:14:2;;;:::i;36010:259:74:-;770:40659;;;35980:289;36337:60;770:40659;;;36371:25;36337:60;:::i;:::-;770:40659;;;36303:94;770:40659;;36501:35;770:40659;36478:59;;;770:40659;36478:59;;;32762:19;36478:59;;:::i;:::-;36559:90;770:40659;;;36607:25;36559:90;770:40659;;36559:90;;;36582:23;770:40659;36559:90;;;32762:19;36559:90;;;:::i;:::-;;770:40659;36559:90;;;;;;:::i;:::-;336:42:2;36543:107:74;;;;770:40659;;36543:107;2024:14:2;36543:107:74;;770:40659;;36543:107;;770:40659;;;;;;;32762:19;770:40659;;;;:::i;:::-;36543:107;770:40659;;;336:42:2;36543:107:74;;;;;;;;770:40659;;;32593:14;770:40659;;;;;;;36690:31;770:40659;;;36723:27;36656:95;;;;;;770:40659;;;36656:95;;;;;2024:14:2;36656:95:74;;770:40659;;36656:95;770:40659;36656:95;;;:::i;:::-;;770:40659;;;36656:95;;;;;;;;;770:40659;;;;;32593:14;770:40659;;;;;;;36812:37;;;;2024:14:2;36812:37:74;;;;;;;;;770:40659;;36812:37;;;770:40659;36851:16;770:40659;;;;2024:14:2;36851:16:74;;:::i;36812:37::-;;;770:40659;36812:37;;770:40659;36812:37;;;;;;2763:4:48;36812:37:74;;;:::i;:::-;;;2763:4:48;;;;;;;770:40659:74;36812:37;;;;;-1:-1:-1;36812:37:74;;36656:95;770:40659;;36656:95;;;:::i;:::-;770:40659;;;;36656:95;;;36543:107;770:40659;;36543:107;;;:::i;:::-;770:40659;;;;36543:107;;;36183:15;;;;;770:40659;;;36183:15;;;;;;:::i;:::-;;;;36161;;;;;;770:40659;;;36161:15;;;;;;:::i;:::-;;;;;36124:25;;;;;;770:40659;;;36124:25;;;;;;:::i;:::-;;;;;35871:76;;;;;;;;32636:10;35871:76;32636:10;35871:76;;;;;;;:::i;:::-;;;;;;35133:37;;770:40659;35133:37;;770:40659;35133:37;;;;;;2763:4:48;35133:37:74;;;:::i;:::-;;;2763:4:48;;;;35172:16:74;2763:4:48;;35133:37:74;;;;;-1:-1:-1;35133:37:74;;35080;;;770:40659;35080:37;;770:40659;35080:37;;;;;;770:40659;35080:37;;;:::i;:::-;;;2024:14:2;;;;;35080:37:74;2024:14:2;;:::i;:::-;35080:37:74;;;;;;-1:-1:-1;35080:37:74;;35033:45;;770:40659;35033:45;;770:40659;35033:45;;;;;;770:40659;35033:45;;;:::i;:::-;;;2024:14:2;;;;;770:40659:74;2024:14:2;;:::i;:::-;35033:45:74;;;;;-1:-1:-1;35033:45:74;;34888:95;770:40659;;34888:95;;;:::i;:::-;770:40659;;;;34888:95;;;34786:51;770:40659;;34786:51;;;:::i;:::-;770:40659;;;;34786:51;;;34538:15;;;;;770:40659;;;34538:15;;;;;;:::i;:::-;;;;34516;;;;;;770:40659;;;34516:15;;;;;;:::i;:::-;;;;;34479:25;;;;;;770:40659;;;34479:25;;;;;;:::i;:::-;;;;;34227:76;;;;;;;32636:10;34227:76;32636:10;34227:76;;;;;;;:::i;:::-;;;;;33381:25;;;;;770:40659;;;33381:25;;;;;;:::i;:::-;;;;33221:55;;770:40659;33221:55;;770:40659;33221:55;;;;;;770:40659;33221:55;;;:::i;:::-;;;2024:14:2;;;;;770:40659:74;2024:14:2;;:::i;:::-;33221:55:74;;;;;-1:-1:-1;33221:55:74;;32924:25;;;;;770:40659;;;32924:25;;;;;;:::i;:::-;;;;32802:19;;770:40659;32802:19;;770:40659;32802:19;;;;;;770:40659;32802:19;;;:::i;:::-;;;2024:14:2;;;;;770:40659:74;2024:14:2;;:::i;:::-;32802:19:74;;;;;-1:-1:-1;32802:19:74;;32762;;770:40659;32762:19;;770:40659;32762:19;;;;;;770:40659;32762:19;;;:::i;:::-;;;2024:14:2;;;;;770:40659:74;2024:14:2;;:::i;:::-;32762:19:74;;;;;-1:-1:-1;32762:19:74;;770:40659;;;;;;;;;;;;3653:18:9;770:40659:74;2321:4:48;;;:::i;:::-;770:40659:74;;;;;;;:::i;:::-;2321:4:48;;;770:40659:74;;;3653:18:9;770:40659:74;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;2024:14:2;;770:40659:74;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37333:14;;;;:::i;:::-;770:40659;37386:16;;770:40659;;;;;37407:13;770:40659;37380:41;37407:13;;;770:40659;;;;;37380:41;;:::i;:::-;770:40659;;;37448:9;;;770:40659;294:80:98;770:40659:74;;294:80:98;:::i;:::-;770:40659:74;;;;:::i;:::-;;;;;;37522:18;2024:14:2;37522:18:74;;770:40659;37522:18;;2024:14:2;770:40659:74;37522:18;;;336:42:2;37522:18:74;;;;;;770:40659;;37522:18;;;770:40659;;;;;2024:14:2;;;;770:40659:74;;37623:24;2024:14:2;37623:24:74;;770:40659;37623:24;;770:40659;;;37623:24;37522:18;37623:24;336:42:2;37623:24:74;;;;;;;770:40659;;37623:24;;;770:40659;;;;;;;;;37654:26;2024:14:2;37654:26:74;;770:40659;37654:26;;2024:14:2;770:40659:74;;37654:26;37522:18;37654:26;336:42:2;37654:26:74;;;;;;;37591:90;304:1:98;770:40659:74;;2024:14:2;770:40659:74;;37704:68;770:40659;;;37654:26;;;770:40659;;;;;;;37407:13;770:40659;2024:14:2;37591:90:74;;;;2024:14:2;:::i;37591:90:74:-;770:40659;;;;37750:17;;2024:14:2;770:40659:74;37704:68;;:::i;:::-;37690:11;37874:54;770:40659;37802:43;37690:11;;;:82;;;;37802:43;:::i;:::-;37784:15;770:40659;37784:15;;770:40659;;37874:7;2024:14:2;;;770:40659:74;;2024:14:2;;770:40659:74;;;37874:54;;;;;;2024:14:2;37874:54:74;;770:40659;37874:54;;2024:14:2;;;;;;770:40659:74;2024:14:2;;;770:40659:74;;;;2024:14:2;;;37874:54:74;;770:40659;;;37874:54;;;;;;;770:40659;;37874:54;;;770:40659;;;;;37407:13;37852:11;;2024:14:2;37987:28:74;:14;;:28;;770:40659;304:1:98;770:40659:74;;;;;;;37973:54;;;:::i;:::-;770:40659;;;38094:3;37987:28;38057:14;;:28;;770:40659;;38053:39;;;;;38130:31;770:40659;38130:31;;304:1:98;38130:31:74;;:::i;:::-;2024:14:2;770:40659:74;38107:54;;;;:::i;:::-;2024:14:2;770:40659:74;38038:13;;38053:39;;;;;;770:40659;38230:19;;;2024:14:2;770:40659:74;38173:76;37987:28;38191:14;;:28;;770:40659;38173:76;;:::i;:::-;2024:14:2;37987:28:74;38293:14;;:28;;;;38327:48;;770:40659;38470:44;38486:14;;770:40659;37407:13;37852:11;;2024:14:2;770:40659:74;38470:44;;:::i;:::-;770:40659;;38451:64;2024:14:2;38451:64:74;;770:40659;38451:64;;2024:14:2;37522:18:74;2763:4:48;;2024:14:2;37407:13:74;38451:64;;;336:42:2;38451:64:74;;;;;;;770:40659;;;;;;;;38451:64;;38033:135;38596:11;;2024:14:2;770:40659:74;2024:14:2;;770:40659:74;;;;38648:24;2024:14:2;38648:24:74;;770:40659;38648:24;;770:40659;;;38648:24;37522:18;38648:24;336:42:2;38648:24:74;;;;;;;770:40659;;38648:24;;;38033:135;770:40659;;;38684:14;2024::2;38684::74;;770:40659;38684:14;;2024::2;770:40659:74;;38684:14;37522:18;38684:14;336:42:2;38684:14:74;;;;;;;770:40659;;38684:14;;;38033:135;770:40659;;;38705:14;2024::2;38705::74;;770:40659;38705:14;;2024::2;770:40659:74;;38705:14;37522:18;38705:14;336:42:2;38705:14:74;;;;;;;770:40659;;38705:14;;;38033:135;770:40659;;;;38726:14;2024::2;38726::74;;770:40659;;38726:14;;2024::2;770:40659:74;;38726:14;37522:18;38726:14;336:42:2;38726:14:74;;;;;;;304:1:98;38631:110:74;770:40659;;;38546:242;770:40659;;;38726:14;;;770:40659;2763:4:48;770:40659:74;;;;;;2024:14:2;770:40659:74;;;38631:110;;;;;;2024:14:2;;;:::i;38631:110:74:-;770:40659;38758:14;;:24;2763:4:48;770:40659:74;38546:242;;:::i;:::-;38521:22;37448:9;38521:22;;:267;;;37987:28;38837:14;;:28;:48;770:40659;38230:19;;;2024:14:2;770:40659:74;336:42:2;38928:29:74;;;;770:40659;;38928:29;2024:14:2;38928:29:74;;770:40659;38928:29;;770:40659;;;;37522:18;770:40659;;;336:42:2;38928:29:74;;;;;;;;38033:135;37852:11;;38983:87;37852:11;770:40659;37407:13;770:40659;37852:11;;2024:14:2;770:40659:74;39031:14;;39047:22;;770:40659;;;38983:87;;;;;;2024:14:2;38983:87:74;;770:40659;38983:87;;;:::i;:::-;;;;;;;;;;770:40659;;38983:87;;;38033:135;3789:24:4;336:42:2;3789:24:4;;;;770:40659:74;;3789:24:4;2024:14:2;3789:24:4;;770:40659:74;3789:24:4;;2024:14:2;304:1:98;37522:18:74;770:40659;;2024:14:2;-1:-1:-1;;3789:24:4;38451:64:74;3789:24:4;336:42:2;3789:24:4;;;;;;;;770:40659:74;;;;38983:87;;;770:40659;38983:87;;770:40659;38983:87;;;;;;2763:4:48;38983:87:74;;;:::i;:::-;;;2763:4:48;;;;;38983:87:74;;;;;;-1:-1:-1;38983:87:74;;38928:29;770:40659;;;;;38928:29;;;:::i;:::-;770:40659;;;;38928:29;;;;38705:14;;;;;770:40659;;;38705:14;;;;;;:::i;:::-;;;;38684;;;;;;770:40659;;;38684:14;;;;;;:::i;:::-;;;;;38648:24;;;;;;770:40659;;;38648:24;;;;;;:::i;:::-;;;;;38451:64;;;;;;;;37407:13;38451:64;37407:13;38451:64;;;;;;;:::i;:::-;;;;;;770:40659;;;;;;;;37522:18;770:40659;;;37874:54;;770:40659;37874:54;;770:40659;37874:54;;;;;;770:40659;37874:54;;;:::i;:::-;;;2024:14:2;;;;;770:40659:74;2024:14:2;;:::i;:::-;37874:54:74;;;;;-1:-1:-1;37874:54:74;;37654:26;;;;;770:40659;;;37654:26;;;;;;:::i;:::-;;;;37623:24;770:40659;37623:24;;;;;;770:40659;;;37623:24;;;;;;:::i;:::-;;;;;37522:18;;770:40659;37522:18;;770:40659;37522:18;;;;;;770:40659;37522:18;;;:::i;:::-;;;2024:14:2;;;;;770:40659:74;2024:14:2;;:::i;:::-;37522:18:74;;;;;-1:-1:-1;37522:18:74;;770:40659;;;;;;;;;;;;3162:18:9;770:40659:74;2321:4:48;770:40659:74;2321:4:48;:::i;:::-;770:40659:74;;;;;;;:::i;:::-;2321:4:48;;;770:40659:74;;;3162:18:9;-1:-1:-1;;770:40659:74;;-1:-1:-1;;770:40659:74;-1:-1:-1;;770:40659:74;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;2321:4:48;2556;2321;;11836:14:74;770:40659;11836:14;;770:40659;11880:38;770:40659;;11880:38;:::i;:::-;770:40659;;;;;;;;11938:52;770:40659;;;11938:52;:::i;:::-;11997:19;336:42:2;11997:19:74;;;;770:40659;;11997:19;2024:14:2;11997:19:74;;770:40659;11997:19;;2024:14:2;770:40659:74;;;;;;;336:42:2;11997:19:74;;;;;;;;770:40659;-1:-1:-1;12099:7:74;2024:14:2;770:40659:74;2024:14:2;;770:40659:74;;2024:14:2;12099:49:74;;770:40659;;;;;12099:49;;770:40659;;;;2024:14:2;;;;770:40659:74;;;;;;2024:14:2;;770:40659:74;;;;2024:14:2;;;;;770:40659:74;12099:49;;;;;;770:40659;;12099:49;;;770:40659;;;;;12188:16;336:42:2;12188:16:74;;;;770:40659;;2024:14:2;12188:16:74;;;770:40659;12188:16;;770:40659;;;;;;;;336:42:2;12188:16:74;;;;;;;;770:40659;12210:46;336:42:2;12210:46:74;;;;770:40659;;2024:14:2;12210:46:74;;770:40659;;304:1:98;770:40659:74;12210:46;;770:40659;;;2763:4:48;;;770:40659:74;;;-1:-1:-1;2763:4:48;;;770:40659:74;2763:4:48;;;770:40659:74;;;;2763:4:48;;;770:40659:74;;;2763:4:48;;;12210:46:74;770:40659;;;336:42:2;12210:46:74;;;;;;;;770:40659;12286:32;;;;;:::i;:::-;770:40659;;;2024:14:2;;;770:40659:74;;;;;;;;;;;;;;;12267:85;;770:40659;;12267:85;12398:32;;;;:::i;:::-;12358:106;;;;;770:40659;;2024:14:2;12358:106:74;;770:40659;;;12358:106;;2024:14:2;;;;-1:-1:-1;770:40659:74;;;;;;;;;;;;;;;;;12358:106;770:40659;;;12358:106;;;;;;;;;;;;770:40659;12547:32;;;;:::i;:::-;770:40659;;;12507:73;2024:14:2;12507:73:74;;770:40659;12507:73;;2024:14:2;770:40659:74;12507:73;770:40659;12507:73;;;;;;;;12638:11;770:40659;;;;;;12507:73;;;770:40659;12601:10;;;;:::i;:::-;12638:11;:::i;:::-;770:40659;;2024:14:2;12727:55:74;;770:40659;12727:55;;;;770:40659;12727:55;;770:40659;;2024:14:2;;770:40659:74;;;;;;;;;;;;;;;;;;12727:55;;;;;;;;;;;12788:36;770:40659;;;;;12727:55;;;770:40659;;;12788:36;:::i;:::-;336:42:2;12871:22:74;;;;770:40659;;;12871:22;2024:14:2;12871:22:74;;770:40659;;12871:22;;770:40659;;;;;;;;336:42:2;12871:22:74;;;;;;;;770:40659;-1:-1:-1;770:40659:74;;;2024:14:2;12908:55:74;;770:40659;12908:55;;2024:14:2;;;;770:40659:74;;;;;;;;;;;;;;;;;;;;;;;12908:55;;;;;;;;;;12969:36;770:40659;;;;;12908:55;;;770:40659;;12969:36;:::i;12908:55::-;;;;770:40659;12908:55;770:40659;12908:55;;;;;;;:::i;:::-;;;;12871:22;770:40659;;12871:22;;;:::i;:::-;770:40659;;;;12871:22;;;12727:55;;;;770:40659;12727:55;770:40659;12727:55;;;;;;;:::i;:::-;;;;12507:73;12601:10;12507:73;;;;;770:40659;12507:73;770:40659;12507:73;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;12358:106;;770:40659;;;;12358:106;;:::i;:::-;770:40659;;;;12358:106;;;;12210:46;770:40659;;12210:46;;;:::i;:::-;770:40659;;;;12210:46;;;12188:16;770:40659;;12188:16;;;:::i;:::-;770:40659;;;;12188:16;;;12099:49;;770:40659;12099:49;;770:40659;12099:49;;;;;;770:40659;12099:49;;;:::i;:::-;;;2024:14:2;;;;;770:40659:74;2024:14:2;;:::i;:::-;12099:49:74;;;;;-1:-1:-1;12099:49:74;;11997:19;770:40659;;11997:19;;;:::i;:::-;770:40659;;;;11997:19;;;770:40659;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;13237:26;;;:58;;;770:40659;336:42:2;13227:69:74;;;;770:40659;;13227:69;2024:14:2;13227:69:74;;770:40659;;;13227:69;;770:40659;;;13227:69;770:40659;13227:69;336:42:2;13227:69:74;;;;;;;;770:40659;;;;:::i;:::-;2556:4:48;2321;;13379:14:74;770:40659;13379:14;;770:40659;13423:38;770:40659;;13423:38;:::i;:::-;770:40659;;;;;;;;;13481:52;770:40659;;;13481:52;:::i;:::-;13540:19;336:42:2;13540:19:74;;;;770:40659;;13540:19;2024:14:2;13540:19:74;;770:40659;13540:19;;2024:14:2;770:40659:74;;;;;;;336:42:2;13540:19:74;;;;;;;;770:40659;-1:-1:-1;13642:7:74;2024:14:2;770:40659:74;2024:14:2;;770:40659:74;;2024:14:2;13642:49:74;;770:40659;;;;;13642:49;;770:40659;;;;2024:14:2;;;;770:40659:74;;;;;;2024:14:2;;770:40659:74;;;;2024:14:2;;;;;770:40659:74;13642:49;;;;;;770:40659;;13642:49;;;770:40659;;;;;13731:16;336:42:2;13731:16:74;;;;770:40659;;2024:14:2;13731:16:74;;;770:40659;13731:16;;770:40659;;;;;;;;336:42:2;13731:16:74;;;;;;;;770:40659;13753:46;336:42:2;13753:46:74;;;;770:40659;;2024:14:2;13753:46:74;;770:40659;;304:1:98;770:40659:74;13753:46;;770:40659;;;2763:4:48;;;770:40659:74;;;-1:-1:-1;2763:4:48;;;770:40659:74;2763:4:48;;;770:40659:74;;;;2763:4:48;;;770:40659:74;;;2763:4:48;;;13753:46:74;770:40659;;;336:42:2;13753:46:74;;;;;;;;770:40659;13829:32;;;;;:::i;:::-;770:40659;;;2024:14:2;;;770:40659:74;;;;;;;;;;;;;;;;;13810:87;;770:40659;;13810:87;13943:32;;;;:::i;:::-;13903:108;;;;;770:40659;;2024:14:2;13903:108:74;;770:40659;;;13903:108;;2024:14:2;;;;770:40659:74;;;;;;;;;;;;;;;;;;;;13903:108;770:40659;;;13903:108;;;;;;;;;770:40659;14094:32;;;;;:::i;:::-;770:40659;;;14054:73;2024:14:2;14054:73:74;;770:40659;14054:73;;2024:14:2;770:40659:74;14054:73;770:40659;14054:73;;;;;;;;;14187:11;770:40659;;;;;;14054:73;;;770:40659;14148:12;;;;;:::i;14187:11::-;336:42:2;14268:22:74;;;;770:40659;;2024:14:2;14268:22:74;;;770:40659;14268:22;;770:40659;;;;;;;;336:42:2;14268:22:74;;;;;;;;770:40659;;;;2024:14:2;14312:55:74;;770:40659;14312:55;;;;770:40659;14312:55;;770:40659;;2024:14:2;;770:40659:74;;;;;;;;;;;;;;;;;;14312:55;;;;;;;;;;;14373:36;770:40659;;;;;14312:55;;;770:40659;;14373:36;:::i;:::-;336:42:2;14475:22:74;;;;770:40659;;2024:14:2;14475:22:74;;;770:40659;14475:22;;770:40659;;;;;;;;336:42:2;14475:22:74;;;;;;;;;;;770:40659;14619:32;;;;:::i;:::-;770:40659;;;14526:177;14558:51;770:40659;14526:177;;;770:40659;14526:177;;2024:14:2;770:40659:74;;;;;;;;;14526:177;;;770:40659;14526:177;;:::i;:::-;336:42:2;14503:206:74;;;;770:40659;;14503:206;2024:14:2;14503:206:74;;770:40659;;14503:206;;770:40659;;;;;;;;;;;;:::i;:::-;14503:206;770:40659;;;336:42:2;14503:206:74;;;;;;;;770:40659;-1:-1:-1;770:40659:74;;;2024:14:2;14715:55:74;;770:40659;14715:55;;2024:14:2;;;;770:40659:74;;;;;;;;;;;;;;;;;;;;;;14715:55;;;;;;;;770:40659;;;;14715:55;;;770:40659;14715:55;770:40659;14715:55;;;;;;;:::i;:::-;;;;;14503:206;770:40659;;14503:206;;;:::i;:::-;770:40659;;;;14503:206;;;14475:22;;770:40659;;;;14475:22;;:::i;:::-;770:40659;;;;14475:22;;;;14312:55;;;;770:40659;14312:55;770:40659;14312:55;;;;;;;:::i;:::-;;;;14268:22;770:40659;;14268:22;;;:::i;:::-;770:40659;;;;14268:22;;;14054:73;14148:12;14054:73;;;;;;770:40659;14054:73;770:40659;14054:73;;;;;;;:::i;:::-;;;;;13903:108;770:40659;;13903:108;;;:::i;:::-;770:40659;;;;13903:108;;;13753:46;770:40659;;13753:46;;;:::i;:::-;770:40659;;;;13753:46;;;13731:16;770:40659;;13731:16;;;:::i;:::-;770:40659;;;;13731:16;;;13642:49;;770:40659;13642:49;;770:40659;13642:49;;;;;;770:40659;13642:49;;;:::i;:::-;;;2024:14:2;;;;;770:40659:74;2024:14:2;;:::i;:::-;13642:49:74;;;;;-1:-1:-1;13642:49:74;;13540:19;770:40659;;13540:19;;;:::i;:::-;770:40659;;;;13540:19;;;13227:69;770:40659;;13227:69;;;:::i;:::-;770:40659;;;;13227:69;;;13237:58;13267:28;;;;;13237:58;;770:40659;;;;2546:29;770:40659;;294:80:98;770:40659:74;;;;:::i;:::-;;;;;;;;;;;;;;;;2546:29;:::i;:::-;770:40659;294:80:98;;:::i;:::-;770:40659:74;;;2624:12;2024:14:2;2624:12:74;;;770:40659;2624:12;;2024:14:2;;2624:12:74;;;336:42:2;2624:12:74;;;;;;;770:40659;;2624:12;;;770:40659;;;;;2746:19;2024:14:2;2746:19:74;;770:40659;2746:19;;770:40659;2746:19;;770:40659;;;2746:19;2624:12;2746:19;336:42:2;2746:19:74;;;;;;;770:40659;;2746:19;;;770:40659;;;;2772:20;2024:14:2;2772:20:74;;770:40659;2772:20;;2024:14:2;770:40659:74;;2772:20;2624:12;2772:20;336:42:2;2772:20:74;;;;;;;2714:79;304:1:98;770:40659:74;;2024:14:2;;770:40659:74;2811:56;770:40659;;;2772:20;;;770:40659;;;;;;;;;2024:14:2;2714:79:74;;;;2024:14:2;:::i;:::-;;;;;;;;;770:40659:74;;2024:14:2;;;;;;;;;:::i;:::-;;;;;;;;;770:40659:74;;2024:14:2;;;;;;;;;:::i;:::-;;;2714:79:74;;;;;;;;;:::i;:::-;770:40659;2811:56;;:::i;:::-;2901:38;;;:::i;:::-;3016:7;2024:14:2;;;;770:40659:74;;2024:14:2;3016:49:74;;770:40659;;;;;3016:49;;770:40659;2024:14:2;;;;;;770:40659:74;;2024:14:2;;;770:40659:74;;;;2024:14:2;;770:40659:74;;;;2024:14:2;;;;;770:40659:74;3016:49;;;;;;770:40659;;3016:49;;;770:40659;;;;;2024:14:2;770:40659:74;3016:7;2024:14:2;;;770:40659:74;2024:14:2;770:40659:74;2024:14:2;;770:40659:74;;;12256:25:97;2024:14:2;12256:25:97;;770:40659:74;12256:25:97;;2024:14:2;770:40659:74;;12256:25:97;2624:12:74;12256:25:97;336:42:2;12256:25:97;;;;;;;770:40659:74;;12256:25:97;;;770:40659:74;;;;12312:22:97;2024:14:2;12312:22:97;;770:40659:74;12312:22:97;;770:40659:74;;;12312:22:97;2624:12:74;12312:22:97;336:42:2;12312:22:97;;;;;;;770:40659:74;;12312:22:97;;;770:40659:74;;;;12364:21:97;2024:14:2;12364:21:97;;770:40659:74;12364:21:97;;770:40659:74;;;12364:21:97;2624:12:74;12364:21:97;336:42:2;12364:21:97;;;;;;770:40659:74;;;;;;;;;12364:21:97;;;770:40659:74;;;;;;;;;2024:14:2;770:40659:74;;;2024:14:2;770:40659:74;;;;2024:14:2;770:40659:74;;;2024:14:2;;;:::i;:::-;;;770:40659:74;2024:14:2;;;770:40659:74;2024:14:2;770:40659:74;;;;2024:14:2;770:40659:74;;;2024:14:2;;;:::i;:::-;;;770:40659:74;2024:14:2;;;770:40659:74;2024:14:2;770:40659:74;;;;2024:14:2;770:40659:74;;;2024:14:2;;;:::i;:::-;;;770:40659:74;2024:14:2;;;770:40659:74;;;;;;;;;;;:::i;:::-;;;2024:14:2;798:35:97;;2024:14:2;770:40659:74;798:35:97;;770:40659:74;;;;2624:12;770:40659;;;;;;;;;798:35:97;770:40659:74;336:42:2;798:35:97;;;;;;;-1:-1:-1;;798:35:97;;;770:40659:74;;;;866:35:97;2024:14:2;866:35:97;;2024:14:2;770:40659:74;866:35:97;;770:40659:74;;2624:12;770:40659;;;;;;;;2024:14:2;866:35:97;798;866;336:42:2;866:35:97;;;;;;;-1:-1:-1;;866:35:97;;;770:40659:74;916:18:97;;;;770:40659:74;;285:44:97;462:50;1037:32;;1033:109;;770:40659:74;232:1:97;;;;;;304::98;1278:17:97;232:1;;644:49;;285:44;644:49;1278:17;:::i;:::-;770:40659:74;304:1:98;770:40659:74;;;;;;;1326:27:97;1337:15;;;;:::i;:::-;1326:27;;:::i;:::-;770:40659:74;;;1383:39:97;2024:14:2;1383:39:97;;2024:14:2;770:40659:74;1383:39:97;;232:1;;2624:12:74;232:1:97;;770:40659:74;232:1:97;770:40659:74;;;232:1:97;-1:-1:-1;;1383:39:97;798:35;1383:39;336:42:2;1383:39:97;;;;;;;-1:-1:-1;;1383:39:97;;;770:40659:74;;;;2024:14:2;1451:39:97;;2024:14:2;770:40659:74;1451:39:97;;232:1;;2624:12:74;232:1:97;;770:40659:74;232:1:97;770:40659:74;;;232:1:97;-1:-1:-1;;1451:39:97;798:35;1451:39;336:42:2;1451:39:97;;;;;;;-1:-1:-1;;1451:39:97;;;770:40659:74;;;;1526:24:97;2024:14:2;1526:24:97;;770:40659:74;1526:24:97;;2024:14:2;-1:-1:-1;;1526:24:97;2624:12:74;1526:24:97;336:42:2;1526:24:97;;;;;;770:40659:74;-1:-1:-1;770:40659:74;-1:-1:-1;;;1526:24:97;;;770:40659:74;;2024:14:2;232:1:97;770:40659:74;;2024:14:2;770:40659:74;;;;;2024:14:2;770:40659:74;;;232:1:97;;;;;;2024:14:2;;;:::i;:::-;;;;770:40659:74;;2024:14:2;;;;;;;;;:::i;:::-;;;770:40659:74;;;;2024:14:2;;;;;:::i;:::-;;232:1:97;2714:79:74;232:1:97;;;;;;:::i;:::-;770:40659:74;;12436:49:97;;;;;2024:14:2;12436:49:97;;770:40659:74;;12436:49:97;;770:40659:74;798:35:97;770:40659:74;;;;:::i;:::-;;;;;;;;;2624:12;770:40659;;;;;;;2024:14:2;770:40659:74;;;;;;;;;;;;;;;:::i;:::-;12436:49:97;770:40659:74;;;336:42:2;12436:49:97;;;;;;;770:40659:74;;12436:49:97;;;770:40659:74;;;;12589:25:97;2024:14:2;12589:25:97;;2024:14:2;770:40659:74;12589:25:97;;770:40659:74;;;;;;;2624:12;770:40659;;;;:::i;:::-;12589:25:97;;336:42:2;12589:25:97;;;;;;;770:40659:74;;12589:25:97;;;770:40659:74;;12795:2:97;770:40659:74;;12783:14:97;770:40659:74;;;;12885:13:97;770:40659:74;12880:831:97;12900:6;12795:2;12900:6;;;;770:40659:74;;;3248:33;770:40659;;3248:33;;:::i;:::-;3503:32;770:40659;;;:::i;:::-;2321:4:48;2556;2321;;3364:14:74;770:40659;3364:14;;770:40659;;;;;2024:14:2;3394:17:74;;2763:4:48;3503:32:74;:::i;:::-;770:40659;;3490:46;2024:14:2;3490:46:74;;770:40659;3490:46;;2024:14:2;2624:12:74;2763:4:48;;2024:14:2;770:40659:74;3490:46;770:40659;3490:46;336:42:2;3490:46:74;;;;;;;770:40659;;;;;;;;3490:46;;;12880:831:97;770:40659:74;;;3656:19;2024:14:2;3656:19:74;;770:40659;3656:19;;770:40659;;;3656:19;2624:12;3656:19;336:42:2;3656:19:74;;;;;;;770:40659;;3656:19;;;12880:831:97;770:40659:74;;;3687:14;2024::2;3687::74;;770:40659;3687:14;;2024::2;770:40659:74;;3687:14;2624:12;3687:14;336:42:2;3687:14:74;;;;;;;770:40659;;3687:14;;;12880:831:97;770:40659:74;;;3708:14;2024::2;3708::74;;770:40659;3708:14;;2024::2;770:40659:74;;3708:14;2624:12;3708:14;336:42:2;3708:14:74;;;;;;;770:40659;;3708:14;;;12880:831:97;770:40659:74;;;;3729:14;2024::2;3729::74;;770:40659;;3729:14;;2024::2;770:40659:74;;3729:14;2624:12;3729:14;336:42:2;3729:14:74;;;;;;304:1:98;2024:14:2;770:40659:74;;3639:105;770:40659;3822:57;770:40659;3568:202;770:40659;;;3729:14;;;12880:831:97;770:40659:74;2763:4:48;770:40659:74;;;;;;2024:14:2;770:40659:74;;;3639:105;;;;;;2024:14:2;;;:::i;:::-;;;2763:4:48;2024:14:2;;;2763:4:48;2024:14:2;770:40659:74;;2763:4:48;;;;;;2024:14:2;;;:::i;:::-;;;;;;;;;770:40659:74;;2024:14:2;;;;;;;;;;:::i;:::-;;;;;;;;;770:40659:74;;2024:14:2;;;770:40659:74;2024:14:2;;;;;:::i;:::-;;;3639:105:74;;2714:79;3639:105;;;;;;:::i;:::-;3568:202;:::i;:::-;770:40659;;;3822:57;;;;;;2024:14:2;3822:57:74;;770:40659;3822:57;;;:::i;3729:14::-;2763:4:48;3729:14:74;;;;;;770:40659;;;3729:14;;;;;;:::i;:::-;;;;;3708;;;;;;770:40659;;;3708:14;;;;;;:::i;:::-;;;;;3687;;;;;;770:40659;;;3687:14;;;;;;:::i;:::-;;;;;3656:19;;;;;;770:40659;;;3656:19;;;;;;:::i;:::-;;;;;3490:46;;;;;;;;;770:40659;3490:46;770:40659;3490:46;;;;;;;:::i;:::-;;;;;;;;12908:6:97;770:40659:74;;;;;;;2024:14:2;770:40659:74;;;;;;12932:3:97;770:40659:74;;;;;;;12960:4:97;;;;:::i;:::-;770:40659:74;;;304:1:98;770:40659:74;;;;;;;12990:8:97;;;;:::i;:::-;770:40659:74;;;;13090:2:97;13084:8;;;;:20;;12908:6;13080:298;;;13142:7;;;:::i;:::-;13080:298;;13090:2;13427:8;;;:20;;;13080:298;13423:241;;;13466:7;;;:::i;:::-;13423:241;;770:40659:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12908:6:97;770:40659:74;;;;;;;;12885:13:97;;;13423:241;13498:2;13492:8;;;:20;;;13423:241;13488:176;;;13531:7;;;:::i;:::-;13488:176;13423:241;;13488:176;13563:2;13557:8;;;:21;;;13488:176;13553:111;;;13597:7;;;:::i;13553:111::-;770:40659:74;;13629:26:97;;;770:40659:74;;13629:26:97;;770:40659:74;;;;;;;;;;;;;13629:26:97;13557:21;13569:9;13575:3;13569:9;;;13557:21;;13492:20;13504:8;13510:2;13504:8;;;13492:20;;13427;13439:8;13445:2;13439:8;;;13427:20;;13080:298;13174:2;13168:8;;;:20;;;13080:298;13164:214;;;13226:7;;;:::i;:::-;13164:214;13080:298;;13164:214;13258:2;13252:8;;;:21;;;13164:214;13248:130;;;13311:7;;;:::i;13252:21::-;13264:9;13270:3;13264:9;;;13252:21;;13168:20;13180:8;13186:2;13180:8;;;13168:20;;13084;13096:8;13102:2;13096:8;;;13084:20;;770:40659:74;798:35:97;770:40659:74;;;;;2024:14:2;770:40659:74;;;;232:1:97;2624:12:74;770:40659;;;;;;;;;12589:25:97;;;;;770:40659:74;;;12589:25:97;;;;;;:::i;:::-;;;;12436:49;;;;;770:40659:74;;;12436:49:97;;;;;;:::i;:::-;;;;1526:24;232:1;1526:24;;;2024:14:2;1526:24:97;;-1:-1:-1;;;1526:24:97;;;;;;:::i;:::-;;;;;1451:39;;;;;-1:-1:-1;;;1451:39:97;;;;;;:::i;:::-;;;;1383;;;;;;-1:-1:-1;;;1383:39:97;;;;;;:::i;:::-;;;;;1033:109;770:40659:74;;;2024:14:2;1107:26:97;;770:40659:74;;-1:-1:-1;;770:40659:74;;1107:26:97;2024:14:2;770:40659:74;;;;-1:-1:-1;;770:40659:74;;;;1107:26:97;;2714:79:74;1107:26:97;;;;;;:::i;:::-;770:40659:74;1097:37:97;;1033:109;;770:40659:74;798:35:97;770:40659:74;;;;;2024:14:2;770:40659:74;;;;;2624:12;770:40659;;;;;;;;;866:35:97;;;;2024:14:2;866:35:97;;2024:14:2;866:35:97;;;;;;2763:4:48;866:35:97;;;:::i;:::-;;;2763:4:48;;;;;866:35:97;;;;;;;-1:-1:-1;866:35:97;;798;;;2024:14:2;798:35:97;;2024:14:2;798:35:97;;;;;;2763:4:48;798:35:97;;;:::i;:::-;;;2763:4:48;;;;;798:35:97;;;;;;-1:-1:-1;798:35:97;;12364:21;;;;;770:40659:74;;;12364:21:97;;;;;;:::i;:::-;;;;12312:22;;;;;;770:40659:74;;;12312:22:97;;;;;;:::i;:::-;;;;;12256:25;;;;;;770:40659:74;;;12256:25:97;;;;;;:::i;:::-;;;;;3016:49:74;;2024:14:2;3016:49:74;;2024:14:2;3016:49:74;;;;;;2024:14:2;3016:49:74;;;:::i;:::-;;;2024:14:2;;;;;770:40659:74;2024:14:2;;:::i;:::-;3016:49:74;;;;;-1:-1:-1;3016:49:74;;2772:20;;;;;770:40659;;;2772:20;;;;;;:::i;:::-;;;;2746:19;;;;;770:40659;;;2746:19;;;;;;:::i;:::-;;;;2624:12;;;;2024:14:2;2624:12:74;;2024:14:2;2624:12:74;;;;;;2024:14:2;2624:12:74;;;:::i;:::-;;;2024:14:2;;;;;;;:::i;:::-;2624:12:74;;;;;;;-1:-1:-1;2624:12:74;;770:40659;;;;;;;;;;;;3346:26:9;770:40659:74;2321:4:48;;;:::i;:::-;770:40659:74;;;;;;;:::i;:::-;2321:4:48;;;770:40659:74;;;;;3346:26:9;770:40659:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18655:14;770:40659;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;18655:14;:::i;:::-;294:80:98;770:40659:74;;;;294:80:98;:::i;:::-;770:40659:74;;;;;;;2763:4:48;770:40659:74;;;18712:14;;:24;2763:4:48;770:40659:74;;;2763:4:48;770:40659:74;;18761:368;770:40659;;;;2933:19:15;770:40659:74;;;;;;;;-1:-1:-1;;2933:19:15;;:::i;:::-;770:40659:74;;9786:54:15;770:40659:74;;;;;;:::i;9786:54:15:-;-1:-1:-1;;;;;770:40659:74;;9371:159:15;679:42;9371:159;;;770:40659:74;;;;;;18900:46;770:40659;;;;;;18900:46;:::i;:::-;770:40659;;;;2321:4:48;18761:368:74;770:40659;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19202:18;2024:14:2;19202:18:74;;770:40659;19202:18;;2024:14:2;770:40659:74;19202:18;770:40659;19202:18;336:42:2;19202:18:74;;;;;;770:40659;;19202:18;;;18761:368;770:40659;;;;2024:14:2;;;;770:40659:74;;19287:24;2024:14:2;19287:24:74;;770:40659;19287:24;;770:40659;;;19287:24;770:40659;19287:24;336:42:2;19287:24:74;;;;;;;770:40659;;19287:24;;;18761:368;770:40659;;;;;;;;;;19318:32;2024:14:2;19318:32:74;;770:40659;19318:32;;2024:14:2;770:40659:74;;19318:32;770:40659;19318:32;336:42:2;19318:32:74;;;;;;;19372:68;770:40659;;19464:43;770:40659;19528:54;770:40659;;;19318:32;;;18761:368;770:40659;;19259:92;770:40659;2024:14:2;770:40659:74;;19259:92;;;2024:14:2;19259:92:74;;;2024:14:2;;770:40659:74;;2024:14:2;;;;;;;;;:::i;:::-;;;;;;;;;770:40659:74;;2024:14:2;;;;;;;;;:::i;19259:92:74:-;770:40659;;;;;;;;;;2024:14:2;770:40659:74;19372:68;;:::i;:::-;770:40659;;;;;19358:82;19464:43;:::i;:::-;770:40659;;;;;;;;2024:14:2;;;770:40659:74;;2024:14:2;;770:40659:74;;;19528:54;;;;;;2024:14:2;19528:54:74;;770:40659;19528:54;;2024:14:2;;;;;;770:40659:74;2024:14:2;;;770:40659:74;;;;2024:14:2;;;19528:54:74;;770:40659;;;19528:54;;;;;;;;770:40659;;19528:54;;;18761:368;770:40659;;19608:44;770:40659;;;;;;;2024:14:2;19624::74;;19608:44;:::i;:::-;770:40659;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;2763:4:48;19723:670:74;;18761:368;770:40659;;20423:80;20718:88;770:40659;;;;;20460:11;770:40659;;;;2763:4:48;770:40659:74;20423:80;;:::i;:::-;770:40659;;;;;20399:104;770:40659;;;;;2024:14:2;770:40659:74;20768:14;;770:40659;;20718:88;;;;;;2024:14:2;20718:88:74;;770:40659;20718:88;;;:::i;:::-;;;;;;;;;770:40659;;;;;;;;;;;;;20718:88;;18761:368;770:40659;20887:65;770:40659;20813:68;770:40659;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;20813:68;:::i;:::-;770:40659;;;;;;;;;;;;:::i;:::-;;;;;;;;;20887:65;:::i;:::-;770:40659;;2024:14:2;;770:40659:74;2024:14:2;;770:40659:74;;;21082:29;;;;2024:14:2;21082:29:74;;;;;;;;770:40659;;21082:29;;;18761:368;770:40659;;;;;21027:85;770:40659;21027:85;;;770:40659;;;;;;;;;;;;;;;2024:14:2;770:40659:74;;;2024:14:2;770:40659:74;21027:85;;;;;;:::i;:::-;770:40659;21017:96;;770:40659;;;;2024:14:2;770:40659:74;;;;;;;;;;20986:150;770:40659;;;;:::i;:::-;;;;;;;;;336:42:2;2228:29:4;;;;770:40659:74;;2228:29:4;2024:14:2;2228:29:4;;770:40659:74;;;2228:29:4;;770:40659:74;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2228:29:4;;336:42:2;2228:29:4;;;;;;;;18761:368:74;770:40659;;;;21376:62;770:40659;21226:67;21299:71;770:40659;;;;;2024:14:2;770:40659:74;;;;;;;:::i;:::-;;;;;;;;;21226:67;:::i;:::-;770:40659;2024:14:2;770:40659:74;;;;;;;;;;:::i;:::-;;;;;;;;;21299:71;:::i;:::-;770:40659;;;;;2024:14:2;770:40659:74;;;;;;;:::i;:::-;;;;;;;21376:62;:::i;2228:29:4:-;770:40659:74;;;;;2228:29:4;;;:::i;:::-;770:40659:74;;;;2228:29:4;;;;;770:40659:74;;2024:14:2;770:40659:74;;2024:14:2;;;;;21082:29:74;;;;;;;;;;;;;;;:::i;:::-;;;2763:4:48;;;;770:40659:74;2763:4:48;;21082:29:74;;;;;;;;770:40659;;2024:14:2;770:40659:74;;2024:14:2;;;;;20718:88:74;;;;;;;;770:40659;20718:88;;770:40659;20718:88;;;;;;770:40659;20718:88;;;:::i;:::-;;;770:40659;;;;;;;;;;;;;;;;;;;;;;;;;;;2763:4:48;20887:65:74;770:40659;;;;;;;2763:4:48;20718:88:74;;;;;;;;;;;;;-1:-1:-1;20718:88:74;;19723:670;770:40659;;;;;2024:14:2;770:40659:74;;;2763:4:48;19800:136:74;;19723:670;770:40659;;;;;;;19970:30;2024:14:2;19970:30:74;;770:40659;19970:30;;2024:14:2;770:40659:74;2763:4:48;;2024:14:2;770:40659:74;19970:30;770:40659;19970:30;336:42:2;19970:30:74;;;;;;770:40659;;;;;;;;;;19970:30;;19723:670;770:40659;;;;;;;;;;;;;;;;2321:4:48;770:40659:74;;;2763:4:48;770:40659:74;;;;20039:43;;;;;770:40659;;;;;;;;:::i;:::-;;;;;;;;;20039:43;;770:40659;20159:11;;2024:14:2;770:40659:74;;;;20147:24;2024:14:2;20147:24:74;;770:40659;20147:24;;770:40659;;;20147:24;770:40659;20147:24;336:42:2;20147:24:74;;;;;;;770:40659;;20147:24;;;20039:43;770:40659;;;;;2024:14:2;770:40659:74;;20208:19;2024:14:2;20208:19:74;;770:40659;20208:19;;2024:14:2;770:40659:74;;20208:19;770:40659;20208:19;336:42:2;20208:19:74;;;;;;;770:40659;;20208:19;;;20039:43;770:40659;;;;;2024:14:2;770:40659:74;;20254:19;2024:14:2;20254:19:74;;770:40659;20254:19;;2024:14:2;770:40659:74;;20254:19;770:40659;20254:19;336:42:2;20254:19:74;;;;;;;770:40659;;20254:19;;;20039:43;770:40659;;;;;;;;;;20300:19;2024:14:2;20300:19:74;;770:40659;20300:19;;2024:14:2;770:40659:74;;20300:19;770:40659;20300:19;336:42:2;20300:19:74;;;;;;;20718:88;770:40659;;20423:80;770:40659;2024:14:2;770:40659:74;;;;;;20119:210;770:40659;;;20300:19;;;20039:43;770:40659;;2024:14:2;770:40659:74;;;;;;;;;;;20119:210;;;;2024:14:2;;;:::i;:::-;;;;770:40659:74;;2024:14:2;;;;;;;;;:::i;:::-;;;;;;770:40659:74;;2024:14:2;;;;;;;;;:::i;:::-;;;;;;;;770:40659:74;;2024:14:2;;;;;;;;;:::i;20119:210:74:-;770:40659;;;;;;;;;;;19723:670;;;;;;;20300:19;2024:14:2;20300:19:74;;;;;;;770:40659;;;;20300:19;;;;;;:::i;:::-;;;;;;20254;;;;;770:40659;;;20254:19;;;;;;:::i;:::-;;;;20208;;;;;770:40659;;;20208:19;;;;;;:::i;:::-;;;;20147:24;;;;;;770:40659;;;20147:24;;;;;;:::i;:::-;;;;;20039:43;770:40659;;;;;;;;:::i;:::-;;;;2763:4:48;770:40659:74;;;2763:4:48;20039:43:74;;;19970:30;;;;;;;770:40659;19970:30;770:40659;19970:30;;;;;;;:::i;:::-;;;;19800:136;770:40659;;19856:70;;;770:40659;;;;;;;2024:14:2;770:40659:74;19856:70;;;;;;:::i;:::-;770:40659;19846:81;;19800:136;;19528:54;;;770:40659;19528:54;;770:40659;19528:54;;;;;;770:40659;19528:54;;;:::i;:::-;;;2024:14:2;;;;770:40659:74;2024:14:2;19608:44:74;2024:14:2;;:::i;:::-;19528:54:74;;;;;;;-1:-1:-1;19528:54:74;;19318:32;19259:92;19318:32;;;;770:40659;19318:32;;770:40659;;;19318:32;;;;;;:::i;:::-;;;;;;19287:24;;;;;770:40659;;;19287:24;;;;;;:::i;:::-;;;;19202:18;;770:40659;19202:18;;770:40659;19202:18;;;;;;770:40659;19202:18;;;:::i;:::-;;;2024:14:2;;;;;770:40659:74;2024:14:2;;:::i;:::-;19202:18:74;;;;;-1:-1:-1;19202:18:74;;18761:368;770:40659;;;;-1:-1:-1;;770:40659:74;;2933:19:15;;770:40659:74;;;;2933:19:15;:::i;:::-;770:40659:74;;9786:54:15;770:40659:74;;;;;;:::i;9786:54:15:-;770:40659:74;;;;;;;9371:159:15;679:42;9371:159;;;770:40659:74;;;;;;19075:46;770:40659;;;;;;19075:46;:::i;:::-;770:40659;;;;2321:4:48;18761:368:74;;770:40659;;;;;;;;;;;;;-1:-1:-1;;770:40659:74;2933:19:15;770:40659:74;;;;;2933:19:15;:::i;:::-;770:40659:74;;;;;;;;:::i;:::-;;;;;;;;;;;9786:54:15;;770:40659:74;;9786:54:15;;;;;;;770:40659:74;9786:54:15;;770:40659:74;;;;;;:::i;9786:54:15:-;770:40659:74;;;;;;;9371:159:15;679:42;9371:159;;;770:40659:74;;;;;;;;15099:52;770:40659;;;15099:52;:::i;:::-;15200:19;336:42:2;15200:19:74;;;;770:40659;;15200:19;2024:14:2;15200:19:74;;770:40659;15200:19;;2024:14:2;770:40659:74;;;;;;;336:42:2;15200:19:74;;;;;;;;770:40659;-1:-1:-1;15286:7:74;2024:14:2;770:40659:74;2024:14:2;;770:40659:74;;2024:14:2;15286:49:74;;770:40659;;;;;15286:49;;770:40659;;;;2024:14:2;;;;770:40659:74;;;;;;2024:14:2;;770:40659:74;;;;2024:14:2;;;;;770:40659:74;15286:49;;;;;;770:40659;;15286:49;;;770:40659;;;;;;15516:32;770:40659;;;:::i;:::-;2556:4:48;2321;;15469:14:74;770:40659;15469:14;;770:40659;15516:32;:::i;:::-;15695:16;336:42:2;15695:16:74;;;;770:40659;;2024:14:2;15695:16:74;;;770:40659;15695:16;;770:40659;;;;;;;;336:42:2;15695:16:74;;;;;;;;770:40659;15717:46;336:42:2;15717:46:74;;;;770:40659;;2024:14:2;15717:46:74;;770:40659;;304:1:98;770:40659:74;15717:46;;770:40659;;;2763:4:48;;;770:40659:74;;;-1:-1:-1;2763:4:48;;;770:40659:74;2763:4:48;;;770:40659:74;;;;2763:4:48;;;770:40659:74;;;2763:4:48;;;15717:46:74;770:40659;;;336:42:2;15717:46:74;;;;;;;;770:40659;-1:-1:-1;770:40659:74;;2024:14:2;;;770:40659:74;;;;;;;;;;;;;;;15774:59;;770:40659;;15774:59;15839:80;;;;;770:40659;;2024:14:2;15839:80:74;;770:40659;;;15839:80;;2024:14:2;;;-1:-1:-1;770:40659:74;;;;;;;;;;;;;;;;;;15839:80;770:40659;;;15839:80;;;;;;;;;770:40659;;;;2024:14:2;15997:47:74;;;770:40659;15997:47;;2024:14:2;15997:47:74;;770:40659;15997:47;;;;;;;;;770:40659;;16102:11;;770:40659;;;;15997:47;;16065:10;;;;:::i;16102:11::-;770:40659;;;;;;;;336:42:2;16196:24:74;;;;770:40659;;16196:24;2024:14:2;16196:24:74;;770:40659;16196:24;;2024:14:2;770:40659:74;;;;;;;336:42:2;16196:24:74;;;;;;;;770:40659;-1:-1:-1;770:40659:74;;2024:14:2;16280:55:74;;770:40659;16280:55;;2024:14:2;;;770:40659:74;;;;;;;;;;;;;;;;;;;16280:55;;;;;;;;770:40659;;16280:55;;;770:40659;-1:-1:-1;770:40659:74;;;;;;:::i;:::-;;;;;;;;;;;;;;336:42:2;3924:29:4;;;;770:40659:74;;;3924:29:4;2024:14:2;3924:29:4;;770:40659:74;;3924:29:4;;2024:14:2;;770:40659:74;;;2024:14:2;770:40659:74;;;;;-1:-1:-1;;770:40659:74;-1:-1:-1;;770:40659:74;;;;;;:::i;:::-;3924:29:4;;336:42:2;3924:29:4;;;;;;;;770:40659:74;16501:20;336:42:2;16501:20:74;;;;770:40659;;2024:14:2;16501:20:74;;;770:40659;16501:20;;2024:14:2;770:40659:74;;;;;;;336:42:2;16501:20:74;;;;;;;;770:40659;;;;16600:47;770:40659;16577:92;;;;770:40659;16577:92;;2024:14:2;770:40659:74;;;;2024:14:2;770:40659:74;16577:92;;;770:40659;16577:92;;:::i;:::-;336:42:2;16561:109:74;;;;770:40659;;16561:109;2024:14:2;16561:109:74;;770:40659;;16561:109;;770:40659;;;;;;;;;;;;:::i;:::-;16561:109;770:40659;;;336:42:2;16561:109:74;;;;;;;;770:40659;-1:-1:-1;770:40659:74;;2024:14:2;16676:55:74;;770:40659;16676:55;;2024:14:2;;;770:40659:74;;;;;;;;;;;;;;;;;;;16676:55;;;;;;;;;770:40659;;;;;;;;;;336:42:2;16807:24:74;;;;770:40659;;16807:24;2024:14:2;16807:24:74;;770:40659;16807:24;;2024:14:2;770:40659:74;;;;;;;336:42:2;16807:24:74;;;;;;;;770:40659;;;;16882:92;16600:47;770:40659;16882:92;;;770:40659;16882:92;;2024:14:2;770:40659:74;;;2024:14:2;770:40659:74;16882:92;;;770:40659;16882:92;;:::i;:::-;336:42:2;16866:109:74;;;;770:40659;;16866:109;2024:14:2;16866:109:74;;770:40659;;16866:109;;770:40659;;;;;;;;;;;;:::i;:::-;16866:109;770:40659;;;336:42:2;16866:109:74;;;;;;;;770:40659;-1:-1:-1;770:40659:74;;2024:14:2;16981:55:74;;770:40659;16981:55;;2024:14:2;;;;770:40659:74;;;;;;;;;;;;;;;;;;;;;;;16981:55;;;;;;;;;;770:40659;;;;16866:109;770:40659;;16866:109;;;:::i;:::-;770:40659;;;;16866:109;;;;770:40659;;2024:14:2;770:40659:74;;2024:14:2;;;;;16807:24:74;770:40659;;16807:24;;;:::i;:::-;770:40659;;;;16807:24;;;16676:55;;;770:40659;16676:55;770:40659;16676:55;;;;;;;:::i;:::-;;;16561:109;770:40659;;16561:109;;;:::i;:::-;770:40659;;;;16561:109;;;16501:20;770:40659;;16501:20;;;:::i;:::-;770:40659;;;;16501:20;;;3924:29:4;-1:-1:-1;;3924:29:4;;;:::i;:::-;770:40659:74;;;;3924:29:4;;;16280:55:74;;;;770:40659;16280:55;770:40659;16280:55;;;;;;;:::i;:::-;;;;16196:24;770:40659;;16196:24;;;:::i;:::-;770:40659;;;;16196:24;;;15997:47;16065:10;15997:47;;;;;;;;;;;;;;;:::i;15839:80::-;770:40659;;15839:80;;;:::i;:::-;770:40659;;;;15839:80;;;15717:46;770:40659;;15717:46;;;:::i;:::-;770:40659;;;;15717:46;;;15695:16;770:40659;;15695:16;;;:::i;:::-;770:40659;;;;15695:16;;;15286:49;;770:40659;15286:49;;770:40659;15286:49;;;;;;770:40659;15286:49;;;:::i;:::-;;;2024:14:2;;;;;770:40659:74;2024:14:2;;:::i;:::-;15286:49:74;;;;;-1:-1:-1;15286:49:74;;15200:19;770:40659;;15200:19;;;:::i;:::-;770:40659;;;;15200:19;;;770:40659;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;39319:17;;2024:14:2;770:40659:74;2024:14:2;;;770:40659:74;;;39285:52;336:42:2;39285:52:74;;;;770:40659;;39285:52;2024:14:2;39285:52:74;;39295:41;;;770:40659;39285:52;;770:40659;;;39285:52;770:40659;39285:52;336:42:2;39285:52:74;;;;;;;;770:40659;39363:14;;;;;:::i;:::-;770:40659;39416:16;;770:40659;;;;;;39410:41;39437:13;;;770:40659;;;;;39410:41;;:::i;:::-;770:40659;;;39478:9;;;770:40659;294:80:98;770:40659:74;;294:80:98;:::i;:::-;770:40659:74;;;;:::i;:::-;;;;;;39552:18;2024:14:2;39552:18:74;;770:40659;39552:18;;2024:14:2;770:40659:74;39552:18;770:40659;39552:18;336:42:2;39552:18:74;;;;;;770:40659;;39552:18;;;770:40659;;;;;2024:14:2;;;;770:40659:74;;39698:24;2024:14:2;39698:24:74;;770:40659;39698:24;;770:40659;;;39698:24;770:40659;39698:24;336:42:2;39698:24:74;;;;;;;770:40659;;39698:24;;;770:40659;;;;;;;;;39729:26;2024:14:2;39729:26:74;;770:40659;39729:26;;2024:14:2;770:40659:74;;39729:26;770:40659;39729:26;336:42:2;39729:26:74;;;;;;40056:54;770:40659;;;;39883:71;770:40659;39984:43;770:40659;;;39729:26;;;770:40659;;;;;;39779:68;770:40659;39666:90;304:1:98;770:40659:74;;2024:14:2;770:40659:74;;;;;;;39437:13;770:40659;2024:14:2;39666:90:74;;;;2024:14:2;:::i;:::-;;;;;;;;;770:40659:74;;2024:14:2;;;;;;;;;:::i;:::-;;;;;;;;;770:40659:74;;;2024:14:2;;;;;;;;;:::i;:::-;;;39666:90:74;;;;;;;;;:::i;:::-;770:40659;;2024:14:2;;770:40659:74;39779:68;;:::i;:::-;39765:11;;;;:82;;;770:40659;;39883:71;:::i;:::-;40015:11;;39984:43;:::i;:::-;39966:15;770:40659;39966:15;;770:40659;;40056:7;2024:14:2;;;770:40659:74;;2024:14:2;;770:40659:74;;;40056:54;;;;;;2024:14:2;40056:54:74;;770:40659;40056:54;;2024:14:2;;;;;;770:40659:74;2024:14:2;;;770:40659:74;;;;2024:14:2;;;40056:54:74;;770:40659;;;40056:54;;;;;;;;770:40659;;40056:54;;;770:40659;40034:11;770:40659;39437:13;40034:11;;770:40659;;2024:14:2;;40169:28:74;:14;;:28;;770:40659;304:1:98;770:40659:74;;;;;;;40155:54;;;:::i;:::-;770:40659;;;40276:3;40169:28;40239:14;;:28;;770:40659;;40235:39;;;;;40312:31;770:40659;40312:31;;304:1:98;40312:31:74;;:::i;:::-;2024:14:2;770:40659:74;40289:54;;;;:::i;:::-;2024:14:2;770:40659:74;40220:13;;40235:39;;;;;;40412:19;;;2024:14:2;770:40659:74;2024:14:2;;770:40659:74;40355:76;40169:28;40373:14;;:28;;770:40659;40355:76;;:::i;:::-;2024:14:2;40169:28:74;40475:14;;:28;;;;40509:48;;770:40659;40652:44;40668:14;;770:40659;2024:14:2;;770:40659:74;40652:44;;:::i;:::-;770:40659;;40633:64;2024:14:2;40633:64:74;;770:40659;40633:64;;2024:14:2;770:40659:74;2763:4:48;;2024:14:2;39437:13:74;40633:64;;;336:42:2;40633:64:74;;;;;;;770:40659;;;;;;;40633:64;;40215:135;2024:14:2;770:40659:74;2024:14:2;;770:40659:74;;;;40844:24;2024:14:2;40844:24:74;;770:40659;40844:24;;770:40659;;;40844:24;770:40659;40844:24;336:42:2;40844:24:74;;;;;;;770:40659;;40844:24;;;40215:135;770:40659;;;40880:14;2024::2;40880::74;;770:40659;40880:14;;2024::2;770:40659:74;;40880:14;770:40659;40880:14;336:42:2;40880:14:74;;;;;;;770:40659;;40880:14;;;40215:135;770:40659;;;40901:14;2024::2;40901::74;;770:40659;40901:14;;2024::2;770:40659:74;;40901:14;770:40659;40901:14;336:42:2;40901:14:74;;;;;;;770:40659;;40901:14;;;40215:135;770:40659;;;;40922:14;2024::2;40922::74;;770:40659;;40922:14;;2024::2;770:40659:74;;40922:14;770:40659;40922:14;336:42:2;40922:14:74;;;;;;;39478:9;770:40659;304:1:98;40827:110:74;770:40659;;;40728:256;770:40659;;;40922:14;;;770:40659;2763:4:48;770:40659:74;;;;;;2024:14:2;770:40659:74;;;40827:110;;;;;;2024:14:2;;;:::i;40827:110:74:-;770:40659;40954:14;;:24;2763:4:48;770:40659:74;40728:256;;:::i;:::-;40703:22;;:281;;;;41014:105;41080:14;;41014:105;770:40659;;41014:105;;;41037:41;770:40659;41014:105;;;770:40659;41014:105;;;:::i;:::-;336:42:2;40991:134:74;;;;770:40659;;40991:134;2024:14:2;40991:134:74;;770:40659;;40991:134;;770:40659;;;;;;;;;;;;:::i;:::-;40991:134;770:40659;;;336:42:2;40991:134:74;;;;;;;;40215:135;41174:14;770:40659;41174:14;40169:28;41174:14;;:28;:48;2024:14:2;770:40659:74;336:42:2;41265:29:74;;;;770:40659;;41265:29;2024:14:2;41265:29:74;;770:40659;41265:29;;770:40659;;;;;;;;336:42:2;41265:29:74;;;;;;;;40215:135;2024:14:2;;41300:87:74;2024:14:2;770:40659:74;;2024:14:2;;770:40659:74;41348:14;;41364:22;;770:40659;;;41300:87;;;;;;2024:14:2;41300:87:74;;770:40659;41300:87;;;:::i;:::-;;;;;;;;;;;770:40659;;;;41300:87;;;770:40659;41300:87;770:40659;41300:87;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;41265:29;770:40659;;;;;41265:29;;;:::i;:::-;770:40659;;;;41265:29;;;;40991:134;770:40659;;40991:134;;;:::i;:::-;770:40659;;;;40991:134;;;40901:14;;;;;770:40659;;;40901:14;;;;;;:::i;:::-;;;;40880;;;;;;770:40659;;;40880:14;;;;;;:::i;:::-;;;;;40844:24;;;;;;770:40659;;;40844:24;;;;;;:::i;:::-;;;;;40633:64;;;;;;;;39437:13;40633:64;39437:13;40633:64;;;;;;;:::i;:::-;;;;;;40056:54;;;;770:40659;40056:54;;770:40659;40056:54;;;;;;770:40659;40056:54;;;:::i;:::-;;;2024:14:2;;;;;;;:::i;:::-;40056:54:74;;;;;;;-1:-1:-1;40056:54:74;;39729:26;;;;;;770:40659;;39779:68;39729:26;39666:90;304:1:98;39729:26:74;;;;770:40659;;;39729:26;;;;;;:::i;:::-;;;;;;;;;;;;;39698:24;770:40659;39698:24;;;;;;770:40659;;;39698:24;;;;;;:::i;:::-;;;;;39552:18;;770:40659;39552:18;;770:40659;39552:18;;;;;;770:40659;39552:18;;;:::i;:::-;;;2024:14:2;;;;;770:40659:74;2024:14:2;;:::i;:::-;39552:18:74;;;;;-1:-1:-1;39552:18:74;;39285:52;770:40659;;39285:52;;;:::i;:::-;770:40659;;;;39285:52;;;770:40659;;;;;;;;;;;;;;;;3501:18:9;770:40659:74;;;;;;;3501:18:9;770:40659:74;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3794:16:9;770:40659:74;;;;;;;3794:16:9;770:40659:74;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;903:81;770:40659;;;;;;;;;;;;;;;;;;;;;;3948:19:9;770:40659:74;2321:4:48;;;:::i;:::-;770:40659:74;;;;;;;:::i;:::-;2321:4:48;;;770:40659:74;;;;;3948:19:9;770:40659:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;2024:14:2;;770:40659:74;;;;;2321:4:48;770:40659:74;2321:4:48;:::i;:::-;770:40659:74;;;;;;;:::i;:::-;2321:4:48;;;770:40659:74;;;-1:-1:-1;;;770:40659:74;;-1:-1:-1;;770:40659:74;-1:-1:-1;;;770:40659:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;294:80:98;770:40659:74;;;;;294:80:98;:::i;:::-;770:40659:74;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9192:18;2024:14:2;9192:18:74;;770:40659;9192:18;;2024:14:2;770:40659:74;9192:18;770:40659;9192:18;336:42:2;9192:18:74;;;;;;770:40659;;9192:18;;;770:40659;;;;;2024:14:2;;;;770:40659:74;;9296:24;2024:14:2;9296:24:74;;770:40659;9296:24;;770:40659;;;9296:24;770:40659;9296:24;336:42:2;9296:24:74;;;;;;;770:40659;;9296:24;;;770:40659;;;;9268:59;;;770:40659;2024:14:2;9268:59:74;770:40659;9268:59;;2024:14:2;;;;;770:40659:74;;2024:14:2;;770:40659:74;2024:14:2;;;;;;:::i;:::-;;;770:40659:74;2024:14:2;;;770:40659:74;9268:59;;;;;;;;;;:::i;:::-;9249:79;770:40659;;2024:14:2;4632:24:97;;770:40659:74;;4632:24:97;;770:40659:74;-1:-1:-1;770:40659:74;;;;336:42:2;4632:24:97;;;;;;;770:40659:74;;4632:24:97;;;770:40659:74;;;;4690:25:97;2024:14:2;4690:25:97;;770:40659:74;;;4690:25:97;;2024:14:2;770:40659:74;;4690:25:97;770:40659:74;4690:25:97;336:42:2;4690:25:97;;;;;;;770:40659:74;;;;4690:25:97;;;770:40659:74;;;;;;;;;2024:14:2;770:40659:74;;;;;;;;;;;2024:14:2;770:40659:74;;;;;;;;2024:14:2;;;:::i;:::-;;;770:40659:74;2024:14:2;;;770:40659:74;2024:14:2;770:40659:74;;;;;;;;2024:14:2;;;:::i;:::-;;;;770:40659:74;2024:14:2;;;770:40659:74;;;;;;;2024:14:2;;:::i;770:40659:74:-;;4828:11:97;336:42:2;4828:11:97;:::i;:::-;770:40659:74;;4820:42:97;;;;;2024:14:2;4820:42:97;;770:40659:74;;4820:42:97;;770:40659:74;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4820:42:97;770:40659:74;;;336:42:2;4820::97;;;;;;;9420:45:74;770:40659;;9525:56;770:40659;;;4820:42:97;;;770:40659:74;4868:26:97;9334:60:74;;;9420:45;:::i;:::-;770:40659;;;;9525:7;2024:14:2;;;770:40659:74;;2024:14:2;;770:40659:74;;;9525:56;;;;;;2024:14:2;9525:56:74;;770:40659;9525:56;;2024:14:2;;;;;;770:40659:74;2024:14:2;;;770:40659:74;;;;2024:14:2;;;9525:56:74;;770:40659;;;9525:56;;;;;;;770:40659;;9525:56;;;770:40659;;;;;2024:14:2;;770:40659:74;2024:14:2;;770:40659:74;;;;9680:24;2024:14:2;9680:24:74;;770:40659;9680:24;;770:40659;;;9680:24;770:40659;9680:24;336:42:2;9680:24:74;;;;;;;770:40659;;9680:24;;;770:40659;;;;9652:59;;;770:40659;2024:14:2;9652:59:74;770:40659;9652:59;;2024:14:2;;;;;770:40659:74;;2024:14:2;;770:40659:74;2024:14:2;;;;;;:::i;9652:59:74:-;9631:81;770:40659;;2024:14:2;4632:24:97;;770:40659:74;;4632:24:97;;770:40659:74;-1:-1:-1;;770:40659:74;;;336:42:2;4632:24:97;;;;;;;-1:-1:-1;;4632:24:97;;;770:40659:74;;;;4690:25:97;2024:14:2;4690:25:97;;770:40659:74;;4690:25:97;;2024:14:2;-1:-1:-1;;4690:25:97;770:40659:74;4690:25:97;336:42:2;4690:25:97;;;;;;;770:40659:74;-1:-1:-1;;;4690:25:97;;;770:40659:74;;;;;;;;2024:14:2;770:40659:74;;;;;;;;;;;2024:14:2;770:40659:74;;;;;;;;2024:14:2;;;:::i;770:40659:74:-;4820:42:97;-1:-1:-1;;;336:42:2;4820::97;;;;;;9810:47:74;-1:-1:-1;;;4820:42:97;;;770:40659:74;4868:26:97;;;9718:64:74;9810:47;:::i;:::-;770:40659;;;;:::i;:::-;;;;2321:4:48;;10111:326:74;10084:21;;:::i;:::-;770:40659;10056:25;;:49;;;770:40659;;;;2024:14:2;;;770:40659:74;;10217:78;10240:33;770:40659;10217:78;;;770:40659;10217:78;;2024:14:2;770:40659:74;10217:78;;;770:40659;10217:78;;:::i;:::-;770:40659;;;;;;:::i;:::-;2024:14:2;;770:40659:74;;;10142:295;;770:40659;;10142:295;;770:40659;10313:6;770:40659;10142:295;;770:40659;;;;10142:295;;2763:4:48;770:40659:74;;;10142:295;;2763:4:48;770:40659:74;;10142:295;;770:40659;10111:25;:326;;;;:::i;:::-;;770:40659;10549:49;770:40659;;;;10549:49;;:::i;:::-;770:40659;;10530:69;2024:14:2;10530:69:74;;770:40659;10530:69;;2024:14:2;770:40659:74;2763:4:48;;2024:14:2;770:40659:74;10530:69;770:40659;10530:69;336:42:2;10530:69:74;;;;;;;770:40659;;;;;;;;10530:69;;;770:40659;10684:13;770:40659;10684:13;;2024:14:2;;770:40659:74;;;;10738:24;2024:14:2;10738:24:74;;770:40659;10738:24;;770:40659;;;10738:24;770:40659;10738:24;336:42:2;10738:24:74;;;;;;;770:40659;;10738:24;;;770:40659;;;;10774:14;2024::2;10774::74;;770:40659;10774:14;;2024::2;770:40659:74;;10774:14;770:40659;10774:14;336:42:2;10774:14:74;;;;;;;770:40659;;10774:14;;;770:40659;;;;10795:14;2024::2;10795::74;;770:40659;10795:14;;2024::2;770:40659:74;;10795:14;770:40659;10795:14;336:42:2;10795:14:74;;;;;;;770:40659;;10795:14;;;770:40659;;;;;10816:14;2024::2;10816::74;;770:40659;;10816:14;;2024::2;770:40659:74;;10816:14;770:40659;10816:14;336:42:2;10816:14:74;;;;;;;10933:54;770:40659;;10721:110;770:40659;;;10634:223;770:40659;;;10816:14;;;770:40659;;2763:4:48;770:40659:74;;;;;;2024:14:2;770:40659:74;;;10721:110;;;;;;2024:14:2;;;:::i;:::-;;;2763:4:48;2024:14:2;;;2763:4:48;2024:14:2;770:40659:74;;2763:4:48;;;;;;2024:14:2;;;:::i;:::-;;;;;;;;;770:40659:74;;2024:14:2;;770:40659:74;2024:14:2;;;;;;:::i;:::-;;;;;;;;;770:40659:74;;2024:14:2;;770:40659:74;;2024:14:2;;;;;:::i;10721:110:74:-;10634:223;:::i;:::-;10605:252;;10933:54;:::i;:::-;10900:87;;770:40659;;;;336:42:2;10993:51:74;;;;770:40659;;2024:14:2;10993:51:74;;770:40659;;304:1:98;770:40659:74;10993:51;;770:40659;;;2763:4:48;;;770:40659:74;;;-1:-1:-1;2763:4:48;;;770:40659:74;2763:4:48;;;770:40659:74;;;;;2763:4:48;;;770:40659:74;;;;2763:4:48;;;10993:51:74;770:40659;;;336:42:2;10993:51:74;;;;;;;;770:40659;2024:14:2;770:40659:74;11055:37;2024:14:2;;770:40659:74;;2024:14:2;;;11055:37:74;770:40659;;;;11132:30;;11164:26;;11098:93;;;;;;770:40659;;;11098:93;;;;;2024:14:2;11098:93:74;;770:40659;;11098:93;770:40659;11098:93;;;:::i;:::-;;770:40659;;;11098:93;;;;;;;;;770:40659;;;;;;;;;;11260:45;;;;2024:14:2;11260:45:74;;;;;;;;770:40659;;11260:45;;;770:40659;;2024:14:2;;770:40659:74;;2024:14:2;;770:40659:74;;;11307:37;;;;2024:14:2;11307:37:74;;;;;;;;;770:40659;;11307:37;;;770:40659;11307:37;;;;:::i;:::-;336:42:2;11401:31:74;;;;770:40659;;2024:14:2;11401:31:74;;11417:4;770:40659;11401:31;;770:40659;11424:7;770:40659;;;2024:14:2;770:40659:74;;;;;;336:42:2;11401:31:74;;;;;;;;770:40659;;;;;;;;;;11424:7;770:40659;;;;;;11438:29;;;;770:40659;11522:47;770:40659;;;11531:28;11522:47;:::i;11401:31::-;770:40659;;11401:31;;;:::i;:::-;770:40659;;;;11401:31;;;11307:37;;;770:40659;11307:37;;770:40659;11307:37;;;;;;770:40659;11307:37;;;:::i;:::-;;;2024:14:2;;;;;11307:37:74;2024:14:2;;:::i;:::-;11307:37:74;;;;;;-1:-1:-1;11307:37:74;;11260:45;;770:40659;11260:45;;770:40659;11260:45;;;;;;770:40659;11260:45;;;:::i;:::-;;;2024:14:2;;;;;770:40659:74;2024:14:2;;:::i;:::-;11260:45:74;;;;;-1:-1:-1;11260:45:74;;11098:93;770:40659;;11098:93;;;:::i;:::-;770:40659;;;;11098:93;;;10993:51;770:40659;;10993:51;;;:::i;:::-;770:40659;;;;10993:51;;;10816:14;2763:4:48;10816:14:74;;;;;;770:40659;;;10816:14;;;;;;:::i;:::-;;;;;10795;;;;;770:40659;;;10795:14;;;;;;:::i;:::-;;;;10774;;;;;;770:40659;;;10774:14;;;;;;:::i;:::-;;;;;10738:24;;;;;;770:40659;;;10738:24;;;;;;:::i;:::-;;;;;10530:69;;;;770:40659;10530:69;;;;;;770:40659;10530:69;770:40659;10530:69;;;;;;;:::i;:::-;;;;;;;;;;4820:42:97;;;;;-1:-1:-1;;;4820:42:97;;;;;;:::i;:::-;;;;4690:25;770:40659:74;4690:25:97;;;;770:40659:74;;4690:25:97;;770:40659:74;4690:25:97;;-1:-1:-1;;;4690:25:97;;;;;;:::i;:::-;;;;;;;;;;4632:24;;;;;-1:-1:-1;;;4632:24:97;;;;;;:::i;:::-;;;;9680::74;;;;;;770:40659;;;9680:24;;;;;;:::i;:::-;;;;;9525:56;;770:40659;9525:56;;770:40659;9525:56;;;;;;770:40659;9525:56;;;:::i;:::-;;;2024:14:2;;;;;770:40659:74;2024:14:2;;:::i;:::-;9525:56:74;;;;;-1:-1:-1;9525:56:74;;4820:42:97;;;;;770:40659:74;;;4820:42:97;;;;;;:::i;:::-;;;;4632:24;;;;;770:40659:74;;;4632:24:97;;;;;;:::i;:::-;;;;9296::74;;;;;;770:40659;;;9296:24;;;;;;:::i;:::-;;;;;9192:18;;770:40659;9192:18;;770:40659;9192:18;;;;;;770:40659;9192:18;;;:::i;:::-;;;2024:14:2;;;;;770:40659:74;2024:14:2;;:::i;:::-;9192:18:74;;;;;-1:-1:-1;9192:18:74;;770:40659;;;;;;;;;;;;;;;;3018:16:9;770:40659:74;;;;;;;3018:16:9;770:40659:74;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17340:7;2024:14:2;770:40659:74;2024:14:2;;770:40659:74;;2024:14:2;17340:49:74;;770:40659;;;;;17340:49;;770:40659;;;;2024:14:2;;;;770:40659:74;;2024:14:2;;;770:40659:74;;;;2024:14:2;;770:40659:74;;;;2024:14:2;;;;;770:40659:74;17340:49;;;;;;;770:40659;;17340:49;;;770:40659;;;;;;;;336:42:2;17447:28:74;;;;770:40659;;2024:14:2;17447:28:74;;17457:17;;;;770:40659;17447:28;;770:40659;;;17447:28;770:40659;17447:28;336:42:2;17447:28:74;;;;;;;;770:40659;17537:17;336:42:2;17537:17:74;;;;770:40659;;2024:14:2;17537:17:74;;;770:40659;17537:17;;770:40659;;;;;;;;336:42:2;17537:17:74;;;;;;;;770:40659;;;;17576:59;17599:26;770:40659;17576:59;;;770:40659;17576:59;;770:40659;;17576:59;;;770:40659;17576:59;;:::i;:::-;336:42:2;17560:76:74;;;;770:40659;;17560:76;2024:14:2;17560:76:74;;770:40659;;17560:76;;770:40659;;;;;;;;;;;;:::i;:::-;17560:76;770:40659;;;336:42:2;17560:76:74;;;;;;;;770:40659;17642:71;;;;;;770:40659;;2024:14:2;17642:71:74;;770:40659;;;17642:71;;2024:14:2;;;770:40659:74;;;;;;;;;;;;;;;;;;;;;17642:71;770:40659;;;17642:71;;;;;;;;;770:40659;;;;;;;17827:46;;;;2024:14:2;17827:46:74;;770:40659;17827:46;;2024:14:2;17827:46:74;;;;;;;770:40659;;;;;17827:46;;;770:40659;-1:-1:-1;770:40659:74;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;336:42:2;3668:29:4;;;;770:40659:74;;;3668:29:4;2024:14:2;3668:29:4;;770:40659:74;;3668:29:4;;770:40659:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3668:29:4;;336:42:2;3668:29:4;;;;;;;;770:40659:74;-1:-1:-1;770:40659:74;;;;;;;:::i;:::-;;;;;;;;;;;;;;336:42:2;2484:29:4;;;;770:40659:74;;2484:29:4;2024:14:2;2484:29:4;;770:40659:74;2484:29:4;;2024:14:2;770:40659:74;;;;;2024:14:2;770:40659:74;;;;;;;;;;;;;;;:::i;:::-;2484:29:4;;336:42:2;2484:29:4;;;;;;;;770:40659:74;;;;3668:29:4;770:40659:74;;3668:29:4;;;:::i;:::-;770:40659:74;;;;3668:29:4;;;17827:46:74;;;;;;770:40659;17827:46;770:40659;17827:46;;;;;;;:::i;:::-;;;;;17642:71;770:40659;;17642:71;;;:::i;:::-;770:40659;;;;17642:71;;;17560:76;770:40659;;17560:76;;;:::i;:::-;770:40659;;;;17560:76;;;17537:17;770:40659;;17537:17;;;:::i;:::-;770:40659;;;;17537:17;;;17447:28;770:40659;;17447:28;;;:::i;:::-;770:40659;;;;17447:28;;;17340:49;;;770:40659;17340:49;;770:40659;17340:49;;;;;;770:40659;17340:49;;;:::i;:::-;;;2024:14:2;;;;770:40659:74;2024:14:2;;;;:::i;:::-;17340:49:74;;;;;;;-1:-1:-1;17340:49:74;;770:40659;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;24266:29;770:40659;;:::i;:::-;;;;;:::i;:::-;;;;;;;24266:29;:::i;:::-;770:40659;;294:80:98;770:40659:74;;294:80:98;:::i;:::-;770:40659:74;;;24344:12;2024:14:2;24344:12:74;;;770:40659;24344:12;;2024:14:2;770:40659:74;24344:12;770:40659;24344:12;336:42:2;24344:12:74;;;;;;;770:40659;;24344:12;;;770:40659;;;;;24466:19;2024:14:2;24466:19:74;;770:40659;24466:19;;770:40659;24466:19;;770:40659;;;24466:19;770:40659;24466:19;336:42:2;24466:19:74;;;;;;;770:40659;;24466:19;;;770:40659;;;;24492:20;2024:14:2;24492:20:74;;770:40659;24492:20;;2024:14:2;770:40659:74;;24492:20;770:40659;24492:20;336:42:2;24492:20:74;;;;;;;24434:79;770:40659;;;2024:14:2;770:40659:74;;24531:56;770:40659;;;24492:20;;;770:40659;;;;;;;;2024:14:2;24434:79:74;;;;2024:14:2;:::i;24531:56:74:-;24736:49;770:40659;24621:38;;;:::i;:::-;770:40659;24736:7;2024:14:2;;;770:40659:74;;2024:14:2;;770:40659:74;;;24736:49;;;;;;2024:14:2;24736:49:74;;770:40659;24736:49;;2024:14:2;;;;;;770:40659:74;2024:14:2;;;770:40659:74;;;;2024:14:2;;;24736:49:74;;770:40659;;;24736:49;;;;;;;770:40659;;24736:49;;;770:40659;;;;;;;;:::i;:::-;;;;2321:4:48;;25000:312:74;24973:21;;:::i;:::-;770:40659;24945:25;;:49;;;770:40659;;25101:69;25124:33;770:40659;25101:69;;;770:40659;;;25101:69;;2024:14:2;770:40659:74;25101:69;;;770:40659;25101:69;;:::i;:::-;770:40659;;;;;;:::i;:::-;2024:14:2;;;770:40659:74;;;25031:281;;770:40659;;25031:281;;770:40659;25188:6;770:40659;25031:281;;770:40659;;;;25031:281;;2763:4:48;770:40659:74;;;25031:281;;2763:4:48;770:40659:74;25031:281;;;770:40659;25000:25;:312;;;;:::i;:::-;;770:40659;;;;;25318:29;;2763:4:48;25440:44:74;;;;:::i;:::-;770:40659;;25427:58;2024:14:2;25427:58:74;;770:40659;25427:58;;2024:14:2;770:40659:74;2763:4:48;;2024:14:2;770:40659:74;25427:58;770:40659;25427:58;336:42:2;25427:58:74;;;;;;;770:40659;;;;;;;25427:58;;770:40659;;;;25642:19;2024:14:2;25642:19:74;;770:40659;25642:19;;770:40659;;;25642:19;770:40659;25642:19;336:42:2;25642:19:74;;;;;;;770:40659;;25642:19;;;770:40659;;;;25673:14;2024::2;25673::74;;770:40659;25673:14;;2024::2;770:40659:74;;25673:14;770:40659;25673:14;336:42:2;25673:14:74;;;;;;;770:40659;;25673:14;;;770:40659;;;;25694:14;2024::2;25694::74;;770:40659;25694:14;;2024::2;770:40659:74;;25694:14;770:40659;25694:14;336:42:2;25694:14:74;;;;;;;770:40659;;25694:14;;;770:40659;;;;;25715:14;2024::2;25715::74;;770:40659;;25715:14;;2024::2;770:40659:74;;25715:14;770:40659;25715:14;336:42:2;25715:14:74;;;;;;;770:40659;25625:105;770:40659;;;25554:202;770:40659;;;25715:14;;;770:40659;2763:4:48;770:40659:74;;;;;;2024:14:2;770:40659:74;;;25625:105;;;;;;2024:14:2;;;:::i;25554:202:74:-;25824:54;;;:::i;:::-;770:40659;26055:84;770:40659;;25912:59;25935:35;770:40659;25912:59;;;770:40659;25912:59;;;770:40659;25912:59;;:::i;:::-;26055:84;770:40659;;26055:84;;;26078:23;770:40659;26055:84;;;770:40659;26055:84;;;:::i;:::-;336:42:2;26039:101:74;;;;770:40659;;26039:101;2024:14:2;26039:101:74;;770:40659;;26039:101;;770:40659;;;;;;;;;;;;:::i;:::-;26039:101;770:40659;;;336:42:2;26039:101:74;;;;;;;;770:40659;26146:78;;;;;;;770:40659;;;26146:78;;;;;2024:14:2;26146:78:74;;770:40659;;26146:78;770:40659;26146:78;;;:::i;:::-;;770:40659;;;26146:78;;;;;;;;;770:40659;;;;26039:101;770:40659;;26039:101;;;:::i;:::-;770:40659;;;;26039:101;;;25694:14;;;;;770:40659;;;25694:14;;;;;;:::i;:::-;;;;25673;;;;;;770:40659;;;25673:14;;;;;;:::i;:::-;;;;;25642:19;;;;;;770:40659;;;25642:19;;;;;;:::i;:::-;;;;;25427:58;;;;;;;;;770:40659;25427:58;770:40659;25427:58;;;;;;;:::i;:::-;;;;;;;;;24736:49;;770:40659;24736:49;;770:40659;24736:49;;;;;;770:40659;24736:49;;;:::i;:::-;;;2024:14:2;;;;;770:40659:74;2024:14:2;;:::i;:::-;24736:49:74;;;;;-1:-1:-1;24736:49:74;;24492:20;;;;;770:40659;;;24492:20;;;;;;:::i;:::-;;;;24466:19;;;;;770:40659;;;24466:19;;;;;;:::i;:::-;;;;24344:12;;;;770:40659;24344:12;;770:40659;24344:12;;;;;;770:40659;24344:12;;;:::i;:::-;;;2024:14:2;;;;;;;:::i;:::-;24344:12:74;;;;;;;-1:-1:-1;24344:12:74;;770:40659;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;294:80:98;;;:::i;:::-;770:40659:74;;;;294:80:98;;;:::i;:::-;770:40659:74;;;;;;;;4824:41;;770:40659;;;;;4824:41;:::i;:::-;770:40659;;;;;;;;;4902:49;;770:40659;;;;;4902:49;:::i;:::-;770:40659;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;5017:18;2024:14:2;5017:18:74;;770:40659;5017:18;;2024:14:2;770:40659:74;5017:18;770:40659;5017:18;336:42:2;5017:18:74;;;;;;770:40659;;5017:18;;;770:40659;;;;;2024:14:2;;;770:40659:74;;5118:26;2024:14:2;5118:26:74;;770:40659;5118:26;;770:40659;;;5118:26;770:40659;5118:26;336:42:2;5118:26:74;;;;;;;770:40659;;5118:26;;;770:40659;;;;;;;;;;;5151:26;2024:14:2;5151:26:74;;770:40659;5151:26;;2024:14:2;770:40659:74;;5151:26;770:40659;5151:26;336:42:2;5151:26:74;;;;;;;5203:68;770:40659;5086:92;770:40659;;;2024:14:2;5426:56:74;770:40659;5304:45;770:40659;;;5151:26;;;770:40659;;;;;;;;2024:14:2;5086:92:74;;;;2024:14:2;:::i;5086:92:74:-;770:40659;;;;;;;;2024:14:2;770:40659:74;5203:68;;:::i;:::-;770:40659;;;;5187:84;5304:45;:::i;:::-;770:40659;;;;;;;2024:14:2;;;770:40659:74;;2024:14:2;;770:40659:74;;;5426:56;;;;;;2024:14:2;5426:56:74;;770:40659;5426:56;;2024:14:2;;;;;;770:40659:74;2024:14:2;;;770:40659:74;;;;2024:14:2;;;5426:56:74;;770:40659;;;5426:56;;;;;;;;770:40659;;5426:56;;;770:40659;;;;;;;;5508:22;2024:14:2;5508:22:74;;770:40659;5508:22;;2024:14:2;770:40659:74;5508:22;770:40659;5508:22;336:42:2;5508:22:74;;;;;;770:40659;;5508:22;;;770:40659;;;;;;;;;2024:14:2;770:40659:74;;5613:28;2024:14:2;5613:28:74;;770:40659;5613:28;;770:40659;;;5613:28;770:40659;5613:28;336:42:2;5613:28:74;;;;;;;770:40659;;5613:28;;;770:40659;;;;;;;;;;;5648:30;2024:14:2;5648:30:74;;770:40659;5648:30;;2024:14:2;770:40659:74;;5648:30;770:40659;5648:30;336:42:2;5648:30:74;;;;;;;5581:98;770:40659;;;2024:14:2;5706:76:74;770:40659;5817:47;770:40659;;;5648:30;;;770:40659;;;;;;;;2024:14:2;5581:98:74;;;;2024:14:2;:::i;5581:98:74:-;770:40659;;;2024:14:2;770:40659:74;;;;;5706:76;:::i;5817:47::-;770:40659;;;;;;;;;5918:24;2321:4:48;6014:21:74;;:::i;:::-;770:40659;;;;5981:24;:30;:54;6041:326;770:40659;;;2024:14:2;770:40659:74;;6147:78;6170:33;770:40659;6147:78;;;770:40659;6147:78;;2024:14:2;770:40659:74;6147:78;;;770:40659;6147:78;;:::i;:::-;770:40659;;;;;;:::i;:::-;;;;2024:14:2;;770:40659:74;;;6077:290;;770:40659;;6077:290;;770:40659;6243:6;770:40659;6077:290;;770:40659;;;;6077:290;;2763:4:48;770:40659:74;;;6077:290;;2763:4:48;770:40659:74;;6077:290;;770:40659;;;;;6041:24;:30;;:326;;;;:::i;:::-;;770:40659;;;2763:4:48;770:40659:74;;;;;;6373:24;:34;2763:4:48;770:40659:74;;;;6522:49;770:40659;;;;;;6538:24;6522:49;:::i;:::-;770:40659;;6503:69;2024:14:2;6503:69:74;;770:40659;6503:69;;2024:14:2;770:40659:74;2763:4:48;;2024:14:2;770:40659:74;6503:69;770:40659;6503:69;336:42:2;6503:69:74;;;;;;770:40659;;;;;;;;6503:69;;770:40659;;;;;6691:13;2024:14:2;770:40659:74;2024:14:2;;770:40659:74;;;;6762:26;2024:14:2;6762:26:74;;770:40659;6762:26;;770:40659;;;6762:26;770:40659;6762:26;336:42:2;6762:26:74;;;;;;;770:40659;;6762:26;;;770:40659;;;;6800:14;2024::2;6800::74;;770:40659;6800:14;;2024::2;770:40659:74;;6800:14;770:40659;6800:14;336:42:2;6800:14:74;;;;;;;770:40659;;6800:14;;;770:40659;;;;6821:14;2024::2;6821::74;;770:40659;6821:14;;2024::2;770:40659:74;;6821:14;770:40659;6821:14;336:42:2;6821:14:74;;;;;;;770:40659;;6821:14;;;770:40659;;;;;6842:14;2024::2;6842::74;;770:40659;;6842:14;;2024::2;770:40659:74;;6842:14;770:40659;6842:14;336:42:2;6842:14:74;;;;;;;770:40659;6732:136;770:40659;;;6637:276;770:40659;;;6842:14;;;770:40659;2763:4:48;770:40659:74;;;;;;2024:14:2;770:40659:74;;;6732:136;;;;;;2024:14:2;;;:::i;6732:136:74:-;770:40659;2763:4:48;770:40659:74;;6637:276;:::i;:::-;770:40659;;;6608:305;6979:59;770:40659;;;7013:24;6979:59;:::i;:::-;770:40659;;;6946:92;336:42:2;7073:46:74;;;;770:40659;;2024:14:2;7073:46:74;;770:40659;;304:1:98;770:40659:74;7073:46;;770:40659;;;2763:4:48;;;770:40659:74;;;-1:-1:-1;2763:4:48;;;770:40659:74;2763:4:48;;;770:40659:74;;;;2763:4:48;;;770:40659:74;;;2763:4:48;;;7073:46:74;770:40659;;;336:42:2;7073:46:74;;;;;;;;770:40659;;7130:37;770:40659;;;;2024:14:2;770:40659:74;;2024:14:2;;;7130:37:74;770:40659;;;7202:30;770:40659;;;7234:26;770:40659;;;;7173:88;;;;;770:40659;;;7173:88;;;;2024:14:2;7173:88:74;;770:40659;;7173:88;770:40659;7173:88;;;:::i;:::-;;770:40659;;;;;;7173:88;;;;;;;;770:40659;;;;2024:14:2;7363:40:74;;770:40659;;;;;;;7363:40;;;;;;770:40659;;7363:40;;;770:40659;;2024:14:2;;770:40659:74;;2024:14:2;;770:40659:74;;;7405:37;;;;2024:14:2;7405:37:74;;;;;;;;;770:40659;;7405:37;;;770:40659;7405:37;;;;:::i;:::-;770:40659;;2024:14:2;7458:32:74;;770:40659;;;;;;;7458:32;;;;;;770:40659;;7458:32;;;770:40659;7492:19;770:40659;;;;;2024:14:2;7492:19:74;;:::i;:::-;770:40659;;;7559:27;;2556:4:48;2321;;770:40659:74;2024:14:2;7619:27:74;;770:40659;7619:34;770:40659;;;7783:27;;7767:52;;770:40659;;;;7767:52;:::i;:::-;770:40659;;7744:76;2024:14:2;7744:76:74;;770:40659;7744:76;;2024:14:2;770:40659:74;2763:4:48;;2024:14:2;770:40659:74;7744:76;770:40659;7744:76;336:42:2;7744:76:74;;;;;;;770:40659;;;;;;;;7744:76;;770:40659;;;;;7915:15;770:40659;;;;;2024:14:2;770:40659:74;;;;7988:28;2024:14:2;7988:28:74;;770:40659;7988:28;;770:40659;;;7988:28;770:40659;7988:28;336:42:2;7988:28:74;;;;;;;770:40659;;7988:28;;;770:40659;;;;8028:14;2024::2;8028::74;;770:40659;8028:14;;2024::2;770:40659:74;;8028:14;770:40659;8028:14;336:42:2;8028:14:74;;;;;;;770:40659;;8028:14;;;770:40659;;;;8049:14;2024::2;8049::74;;770:40659;8049:14;;2024::2;770:40659:74;;8049:14;770:40659;8049:14;336:42:2;8049:14:74;;;;;;;770:40659;;8049:14;;;770:40659;;;;;8070:14;2024::2;8070::74;;770:40659;;8070:14;;2024::2;770:40659:74;;8070:14;770:40659;8070:14;336:42:2;8070:14:74;;;;;;;7958:138;770:40659;;;;8157:83;770:40659;;;7861:267;770:40659;;;8070:14;;;770:40659;2763:4:48;770:40659:74;;;;;;2024:14:2;770:40659:74;;;7958:138;;;;;;2024:14:2;;;:::i;7861:267:74:-;770:40659;;;;7829:299;770:40659;;;2024:14:2;770:40659:74;;;8157:83;;;;;;2024:14:2;8157:83:74;;770:40659;8157:83;;;:::i;:::-;;770:40659;;8157:83;;;;;;;8246:36;770:40659;;;;;8157:83;;;770:40659;;8246:36;:::i;8049:14::-;;;;;;770:40659;;;8049:14;;;;;;:::i;:::-;;;;;8028;;;;;770:40659;;;8028:14;;;;;;:::i;:::-;;;;7988:28;;;;;;770:40659;;;7988:28;;;;;;:::i;:::-;;;;;7744:76;;;;;;;;;770:40659;7744:76;770:40659;7744:76;;;;;;;:::i;:::-;;;;;;;;;7458:32;;770:40659;7458:32;;770:40659;7458:32;;;;;;2763:4:48;7458:32:74;;;:::i;:::-;;;2763:4:48;;;;7492:19:74;2763:4:48;;7458:32:74;;;;;-1:-1:-1;7458:32:74;;7405:37;;;770:40659;7405:37;;770:40659;7405:37;;;;;;770:40659;7405:37;;;:::i;:::-;;;2024:14:2;;;;;7405:37:74;2024:14:2;;:::i;:::-;7405:37:74;;;;;;-1:-1:-1;7405:37:74;;7363:40;;770:40659;7363:40;;770:40659;7363:40;;;;;;770:40659;7363:40;;;:::i;:::-;;;2024:14:2;;;;;770:40659:74;2024:14:2;;:::i;:::-;7363:40:74;;;;;-1:-1:-1;7363:40:74;;7173:88;770:40659;;7173:88;;;:::i;:::-;770:40659;;;;7173:88;;;7073:46;770:40659;;7073:46;;;:::i;:::-;;;;6821:14;;;;;770:40659;;;6821:14;;;;;;:::i;:::-;;;;6800;;;;;;770:40659;;;6800:14;;;;;;:::i;:::-;;;;;6762:26;;;;;;770:40659;;;6762:26;;;;;;:::i;:::-;;;;;6503:69;;;;;;;770:40659;6503:69;770:40659;6503:69;;;;;;;:::i;:::-;;;;;5613:28;;;;;770:40659;;;5613:28;;;;;;:::i;:::-;;;;5508:22;;770:40659;5508:22;;770:40659;5508:22;;;;;;770:40659;5508:22;;;:::i;:::-;;;2024:14:2;;;;;770:40659:74;2024:14:2;;:::i;:::-;5508:22:74;;;;;-1:-1:-1;5508:22:74;;5426:56;;;770:40659;5426:56;;770:40659;5426:56;;;;;;770:40659;5426:56;;;:::i;:::-;;;2024:14:2;;;;;;;:::i;:::-;5426:56:74;;;;;;-1:-1:-1;5426:56:74;;5151:26;;;;;770:40659;;;5151:26;;;;;;:::i;:::-;;;;5118;;;;;770:40659;;;5118:26;;;;;;:::i;:::-;;;;5017:18;;770:40659;5017:18;;770:40659;5017:18;;;;;;770:40659;5017:18;;;:::i;:::-;;;2024:14:2;;;;;770:40659:74;2024:14:2;;:::i;:::-;5017:18:74;;;;;-1:-1:-1;5017:18:74;;770:40659;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;770:40659:74;;;;;-1:-1:-1;770:40659:74;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;770:40659:74;;;;:::o;:::-;2024:14:2;770:40659:74;;;;;;;;;;;;;;;;;;;-1:-1:-1;;770:40659:74;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;770:40659:74;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;770:40659:74;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;-1:-1:-1;770:40659:74;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;-1:-1:-1;770:40659:74;;-1:-1:-1;770:40659:74;;;;;;;;;-1:-1:-1;770:40659:74;;;;-1:-1:-1;770:40659:74;;;;;;;;;-1:-1:-1;770:40659:74;;;;-1:-1:-1;770:40659:74;;;;;;:::o;2024:14:2:-;;770:40659:74;;;;;;;;2024:14:2:o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;770:40659:74;;;;;;;:::i;:::-;2024:14:2;;;;;;;;;;;;;;;;:::i;:::-;;:::o;2321:4:48:-;770:40659:74;;;;;;;;;;:::i;:::-;304:1:98;2321:4:48;;;;;;-1:-1:-1;2321:4:48;;;;;;;;;:::o;:::-;;770:40659:74;;;;;;:::i;:::-;-1:-1:-1;2321:4:48;;-1:-1:-1;2321:4:48;;;;770:40659:74;;2321:4:48;;;-1:-1:-1;770:40659:74;2321:4:48;;;-1:-1:-1;2321:4:48;;;;-1:-1:-1;2321:4:48;;;;-1:-1:-1;2321:4:48;;;;;;;;;;;;;2763;770:40659:74;;2763:4:48;;;;;;:::o;:::-;;770:40659:74;2763:4:48;;;;;770:40659:74;2763:4:48;;770:40659:74;;2763:4:48;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;770:40659:74;;;;;;;2763:4:48;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::o;2556:::-;;;;;;;;;;770:40659:74;;;2556:4:48;;;;;:::o;:::-;;;;;;2024:14:2;;2556:4:48;;;;;;;;:::i;770:40659:74:-;;;;;;;;2024:14:2;;770:40659:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2024:14:2;770:40659:74;;;;;;;2024:14:2;770:40659:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;2024:14:2;770:40659:74;;;;;;;2024:14:2;770:40659:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2024:14:2;770:40659:74;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;2024:14:2;770:40659:74;;;;;;;;;;;;;;;;;;;;;;;;2024:14:2;770:40659:74;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;2024:14:2;770:40659:74;;;;;;;;:::i;:::-;;;;;;;;;;;2024:14:2;;;:::i;:::-;770:40659:74;;;;:::o;:::-;;;;;-1:-1:-1;770:40659:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;;;-1:-1:-1;770:40659:74;;;;;-1:-1:-1;770:40659:74;;-1:-1:-1;770:40659:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;770:40659:74;;;;;;;-1:-1:-1;770:40659:74;;;;-1:-1:-1;770:40659:74;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;2321:4:48;;;:::i;:::-;770:40659:74;;;;;;:::i;:::-;2321:4:48;;;770:40659:74;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;-1:-1:-1;770:40659:74;;-1:-1:-1;770:40659:74;;-1:-1:-1;770:40659:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2024:14:2;770:40659:74;;;;;;;;2024:14:2;770:40659:74;;2024:14:2;770:40659:74;2024:14:2;;;;770:40659:74;;;;;;;;2024:14:2;770:40659:74;;2024:14:2;770:40659:74;2024:14:2;770:40659:74;2024:14:2;;770:40659:74;;;;;;;;2024:14:2;770:40659:74;;2024:14:2;770:40659:74;2024:14:2;770:40659:74;2024:14:2;;770:40659:74;;;;;;;;2024:14:2;770:40659:74;;2024:14:2;770:40659:74;2024:14:2;770:40659:74;2024:14:2;;770:40659:74;;;;;;;;2024:14:2;770:40659:74;;2024:14:2;770:40659:74;2024:14:2;770:40659:74;2024:14:2;;770:40659:74;;;;;;;;2024:14:2;770:40659:74;;2024:14:2;770:40659:74;2024:14:2;770:40659:74;2024:14:2;;770:40659:74;;;;;;;;2024:14:2;770:40659:74;;2024:14:2;770:40659:74;2024:14:2;;;770:40659:74;;;;;;;;;;;;;;;;;;;;2024:14:2;;;;770:40659:74;;;2024:14:2;;770:40659:74;2024:14:2;;770:40659:74;;;;2024:14:2;;770:40659:74;2024:14:2;;770:40659:74;;;;2024:14:2;;770:40659:74;2024:14:2;;770:40659:74;;;;2024:14:2;;770:40659:74;2024:14:2;;770:40659:74;;;;2024:14:2;;770:40659:74;2024:14:2;;770:40659:74;;;;2024:14:2;;770:40659:74;2024:14:2;;770:40659:74;;;;2024:14:2;;770:40659:74;;;;;;;;;;;;;;1243:204:4;1302:7;770:40659:74;;;;;;;1325:14:4;:::o;1298:143::-;770:40659:74;;;2024:14:2;1377:39:4;;770:40659:74;1377:39:4;;;770:40659:74;192:59:4;2024:14:2;;;;;1377:39:4;;;770:40659:74;1377:39:4;;;;;;;770:40659:74;1377:39:4;;;1298:143;1377:53;;;1370:60;:::o;1377:39::-;;;2024:14:2;1377:39:4;;2024:14:2;1377:39:4;;;;;;2763:4:48;1377:39:4;;;:::i;:::-;;;2763:4:48;;;;;1377:39:4;;;;;;-1:-1:-1;1377:39:4;;;770:40659:74;;2024:14:2;770:40659:74;2024:14:2;;;;;2815:199:15;307:66:98;304:1;2933:19:15;2815:199;2933:19;:::i;:::-;770:40659:74;-1:-1:-1;770:40659:74;;;9786:54:15;770:40659:74;;;;;;:::i;:::-;;;;;2024:14:2;9786:54:15;;;;;;;;:::i;:::-;770:40659:74;9371:159:15;679:42;9371:159;;;2815:199::o;:::-;;770:40659:74;2933:19:15;2815:199;2933:19;:::i;2815:199::-;2933:19;2815:199;770:40659:74;2815:199:15;2933:19;:::i;2815:199::-;770:40659:74;;2933:19:15;2815:199;2933:19;:::i;2815:199::-;770:40659:74;;2933:19:15;2815:199;2933:19;:::i;4413:486:97:-;;;770:40659:74;;;4632:24:97;2024:14:2;4632:24:97;;770:40659:74;4632:24:97;;;770:40659:74;-1:-1:-1;4632:24:97;;;770:40659:74;4632:24:97;;;;;;;-1:-1:-1;4632:24:97;;;4413:486;770:40659:74;;;4690:25:97;2024:14:2;4690:25:97;;4632:24;4690:25;;2024:14:2;-1:-1:-1;4690:25:97;4632:24;4690:25;770:40659:74;4690:25:97;;;;;;770:40659:74;4690:25:97;-1:-1:-1;4690:25:97;770:40659:74;4690:25:97;;;;;4413:486;770:40659:74;;;;;;;;;;;;;;;;;;2024:14:2;770:40659:74;;;;;;;;2024:14:2;;;:::i;:::-;;;770:40659:74;2024:14:2;;;770:40659:74;2024:14:2;770:40659:74;;;;;;;;2024:14:2;;;:::i;:::-;;;770:40659:74;2024:14:2;;;770:40659:74;2024:14:2;770:40659:74;;;;;;;;2024:14:2;;;:::i;770:40659:74:-;;4828:11:97;770:40659:74;4828:11:97;:::i;:::-;770:40659:74;;;4820:42:97;;;;;2024:14:2;4820:42:97;;770:40659:74;4632:24:97;4820:42;;770:40659:74;;;;;;:::i;:::-;;;;;;;;4632:24:97;770:40659:74;;;;;;;;;;;;;;;;;;;:::i;:::-;4820:42:97;;;770:40659:74;4820:42:97;;;;;;;-1:-1:-1;4820:42:97;;;4868:26;4413:486;:::o;4820:42::-;;;;;;-1:-1:-1;4820:42:97;;;;;;:::i;4690:25::-;770:40659:74;4690:25:97;;;770:40659:74;4690:25:97;770:40659:74;4690:25:97;770:40659:74;4690:25:97;;;;;;;;;;:::i;:::-;;;;;;;;;4632:24;;;;;;;-1:-1:-1;4632:24:97;;;;;;:::i;:::-;;;;;5775:328;-1:-1:-1;770:40659:74;;5775:328:97;770:40659:74;;;;;;;;;;;;2024:14:2;770:40659:74;;;;;;;;2024:14:2;;;:::i;:::-;;;770:40659:74;2024:14:2;;;770:40659:74;;;;;;;;;;;:::i;:::-;;5971:11:97;770:40659:74;5971:11:97;:::i;770:40659:74:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5963:48:97;;;770:40659:74;5963:48:97;;;;;;;-1:-1:-1;5963:48:97;;;5775:328;770:40659:74;2763:4:48;770:40659:74;;6067:31:97;;;;;;;;;;2763:4:48;;;;;5775:328:97;:::o;5963:48::-;;;;;;-1:-1:-1;5963:48:97;;;;;;:::i;:::-;;;;9842:280:48;9972:18;;;2763:4;9842:280;;10027:18;;770:40659:74;1206:48:48;;-1:-1:-1;1206:48:48;;770:40659:74;;;1077:202:48;9972:18;1077:202;;2024:14:2;539:66:48;2024:14:2;;709:66:48;770:40659:74;868:66:48;;2024:14:2;868:66:48;;;;2024:14:2;868:66:48;;;2024:14:2;770:40659:74;868:66:48;;;770:40659:74;868:66:48;1077:202;;;;;;:::i;:::-;770:40659:74;1060:225:48;;10027:18;;:::i;:::-;770:40659:74;;10068:48:48;9972:18;10068:48;;770:40659:74;;;;;;;2024:14:2;770:40659:74;;;2024:14:2;770:40659:74;10068:48:48;;;;;;:::i;:::-;770:40659:74;10058:59:48;;9842:280;:::o;1206:48::-;1240:13;1206:48;;;6263:500:97;-1:-1:-1;6263:500:97;770:40659:74;;;;6263:500:97;770:40659:74;6263:500:97;6613:27;;;;;;770:40659:74;;;;;;;;:::i;:::-;;;;;;;;;6613:27:97;770:40659:74;;;;;;;;;;;2024:14:2;770:40659:74;;;;;;;;2024:14:2;;;:::i;:::-;;;770:40659:74;2024:14:2;;;770:40659:74;2024:14:2;770:40659:74;;;;;;;;2024:14:2;;;:::i;:::-;;;770:40659:74;2024:14:2;;;770:40659:74;2024:14:2;770:40659:74;;;;;;;;2024:14:2;;;:::i;:::-;;;770:40659:74;2024:14:2;;;770:40659:74;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;6613:27:97:-;770:40659:74;;;;;;;;:::i;:::-;;;;;;;;;6613:27:97;;6263:500;-1:-1:-1;770:40659:74;;6263:500:97;770:40659:74;304:1:98;770:40659:74;;;;;;;;;;;:::i;:::-;;;;;;;;;;;2024:14:2;770:40659:74;;;;;;;;;;;2024:14:2;770:40659:74;;;;;;;;2024:14:2;;;:::i;:::-;;;770:40659:74;2024:14:2;;;770:40659:74;2024:14:2;770:40659:74;;;;;;;;2024:14:2;;;:::i;:::-;;;;770:40659:74;2024:14:2;;;770:40659:74;;;;;;;2024:14:2;;:::i;770:40659:74:-;;6692:11:97;770:40659:74;6692:11:97;:::i;770:40659:74:-;6684:48:97;;;770:40659:74;6684:48:97;;;;;;;;-1:-1:-1;6684:48:97;;;6738:20;6263:500;:::o;6684:48::-;770:40659:74;2024:14:2;-1:-1:-1;2024:14:2;;;;;3035:310:97;-1:-1:-1;770:40659:74;3205:20:97;770:40659:74;3035:310:97;770:40659:74;;3205:20:97;;;;;;;770:40659:74;;;;;;:::i;3205:20:97:-;770:40659:74;;3192:34:97;;;;2024:14:2;3192:34:97;;3205:20;3192:34;;;770:40659:74;;;;;;:::i;:::-;3192:34:97;;770:40659:74;3192:34:97;;;;;;770:40659:74;-1:-1:-1;3192:34:97;770:40659:74;3192:34:97;;;;;3035:310;770:40659:74;;;;;;;;;3205:20:97;770:40659:74;;;2024:14:2;770:40659:74;;;;3205:20:97;770:40659:74;;;2024:14:2;;;:::i;:::-;;;770:40659:74;2024:14:2;;;770:40659:74;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;3205:20:97;770:40659:74;;;;;;;;;;;:::i;3192:34:97:-;;;;;;;;;;;;;:::i;:::-;;;;3454:110:4;770:40659:74;3533:24:4;770:40659:74;3533:24:4;;;;770:40659:74;;;3533:24:4;2024:14:2;3533:24:4;;770:40659:74;3533:24:4;;;770:40659:74;;;;;;3533:24:4;;;;770:40659:74;3533:24:4;;;;;;;;3454:110;;:::o;3533:24::-;;;;;:::i;:::-;3454:110;:::o;3533:24::-;770:40659:74;;2024:14:2;770:40659:74;;2024:14:2;;;;3533:24:4;770:40659:74;;;3454:110:4;;770:40659:74;3533:24:4;;;;770:40659:74;;;;;3533:24:4;2024:14:2;3533:24:4;;770:40659:74;3533:24:4;;;770:40659:74;;;;;;-1:-1:-1;3533:24:4;;;770:40659:74;3533:24:4;;;;;;;;3454:110;:::o;3533:24::-;-1:-1:-1;3533:24:4;;;:::i;3710:110::-;770:40659:74;3789:24:4;;;;770:40659:74;;3789:24:4;2024:14:2;3789:24:4;;;;;2024:14:2;770:40659:74;;;;2024:14:2;-1:-1:-1;3789:24:4;;;770:40659:74;3789:24:4;;;;;;;;3710:110;:::o;:::-;;770:40659:74;3789:24:4;;;;770:40659:74;;3789:24:4;2024:14:2;3789:24:4;;;;;2024:14:2;770:40659:74;;;2024:14:2;-1:-1:-1;3789:24:4;;;770:40659:74;3789:24:4;;;;;;;;3710:110;:::o;2386:134::-;;770:40659:74;2484:29:4;;;;-1:-1:-1;770:40659:74;;;;2484:29:4;;;;;2024:14:2;2484:29:4;;;;;2024:14:2;770:40659:74;;;2024:14:2;770:40659:74;;;;;;;;;;:::i;:::-;2484:29:4;;770:40659:74;2484:29:4;;;;;;;;2386:134;:::o;2270:110::-;770:40659:74;2349:24:4;;;;770:40659:74;;2349:24:4;2024:14:2;2349:24:4;;;;;2024:14:2;11424:7:74;770:40659;;;2024:14:2;-1:-1:-1;2349:24:4;;;770:40659:74;2349:24:4;;;;;;;;2270:110;:::o;:::-;;770:40659:74;2349:24:4;;;;770:40659:74;;2349:24:4;2024:14:2;2349:24:4;;;;;2024:14:2;770:40659:74;;;2024:14:2;-1:-1:-1;2349:24:4;;;770:40659:74;2349:24:4;;;;;;;;2270:110;:::o;398:649:98:-;2933:19:15;770:40659:74;-1:-1:-1;770:40659:74;;;;2933:19:15;:::i;:::-;770:40659:74;;;-1:-1:-1;770:40659:74;;;;;;;:::i;:::-;;;;;;;;;;;9786:54:15;;770:40659:74;;9786:54:15;;;;;;;;;;770:40659:74;;;;;;:::i;:::-;;;;;2024:14:2;9786:54:15;;;;;;;;:::i;:::-;770:40659:74;9371:159:15;679:42;9371:159;;;770:40659:74;2321:4:48;;;580:42:98;576:467;;398:649;;:::o;576:467::-;655:14;;;2933:19:15;770:40659:74;-1:-1:-1;770:40659:74;;2933:19:15;:::i;:::-;770:40659:74;-1:-1:-1;770:40659:74;;;;;;;:::i;:::-;;;;;;;;;;;9786:54:15;;770:40659:74;;9786:54:15;;;;;;;;;;770:40659:74;;;;;;:::i;9786:54:15:-;770:40659:74;9371:159:15;679:42;9371:159;;;770:40659:74;723:14:98;;;2933:19:15;770:40659:74;-1:-1:-1;770:40659:74;;2933:19:15;:::i;:::-;770:40659:74;-1:-1:-1;770:40659:74;;;;;;;:::i;:::-;;;;;;;;;;;9786:54:15;;770:40659:74;;9786:54:15;;;;;;;;;;770:40659:74;;;;;;:::i;9786:54:15:-;770:40659:74;9371:159:15;679:42;9371:159;;;770:40659:74;-1:-1:-1;815:3:98;792:14;;;;;;770:40659:74;;;788:25:98;;;;;883:17;;:33;830:17;883;2933:19:15;770:40659:74;883:17:98;;;770:40659:74;883:17:98;;:::i;:::-;;:33;770:40659:74;-1:-1:-1;2933:19:15;;:::i;:::-;770:40659:74;-1:-1:-1;770:40659:74;;;9786:54:15;770:40659:74;;;;;;:::i;:::-;;;;;2024:14:2;9786:54:15;;;;;;;;:::i;:::-;770:40659:74;9371:159:15;679:42;9371:159;;;830:14:98;:17;:::i;:::-;;:33;770:40659:74;;773:13:98;;;;788:25;;;;;;398:649::o;3826:134:4:-;;770:40659:74;3924:29:4;;;;-1:-1:-1;770:40659:74;;;;3924:29:4;;;;;2024:14:2;3924:29:4;;;;;2024:14:2;770:40659:74;;;2024:14:2;770:40659:74;;;;;;;;;;:::i;1042:78:15:-;;;;;;;:::o;:::-;;;;;;;;;;1546:1263;770:40659:74;1664:10:15;;;;770:40659:74;;1970:8:15;;;;;;:20;;;1546:1263;1966:34;;2026:9;;;;:::i;:::-;770:40659:74;2038:1:15;770:40659:74;;;;;;;2234:1:15;2229:6;;;:18;;;1546:1263;2225:38;;770:40659:74;2277:20:15;;;:46;;;1546:1263;2273:82;;2455:7;;;;;;2493;;;;;2528:11;2493:7;;:::i;:::-;2528:11;:::i;:::-;2557:8;;;2553:24;;2600:9;;;;:::i;:::-;1042:78;770:40659:74;;;;;;;2451:352:15;1546:1263::o;2553:24::-;2567:10;;;:::o;2451:352::-;2630:173;;;;;;;;2451:352;;;;;1546:1263::o;2630:173::-;2672:7;;;;;;2707:11;2672:7;;;:::i;2707:11::-;2736:8;;;2732:24;;2779:9;;;;:::i;:::-;2038:1;770:40659:74;;;;;;;2630:173:15;;;;;;;2273:82;770:40659:74;;;;2332:23:15;770:40659:74;;;;2332:23:15;;:::i;2277:46::-;770:40659:74;;;2301:22:15;;2277:46;;2225:38;2256:7;;;;;;;;;:::i;2229:18::-;2239:8;;;;2229:18;;1966:34;1992:8;;;;;;:::o;1970:20::-;1982:8;;;;;1970:20;;770:40659:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;701:863:97;770:40659:74;;;;2024:14:2;798:35:97;;770:40659:74;798:35:97;;;770:40659:74;;;;;;;;;;;;798:35:97;;;;;;;;;;;-1:-1:-1;798:35:97;;;701:863;770:40659:74;;;866:35:97;2024:14:2;866:35:97;;770:40659:74;798:35:97;866;;770:40659:74;;;;;;;;;;;;866:35:97;798;866;;;;;;;;;-1:-1:-1;866:35:97;;;701:863;916:18;;;;770:40659:74;;285:44:97;462:50;1037:32;;1033:109;;701:863;232:1;;;;;;;1278:17;232:1;;644:49;;285:44;644:49;1278:17;:::i;:::-;770:40659:74;232:1:97;770:40659:74;;;;;;;1326:27:97;1337:15;;;;:::i;1326:27::-;770:40659:74;;;2024:14:2;1383:39:97;;770:40659:74;798:35:97;1383:39;;232:1;;770:40659:74;232:1:97;;770:40659:74;232:1:97;770:40659:74;;;232:1:97;-1:-1:-1;1383:39:97;798:35;1383:39;;;;;;;;;-1:-1:-1;1383:39:97;;;701:863;770:40659:74;;;1451:39:97;2024:14:2;1451:39:97;;770:40659:74;798:35:97;1451:39;;232:1;;770:40659:74;232:1:97;;770:40659:74;232:1:97;770:40659:74;;;232:1:97;-1:-1:-1;1451:39:97;798:35;1451:39;;;;;;;;;-1:-1:-1;1451:39:97;;;701:863;770:40659:74;-1:-1:-1;770:40659:74;;;;1526:24:97;;;;2024:14:2;1526:24:97;;798:35;1526:24;;2024:14:2;1526:24:97;;;;;;;-1:-1:-1;1526:24:97;;;701:863;770:40659:74;;232:1:97;770:40659:74;;2024:14:2;770:40659:74;;;;;2024:14:2;770:40659:74;;;232:1:97;;;;;;2024:14:2;;;:::i;1526:24:97:-;232:1;1526:24;;;770:40659:74;1526:24:97;;;-1:-1:-1;1526:24:97;;;;;;:::i;:::-;;;;;1451:39;-1:-1:-1;1451:39:97;;;;;;;;;;;;;;:::i;:::-;;;;;1383;;;;;;-1:-1:-1;1383:39:97;;;;;;:::i;:::-;;;;1033:109;770:40659:74;;;;1107:26:97;;1124:8;;-1:-1:-1;770:40659:74;;1107:26:97;770:40659:74;1124:8:97;;770:40659:74;;-1:-1:-1;770:40659:74;;;;1107:26:97;;;;;;;;;:::i;:::-;770:40659:74;1097:37:97;;1033:109;;866:35;;;770:40659:74;866:35:97;;770:40659:74;866:35:97;;;;;;2763:4:48;866:35:97;;;:::i;:::-;;;2763:4:48;;;;;;866:35:97;;;;2763:4:48;770:40659:74;;866:35:97;;;-1:-1:-1;866:35:97;;798;;770:40659:74;798:35:97;;770:40659:74;798:35:97;;;;;;2763:4:48;798:35:97;;;:::i;:::-;;;2763:4:48;;;;;;798:35:97;;;;;;-1:-1:-1;798:35:97;;8278:1282:48;8416:22;;;;770:40659:74;;8399:40:48;;;;;770:40659:74;8399:40:48;770:40659:74;;;;;;;;;;;;;8399:40:48;;;;;;;;;;;;;:::i;:::-;770:40659:74;8389:51:48;;770:40659:74;;;;;8451:34:48;;8447:1109;770:40659:74;;;8525:14:48;;770:40659:74;8525:14:48;;;770:40659:74;;;2321:4:48;770:40659:74;2321:4:48;;;:::i;:::-;770:40659:74;;;;;;;:::i;:::-;2321:4:48;;;770:40659:74;:::i;:::-;;8399:40:48;;770:40659:74;;;;;;;;8164:3:48;770:40659:74;;8146:16:48;;;;;8202:8;;770:40659:74;8202:8:48;;;:::i;:::-;;770:40659:74;2024:14:2;;770:40659:74;7708:7:48;8399:40;7708:7;;770:40659:74;7727:6:48;770:40659:74;7727:6:48;;;8399:40;770:40659:74;;;;7717:17:48;7736:10;;;;770:40659:74;7748:14:48;;;2763:4;770:40659:74;;7764:14:48;7780:17;7764:14;;;2763:4;770:40659:74;;7780:17:48;;770:40659:74;;;;7667:138:48;8399:40;7667:138;;2024:14:2;1478:66:48;2024:14:2;;770:40659:74;1478:66:48;;770:40659:74;7736:10:48;1478:66;;2024:14:2;7748::48;1478:66;;2024:14:2;7764::48;1478:66;;2024:14:2;7780:17:48;1478:66;;770:40659:74;1478:66:48;;;770:40659:74;8416:22:48;1478:66;;2024:14:2;8416:22:48;7667:138;;;;;;:::i;:::-;770:40659:74;7650:161:48;;8177:34;;;;:::i;:::-;770:40659:74;;8131:13:48;;8146:16;;;;;;;770:40659:74;;8240:28:48;;8399:40;8240:28;;;;770:40659:74;;;;;;;;;;;;8240:28:48;;;;;;8399:40;8240:28;;;;;;:::i;:::-;770:40659:74;8230:39:48;;8750:14;7748;7736:10;8750:14;;770:40659:74;8766:14:48;;770:40659:74;;;8712:82:48;8399:40;8712:82;;2024:14:2;1799:66:48;2024:14:2;;770:40659:74;1799:66:48;;2024:14:2;7736:10:48;1799:66;;2024:14:2;7748::48;1799:66;;2024:14:2;7764::48;1799:66;;2024:14:2;7764::48;8712:82;;;7780:17;8712:82;;:::i;770:40659:74:-;;;2024:14:2;;8399:40:48;770:40659:74;;;;;;-1:-1:-1;770:40659:74;;;;;;;;8447:1109:48;770:40659:74;8812:29:48;;770:40659:74;;8998:16:48;;;;8399:40;770:40659:74;;;;8988:27:48;770:40659:74;;;8959:70:48;8399:40;8959:70;;2024:14:2;1979:66:48;2024:14:2;;770:40659:74;1979:66:48;;2024:14:2;1979:66:48;;;2024:14:2;1979:66:48;8959:70;;;;;;:::i;8808:748::-;2867:4;9047:35;;2867:4;;9216:18;;;2024:14:2;770:40659:74;;;9181:67:48;8399:40;9181:67;;2024:14:2;2174:66:48;2024:14:2;;770:40659:74;1979:66:48;;2024:14:2;1979:66:48;;;2024:14:2;1979:66:48;9181:67;;;;;;:::i;9043:513::-;2556:4;9266:28;;2556:4;;9443:15;;;2024:14:2;770:40659:74;;;9414:58:48;8399:40;9414:58;;2024:14:2;1979:66:48;2024:14:2;;770:40659:74;1979:66:48;;2024:14:2;1979:66:48;;;2024:14:2;1979:66:48;9414:58;;;;;;:::i;9262:294::-;9523:26;770:40659:74;9523:26:48;;2024:14:2;2482:4:48;770:40659:74;9523:26:48;770:40659:74;;;;;;;8399:40:48;770:40659:74;;;;;;-1:-1:-1;770:40659:74;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;:::o","linkReferences":{}},"methodIdentifiers":{"IS_TEST()":"fa7626d4","excludeArtifacts()":"b5508aa9","excludeContracts()":"e20c9f71","excludeSelectors()":"b0464fdc","excludeSenders()":"1ed7831c","factory()":"c45a0155","failed()":"ba414fa6","stage1Module()":"2dcbe49a","targetArtifactSelectors()":"66d9a9a0","targetArtifacts()":"85226c81","targetContracts()":"3f7286f4","targetInterfaces()":"2ade3880","targetSelectors()":"916a17c6","targetSenders()":"3e5e3c23","test_1271_single_signer(uint16,uint56,uint8,uint256,bytes32,bool)":"67c5560a","test_fails_on_low_weight(uint16,uint56,uint8,uint256,bytes32,bool)":"9a11e100","test_invalid_is_valid_signature((bytes32,uint16,uint56,uint8,uint256,uint256,bool))":"c7b2834c","test_receiveETH_stage1()":"f7c73c13","test_receiveETH_stage2((uint256,uint256,uint16,uint16,uint56))":"22fe81fe","test_recover_partial_signature(((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint16,uint56,uint8,uint256,bool,bool,bool))":"4f7cf176","test_recover_sapient_as_if_nested(((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint16,uint56,uint8,uint256,address))":"8d7f2e0d","test_recover_sapient_as_if_nested_wrong_signature_fail(((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint16,uint56,uint8,uint256,address),uint56)":"43859781","test_reverts_invalid_static_signature_expired(bytes32,bytes32,uint256,uint256)":"4d02ac71","test_reverts_set_static_signature_not_self(bytes32,bytes32,address,uint96,address)":"1e648566","test_reverts_update_to_zero_image_hash(uint16,uint56,uint8,uint256,bool)":"1cc7bfe3","test_static_signature_any_address(bytes32,bytes32,uint256,uint256,address)":"6e614e9c","test_static_signature_specific_address(bytes32,bytes32,uint256,uint256,address,address)":"67df3e87","test_update_config((uint16,uint56,uint8,uint256,bool,uint16,uint56,uint8,uint256,bytes32))":"0ba6dabf","test_update_image_hash_then_zero((uint16,uint56,uint8,uint256,uint16,uint56,uint8,uint256,bool))":"97aef383","test_update_image_hash_twice((uint16,uint56,uint8,uint256,uint16,uint56,uint8,uint256,bool))":"ce047ab4"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"}],\"name\":\"InvalidKind\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"newImageHash\",\"type\":\"bytes32\"}],\"name\":\"ImageHashUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"_timestamp\",\"type\":\"uint96\"}],\"name\":\"StaticSignatureSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"IS_TEST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"excludedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"contract Factory\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stage1Module\",\"outputs\":[{\"internalType\":\"contract Stage1Module\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifactSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"artifact\",\"type\":\"string\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzArtifactSelector[]\",\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"targetedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetInterfaces\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"artifacts\",\"type\":\"string[]\"}],\"internalType\":\"struct StdInvariant.FuzzInterface[]\",\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_threshold\",\"type\":\"uint16\"},{\"internalType\":\"uint56\",\"name\":\"_checkpoint\",\"type\":\"uint56\"},{\"internalType\":\"uint8\",\"name\":\"_weight\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_pk\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_digest\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"_noChainId\",\"type\":\"bool\"}],\"name\":\"test_1271_single_signer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_threshold\",\"type\":\"uint16\"},{\"internalType\":\"uint56\",\"name\":\"_checkpoint\",\"type\":\"uint56\"},{\"internalType\":\"uint8\",\"name\":\"_weight\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_pk\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_digest\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"_noChainId\",\"type\":\"bool\"}],\"name\":\"test_fails_on_low_weight\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"uint16\",\"name\":\"threshold\",\"type\":\"uint16\"},{\"internalType\":\"uint56\",\"name\":\"checkpoint\",\"type\":\"uint56\"},{\"internalType\":\"uint8\",\"name\":\"weight\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"intendedPk\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualPk\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"}],\"internalType\":\"struct TestStage1Module.test_invalid_is_valid_signature_params\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"test_invalid_is_valid_signature\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"test_receiveETH_stage1\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"pk\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextPk\",\"type\":\"uint256\"},{\"internalType\":\"uint16\",\"name\":\"threshold\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"nextThreshold\",\"type\":\"uint16\"},{\"internalType\":\"uint56\",\"name\":\"checkpoint\",\"type\":\"uint56\"}],\"internalType\":\"struct TestStage1Module.test_receiveETH_stage2_params\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"test_receiveETH_stage2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"payload\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"threshold\",\"type\":\"uint16\"},{\"internalType\":\"uint56\",\"name\":\"checkpoint\",\"type\":\"uint56\"},{\"internalType\":\"uint8\",\"name\":\"signerWeight\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"pk\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"signPayload\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"useEthSign\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"}],\"internalType\":\"struct TestStage1Module.test_recover_partial_signature_params\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"test_recover_partial_signature\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"payload\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"threshold\",\"type\":\"uint16\"},{\"internalType\":\"uint56\",\"name\":\"checkpoint\",\"type\":\"uint56\"},{\"internalType\":\"uint8\",\"name\":\"weight\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"pk\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"parentWallet\",\"type\":\"address\"}],\"internalType\":\"struct TestStage1Module.nested_sapient_test_params\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"test_recover_sapient_as_if_nested\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"payload\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"threshold\",\"type\":\"uint16\"},{\"internalType\":\"uint56\",\"name\":\"checkpoint\",\"type\":\"uint56\"},{\"internalType\":\"uint8\",\"name\":\"weight\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"pk\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"parentWallet\",\"type\":\"address\"}],\"internalType\":\"struct TestStage1Module.nested_sapient_test_params\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"uint56\",\"name\":\"_differentCheckpoint\",\"type\":\"uint56\"}],\"name\":\"test_recover_sapient_as_if_nested_wrong_signature_fail\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_digest\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_startTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_validUntil\",\"type\":\"uint256\"}],\"name\":\"test_reverts_invalid_static_signature_expired\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_sigAddress\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"_timestamp\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"_caller\",\"type\":\"address\"}],\"name\":\"test_reverts_set_static_signature_not_self\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"_threshold\",\"type\":\"uint16\"},{\"internalType\":\"uint56\",\"name\":\"_checkpoint\",\"type\":\"uint56\"},{\"internalType\":\"uint8\",\"name\":\"_weight\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_pk\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_noChainId\",\"type\":\"bool\"}],\"name\":\"test_reverts_update_to_zero_image_hash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_digest\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_validUntil\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_otherCaller\",\"type\":\"address\"}],\"name\":\"test_static_signature_any_address\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_digest\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"_imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_validUntil\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_onlyAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_otherCaller\",\"type\":\"address\"}],\"name\":\"test_static_signature_specific_address\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint16\",\"name\":\"threshold\",\"type\":\"uint16\"},{\"internalType\":\"uint56\",\"name\":\"checkpoint\",\"type\":\"uint56\"},{\"internalType\":\"uint8\",\"name\":\"weight\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"pk\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"nextThreshold\",\"type\":\"uint16\"},{\"internalType\":\"uint56\",\"name\":\"nextCheckpoint\",\"type\":\"uint56\"},{\"internalType\":\"uint8\",\"name\":\"nextWeight\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"nextPk\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"}],\"internalType\":\"struct TestStage1Module.test_update_config_params\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"test_update_config\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint16\",\"name\":\"threshold1\",\"type\":\"uint16\"},{\"internalType\":\"uint56\",\"name\":\"checkpoint1\",\"type\":\"uint56\"},{\"internalType\":\"uint8\",\"name\":\"weight1\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"pk1\",\"type\":\"uint256\"},{\"internalType\":\"uint16\",\"name\":\"threshold2\",\"type\":\"uint16\"},{\"internalType\":\"uint56\",\"name\":\"checkpoint2\",\"type\":\"uint56\"},{\"internalType\":\"uint8\",\"name\":\"weight2\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"pk2\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"}],\"internalType\":\"struct TestStage1Module.test_update_image_hash_then_zero_params\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"test_update_image_hash_then_zero\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint16\",\"name\":\"threshold1\",\"type\":\"uint16\"},{\"internalType\":\"uint56\",\"name\":\"checkpoint1\",\"type\":\"uint56\"},{\"internalType\":\"uint8\",\"name\":\"weight1\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"pk1\",\"type\":\"uint256\"},{\"internalType\":\"uint16\",\"name\":\"threshold2\",\"type\":\"uint16\"},{\"internalType\":\"uint56\",\"name\":\"checkpoint2\",\"type\":\"uint56\"},{\"internalType\":\"uint8\",\"name\":\"weight2\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"pk2\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"}],\"internalType\":\"struct TestStage1Module.test_update_image_hash_twice_params\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"test_update_image_hash_twice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"InvalidKind(uint8)\":[{\"notice\":\"Error thrown when the kind is invalid\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/Stage1Module.t.sol\":\"TestStage1Module\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/Factory.sol\":{\"keccak256\":\"0x5924fe583809e9c148d47c871866f6094599bb07a4d1fc2d60c814fda9c37f46\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e24d3575bf2606cd5f0f6da093e420118e018549eeb3a4ccb94f57c0e285e123\",\"dweb:/ipfs/QmRvWQt91YLJEgk5hgnRkPjDdB39tUHLYtxijYyXKdCm5J\"]},\"src/Stage1Module.sol\":{\"keccak256\":\"0x3e3be2778ac65aded03c15a73b4382a6a7dde0bcc69d1268255fd734e320d084\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c4d8846d35267bf7bc895c04e3d91b525274ae0677ec3b5529cba02577a2bb67\",\"dweb:/ipfs/QmaZq74rdyLUwRGCfacFXVS7kAL2FhTm3u356kHLtggfiW\"]},\"src/Stage2Module.sol\":{\"keccak256\":\"0xd0b2c2fead81d32a3f83f95bd1dd2d90677fdd1e0a7194a25710ffd0fdaee428\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://8489e75346dbf462b0567da30c2e020cdde3975c38bdfee055284642a3bd2d19\",\"dweb:/ipfs/QmTDM2AkG8qLVjfn35UcXN89CdQS8p3Cm888EadYrMAYAR\"]},\"src/Wallet.sol\":{\"keccak256\":\"0xe01e9e937dd8d7572976ccc8ec3ec87e4a557069dafb05f85977a7b71f5c58d5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2e9ab78d33655f8e822258dff3f2d5ad01e84f6dc90174840d5a283b8e6413c1\",\"dweb:/ipfs/QmNMyYe3C1fs3cxKmUZ3S9VU5EE4WVWPVcwiGbgvbS1vrH\"]},\"src/modules/Calls.sol\":{\"keccak256\":\"0xcd0d38d0fd248e4443032dede2b8892ea0ca7e55538cd54082830f6b98d8edb1\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://617bb6d0724b18f3d77347cc454a57c1c916a0818a592552bd7fa226aa41a306\",\"dweb:/ipfs/Qmeet85Ux6cKq9JmC25JnTzFnRrgDpkyRik2svZLWt4fov\"]},\"src/modules/ERC4337v07.sol\":{\"keccak256\":\"0xbee11ed2498b892b16f72984c848fea85b58d15313fffa78c1e48ca7208f9189\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2d9296803bd52f5e2ae84011593f686802f1cadf6c68a4ee9f97e6455463ae0f\",\"dweb:/ipfs/QmXmWwUiV2eshxxdY5zCyJ7rxcH7bztxcAoh1scw2MPuhP\"]},\"src/modules/Hooks.sol\":{\"keccak256\":\"0xd1f9de45b83ae5f9f32a4d1c709d7a2b6543b1cddd09bf69d401dcdf1d154ab7\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://bf3161edf37479825588e07039752b79792666455cc0beb1ca0e873b3be31ad4\",\"dweb:/ipfs/QmYYpJeSsRgRx2oHcpvhqsNs7ZtDhVnxLmFpXz5eYcS8g4\"]},\"src/modules/Implementation.sol\":{\"keccak256\":\"0x16546d4be07865808890308750916b0a9a55e7a994a458c01edde4618f29b4e6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1b1f9785b08c9f29d6849ba2d3dee89fa3ea5f3c2feec4a59a6d1040e3fbe040\",\"dweb:/ipfs/QmU2Pm5C3Ztky7RQdCZggavyq7Eh1eS1HFqVz9jZKiMUML\"]},\"src/modules/Nonce.sol\":{\"keccak256\":\"0x56fbf6dc9b34ab60ae8a32ffb6f583c003bb8f4a5223ce704e982400fa403fab\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://492f53628633b862702cf8f9b726067a722c94028133a8a4c4fcf3d0e73ad803\",\"dweb:/ipfs/QmTHNy4XbH47YZaqKDpknb5aApjRH9HVAREHN7N5vEFWEV\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/Storage.sol\":{\"keccak256\":\"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da\",\"dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn\"]},\"src/modules/auth/BaseAuth.sol\":{\"keccak256\":\"0xbf2e40def03fcb5f4a5129b2f5803e21951325b92e00126cbe1427b7c25cfefd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://b560905fcc4b957d27c2abed78a1e82529c89fa472e91b3d108fbfd91aa7c3f7\",\"dweb:/ipfs/QmRjLLtTWE6dFX2kBQCgLz7ossfMxhAFgDC8Jx9XuGL6Wy\"]},\"src/modules/auth/BaseSig.sol\":{\"keccak256\":\"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8\",\"dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3\"]},\"src/modules/auth/SelfAuth.sol\":{\"keccak256\":\"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42\",\"dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W\"]},\"src/modules/auth/Stage1Auth.sol\":{\"keccak256\":\"0x399e21aad2b30bf80a21766bd3442d676a26eb66c02423617b2772df7204cb0a\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://25c698dee10c6fbb8b63adb4023f1886669b8e9c54dcd98871f0bd6a2b6acf03\",\"dweb:/ipfs/QmNzUFWCoymaoV7CFgJvbAWRsJAZkqBhSpgff26JVAr9hf\"]},\"src/modules/auth/Stage2Auth.sol\":{\"keccak256\":\"0x5b23b530522ba1c02248d1f7470352c57fbc91c245c7c577044f93f6bb560a59\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c30b8e13edc7e18e4ea7bc7f4b8deaf16301a8f2bb23e7697e6f6b74882a39dc\",\"dweb:/ipfs/QmW69XvfeJepuPBrHb1Vpkikg43P4juEGdRkUWt8GrrAfL\"]},\"src/modules/interfaces/IAccount.sol\":{\"keccak256\":\"0x64ca3bb59ec4fc0a60d80402802365e2d5226afe7e7aabe3b21df936c84f2bcb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ccfd2381e1874cdec2f473a9a17799a3b57360c0593d68ee66fcea9c16eb39b4\",\"dweb:/ipfs/QmcjbJpGz3Exmu4fsj953Y2bG8rtQaVMEFUgT6W2dUXomr\"]},\"src/modules/interfaces/IAuth.sol\":{\"keccak256\":\"0xf6fa30af2ec91d5fbeac17c9b1f2aa73b7883c9ac98745605007e57666394b91\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://6e90a87978519462f9612f4a17e38fddc1c7bcf700ff834a1de7dce326f30353\",\"dweb:/ipfs/QmXmWAsRRK6t4jPs4VcXrouyokxdALM28D3odX7ub48WEp\"]},\"src/modules/interfaces/ICheckpointer.sol\":{\"keccak256\":\"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1\",\"dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t\"]},\"src/modules/interfaces/IDelegatedExtension.sol\":{\"keccak256\":\"0xa2ae897e90fd70dd4a9e172bc04d019ba9c512e72c2df65fcb6daf87dd5ceb90\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://cdf4b7c3dfb0aef6c9dbe8b2a0542018dc756ef2252d7101bcb3186192da0a11\",\"dweb:/ipfs/QmPHCVu1DJ7fBrPBYA5y3hoF3a3XFEBwYCZ1ErGaxPhcYL\"]},\"src/modules/interfaces/IERC1155Receiver.sol\":{\"keccak256\":\"0xa23d0bc29233a91085922ea8a7e2cbe8b5f3358d3f2c3cdc58adade9a171d9c1\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2f06b8f3ae7a45441cc26da5b2ddd15ba76d1664178958f63f536e6c5e4fd0fb\",\"dweb:/ipfs/QmR1Rnk8ciSn5s5wNLGvpE1QNRDsBVDfDT1ZXhei2brmFj\"]},\"src/modules/interfaces/IERC1271.sol\":{\"keccak256\":\"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b\",\"dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF\"]},\"src/modules/interfaces/IERC223Receiver.sol\":{\"keccak256\":\"0x426221c0d48b651ed692edfa5388d6e5304e94f48598a71748134b2659e3890d\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://9e1ed2fd5e390b5b943dc07c2e0ea9e524eb37263dc72c482365c159fc3659e5\",\"dweb:/ipfs/QmWRDBvb1cthVPm4BSzKX3J5GpGGSBuDokkpRK9x5aA7JR\"]},\"src/modules/interfaces/IERC721Receiver.sol\":{\"keccak256\":\"0xbe14c3b727f283a467dc2f2221d3322c5a69cd64a3aacad85acab05e94438f35\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://43ef086c509b8b88cae78f67c4bd979fd427736972cfe56f7423371ccc154e63\",\"dweb:/ipfs/Qmc7Yp7Z1dQ925gzEZYVNUXnWr3YomvWkXfaGYLZpoy8J3\"]},\"src/modules/interfaces/IERC777Receiver.sol\":{\"keccak256\":\"0xd9144d439a96b0c6439cd9a186701aa530f4f782ff09fdbf6c3ef16b78b0d4e5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d1f17484eda7184db4a00106b4952f15c1517872cbfe19663d6fce4e042729b2\",\"dweb:/ipfs/QmWdhYmLNkUpgvPpSyGHstxrFwMfhRTVmxDpe4frkUu1Qh\"]},\"src/modules/interfaces/IEntryPoint.sol\":{\"keccak256\":\"0xd19922ea7a8ae09072a721138dc93e175fa77ecaa3ac6f2d759d5e5e944fb665\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://20ecea69ddd4d8787c0bdc4487dea03e90f63f4296674a12728e331a78e62620\",\"dweb:/ipfs/QmZUrX8zEqfHZEJQjNtDUXGS47bj2UuRCLfbkLPrXsot1c\"]},\"src/modules/interfaces/IPartialAuth.sol\":{\"keccak256\":\"0x0d1aa021615d8e90696e71a9468331457a1babfa2ffe169654b7456e5bcb7a73\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://bbacd149a6358ab0d4b9c588d2e3a55fc71ed4723269150d7b91ca70092f6519\",\"dweb:/ipfs/QmUSwtrYCrRcRFsy5rCzdMPrw1FCU7ZoeXdsW6kK9yc8FK\"]},\"src/modules/interfaces/ISapient.sol\":{\"keccak256\":\"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489\",\"dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"src/utils/LibOptim.sol\":{\"keccak256\":\"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81\",\"dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x\"]},\"test/Stage1Module.t.sol\":{\"keccak256\":\"0xbf4263d9730842fc8215f103566eb2bc51bdaa8fe91728570b6ae4cad0f6cc1e\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://7b150190b594a3e39c764ac9466bd125d5935d88bb27840b189f0a0572f8b3b8\",\"dweb:/ipfs/QmP5EUoqUEPv79whfpVwvuMReAjMRrfJrHuBR5q8KPEtHB\"]},\"test/utils/PrimitivesRPC.sol\":{\"keccak256\":\"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe\",\"dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv\"]},\"test/utils/TestUtils.sol\":{\"keccak256\":\"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad\",\"dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint8","name":"kind","type":"uint8"}],"type":"error","name":"InvalidKind"},{"inputs":[{"internalType":"bytes32","name":"newImageHash","type":"bytes32","indexed":false}],"type":"event","name":"ImageHashUpdated","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32","indexed":false},{"internalType":"address","name":"_address","type":"address","indexed":false},{"internalType":"uint96","name":"_timestamp","type":"uint96","indexed":false}],"type":"event","name":"StaticSignatureSet","anonymous":false},{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log","anonymous":false},{"inputs":[{"internalType":"address","name":"","type":"address","indexed":false}],"type":"event","name":"log_address","anonymous":false},{"inputs":[{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"log_bytes","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32","indexed":false}],"type":"event","name":"log_bytes32","anonymous":false},{"inputs":[{"internalType":"int256","name":"","type":"int256","indexed":false}],"type":"event","name":"log_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address","name":"val","type":"address","indexed":false}],"type":"event","name":"log_named_address","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes","name":"val","type":"bytes","indexed":false}],"type":"event","name":"log_named_bytes","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes32","name":"val","type":"bytes32","indexed":false}],"type":"event","name":"log_named_bytes32","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false}],"type":"event","name":"log_named_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"string","name":"val","type":"string","indexed":false}],"type":"event","name":"log_named_string","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false}],"type":"event","name":"log_named_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log_string","anonymous":false},{"inputs":[{"internalType":"uint256","name":"","type":"uint256","indexed":false}],"type":"event","name":"log_uint","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"logs","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"IS_TEST","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeArtifacts","outputs":[{"internalType":"string[]","name":"excludedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeContracts","outputs":[{"internalType":"address[]","name":"excludedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"excludedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSenders","outputs":[{"internalType":"address[]","name":"excludedSenders_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"factory","outputs":[{"internalType":"contract Factory","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"failed","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"stage1Module","outputs":[{"internalType":"contract Stage1Module","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifactSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzArtifactSelector[]","name":"targetedArtifactSelectors_","type":"tuple[]","components":[{"internalType":"string","name":"artifact","type":"string"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifacts","outputs":[{"internalType":"string[]","name":"targetedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetContracts","outputs":[{"internalType":"address[]","name":"targetedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetInterfaces","outputs":[{"internalType":"struct StdInvariant.FuzzInterface[]","name":"targetedInterfaces_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"string[]","name":"artifacts","type":"string[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"targetedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSenders","outputs":[{"internalType":"address[]","name":"targetedSenders_","type":"address[]"}]},{"inputs":[{"internalType":"uint16","name":"_threshold","type":"uint16"},{"internalType":"uint56","name":"_checkpoint","type":"uint56"},{"internalType":"uint8","name":"_weight","type":"uint8"},{"internalType":"uint256","name":"_pk","type":"uint256"},{"internalType":"bytes32","name":"_digest","type":"bytes32"},{"internalType":"bool","name":"_noChainId","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"test_1271_single_signer"},{"inputs":[{"internalType":"uint16","name":"_threshold","type":"uint16"},{"internalType":"uint56","name":"_checkpoint","type":"uint56"},{"internalType":"uint8","name":"_weight","type":"uint8"},{"internalType":"uint256","name":"_pk","type":"uint256"},{"internalType":"bytes32","name":"_digest","type":"bytes32"},{"internalType":"bool","name":"_noChainId","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"test_fails_on_low_weight"},{"inputs":[{"internalType":"struct TestStage1Module.test_invalid_is_valid_signature_params","name":"params","type":"tuple","components":[{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"uint16","name":"threshold","type":"uint16"},{"internalType":"uint56","name":"checkpoint","type":"uint56"},{"internalType":"uint8","name":"weight","type":"uint8"},{"internalType":"uint256","name":"intendedPk","type":"uint256"},{"internalType":"uint256","name":"actualPk","type":"uint256"},{"internalType":"bool","name":"noChainId","type":"bool"}]}],"stateMutability":"nonpayable","type":"function","name":"test_invalid_is_valid_signature"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"test_receiveETH_stage1"},{"inputs":[{"internalType":"struct TestStage1Module.test_receiveETH_stage2_params","name":"params","type":"tuple","components":[{"internalType":"uint256","name":"pk","type":"uint256"},{"internalType":"uint256","name":"nextPk","type":"uint256"},{"internalType":"uint16","name":"threshold","type":"uint16"},{"internalType":"uint16","name":"nextThreshold","type":"uint16"},{"internalType":"uint56","name":"checkpoint","type":"uint56"}]}],"stateMutability":"nonpayable","type":"function","name":"test_receiveETH_stage2"},{"inputs":[{"internalType":"struct TestStage1Module.test_recover_partial_signature_params","name":"params","type":"tuple","components":[{"internalType":"struct Payload.Decoded","name":"payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"uint16","name":"threshold","type":"uint16"},{"internalType":"uint56","name":"checkpoint","type":"uint56"},{"internalType":"uint8","name":"signerWeight","type":"uint8"},{"internalType":"uint256","name":"pk","type":"uint256"},{"internalType":"bool","name":"signPayload","type":"bool"},{"internalType":"bool","name":"useEthSign","type":"bool"},{"internalType":"bool","name":"noChainId","type":"bool"}]}],"stateMutability":"nonpayable","type":"function","name":"test_recover_partial_signature"},{"inputs":[{"internalType":"struct TestStage1Module.nested_sapient_test_params","name":"params","type":"tuple","components":[{"internalType":"struct Payload.Decoded","name":"payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"uint16","name":"threshold","type":"uint16"},{"internalType":"uint56","name":"checkpoint","type":"uint56"},{"internalType":"uint8","name":"weight","type":"uint8"},{"internalType":"uint256","name":"pk","type":"uint256"},{"internalType":"address","name":"parentWallet","type":"address"}]}],"stateMutability":"nonpayable","type":"function","name":"test_recover_sapient_as_if_nested"},{"inputs":[{"internalType":"struct TestStage1Module.nested_sapient_test_params","name":"params","type":"tuple","components":[{"internalType":"struct Payload.Decoded","name":"payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"uint16","name":"threshold","type":"uint16"},{"internalType":"uint56","name":"checkpoint","type":"uint56"},{"internalType":"uint8","name":"weight","type":"uint8"},{"internalType":"uint256","name":"pk","type":"uint256"},{"internalType":"address","name":"parentWallet","type":"address"}]},{"internalType":"uint56","name":"_differentCheckpoint","type":"uint56"}],"stateMutability":"nonpayable","type":"function","name":"test_recover_sapient_as_if_nested_wrong_signature_fail"},{"inputs":[{"internalType":"bytes32","name":"_digest","type":"bytes32"},{"internalType":"bytes32","name":"_imageHash","type":"bytes32"},{"internalType":"uint256","name":"_startTime","type":"uint256"},{"internalType":"uint256","name":"_validUntil","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"test_reverts_invalid_static_signature_expired"},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"bytes32","name":"_imageHash","type":"bytes32"},{"internalType":"address","name":"_sigAddress","type":"address"},{"internalType":"uint96","name":"_timestamp","type":"uint96"},{"internalType":"address","name":"_caller","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"test_reverts_set_static_signature_not_self"},{"inputs":[{"internalType":"uint16","name":"_threshold","type":"uint16"},{"internalType":"uint56","name":"_checkpoint","type":"uint56"},{"internalType":"uint8","name":"_weight","type":"uint8"},{"internalType":"uint256","name":"_pk","type":"uint256"},{"internalType":"bool","name":"_noChainId","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"test_reverts_update_to_zero_image_hash"},{"inputs":[{"internalType":"bytes32","name":"_digest","type":"bytes32"},{"internalType":"bytes32","name":"_imageHash","type":"bytes32"},{"internalType":"uint256","name":"_timestamp","type":"uint256"},{"internalType":"uint256","name":"_validUntil","type":"uint256"},{"internalType":"address","name":"_otherCaller","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"test_static_signature_any_address"},{"inputs":[{"internalType":"bytes32","name":"_digest","type":"bytes32"},{"internalType":"bytes32","name":"_imageHash","type":"bytes32"},{"internalType":"uint256","name":"_timestamp","type":"uint256"},{"internalType":"uint256","name":"_validUntil","type":"uint256"},{"internalType":"address","name":"_onlyAddress","type":"address"},{"internalType":"address","name":"_otherCaller","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"test_static_signature_specific_address"},{"inputs":[{"internalType":"struct TestStage1Module.test_update_config_params","name":"params","type":"tuple","components":[{"internalType":"uint16","name":"threshold","type":"uint16"},{"internalType":"uint56","name":"checkpoint","type":"uint56"},{"internalType":"uint8","name":"weight","type":"uint8"},{"internalType":"uint256","name":"pk","type":"uint256"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"uint16","name":"nextThreshold","type":"uint16"},{"internalType":"uint56","name":"nextCheckpoint","type":"uint56"},{"internalType":"uint8","name":"nextWeight","type":"uint8"},{"internalType":"uint256","name":"nextPk","type":"uint256"},{"internalType":"bytes32","name":"digest","type":"bytes32"}]}],"stateMutability":"nonpayable","type":"function","name":"test_update_config"},{"inputs":[{"internalType":"struct TestStage1Module.test_update_image_hash_then_zero_params","name":"params","type":"tuple","components":[{"internalType":"uint16","name":"threshold1","type":"uint16"},{"internalType":"uint56","name":"checkpoint1","type":"uint56"},{"internalType":"uint8","name":"weight1","type":"uint8"},{"internalType":"uint256","name":"pk1","type":"uint256"},{"internalType":"uint16","name":"threshold2","type":"uint16"},{"internalType":"uint56","name":"checkpoint2","type":"uint56"},{"internalType":"uint8","name":"weight2","type":"uint8"},{"internalType":"uint256","name":"pk2","type":"uint256"},{"internalType":"bool","name":"noChainId","type":"bool"}]}],"stateMutability":"nonpayable","type":"function","name":"test_update_image_hash_then_zero"},{"inputs":[{"internalType":"struct TestStage1Module.test_update_image_hash_twice_params","name":"params","type":"tuple","components":[{"internalType":"uint16","name":"threshold1","type":"uint16"},{"internalType":"uint56","name":"checkpoint1","type":"uint56"},{"internalType":"uint8","name":"weight1","type":"uint8"},{"internalType":"uint256","name":"pk1","type":"uint256"},{"internalType":"uint16","name":"threshold2","type":"uint16"},{"internalType":"uint56","name":"checkpoint2","type":"uint56"},{"internalType":"uint8","name":"weight2","type":"uint8"},{"internalType":"uint256","name":"pk2","type":"uint256"},{"internalType":"bool","name":"noChainId","type":"bool"}]}],"stateMutability":"nonpayable","type":"function","name":"test_update_image_hash_twice"},{"inputs":[],"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/Stage1Module.t.sol":"TestStage1Module"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/Factory.sol":{"keccak256":"0x5924fe583809e9c148d47c871866f6094599bb07a4d1fc2d60c814fda9c37f46","urls":["bzz-raw://e24d3575bf2606cd5f0f6da093e420118e018549eeb3a4ccb94f57c0e285e123","dweb:/ipfs/QmRvWQt91YLJEgk5hgnRkPjDdB39tUHLYtxijYyXKdCm5J"],"license":"Apache-2.0"},"src/Stage1Module.sol":{"keccak256":"0x3e3be2778ac65aded03c15a73b4382a6a7dde0bcc69d1268255fd734e320d084","urls":["bzz-raw://c4d8846d35267bf7bc895c04e3d91b525274ae0677ec3b5529cba02577a2bb67","dweb:/ipfs/QmaZq74rdyLUwRGCfacFXVS7kAL2FhTm3u356kHLtggfiW"],"license":"Apache-2.0"},"src/Stage2Module.sol":{"keccak256":"0xd0b2c2fead81d32a3f83f95bd1dd2d90677fdd1e0a7194a25710ffd0fdaee428","urls":["bzz-raw://8489e75346dbf462b0567da30c2e020cdde3975c38bdfee055284642a3bd2d19","dweb:/ipfs/QmTDM2AkG8qLVjfn35UcXN89CdQS8p3Cm888EadYrMAYAR"],"license":"Apache-2.0"},"src/Wallet.sol":{"keccak256":"0xe01e9e937dd8d7572976ccc8ec3ec87e4a557069dafb05f85977a7b71f5c58d5","urls":["bzz-raw://2e9ab78d33655f8e822258dff3f2d5ad01e84f6dc90174840d5a283b8e6413c1","dweb:/ipfs/QmNMyYe3C1fs3cxKmUZ3S9VU5EE4WVWPVcwiGbgvbS1vrH"],"license":"Apache-2.0"},"src/modules/Calls.sol":{"keccak256":"0xcd0d38d0fd248e4443032dede2b8892ea0ca7e55538cd54082830f6b98d8edb1","urls":["bzz-raw://617bb6d0724b18f3d77347cc454a57c1c916a0818a592552bd7fa226aa41a306","dweb:/ipfs/Qmeet85Ux6cKq9JmC25JnTzFnRrgDpkyRik2svZLWt4fov"],"license":"Apache-2.0"},"src/modules/ERC4337v07.sol":{"keccak256":"0xbee11ed2498b892b16f72984c848fea85b58d15313fffa78c1e48ca7208f9189","urls":["bzz-raw://2d9296803bd52f5e2ae84011593f686802f1cadf6c68a4ee9f97e6455463ae0f","dweb:/ipfs/QmXmWwUiV2eshxxdY5zCyJ7rxcH7bztxcAoh1scw2MPuhP"],"license":"Apache-2.0"},"src/modules/Hooks.sol":{"keccak256":"0xd1f9de45b83ae5f9f32a4d1c709d7a2b6543b1cddd09bf69d401dcdf1d154ab7","urls":["bzz-raw://bf3161edf37479825588e07039752b79792666455cc0beb1ca0e873b3be31ad4","dweb:/ipfs/QmYYpJeSsRgRx2oHcpvhqsNs7ZtDhVnxLmFpXz5eYcS8g4"],"license":"Apache-2.0"},"src/modules/Implementation.sol":{"keccak256":"0x16546d4be07865808890308750916b0a9a55e7a994a458c01edde4618f29b4e6","urls":["bzz-raw://1b1f9785b08c9f29d6849ba2d3dee89fa3ea5f3c2feec4a59a6d1040e3fbe040","dweb:/ipfs/QmU2Pm5C3Ztky7RQdCZggavyq7Eh1eS1HFqVz9jZKiMUML"],"license":"Apache-2.0"},"src/modules/Nonce.sol":{"keccak256":"0x56fbf6dc9b34ab60ae8a32ffb6f583c003bb8f4a5223ce704e982400fa403fab","urls":["bzz-raw://492f53628633b862702cf8f9b726067a722c94028133a8a4c4fcf3d0e73ad803","dweb:/ipfs/QmTHNy4XbH47YZaqKDpknb5aApjRH9HVAREHN7N5vEFWEV"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/Storage.sol":{"keccak256":"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f","urls":["bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da","dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn"],"license":"Apache-2.0"},"src/modules/auth/BaseAuth.sol":{"keccak256":"0xbf2e40def03fcb5f4a5129b2f5803e21951325b92e00126cbe1427b7c25cfefd","urls":["bzz-raw://b560905fcc4b957d27c2abed78a1e82529c89fa472e91b3d108fbfd91aa7c3f7","dweb:/ipfs/QmRjLLtTWE6dFX2kBQCgLz7ossfMxhAFgDC8Jx9XuGL6Wy"],"license":"Apache-2.0"},"src/modules/auth/BaseSig.sol":{"keccak256":"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa","urls":["bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8","dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3"],"license":"Apache-2.0"},"src/modules/auth/SelfAuth.sol":{"keccak256":"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c","urls":["bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42","dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W"],"license":"Apache-2.0"},"src/modules/auth/Stage1Auth.sol":{"keccak256":"0x399e21aad2b30bf80a21766bd3442d676a26eb66c02423617b2772df7204cb0a","urls":["bzz-raw://25c698dee10c6fbb8b63adb4023f1886669b8e9c54dcd98871f0bd6a2b6acf03","dweb:/ipfs/QmNzUFWCoymaoV7CFgJvbAWRsJAZkqBhSpgff26JVAr9hf"],"license":"Apache-2.0"},"src/modules/auth/Stage2Auth.sol":{"keccak256":"0x5b23b530522ba1c02248d1f7470352c57fbc91c245c7c577044f93f6bb560a59","urls":["bzz-raw://c30b8e13edc7e18e4ea7bc7f4b8deaf16301a8f2bb23e7697e6f6b74882a39dc","dweb:/ipfs/QmW69XvfeJepuPBrHb1Vpkikg43P4juEGdRkUWt8GrrAfL"],"license":"Apache-2.0"},"src/modules/interfaces/IAccount.sol":{"keccak256":"0x64ca3bb59ec4fc0a60d80402802365e2d5226afe7e7aabe3b21df936c84f2bcb","urls":["bzz-raw://ccfd2381e1874cdec2f473a9a17799a3b57360c0593d68ee66fcea9c16eb39b4","dweb:/ipfs/QmcjbJpGz3Exmu4fsj953Y2bG8rtQaVMEFUgT6W2dUXomr"],"license":"MIT"},"src/modules/interfaces/IAuth.sol":{"keccak256":"0xf6fa30af2ec91d5fbeac17c9b1f2aa73b7883c9ac98745605007e57666394b91","urls":["bzz-raw://6e90a87978519462f9612f4a17e38fddc1c7bcf700ff834a1de7dce326f30353","dweb:/ipfs/QmXmWAsRRK6t4jPs4VcXrouyokxdALM28D3odX7ub48WEp"],"license":"Apache-2.0"},"src/modules/interfaces/ICheckpointer.sol":{"keccak256":"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513","urls":["bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1","dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t"],"license":"Apache-2.0"},"src/modules/interfaces/IDelegatedExtension.sol":{"keccak256":"0xa2ae897e90fd70dd4a9e172bc04d019ba9c512e72c2df65fcb6daf87dd5ceb90","urls":["bzz-raw://cdf4b7c3dfb0aef6c9dbe8b2a0542018dc756ef2252d7101bcb3186192da0a11","dweb:/ipfs/QmPHCVu1DJ7fBrPBYA5y3hoF3a3XFEBwYCZ1ErGaxPhcYL"],"license":"Apache-2.0"},"src/modules/interfaces/IERC1155Receiver.sol":{"keccak256":"0xa23d0bc29233a91085922ea8a7e2cbe8b5f3358d3f2c3cdc58adade9a171d9c1","urls":["bzz-raw://2f06b8f3ae7a45441cc26da5b2ddd15ba76d1664178958f63f536e6c5e4fd0fb","dweb:/ipfs/QmR1Rnk8ciSn5s5wNLGvpE1QNRDsBVDfDT1ZXhei2brmFj"],"license":"Apache-2.0"},"src/modules/interfaces/IERC1271.sol":{"keccak256":"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9","urls":["bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b","dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF"],"license":"Apache-2.0"},"src/modules/interfaces/IERC223Receiver.sol":{"keccak256":"0x426221c0d48b651ed692edfa5388d6e5304e94f48598a71748134b2659e3890d","urls":["bzz-raw://9e1ed2fd5e390b5b943dc07c2e0ea9e524eb37263dc72c482365c159fc3659e5","dweb:/ipfs/QmWRDBvb1cthVPm4BSzKX3J5GpGGSBuDokkpRK9x5aA7JR"],"license":"Apache-2.0"},"src/modules/interfaces/IERC721Receiver.sol":{"keccak256":"0xbe14c3b727f283a467dc2f2221d3322c5a69cd64a3aacad85acab05e94438f35","urls":["bzz-raw://43ef086c509b8b88cae78f67c4bd979fd427736972cfe56f7423371ccc154e63","dweb:/ipfs/Qmc7Yp7Z1dQ925gzEZYVNUXnWr3YomvWkXfaGYLZpoy8J3"],"license":"Apache-2.0"},"src/modules/interfaces/IERC777Receiver.sol":{"keccak256":"0xd9144d439a96b0c6439cd9a186701aa530f4f782ff09fdbf6c3ef16b78b0d4e5","urls":["bzz-raw://d1f17484eda7184db4a00106b4952f15c1517872cbfe19663d6fce4e042729b2","dweb:/ipfs/QmWdhYmLNkUpgvPpSyGHstxrFwMfhRTVmxDpe4frkUu1Qh"],"license":"Apache-2.0"},"src/modules/interfaces/IEntryPoint.sol":{"keccak256":"0xd19922ea7a8ae09072a721138dc93e175fa77ecaa3ac6f2d759d5e5e944fb665","urls":["bzz-raw://20ecea69ddd4d8787c0bdc4487dea03e90f63f4296674a12728e331a78e62620","dweb:/ipfs/QmZUrX8zEqfHZEJQjNtDUXGS47bj2UuRCLfbkLPrXsot1c"],"license":"MIT"},"src/modules/interfaces/IPartialAuth.sol":{"keccak256":"0x0d1aa021615d8e90696e71a9468331457a1babfa2ffe169654b7456e5bcb7a73","urls":["bzz-raw://bbacd149a6358ab0d4b9c588d2e3a55fc71ed4723269150d7b91ca70092f6519","dweb:/ipfs/QmUSwtrYCrRcRFsy5rCzdMPrw1FCU7ZoeXdsW6kK9yc8FK"],"license":"Apache-2.0"},"src/modules/interfaces/ISapient.sol":{"keccak256":"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359","urls":["bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489","dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"src/utils/LibOptim.sol":{"keccak256":"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde","urls":["bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81","dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x"],"license":"Apache-2.0"},"test/Stage1Module.t.sol":{"keccak256":"0xbf4263d9730842fc8215f103566eb2bc51bdaa8fe91728570b6ae4cad0f6cc1e","urls":["bzz-raw://7b150190b594a3e39c764ac9466bd125d5935d88bb27840b189f0a0572f8b3b8","dweb:/ipfs/QmP5EUoqUEPv79whfpVwvuMReAjMRrfJrHuBR5q8KPEtHB"],"license":"Apache-2.0"},"test/utils/PrimitivesRPC.sol":{"keccak256":"0x97afe072f103492c3d408a245f26dff7a013664f9105b5b446319103020cb0fe","urls":["bzz-raw://36f77222dce01864cdcfbdf3a1a4f0416a7d5ea717ed7b1a3cb30970abfbcbbe","dweb:/ipfs/QmQtjGDkg2xCDr85Vyjfs6kZ54A52J6W56UHoG9VhsruBv"],"license":"Apache-2.0"},"test/utils/TestUtils.sol":{"keccak256":"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79","urls":["bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad","dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa"],"license":"Apache-2.0"}},"version":1},"id":74} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Stage2Auth.sol/Stage2Auth.json b/contracts/artifacts/wallet-contracts-v3/Stage2Auth.sol/Stage2Auth.json new file mode 100644 index 00000000..6f158ab1 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Stage2Auth.sol/Stage2Auth.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"getImplementation","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getStaticSignature","inputs":[{"name":"_hash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"imageHash","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"isValidSignature","inputs":[{"name":"_hash","type":"bytes32","internalType":"bytes32"},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"view"},{"type":"function","name":"recoverPartialSignature","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"threshold","type":"uint256","internalType":"uint256"},{"name":"weight","type":"uint256","internalType":"uint256"},{"name":"isValidImage","type":"bool","internalType":"bool"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"checkpoint","type":"uint256","internalType":"uint256"},{"name":"opHash","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"recoverSapientSignature","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"setStaticSignature","inputs":[{"name":"_hash","type":"bytes32","internalType":"bytes32"},{"name":"_address","type":"address","internalType":"address"},{"name":"_timestamp","type":"uint96","internalType":"uint96"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateImageHash","inputs":[{"name":"_imageHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateImplementation","inputs":[{"name":"_implementation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"payable"},{"type":"event","name":"ImageHashUpdated","inputs":[{"name":"newImageHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"ImplementationUpdated","inputs":[{"name":"newImplementation","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"StaticSignatureSet","inputs":[{"name":"_hash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_address","type":"address","indexed":false,"internalType":"address"},{"name":"_timestamp","type":"uint96","indexed":false,"internalType":"uint96"}],"anonymous":false},{"type":"error","name":"ImageHashIsZero","inputs":[]},{"type":"error","name":"InvalidERC1271Signature","inputs":[{"name":"_opHash","type":"bytes32","internalType":"bytes32"},{"name":"_signer","type":"address","internalType":"address"},{"name":"_signature","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"InvalidKind","inputs":[{"name":"kind","type":"uint8","internalType":"uint8"}]},{"type":"error","name":"InvalidSapientSignature","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"InvalidSignatureFlag","inputs":[{"name":"_flag","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidSignatureWeight","inputs":[{"name":"_threshold","type":"uint256","internalType":"uint256"},{"name":"_weight","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidStaticSignatureExpired","inputs":[{"name":"_opHash","type":"bytes32","internalType":"bytes32"},{"name":"_expires","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidStaticSignatureWrongCaller","inputs":[{"name":"_opHash","type":"bytes32","internalType":"bytes32"},{"name":"_caller","type":"address","internalType":"address"},{"name":"_expectedCaller","type":"address","internalType":"address"}]},{"type":"error","name":"LowWeightChainedSignature","inputs":[{"name":"_signature","type":"bytes","internalType":"bytes"},{"name":"_threshold","type":"uint256","internalType":"uint256"},{"name":"_weight","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"OnlySelf","inputs":[{"name":"_sender","type":"address","internalType":"address"}]},{"type":"error","name":"UnusedSnapshot","inputs":[{"name":"_snapshot","type":"tuple","internalType":"struct Snapshot","components":[{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"checkpoint","type":"uint256","internalType":"uint256"}]}]},{"type":"error","name":"WrongChainedCheckpointOrder","inputs":[{"name":"_nextCheckpoint","type":"uint256","internalType":"uint256"},{"name":"_checkpoint","type":"uint256","internalType":"uint256"}]}],"bytecode":{"object":"0x60808060405234601557612719908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c8063025b22bc146100a757806313792a4a146100a25780631626ba7e1461009d578063295614261461009857806351605d801461009357806392dcb3fc1461008e578063aaf10f4214610089578063ad55366b146100845763f727ef1c1461007f57600080fd5b6109c3565b610977565b610926565b6108c8565b61086d565b6107b4565b61072c565b61062f565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610153576100d9610158565b303303610125578073ffffffffffffffffffffffffffffffffffffffff913055166080527f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca0360206080a1005b7fa19dbf00000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b600080fd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361015357565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361015357565b359073ffffffffffffffffffffffffffffffffffffffff8216820361015357565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff82111761020a57604052565b6101bf565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761020a57604052565b6040519061025f60e08361020f565b565b6040519061025f6101208361020f565b359060ff8216820361015357565b3590811515820361015357565b67ffffffffffffffff811161020a5760051b60200190565b92919267ffffffffffffffff821161020a57604051916102ec60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116018461020f565b829481845281830111610153578281602093846000960137010152565b9080601f8301121561015357816020610324933591016102a4565b90565b81601f820112156101535780359061033e8261028c565b9261034c604051948561020f565b82845260208085019360051b830101918183116101535760208101935b83851061037857505050505090565b843567ffffffffffffffff811161015357820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08286030112610153576103bf610250565b916103cc6020830161019e565b83526040820135602084015260608201359267ffffffffffffffff84116101535760e083610401886020809881980101610309565b60408401526080810135606084015261041c60a0820161027f565b608084015261042d60c0820161027f565b60a0840152013560c0820152815201940193610369565b9080601f8301121561015357813561045b8161028c565b92610469604051948561020f565b81845260208085019260051b82010192831161015357602001905b8282106104915750505090565b6020809161049e8461019e565b815201910190610484565b9181601f840112156101535782359167ffffffffffffffff8311610153576020838186019501011161015357565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126101535760043567ffffffffffffffff8111610153576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc828503011261015357610549610261565b9061055681600401610271565b82526105646024820161027f565b6020830152604481013567ffffffffffffffff81116101535784600461058c92840101610327565b6040830152606481013560608301526084810135608083015260a481013567ffffffffffffffff8111610153578460046105c892840101610309565b60a083015260c481013560c083015260e481013560e083015261010481013567ffffffffffffffff81116101535760048591610605930101610444565b610100820152916024359067ffffffffffffffff82116101535761062b916004016104a9565b9091565b346101535761063d366104d7565b9091610100810192610658610653855151610b33565b610b53565b9160005b855180518210156106bf57906106b961069461067a83600195610bd1565b5173ffffffffffffffffffffffffffffffffffffffff1690565b61069e8388610bd1565b9073ffffffffffffffffffffffffffffffffffffffff169052565b0161065c565b50508383866106d43361069e83515185610bd1565b526106e0818484610ee4565b50156106f25760405160018152602090f35b610728906040519384937ff58cc8b500000000000000000000000000000000000000000000000000000000855260048501610da8565b0390fd5b346101535760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101535760043560243567ffffffffffffffff81116101535760209161078461078a9236906004016104a9565b91610e8f565b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b346101535760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015357600435303303610125578015610843576020817f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf855604051908152a1005b7f4294d1270000000000000000000000000000000000000000000000000000000060005260046000fd5b346101535760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101535760207fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf854604051908152f35b346101535760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101535760406109046004356110c9565b73ffffffffffffffffffffffffffffffffffffffff8351921682526020820152f35b346101535760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610153576020305473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346101535760c061099360008061098d366104d7565b916111e2565b9261099f8392936114f5565b906040519586526020860152151560408501526060840152608083015260a0820152f35b346101535760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610153576004356109fd61017b565b604435916bffffffffffffffffffffffff831680930361015357303303610125577febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b19273ffffffffffffffffffffffffffffffffffffffff60609360405160208101610ac482610a9888849190602060408401937fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e8681520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810184528361020f565b847fffffffffffffffffffffffffffffffffffffffff00000000000000000000000084891b161791519020556040519384521660208301526040820152a1005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9060018201809211610b4157565b610b04565b91908201809211610b4157565b90610b5d8261028c565b610b6a604051918261020f565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610b98829461028c565b0190602036910137565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8051821015610be55760209160051b010190565b610ba2565b919082519283825260005b848110610c345750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201610bf5565b9080602083519182815201916020808360051b8301019401926000915b838310610c7557505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080610ce8604085015160e0604086015260e0850190610bea565b936060810151606085015260808101511515608085015260a0810151151560a0850152015191015297019301930191939290610c66565b906020808351928381520192019060005b818110610d3d5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101610d30565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b91610e81610324949260408552610dc560408601825160ff169052565b602081015115156060860152610100610e3a610df2604084015161012060808a0152610160890190610c49565b606084015160a0890152608084015160c089015260a08401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08983030160e08a0152610bea565b9160c08101518288015260e081015161012088015201517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086830301610140870152610d1f565b926020818503910152610d69565b90610eac9291610e9d61106e565b906003825260e0820152610ee4565b5015610ed6577f1626ba7e0000000000000000000000000000000000000000000000000000000090565b600090565b9015610be55790565b91907f800000000000000000000000000000000000000000000000000000000000000080610f3b610f158585610edb565b357fff000000000000000000000000000000000000000000000000000000000000001690565b1614610f9a576000918291610f4f946111e2565b905091909192808210610f6a575050610f67906114f5565b91565b7ffd41fcba0000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b5050610fa59061152a565b90610faf826110c9565b4281111561103c575073ffffffffffffffffffffffffffffffffffffffff81168015159081611031575b50610fe5575060019190565b7f8945c3130000000000000000000000000000000000000000000000000000000060005260048390523360245273ffffffffffffffffffffffffffffffffffffffff1660445260646000fd5b905033141538610fd9565b7ff95b6ab700000000000000000000000000000000000000000000000000000000600052600484905260245260446000fd5b60405190610120820182811067ffffffffffffffff82111761020a576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b604051611135816111096020820194859190602060408401937fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e8681520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261020f565b51902054906bffffffffffffffffffffffff8260601c921690565b6040519061115d826101ee565b60006020838281520152565b90939293848311610153578411610153578101920390565b908160409103126101535760206040519161119b836101ee565b805183520151602082015290565b60409073ffffffffffffffffffffffffffffffffffffffff61032494931681528160208201520190610bea565b6040513d6000823e3d90fd5b909491939291853560f81c600190938190876111fc611150565b93604080891614806114d7575b6113d5575b5050506001808616146113af5760028581161460208501526007600286901c1688820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190809691819660201661127e9060051c90565b61128790610b33565b8a820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101959098899a816112d38461152a565b9889936112df93611169565b916112e993611827565b90986112fd91600052602052604060002090565b9061131091600052602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff1661133991600052602052604060002090565b948151908682151592836113a4575b505081611395575b506113585750565b6040517fccbb534f000000000000000000000000000000000000000000000000000000008152815160048201526020909101516024820152604490fd5b90506020820151101538611350565b141591508638611348565b866113ca97929495506113c29398611169565b9390926115b6565b919394909293929190565b8a81013560601c985060140192509087908a908490156113f9575b5082915061120e565b60038101955073ffffffffffffffffffffffffffffffffffffffff945081013560e81c9260409261147c9290916114479161144091899061143a8983610b46565b92611169565b36916102a4565b83519586809481937fccce3bc800000000000000000000000000000000000000000000000000000000835230600484016111a9565b0392165afa80156114d25761149a926000916114a3575b5092610b46565b863889816113f0565b6114c5915060403d6040116114cb575b6114bd818361020f565b810190611181565b38611493565b503d6114b3565b6111d6565b5073ffffffffffffffffffffffffffffffffffffffff891615611209565b8015159081611502575090565b90507fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8541490565b61110961158c61154a6115446020850151151530906120a3565b9361219e565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b51902090565b906115ac9060409396959496606084526060840191610d69565b9460208201520152565b91949290926000956000956000956000956000956115d261106e565b60028152937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9460005b8281106116295750505050505050805115158061161b575b6113585750565b506020810151841115611614565b600381019d50959b509399509197509290919061164d908b9085013560e81c610b46565b958a6000848903611791575089915b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c0361176157509060016116968961169d948789611169565b908b6111e2565b9c939c9b929b9a919a99909a9b9d8e9d9e8f905b1061171b5750928b885114611712575b808b10156116e057508a60c085015289929592959491949390936115fc565b7f37daf62b0000000000000000000000000000000000000000000000000000000060005260048b905260245260446000fd5b600088526116c1565b8d8f61072861172c85858c8e611169565b9390926040519485947fb006aba000000000000000000000000000000000000000000000000000000000865260048601611592565b9798999a9160016117778b61177e94888a611169565b90866111e2565b50929d919c909b929a9092918e8e6116b1565b9161165c565b9081602091031261015357517fffffffff00000000000000000000000000000000000000000000000000000000811681036101535790565b604090610324949281528160208201520191610d69565b73ffffffffffffffffffffffffffffffffffffffff610324959360609383521660208201528160408201520191610d69565b90816020910312610153575190565b9391909360009460009460005b818110611842575050505050565b8481013560f881901c9860019092019788979692909160fc1c98891561203c575060018914611ffc5760028914611e2f5760038914611e005760048914611d7f5760068914611cd95760058914611c8b5760078914611bc45760088914611b6e5760098914611a4557600a89146118e2577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b90919293949596975060038916978815611a34575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101908101908161195a918787611169565b6040517f898bd92100000000000000000000000000000000000000000000000000000000815293918491611992918a600485016117cf565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa9182156114d2576119d593600093611a01575b5060ff909a168091019a61250a565b9080156119fb57906119ef91600052602052604060002090565b955b9392919093611834565b506119ef565b60ff919350611a269060203d8111611a2d575b611a1e818361020f565b810190611818565b92906119c6565b503d611a14565b8084013560f81c98506001016118f7565b90919293949596975060038916978815611b5d575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691019081019081611abd918787611169565b6040517f13792a4a00000000000000000000000000000000000000000000000000000000815293918491611af5918b60048501610da8565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa9182156114d257611b3793600093611a01575060ff909a168091019a61250a565b908015611b575790611b5191600052602052604060002090565b956119f1565b50611b51565b8084013560f81c9850600101611a5a565b985060208701975094959394929391929091820135611b8c866124b1565b8114611b9c575b611b37906124cb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9850611b93565b975090919293949597600f16968715611c79575b60206000611bea611c579a9b86612379565b9c9092918a604051611c2d816111098a82019485603c917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008252601c8201520190565b51902092604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa156114d257611b379060ff6000519a16809101996123bc565b600189019883013560f81c9750611bd8565b985060208701975094959394929391929091820135808514611cb1575b611b3790612472565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9850611ca8565b989091929394959662ffffff9850611d01611cfb600c8416603f9060021c1690565b60ff1690565b918215611d6b575b6003168015611d5a575b908190611d3e90611d36908781013560e81c906003019c168c01809c8989611169565b90898b611827565b911115611d51575b90611b379291612427565b99820199611d46565b50600281019084013560f01c611d13565b8482013560f81c9250600190910190611d09565b975097611dd5611de2929394959697600f611dea93169085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290830180938686611169565b908688611827565b90611b5192980198600052602052604060002090565b985096509394929391929091908082013590602001968015611b575790611b5191600052602052604060002090565b90919293949596975060038916978815611feb575b8084013560601c99611ea39160140190611e639060021c600316611cfb565b9085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b90810190611f0760208c611eb985858b8b611169565b919073ffffffffffffffffffffffffffffffffffffffff8c604051968795869485937f1626ba7e000000000000000000000000000000000000000000000000000000008552600485016117cf565b0392165afa9081156114d2577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091611fbd575b501603611f7957509060ff611b37929916809101996123bc565b610728611f8a8c9389938989611169565b906040519485947fb2fed7ae000000000000000000000000000000000000000000000000000000008652600486016117e6565b611fde915060203d8111611fe4575b611fd6818361020f565b810190611797565b38611f5f565b503d611fcc565b8381013560f81c9850600101611e44565b98600f9192939495969798501696871561202b575b6014810197611b379160ff9091169084013560601c6123bc565b8281013560f81c9750600101612011565b98509091929394959698600f1697881561208e575b5060206000612064611c579a9b86612379565b9c90916040519384938c859094939260ff6060936080840197845216602083015260408201520152565b60018101995083013560f81c97506020612051565b15612153576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a0815261158c60c08261020f565b46906120ac565b805160209091019060005b8181106121725750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101612165565b6101008101516040516121b98161110960208201809561215a565b519020906121c8815160ff1690565b60ff8116806122415750509061158c6121e460408401516125a8565b9261110960806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b6001810361229f57505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4669381019384529081019190915260608101929092529061158c8160808101611109565b600281036122f557505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e46020820190815291810192909252606082019290925261158c8160808101611109565b600303612349575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4666020820190815291810192909252606082019290925261158c8160808101611109565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff8111610b415791565b90604051907fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208301937f53657175656e6365207369676e65723a0a000000000000000000000000000000855260601b16603183015260458201526045815261158c60658261020f565b916040519160208301937f53657175656e6365206e657374656420636f6e6669673a0a000000000000000085526038840152605883015260788201526078815261158c60988261020f565b60405160208101917f53657175656e636520737461746963206469676573743a0a0000000000000000835260388201526038815261158c60588261020f565b61110961158c61154a6115446000602086015115156120a3565b60405160208101917f53657175656e636520616e792061646472657373207375626469676573743a0a835260408201526040815261158c60608261020f565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e63652073617069656e7420636f6e6669673a0a00000000000000865260601b166039840152604d830152606d820152606d815261158c608d8261020f565b805160209091019060005b8181106125925750505090565b8251845260209384019390920191600101612585565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06125ee6125d88361028c565b926125e6604051948561020f565b80845261028c565b0136602083013760005b83518110156126ca578061260e60019286610bd1565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e083015261010082015261010081526126b66101208261020f565b5190206126c38285610bd1565b52016125f8565b5090915060405161158c8161110960208201809561257a56fea26469706673582212200644657e0f191a8365374382304d572fd6707792589cac3431b0b425fd0aaf8364736f6c634300081c0033","sourceMap":"334:1073:54:-:0;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436101561001257600080fd5b60003560e01c8063025b22bc146100a757806313792a4a146100a25780631626ba7e1461009d578063295614261461009857806351605d801461009357806392dcb3fc1461008e578063aaf10f4214610089578063ad55366b146100845763f727ef1c1461007f57600080fd5b6109c3565b610977565b610926565b6108c8565b61086d565b6107b4565b61072c565b61062f565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610153576100d9610158565b303303610125578073ffffffffffffffffffffffffffffffffffffffff913055166080527f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca0360206080a1005b7fa19dbf00000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b600080fd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361015357565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361015357565b359073ffffffffffffffffffffffffffffffffffffffff8216820361015357565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff82111761020a57604052565b6101bf565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761020a57604052565b6040519061025f60e08361020f565b565b6040519061025f6101208361020f565b359060ff8216820361015357565b3590811515820361015357565b67ffffffffffffffff811161020a5760051b60200190565b92919267ffffffffffffffff821161020a57604051916102ec60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116018461020f565b829481845281830111610153578281602093846000960137010152565b9080601f8301121561015357816020610324933591016102a4565b90565b81601f820112156101535780359061033e8261028c565b9261034c604051948561020f565b82845260208085019360051b830101918183116101535760208101935b83851061037857505050505090565b843567ffffffffffffffff811161015357820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08286030112610153576103bf610250565b916103cc6020830161019e565b83526040820135602084015260608201359267ffffffffffffffff84116101535760e083610401886020809881980101610309565b60408401526080810135606084015261041c60a0820161027f565b608084015261042d60c0820161027f565b60a0840152013560c0820152815201940193610369565b9080601f8301121561015357813561045b8161028c565b92610469604051948561020f565b81845260208085019260051b82010192831161015357602001905b8282106104915750505090565b6020809161049e8461019e565b815201910190610484565b9181601f840112156101535782359167ffffffffffffffff8311610153576020838186019501011161015357565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126101535760043567ffffffffffffffff8111610153576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc828503011261015357610549610261565b9061055681600401610271565b82526105646024820161027f565b6020830152604481013567ffffffffffffffff81116101535784600461058c92840101610327565b6040830152606481013560608301526084810135608083015260a481013567ffffffffffffffff8111610153578460046105c892840101610309565b60a083015260c481013560c083015260e481013560e083015261010481013567ffffffffffffffff81116101535760048591610605930101610444565b610100820152916024359067ffffffffffffffff82116101535761062b916004016104a9565b9091565b346101535761063d366104d7565b9091610100810192610658610653855151610b33565b610b53565b9160005b855180518210156106bf57906106b961069461067a83600195610bd1565b5173ffffffffffffffffffffffffffffffffffffffff1690565b61069e8388610bd1565b9073ffffffffffffffffffffffffffffffffffffffff169052565b0161065c565b50508383866106d43361069e83515185610bd1565b526106e0818484610ee4565b50156106f25760405160018152602090f35b610728906040519384937ff58cc8b500000000000000000000000000000000000000000000000000000000855260048501610da8565b0390fd5b346101535760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101535760043560243567ffffffffffffffff81116101535760209161078461078a9236906004016104a9565b91610e8f565b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b346101535760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261015357600435303303610125578015610843576020817f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf855604051908152a1005b7f4294d1270000000000000000000000000000000000000000000000000000000060005260046000fd5b346101535760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101535760207fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf854604051908152f35b346101535760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101535760406109046004356110c9565b73ffffffffffffffffffffffffffffffffffffffff8351921682526020820152f35b346101535760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610153576020305473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346101535760c061099360008061098d366104d7565b916111e2565b9261099f8392936114f5565b906040519586526020860152151560408501526060840152608083015260a0820152f35b346101535760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610153576004356109fd61017b565b604435916bffffffffffffffffffffffff831680930361015357303303610125577febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b19273ffffffffffffffffffffffffffffffffffffffff60609360405160208101610ac482610a9888849190602060408401937fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e8681520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810184528361020f565b847fffffffffffffffffffffffffffffffffffffffff00000000000000000000000084891b161791519020556040519384521660208301526040820152a1005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9060018201809211610b4157565b610b04565b91908201809211610b4157565b90610b5d8261028c565b610b6a604051918261020f565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610b98829461028c565b0190602036910137565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8051821015610be55760209160051b010190565b610ba2565b919082519283825260005b848110610c345750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201610bf5565b9080602083519182815201916020808360051b8301019401926000915b838310610c7557505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080610ce8604085015160e0604086015260e0850190610bea565b936060810151606085015260808101511515608085015260a0810151151560a0850152015191015297019301930191939290610c66565b906020808351928381520192019060005b818110610d3d5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101610d30565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b91610e81610324949260408552610dc560408601825160ff169052565b602081015115156060860152610100610e3a610df2604084015161012060808a0152610160890190610c49565b606084015160a0890152608084015160c089015260a08401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08983030160e08a0152610bea565b9160c08101518288015260e081015161012088015201517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086830301610140870152610d1f565b926020818503910152610d69565b90610eac9291610e9d61106e565b906003825260e0820152610ee4565b5015610ed6577f1626ba7e0000000000000000000000000000000000000000000000000000000090565b600090565b9015610be55790565b91907f800000000000000000000000000000000000000000000000000000000000000080610f3b610f158585610edb565b357fff000000000000000000000000000000000000000000000000000000000000001690565b1614610f9a576000918291610f4f946111e2565b905091909192808210610f6a575050610f67906114f5565b91565b7ffd41fcba0000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b5050610fa59061152a565b90610faf826110c9565b4281111561103c575073ffffffffffffffffffffffffffffffffffffffff81168015159081611031575b50610fe5575060019190565b7f8945c3130000000000000000000000000000000000000000000000000000000060005260048390523360245273ffffffffffffffffffffffffffffffffffffffff1660445260646000fd5b905033141538610fd9565b7ff95b6ab700000000000000000000000000000000000000000000000000000000600052600484905260245260446000fd5b60405190610120820182811067ffffffffffffffff82111761020a576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b604051611135816111096020820194859190602060408401937fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e8681520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261020f565b51902054906bffffffffffffffffffffffff8260601c921690565b6040519061115d826101ee565b60006020838281520152565b90939293848311610153578411610153578101920390565b908160409103126101535760206040519161119b836101ee565b805183520151602082015290565b60409073ffffffffffffffffffffffffffffffffffffffff61032494931681528160208201520190610bea565b6040513d6000823e3d90fd5b909491939291853560f81c600190938190876111fc611150565b93604080891614806114d7575b6113d5575b5050506001808616146113af5760028581161460208501526007600286901c1688820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190809691819660201661127e9060051c90565b61128790610b33565b8a820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101959098899a816112d38461152a565b9889936112df93611169565b916112e993611827565b90986112fd91600052602052604060002090565b9061131091600052602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff1661133991600052602052604060002090565b948151908682151592836113a4575b505081611395575b506113585750565b6040517fccbb534f000000000000000000000000000000000000000000000000000000008152815160048201526020909101516024820152604490fd5b90506020820151101538611350565b141591508638611348565b866113ca97929495506113c29398611169565b9390926115b6565b919394909293929190565b8a81013560601c985060140192509087908a908490156113f9575b5082915061120e565b60038101955073ffffffffffffffffffffffffffffffffffffffff945081013560e81c9260409261147c9290916114479161144091899061143a8983610b46565b92611169565b36916102a4565b83519586809481937fccce3bc800000000000000000000000000000000000000000000000000000000835230600484016111a9565b0392165afa80156114d25761149a926000916114a3575b5092610b46565b863889816113f0565b6114c5915060403d6040116114cb575b6114bd818361020f565b810190611181565b38611493565b503d6114b3565b6111d6565b5073ffffffffffffffffffffffffffffffffffffffff891615611209565b8015159081611502575090565b90507fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8541490565b61110961158c61154a6115446020850151151530906120a3565b9361219e565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b51902090565b906115ac9060409396959496606084526060840191610d69565b9460208201520152565b91949290926000956000956000956000956000956115d261106e565b60028152937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9460005b8281106116295750505050505050805115158061161b575b6113585750565b506020810151841115611614565b600381019d50959b509399509197509290919061164d908b9085013560e81c610b46565b958a6000848903611791575089915b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c0361176157509060016116968961169d948789611169565b908b6111e2565b9c939c9b929b9a919a99909a9b9d8e9d9e8f905b1061171b5750928b885114611712575b808b10156116e057508a60c085015289929592959491949390936115fc565b7f37daf62b0000000000000000000000000000000000000000000000000000000060005260048b905260245260446000fd5b600088526116c1565b8d8f61072861172c85858c8e611169565b9390926040519485947fb006aba000000000000000000000000000000000000000000000000000000000865260048601611592565b9798999a9160016117778b61177e94888a611169565b90866111e2565b50929d919c909b929a9092918e8e6116b1565b9161165c565b9081602091031261015357517fffffffff00000000000000000000000000000000000000000000000000000000811681036101535790565b604090610324949281528160208201520191610d69565b73ffffffffffffffffffffffffffffffffffffffff610324959360609383521660208201528160408201520191610d69565b90816020910312610153575190565b9391909360009460009460005b818110611842575050505050565b8481013560f881901c9860019092019788979692909160fc1c98891561203c575060018914611ffc5760028914611e2f5760038914611e005760048914611d7f5760068914611cd95760058914611c8b5760078914611bc45760088914611b6e5760098914611a4557600a89146118e2577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b90919293949596975060038916978815611a34575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101908101908161195a918787611169565b6040517f898bd92100000000000000000000000000000000000000000000000000000000815293918491611992918a600485016117cf565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa9182156114d2576119d593600093611a01575b5060ff909a168091019a61250a565b9080156119fb57906119ef91600052602052604060002090565b955b9392919093611834565b506119ef565b60ff919350611a269060203d8111611a2d575b611a1e818361020f565b810190611818565b92906119c6565b503d611a14565b8084013560f81c98506001016118f7565b90919293949596975060038916978815611b5d575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691019081019081611abd918787611169565b6040517f13792a4a00000000000000000000000000000000000000000000000000000000815293918491611af5918b60048501610da8565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa9182156114d257611b3793600093611a01575060ff909a168091019a61250a565b908015611b575790611b5191600052602052604060002090565b956119f1565b50611b51565b8084013560f81c9850600101611a5a565b985060208701975094959394929391929091820135611b8c866124b1565b8114611b9c575b611b37906124cb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9850611b93565b975090919293949597600f16968715611c79575b60206000611bea611c579a9b86612379565b9c9092918a604051611c2d816111098a82019485603c917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008252601c8201520190565b51902092604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa156114d257611b379060ff6000519a16809101996123bc565b600189019883013560f81c9750611bd8565b985060208701975094959394929391929091820135808514611cb1575b611b3790612472565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9850611ca8565b989091929394959662ffffff9850611d01611cfb600c8416603f9060021c1690565b60ff1690565b918215611d6b575b6003168015611d5a575b908190611d3e90611d36908781013560e81c906003019c168c01809c8989611169565b90898b611827565b911115611d51575b90611b379291612427565b99820199611d46565b50600281019084013560f01c611d13565b8482013560f81c9250600190910190611d09565b975097611dd5611de2929394959697600f611dea93169085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290830180938686611169565b908688611827565b90611b5192980198600052602052604060002090565b985096509394929391929091908082013590602001968015611b575790611b5191600052602052604060002090565b90919293949596975060038916978815611feb575b8084013560601c99611ea39160140190611e639060021c600316611cfb565b9085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b90810190611f0760208c611eb985858b8b611169565b919073ffffffffffffffffffffffffffffffffffffffff8c604051968795869485937f1626ba7e000000000000000000000000000000000000000000000000000000008552600485016117cf565b0392165afa9081156114d2577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091611fbd575b501603611f7957509060ff611b37929916809101996123bc565b610728611f8a8c9389938989611169565b906040519485947fb2fed7ae000000000000000000000000000000000000000000000000000000008652600486016117e6565b611fde915060203d8111611fe4575b611fd6818361020f565b810190611797565b38611f5f565b503d611fcc565b8381013560f81c9850600101611e44565b98600f9192939495969798501696871561202b575b6014810197611b379160ff9091169084013560601c6123bc565b8281013560f81c9750600101612011565b98509091929394959698600f1697881561208e575b5060206000612064611c579a9b86612379565b9c90916040519384938c859094939260ff6060936080840197845216602083015260408201520152565b60018101995083013560f81c97506020612051565b15612153576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a0815261158c60c08261020f565b46906120ac565b805160209091019060005b8181106121725750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101612165565b6101008101516040516121b98161110960208201809561215a565b519020906121c8815160ff1690565b60ff8116806122415750509061158c6121e460408401516125a8565b9261110960806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b6001810361229f57505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4669381019384529081019190915260608101929092529061158c8160808101611109565b600281036122f557505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e46020820190815291810192909252606082019290925261158c8160808101611109565b600303612349575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4666020820190815291810192909252606082019290925261158c8160808101611109565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff8111610b415791565b90604051907fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208301937f53657175656e6365207369676e65723a0a000000000000000000000000000000855260601b16603183015260458201526045815261158c60658261020f565b916040519160208301937f53657175656e6365206e657374656420636f6e6669673a0a000000000000000085526038840152605883015260788201526078815261158c60988261020f565b60405160208101917f53657175656e636520737461746963206469676573743a0a0000000000000000835260388201526038815261158c60588261020f565b61110961158c61154a6115446000602086015115156120a3565b60405160208101917f53657175656e636520616e792061646472657373207375626469676573743a0a835260408201526040815261158c60608261020f565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e63652073617069656e7420636f6e6669673a0a00000000000000865260601b166039840152604d830152606d820152606d815261158c608d8261020f565b805160209091019060005b8181106125925750505090565b8251845260209384019390920191600101612585565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06125ee6125d88361028c565b926125e6604051948561020f565b80845261028c565b0136602083013760005b83518110156126ca578061260e60019286610bd1565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e083015261010082015261010081526126b66101208261020f565b5190206126c38285610bd1565b52016125f8565b5090915060405161158c8161110960208201809561257a56fea26469706673582212200644657e0f191a8365374382304d572fd6707792589cac3431b0b425fd0aaf8364736f6c634300081c0033","sourceMap":"334:1073:54:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;401:4:52;379:10;:27;375:75;;401:4;334:1073:54;401:4:52;;1125:46:46;334:1073:54;;;1013:38:46;334:1073:54;;1013:38:46;334:1073:54;375:75:52;423:20;334:1073:54;423:20:52;379:10;334:1073:54;;;;423:20:52;334:1073:54;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;334:1073:54;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;4682:22:50;;;;;;4668:48;4682:33;:22;;334:1073:54;4682:33:50;:::i;:::-;4668:48;:::i;:::-;4728:13;-1:-1:-1;4778:3:50;4747:22;;334:1073:54;;4743:33:50;;;;;4810:25;4791:44;4810:25;;;4714:1;4810:25;;:::i;:::-;334:1073:54;;;;;4810:25:50;4791:44;;;;:::i;:::-;334:1073:54;;;;;;4791:44:50;334:1073:54;4728:13:50;;4743:33;;;;;;4848:57;4895:10;4848:57;4862:22;;334:1073:54;4848:57:50;;:::i;:::-;4911:38;4974:41;;;;;:::i;:::-;5025:8;;5021:81;;334:1073:54;;4714:1:50;334:1073:54;;;;;5021:81:50;5050:45;334:1073:54;;;5050:45:50;;;;;;334:1073:54;5050:45:50;;;:::i;:::-;;;;334:1073:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;401:4:52;379:10;:27;375:75;;1242:24:54;;1238:69;;334:1073;260:41:49;1371:28:54;260:41:49;509:66:54;260:41:49;334:1073:54;;;;;1371:28;334:1073;1238:69;1283:17;-1:-1:-1;1283:17:54;334:1073;-1:-1:-1;1283:17:54;334:1073;;;;;;;;;;;;509:66;394:41:49;334:1073:54;;;;;;;;;;;;;;;;;;2500:26:50;334:1073:54;;2500:26:50;:::i;:::-;334:1073:54;;;;;;;;;;;;;;;;;;;;;;;;1252:47:46;;334:1073:54;;;;;;;;;;;;;5879:56:50;-1:-1:-1;334:1073:54;;;;:::i;:::-;5879:56:50;;:::i;:::-;5956:24;;;;;;:::i;:::-;334:1073:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;401:4:52;379:10;:27;375:75;;2998:47:50;334:1073:54;;;;;;;552:25:49;;;;;;;334:1073:54;;;;;;;834:66:50;334:1073:54;;;;;552:25:49;;;;;;;;;:::i;:::-;334:1073:54;;;;;;2051:76:50;334:1073:54;;542:36:49;;584:40;334:1073:54;;;;;;;;;;;;;;2998:47:50;334:1073:54;;;;;;;;;;;;;4714:1:50;334:1073:54;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;334:1073:54;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;334:1073:54;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;334:1073:54;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;5170:322:50:-;;5358:40;5170:322;;334:1073:54;;:::i;:::-;2556:4:48;;;;4826:15;;;2556:4;5358:40:50;:::i;:::-;5408:8;;5404:45;;334:1073:54;5170:322:50;:::o;5404:45::-;334:1073:54;5426:16:50;:::o;334:1073:54:-;;;;;;:::o;3301:1109:50:-;;;334:1073:54;3555:13:50;;;;;;:::i;:::-;;334:1073:54;;;;3555:13:50;3579:20;:28;3575:429;;3566:1;4188:56;;;;;;:::i;:::-;4146:98;;;;;4282:18;;;;4278:87;;4381:24;;;;;:::i;:::-;3301:1109;:::o;4278:87::-;4317:41;3566:1;4317:41;3772:48;334:1073:54;;;;3566:1:50;4317:41;3575:429;3626:15;;;;;:::i;:::-;3686:27;;;;:::i;:::-;3738:15;3725:28;;;3721:108;;334:1073:54;;;;3841:18:50;;;:40;;;;3575:429;3837:131;;;3976:21;3984:4;3976:21;;:::o;3837:131::-;3900:59;3566:1;3900:59;;334:1073:54;;;3942:10:50;334:1073:54;;;;;;;3566:1:50;4317:41;3841:40;3871:10;;;3863:18;;3841:40;;;3721:108;3772:48;3566:1;3772:48;;334:1073:54;;;;;;3566:1:50;4317:41;334:1073:54;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;334:1073:54;;-1:-1:-1;334:1073:54;;;;;;;;;-1:-1:-1;334:1073:54;;;;-1:-1:-1;334:1073:54;;;;;;;;;-1:-1:-1;334:1073:54;;;;-1:-1:-1;334:1073:54;;;;;;:::o;1637:245:50:-;334:1073:54;;753:25:49;;;;;;;;334:1073:54;;;;;;;834:66:50;334:1073:54;;;;;753:25:49;;;;;;;;;:::i;:::-;334:1073:54;743:36:49;;785:40;826:75:50;334:1073:54;826:75:50;1849:2;826:75;334:1073:54;;1637:245:50;:::o;334:1073:54:-;;;;;;;:::i;:::-;-1:-1:-1;334:1073:54;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2963:3141:51;;;;;;;566:109:68;;;;;3268:69:51;;;3762:24;334:1073:54;;;:::i;:::-;3963:20:51;3979:4;3963:20;;;:28;:59;;;2963:3141;3959:742;;2963:3141;4774:20;;;4790:4;4774:20;;;:28;4770:126;;5004:4;4988:20;;;:28;4967:18;;;334:1073:54;826:75:50;334:1073:54;826:75:50;;;;2363:226:68;;;;;;;;;;;;;;;;;;;;;;;;;5158:67:51;;;;;5330:20;4967:18;5330:20;5329:27;;334:1073:54;826:75:50;;;5329:27:51;5328:33;;;:::i;:::-;2363:226:68;;;;;;;;;;;;;;;;;;;;;;;;;5369:65:51;;;;5480:15;;;;;:::i;:::-;5555:19;;;;;;:::i;:::-;5523:52;;;;:::i;:::-;5501:74;5594:50;;;545:85:69;;;;;;;461:173;;5594:50:51;5662:51;;;545:85:69;;;;;;;461:173;;5662:51:51;334:1073:54;;;5731:72:51;;545:85:69;;;;;;;461:173;;5731:72:51;334:1073:54;;;5948:32:51;;;;;:67;;;;2963:3141;5948:104;;;;;2963:3141;5944:156;;;2963:3141;:::o;5944:156::-;3979:4;334:1073:54;6069:24:51;;;334:1073:54;;6069:24:51;;;334:1073:54;;;;;;;;;;;;5050:45:50;5948:104:51;6033:19;;4967:18;6033:19;;334:1073:54;-1:-1:-1;6019:33:51;5948:104;;;:67;5984:31;;;-1:-1:-1;5948:67:51;;;;4770:126;4869:19;4819:70;4869:19;;;;;;;;;:::i;:::-;4819:70;;;;:::i;:::-;4812:77;;;;;;;;;:::o;3959:742::-;3281:184:68;;;;;;;-1:-1:-1;3281:184:68;;;-1:-1:-1;3162:307:68;3281:184;;;;;;4197:20:51;4193:502;;3959:742;;;;;;;4193:502;1318:135:68;;;;-1:-1:-1;334:1073:54;;-1:-1:-1;1318:135:68;;;;;;3979:4:51;;4572:73;;3979:4;;334:1073:54;;4471:48:51;;1318:135:68;;4489:29:51;1318:135:68;;4489:29:51;:::i;:::-;4471:48;;:::i;:::-;334:1073:54;;;:::i;:::-;;;4572:73:51;;;;;;334:1073:54;4572:73:51;;4621:4;4572:73;;;;:::i;:::-;;334:1073:54;;4572:73:51;;;;;;4656:30;4572:73;-1:-1:-1;4572:73:51;;;4193:502;4561:84;4656:30;;:::i;:::-;4193:502;;;;;;4572:73;;;;3979:4;4572:73;3979:4;4572:73;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;:::i;3963:59::-;334:1073:54;;;;3995:27:51;3963:59;;956:192:54;1066:24;;;:77;;;;1059:84;956:192;:::o;1066:77::-;394:41:49;;509:66:54;394:41:49;1094:49:54;956:192;:::o;9564:274:48:-;9784:48;;9743:18;9666:50;9682:18;;;334:1073:54;;;9710:4:48;9666:50;;:::i;:::-;9743:18;;:::i;:::-;334:1073:54;;9784:48:48;;;9682:18;9784:48;;;;334:1073:54;;;;;;;;;;;;;;;;;;9784:48:48;334:1073:54;9774:59:48;;9564:274;:::o;2482:4::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;334:1073:54;2482:4:48;334:1073:54;2482:4:48:o;6108:1663:51:-;;;;;;334:1073:54;6304:14:51;334:1073:54;6320:17:51;334:1073:54;6339:18:51;334:1073:54;6359:14:51;334:1073:54;;;;:::i;:::-;;2556:4:48;;6423:47:51;6522:17;;334:1073:54;6553:26:51;;;;;;334:1073:54;;;;;;;;;7647:33:51;;:71;;;6546:1091;7643:124;;6108:1663;:::o;7647:71::-;7698:20;;;;334:1073:54;7684:34:51;;;7647:71;;6546:1091;1318:135:68;;;;-1:-1:-1;1201:256:68;;-1:-1:-1;1201:256:68;;-1:-1:-1;1201:256:68;;-1:-1:-1;1201:256:68;;;;6717:16:51;;1318:135:68;;;;;;;6717:16:51;:::i;:::-;6773:57;;334:1073:54;6773:28:51;;;;;:57;;;;6522:17;6843:35;;6522:17;;6971:26;;6999:4;6971:26;;6953:65;6971:26;;;;:::i;:::-;6953:65;;;:::i;:::-;6890:128;;;;;;;;;;;;;;;;6839:339;;;;7190:18;7186:122;;7315:16;334:1073:54;;;;7344:32:51;7340:89;;6839:339;7441:28;;;;7437:115;;7560:23;;;;;2556:4:48;7603:27:51;6546:1091;;;;;;;;;;;;7437:115;7488:55;334:1073:54;7488:55:51;3772:48:50;334:1073:54;;;;;;3566:1:50;4317:41;7340:89:51;334:1073:54;2556:4:48;;7340:89:51;;7186:122;7253:26;;7227:72;7253:26;;;;;;:::i;:::-;334:1073:54;;;;;7227:72:51;;;;;;;;;;:::i;6839:339::-;7122:26;;;;;7150:4;7122:26;;7099:70;7122:26;;;;:::i;:::-;7099:70;;;:::i;:::-;-1:-1:-1;7043:126:51;;;;;;;;;;;;;6839:339;;6773:57;;;;842:1;;;;;;;;;;334:1073:54;;;842:1:51;;;;;:::o;:::-;;;;;;334:1073:54;;842:1:51;;;;;;;;:::i;:::-;334:1073:54;842:1:51;;;;;334:1073:54;;;842:1:51;;;334:1073:54;842:1:51;;;;;;;;:::i;1206:::-;;;;;;;;;334:1073:54;1206:1:51;:::o;7775:11084::-;;;;;334:1073:54;7930:12:51;334:1073:54;7968:14:51;334:1073:54;8044:26:51;;;;;;7775:11084;;;;;:::o;8037:10812::-;798:135:68;;;;;;;;;;;;;;;;683:254;;;;826:75:50;;8454:27:51;;;8450:864;;9374:20;786:1;9374:20;;9370:676;;842:1;10096:30;;10092:1383;;885:1;11512:17;;11508:279;;8405:1;11826:19;;11822:656;;1023:1;12517:19;;12513:1278;;978:1;13833:22;;13829:518;;1080:1;14398:31;;14394:933;;1150:1;15464:44;;15460:617;;1206:1;16127:30;;16123:1308;;1270:2;17489:38;;17485:1312;;18814:26;334:1073:54;18814:26:51;8405:1;334:1073:54;;;1270:2:51;3566:1:50;4317:41;17485:1312:51;17799:16;;;;;;;;;885:1;17799:16;;17832:15;;;17828:99;;17485:1312;3281:184:68;;;;;;;;;18081:16:51;;334:1073:54;826:75:50;;;334:1073:54;;2363:226:68;;;;;;;;;;;;;;;;;;;;;;;;;740:1:51;;;18467:26;;;;;;;:::i;:::-;334:1073:54;;;18405:89:51;;334:1073:54;;;;18405:89:51;;334:1073:54;8405:1:51;18405:89;;;:::i;:::-;;334:1073:54;;;;18405:89:51;;;;;;;;;;;;18637:51;18405:89;334:1073:54;18405:89:51;;;17485:1312;18506:16;334:1073:54;18506:16:51;334:1073:54;;740:1:51;;;18637:51;;:::i;:::-;18707:59;:18;;;;18728:31;;;545:85:69;;;;;;;461:173;;18728:31:51;18778:8;8037:10812;;;;;;;;18707:59;;;;18405:89;334:1073:54;18405:89:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;17828:99;798:135:68;;;;;;;-1:-1:-1;798:135:68;;17828:99:51;;16123:1308;16429:16;;;;;;;;;885:1;16429:16;;16462:15;;;16458:99;;16123:1308;3281:184:68;;;;;;;;;16749:16:51;;334:1073:54;826:75:50;;;334:1073:54;;2363:226:68;;;;;;;;;;;;;;;;;;;;;;;;;740:1:51;;;17100:26;;;;;;;:::i;:::-;334:1073:54;;;17051:76:51;;334:1073:54;;;;17051:76:51;;334:1073:54;8405:1:51;17051:76;;;:::i;:::-;;334:1073:54;;;;17051:76:51;;;;;;;;;;;;17271:51;17051:76;334:1073:54;17051:76:51;;;17139:16;334:1073:54;17139:16:51;334:1073:54;;740:1:51;;;17271:51;;:::i;:::-;17341:59;:18;;;;17362:31;;;545:85:69;;;;;;;461:173;;17362:31:51;17412:8;;;17341:59;;;;16458:99;798:135:68;;;;;;;-1:-1:-1;798:135:68;;16458:99:51;;15460:617;2926:232:68;-1:-1:-1;3047:107:68;;;;-1:-1:-1;2926:232:68;;;;;;;;;;3047:107;;;15775:28:51;2926:232:68;15775:28:51;:::i;:::-;15819:29;;15815:88;;15460:617;15930:38;;;:::i;15815:88::-;15873:17;;-1:-1:-1;15815:88:51;;14394:933;14742:16;;;;;;;;;14754:4;14742:16;14775:15;;;14771:99;;14394:933;15044:61;334:1073:54;3511:494:68;15024:92:51;3511:494:68;;;;:::i;:::-;14943:53:51;;;;334:1073:54;;;15044:61:51;;;;;;;;1080:1;;;;;;;;334:1073:54;1080:1:51;;;15044:61;334:1073:54;15034:72:51;;334:1073:54;;;15024:92:51;;;;740:1;;;;334:1073:54;740:1:51;;;;;334:1073:54;;;;740:1:51;;;334:1073:54;740:1:51;;;334:1073:54;740:1:51;334:1073:54;740:1:51;15024:92;;;;;;786:1;15024:92;;;;;15176:42;15024:92;334:1073:54;;15024:92:51;334:1073:54;;740:1:51;;;15176:42;;:::i;14771:99::-;798:135:68;;;;;;;;;;-1:-1:-1;14771:99:51;;13829:518;2926:232:68;-1:-1:-1;3047:107:68;;;;-1:-1:-1;2926:232:68;;;;;;;;;;3047:107;;;14099:20:51;;;14095:79;;13829:518;14201:37;;;:::i;14095:79::-;14144:17;;-1:-1:-1;14095:79:51;;12513:1278;12882:16;;;;;;;;334:1073:54;12882:16:51;;12851:53;12876:28;12894:4;12882:16;;826:75:50;842:1:51;334:1073:54;826:75:50;;842:1:51;;12876:28;334:1073:54;;;;12851:53:51;12920:19;;;12916:107;;12513:1278;885:1;13069:16;13102:22;;13098:114;;12513:1278;1201:256:68;;;13399:60:51;;13432:26;;1318:135:68;;;;;;;;;334:1073:54;;740:1:51;;13432:26;;;;;:::i;:::-;13399:60;;;;:::i;:::-;13471:16;-1:-1:-1;13504:35:51;13500:92;;12513:1278;13619:63;;;;;:::i;13500:92::-;740:1;;;;13500:92;;13098:114;-1:-1:-1;1058:135:68;;;;;;;;;13098:114:51;;12916:107;798:135:68;;;;;;;-1:-1:-1;798:135:68;;;;;12916:107:51;;11822:656;12023:16;;;2213:380:68;12312:26:51;12023:16;;;;;;12035:4;12279:60;12023:16;;2213:380:68;;;;;;2363:226;;;;;;;;;;;;;;;;;;;2213:380;;;740:1:51;;;;12312:26;;;;;:::i;:::-;12279:60;;;;:::i;:::-;;12416:31;12279:60;740:1;;12416:31;545:85:69;;;;;;;461:173;;11508:279:51;2926:232:68;-1:-1:-1;2926:232:68;-1:-1:-1;2926:232:68;;;;;;;;;3047:107;;;;;;;11697:59:51;:18;;;;11718:31;;;545:85:69;;;;;;;461:173;;10092:1383:51;10387:16;;;;;;;;;885:1;10387:16;;10420:15;;;10416:99;;10092:1383;3281:184:68;;;;;;;2213:380;;3281:184;;;10669:47:51;;334:1073:54;826:75:50;;;10688:28:51;842:1;10669:47;2213:380:68;;;;;;2363:226;;;;;;;;;;;;;;;;;;;2213:380;;;740:1:51;;;11024:26;10983:68;;11024:26;;;;;;;:::i;:::-;334:1073:54;;;;;;10983:68:51;;;;;;;334:1073:54;10983:68:51;;8405:1;10983:68;;;:::i;:::-;;334:1073:54;;10983:68:51;;;;;;;334:1073:54;10983:68:51;334:1073:54;10983:68:51;334:1073:54;10983:68:51;;;10092:1383;334:1073:54;;10983:97:51;10979:203;;11193:16;;334:1073:54;11324:42:51;11193:16;334:1073:54;;740:1:51;;;11324:42;;:::i;10979:203::-;11103:66;11142:26;;;;;;;;:::i;:::-;334:1073:54;;;11103:66:51;;;;;;8405:1;11103:66;;;:::i;10983:68::-;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;10416:99;798:135:68;;;;;;;-1:-1:-1;798:135:68;;10416:99:51;;9370:676;9567:16;9579:4;9567:16;;;;;;;;;;9600:15;;;9596:99;;9370:676;3281:184:68;;;;9895:42:51;;334:1073:54;;;;;3281:184:68;;;;;9895:42:51;:::i;9596:99::-;798:135:68;;;;;;;-1:-1:-1;798:135:68;;9596:99:51;;8450:864;8794:16;;;;;;;;;;8806:4;8794:16;8827:15;;;8823:99;;8450:864;3511:494:68;9076:27:51;334:1073:54;3511:494:68;9076:27:51;3511:494:68;;;;:::i;:::-;8995:53:51;;;334:1073:54;;9076:27:51;;;;;740:1;;;;334:1073:54;740:1:51;;;;;334:1073:54;;;;740:1:51;;;334:1073:54;740:1:51;;;334:1073:54;740:1:51;334:1073:54;740:1:51;8823:99;798:135:68;;;;-1:-1:-1;798:135:68;;;;;;-1:-1:-1;9076:27:51;8823:99;;939:351:48;1206:48;;;-1:-1:-1;1206:48:48;;334:1073:54;;;1077:202:48;;;;334:1073:54;539:66:48;334:1073:54;;709:66:48;334:1073:54;868:66:48;;334:1073:54;868:66:48;;;;334:1073:54;868:66:48;;;334:1073:54;;868:66:48;;;334:1073:54;868:66:48;1077:202;;;;;;:::i;1206:48::-;1240:13;1206:48;;;334:1073:54;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;8278:1282:48;8416:22;;;;334:1073:54;;8399:40:48;;334:1073:54;8399:40:48;;;334:1073:54;;;:::i;8399:40:48:-;334:1073:54;8389:51:48;;334:1073:54;;;;;;;;;;;;8451:34:48;334:1073:54;;8525:14:48;;;8712:82;8515:25;334:1073:54;8525:14:48;;;8515:25;:::i;:::-;8750:14;8712:82;8766:14;8750;;;334:1073:54;8766:14:48;;334:1073:54;;;;8712:82:48;;;8399:40;8712:82;;;;1799:66;;;;;;;;;334:1073:54;1799:66:48;334:1073:54;;1799:66:48;;;334:1073:54;1799:66:48;;;334:1073:54;1799:66:48;;;334:1073:54;1799:66:48;334:1073:54;1799:66:48;8447:1109;2395:4;8812:29;;2395:4;;-1:-1:-1;;8998:16:48;;;334:1073:54;;8399:40:48;334:1073:54;;;8988:27:48;334:1073:54;;;1979:66:48;8959:70;;;334:1073:54;;;1979:66:48;;;334:1073:54;;;;1979:66:48;;;334:1073:54;;;;8959:70:48;;334:1073:54;1979:66:48;;;8959:70;1979:66;8808:748;2482:4;9047:35;;2482:4;;-1:-1:-1;;9216:18:48;;334:1073:54;;;;2174:66:48;8399:40;9181:67;;334:1073:54;;;1979:66:48;;;334:1073:54;;;;1979:66:48;;;334:1073:54;;;;9181:67:48;334:1073:54;1979:66:48;;;9181:67;1979:66;9043:513;2556:4;9266:28;2556:4;;-1:-1:-1;9443:15:48;;334:1073:54;;;;1979:66:48;8399:40;9414:58;;334:1073:54;;;1979:66:48;;;334:1073:54;;;;1979:66:48;;;334:1073:54;;;;9414:58:48;334:1073:54;1979:66:48;;;9414:58;1979:66;9262:294;9523:26;334:1073:54;9523:26:48;334:1073:54;;9523:26:48;334:1073:54;2395:4:48;3566:1:50;4317:41;3511:494:68;3690:173;;;;;;;;;;;;3998:2;3955:14;3931:39;;826:75:50;334:1073:54;826:75:50;334:1073:54;;;;;;3511:494:68;:::o;1947:181:51:-;;334:1073:54;;2068:54:51;334:1073:54;2068:54:51;;;334:1073:54;;;;;;;;;;;;;;;;2068:54:51;;;;;;:::i;2132:210::-;;334:1073:54;;2263:73:51;;;;334:1073:54;;;;;;;;;;;;;;;;;2263:73:51;;;;;;:::i;2562:182::-;334:1073:54;;2681:57:51;;;334:1073:54;;;;;;;;;2681:57:51;;;;;;:::i;9842:280:48:-;10068:48;;10027:18;9956:44;334:1073:54;9972:18:48;;;334:1073:54;;;9956:44:48;:::i;2748:211:51:-;334:1073:54;;2878:75:51;;;334:1073:54;;;;;;;;;2878:75:51;;;;;;:::i;2346:212::-;;334:1073:54;;2478:74:51;334:1073:54;2478:74:51;;;334:1073:54;;;;;;;;;;;;;;;;;;;;2478:74:51;;;;;;:::i;334:1073:54:-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;7820:454:48;;334:1073:54;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;-1:-1:-1;8164:3:48;334:1073:54;;8146:16:48;;;;;8202:8;;334:1073:54;8202:8:48;;;:::i;:::-;;334:1073:54;;;;7708:7:48;334:1073:54;7708:7:48;;334:1073:54;7727:6:48;334:1073:54;7727:6:48;;;334:1073:54;;;;;7717:17:48;7736:10;;;;334:1073:54;7748:14:48;;;334:1073:54;;;7764:14:48;7780:17;7764:14;;;334:1073:54;;;7780:17:48;;334:1073:54;;;;7667:138:48;334:1073:54;7667:138:48;;334:1073:54;1478:66:48;334:1073:54;;;1478:66:48;;334:1073:54;7736:10:48;1478:66;;334:1073:54;7748:14:48;1478:66;;334:1073:54;7764:14:48;1478:66;;334:1073:54;7780:17:48;1478:66;;334:1073:54;1478:66:48;;;334:1073:54;1478:66:48;;;334:1073:54;1478:66:48;7667:138;;;;;;:::i;:::-;334:1073:54;7650:161:48;;8177:34;;;;:::i;:::-;2556:4;334:1073:54;8131:13:48;;8146:16;;;;;334:1073:54;;8240:28:48;;334:1073:54;;8240:28:48;;334:1073:54;;;:::i","linkReferences":{}},"methodIdentifiers":{"getImplementation()":"aaf10f42","getStaticSignature(bytes32)":"92dcb3fc","imageHash()":"51605d80","isValidSignature(bytes32,bytes)":"1626ba7e","recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":"ad55366b","recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":"13792a4a","setStaticSignature(bytes32,address,uint96)":"f727ef1c","updateImageHash(bytes32)":"29561426","updateImplementation(address)":"025b22bc"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ImageHashIsZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_signer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"InvalidERC1271Signature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"}],\"name\":\"InvalidKind\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"InvalidSapientSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_flag\",\"type\":\"uint256\"}],\"name\":\"InvalidSignatureFlag\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_weight\",\"type\":\"uint256\"}],\"name\":\"InvalidSignatureWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_expires\",\"type\":\"uint256\"}],\"name\":\"InvalidStaticSignatureExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_expectedCaller\",\"type\":\"address\"}],\"name\":\"InvalidStaticSignatureWrongCaller\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_weight\",\"type\":\"uint256\"}],\"name\":\"LowWeightChainedSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"checkpoint\",\"type\":\"uint256\"}],\"internalType\":\"struct Snapshot\",\"name\":\"_snapshot\",\"type\":\"tuple\"}],\"name\":\"UnusedSnapshot\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nextCheckpoint\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_checkpoint\",\"type\":\"uint256\"}],\"name\":\"WrongChainedCheckpointOrder\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"newImageHash\",\"type\":\"bytes32\"}],\"name\":\"ImageHashUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"ImplementationUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"_timestamp\",\"type\":\"uint96\"}],\"name\":\"StaticSignatureSet\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"getImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"getStaticSignature\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"imageHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"recoverPartialSignature\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isValidImage\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"checkpoint\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"opHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"recoverSapientSignature\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"_timestamp\",\"type\":\"uint96\"}],\"name\":\"setStaticSignature\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_imageHash\",\"type\":\"bytes32\"}],\"name\":\"updateImageHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"}],\"name\":\"updateImplementation\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Agustin Aguilar\",\"kind\":\"dev\",\"methods\":{\"getImplementation()\":{\"returns\":{\"_0\":\"implementation The implementation\"}},\"getStaticSignature(bytes32)\":{\"params\":{\"_hash\":\"The hash to get the static signature for\"},\"returns\":{\"_0\":\"address The address associated with the static signature\",\"_1\":\"timestamp The timestamp of the static signature\"}},\"imageHash()\":{\"returns\":{\"_0\":\"imageHash The image hash\"}},\"isValidSignature(bytes32,bytes)\":{\"details\":\"MUST return the correct magic value if the signature provided is valid for the provided hash > The bytes4 magic value to return when signature is valid is 0x1626ba7e : bytes4(keccak256(\\\"isValidSignature(bytes32,bytes)\\\") > This function MAY modify Ethereum's state\",\"params\":{\"_hash\":\"keccak256 hash that was signed\",\"_signature\":\"Signature byte array associated with _data\"},\"returns\":{\"_0\":\"Magic value 0x1626ba7e if the signature is valid and 0x0 otherwise\"}},\"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"params\":{\"_payload\":\"The payload\",\"_signature\":\"The signature to recover\"},\"returns\":{\"checkpoint\":\"The checkpoint identifier\",\"imageHash\":\"The derived image hash\",\"isValidImage\":\"Whether the image hash is valid\",\"opHash\":\"The hash of the payload\",\"threshold\":\"The signature threshold\",\"weight\":\"The derived weight\"}},\"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"params\":{\"payload\":\"The payload to recover the signature from\",\"signature\":\"The signature to recover the image hash from\"},\"returns\":{\"_0\":\"The recovered image hash\"}},\"setStaticSignature(bytes32,address,uint96)\":{\"details\":\"Only callable by the wallet itself\",\"params\":{\"_address\":\"The address to associate with the static signature\",\"_hash\":\"The hash to set the static signature for\",\"_timestamp\":\"The timestamp of the static signature\"}},\"updateImageHash(bytes32)\":{\"details\":\"Only callable by the wallet itself\",\"params\":{\"_imageHash\":\"The new image hash\"}},\"updateImplementation(address)\":{\"details\":\"Callable only by the contract itself\",\"params\":{\"_implementation\":\"The new implementation\"}}},\"stateVariables\":{\"IMAGE_HASH_KEY\":{\"details\":\"keccak256(\\\"org.arcadeum.module.auth.upgradable.image.hash\\\")\"}},\"title\":\"Stage2Auth\",\"version\":1},\"userdoc\":{\"errors\":{\"ImageHashIsZero()\":[{\"notice\":\"Error thrown when the image hash is zero\"}],\"InvalidERC1271Signature(bytes32,address,bytes)\":[{\"notice\":\"Error thrown when the ERC1271 signature is invalid\"}],\"InvalidKind(uint8)\":[{\"notice\":\"Error thrown when the kind is invalid\"}],\"InvalidSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":[{\"notice\":\"Error thrown when the sapient signature is invalid\"}],\"InvalidSignatureFlag(uint256)\":[{\"notice\":\"Error thrown when the signature flag is invalid\"}],\"InvalidSignatureWeight(uint256,uint256)\":[{\"notice\":\"Error thrown when the signature weight is invalid\"}],\"InvalidStaticSignatureExpired(bytes32,uint256)\":[{\"notice\":\"Error thrown when the static signature has expired\"}],\"InvalidStaticSignatureWrongCaller(bytes32,address,address)\":[{\"notice\":\"Error thrown when the static signature has the wrong caller\"}],\"LowWeightChainedSignature(bytes,uint256,uint256)\":[{\"notice\":\"Error thrown when the weight is too low for a chained signature\"}],\"OnlySelf(address)\":[{\"notice\":\"Error thrown when the caller is not the same as the contract\"}],\"UnusedSnapshot((bytes32,uint256))\":[{\"notice\":\"Error thrown when the snapshot is unused\"}],\"WrongChainedCheckpointOrder(uint256,uint256)\":[{\"notice\":\"Error thrown when the checkpoint order is wrong\"}]},\"events\":{\"ImageHashUpdated(bytes32)\":{\"notice\":\"Emitted when the image hash is updated\"},\"ImplementationUpdated(address)\":{\"notice\":\"Emitted when the implementation is updated\"},\"StaticSignatureSet(bytes32,address,uint96)\":{\"notice\":\"Event emitted when a static signature is set\"}},\"kind\":\"user\",\"methods\":{\"getImplementation()\":{\"notice\":\"Get the implementation\"},\"getStaticSignature(bytes32)\":{\"notice\":\"Get the static signature for a specific hash\"},\"imageHash()\":{\"notice\":\"Get the image hash\"},\"isValidSignature(bytes32,bytes)\":{\"notice\":\"Verifies whether the provided signature is valid with respect to the provided hash\"},\"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"notice\":\"Recover the partial signature\"},\"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"notice\":\"Recovers the image hash of a given signature\"},\"setStaticSignature(bytes32,address,uint96)\":{\"notice\":\"Set the static signature for a specific hash\"},\"updateImageHash(bytes32)\":{\"notice\":\"Update the image hash\"},\"updateImplementation(address)\":{\"notice\":\"Update the implementation\"}},\"notice\":\"Stage 2 auth contract\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/modules/auth/Stage2Auth.sol\":\"Stage2Auth\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/Wallet.sol\":{\"keccak256\":\"0xe01e9e937dd8d7572976ccc8ec3ec87e4a557069dafb05f85977a7b71f5c58d5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2e9ab78d33655f8e822258dff3f2d5ad01e84f6dc90174840d5a283b8e6413c1\",\"dweb:/ipfs/QmNMyYe3C1fs3cxKmUZ3S9VU5EE4WVWPVcwiGbgvbS1vrH\"]},\"src/modules/Implementation.sol\":{\"keccak256\":\"0x16546d4be07865808890308750916b0a9a55e7a994a458c01edde4618f29b4e6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1b1f9785b08c9f29d6849ba2d3dee89fa3ea5f3c2feec4a59a6d1040e3fbe040\",\"dweb:/ipfs/QmU2Pm5C3Ztky7RQdCZggavyq7Eh1eS1HFqVz9jZKiMUML\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/Storage.sol\":{\"keccak256\":\"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da\",\"dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn\"]},\"src/modules/auth/BaseAuth.sol\":{\"keccak256\":\"0xbf2e40def03fcb5f4a5129b2f5803e21951325b92e00126cbe1427b7c25cfefd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://b560905fcc4b957d27c2abed78a1e82529c89fa472e91b3d108fbfd91aa7c3f7\",\"dweb:/ipfs/QmRjLLtTWE6dFX2kBQCgLz7ossfMxhAFgDC8Jx9XuGL6Wy\"]},\"src/modules/auth/BaseSig.sol\":{\"keccak256\":\"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8\",\"dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3\"]},\"src/modules/auth/SelfAuth.sol\":{\"keccak256\":\"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42\",\"dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W\"]},\"src/modules/auth/Stage2Auth.sol\":{\"keccak256\":\"0x5b23b530522ba1c02248d1f7470352c57fbc91c245c7c577044f93f6bb560a59\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c30b8e13edc7e18e4ea7bc7f4b8deaf16301a8f2bb23e7697e6f6b74882a39dc\",\"dweb:/ipfs/QmW69XvfeJepuPBrHb1Vpkikg43P4juEGdRkUWt8GrrAfL\"]},\"src/modules/interfaces/IAuth.sol\":{\"keccak256\":\"0xf6fa30af2ec91d5fbeac17c9b1f2aa73b7883c9ac98745605007e57666394b91\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://6e90a87978519462f9612f4a17e38fddc1c7bcf700ff834a1de7dce326f30353\",\"dweb:/ipfs/QmXmWAsRRK6t4jPs4VcXrouyokxdALM28D3odX7ub48WEp\"]},\"src/modules/interfaces/ICheckpointer.sol\":{\"keccak256\":\"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1\",\"dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t\"]},\"src/modules/interfaces/IERC1271.sol\":{\"keccak256\":\"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b\",\"dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF\"]},\"src/modules/interfaces/IPartialAuth.sol\":{\"keccak256\":\"0x0d1aa021615d8e90696e71a9468331457a1babfa2ffe169654b7456e5bcb7a73\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://bbacd149a6358ab0d4b9c588d2e3a55fc71ed4723269150d7b91ca70092f6519\",\"dweb:/ipfs/QmUSwtrYCrRcRFsy5rCzdMPrw1FCU7ZoeXdsW6kK9yc8FK\"]},\"src/modules/interfaces/ISapient.sol\":{\"keccak256\":\"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489\",\"dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"src/utils/LibOptim.sol\":{\"keccak256\":\"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81\",\"dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[],"type":"error","name":"ImageHashIsZero"},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32"},{"internalType":"address","name":"_signer","type":"address"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"type":"error","name":"InvalidERC1271Signature"},{"inputs":[{"internalType":"uint8","name":"kind","type":"uint8"}],"type":"error","name":"InvalidKind"},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"type":"error","name":"InvalidSapientSignature"},{"inputs":[{"internalType":"uint256","name":"_flag","type":"uint256"}],"type":"error","name":"InvalidSignatureFlag"},{"inputs":[{"internalType":"uint256","name":"_threshold","type":"uint256"},{"internalType":"uint256","name":"_weight","type":"uint256"}],"type":"error","name":"InvalidSignatureWeight"},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32"},{"internalType":"uint256","name":"_expires","type":"uint256"}],"type":"error","name":"InvalidStaticSignatureExpired"},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32"},{"internalType":"address","name":"_caller","type":"address"},{"internalType":"address","name":"_expectedCaller","type":"address"}],"type":"error","name":"InvalidStaticSignatureWrongCaller"},{"inputs":[{"internalType":"bytes","name":"_signature","type":"bytes"},{"internalType":"uint256","name":"_threshold","type":"uint256"},{"internalType":"uint256","name":"_weight","type":"uint256"}],"type":"error","name":"LowWeightChainedSignature"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"}],"type":"error","name":"OnlySelf"},{"inputs":[{"internalType":"struct Snapshot","name":"_snapshot","type":"tuple","components":[{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"uint256","name":"checkpoint","type":"uint256"}]}],"type":"error","name":"UnusedSnapshot"},{"inputs":[{"internalType":"uint256","name":"_nextCheckpoint","type":"uint256"},{"internalType":"uint256","name":"_checkpoint","type":"uint256"}],"type":"error","name":"WrongChainedCheckpointOrder"},{"inputs":[{"internalType":"bytes32","name":"newImageHash","type":"bytes32","indexed":false}],"type":"event","name":"ImageHashUpdated","anonymous":false},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address","indexed":false}],"type":"event","name":"ImplementationUpdated","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32","indexed":false},{"internalType":"address","name":"_address","type":"address","indexed":false},{"internalType":"uint96","name":"_timestamp","type":"uint96","indexed":false}],"type":"event","name":"StaticSignatureSet","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"getImplementation","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getStaticSignature","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"imageHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"view","type":"function","name":"isValidSignature","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"view","type":"function","name":"recoverPartialSignature","outputs":[{"internalType":"uint256","name":"threshold","type":"uint256"},{"internalType":"uint256","name":"weight","type":"uint256"},{"internalType":"bool","name":"isValidImage","type":"bool"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"uint256","name":"checkpoint","type":"uint256"},{"internalType":"bytes32","name":"opHash","type":"bytes32"}]},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"view","type":"function","name":"recoverSapientSignature","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint96","name":"_timestamp","type":"uint96"}],"stateMutability":"nonpayable","type":"function","name":"setStaticSignature"},{"inputs":[{"internalType":"bytes32","name":"_imageHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"updateImageHash"},{"inputs":[{"internalType":"address","name":"_implementation","type":"address"}],"stateMutability":"payable","type":"function","name":"updateImplementation"}],"devdoc":{"kind":"dev","methods":{"getImplementation()":{"returns":{"_0":"implementation The implementation"}},"getStaticSignature(bytes32)":{"params":{"_hash":"The hash to get the static signature for"},"returns":{"_0":"address The address associated with the static signature","_1":"timestamp The timestamp of the static signature"}},"imageHash()":{"returns":{"_0":"imageHash The image hash"}},"isValidSignature(bytes32,bytes)":{"details":"MUST return the correct magic value if the signature provided is valid for the provided hash > The bytes4 magic value to return when signature is valid is 0x1626ba7e : bytes4(keccak256(\"isValidSignature(bytes32,bytes)\") > This function MAY modify Ethereum's state","params":{"_hash":"keccak256 hash that was signed","_signature":"Signature byte array associated with _data"},"returns":{"_0":"Magic value 0x1626ba7e if the signature is valid and 0x0 otherwise"}},"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"params":{"_payload":"The payload","_signature":"The signature to recover"},"returns":{"checkpoint":"The checkpoint identifier","imageHash":"The derived image hash","isValidImage":"Whether the image hash is valid","opHash":"The hash of the payload","threshold":"The signature threshold","weight":"The derived weight"}},"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"params":{"payload":"The payload to recover the signature from","signature":"The signature to recover the image hash from"},"returns":{"_0":"The recovered image hash"}},"setStaticSignature(bytes32,address,uint96)":{"details":"Only callable by the wallet itself","params":{"_address":"The address to associate with the static signature","_hash":"The hash to set the static signature for","_timestamp":"The timestamp of the static signature"}},"updateImageHash(bytes32)":{"details":"Only callable by the wallet itself","params":{"_imageHash":"The new image hash"}},"updateImplementation(address)":{"details":"Callable only by the contract itself","params":{"_implementation":"The new implementation"}}},"version":1},"userdoc":{"kind":"user","methods":{"getImplementation()":{"notice":"Get the implementation"},"getStaticSignature(bytes32)":{"notice":"Get the static signature for a specific hash"},"imageHash()":{"notice":"Get the image hash"},"isValidSignature(bytes32,bytes)":{"notice":"Verifies whether the provided signature is valid with respect to the provided hash"},"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"notice":"Recover the partial signature"},"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"notice":"Recovers the image hash of a given signature"},"setStaticSignature(bytes32,address,uint96)":{"notice":"Set the static signature for a specific hash"},"updateImageHash(bytes32)":{"notice":"Update the image hash"},"updateImplementation(address)":{"notice":"Update the implementation"}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/modules/auth/Stage2Auth.sol":"Stage2Auth"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/Wallet.sol":{"keccak256":"0xe01e9e937dd8d7572976ccc8ec3ec87e4a557069dafb05f85977a7b71f5c58d5","urls":["bzz-raw://2e9ab78d33655f8e822258dff3f2d5ad01e84f6dc90174840d5a283b8e6413c1","dweb:/ipfs/QmNMyYe3C1fs3cxKmUZ3S9VU5EE4WVWPVcwiGbgvbS1vrH"],"license":"Apache-2.0"},"src/modules/Implementation.sol":{"keccak256":"0x16546d4be07865808890308750916b0a9a55e7a994a458c01edde4618f29b4e6","urls":["bzz-raw://1b1f9785b08c9f29d6849ba2d3dee89fa3ea5f3c2feec4a59a6d1040e3fbe040","dweb:/ipfs/QmU2Pm5C3Ztky7RQdCZggavyq7Eh1eS1HFqVz9jZKiMUML"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/Storage.sol":{"keccak256":"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f","urls":["bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da","dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn"],"license":"Apache-2.0"},"src/modules/auth/BaseAuth.sol":{"keccak256":"0xbf2e40def03fcb5f4a5129b2f5803e21951325b92e00126cbe1427b7c25cfefd","urls":["bzz-raw://b560905fcc4b957d27c2abed78a1e82529c89fa472e91b3d108fbfd91aa7c3f7","dweb:/ipfs/QmRjLLtTWE6dFX2kBQCgLz7ossfMxhAFgDC8Jx9XuGL6Wy"],"license":"Apache-2.0"},"src/modules/auth/BaseSig.sol":{"keccak256":"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa","urls":["bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8","dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3"],"license":"Apache-2.0"},"src/modules/auth/SelfAuth.sol":{"keccak256":"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c","urls":["bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42","dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W"],"license":"Apache-2.0"},"src/modules/auth/Stage2Auth.sol":{"keccak256":"0x5b23b530522ba1c02248d1f7470352c57fbc91c245c7c577044f93f6bb560a59","urls":["bzz-raw://c30b8e13edc7e18e4ea7bc7f4b8deaf16301a8f2bb23e7697e6f6b74882a39dc","dweb:/ipfs/QmW69XvfeJepuPBrHb1Vpkikg43P4juEGdRkUWt8GrrAfL"],"license":"Apache-2.0"},"src/modules/interfaces/IAuth.sol":{"keccak256":"0xf6fa30af2ec91d5fbeac17c9b1f2aa73b7883c9ac98745605007e57666394b91","urls":["bzz-raw://6e90a87978519462f9612f4a17e38fddc1c7bcf700ff834a1de7dce326f30353","dweb:/ipfs/QmXmWAsRRK6t4jPs4VcXrouyokxdALM28D3odX7ub48WEp"],"license":"Apache-2.0"},"src/modules/interfaces/ICheckpointer.sol":{"keccak256":"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513","urls":["bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1","dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t"],"license":"Apache-2.0"},"src/modules/interfaces/IERC1271.sol":{"keccak256":"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9","urls":["bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b","dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF"],"license":"Apache-2.0"},"src/modules/interfaces/IPartialAuth.sol":{"keccak256":"0x0d1aa021615d8e90696e71a9468331457a1babfa2ffe169654b7456e5bcb7a73","urls":["bzz-raw://bbacd149a6358ab0d4b9c588d2e3a55fc71ed4723269150d7b91ca70092f6519","dweb:/ipfs/QmUSwtrYCrRcRFsy5rCzdMPrw1FCU7ZoeXdsW6kK9yc8FK"],"license":"Apache-2.0"},"src/modules/interfaces/ISapient.sol":{"keccak256":"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359","urls":["bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489","dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"src/utils/LibOptim.sol":{"keccak256":"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde","urls":["bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81","dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x"],"license":"Apache-2.0"}},"version":1},"id":54} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Stage2Module.sol/Stage2Module.json b/contracts/artifacts/wallet-contracts-v3/Stage2Module.sol/Stage2Module.json new file mode 100644 index 00000000..ee959904 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Stage2Module.sol/Stage2Module.json @@ -0,0 +1 @@ +{"abi":[{"type":"constructor","inputs":[{"name":"_entryPoint","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"fallback","stateMutability":"payable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"addHook","inputs":[{"name":"selector","type":"bytes4","internalType":"bytes4"},{"name":"implementation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"entrypoint","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"execute","inputs":[{"name":"_payload","type":"bytes","internalType":"bytes"},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"executeUserOp","inputs":[{"name":"_payload","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getImplementation","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getStaticSignature","inputs":[{"name":"_hash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"imageHash","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"isValidSignature","inputs":[{"name":"_hash","type":"bytes32","internalType":"bytes32"},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"view"},{"type":"function","name":"onERC1155BatchReceived","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256[]","internalType":"uint256[]"},{"name":"","type":"uint256[]","internalType":"uint256[]"},{"name":"","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"pure"},{"type":"function","name":"onERC1155Received","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"pure"},{"type":"function","name":"onERC721Received","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"pure"},{"type":"function","name":"readHook","inputs":[{"name":"selector","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"readNonce","inputs":[{"name":"_space","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"recoverPartialSignature","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"threshold","type":"uint256","internalType":"uint256"},{"name":"weight","type":"uint256","internalType":"uint256"},{"name":"isValidImage","type":"bool","internalType":"bool"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"checkpoint","type":"uint256","internalType":"uint256"},{"name":"opHash","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"recoverSapientSignature","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"removeHook","inputs":[{"name":"selector","type":"bytes4","internalType":"bytes4"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"selfExecute","inputs":[{"name":"_payload","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"setStaticSignature","inputs":[{"name":"_hash","type":"bytes32","internalType":"bytes32"},{"name":"_address","type":"address","internalType":"address"},{"name":"_timestamp","type":"uint96","internalType":"uint96"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"tokenReceived","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"pure"},{"type":"function","name":"tokensReceived","inputs":[{"name":"operator","type":"address","internalType":"address"},{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"operatorData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateImageHash","inputs":[{"name":"_imageHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateImplementation","inputs":[{"name":"_implementation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"validateUserOp","inputs":[{"name":"userOp","type":"tuple","internalType":"struct PackedUserOperation","components":[{"name":"sender","type":"address","internalType":"address"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"initCode","type":"bytes","internalType":"bytes"},{"name":"callData","type":"bytes","internalType":"bytes"},{"name":"accountGasLimits","type":"bytes32","internalType":"bytes32"},{"name":"preVerificationGas","type":"uint256","internalType":"uint256"},{"name":"gasFees","type":"bytes32","internalType":"bytes32"},{"name":"paymasterAndData","type":"bytes","internalType":"bytes"},{"name":"signature","type":"bytes","internalType":"bytes"}]},{"name":"userOpHash","type":"bytes32","internalType":"bytes32"},{"name":"missingAccountFunds","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"validationData","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"event","name":"CallAborted","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"_returnData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"CallFailed","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"_returnData","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"CallSkipped","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"CallSucceeded","inputs":[{"name":"_opHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_index","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"DefinedHook","inputs":[{"name":"selector","type":"bytes4","indexed":false,"internalType":"bytes4"},{"name":"implementation","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"ImageHashUpdated","inputs":[{"name":"newImageHash","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"ImplementationUpdated","inputs":[{"name":"newImplementation","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"NonceChange","inputs":[{"name":"_space","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"_newNonce","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"StaticSignatureSet","inputs":[{"name":"_hash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"_address","type":"address","indexed":false,"internalType":"address"},{"name":"_timestamp","type":"uint96","indexed":false,"internalType":"uint96"}],"anonymous":false},{"type":"error","name":"BadNonce","inputs":[{"name":"_space","type":"uint256","internalType":"uint256"},{"name":"_provided","type":"uint256","internalType":"uint256"},{"name":"_current","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC4337Disabled","inputs":[]},{"type":"error","name":"HookAlreadyExists","inputs":[{"name":"selector","type":"bytes4","internalType":"bytes4"}]},{"type":"error","name":"HookDoesNotExist","inputs":[{"name":"selector","type":"bytes4","internalType":"bytes4"}]},{"type":"error","name":"ImageHashIsZero","inputs":[]},{"type":"error","name":"InvalidERC1271Signature","inputs":[{"name":"_opHash","type":"bytes32","internalType":"bytes32"},{"name":"_signer","type":"address","internalType":"address"},{"name":"_signature","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"InvalidEntryPoint","inputs":[{"name":"_entrypoint","type":"address","internalType":"address"}]},{"type":"error","name":"InvalidKind","inputs":[{"name":"kind","type":"uint8","internalType":"uint8"}]},{"type":"error","name":"InvalidSapientSignature","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"InvalidSignature","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_signature","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"InvalidSignatureFlag","inputs":[{"name":"_flag","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidSignatureWeight","inputs":[{"name":"_threshold","type":"uint256","internalType":"uint256"},{"name":"_weight","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidStaticSignatureExpired","inputs":[{"name":"_opHash","type":"bytes32","internalType":"bytes32"},{"name":"_expires","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidStaticSignatureWrongCaller","inputs":[{"name":"_opHash","type":"bytes32","internalType":"bytes32"},{"name":"_caller","type":"address","internalType":"address"},{"name":"_expectedCaller","type":"address","internalType":"address"}]},{"type":"error","name":"LowWeightChainedSignature","inputs":[{"name":"_signature","type":"bytes","internalType":"bytes"},{"name":"_threshold","type":"uint256","internalType":"uint256"},{"name":"_weight","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"NotEnoughGas","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_index","type":"uint256","internalType":"uint256"},{"name":"_gasLeft","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"OnlySelf","inputs":[{"name":"_sender","type":"address","internalType":"address"}]},{"type":"error","name":"Reverted","inputs":[{"name":"_payload","type":"tuple","internalType":"struct Payload.Decoded","components":[{"name":"kind","type":"uint8","internalType":"uint8"},{"name":"noChainId","type":"bool","internalType":"bool"},{"name":"calls","type":"tuple[]","internalType":"struct Payload.Call[]","components":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"gasLimit","type":"uint256","internalType":"uint256"},{"name":"delegateCall","type":"bool","internalType":"bool"},{"name":"onlyFallback","type":"bool","internalType":"bool"},{"name":"behaviorOnError","type":"uint256","internalType":"uint256"}]},{"name":"space","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"digest","type":"bytes32","internalType":"bytes32"},{"name":"parentWallets","type":"address[]","internalType":"address[]"}]},{"name":"_index","type":"uint256","internalType":"uint256"},{"name":"_returnData","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"UnusedSnapshot","inputs":[{"name":"_snapshot","type":"tuple","internalType":"struct Snapshot","components":[{"name":"imageHash","type":"bytes32","internalType":"bytes32"},{"name":"checkpoint","type":"uint256","internalType":"uint256"}]}]},{"type":"error","name":"WrongChainedCheckpointOrder","inputs":[{"name":"_nextCheckpoint","type":"uint256","internalType":"uint256"},{"name":"_checkpoint","type":"uint256","internalType":"uint256"}]}],"bytecode":{"object":"0x60a034607457601f613dff38819003918201601f19168301916001600160401b03831184841017607957808492602094604052833981010312607457516001600160a01b0381168103607457608052604051613d6f90816100908239608051818181610fe90152818161112601526119ba0152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6080604052600436101561001e575b361561001c5761001c611b82565b005b60003560e01c806223de291461018d578063025b22bc1461018857806313792a4a14610183578063150b7a021461017e5780631626ba7e1461017957806319822f7c146101745780631a9b23371461016f5780631f6a1eb91461016a57806329561426146101655780634fcf3eca1461016057806351605d801461015b5780636ea44577146101565780638943ec02146101515780638c3f55631461014c57806392dcb3fc146101475780639c145aed14610142578063a65d69d41461013d578063aaf10f4214610138578063ad55366b14610133578063b93ea7ad1461012e578063bc197c8114610129578063f23a6e61146101245763f727ef1c0361000e576114a5565b611418565b611346565b6111e7565b61119b565b61114a565b6110db565b610fc3565b610f65565b610f29565b610ea5565b610e76565b610dd2565b610cb6565b610bfd565b610b1c565b610ab9565b610a04565b61097c565b6108ef565b6107f2565b6102db565b61024f565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101b557565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101b557565b6044359073ffffffffffffffffffffffffffffffffffffffff821682036101b557565b359073ffffffffffffffffffffffffffffffffffffffff821682036101b557565b9181601f840112156101b55782359167ffffffffffffffff83116101b557602083818601950101116101b557565b346101b55760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557610286610192565b5061028f6101ba565b506102986101dd565b5060843567ffffffffffffffff81116101b5576102b9903690600401610221565b505060a43567ffffffffffffffff81116101b55761001c903690600401610221565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55761030d610192565b30330361035a576020817f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca0392305573ffffffffffffffffffffffffffffffffffffffff60405191168152a1005b7fa19dbf00000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff8211176103d357604052565b610388565b6040810190811067ffffffffffffffff8211176103d357604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176103d357604052565b6040519061044460e0836103f4565b565b60405190610444610120836103f4565b359060ff821682036101b557565b359081151582036101b557565b67ffffffffffffffff81116103d35760051b60200190565b67ffffffffffffffff81116103d357601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926104cf82610489565b916104dd60405193846103f4565b8294818452818301116101b5578281602093846000960137010152565b9080601f830112156101b557816020610515933591016104c3565b90565b81601f820112156101b55780359061052f82610471565b9261053d60405194856103f4565b82845260208085019360051b830101918183116101b55760208101935b83851061056957505050505090565b843567ffffffffffffffff81116101b557820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082860301126101b5576105b0610435565b916105bd60208301610200565b83526040820135602084015260608201359267ffffffffffffffff84116101b55760e0836105f28860208098819801016104fa565b60408401526080810135606084015261060d60a08201610464565b608084015261061e60c08201610464565b60a0840152013560c082015281520194019361055a565b9080601f830112156101b557813561064c81610471565b9261065a60405194856103f4565b81845260208085019260051b8201019283116101b557602001905b8282106106825750505090565b6020809161068f84610200565b815201910190610675565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126101b55760043567ffffffffffffffff81116101b5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82850301126101b55761070c610446565b9061071981600401610456565b825261072760248201610464565b6020830152604481013567ffffffffffffffff81116101b55784600461074f92840101610518565b6040830152606481013560608301526084810135608083015260a481013567ffffffffffffffff81116101b55784600461078b928401016104fa565b60a083015260c481013560c083015260e481013560e083015261010481013567ffffffffffffffff81116101b557600485916107c8930101610635565b610100820152916024359067ffffffffffffffff82116101b5576107ee91600401610221565b9091565b346101b5576108003661069a565b909161010081019261081b6108168551516115ad565b6115cd565b9160005b85518051821015610882579061087c61085761083d8360019561164b565b5173ffffffffffffffffffffffffffffffffffffffff1690565b610861838861164b565b9073ffffffffffffffffffffffffffffffffffffffff169052565b0161081f565b5050838386610897336108618351518561164b565b526108a3818484611c54565b50156108b55760405160018152602090f35b6108eb906040519384937ff58cc8b5000000000000000000000000000000000000000000000000000000008552600485016118a6565b0390fd5b346101b55760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557610926610192565b5061092f6101ba565b5060643567ffffffffffffffff81116101b557610950903690600401610221565b505060206040517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b346101b55760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043560243567ffffffffffffffff81116101b5576020916109d46109da923690600401610221565b916118cb565b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b346101b55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043567ffffffffffffffff81116101b5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126101b557610a87602091602435604435916004016119a0565b604051908152f35b7fffffffff000000000000000000000000000000000000000000000000000000008116036101b557565b346101b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576020610afe600435610af981610a8f565b611e39565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043567ffffffffffffffff81116101b557610b66903690600401610221565b9060243567ffffffffffffffff81116101b557610b8a610b94913690600401610221565b9190935a93611f6e565b91610ba86060840151608085015190612232565b610bb3828585611c54565b929015610bc5575061001c935061238b565b836108eb86926040519384937fa2b6d61b000000000000000000000000000000000000000000000000000000008552600485016118a6565b346101b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043530330361035a578015610c8c576020817f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf855604051908152a1005b7f4294d1270000000000000000000000000000000000000000000000000000000060005260046000fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557600435610cec81610a8f565b30330361035a5773ffffffffffffffffffffffffffffffffffffffff610d1182611e39565b1615610d775760407fffffffff000000000000000000000000000000000000000000000000000000007f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19216610d68600082612be3565b815190815260006020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f1c3812cc000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b60009103126101b557565b346101b55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760207fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf854604051908152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101b5576004359067ffffffffffffffff82116101b5576107ee91600401610221565b610e7f36610e2d565b9030330361035a57610e9561001c925a92611f6e565b90610e9f826126af565b9061238b565b346101b55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557610edc610192565b5060443567ffffffffffffffff81116101b557610efd903690600401610221565b505060206040517f8943ec02000000000000000000000000000000000000000000000000000000008152f35b346101b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576020610a87600435612743565b346101b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576040610fa1600435612789565b73ffffffffffffffffffffffffffffffffffffffff8351921682526020820152f35b346101b557610fd136610e2d565b9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001680156110b157330361108357303b156101b5576110579160009160405193849283927f6ea4457700000000000000000000000000000000000000000000000000000000845260048401611b41565b038183305af1801561107e5761106957005b80611078600061001c936103f4565b80610dc7565b611917565b7f1d6ddbf4000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7fd13d78350000000000000000000000000000000000000000000000000000000060005260046000fd5b346101b55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101b55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576020305473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346101b55760c06111b76000806111b13661069a565b91612851565b926111c383929361399a565b906040519586526020860152151560408501526060840152608083015260a0820152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043561121d81610a8f565b6112256101ba565b9030330361035a5773ffffffffffffffffffffffffffffffffffffffff61124b82611e39565b166112c5577f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19173ffffffffffffffffffffffffffffffffffffffff7fffffffff000000000000000000000000000000000000000000000000000000006040931691166112b88183612be3565b82519182526020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f5b4d6d6a000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b9181601f840112156101b55782359167ffffffffffffffff83116101b5576020808501948460051b0101116101b557565b346101b55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55761137d610192565b506113866101ba565b5060443567ffffffffffffffff81116101b5576113a7903690600401611315565b505060643567ffffffffffffffff81116101b5576113c9903690600401611315565b505060843567ffffffffffffffff81116101b5576113eb903690600401610221565b50506040517fbc197c81000000000000000000000000000000000000000000000000000000008152602090f35b346101b55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55761144f610192565b506114586101ba565b5060843567ffffffffffffffff81116101b557611479903690600401610221565b505060206040517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b346101b55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576004356114df6101ba565b604435916bffffffffffffffffffffffff83168093036101b55730330361035a578273ffffffffffffffffffffffffffffffffffffffff8361156a7febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1967fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606097881b161785612b9e565b6040519384521660208301526040820152a1005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90600182018092116115bb57565b61157e565b919082018092116115bb57565b906115d782610471565b6115e460405191826103f4565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06116128294610471565b0190602036910137565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805182101561165f5760209160051b010190565b61161c565b919082519283825260005b8481106116ae5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b8060208092840101518282860101520161166f565b9080602083519182815201916020808360051b8301019401926000915b8383106116ef57505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080611762604085015160e0604086015260e0850190611664565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152970193019301919392906116e0565b906020808351928381520192019060005b8181106117b75750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016117aa565b805160ff1682526105159160208281015115159082015261010061184161181b604085015161012060408601526101208501906116c3565b606085015160608501526080850151608085015260a085015184820360a0860152611664565b9260c081015160c084015260e081015160e0840152015190610100818403910152611799565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b916118bd61051594926040855260408501906117e3565b926020818503910152611867565b906118e892916118d9611dde565b906003825260e0820152611c54565b5015611912577f1626ba7e0000000000000000000000000000000000000000000000000000000090565b600090565b6040513d6000823e3d90fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101b5570180359067ffffffffffffffff82116101b5576020019181360383136101b557565b908160209103126101b5575161051581610a8f565b604090610515949281528160208201520191611867565b91909173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169182156110b1578233036110835780611ad2575b506020915080610100611a02920190611923565b92611a3a60405194859384937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611989565b0381305afa90811561107e577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091611aa3575b501603611a9e57600090565b600190565b611ac5915060203d602011611acb575b611abd81836103f4565b810190611974565b38611a92565b503d611ab3565b823b156101b5576040517fb760faf900000000000000000000000000000000000000000000000000000000815230600482015292600091849160249183915af190811561107e57602092611a0292611b2c575b50906119ee565b806110786000611b3b936103f4565b38611b25565b916020610515938181520191611867565b3d15611b7d573d90611b6382610489565b91611b7160405193846103f4565b82523d6000602084013e565b606090565b600436108015611b8f5750565b611bc5906000357fffffffff00000000000000000000000000000000000000000000000000000000811691611c17575b50611e39565b73ffffffffffffffffffffffffffffffffffffffff8116611be35750565b60008091604051368382378036810184815203915af4611c01611b52565b9015611c0f57602081519101f35b602081519101fd5b7fffffffff000000000000000000000000000000000000000000000000000000008092503660040360031b1b161638611bbf565b901561165f5790565b91907f800000000000000000000000000000000000000000000000000000000000000080611cab611c858585611c4b565b357fff000000000000000000000000000000000000000000000000000000000000001690565b1614611d0a576000918291611cbf94612851565b905091909192808210611cda575050611cd79061399a565b91565b7ffd41fcba0000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b5050611d15906126af565b90611d1f82612789565b42811115611dac575073ffffffffffffffffffffffffffffffffffffffff81168015159081611da1575b50611d55575060019190565b7f8945c3130000000000000000000000000000000000000000000000000000000060005260048390523360245273ffffffffffffffffffffffffffffffffffffffff1660445260646000fd5b905033141538611d49565b7ff95b6ab700000000000000000000000000000000000000000000000000000000600052600484905260245260446000fd5b60405190610120820182811067ffffffffffffffff8211176103d3576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b73ffffffffffffffffffffffffffffffffffffffff906040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a120845216604082015260408152611eb06060826103f4565b519020541690565b90611ec282610471565b611ecf60405191826103f4565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611efd8294610471565b019060005b828110611f0e57505050565b602090604051611f1d816103b7565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c082015282828501015201611f02565b909392938483116101b55784116101b5578101920390565b919091611f79611dde565b6000815292600190823560f81c827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8183160161221b5750600060608701525b6007611fc860ff831660011c90565b16806121ca575b5060108181160361219557506001925b611fe884611eb8565b92604087019384526000905b85821061200357505050505050565b8281013560f81c9060010190918160018085160361217357506120473061202b83895161164b565b519073ffffffffffffffffffffffffffffffffffffffff169052565b600280841614612153575b600480841614612105575b6008808416146120d2575b6120bb6120b560c0856120948a608061208b8860108060019c9d1614935161164b565b51019015159052565b6120ab8a60a061208b88602080871614935161164b565b1660061c60031690565b60ff1690565b60c06120c883895161164b565b5101520190611ff4565b6001916120bb906120b59060c0908781013590602001969060606120f7878d5161164b565b510152959450505050612068565b9061214d908481013560e81c9060030161214661212d61212584846115c0565b838a8a611f56565b9190604061213c888d5161164b565b51019236916104c3565b90526115c0565b9061205d565b9083810135906020019190602061216b83895161164b565b510152612052565b61219092508481013560601c90601401929061202b83895161164b565b612047565b6020908116036121b75761ffff918381013560f01c906002015b921692611fdf565b60ff918381013560f81c906001016121af565b61220e919385929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290608087015238611fcf565b80850135606090811c908801526014019250611fb9565b9061223c82612743565b8181036122c257509060017f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f8819201908160405160208101907f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8252836040820152604081526122ac6060826103f4565b51902055604080519182526020820192909252a1565b917f9b6514f40000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b61230e604092959493956060835260608301906117e3565b9460208201520152565b9261051596959260c09592855260208501526040840152606083015260808201528160a08201520190611664565b6105159392606092825260208201528160408201520190611664565b61237861051594926060835260608301906117e3565b9260208201526040818403910152611664565b916000604082019384515190825b8281106123aa575b50505050505050565b6123b581885161164b565b51936123c460a0860151151590565b806126a7575b61266757506000936060810151801580158061265e575b6126265784906123f46080850151151590565b156125e05761249f9261241b855173ffffffffffffffffffffffffffffffffffffffff1690565b91156125da57505a905b61249a8b61246e60608d01516040890151908c8b604051998a967f4c4e814c00000000000000000000000000000000000000000000000000000000602089015260248801612318565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018552846103f4565b612b71565b156124e2575b506040805187815260208101839052600192917f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a91a15b01612399565b60c001805115612591576001815114612552575160021461250357386124a5565b9493505050507fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b9250612543612537612b83565b60405193849384612346565b0390a1388080808080806123a1565b50846108eb61255f612b83565b6040519384937f7f6b0bb100000000000000000000000000000000000000000000000000000000855260048501612362565b509250600180937f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d6125d26125c4612b83565b604051918291858c84612346565b0390a16124dc565b90612425565b835161261b93925073ffffffffffffffffffffffffffffffffffffffff169160208501519160001461262057505a905b604085015192612b5f565b61249f565b90612610565b83886108eb5a6040519384937f21395274000000000000000000000000000000000000000000000000000000008552600485016122f6565b50815a106123e1565b6040805188815260208101849052919550600192917f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b91819081016125d2565b5080156123ca565b61271161273d6126cf6126c9602085015115153090612c22565b93612d1d565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826103f4565b51902090565b60405160208101917f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83526040820152604081526127826060826103f4565b5190205490565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e8683526040820152604081526127c86060826103f4565b51902054906bffffffffffffffffffffffff8260601c921690565b604051906127f0826103d8565b60006020838281520152565b908160409103126101b557602060405191612816836103d8565b805183520151602082015290565b60409073ffffffffffffffffffffffffffffffffffffffff61051594931681528160208201520190611664565b909491939291853560f81c6001909381908761286b6127e3565b9360408089161480612b41575b612a44575b505050600180861614612a1e5760028581161460208501526007600286901c1688820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691019080969181966020166128ed9060051c90565b6128f6906115ad565b8a820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101959098899a81612942846126af565b98899361294e93611f56565b9161295893613134565b909861296c91600052602052604060002090565b9061297f91600052602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff166129a891600052602052604060002090565b94815190868215159283612a13575b505081612a04575b506129c75750565b6040517fccbb534f000000000000000000000000000000000000000000000000000000008152815160048201526020909101516024820152604490fd5b905060208201511015386129bf565b1415915086386129b7565b86612a399792949550612a319398611f56565b939092612f12565b919394909293929190565b8a81013560601c985060140192509087908a90849015612a68575b5082915061287d565b60038101955073ffffffffffffffffffffffffffffffffffffffff945081013560e81c92604092612aeb929091612ab691612aaf918990612aa989836115c0565b92611f56565b36916104c3565b83519586809481937fccce3bc80000000000000000000000000000000000000000000000000000000083523060048401612824565b0392165afa801561107e57612b0992600091612b12575b50926115c0565b86388981612a5f565b612b34915060403d604011612b3a575b612b2c81836103f4565b8101906127fc565b38612b02565b503d612b22565b5073ffffffffffffffffffffffffffffffffffffffff891615612878565b9160009391849360208451940192f190565b9160009291839260208351930191f490565b3d90604051916020818401016040528083526000602084013e565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e868352604082015260408152612bdd6060826103f4565b51902055565b60405160208101917fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1208352604082015260408152612bdd6060826103f4565b15612cd2576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a0815261273d60c0826103f4565b4690612c2b565b805160209091019060005b818110612cf15750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101612ce4565b610100810151604051612d3881612711602082018095612cd9565b51902090612d47815160ff1690565b60ff811680612dc05750509061273d612d6360408401516139fd565b9261271160806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b60018103612e1e57505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4669381019384529081019190915260608101929092529061273d8160808101612711565b60028103612e7457505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e46020820190815291810192909252606082019290925261273d8160808101612711565b600303612ec8575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4666020820190815291810192909252606082019290925261273d8160808101612711565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b9061230e9060409396959496606084526060840191611867565b9194929092600095600095600095600095600095612f2e611dde565b60028152937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9460005b828110612f8557505050505050508051151580612f77575b6129c75750565b506020810151841115612f70565b600381019d50959b5093995091975092909190612fa9908b9085013560e81c6115c0565b958a60008489036130ed575089915b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c036130bd5750906001612ff289612ff9948789611f56565b908b612851565b9c939c9b929b9a919a99909a9b9d8e9d9e8f905b106130775750928b88511461306e575b808b101561303c57508a60c08501528992959295949194939093612f58565b7f37daf62b0000000000000000000000000000000000000000000000000000000060005260048b905260245260446000fd5b6000885261301d565b8d8f6108eb61308885858c8e611f56565b9390926040519485947fb006aba000000000000000000000000000000000000000000000000000000000865260048601612ef8565b9798999a9160016130d38b6130da94888a611f56565b9086612851565b50929d919c909b929a9092918e8e61300d565b91612fb8565b73ffffffffffffffffffffffffffffffffffffffff610515959360609383521660208201528160408201520191611867565b908160209103126101b5575190565b9391909360009460009460005b81811061314f575050505050565b8481013560f881901c9860019092019788979692909160fc1c9889156139335750600189146138f357600289146137365760038914613707576004891461368657600689146135e6576005891461359857600789146134d1576008891461347b576009891461335257600a89146131ef577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b90919293949596975060038916978815613341575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691019081019081613267918787611f56565b6040517f898bd9210000000000000000000000000000000000000000000000000000000081529391849161329f918a60048501611989565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa91821561107e576132e29360009361330e575b5060ff909a168091019a613cc9565b90801561330857906132fc91600052602052604060002090565b955b9392919093613141565b506132fc565b60ff9193506133339060203d811161333a575b61332b81836103f4565b810190613125565b92906132d3565b503d613321565b8084013560f81c9850600101613204565b9091929394959697506003891697881561346a575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190810190816133ca918787611f56565b6040517f13792a4a00000000000000000000000000000000000000000000000000000000815293918491613402918b600485016118a6565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa91821561107e576134449360009361330e575060ff909a168091019a613cc9565b908015613464579061345e91600052602052604060002090565b956132fe565b5061345e565b8084013560f81c9850600101613367565b98506020870197509495939492939192909182013561349986613c70565b81146134a9575b61344490613c8a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506134a0565b975090919293949597600f16968715613586575b602060006134f76135649a9b86613b38565b9c9092918a60405161353a816127118a82019485603c917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008252601c8201520190565b51902092604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa1561107e576134449060ff6000519a1680910199613b7b565b600189019883013560f81c97506134e5565b9850602087019750949593949293919290918201358085146135be575b61344490613c31565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506135b5565b989091929394959662ffffff98506136086120b5600c8416603f9060021c1690565b918215613672575b6003168015613661575b9081906136459061363d908781013560e81c906003019c168c01809c8989611f56565b90898b613134565b911115613658575b906134449291613be6565b9982019961364d565b50600281019084013560f01c61361a565b8482013560f81c9250600190910190613610565b9750976136dc6136e9929394959697600f6136f193169085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290830180938686611f56565b908688613134565b9061345e92980198600052602052604060002090565b985096509394929391929091908082013590602001968015613464579061345e91600052602052604060002090565b909192939495969750600389169788156138e2575b8084013560601c996137aa916014019061376a9060021c6003166120b5565b9085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9081019061380e60208c6137c085858b8b611f56565b919073ffffffffffffffffffffffffffffffffffffffff8c604051968795869485937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611989565b0392165afa90811561107e577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000916000916138c4575b50160361388057509060ff61344492991680910199613b7b565b6108eb6138918c9389938989611f56565b906040519485947fb2fed7ae000000000000000000000000000000000000000000000000000000008652600486016130f3565b6138dc915060203d8111611acb57611abd81836103f4565b38613866565b8381013560f81c985060010161374b565b98600f91929394959697985016968715613922575b60148101976134449160ff9091169084013560601c613b7b565b8281013560f81c9750600101613908565b98509091929394959698600f16978815613985575b506020600061395b6135649a9b86613b38565b9c90916040519384938c859094939260ff6060936080840197845216602083015260408201520152565b60018101995083013560f81c97506020613948565b80151590816139a7575090565b90507fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8541490565b805160209091019060005b8181106139e75750505090565b82518452602093840193909201916001016139da565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0613a43613a2d83610471565b92613a3b60405194856103f4565b808452610471565b0136602083013760005b8351811015613b1f5780613a636001928661164b565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152613b0b610120826103f4565b519020613b18828561164b565b5201613a4d565b5090915060405161273d816127116020820180956139cf565b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff81116115bb5791565b90604051907fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208301937f53657175656e6365207369676e65723a0a000000000000000000000000000000855260601b16603183015260458201526045815261273d6065826103f4565b916040519160208301937f53657175656e6365206e657374656420636f6e6669673a0a000000000000000085526038840152605883015260788201526078815261273d6098826103f4565b60405160208101917f53657175656e636520737461746963206469676573743a0a0000000000000000835260388201526038815261273d6058826103f4565b61271161273d6126cf6126c9600060208601511515612c22565b60405160208101917f53657175656e636520616e792061646472657373207375626469676573743a0a835260408201526040815261273d6060826103f4565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e63652073617069656e7420636f6e6669673a0a00000000000000865260601b166039840152604d830152606d820152606d815261273d608d826103f456fea264697066735822122071c846bfb3a07ed1d03bb0cecee955d8b864be4c4d91b0f9a960528ecc060e8964736f6c634300081c0033","sourceMap":"423:331:29:-:0;;;;;;;;;;;;;-1:-1:-1;;423:331:29;;;;-1:-1:-1;;;;;423:331:29;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;423:331:29;;;;;;581:24:44;;423:331:29;;;;;;;;581:24:44;423:331:29;;;;;;;;;;;;;;;;;-1:-1:-1;423:331:29;;;;;;-1:-1:-1;423:331:29;;;;;-1:-1:-1;423:331:29","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436101561001e575b361561001c5761001c611b82565b005b60003560e01c806223de291461018d578063025b22bc1461018857806313792a4a14610183578063150b7a021461017e5780631626ba7e1461017957806319822f7c146101745780631a9b23371461016f5780631f6a1eb91461016a57806329561426146101655780634fcf3eca1461016057806351605d801461015b5780636ea44577146101565780638943ec02146101515780638c3f55631461014c57806392dcb3fc146101475780639c145aed14610142578063a65d69d41461013d578063aaf10f4214610138578063ad55366b14610133578063b93ea7ad1461012e578063bc197c8114610129578063f23a6e61146101245763f727ef1c0361000e576114a5565b611418565b611346565b6111e7565b61119b565b61114a565b6110db565b610fc3565b610f65565b610f29565b610ea5565b610e76565b610dd2565b610cb6565b610bfd565b610b1c565b610ab9565b610a04565b61097c565b6108ef565b6107f2565b6102db565b61024f565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101b557565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101b557565b6044359073ffffffffffffffffffffffffffffffffffffffff821682036101b557565b359073ffffffffffffffffffffffffffffffffffffffff821682036101b557565b9181601f840112156101b55782359167ffffffffffffffff83116101b557602083818601950101116101b557565b346101b55760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557610286610192565b5061028f6101ba565b506102986101dd565b5060843567ffffffffffffffff81116101b5576102b9903690600401610221565b505060a43567ffffffffffffffff81116101b55761001c903690600401610221565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55761030d610192565b30330361035a576020817f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca0392305573ffffffffffffffffffffffffffffffffffffffff60405191168152a1005b7fa19dbf00000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff8211176103d357604052565b610388565b6040810190811067ffffffffffffffff8211176103d357604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176103d357604052565b6040519061044460e0836103f4565b565b60405190610444610120836103f4565b359060ff821682036101b557565b359081151582036101b557565b67ffffffffffffffff81116103d35760051b60200190565b67ffffffffffffffff81116103d357601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926104cf82610489565b916104dd60405193846103f4565b8294818452818301116101b5578281602093846000960137010152565b9080601f830112156101b557816020610515933591016104c3565b90565b81601f820112156101b55780359061052f82610471565b9261053d60405194856103f4565b82845260208085019360051b830101918183116101b55760208101935b83851061056957505050505090565b843567ffffffffffffffff81116101b557820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082860301126101b5576105b0610435565b916105bd60208301610200565b83526040820135602084015260608201359267ffffffffffffffff84116101b55760e0836105f28860208098819801016104fa565b60408401526080810135606084015261060d60a08201610464565b608084015261061e60c08201610464565b60a0840152013560c082015281520194019361055a565b9080601f830112156101b557813561064c81610471565b9261065a60405194856103f4565b81845260208085019260051b8201019283116101b557602001905b8282106106825750505090565b6020809161068f84610200565b815201910190610675565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126101b55760043567ffffffffffffffff81116101b5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82850301126101b55761070c610446565b9061071981600401610456565b825261072760248201610464565b6020830152604481013567ffffffffffffffff81116101b55784600461074f92840101610518565b6040830152606481013560608301526084810135608083015260a481013567ffffffffffffffff81116101b55784600461078b928401016104fa565b60a083015260c481013560c083015260e481013560e083015261010481013567ffffffffffffffff81116101b557600485916107c8930101610635565b610100820152916024359067ffffffffffffffff82116101b5576107ee91600401610221565b9091565b346101b5576108003661069a565b909161010081019261081b6108168551516115ad565b6115cd565b9160005b85518051821015610882579061087c61085761083d8360019561164b565b5173ffffffffffffffffffffffffffffffffffffffff1690565b610861838861164b565b9073ffffffffffffffffffffffffffffffffffffffff169052565b0161081f565b5050838386610897336108618351518561164b565b526108a3818484611c54565b50156108b55760405160018152602090f35b6108eb906040519384937ff58cc8b5000000000000000000000000000000000000000000000000000000008552600485016118a6565b0390fd5b346101b55760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557610926610192565b5061092f6101ba565b5060643567ffffffffffffffff81116101b557610950903690600401610221565b505060206040517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b346101b55760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043560243567ffffffffffffffff81116101b5576020916109d46109da923690600401610221565b916118cb565b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b346101b55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043567ffffffffffffffff81116101b5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126101b557610a87602091602435604435916004016119a0565b604051908152f35b7fffffffff000000000000000000000000000000000000000000000000000000008116036101b557565b346101b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576020610afe600435610af981610a8f565b611e39565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043567ffffffffffffffff81116101b557610b66903690600401610221565b9060243567ffffffffffffffff81116101b557610b8a610b94913690600401610221565b9190935a93611f6e565b91610ba86060840151608085015190612232565b610bb3828585611c54565b929015610bc5575061001c935061238b565b836108eb86926040519384937fa2b6d61b000000000000000000000000000000000000000000000000000000008552600485016118a6565b346101b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043530330361035a578015610c8c576020817f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf855604051908152a1005b7f4294d1270000000000000000000000000000000000000000000000000000000060005260046000fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557600435610cec81610a8f565b30330361035a5773ffffffffffffffffffffffffffffffffffffffff610d1182611e39565b1615610d775760407fffffffff000000000000000000000000000000000000000000000000000000007f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19216610d68600082612be3565b815190815260006020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f1c3812cc000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b60009103126101b557565b346101b55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760207fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf854604051908152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101b5576004359067ffffffffffffffff82116101b5576107ee91600401610221565b610e7f36610e2d565b9030330361035a57610e9561001c925a92611f6e565b90610e9f826126af565b9061238b565b346101b55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557610edc610192565b5060443567ffffffffffffffff81116101b557610efd903690600401610221565b505060206040517f8943ec02000000000000000000000000000000000000000000000000000000008152f35b346101b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576020610a87600435612743565b346101b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576040610fa1600435612789565b73ffffffffffffffffffffffffffffffffffffffff8351921682526020820152f35b346101b557610fd136610e2d565b9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001680156110b157330361108357303b156101b5576110579160009160405193849283927f6ea4457700000000000000000000000000000000000000000000000000000000845260048401611b41565b038183305af1801561107e5761106957005b80611078600061001c936103f4565b80610dc7565b611917565b7f1d6ddbf4000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7fd13d78350000000000000000000000000000000000000000000000000000000060005260046000fd5b346101b55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101b55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576020305473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346101b55760c06111b76000806111b13661069a565b91612851565b926111c383929361399a565b906040519586526020860152151560408501526060840152608083015260a0820152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043561121d81610a8f565b6112256101ba565b9030330361035a5773ffffffffffffffffffffffffffffffffffffffff61124b82611e39565b166112c5577f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19173ffffffffffffffffffffffffffffffffffffffff7fffffffff000000000000000000000000000000000000000000000000000000006040931691166112b88183612be3565b82519182526020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f5b4d6d6a000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b9181601f840112156101b55782359167ffffffffffffffff83116101b5576020808501948460051b0101116101b557565b346101b55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55761137d610192565b506113866101ba565b5060443567ffffffffffffffff81116101b5576113a7903690600401611315565b505060643567ffffffffffffffff81116101b5576113c9903690600401611315565b505060843567ffffffffffffffff81116101b5576113eb903690600401610221565b50506040517fbc197c81000000000000000000000000000000000000000000000000000000008152602090f35b346101b55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55761144f610192565b506114586101ba565b5060843567ffffffffffffffff81116101b557611479903690600401610221565b505060206040517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b346101b55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576004356114df6101ba565b604435916bffffffffffffffffffffffff83168093036101b55730330361035a578273ffffffffffffffffffffffffffffffffffffffff8361156a7febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1967fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606097881b161785612b9e565b6040519384521660208301526040820152a1005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90600182018092116115bb57565b61157e565b919082018092116115bb57565b906115d782610471565b6115e460405191826103f4565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06116128294610471565b0190602036910137565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805182101561165f5760209160051b010190565b61161c565b919082519283825260005b8481106116ae5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b8060208092840101518282860101520161166f565b9080602083519182815201916020808360051b8301019401926000915b8383106116ef57505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080611762604085015160e0604086015260e0850190611664565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152970193019301919392906116e0565b906020808351928381520192019060005b8181106117b75750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016117aa565b805160ff1682526105159160208281015115159082015261010061184161181b604085015161012060408601526101208501906116c3565b606085015160608501526080850151608085015260a085015184820360a0860152611664565b9260c081015160c084015260e081015160e0840152015190610100818403910152611799565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b916118bd61051594926040855260408501906117e3565b926020818503910152611867565b906118e892916118d9611dde565b906003825260e0820152611c54565b5015611912577f1626ba7e0000000000000000000000000000000000000000000000000000000090565b600090565b6040513d6000823e3d90fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101b5570180359067ffffffffffffffff82116101b5576020019181360383136101b557565b908160209103126101b5575161051581610a8f565b604090610515949281528160208201520191611867565b91909173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169182156110b1578233036110835780611ad2575b506020915080610100611a02920190611923565b92611a3a60405194859384937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611989565b0381305afa90811561107e577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091611aa3575b501603611a9e57600090565b600190565b611ac5915060203d602011611acb575b611abd81836103f4565b810190611974565b38611a92565b503d611ab3565b823b156101b5576040517fb760faf900000000000000000000000000000000000000000000000000000000815230600482015292600091849160249183915af190811561107e57602092611a0292611b2c575b50906119ee565b806110786000611b3b936103f4565b38611b25565b916020610515938181520191611867565b3d15611b7d573d90611b6382610489565b91611b7160405193846103f4565b82523d6000602084013e565b606090565b600436108015611b8f5750565b611bc5906000357fffffffff00000000000000000000000000000000000000000000000000000000811691611c17575b50611e39565b73ffffffffffffffffffffffffffffffffffffffff8116611be35750565b60008091604051368382378036810184815203915af4611c01611b52565b9015611c0f57602081519101f35b602081519101fd5b7fffffffff000000000000000000000000000000000000000000000000000000008092503660040360031b1b161638611bbf565b901561165f5790565b91907f800000000000000000000000000000000000000000000000000000000000000080611cab611c858585611c4b565b357fff000000000000000000000000000000000000000000000000000000000000001690565b1614611d0a576000918291611cbf94612851565b905091909192808210611cda575050611cd79061399a565b91565b7ffd41fcba0000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b5050611d15906126af565b90611d1f82612789565b42811115611dac575073ffffffffffffffffffffffffffffffffffffffff81168015159081611da1575b50611d55575060019190565b7f8945c3130000000000000000000000000000000000000000000000000000000060005260048390523360245273ffffffffffffffffffffffffffffffffffffffff1660445260646000fd5b905033141538611d49565b7ff95b6ab700000000000000000000000000000000000000000000000000000000600052600484905260245260446000fd5b60405190610120820182811067ffffffffffffffff8211176103d3576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b73ffffffffffffffffffffffffffffffffffffffff906040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a120845216604082015260408152611eb06060826103f4565b519020541690565b90611ec282610471565b611ecf60405191826103f4565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611efd8294610471565b019060005b828110611f0e57505050565b602090604051611f1d816103b7565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c082015282828501015201611f02565b909392938483116101b55784116101b5578101920390565b919091611f79611dde565b6000815292600190823560f81c827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8183160161221b5750600060608701525b6007611fc860ff831660011c90565b16806121ca575b5060108181160361219557506001925b611fe884611eb8565b92604087019384526000905b85821061200357505050505050565b8281013560f81c9060010190918160018085160361217357506120473061202b83895161164b565b519073ffffffffffffffffffffffffffffffffffffffff169052565b600280841614612153575b600480841614612105575b6008808416146120d2575b6120bb6120b560c0856120948a608061208b8860108060019c9d1614935161164b565b51019015159052565b6120ab8a60a061208b88602080871614935161164b565b1660061c60031690565b60ff1690565b60c06120c883895161164b565b5101520190611ff4565b6001916120bb906120b59060c0908781013590602001969060606120f7878d5161164b565b510152959450505050612068565b9061214d908481013560e81c9060030161214661212d61212584846115c0565b838a8a611f56565b9190604061213c888d5161164b565b51019236916104c3565b90526115c0565b9061205d565b9083810135906020019190602061216b83895161164b565b510152612052565b61219092508481013560601c90601401929061202b83895161164b565b612047565b6020908116036121b75761ffff918381013560f01c906002015b921692611fdf565b60ff918381013560f81c906001016121af565b61220e919385929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290608087015238611fcf565b80850135606090811c908801526014019250611fb9565b9061223c82612743565b8181036122c257509060017f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f8819201908160405160208101907f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8252836040820152604081526122ac6060826103f4565b51902055604080519182526020820192909252a1565b917f9b6514f40000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b61230e604092959493956060835260608301906117e3565b9460208201520152565b9261051596959260c09592855260208501526040840152606083015260808201528160a08201520190611664565b6105159392606092825260208201528160408201520190611664565b61237861051594926060835260608301906117e3565b9260208201526040818403910152611664565b916000604082019384515190825b8281106123aa575b50505050505050565b6123b581885161164b565b51936123c460a0860151151590565b806126a7575b61266757506000936060810151801580158061265e575b6126265784906123f46080850151151590565b156125e05761249f9261241b855173ffffffffffffffffffffffffffffffffffffffff1690565b91156125da57505a905b61249a8b61246e60608d01516040890151908c8b604051998a967f4c4e814c00000000000000000000000000000000000000000000000000000000602089015260248801612318565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018552846103f4565b612b71565b156124e2575b506040805187815260208101839052600192917f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a91a15b01612399565b60c001805115612591576001815114612552575160021461250357386124a5565b9493505050507fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b9250612543612537612b83565b60405193849384612346565b0390a1388080808080806123a1565b50846108eb61255f612b83565b6040519384937f7f6b0bb100000000000000000000000000000000000000000000000000000000855260048501612362565b509250600180937f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d6125d26125c4612b83565b604051918291858c84612346565b0390a16124dc565b90612425565b835161261b93925073ffffffffffffffffffffffffffffffffffffffff169160208501519160001461262057505a905b604085015192612b5f565b61249f565b90612610565b83886108eb5a6040519384937f21395274000000000000000000000000000000000000000000000000000000008552600485016122f6565b50815a106123e1565b6040805188815260208101849052919550600192917f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b91819081016125d2565b5080156123ca565b61271161273d6126cf6126c9602085015115153090612c22565b93612d1d565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826103f4565b51902090565b60405160208101917f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83526040820152604081526127826060826103f4565b5190205490565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e8683526040820152604081526127c86060826103f4565b51902054906bffffffffffffffffffffffff8260601c921690565b604051906127f0826103d8565b60006020838281520152565b908160409103126101b557602060405191612816836103d8565b805183520151602082015290565b60409073ffffffffffffffffffffffffffffffffffffffff61051594931681528160208201520190611664565b909491939291853560f81c6001909381908761286b6127e3565b9360408089161480612b41575b612a44575b505050600180861614612a1e5760028581161460208501526007600286901c1688820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691019080969181966020166128ed9060051c90565b6128f6906115ad565b8a820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101959098899a81612942846126af565b98899361294e93611f56565b9161295893613134565b909861296c91600052602052604060002090565b9061297f91600052602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff166129a891600052602052604060002090565b94815190868215159283612a13575b505081612a04575b506129c75750565b6040517fccbb534f000000000000000000000000000000000000000000000000000000008152815160048201526020909101516024820152604490fd5b905060208201511015386129bf565b1415915086386129b7565b86612a399792949550612a319398611f56565b939092612f12565b919394909293929190565b8a81013560601c985060140192509087908a90849015612a68575b5082915061287d565b60038101955073ffffffffffffffffffffffffffffffffffffffff945081013560e81c92604092612aeb929091612ab691612aaf918990612aa989836115c0565b92611f56565b36916104c3565b83519586809481937fccce3bc80000000000000000000000000000000000000000000000000000000083523060048401612824565b0392165afa801561107e57612b0992600091612b12575b50926115c0565b86388981612a5f565b612b34915060403d604011612b3a575b612b2c81836103f4565b8101906127fc565b38612b02565b503d612b22565b5073ffffffffffffffffffffffffffffffffffffffff891615612878565b9160009391849360208451940192f190565b9160009291839260208351930191f490565b3d90604051916020818401016040528083526000602084013e565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e868352604082015260408152612bdd6060826103f4565b51902055565b60405160208101917fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1208352604082015260408152612bdd6060826103f4565b15612cd2576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a0815261273d60c0826103f4565b4690612c2b565b805160209091019060005b818110612cf15750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101612ce4565b610100810151604051612d3881612711602082018095612cd9565b51902090612d47815160ff1690565b60ff811680612dc05750509061273d612d6360408401516139fd565b9261271160806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b60018103612e1e57505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4669381019384529081019190915260608101929092529061273d8160808101612711565b60028103612e7457505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e46020820190815291810192909252606082019290925261273d8160808101612711565b600303612ec8575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4666020820190815291810192909252606082019290925261273d8160808101612711565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b9061230e9060409396959496606084526060840191611867565b9194929092600095600095600095600095600095612f2e611dde565b60028152937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9460005b828110612f8557505050505050508051151580612f77575b6129c75750565b506020810151841115612f70565b600381019d50959b5093995091975092909190612fa9908b9085013560e81c6115c0565b958a60008489036130ed575089915b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c036130bd5750906001612ff289612ff9948789611f56565b908b612851565b9c939c9b929b9a919a99909a9b9d8e9d9e8f905b106130775750928b88511461306e575b808b101561303c57508a60c08501528992959295949194939093612f58565b7f37daf62b0000000000000000000000000000000000000000000000000000000060005260048b905260245260446000fd5b6000885261301d565b8d8f6108eb61308885858c8e611f56565b9390926040519485947fb006aba000000000000000000000000000000000000000000000000000000000865260048601612ef8565b9798999a9160016130d38b6130da94888a611f56565b9086612851565b50929d919c909b929a9092918e8e61300d565b91612fb8565b73ffffffffffffffffffffffffffffffffffffffff610515959360609383521660208201528160408201520191611867565b908160209103126101b5575190565b9391909360009460009460005b81811061314f575050505050565b8481013560f881901c9860019092019788979692909160fc1c9889156139335750600189146138f357600289146137365760038914613707576004891461368657600689146135e6576005891461359857600789146134d1576008891461347b576009891461335257600a89146131ef577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b90919293949596975060038916978815613341575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691019081019081613267918787611f56565b6040517f898bd9210000000000000000000000000000000000000000000000000000000081529391849161329f918a60048501611989565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa91821561107e576132e29360009361330e575b5060ff909a168091019a613cc9565b90801561330857906132fc91600052602052604060002090565b955b9392919093613141565b506132fc565b60ff9193506133339060203d811161333a575b61332b81836103f4565b810190613125565b92906132d3565b503d613321565b8084013560f81c9850600101613204565b9091929394959697506003891697881561346a575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190810190816133ca918787611f56565b6040517f13792a4a00000000000000000000000000000000000000000000000000000000815293918491613402918b600485016118a6565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa91821561107e576134449360009361330e575060ff909a168091019a613cc9565b908015613464579061345e91600052602052604060002090565b956132fe565b5061345e565b8084013560f81c9850600101613367565b98506020870197509495939492939192909182013561349986613c70565b81146134a9575b61344490613c8a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506134a0565b975090919293949597600f16968715613586575b602060006134f76135649a9b86613b38565b9c9092918a60405161353a816127118a82019485603c917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008252601c8201520190565b51902092604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa1561107e576134449060ff6000519a1680910199613b7b565b600189019883013560f81c97506134e5565b9850602087019750949593949293919290918201358085146135be575b61344490613c31565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506135b5565b989091929394959662ffffff98506136086120b5600c8416603f9060021c1690565b918215613672575b6003168015613661575b9081906136459061363d908781013560e81c906003019c168c01809c8989611f56565b90898b613134565b911115613658575b906134449291613be6565b9982019961364d565b50600281019084013560f01c61361a565b8482013560f81c9250600190910190613610565b9750976136dc6136e9929394959697600f6136f193169085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290830180938686611f56565b908688613134565b9061345e92980198600052602052604060002090565b985096509394929391929091908082013590602001968015613464579061345e91600052602052604060002090565b909192939495969750600389169788156138e2575b8084013560601c996137aa916014019061376a9060021c6003166120b5565b9085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9081019061380e60208c6137c085858b8b611f56565b919073ffffffffffffffffffffffffffffffffffffffff8c604051968795869485937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611989565b0392165afa90811561107e577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000916000916138c4575b50160361388057509060ff61344492991680910199613b7b565b6108eb6138918c9389938989611f56565b906040519485947fb2fed7ae000000000000000000000000000000000000000000000000000000008652600486016130f3565b6138dc915060203d8111611acb57611abd81836103f4565b38613866565b8381013560f81c985060010161374b565b98600f91929394959697985016968715613922575b60148101976134449160ff9091169084013560601c613b7b565b8281013560f81c9750600101613908565b98509091929394959698600f16978815613985575b506020600061395b6135649a9b86613b38565b9c90916040519384938c859094939260ff6060936080840197845216602083015260408201520152565b60018101995083013560f81c97506020613948565b80151590816139a7575090565b90507fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8541490565b805160209091019060005b8181106139e75750505090565b82518452602093840193909201916001016139da565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0613a43613a2d83610471565b92613a3b60405194856103f4565b808452610471565b0136602083013760005b8351811015613b1f5780613a636001928661164b565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152613b0b610120826103f4565b519020613b18828561164b565b5201613a4d565b5090915060405161273d816127116020820180956139cf565b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff81116115bb5791565b90604051907fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208301937f53657175656e6365207369676e65723a0a000000000000000000000000000000855260601b16603183015260458201526045815261273d6065826103f4565b916040519160208301937f53657175656e6365206e657374656420636f6e6669673a0a000000000000000085526038840152605883015260788201526078815261273d6098826103f4565b60405160208101917f53657175656e636520737461746963206469676573743a0a0000000000000000835260388201526038815261273d6058826103f4565b61271161273d6126cf6126c9600060208601511515612c22565b60405160208101917f53657175656e636520616e792061646472657373207375626469676573743a0a835260408201526040815261273d6060826103f4565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e63652073617069656e7420636f6e6669673a0a00000000000000865260601b166039840152604d830152606d820152606d815261273d608d826103f456fea264697066735822122071c846bfb3a07ed1d03bb0cecee955d8b864be4c4d91b0f9a960528ecc060e8964736f6c634300081c0033","sourceMap":"423:331:29:-:0;;;;;;;;;-1:-1:-1;423:331:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;401:4:52;379:10;:27;375:75;;423:331:29;401:4:52;1013:38:46;401:4:52;;1125:46:46;423:331:29;;;;;;;1013:38:46;423:331:29;375:75:52;423:20;-1:-1:-1;423:20:52;379:10;423:331:29;;;-1:-1:-1;423:20:52;:331:29;;;;;;;;;;;2321:4:48;423:331:29;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::i;:::-;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;423:331:29;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;4682:22:50;;;;;;4668:48;4682:33;:22;;423:331:29;4682:33:50;:::i;:::-;4668:48;:::i;:::-;4728:13;-1:-1:-1;4778:3:50;4747:22;;423:331:29;;4743:33:50;;;;;4810:25;4791:44;4810:25;;;4714:1;4810:25;;:::i;:::-;423:331:29;;;;;4810:25:50;4791:44;;;;:::i;:::-;423:331:29;;;;;;4791:44:50;423:331:29;4728:13:50;;4743:33;;;;;;4848:57;4895:10;4848:57;4862:22;;423:331:29;4848:57:50;;:::i;:::-;4911:38;4974:41;;;;;:::i;:::-;5025:8;;5021:81;;423:331:29;;4714:1:50;423:331:29;;;;;5021:81:50;5050:45;423:331:29;;;5050:45:50;;;;;;423:331:29;5050:45:50;;;:::i;:::-;;;;423:331:29;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;3351:31:45;423:331:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;1358:19:45;423:331:29;;;;;:::i;:::-;1358:19:45;:::i;:::-;423:331:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1572:33:43;423:331:29;;;;;;:::i;:::-;1524:9:43;;;;1572:33;;:::i;:::-;1626:13;1641;1626;;;423:331:29;1641:13:43;;;423:331:29;1641:13:43;;:::i;:::-;1694:40;;;;;:::i;:::-;1745:8;;;1741:73;;1850:7;;;;;:::i;1741:73::-;423:331:29;1770:37:43;423:331:29;;;;1770:37:43;;;;;;423:331:29;1770:37:43;;;:::i;423:331:29:-;;;;;;;;;;;;;401:4:52;379:10;:27;375:75;;1242:24:54;;1238:69;;423:331:29;260:41:49;1371:28:54;260:41:49;509:66:54;260:41:49;423:331:29;;;;;1371:28:54;423:331:29;1238:69:54;1283:17;-1:-1:-1;1283:17:54;423:331:29;-1:-1:-1;1283:17:54;423:331:29;;;;;;;;;;;;;:::i;:::-;401:4:52;379:10;:27;375:75;;423:331:29;2005:19:45;;;:::i;:::-;423:331:29;2005:33:45;2001:87;;423:331:29;;2492:37:45;423:331:29;;2439:41:45;423:331:29;2439:41:45;;:::i;:::-;423:331:29;;;;;;;;;;2492:37:45;423:331:29;2001:87:45;423:331:29;2055:26:45;;-1:-1:-1;2055:26:45;423:331:29;;;;-1:-1:-1;2055:26:45;423:331:29;;;;;;;:::o;:::-;;;;;;;;;;;;509:66:54;394:41:49;423:331:29;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;401:4:52;;379:10;:27;375:75;;2142:33:43;2255:7;2094:9;;2142:33;;:::i;:::-;2198:21;;;;:::i;:::-;2255:7;;:::i;423:331:29:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;3526:28:45;423:331:29;;;;;;;;;;;;;;;806:50:47;423:331:29;;806:50:47;:::i;423:331:29:-;;;;;;;;;;;;2500:26:50;423:331:29;;2500:26:50;:::i;:::-;423:331:29;;;;;;;;;;;;;;;;;;;:::i;:::-;1358:10:44;423:331:29;1358:10:44;423:331:29;1358:24:44;;1354:69;;1433:10;:24;1429:81;;1516:4;:26;;;;;423:331:29;1380:1:44;423:331:29;;;1516:26:44;;;;;423:331:29;1516:26:44;;423:331:29;1516:26:44;;;:::i;:::-;;:4;;;:26;;;;;;;;423:331:29;1516:26:44;;;1380:1;1516:26;;;:::i;:::-;;;:::i;:::-;;:::i;1429:81::-;1474:29;1380:1;1474:29;1433:10;423:331:29;;;1380:1:44;1474:29;1354:69;1399:17;1380:1;1399:17;423:331:29;1380:1:44;1399:17;423:331:29;;;;;;;;;;;;;;;418:35:44;423:331:29;;;;;;;;;;;;;;;;1252:47:46;;423:331:29;;;;;;;;;;;;;5879:56:50;-1:-1:-1;423:331:29;;;;:::i;:::-;5879:56:50;;:::i;:::-;715:31:29;;;;;;:::i;:::-;423:331;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;401:4:52;;379:10;:27;375:75;;423:331:29;1667:19:45;;;:::i;:::-;423:331:29;1663:88:45;;2492:37;423:331:29;;;;;;;;2439:41:45;;;;:::i;:::-;423:331:29;;;;;;;;;2492:37:45;423:331:29;1663:88:45;423:331:29;1717:27:45;;-1:-1:-1;1717:27:45;423:331:29;;;;-1:-1:-1;1717:27:45;423:331:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;423:331:29;;2946:37:45;423:331:29;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;2696:32:45;423:331:29;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;401:4:52;379:10;:27;375:75;;423:331:29;;;2043:85:50;2998:47;423:331:29;;;;;;;2051:76:50;2043:85;;:::i;:::-;423:331:29;;;;;;;;;;;;;;2998:47:50;423:331:29;;;;;;;;;;;;;4714:1:50;423:331:29;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;423:331:29;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;423:331:29;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;423:331:29;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;5170:322:50:-;;5358:40;5170:322;;423:331:29;;:::i;:::-;2556:4:48;;;;4826:15;;;2556:4;5358:40:50;:::i;:::-;5408:8;;5404:45;;423:331:29;5170:322:50;:::o;5404:45::-;423:331:29;5426:16:50;:::o;423:331:29:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;614:665:44:-;;;;423:331:29;792:10:44;423:331:29;792:24:44;;;788:69;;867:10;;:24;863:81;;1006:24;1002:123;;614:665;1169:16;1135:51;1169:16;;;;;;;;;:::i;:::-;423:331:29;1135:51:44;423:331:29;;1135:51:44;;;;;423:331:29;1135:51:44;;;;;;:::i;:::-;;:4;;:51;;;;;;;423:331:29;1135:51:44;423:331:29;1135:51:44;423:331:29;1135:51:44;;;614:665;423:331:29;;1135:80:44;1131:129;;423:331:29;614:665:44;:::o;1131:129::-;412:1;1225:28;:::o;1135:51::-;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;1002:123;1040:78;;;;;423:331:29;;;1040:78:44;;1112:4;1040:78;;;423:331:29;;-1:-1:-1;;423:331:29;;;;;;1040:78:44;;;;;;;1135:51;1040:78;1169:16;1040:78;;;1002:123;;;;;1040:78;;;423:331:29;1040:78:44;;;:::i;:::-;;;;423:331:29;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;423:331:29;;;;:::o;:::-;;;:::o;3638:392:45:-;3695:1;3676:8;:20;;;3672:354;;3638:392;:::o;3672:354::-;3723:27;3733:16;3676:8;423:331:29;;;;;;;3672:354:45;3723:27;;:::i;:::-;423:331:29;;;3758:262:45;;3638:392;:::o;3758:262::-;3676:8;423:331:29;;;;3676:8:45;423:331:29;;;3676:8:45;;423:331:29;;;;;3832:29:45;;;;;;:::i;:::-;3871:141;;;;;;;;;;;;;;;;;423:331:29;;3676:8:45;;;;3695:1;423:331:29;;;;;;;;;;;;;;;:::o;3301:1109:50:-;;;423:331:29;3555:13:50;;;;;;:::i;:::-;;423:331:29;;;;3555:13:50;3579:20;:28;3575:429;;3566:1;4188:56;;;;;;:::i;:::-;4146:98;;;;;4282:18;;;;4278:87;;715:31:29;;;;;:::i;:::-;3301:1109:50;:::o;4278:87::-;4317:41;3566:1;4317:41;3772:48;423:331:29;;;;1380:1:44;1474:29;3575:429:50;3626:15;;;;;:::i;:::-;3686:27;;;;:::i;:::-;3738:15;3725:28;;;3721:108;;423:331:29;;;;3841:18:50;;;:40;;;;3575:429;3837:131;;;3976:21;3984:4;3976:21;;:::o;3837:131::-;3900:59;3566:1;3900:59;;423:331:29;;;3942:10:50;423:331:29;;;;;;;1380:1:44;1474:29;3841:40:50;3871:10;;;3863:18;;3841:40;;;3721:108;3772:48;3566:1;3772:48;;423:331:29;;;;;;1380:1:44;1474:29;423:331:29;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;423:331:29;;-1:-1:-1;423:331:29;;;;;;;;;-1:-1:-1;423:331:29;;;;-1:-1:-1;423:331:29;;;;;;;;;-1:-1:-1;423:331:29;;;;-1:-1:-1;423:331:29;;;;;;:::o;2134:172:45:-;423:331:29;2134:172:45;423:331:29;;;753:25:49;;;;:66:45;423:331:29;;;;;;;;753:25:49;;;;;;:::i;:::-;423:331:29;743:36:49;;785:40;423:331:29;2134:172:45;:::o;2321:4:48:-;;423:331:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;2321:4:48;;;;;:::i;:::-;;;-1:-1:-1;2321:4:48;;;;;;;;;:::o;:::-;;423:331:29;;;;;;:::i;:::-;-1:-1:-1;2321:4:48;;-1:-1:-1;2321:4:48;;;;423:331:29;;2321:4:48;;;-1:-1:-1;423:331:29;2321:4:48;;;-1:-1:-1;2321:4:48;;;;-1:-1:-1;2321:4:48;;;;-1:-1:-1;2321:4:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4859:2701::-;;;;423:331:29;;:::i;:::-;;2556:4:48;;;566:109:68;;;;;;;5163:25:48;:17;;;:25;5176:4;;5198:14;2321:4;5198:14;;;2556:4;5159:140;5396:4;5377:15;423:331:29;;;;2321:4:48;;;5377:15;5376:24;5411:13;5407:122;;5159:140;-1:-1:-1;5635:4:48;5622:17;;;:25;5635:4;;5657:12;5176:4;5618:320;;5983:20;;;:::i;:::-;5966:14;;;;:37;;;2321:4;6010:1546;6030:12;;;;;;4859:2701;;;;;;:::o;6044:3::-;798:135:68;;;;;;;;;6076:44:48;;;5176:4;6227:12;;;:20;5176:4;;6314;6283:36;6314:4;6283:17;:14;;;:17;:::i;:::-;;423:331:29;;;;;;6283:36:48;6529:4;6521:12;;;:20;6517:109;;6223:226;6704:4;6696:12;;;:20;6692:287;;6223:226;7065:4;7057:12;;;:20;7053:112;;6223:226;7494:55;7530:19;7539:4;7275:12;7241:55;7275:12;7241:30;:17;7275:12;5635:4;7275:12;5176:4;7275:12;;;:20;7241:14;;:17;:::i;:::-;;:30;2321:4;423:331:29;;2321:4:48;;;7241:55;7364;7398:12;7364:30;:17;7398:12;7406:4;7398:12;;;:20;7364:14;;:17;:::i;:55::-;7531:12;423:331:29;2321:4:48;;;;;7530:19;423:331:29;;;;7494:55:48;7539:4;7494:17;:14;;;:17;:::i;:::-;;:33;2556:4;423:331:29;6015:13:48;;;7053:112;5176:4;;7494:55;;7530:19;;7539:4;;2102:103:68;;;;;;;7090:14:48;;:26;:17;:14;;;:17;:::i;:::-;;:26;2556:4;7053:112;;;;;;;;6692:287;1201:256:68;6947:23:48;;1318:135:68;;;;;;;;;2321:4:48;6899:38;6914:22;1318:135:68;;6914:22:48;:::i;:::-;6899:38;;;;:::i;:::-;6874:14;;5966;6874:17;:14;;;:17;:::i;:::-;;:22;2321:4;;;;:::i;:::-;6874:63;;6947:23;:::i;:::-;6692:287;;;6517:109;1983:226:68;2102:103;;;;;;;6554:14:48;;7406:4;6554:17;:14;;;:17;:::i;:::-;;:23;2556:4;6517:109;;6223:226;6379:61;;-1:-1:-1;1840:135:68;;;;;;;;;6380:14:48;;:17;:14;;;:17;:::i;6379:61::-;6223:226;;5618:320;5779:4;5766:17;;;:25;5779:4;;2321;;1058:135:68;;;;;;;;;941:256;5803:48:48;2321:4;5762:170;5618:320;;5762:170;423:331:29;;798:135:68;;;;;;;;;683:254;;5407:122:48;2213:380:68;;;;;;;;2363:226;;;;;;;;;;;;;;;;;;;2213:380;;;5458:64:48;;5459:14;;;2556:4;5407:122;;;5159:140;1840:135:68;;;;;;;;5238:14:48;;;2556:4;1840:135:68;;;-1:-1:-1;5159:140:48;;1011:362:47;;806:50;;;:::i;:::-;1131:22;;;1127:88;;423:331:29;;1267:1:47;1319:29;423:331:29;;;;;;552:25:49;;;;543:66:47;423:331:29;;;;;;;;552:25:49;;;;;;:::i;:::-;423:331:29;542:36:49;;584:40;423:331:29;;;;;;;;;;;;;1319:29:47;1011:362::o;1127:88::-;1170:38;;-1:-1:-1;1170:38:47;;423:331:29;;;;;;-1:-1:-1;1170:38:47;423:331:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2657:4:48:-;;;;;;423:331:29;;2657:4:48;;;423:331:29;2657:4:48;;;;;;;;:::i;2763:::-;;;;;;;;;;;;;:::i;:::-;;;;;423:331:29;2763:4:48;;;;;;;;:::i;2272:1859:43:-;;2393:5;2424:14;;;;;;423:331:29;2456:13:43;;2471:12;;;;;;2451:1676;2272:1859;;;;;;;:::o;2485:3::-;2525:17;:14;;;:17;:::i;:::-;;2609;423:331:29;2609:17:43;;;423:331:29;;;;;;2609:31:43;;;2485:3;2605:102;;2833:17;2393:5;2878:13;;;;423:331:29;2903:13:43;;;;:37;;;2485:3;2899:105;;3012:12;;423:331:29;3036:17:43;;;423:331:29;;;;;;3036:17:43;;;3077:348;423:331:29;;;;;;;;;3129:36:43;;;;3145:9;;3129:36;;3177:238;3366:14;3177:238;2878:13;3366:14;;423:331:29;2424:14:43;3394:9;;;423:331:29;;;2424:14:43;423:331:29;3177:238:43;;;3213:55;3177:238;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;3077:348;:::i;:::-;3566:8;3562:520;;3032:522;-1:-1:-1;2424:14:43;423:331:29;;;;;;;;;;;;;;4095:25:43;;;2456:13;423:331:29;2456:13:43;;3562:520;3590:20;;423:331:29;;3590:53:43;3586:180;;423:331:29;;;3780:56:43;3776:136;;423:331:29;2867:4:48;3926:55:43;3922:152;;3562:520;;;3922:152;4024:21;;;;;;4000:46;4024:21;;4000:46;4024:21;;:::i;:::-;2424:14;423:331:29;4000:46:43;;;;;:::i;:::-;;;;4058:5;;;;;;;;;3776:136;3879:21;;3857:44;3879:21;;:::i;:::-;2424:14;423:331:29;3857:44:43;;;;;;;;;;:::i;3586:180::-;3657:16;;;423:331:29;3657:16:43;3713:21;3690:45;;3713:21;;:::i;:::-;2424:14;423:331:29;3690:45:43;;;;;;;:::i;:::-;;;;3747:8;;3129:36;;;;3032:522;423:331:29;;3462:83:43;;423:331:29;-1:-1:-1;423:331:29;;3485:10:43;;;;423:331:29;3497:36:43;;;;;3513:9;;3497:36;;2424:14;3535:9;;;3462:83;;:::i;:::-;3032:522;;3497:36;;;;2899:105;2985:9;;2959:36;2985:9;2424:14;423:331:29;2959:36:43;;;;;;;;;;:::i;2903:37::-;2920:9;;;:20;2903:37;;2605:102;2424:14;423:331:29;;;;;;;;;;;;;-1:-1:-1;423:331:29;;;2657:23:43;;423:331:29;;;;2657:23:43;423:331:29;2609:31:43;2630:10;;;2609:31;;9564:274:48;9784:48;;9743:18;9666:50;9682:18;;;423:331:29;;;9710:4:48;9666:50;;:::i;:::-;9743:18;;:::i;:::-;423:331:29;;9784:48:48;;;9682:18;9784:48;;;;423:331:29;;;;;;;;;;;;;;;;;;9784:48:48;;;;;;;;;:::i;:::-;423:331:29;9774:59:48;;9564:274;:::o;632:197:49:-;423:331:29;;753:25:49;;;;543:66:47;423:331:29;;;;;;;753:25:49;;;;;;:::i;:::-;423:331:29;743:36:49;;785:40;632:197;:::o;1637:245:50:-;423:331:29;;753:25:49;;;;834:66:50;423:331:29;;;;;;;753:25:49;;;;;;:::i;:::-;423:331:29;743:36:49;;785:40;2321:4:48;423:331:29;2321:4:48;753:25:49;2321:4:48;423:331:29;;1637:245:50;:::o;423:331:29:-;;;;;;;:::i;:::-;-1:-1:-1;423:331:29;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;2963:3141:51:-;;;;;;;566:109:68;;;;;3268:69:51;;;3762:24;423:331:29;;;:::i;:::-;3963:20:51;3979:4;3963:20;;;:28;:59;;;2963:3141;3959:742;;2963:3141;4774:20;;;4790:4;4774:20;;;:28;4770:126;;5004:4;4988:20;;;:28;4967:18;;;2321:4:48;;423:331:29;2321:4:48;;;;2363:226:68;;;;;;;;;;;;;;;;;;;;;;;;;5158:67:51;;;;;5330:20;4967:18;5330:20;5329:27;;423:331:29;2321:4:48;;;5329:27:51;5328:33;;;:::i;:::-;2363:226:68;;;;;;;;;;;;;;;;;;;;;;;;;5369:65:51;;;;5480:15;;;;;:::i;:::-;5555:19;;;;;;:::i;:::-;5523:52;;;;:::i;:::-;5501:74;5594:50;;;545:85:69;;;;;;;461:173;;5594:50:51;5662:51;;;545:85:69;;;;;;;461:173;;5662:51:51;423:331:29;;;5731:72:51;;545:85:69;;;;;;;461:173;;5731:72:51;423:331:29;;;5948:32:51;;;;;:67;;;;2963:3141;5948:104;;;;;2963:3141;5944:156;;;2963:3141;:::o;5944:156::-;3979:4;423:331:29;6069:24:51;;;423:331:29;;6069:24:51;;;423:331:29;;;;;;;;;;;;5050:45:50;5948:104:51;6033:19;;4967:18;6033:19;;423:331:29;-1:-1:-1;6019:33:51;5948:104;;;:67;5984:31;;;-1:-1:-1;5948:67:51;;;;4770:126;4869:19;4819:70;4869:19;;;;;;;;;:::i;:::-;4819:70;;;;:::i;:::-;4812:77;;;;;;;;;:::o;3959:742::-;1840:135:68;;;;;;;-1:-1:-1;1840:135:68;;;-1:-1:-1;3162:307:68;1840:135;;;;;;4197:20:51;4193:502;;3959:742;;;;;;;4193:502;1318:135:68;;;;-1:-1:-1;423:331:29;;-1:-1:-1;1318:135:68;;;;;;3979:4:51;;4572:73;;3979:4;;2321::48;;4471:48:51;;1318:135:68;;4489:29:51;1318:135:68;;4489:29:51;:::i;:::-;4471:48;;:::i;:::-;2321:4:48;;;:::i;:::-;423:331:29;;4572:73:51;;;;;;423:331:29;4572:73:51;;4621:4;4572:73;;;;:::i;:::-;;423:331:29;;4572:73:51;;;;;;4656:30;4572:73;-1:-1:-1;4572:73:51;;;4193:502;4561:84;4656:30;;:::i;:::-;4193:502;;;;;;4572:73;;;;3979:4;4572:73;3979:4;4572:73;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;3963:59;423:331:29;;;;3995:27:51;3963:59;;1431:196:69;;1538:85;1431:196;;;;1538:85;;;;;;;1431:196;:::o;1997:192::-;;2098:87;1997:192;;;;2098:87;;;;;;;1997:192;:::o;758:271::-;825:200;;;;;;;;;;;;;;;;;;;;758:271::o;443:185:49:-;423:331:29;;552:25:49;;;;834:66:50;423:331:29;;;;;;;552:25:49;;;;;;:::i;:::-;423:331:29;542:36:49;;584:40;443:185::o;:::-;423:331:29;;552:25:49;;;;753:66:45;423:331:29;;;;;;;552:25:49;;;;;;:::i;939:351:48:-;1206:48;;;-1:-1:-1;1206:48:48;;423:331:29;;;1077:202:48;;;;423:331:29;539:66:48;423:331:29;;709:66:48;423:331:29;868:66:48;;423:331:29;868:66:48;;;;423:331:29;868:66:48;;;423:331:29;;868:66:48;;;423:331:29;868:66:48;1077:202;;;;;;:::i;1206:48::-;1240:13;1206:48;;;423:331:29;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;8278:1282:48;8416:22;;;;423:331:29;;8399:40:48;;423:331:29;8399:40:48;;;423:331:29;;;:::i;8399:40:48:-;423:331:29;8389:51:48;;423:331:29;;;;;;;;;;;;8451:34:48;423:331:29;;8525:14:48;;;8712:82;8515:25;423:331:29;8525:14:48;;;8515:25;:::i;:::-;8750:14;8712:82;8766:14;8750;;;423:331:29;8766:14:48;;423:331:29;;;;8712:82:48;;;8399:40;8712:82;;;;1799:66;;;;;;;;;423:331:29;1799:66:48;423:331:29;;1799:66:48;;;423:331:29;1799:66:48;;;423:331:29;1799:66:48;;;423:331:29;1799:66:48;423:331:29;1799:66:48;8447:1109;2763:4;8812:29;;2763:4;;-1:-1:-1;;8998:16:48;;;423:331:29;;8399:40:48;423:331:29;;;8988:27:48;423:331:29;;;1979:66:48;8959:70;;;423:331:29;;;1979:66:48;;;423:331:29;;;;1979:66:48;;;423:331:29;;;;8959:70:48;;423:331:29;1979:66:48;;;8959:70;1979:66;8808:748;2867:4;9047:35;;2867:4;;-1:-1:-1;;9216:18:48;;423:331:29;;;;2174:66:48;8399:40;9181:67;;423:331:29;;;1979:66:48;;;423:331:29;;;;1979:66:48;;;423:331:29;;;;9181:67:48;423:331:29;1979:66:48;;;9181:67;1979:66;9043:513;2556:4;9266:28;2556:4;;-1:-1:-1;9443:15:48;;423:331:29;;;;1979:66:48;8399:40;9414:58;;423:331:29;;;1979:66:48;;;423:331:29;;;;1979:66:48;;;423:331:29;;;;9414:58:48;423:331:29;1979:66:48;;;9414:58;1979:66;9262:294;9523:26;423:331:29;9523:26:48;423:331:29;;9523:26:48;423:331:29;2482:4:48;1380:1:44;1474:29;423:331:29;;;;;;;;;;;;;;;;;;:::i;6108:1663:51:-;;;;;;423:331:29;6304:14:51;423:331:29;6320:17:51;423:331:29;6339:18:51;423:331:29;6359:14:51;423:331:29;;;;:::i;:::-;;2556:4:48;;6423:47:51;6522:17;;423:331:29;6553:26:51;;;;;;423:331:29;;;;;;;;;7647:33:51;;:71;;;6546:1091;7643:124;;6108:1663;:::o;7647:71::-;7698:20;;;;423:331:29;7684:34:51;;;7647:71;;6546:1091;1318:135:68;;;;-1:-1:-1;1201:256:68;;-1:-1:-1;1201:256:68;;-1:-1:-1;1201:256:68;;-1:-1:-1;1201:256:68;;;;6717:16:51;;1318:135:68;;;;;;;6717:16:51;:::i;:::-;6773:57;;423:331:29;6773:28:51;;;;;:57;;;;6522:17;6843:35;;6522:17;;6971:26;;6999:4;6971:26;;6953:65;6971:26;;;;:::i;:::-;6953:65;;;:::i;:::-;6890:128;;;;;;;;;;;;;;;;6839:339;;;;7190:18;7186:122;;7315:16;423:331:29;;;;7344:32:51;7340:89;;6839:339;7441:28;;;;7437:115;;7560:23;;;;;2556:4:48;7603:27:51;6546:1091;;;;;;;;;;;;7437:115;7488:55;423:331:29;7488:55:51;3772:48:50;423:331:29;;;;;;1380:1:44;1474:29;7340:89:51;423:331:29;2556:4:48;;7340:89:51;;7186:122;7253:26;;7227:72;7253:26;;;;;;:::i;:::-;423:331:29;;;;;7227:72:51;;;;;;;;;;:::i;6839:339::-;7122:26;;;;;7150:4;7122:26;;7099:70;7122:26;;;;:::i;:::-;7099:70;;;:::i;:::-;-1:-1:-1;7043:126:51;;;;;;;;;;;;;6839:339;;6773:57;;;;842:1;423:331:29;842:1:51;;;;;423:331:29;;;842:1:51;;;423:331:29;842:1:51;;;;;;;;:::i;1206:::-;;;;;;;;;423:331:29;1206:1:51;:::o;7775:11084::-;;;;;423:331:29;7930:12:51;423:331:29;7968:14:51;423:331:29;8044:26:51;;;;;;7775:11084;;;;;:::o;8037:10812::-;798:135:68;;;;;;;;;;;;;;;;683:254;;;;2321:4:48;;8454:27:51;;;8450:864;;9374:20;412:1:44;9374:20:51;;9370:676;;842:1;10096:30;;10092:1383;;885:1;11512:17;;11508:279;;8405:1;11826:19;;11822:656;;1023:1;12517:19;;12513:1278;;978:1;13833:22;;13829:518;;1080:1;14398:31;;14394:933;;1150:1;15464:44;;15460:617;;1206:1;16127:30;;16123:1308;;1270:2;17489:38;;17485:1312;;18814:26;423:331:29;18814:26:51;8405:1;423:331:29;;;;1380:1:44;1474:29;17485:1312:51;17799:16;;;;;;;;;885:1;17799:16;;17832:15;;;17828:99;;17485:1312;1840:135:68;;;;;;;;;18081:16:51;;423:331:29;2321:4:48;;;423:331:29;;2363:226:68;;;;;;;;;;;;;;;;;;;;;;;;;423:331:29;;;18467:26:51;;;;;;;:::i;:::-;423:331:29;;;18405:89:51;;423:331:29;;;;18405:89:51;;423:331:29;8405:1:51;18405:89;;;:::i;:::-;;423:331:29;;;;18405:89:51;;;;;;;;;;;;18637:51;18405:89;423:331:29;18405:89:51;;;17485:1312;18506:16;423:331:29;18506:16:51;423:331:29;;;;;18637:51:51;;:::i;:::-;18707:59;:18;;;;18728:31;;;545:85:69;;;;;;;461:173;;18728:31:51;18778:8;8037:10812;;;;;;;;18707:59;;;;18405:89;423:331:29;18405:89:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;17828:99;798:135:68;;;;;;;-1:-1:-1;798:135:68;;17828:99:51;;16123:1308;16429:16;;;;;;;;;885:1;16429:16;;16462:15;;;16458:99;;16123:1308;1840:135:68;;;;;;;;;16749:16:51;;423:331:29;2321:4:48;;;423:331:29;;2363:226:68;;;;;;;;;;;;;;;;;;;;;;;;;423:331:29;;;17100:26:51;;;;;;;:::i;:::-;423:331:29;;;17051:76:51;;423:331:29;;;;17051:76:51;;423:331:29;8405:1:51;17051:76;;;:::i;:::-;;423:331:29;;;;17051:76:51;;;;;;;;;;;;17271:51;17051:76;423:331:29;17051:76:51;;;17139:16;423:331:29;17139:16:51;423:331:29;;;;;17271:51:51;;:::i;:::-;17341:59;:18;;;;17362:31;;;545:85:69;;;;;;;461:173;;17362:31:51;17412:8;;;17341:59;;;;16458:99;798:135:68;;;;;;;-1:-1:-1;798:135:68;;16458:99:51;;15460:617;2926:232:68;-1:-1:-1;2102:103:68;;;;-1:-1:-1;2926:232:68;;;;;;;;;;2102:103;;;15775:28:51;2926:232:68;15775:28:51;:::i;:::-;15819:29;;15815:88;;15460:617;15930:38;;;:::i;15815:88::-;15873:17;;-1:-1:-1;15815:88:51;;14394:933;14742:16;;;;;;;;;14754:4;14742:16;14775:15;;;14771:99;;14394:933;15044:61;423:331:29;3511:494:68;15024:92:51;3511:494:68;;;;:::i;:::-;14943:53:51;;;;423:331:29;;;15044:61:51;;;;;;;;1080:1;;;;;;;;423:331:29;1080:1:51;;;15044:61;423:331:29;15034:72:51;;423:331:29;;;15024:92:51;;;;740:1;;;;423:331:29;740:1:51;;;;;423:331:29;;;;740:1:51;;;423:331:29;740:1:51;;;423:331:29;740:1:51;423:331:29;740:1:51;15024:92;;;;;;412:1:44;15024:92:51;;;;;15176:42;15024:92;423:331:29;;15024:92:51;423:331:29;;;;;15176:42:51;;:::i;14771:99::-;798:135:68;;;;;;;;;;-1:-1:-1;14771:99:51;;13829:518;2926:232:68;-1:-1:-1;2102:103:68;;;;-1:-1:-1;2926:232:68;;;;;;;;;;2102:103;;;14099:20:51;;;14095:79;;13829:518;14201:37;;;:::i;14095:79::-;14144:17;;-1:-1:-1;14095:79:51;;12513:1278;12882:16;;;;;;;;2321:4:48;12882:16:51;;12851:53;12876:28;12894:4;12882:16;;2321:4:48;;423:331:29;2321:4:48;;;;12851:53:51;12920:19;;;12916:107;;12513:1278;885:1;13069:16;13102:22;;13098:114;;12513:1278;1201:256:68;;;13399:60:51;;13432:26;;1318:135:68;;;;;;;;;2321:4:48;;423:331:29;;13432:26:51;;;;;:::i;:::-;13399:60;;;;:::i;:::-;13471:16;-1:-1:-1;13504:35:51;13500:92;;12513:1278;13619:63;;;;;:::i;13500:92::-;423:331:29;;;;13500:92:51;;13098:114;-1:-1:-1;1058:135:68;;;;;;;;;13098:114:51;;12916:107;798:135:68;;;;;;;-1:-1:-1;798:135:68;;;;;12916:107:51;;11822:656;12023:16;;;2213:380:68;12312:26:51;12023:16;;;;;;12035:4;12279:60;12023:16;;2213:380:68;;;;;;2363:226;;;;;;;;;;;;;;;;;;;2213:380;;;423:331:29;;;;12312:26:51;;;;;:::i;:::-;12279:60;;;;:::i;:::-;;12416:31;12279:60;423:331:29;;12416:31:51;545:85:69;;;;;;;461:173;;11508:279:51;2926:232:68;-1:-1:-1;2926:232:68;-1:-1:-1;2926:232:68;;;;;;;;;2102:103;;;;;;;11697:59:51;:18;;;;11718:31;;;545:85:69;;;;;;;461:173;;10092:1383:51;10387:16;;;;;;;;;885:1;10387:16;;10420:15;;;10416:99;;10092:1383;1840:135:68;;;;;;;2213:380;;1840:135;;;10669:47:51;;423:331:29;2321:4:48;;;10688:28:51;2321:4:48;10669:47:51;2213:380:68;;;;;;2363:226;;;;;;;;;;;;;;;;;;;2213:380;;;423:331:29;;;11024:26:51;10983:68;;11024:26;;;;;;;:::i;:::-;423:331:29;;;;;;10983:68:51;;;;;;;423:331:29;10983:68:51;;8405:1;10983:68;;;:::i;:::-;;423:331:29;;10983:68:51;;;;;;;423:331:29;10983:68:51;423:331:29;10983:68:51;423:331:29;10983:68:51;;;10092:1383;423:331:29;;10983:97:51;10979:203;;11193:16;;423:331:29;11324:42:51;11193:16;423:331:29;;;;;11324:42:51;;:::i;10979:203::-;11103:66;11142:26;;;;;;;;:::i;:::-;423:331:29;;;11103:66:51;;;;;;8405:1;11103:66;;;:::i;10983:68::-;;;;;;;;;;;;;;:::i;:::-;;;;10416:99;798:135:68;;;;;;;-1:-1:-1;798:135:68;;10416:99:51;;9370:676;9567:16;9579:4;9567:16;;;;;;;;;;9600:15;;;9596:99;;9370:676;1840:135:68;;;;9895:42:51;;423:331:29;;;;;1840:135:68;;;;;9895:42:51;:::i;9596:99::-;798:135:68;;;;;;;-1:-1:-1;798:135:68;;9596:99:51;;8450:864;8794:16;;;;;;;;;;8806:4;8794:16;8827:15;;;8823:99;;8450:864;3511:494:68;9076:27:51;423:331:29;3511:494:68;9076:27:51;3511:494:68;;;;:::i;:::-;8995:53:51;;;423:331:29;;9076:27:51;;;;;740:1;;;;423:331:29;740:1:51;;;;;423:331:29;;;;740:1:51;;;423:331:29;740:1:51;;;423:331:29;740:1:51;423:331:29;740:1:51;8823:99;798:135:68;;;;-1:-1:-1;798:135:68;;;;;;-1:-1:-1;9076:27:51;8823:99;;956:192:54;1066:24;;;:77;;;;1059:84;956:192;:::o;1066:77::-;394:41:49;;509:66:54;394:41:49;1094:49:54;956:192;:::o;423:331:29:-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;7820:454:48;;423:331:29;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;-1:-1:-1;8164:3:48;423:331:29;;8146:16:48;;;;;8202:8;;423:331:29;8202:8:48;;;:::i;:::-;;423:331:29;;;;7708:7:48;423:331:29;7708:7:48;;423:331:29;7727:6:48;423:331:29;7727:6:48;;;423:331:29;;;;;7717:17:48;7736:10;;;;423:331:29;7748:14:48;;;423:331:29;;;7764:14:48;7780:17;7764:14;;;423:331:29;;;7780:17:48;;423:331:29;;;;7667:138:48;423:331:29;7667:138:48;;423:331:29;1478:66:48;423:331:29;;;1478:66:48;;423:331:29;7736:10:48;1478:66;;423:331:29;7748:14:48;1478:66;;423:331:29;7764:14:48;1478:66;;423:331:29;7780:17:48;1478:66;;423:331:29;1478:66:48;;;423:331:29;1478:66:48;;;423:331:29;1478:66:48;7667:138;;;;;;:::i;:::-;423:331:29;7650:161:48;;8177:34;;;;:::i;:::-;2556:4;423:331:29;8131:13:48;;8146:16;;;;;423:331:29;;8240:28:48;;423:331:29;;8240:28:48;;423:331:29;;;:::i;3511:494:68:-;3690:173;;;;;;;;;;;;3998:2;3955:14;3931:39;;2321:4:48;423:331:29;2321:4:48;423:331:29;;;;;;3511:494:68;:::o;1947:181:51:-;;423:331:29;;2068:54:51;423:331:29;2068:54:51;;;423:331:29;;;;;;;;;;;;;;;;2068:54:51;;;;;;:::i;2132:210::-;;423:331:29;;2263:73:51;;;;423:331:29;;;;;;;;;;;;;;;;;2263:73:51;;;;;;:::i;2562:182::-;423:331:29;;2681:57:51;;;423:331:29;;;;;;;;;2681:57:51;;;;;;:::i;9842:280:48:-;10068:48;;10027:18;9956:44;423:331:29;9972:18:48;;;423:331:29;;;9956:44:48;:::i;2748:211:51:-;423:331:29;;2878:75:51;;;423:331:29;;;;;;;;;2878:75:51;;;;;;:::i;2346:212::-;;423:331:29;;2478:74:51;423:331:29;2478:74:51;;;423:331:29;;;;;;;;;;;;;;;;;;;;2478:74:51;;;;;;:::i","linkReferences":{},"immutableReferences":{"45560":[{"start":4073,"length":32},{"start":4390,"length":32},{"start":6586,"length":32}]}},"methodIdentifiers":{"addHook(bytes4,address)":"b93ea7ad","entrypoint()":"a65d69d4","execute(bytes,bytes)":"1f6a1eb9","executeUserOp(bytes)":"9c145aed","getImplementation()":"aaf10f42","getStaticSignature(bytes32)":"92dcb3fc","imageHash()":"51605d80","isValidSignature(bytes32,bytes)":"1626ba7e","onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)":"bc197c81","onERC1155Received(address,address,uint256,uint256,bytes)":"f23a6e61","onERC721Received(address,address,uint256,bytes)":"150b7a02","readHook(bytes4)":"1a9b2337","readNonce(uint256)":"8c3f5563","recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":"ad55366b","recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":"13792a4a","removeHook(bytes4)":"4fcf3eca","selfExecute(bytes)":"6ea44577","setStaticSignature(bytes32,address,uint96)":"f727ef1c","tokenReceived(address,uint256,bytes)":"8943ec02","tokensReceived(address,address,address,uint256,bytes,bytes)":"0023de29","updateImageHash(bytes32)":"29561426","updateImplementation(address)":"025b22bc","validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)":"19822f7c"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_entryPoint\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_provided\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_current\",\"type\":\"uint256\"}],\"name\":\"BadNonce\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC4337Disabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"HookAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"HookDoesNotExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ImageHashIsZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_signer\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"InvalidERC1271Signature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_entrypoint\",\"type\":\"address\"}],\"name\":\"InvalidEntryPoint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"}],\"name\":\"InvalidKind\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"InvalidSapientSignature\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"InvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_flag\",\"type\":\"uint256\"}],\"name\":\"InvalidSignatureFlag\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_weight\",\"type\":\"uint256\"}],\"name\":\"InvalidSignatureWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_expires\",\"type\":\"uint256\"}],\"name\":\"InvalidStaticSignatureExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_expectedCaller\",\"type\":\"address\"}],\"name\":\"InvalidStaticSignatureWrongCaller\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_weight\",\"type\":\"uint256\"}],\"name\":\"LowWeightChainedSignature\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_gasLeft\",\"type\":\"uint256\"}],\"name\":\"NotEnoughGas\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"}],\"name\":\"OnlySelf\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_returnData\",\"type\":\"bytes\"}],\"name\":\"Reverted\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"checkpoint\",\"type\":\"uint256\"}],\"internalType\":\"struct Snapshot\",\"name\":\"_snapshot\",\"type\":\"tuple\"}],\"name\":\"UnusedSnapshot\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_nextCheckpoint\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_checkpoint\",\"type\":\"uint256\"}],\"name\":\"WrongChainedCheckpointOrder\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_returnData\",\"type\":\"bytes\"}],\"name\":\"CallAborted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_returnData\",\"type\":\"bytes\"}],\"name\":\"CallFailed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"CallSkipped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_opHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"CallSucceeded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"DefinedHook\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"newImageHash\",\"type\":\"bytes32\"}],\"name\":\"ImageHashUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"ImplementationUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_space\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_newNonce\",\"type\":\"uint256\"}],\"name\":\"NonceChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"_timestamp\",\"type\":\"uint96\"}],\"name\":\"StaticSignatureSet\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"addHook\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"entrypoint\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"}],\"name\":\"executeUserOp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"getStaticSignature\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"imageHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"readHook\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_space\",\"type\":\"uint256\"}],\"name\":\"readNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"recoverPartialSignature\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isValidImage\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"checkpoint\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"opHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"noChainId\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"onlyFallback\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"behaviorOnError\",\"type\":\"uint256\"}],\"internalType\":\"struct Payload.Call[]\",\"name\":\"calls\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"space\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"imageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"address[]\",\"name\":\"parentWallets\",\"type\":\"address[]\"}],\"internalType\":\"struct Payload.Decoded\",\"name\":\"_payload\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"recoverSapientSignature\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"removeHook\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_payload\",\"type\":\"bytes\"}],\"name\":\"selfExecute\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"_timestamp\",\"type\":\"uint96\"}],\"name\":\"setStaticSignature\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"tokenReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"operatorData\",\"type\":\"bytes\"}],\"name\":\"tokensReceived\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_imageHash\",\"type\":\"bytes32\"}],\"name\":\"updateImageHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"}],\"name\":\"updateImplementation\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"accountGasLimits\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"gasFees\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct PackedUserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"userOpHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"missingAccountFunds\",\"type\":\"uint256\"}],\"name\":\"validateUserOp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"validationData\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"Agustin Aguilar\",\"kind\":\"dev\",\"methods\":{\"addHook(bytes4,address)\":{\"details\":\"Callable only by the contract itself\",\"params\":{\"implementation\":\"The implementation address of the hook\",\"selector\":\"The selector of the hook\"}},\"execute(bytes,bytes)\":{\"params\":{\"_payload\":\"The payload\",\"_signature\":\"The signature\"}},\"getImplementation()\":{\"returns\":{\"_0\":\"implementation The implementation\"}},\"getStaticSignature(bytes32)\":{\"params\":{\"_hash\":\"The hash to get the static signature for\"},\"returns\":{\"_0\":\"address The address associated with the static signature\",\"_1\":\"timestamp The timestamp of the static signature\"}},\"imageHash()\":{\"returns\":{\"_0\":\"imageHash The image hash\"}},\"isValidSignature(bytes32,bytes)\":{\"details\":\"MUST return the correct magic value if the signature provided is valid for the provided hash > The bytes4 magic value to return when signature is valid is 0x1626ba7e : bytes4(keccak256(\\\"isValidSignature(bytes32,bytes)\\\") > This function MAY modify Ethereum's state\",\"params\":{\"_hash\":\"keccak256 hash that was signed\",\"_signature\":\"Signature byte array associated with _data\"},\"returns\":{\"_0\":\"Magic value 0x1626ba7e if the signature is valid and 0x0 otherwise\"}},\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\":{\"params\":{\"data\":\"Additional data with no specified format\",\"from\":\"The address which previously owned the token\",\"ids\":\"The list of token IDs being transferred\",\"operator\":\"The address which initiated the transfer\",\"values\":\"The amounts of each token being transferred\"},\"returns\":{\"_0\":\"On a success, the selector of the function that was called\"}},\"onERC1155Received(address,address,uint256,uint256,bytes)\":{\"params\":{\"data\":\"Additional data with no specified format\",\"from\":\"The address which previously owned the token\",\"operator\":\"The address which initiated the transfer\",\"tokenId\":\"The ID of the token being transferred\",\"value\":\"The amount of token being transferred\"},\"returns\":{\"_0\":\"On a success, the selector of the function that was called\"}},\"onERC721Received(address,address,uint256,bytes)\":{\"params\":{\"data\":\"Additional data with no specified format\",\"from\":\"The address which previously owned the token\",\"operator\":\"The address which initiated the transfer\",\"tokenId\":\"The ID of the token being transferred\"},\"returns\":{\"_0\":\"On a success, the selector of the function that was called\"}},\"readHook(bytes4)\":{\"params\":{\"selector\":\"The selector of the hook\"},\"returns\":{\"_0\":\"implementation The implementation address of the hook\"}},\"readNonce(uint256)\":{\"params\":{\"_space\":\"The space\"},\"returns\":{\"_0\":\"nonce The nonce\"}},\"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"params\":{\"_payload\":\"The payload\",\"_signature\":\"The signature to recover\"},\"returns\":{\"checkpoint\":\"The checkpoint identifier\",\"imageHash\":\"The derived image hash\",\"isValidImage\":\"Whether the image hash is valid\",\"opHash\":\"The hash of the payload\",\"threshold\":\"The signature threshold\",\"weight\":\"The derived weight\"}},\"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"params\":{\"payload\":\"The payload to recover the signature from\",\"signature\":\"The signature to recover the image hash from\"},\"returns\":{\"_0\":\"The recovered image hash\"}},\"removeHook(bytes4)\":{\"details\":\"Callable only by the contract itself\",\"params\":{\"selector\":\"The selector of the hook\"}},\"selfExecute(bytes)\":{\"details\":\"Callable only by the contract itself\",\"params\":{\"_payload\":\"The payload\"}},\"setStaticSignature(bytes32,address,uint96)\":{\"details\":\"Only callable by the wallet itself\",\"params\":{\"_address\":\"The address to associate with the static signature\",\"_hash\":\"The hash to set the static signature for\",\"_timestamp\":\"The timestamp of the static signature\"}},\"tokenReceived(address,uint256,bytes)\":{\"params\":{\"data\":\"Transaction metadata\",\"from\":\"The address which previously owned the tokens\",\"value\":\"The amount of tokens being transferred\"},\"returns\":{\"_0\":\"The signature of the function to be called\"}},\"tokensReceived(address,address,address,uint256,bytes,bytes)\":{\"params\":{\"amount\":\"The amount of tokens being transferred\",\"data\":\"Additional data with no specified format\",\"from\":\"The address which previously owned the tokens\",\"operator\":\"The address which initiated the transfer\",\"operatorData\":\"Additional data with no specified format\",\"to\":\"The address which is receiving the tokens\"}},\"updateImageHash(bytes32)\":{\"details\":\"Only callable by the wallet itself\",\"params\":{\"_imageHash\":\"The new image hash\"}},\"updateImplementation(address)\":{\"details\":\"Callable only by the contract itself\",\"params\":{\"_implementation\":\"The new implementation\"}},\"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)\":{\"details\":\"Must validate caller is the entryPoint. Must validate the signature and nonce\",\"params\":{\"missingAccountFunds\":\"- Missing funds on the account's deposit in the entrypoint. This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call. The excess is left as a deposit in the entrypoint for future calls. Can be withdrawn anytime using \\\"entryPoint.withdrawTo()\\\". In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.\",\"userOp\":\"- The operation that is about to be executed.\",\"userOpHash\":\"- Hash of the user's request data. can be used as the basis for signature.\"},\"returns\":{\"validationData\":\" - Packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode. <20-byte> aggregatorOrSigFail - 0 for valid signature, 1 to mark signature failure, otherwise, an address of an \\\"aggregator\\\" contract. <6-byte> validUntil - Last timestamp this operation is valid at, or 0 for \\\"indefinitely\\\" <6-byte> validAfter - First timestamp this operation is valid If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure. Note that the validation code cannot use block.timestamp (or block.number) directly.\"}}},\"title\":\"Stage2Module\",\"version\":1},\"userdoc\":{\"errors\":{\"BadNonce(uint256,uint256,uint256)\":[{\"notice\":\"Error thrown when the nonce is bad\"}],\"HookAlreadyExists(bytes4)\":[{\"notice\":\"Error thrown when a hook already exists\"}],\"HookDoesNotExist(bytes4)\":[{\"notice\":\"Error thrown when a hook does not exist\"}],\"ImageHashIsZero()\":[{\"notice\":\"Error thrown when the image hash is zero\"}],\"InvalidERC1271Signature(bytes32,address,bytes)\":[{\"notice\":\"Error thrown when the ERC1271 signature is invalid\"}],\"InvalidKind(uint8)\":[{\"notice\":\"Error thrown when the kind is invalid\"}],\"InvalidSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":[{\"notice\":\"Error thrown when the sapient signature is invalid\"}],\"InvalidSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":[{\"notice\":\"Error thrown when a signature is invalid\"}],\"InvalidSignatureFlag(uint256)\":[{\"notice\":\"Error thrown when the signature flag is invalid\"}],\"InvalidSignatureWeight(uint256,uint256)\":[{\"notice\":\"Error thrown when the signature weight is invalid\"}],\"InvalidStaticSignatureExpired(bytes32,uint256)\":[{\"notice\":\"Error thrown when the static signature has expired\"}],\"InvalidStaticSignatureWrongCaller(bytes32,address,address)\":[{\"notice\":\"Error thrown when the static signature has the wrong caller\"}],\"LowWeightChainedSignature(bytes,uint256,uint256)\":[{\"notice\":\"Error thrown when the weight is too low for a chained signature\"}],\"NotEnoughGas((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint256,uint256)\":[{\"notice\":\"Error thrown when there is not enough gas\"}],\"OnlySelf(address)\":[{\"notice\":\"Error thrown when the caller is not the same as the contract\"}],\"Reverted((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),uint256,bytes)\":[{\"notice\":\"Error thrown when a call reverts\"}],\"UnusedSnapshot((bytes32,uint256))\":[{\"notice\":\"Error thrown when the snapshot is unused\"}],\"WrongChainedCheckpointOrder(uint256,uint256)\":[{\"notice\":\"Error thrown when the checkpoint order is wrong\"}]},\"events\":{\"CallAborted(bytes32,uint256,bytes)\":{\"notice\":\"Emitted when a call is aborted\"},\"CallFailed(bytes32,uint256,bytes)\":{\"notice\":\"Emitted when a call fails\"},\"CallSkipped(bytes32,uint256)\":{\"notice\":\"Emitted when a call is skipped\"},\"CallSucceeded(bytes32,uint256)\":{\"notice\":\"Emitted when a call succeeds\"},\"DefinedHook(bytes4,address)\":{\"notice\":\"Emitted when a hook is defined\"},\"ImageHashUpdated(bytes32)\":{\"notice\":\"Emitted when the image hash is updated\"},\"ImplementationUpdated(address)\":{\"notice\":\"Emitted when the implementation is updated\"},\"NonceChange(uint256,uint256)\":{\"notice\":\"Emitted when the nonce is changed\"},\"StaticSignatureSet(bytes32,address,uint96)\":{\"notice\":\"Event emitted when a static signature is set\"}},\"kind\":\"user\",\"methods\":{\"addHook(bytes4,address)\":{\"notice\":\"Add a hook\"},\"execute(bytes,bytes)\":{\"notice\":\"Execute a call\"},\"getImplementation()\":{\"notice\":\"Get the implementation\"},\"getStaticSignature(bytes32)\":{\"notice\":\"Get the static signature for a specific hash\"},\"imageHash()\":{\"notice\":\"Get the image hash\"},\"isValidSignature(bytes32,bytes)\":{\"notice\":\"Verifies whether the provided signature is valid with respect to the provided hash\"},\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\":{\"notice\":\"Called when multiple ERC1155 tokens are transferred to this contract\"},\"onERC1155Received(address,address,uint256,uint256,bytes)\":{\"notice\":\"Called when a single ERC1155 token is transferred to this contract\"},\"onERC721Received(address,address,uint256,bytes)\":{\"notice\":\"Called when a single ERC721 token is transferred to this contract\"},\"readHook(bytes4)\":{\"notice\":\"Read a hook\"},\"readNonce(uint256)\":{\"notice\":\"Read the nonce\"},\"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"notice\":\"Recover the partial signature\"},\"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)\":{\"notice\":\"Recovers the image hash of a given signature\"},\"removeHook(bytes4)\":{\"notice\":\"Remove a hook\"},\"selfExecute(bytes)\":{\"notice\":\"Execute a call\"},\"setStaticSignature(bytes32,address,uint96)\":{\"notice\":\"Set the static signature for a specific hash\"},\"tokenReceived(address,uint256,bytes)\":{\"notice\":\"Called when ERC223 tokens are received by this contract\"},\"tokensReceived(address,address,address,uint256,bytes,bytes)\":{\"notice\":\"Called when tokens are received by this contract\"},\"updateImageHash(bytes32)\":{\"notice\":\"Update the image hash\"},\"updateImplementation(address)\":{\"notice\":\"Update the implementation\"},\"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)\":{\"notice\":\"Validate user's signature and nonce the entryPoint will make the call to the recipient only if this validation call returns successfully. signature failure should be reported by returning SIG_VALIDATION_FAILED (1). This allows making a \\\"simulation call\\\" without a valid signature Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure.\"}},\"notice\":\"The second stage of the wallet\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Stage2Module.sol\":\"Stage2Module\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/Stage2Module.sol\":{\"keccak256\":\"0xd0b2c2fead81d32a3f83f95bd1dd2d90677fdd1e0a7194a25710ffd0fdaee428\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://8489e75346dbf462b0567da30c2e020cdde3975c38bdfee055284642a3bd2d19\",\"dweb:/ipfs/QmTDM2AkG8qLVjfn35UcXN89CdQS8p3Cm888EadYrMAYAR\"]},\"src/Wallet.sol\":{\"keccak256\":\"0xe01e9e937dd8d7572976ccc8ec3ec87e4a557069dafb05f85977a7b71f5c58d5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2e9ab78d33655f8e822258dff3f2d5ad01e84f6dc90174840d5a283b8e6413c1\",\"dweb:/ipfs/QmNMyYe3C1fs3cxKmUZ3S9VU5EE4WVWPVcwiGbgvbS1vrH\"]},\"src/modules/Calls.sol\":{\"keccak256\":\"0xcd0d38d0fd248e4443032dede2b8892ea0ca7e55538cd54082830f6b98d8edb1\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://617bb6d0724b18f3d77347cc454a57c1c916a0818a592552bd7fa226aa41a306\",\"dweb:/ipfs/Qmeet85Ux6cKq9JmC25JnTzFnRrgDpkyRik2svZLWt4fov\"]},\"src/modules/ERC4337v07.sol\":{\"keccak256\":\"0xbee11ed2498b892b16f72984c848fea85b58d15313fffa78c1e48ca7208f9189\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2d9296803bd52f5e2ae84011593f686802f1cadf6c68a4ee9f97e6455463ae0f\",\"dweb:/ipfs/QmXmWwUiV2eshxxdY5zCyJ7rxcH7bztxcAoh1scw2MPuhP\"]},\"src/modules/Hooks.sol\":{\"keccak256\":\"0xd1f9de45b83ae5f9f32a4d1c709d7a2b6543b1cddd09bf69d401dcdf1d154ab7\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://bf3161edf37479825588e07039752b79792666455cc0beb1ca0e873b3be31ad4\",\"dweb:/ipfs/QmYYpJeSsRgRx2oHcpvhqsNs7ZtDhVnxLmFpXz5eYcS8g4\"]},\"src/modules/Implementation.sol\":{\"keccak256\":\"0x16546d4be07865808890308750916b0a9a55e7a994a458c01edde4618f29b4e6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1b1f9785b08c9f29d6849ba2d3dee89fa3ea5f3c2feec4a59a6d1040e3fbe040\",\"dweb:/ipfs/QmU2Pm5C3Ztky7RQdCZggavyq7Eh1eS1HFqVz9jZKiMUML\"]},\"src/modules/Nonce.sol\":{\"keccak256\":\"0x56fbf6dc9b34ab60ae8a32ffb6f583c003bb8f4a5223ce704e982400fa403fab\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://492f53628633b862702cf8f9b726067a722c94028133a8a4c4fcf3d0e73ad803\",\"dweb:/ipfs/QmTHNy4XbH47YZaqKDpknb5aApjRH9HVAREHN7N5vEFWEV\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/modules/Storage.sol\":{\"keccak256\":\"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da\",\"dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn\"]},\"src/modules/auth/BaseAuth.sol\":{\"keccak256\":\"0xbf2e40def03fcb5f4a5129b2f5803e21951325b92e00126cbe1427b7c25cfefd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://b560905fcc4b957d27c2abed78a1e82529c89fa472e91b3d108fbfd91aa7c3f7\",\"dweb:/ipfs/QmRjLLtTWE6dFX2kBQCgLz7ossfMxhAFgDC8Jx9XuGL6Wy\"]},\"src/modules/auth/BaseSig.sol\":{\"keccak256\":\"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8\",\"dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3\"]},\"src/modules/auth/SelfAuth.sol\":{\"keccak256\":\"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42\",\"dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W\"]},\"src/modules/auth/Stage2Auth.sol\":{\"keccak256\":\"0x5b23b530522ba1c02248d1f7470352c57fbc91c245c7c577044f93f6bb560a59\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c30b8e13edc7e18e4ea7bc7f4b8deaf16301a8f2bb23e7697e6f6b74882a39dc\",\"dweb:/ipfs/QmW69XvfeJepuPBrHb1Vpkikg43P4juEGdRkUWt8GrrAfL\"]},\"src/modules/interfaces/IAccount.sol\":{\"keccak256\":\"0x64ca3bb59ec4fc0a60d80402802365e2d5226afe7e7aabe3b21df936c84f2bcb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ccfd2381e1874cdec2f473a9a17799a3b57360c0593d68ee66fcea9c16eb39b4\",\"dweb:/ipfs/QmcjbJpGz3Exmu4fsj953Y2bG8rtQaVMEFUgT6W2dUXomr\"]},\"src/modules/interfaces/IAuth.sol\":{\"keccak256\":\"0xf6fa30af2ec91d5fbeac17c9b1f2aa73b7883c9ac98745605007e57666394b91\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://6e90a87978519462f9612f4a17e38fddc1c7bcf700ff834a1de7dce326f30353\",\"dweb:/ipfs/QmXmWAsRRK6t4jPs4VcXrouyokxdALM28D3odX7ub48WEp\"]},\"src/modules/interfaces/ICheckpointer.sol\":{\"keccak256\":\"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1\",\"dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t\"]},\"src/modules/interfaces/IDelegatedExtension.sol\":{\"keccak256\":\"0xa2ae897e90fd70dd4a9e172bc04d019ba9c512e72c2df65fcb6daf87dd5ceb90\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://cdf4b7c3dfb0aef6c9dbe8b2a0542018dc756ef2252d7101bcb3186192da0a11\",\"dweb:/ipfs/QmPHCVu1DJ7fBrPBYA5y3hoF3a3XFEBwYCZ1ErGaxPhcYL\"]},\"src/modules/interfaces/IERC1155Receiver.sol\":{\"keccak256\":\"0xa23d0bc29233a91085922ea8a7e2cbe8b5f3358d3f2c3cdc58adade9a171d9c1\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2f06b8f3ae7a45441cc26da5b2ddd15ba76d1664178958f63f536e6c5e4fd0fb\",\"dweb:/ipfs/QmR1Rnk8ciSn5s5wNLGvpE1QNRDsBVDfDT1ZXhei2brmFj\"]},\"src/modules/interfaces/IERC1271.sol\":{\"keccak256\":\"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b\",\"dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF\"]},\"src/modules/interfaces/IERC223Receiver.sol\":{\"keccak256\":\"0x426221c0d48b651ed692edfa5388d6e5304e94f48598a71748134b2659e3890d\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://9e1ed2fd5e390b5b943dc07c2e0ea9e524eb37263dc72c482365c159fc3659e5\",\"dweb:/ipfs/QmWRDBvb1cthVPm4BSzKX3J5GpGGSBuDokkpRK9x5aA7JR\"]},\"src/modules/interfaces/IERC721Receiver.sol\":{\"keccak256\":\"0xbe14c3b727f283a467dc2f2221d3322c5a69cd64a3aacad85acab05e94438f35\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://43ef086c509b8b88cae78f67c4bd979fd427736972cfe56f7423371ccc154e63\",\"dweb:/ipfs/Qmc7Yp7Z1dQ925gzEZYVNUXnWr3YomvWkXfaGYLZpoy8J3\"]},\"src/modules/interfaces/IERC777Receiver.sol\":{\"keccak256\":\"0xd9144d439a96b0c6439cd9a186701aa530f4f782ff09fdbf6c3ef16b78b0d4e5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d1f17484eda7184db4a00106b4952f15c1517872cbfe19663d6fce4e042729b2\",\"dweb:/ipfs/QmWdhYmLNkUpgvPpSyGHstxrFwMfhRTVmxDpe4frkUu1Qh\"]},\"src/modules/interfaces/IEntryPoint.sol\":{\"keccak256\":\"0xd19922ea7a8ae09072a721138dc93e175fa77ecaa3ac6f2d759d5e5e944fb665\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://20ecea69ddd4d8787c0bdc4487dea03e90f63f4296674a12728e331a78e62620\",\"dweb:/ipfs/QmZUrX8zEqfHZEJQjNtDUXGS47bj2UuRCLfbkLPrXsot1c\"]},\"src/modules/interfaces/IPartialAuth.sol\":{\"keccak256\":\"0x0d1aa021615d8e90696e71a9468331457a1babfa2ffe169654b7456e5bcb7a73\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://bbacd149a6358ab0d4b9c588d2e3a55fc71ed4723269150d7b91ca70092f6519\",\"dweb:/ipfs/QmUSwtrYCrRcRFsy5rCzdMPrw1FCU7ZoeXdsW6kK9yc8FK\"]},\"src/modules/interfaces/ISapient.sol\":{\"keccak256\":\"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489\",\"dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"src/utils/LibOptim.sol\":{\"keccak256\":\"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81\",\"dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"_entryPoint","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"_space","type":"uint256"},{"internalType":"uint256","name":"_provided","type":"uint256"},{"internalType":"uint256","name":"_current","type":"uint256"}],"type":"error","name":"BadNonce"},{"inputs":[],"type":"error","name":"ERC4337Disabled"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"type":"error","name":"HookAlreadyExists"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"type":"error","name":"HookDoesNotExist"},{"inputs":[],"type":"error","name":"ImageHashIsZero"},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32"},{"internalType":"address","name":"_signer","type":"address"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"type":"error","name":"InvalidERC1271Signature"},{"inputs":[{"internalType":"address","name":"_entrypoint","type":"address"}],"type":"error","name":"InvalidEntryPoint"},{"inputs":[{"internalType":"uint8","name":"kind","type":"uint8"}],"type":"error","name":"InvalidKind"},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"type":"error","name":"InvalidSapientSignature"},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"type":"error","name":"InvalidSignature"},{"inputs":[{"internalType":"uint256","name":"_flag","type":"uint256"}],"type":"error","name":"InvalidSignatureFlag"},{"inputs":[{"internalType":"uint256","name":"_threshold","type":"uint256"},{"internalType":"uint256","name":"_weight","type":"uint256"}],"type":"error","name":"InvalidSignatureWeight"},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32"},{"internalType":"uint256","name":"_expires","type":"uint256"}],"type":"error","name":"InvalidStaticSignatureExpired"},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32"},{"internalType":"address","name":"_caller","type":"address"},{"internalType":"address","name":"_expectedCaller","type":"address"}],"type":"error","name":"InvalidStaticSignatureWrongCaller"},{"inputs":[{"internalType":"bytes","name":"_signature","type":"bytes"},{"internalType":"uint256","name":"_threshold","type":"uint256"},{"internalType":"uint256","name":"_weight","type":"uint256"}],"type":"error","name":"LowWeightChainedSignature"},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"uint256","name":"_gasLeft","type":"uint256"}],"type":"error","name":"NotEnoughGas"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"}],"type":"error","name":"OnlySelf"},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"uint256","name":"_index","type":"uint256"},{"internalType":"bytes","name":"_returnData","type":"bytes"}],"type":"error","name":"Reverted"},{"inputs":[{"internalType":"struct Snapshot","name":"_snapshot","type":"tuple","components":[{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"uint256","name":"checkpoint","type":"uint256"}]}],"type":"error","name":"UnusedSnapshot"},{"inputs":[{"internalType":"uint256","name":"_nextCheckpoint","type":"uint256"},{"internalType":"uint256","name":"_checkpoint","type":"uint256"}],"type":"error","name":"WrongChainedCheckpointOrder"},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_index","type":"uint256","indexed":false},{"internalType":"bytes","name":"_returnData","type":"bytes","indexed":false}],"type":"event","name":"CallAborted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_index","type":"uint256","indexed":false},{"internalType":"bytes","name":"_returnData","type":"bytes","indexed":false}],"type":"event","name":"CallFailed","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_index","type":"uint256","indexed":false}],"type":"event","name":"CallSkipped","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_opHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"_index","type":"uint256","indexed":false}],"type":"event","name":"CallSucceeded","anonymous":false},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4","indexed":false},{"internalType":"address","name":"implementation","type":"address","indexed":false}],"type":"event","name":"DefinedHook","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"newImageHash","type":"bytes32","indexed":false}],"type":"event","name":"ImageHashUpdated","anonymous":false},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address","indexed":false}],"type":"event","name":"ImplementationUpdated","anonymous":false},{"inputs":[{"internalType":"uint256","name":"_space","type":"uint256","indexed":false},{"internalType":"uint256","name":"_newNonce","type":"uint256","indexed":false}],"type":"event","name":"NonceChange","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32","indexed":false},{"internalType":"address","name":"_address","type":"address","indexed":false},{"internalType":"uint96","name":"_timestamp","type":"uint96","indexed":false}],"type":"event","name":"StaticSignatureSet","anonymous":false},{"inputs":[],"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"},{"internalType":"address","name":"implementation","type":"address"}],"stateMutability":"payable","type":"function","name":"addHook"},{"inputs":[],"stateMutability":"view","type":"function","name":"entrypoint","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"payable","type":"function","name":"execute"},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"executeUserOp"},{"inputs":[],"stateMutability":"view","type":"function","name":"getImplementation","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getStaticSignature","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"imageHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"view","type":"function","name":"isValidSignature","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function","name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function","name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function","name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"stateMutability":"view","type":"function","name":"readHook","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"_space","type":"uint256"}],"stateMutability":"view","type":"function","name":"readNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"view","type":"function","name":"recoverPartialSignature","outputs":[{"internalType":"uint256","name":"threshold","type":"uint256"},{"internalType":"uint256","name":"weight","type":"uint256"},{"internalType":"bool","name":"isValidImage","type":"bool"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"uint256","name":"checkpoint","type":"uint256"},{"internalType":"bytes32","name":"opHash","type":"bytes32"}]},{"inputs":[{"internalType":"struct Payload.Decoded","name":"_payload","type":"tuple","components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"bool","name":"noChainId","type":"bool"},{"internalType":"struct Payload.Call[]","name":"calls","type":"tuple[]","components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bool","name":"delegateCall","type":"bool"},{"internalType":"bool","name":"onlyFallback","type":"bool"},{"internalType":"uint256","name":"behaviorOnError","type":"uint256"}]},{"internalType":"uint256","name":"space","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"message","type":"bytes"},{"internalType":"bytes32","name":"imageHash","type":"bytes32"},{"internalType":"bytes32","name":"digest","type":"bytes32"},{"internalType":"address[]","name":"parentWallets","type":"address[]"}]},{"internalType":"bytes","name":"_signature","type":"bytes"}],"stateMutability":"view","type":"function","name":"recoverSapientSignature","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"stateMutability":"payable","type":"function","name":"removeHook"},{"inputs":[{"internalType":"bytes","name":"_payload","type":"bytes"}],"stateMutability":"payable","type":"function","name":"selfExecute"},{"inputs":[{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint96","name":"_timestamp","type":"uint96"}],"stateMutability":"nonpayable","type":"function","name":"setStaticSignature"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function","name":"tokenReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes","name":"operatorData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"tokensReceived"},{"inputs":[{"internalType":"bytes32","name":"_imageHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"updateImageHash"},{"inputs":[{"internalType":"address","name":"_implementation","type":"address"}],"stateMutability":"payable","type":"function","name":"updateImplementation"},{"inputs":[{"internalType":"struct PackedUserOperation","name":"userOp","type":"tuple","components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"initCode","type":"bytes"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"bytes32","name":"accountGasLimits","type":"bytes32"},{"internalType":"uint256","name":"preVerificationGas","type":"uint256"},{"internalType":"bytes32","name":"gasFees","type":"bytes32"},{"internalType":"bytes","name":"paymasterAndData","type":"bytes"},{"internalType":"bytes","name":"signature","type":"bytes"}]},{"internalType":"bytes32","name":"userOpHash","type":"bytes32"},{"internalType":"uint256","name":"missingAccountFunds","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"validateUserOp","outputs":[{"internalType":"uint256","name":"validationData","type":"uint256"}]},{"inputs":[],"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{"addHook(bytes4,address)":{"details":"Callable only by the contract itself","params":{"implementation":"The implementation address of the hook","selector":"The selector of the hook"}},"execute(bytes,bytes)":{"params":{"_payload":"The payload","_signature":"The signature"}},"getImplementation()":{"returns":{"_0":"implementation The implementation"}},"getStaticSignature(bytes32)":{"params":{"_hash":"The hash to get the static signature for"},"returns":{"_0":"address The address associated with the static signature","_1":"timestamp The timestamp of the static signature"}},"imageHash()":{"returns":{"_0":"imageHash The image hash"}},"isValidSignature(bytes32,bytes)":{"details":"MUST return the correct magic value if the signature provided is valid for the provided hash > The bytes4 magic value to return when signature is valid is 0x1626ba7e : bytes4(keccak256(\"isValidSignature(bytes32,bytes)\") > This function MAY modify Ethereum's state","params":{"_hash":"keccak256 hash that was signed","_signature":"Signature byte array associated with _data"},"returns":{"_0":"Magic value 0x1626ba7e if the signature is valid and 0x0 otherwise"}},"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)":{"params":{"data":"Additional data with no specified format","from":"The address which previously owned the token","ids":"The list of token IDs being transferred","operator":"The address which initiated the transfer","values":"The amounts of each token being transferred"},"returns":{"_0":"On a success, the selector of the function that was called"}},"onERC1155Received(address,address,uint256,uint256,bytes)":{"params":{"data":"Additional data with no specified format","from":"The address which previously owned the token","operator":"The address which initiated the transfer","tokenId":"The ID of the token being transferred","value":"The amount of token being transferred"},"returns":{"_0":"On a success, the selector of the function that was called"}},"onERC721Received(address,address,uint256,bytes)":{"params":{"data":"Additional data with no specified format","from":"The address which previously owned the token","operator":"The address which initiated the transfer","tokenId":"The ID of the token being transferred"},"returns":{"_0":"On a success, the selector of the function that was called"}},"readHook(bytes4)":{"params":{"selector":"The selector of the hook"},"returns":{"_0":"implementation The implementation address of the hook"}},"readNonce(uint256)":{"params":{"_space":"The space"},"returns":{"_0":"nonce The nonce"}},"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"params":{"_payload":"The payload","_signature":"The signature to recover"},"returns":{"checkpoint":"The checkpoint identifier","imageHash":"The derived image hash","isValidImage":"Whether the image hash is valid","opHash":"The hash of the payload","threshold":"The signature threshold","weight":"The derived weight"}},"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"params":{"payload":"The payload to recover the signature from","signature":"The signature to recover the image hash from"},"returns":{"_0":"The recovered image hash"}},"removeHook(bytes4)":{"details":"Callable only by the contract itself","params":{"selector":"The selector of the hook"}},"selfExecute(bytes)":{"details":"Callable only by the contract itself","params":{"_payload":"The payload"}},"setStaticSignature(bytes32,address,uint96)":{"details":"Only callable by the wallet itself","params":{"_address":"The address to associate with the static signature","_hash":"The hash to set the static signature for","_timestamp":"The timestamp of the static signature"}},"tokenReceived(address,uint256,bytes)":{"params":{"data":"Transaction metadata","from":"The address which previously owned the tokens","value":"The amount of tokens being transferred"},"returns":{"_0":"The signature of the function to be called"}},"tokensReceived(address,address,address,uint256,bytes,bytes)":{"params":{"amount":"The amount of tokens being transferred","data":"Additional data with no specified format","from":"The address which previously owned the tokens","operator":"The address which initiated the transfer","operatorData":"Additional data with no specified format","to":"The address which is receiving the tokens"}},"updateImageHash(bytes32)":{"details":"Only callable by the wallet itself","params":{"_imageHash":"The new image hash"}},"updateImplementation(address)":{"details":"Callable only by the contract itself","params":{"_implementation":"The new implementation"}},"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)":{"details":"Must validate caller is the entryPoint. Must validate the signature and nonce","params":{"missingAccountFunds":"- Missing funds on the account's deposit in the entrypoint. This is the minimum amount to transfer to the sender(entryPoint) to be able to make the call. The excess is left as a deposit in the entrypoint for future calls. Can be withdrawn anytime using \"entryPoint.withdrawTo()\". In case there is a paymaster in the request (or the current deposit is high enough), this value will be zero.","userOp":"- The operation that is about to be executed.","userOpHash":"- Hash of the user's request data. can be used as the basis for signature."},"returns":{"validationData":" - Packaged ValidationData structure. use `_packValidationData` and `_unpackValidationData` to encode and decode. <20-byte> aggregatorOrSigFail - 0 for valid signature, 1 to mark signature failure, otherwise, an address of an \"aggregator\" contract. <6-byte> validUntil - Last timestamp this operation is valid at, or 0 for \"indefinitely\" <6-byte> validAfter - First timestamp this operation is valid If an account doesn't use time-range, it is enough to return SIG_VALIDATION_FAILED value (1) for signature failure. Note that the validation code cannot use block.timestamp (or block.number) directly."}}},"version":1},"userdoc":{"kind":"user","methods":{"addHook(bytes4,address)":{"notice":"Add a hook"},"execute(bytes,bytes)":{"notice":"Execute a call"},"getImplementation()":{"notice":"Get the implementation"},"getStaticSignature(bytes32)":{"notice":"Get the static signature for a specific hash"},"imageHash()":{"notice":"Get the image hash"},"isValidSignature(bytes32,bytes)":{"notice":"Verifies whether the provided signature is valid with respect to the provided hash"},"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)":{"notice":"Called when multiple ERC1155 tokens are transferred to this contract"},"onERC1155Received(address,address,uint256,uint256,bytes)":{"notice":"Called when a single ERC1155 token is transferred to this contract"},"onERC721Received(address,address,uint256,bytes)":{"notice":"Called when a single ERC721 token is transferred to this contract"},"readHook(bytes4)":{"notice":"Read a hook"},"readNonce(uint256)":{"notice":"Read the nonce"},"recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"notice":"Recover the partial signature"},"recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]),bytes)":{"notice":"Recovers the image hash of a given signature"},"removeHook(bytes4)":{"notice":"Remove a hook"},"selfExecute(bytes)":{"notice":"Execute a call"},"setStaticSignature(bytes32,address,uint96)":{"notice":"Set the static signature for a specific hash"},"tokenReceived(address,uint256,bytes)":{"notice":"Called when ERC223 tokens are received by this contract"},"tokensReceived(address,address,address,uint256,bytes,bytes)":{"notice":"Called when tokens are received by this contract"},"updateImageHash(bytes32)":{"notice":"Update the image hash"},"updateImplementation(address)":{"notice":"Update the implementation"},"validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes),bytes32,uint256)":{"notice":"Validate user's signature and nonce the entryPoint will make the call to the recipient only if this validation call returns successfully. signature failure should be reported by returning SIG_VALIDATION_FAILED (1). This allows making a \"simulation call\" without a valid signature Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure."}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/Stage2Module.sol":"Stage2Module"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/Stage2Module.sol":{"keccak256":"0xd0b2c2fead81d32a3f83f95bd1dd2d90677fdd1e0a7194a25710ffd0fdaee428","urls":["bzz-raw://8489e75346dbf462b0567da30c2e020cdde3975c38bdfee055284642a3bd2d19","dweb:/ipfs/QmTDM2AkG8qLVjfn35UcXN89CdQS8p3Cm888EadYrMAYAR"],"license":"Apache-2.0"},"src/Wallet.sol":{"keccak256":"0xe01e9e937dd8d7572976ccc8ec3ec87e4a557069dafb05f85977a7b71f5c58d5","urls":["bzz-raw://2e9ab78d33655f8e822258dff3f2d5ad01e84f6dc90174840d5a283b8e6413c1","dweb:/ipfs/QmNMyYe3C1fs3cxKmUZ3S9VU5EE4WVWPVcwiGbgvbS1vrH"],"license":"Apache-2.0"},"src/modules/Calls.sol":{"keccak256":"0xcd0d38d0fd248e4443032dede2b8892ea0ca7e55538cd54082830f6b98d8edb1","urls":["bzz-raw://617bb6d0724b18f3d77347cc454a57c1c916a0818a592552bd7fa226aa41a306","dweb:/ipfs/Qmeet85Ux6cKq9JmC25JnTzFnRrgDpkyRik2svZLWt4fov"],"license":"Apache-2.0"},"src/modules/ERC4337v07.sol":{"keccak256":"0xbee11ed2498b892b16f72984c848fea85b58d15313fffa78c1e48ca7208f9189","urls":["bzz-raw://2d9296803bd52f5e2ae84011593f686802f1cadf6c68a4ee9f97e6455463ae0f","dweb:/ipfs/QmXmWwUiV2eshxxdY5zCyJ7rxcH7bztxcAoh1scw2MPuhP"],"license":"Apache-2.0"},"src/modules/Hooks.sol":{"keccak256":"0xd1f9de45b83ae5f9f32a4d1c709d7a2b6543b1cddd09bf69d401dcdf1d154ab7","urls":["bzz-raw://bf3161edf37479825588e07039752b79792666455cc0beb1ca0e873b3be31ad4","dweb:/ipfs/QmYYpJeSsRgRx2oHcpvhqsNs7ZtDhVnxLmFpXz5eYcS8g4"],"license":"Apache-2.0"},"src/modules/Implementation.sol":{"keccak256":"0x16546d4be07865808890308750916b0a9a55e7a994a458c01edde4618f29b4e6","urls":["bzz-raw://1b1f9785b08c9f29d6849ba2d3dee89fa3ea5f3c2feec4a59a6d1040e3fbe040","dweb:/ipfs/QmU2Pm5C3Ztky7RQdCZggavyq7Eh1eS1HFqVz9jZKiMUML"],"license":"Apache-2.0"},"src/modules/Nonce.sol":{"keccak256":"0x56fbf6dc9b34ab60ae8a32ffb6f583c003bb8f4a5223ce704e982400fa403fab","urls":["bzz-raw://492f53628633b862702cf8f9b726067a722c94028133a8a4c4fcf3d0e73ad803","dweb:/ipfs/QmTHNy4XbH47YZaqKDpknb5aApjRH9HVAREHN7N5vEFWEV"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/modules/Storage.sol":{"keccak256":"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f","urls":["bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da","dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn"],"license":"Apache-2.0"},"src/modules/auth/BaseAuth.sol":{"keccak256":"0xbf2e40def03fcb5f4a5129b2f5803e21951325b92e00126cbe1427b7c25cfefd","urls":["bzz-raw://b560905fcc4b957d27c2abed78a1e82529c89fa472e91b3d108fbfd91aa7c3f7","dweb:/ipfs/QmRjLLtTWE6dFX2kBQCgLz7ossfMxhAFgDC8Jx9XuGL6Wy"],"license":"Apache-2.0"},"src/modules/auth/BaseSig.sol":{"keccak256":"0x394ed24efe7a4468966e51f649f754bbb66dfffc0574499ec758dc1a5a8e1caa","urls":["bzz-raw://ff4abc523d721df1680d6809c382fbf20b9e5cc17e5bdfd8f623ca7cf00061c8","dweb:/ipfs/QmUXnDME7rDCLvhvFVN7eLFjHbH955DWNmWefLxEyDV4W3"],"license":"Apache-2.0"},"src/modules/auth/SelfAuth.sol":{"keccak256":"0x4d517af51c3af39a19a4ed00f3fc89e965e45942c264189085bc24f1987a526c","urls":["bzz-raw://1be166f75d2821e305b6906c34311a62629b1b3c90ac306d775e7330f23d5b42","dweb:/ipfs/QmYFLASBDFzcTXioV5459qvQ1NGaqzWMoLzGJeMas3Lg5W"],"license":"Apache-2.0"},"src/modules/auth/Stage2Auth.sol":{"keccak256":"0x5b23b530522ba1c02248d1f7470352c57fbc91c245c7c577044f93f6bb560a59","urls":["bzz-raw://c30b8e13edc7e18e4ea7bc7f4b8deaf16301a8f2bb23e7697e6f6b74882a39dc","dweb:/ipfs/QmW69XvfeJepuPBrHb1Vpkikg43P4juEGdRkUWt8GrrAfL"],"license":"Apache-2.0"},"src/modules/interfaces/IAccount.sol":{"keccak256":"0x64ca3bb59ec4fc0a60d80402802365e2d5226afe7e7aabe3b21df936c84f2bcb","urls":["bzz-raw://ccfd2381e1874cdec2f473a9a17799a3b57360c0593d68ee66fcea9c16eb39b4","dweb:/ipfs/QmcjbJpGz3Exmu4fsj953Y2bG8rtQaVMEFUgT6W2dUXomr"],"license":"MIT"},"src/modules/interfaces/IAuth.sol":{"keccak256":"0xf6fa30af2ec91d5fbeac17c9b1f2aa73b7883c9ac98745605007e57666394b91","urls":["bzz-raw://6e90a87978519462f9612f4a17e38fddc1c7bcf700ff834a1de7dce326f30353","dweb:/ipfs/QmXmWAsRRK6t4jPs4VcXrouyokxdALM28D3odX7ub48WEp"],"license":"Apache-2.0"},"src/modules/interfaces/ICheckpointer.sol":{"keccak256":"0xa9ae32596a0bc2d6676b48826e9edaf6e97ee2f3f222e9ad7058be3ba1718513","urls":["bzz-raw://0f3a846233ba32fd7b89aac58415d969c4fa72f846e4a2c8e1be38b8d2eeb6a1","dweb:/ipfs/Qma5HMU9LCMXtzmevvZFU9mGH2fDgw5V11WQpez5QhCc7t"],"license":"Apache-2.0"},"src/modules/interfaces/IDelegatedExtension.sol":{"keccak256":"0xa2ae897e90fd70dd4a9e172bc04d019ba9c512e72c2df65fcb6daf87dd5ceb90","urls":["bzz-raw://cdf4b7c3dfb0aef6c9dbe8b2a0542018dc756ef2252d7101bcb3186192da0a11","dweb:/ipfs/QmPHCVu1DJ7fBrPBYA5y3hoF3a3XFEBwYCZ1ErGaxPhcYL"],"license":"Apache-2.0"},"src/modules/interfaces/IERC1155Receiver.sol":{"keccak256":"0xa23d0bc29233a91085922ea8a7e2cbe8b5f3358d3f2c3cdc58adade9a171d9c1","urls":["bzz-raw://2f06b8f3ae7a45441cc26da5b2ddd15ba76d1664178958f63f536e6c5e4fd0fb","dweb:/ipfs/QmR1Rnk8ciSn5s5wNLGvpE1QNRDsBVDfDT1ZXhei2brmFj"],"license":"Apache-2.0"},"src/modules/interfaces/IERC1271.sol":{"keccak256":"0xb33a198eb641c43c3ab89705f693e342ad87fcc28bfa48d63b5ed105968434c9","urls":["bzz-raw://a1abd7475b239c551d34325466804b09e587b62559faf9109ad1ac019eb57a6b","dweb:/ipfs/Qmd3MDHAmpFpLXdHY5Tnb7niJjPDr5hEnc4d63tpyFGmgF"],"license":"Apache-2.0"},"src/modules/interfaces/IERC223Receiver.sol":{"keccak256":"0x426221c0d48b651ed692edfa5388d6e5304e94f48598a71748134b2659e3890d","urls":["bzz-raw://9e1ed2fd5e390b5b943dc07c2e0ea9e524eb37263dc72c482365c159fc3659e5","dweb:/ipfs/QmWRDBvb1cthVPm4BSzKX3J5GpGGSBuDokkpRK9x5aA7JR"],"license":"Apache-2.0"},"src/modules/interfaces/IERC721Receiver.sol":{"keccak256":"0xbe14c3b727f283a467dc2f2221d3322c5a69cd64a3aacad85acab05e94438f35","urls":["bzz-raw://43ef086c509b8b88cae78f67c4bd979fd427736972cfe56f7423371ccc154e63","dweb:/ipfs/Qmc7Yp7Z1dQ925gzEZYVNUXnWr3YomvWkXfaGYLZpoy8J3"],"license":"Apache-2.0"},"src/modules/interfaces/IERC777Receiver.sol":{"keccak256":"0xd9144d439a96b0c6439cd9a186701aa530f4f782ff09fdbf6c3ef16b78b0d4e5","urls":["bzz-raw://d1f17484eda7184db4a00106b4952f15c1517872cbfe19663d6fce4e042729b2","dweb:/ipfs/QmWdhYmLNkUpgvPpSyGHstxrFwMfhRTVmxDpe4frkUu1Qh"],"license":"Apache-2.0"},"src/modules/interfaces/IEntryPoint.sol":{"keccak256":"0xd19922ea7a8ae09072a721138dc93e175fa77ecaa3ac6f2d759d5e5e944fb665","urls":["bzz-raw://20ecea69ddd4d8787c0bdc4487dea03e90f63f4296674a12728e331a78e62620","dweb:/ipfs/QmZUrX8zEqfHZEJQjNtDUXGS47bj2UuRCLfbkLPrXsot1c"],"license":"MIT"},"src/modules/interfaces/IPartialAuth.sol":{"keccak256":"0x0d1aa021615d8e90696e71a9468331457a1babfa2ffe169654b7456e5bcb7a73","urls":["bzz-raw://bbacd149a6358ab0d4b9c588d2e3a55fc71ed4723269150d7b91ca70092f6519","dweb:/ipfs/QmUSwtrYCrRcRFsy5rCzdMPrw1FCU7ZoeXdsW6kK9yc8FK"],"license":"Apache-2.0"},"src/modules/interfaces/ISapient.sol":{"keccak256":"0x3668daa83a61af054146345e53e571daf403f9bca9c3cc702f6f1cb655770359","urls":["bzz-raw://13aa453c7021c83d305ac7d714a93f78a03a8cc0032cb06cf54d5ebf09100489","dweb:/ipfs/QmSxar3KETtMzHXQuqQA9b8iK8cG3Z62EpWSeu8hhKW2xn"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"src/utils/LibOptim.sol":{"keccak256":"0x1d1e2234eec89069c3f8d59e370fd3470faaef9c1641cd722bae83f4e4921bde","urls":["bzz-raw://4c3d8b24e6c11fcea3462017b2df71ed4b9b32b2dab8a591cc91afc0b6c8dd81","dweb:/ipfs/QmXtrdWcNTfaYHodKRovkdDyRCQJcffDUZQAdgQCJNoq2x"],"license":"Apache-2.0"}},"version":1},"id":29} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/StdAssertions.sol/StdAssertions.json b/contracts/artifacts/wallet-contracts-v3/StdAssertions.sol/StdAssertions.json new file mode 100644 index 00000000..6b36356a --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/StdAssertions.sol/StdAssertions.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"event","name":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"failed()":"ba414fa6"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/forge-std/src/StdAssertions.sol\":\"StdAssertions\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log","anonymous":false},{"inputs":[{"internalType":"address","name":"","type":"address","indexed":false}],"type":"event","name":"log_address","anonymous":false},{"inputs":[{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"log_bytes","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32","indexed":false}],"type":"event","name":"log_bytes32","anonymous":false},{"inputs":[{"internalType":"int256","name":"","type":"int256","indexed":false}],"type":"event","name":"log_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address","name":"val","type":"address","indexed":false}],"type":"event","name":"log_named_address","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes","name":"val","type":"bytes","indexed":false}],"type":"event","name":"log_named_bytes","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes32","name":"val","type":"bytes32","indexed":false}],"type":"event","name":"log_named_bytes32","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false}],"type":"event","name":"log_named_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"string","name":"val","type":"string","indexed":false}],"type":"event","name":"log_named_string","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false}],"type":"event","name":"log_named_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log_string","anonymous":false},{"inputs":[{"internalType":"uint256","name":"","type":"uint256","indexed":false}],"type":"event","name":"log_uint","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"logs","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"failed","outputs":[{"internalType":"bool","name":"","type":"bool"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"lib/forge-std/src/StdAssertions.sol":"StdAssertions"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"}},"version":1},"id":4} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/StdChains.sol/StdChains.json b/contracts/artifacts/wallet-contracts-v3/StdChains.sol/StdChains.json new file mode 100644 index 00000000..97c8fb3f --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/StdChains.sol/StdChains.json @@ -0,0 +1 @@ +{"abi":[],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"StdChains provides information about EVM compatible chains that can be used in scripts/tests. For each chain, the chain's name, chain ID, and a default RPC URL are provided. Chains are identified by their alias, which is the same as the alias in the `[rpc_endpoints]` section of the `foundry.toml` file. For best UX, ensure the alias in the `foundry.toml` file match the alias used in this contract, which can be found as the first argument to the `setChainWithDefaultRpcUrl` call in the `initializeStdChains` function. There are two main ways to use this contract: 1. Set a chain with `setChain(string memory chainAlias, ChainData memory chain)` or `setChain(string memory chainAlias, Chain memory chain)` 2. Get a chain with `getChain(string memory chainAlias)` or `getChain(uint256 chainId)`. The first time either of those are used, chains are initialized with the default set of RPC URLs. This is done in `initializeStdChains`, which uses `setChainWithDefaultRpcUrl`. Defaults are recorded in `defaultRpcUrls`. The `setChain` function is straightforward, and it simply saves off the given chain data. The `getChain` methods use `getChainWithUpdatedRpcUrl` to return a chain. For example, let's say we want to retrieve the RPC URL for `mainnet`: - If you have specified data with `setChain`, it will return that. - If you have configured a mainnet RPC URL in `foundry.toml`, it will return the URL, provided it is valid (e.g. a URL is specified, or an environment variable is given and exists). - If neither of the above conditions is met, the default data is returned. Summarizing the above, the prioritization hierarchy is `setChain` -> `foundry.toml` -> environment variable -> defaults.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/forge-std/src/StdChains.sol\":\"StdChains\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"lib/forge-std/src/StdChains.sol":"StdChains"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"}},"version":1},"id":5} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/StdCheats.sol/StdCheats.json b/contracts/artifacts/wallet-contracts-v3/StdCheats.sol/StdCheats.json new file mode 100644 index 00000000..893650f8 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/StdCheats.sol/StdCheats.json @@ -0,0 +1 @@ +{"abi":[],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/forge-std/src/StdCheats.sol\":\"StdCheats\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"lib/forge-std/src/StdCheats.sol":"StdCheats"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"}},"version":1},"id":6} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/StdCheats.sol/StdCheatsSafe.json b/contracts/artifacts/wallet-contracts-v3/StdCheats.sol/StdCheatsSafe.json new file mode 100644 index 00000000..19e64f20 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/StdCheats.sol/StdCheatsSafe.json @@ -0,0 +1 @@ +{"abi":[],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/forge-std/src/StdCheats.sol\":\"StdCheatsSafe\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"lib/forge-std/src/StdCheats.sol":"StdCheatsSafe"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"}},"version":1},"id":6} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/StdConstants.sol/StdConstants.json b/contracts/artifacts/wallet-contracts-v3/StdConstants.sol/StdConstants.json new file mode 100644 index 00000000..a12f1ecb --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/StdConstants.sol/StdConstants.json @@ -0,0 +1 @@ +{"abi":[],"bytecode":{"object":"0x60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea26469706673582212206c597b8ddf409d337b58e4534e5ba184bb8b810958fa402185182ac55b8c2b1564736f6c634300081c0033","sourceMap":"153:1713:7:-:0;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x600080fdfea26469706673582212206c597b8ddf409d337b58e4534e5ba184bb8b810958fa402185182ac55b8c2b1564736f6c634300081c0033","sourceMap":"153:1713:7:-:0;;","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"CONSOLE\":{\"details\":\"console.sol and console2.sol work by executing a staticcall to this address. Calculated as `address(uint160(uint88(bytes11(\\\"console.log\\\"))))`.\"},\"CREATE2_FACTORY\":{\"details\":\"Used when deploying with create2. Taken from https://github.com/Arachnid/deterministic-deployment-proxy.\"},\"DEFAULT_SENDER\":{\"details\":\"The default address for tx.origin and msg.sender. Calculated as `address(uint160(uint256(keccak256(\\\"foundry default caller\\\"))))`.\"},\"DEFAULT_TEST_CONTRACT\":{\"details\":\"The address of the first contract `CREATE`d by a running test contract. When running tests, each test contract is `CREATE`d by `DEFAULT_SENDER` with nonce 1. Calculated as `VM.computeCreateAddress(VM.computeCreateAddress(DEFAULT_SENDER, 1), 1)`.\"},\"MULTICALL3_ADDRESS\":{\"details\":\"Deterministic deployment address of the Multicall3 contract. Taken from https://www.multicall3.com.\"},\"SECP256K1_ORDER\":{\"details\":\"The order of the secp256k1 curve.\"},\"VM\":{\"details\":\"Cheat code address. Calculated as `address(uint160(uint256(keccak256(\\\"hevm cheat code\\\"))))`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/forge-std/src/StdConstants.sol\":\"StdConstants\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"lib/forge-std/src/StdConstants.sol":"StdConstants"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"}},"version":1},"id":7} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/StdError.sol/stdError.json b/contracts/artifacts/wallet-contracts-v3/StdError.sol/stdError.json new file mode 100644 index 00000000..4ff8c393 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/StdError.sol/stdError.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"arithmeticError","inputs":[],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"assertionError","inputs":[],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"divisionError","inputs":[],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"encodeStorageError","inputs":[],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"enumConversionError","inputs":[],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"indexOOBError","inputs":[],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"memOverflowError","inputs":[],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"popError","inputs":[],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"zeroVarError","inputs":[],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"}],"bytecode":{"object":"0x6080806040523460195761056b908161001f823930815050f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c90816305ee8612146103f757508063103329771461038b5780631de455601461031f5780638995290f146102b3578063986c5f6814610247578063b22dc54d146101db578063b67689da1461016f578063d160e4de146101035763fa784a441461008257600080fd5b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fe576100fa6040517f4e487b7100000000000000000000000000000000000000000000000000000000602082015260126024820152602481526100ee60448261045d565b604051918291826104cd565b0390f35b600080fd5b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fe576100fa6040517f4e487b7100000000000000000000000000000000000000000000000000000000602082015260226024820152602481526100ee60448261045d565b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fe576100fa6040517f4e487b7100000000000000000000000000000000000000000000000000000000602082015260516024820152602481526100ee60448261045d565b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fe576100fa6040517f4e487b7100000000000000000000000000000000000000000000000000000000602082015260316024820152602481526100ee60448261045d565b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fe576100fa6040517f4e487b7100000000000000000000000000000000000000000000000000000000602082015260416024820152602481526100ee60448261045d565b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fe576100fa6040517f4e487b7100000000000000000000000000000000000000000000000000000000602082015260116024820152602481526100ee60448261045d565b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fe576100fa6040517f4e487b7100000000000000000000000000000000000000000000000000000000602082015260216024820152602481526100ee60448261045d565b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fe576100fa6040517f4e487b7100000000000000000000000000000000000000000000000000000000602082015260016024820152602481526100ee60448261045d565b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fe57807f4e487b710000000000000000000000000000000000000000000000000000000060206100fa93015260326024820152602481526100ee6044825b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761049e57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b9190916020815282519283602083015260005b84811061051f5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006040809697860101520116010190565b80602080928401015160408286010152016104e056fea2646970667358221220dd210679992147ac9213b46228662c81d7d6b2a45f7e404dd537f8da3ccf132164736f6c634300081c0033","sourceMap":"162:850:8:-:0;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608080604052600436101561001357600080fd5b60003560e01c90816305ee8612146103f757508063103329771461038b5780631de455601461031f5780638995290f146102b3578063986c5f6814610247578063b22dc54d146101db578063b67689da1461016f578063d160e4de146101035763fa784a441461008257600080fd5b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fe576100fa6040517f4e487b7100000000000000000000000000000000000000000000000000000000602082015260126024820152602481526100ee60448261045d565b604051918291826104cd565b0390f35b600080fd5b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fe576100fa6040517f4e487b7100000000000000000000000000000000000000000000000000000000602082015260226024820152602481526100ee60448261045d565b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fe576100fa6040517f4e487b7100000000000000000000000000000000000000000000000000000000602082015260516024820152602481526100ee60448261045d565b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fe576100fa6040517f4e487b7100000000000000000000000000000000000000000000000000000000602082015260316024820152602481526100ee60448261045d565b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fe576100fa6040517f4e487b7100000000000000000000000000000000000000000000000000000000602082015260416024820152602481526100ee60448261045d565b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fe576100fa6040517f4e487b7100000000000000000000000000000000000000000000000000000000602082015260116024820152602481526100ee60448261045d565b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fe576100fa6040517f4e487b7100000000000000000000000000000000000000000000000000000000602082015260216024820152602481526100ee60448261045d565b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fe576100fa6040517f4e487b7100000000000000000000000000000000000000000000000000000000602082015260016024820152602481526100ee60448261045d565b60007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100fe57807f4e487b710000000000000000000000000000000000000000000000000000000060206100fa93015260326024820152602481526100ee6044825b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761049e57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b9190916020815282519283602083015260005b84811061051f5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006040809697860101520116010190565b80602080928401015160408286010152016104e056fea2646970667358221220dd210679992147ac9213b46228662c81d7d6b2a45f7e404dd537f8da3ccf132164736f6c634300081c0033","sourceMap":"162:850:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;408:47;;;;;450:4;408:47;;;162:850;408:47;;;;;;;:::i;:::-;162:850;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;601:47;;;;;643:4;601:47;;;162:850;601:47;;;;;;;:::i;162:850::-;;;;;;;;;;;962:47;;;;;1004:4;962:47;;;162:850;962:47;;;;;;;:::i;162:850::-;;;;;;;;;;;687:47;;;;;729:4;687:47;;;162:850;687:47;;;;;;;:::i;162:850::-;;;;;;;;;;;872:47;;;;;914:4;872:47;;;162:850;872:47;;;;;;;:::i;162:850::-;;;;;;;;;;;317:47;;;;;359:4;317:47;;;162:850;317:47;;;;;;;:::i;162:850::-;;;;;;;;;;;505:47;;;;;547:4;505:47;;;162:850;505:47;;;;;;;:::i;162:850::-;;;;;;;;;;;224:47;;;;;266:4;224:47;;;162:850;224:47;;;;;;;:::i;162:850::-;;;;;;;;778:47;;;162:850;778:47;;;820:4;778:47;;;162:850;778:47;;;;;;162:850;;;;;;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;162:850:8;;;;;-1:-1:-1;162:850:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;","linkReferences":{}},"methodIdentifiers":{"arithmeticError()":"8995290f","assertionError()":"10332977","divisionError()":"fa784a44","encodeStorageError()":"d160e4de","enumConversionError()":"1de45560","indexOOBError()":"05ee8612","memOverflowError()":"986c5f68","popError()":"b22dc54d","zeroVarError()":"b67689da"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"arithmeticError\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"assertionError\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"divisionError\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"encodeStorageError\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enumConversionError\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"indexOOBError\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"memOverflowError\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"popError\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zeroVarError\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/forge-std/src/StdError.sol\":\"stdError\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"view","type":"function","name":"arithmeticError","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"assertionError","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"divisionError","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"encodeStorageError","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"enumConversionError","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"indexOOBError","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"memOverflowError","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"popError","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"zeroVarError","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"lib/forge-std/src/StdError.sol":"stdError"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"}},"version":1},"id":8} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/StdInvariant.sol/StdInvariant.json b/contracts/artifacts/wallet-contracts-v3/StdInvariant.sol/StdInvariant.json new file mode 100644 index 00000000..c694b269 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/StdInvariant.sol/StdInvariant.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"excludeArtifacts","inputs":[],"outputs":[{"name":"excludedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"excludeContracts","inputs":[],"outputs":[{"name":"excludedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"excludeSelectors","inputs":[],"outputs":[{"name":"excludedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"excludeSenders","inputs":[],"outputs":[{"name":"excludedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"targetArtifactSelectors","inputs":[],"outputs":[{"name":"targetedArtifactSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzArtifactSelector[]","components":[{"name":"artifact","type":"string","internalType":"string"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetArtifacts","inputs":[],"outputs":[{"name":"targetedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"targetContracts","inputs":[],"outputs":[{"name":"targetedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"targetInterfaces","inputs":[],"outputs":[{"name":"targetedInterfaces_","type":"tuple[]","internalType":"struct StdInvariant.FuzzInterface[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"artifacts","type":"string[]","internalType":"string[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSelectors","inputs":[],"outputs":[{"name":"targetedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSenders","inputs":[],"outputs":[{"name":"targetedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"excludeArtifacts()":"b5508aa9","excludeContracts()":"e20c9f71","excludeSelectors()":"b0464fdc","excludeSenders()":"1ed7831c","targetArtifactSelectors()":"66d9a9a0","targetArtifacts()":"85226c81","targetContracts()":"3f7286f4","targetInterfaces()":"2ade3880","targetSelectors()":"916a17c6","targetSenders()":"3e5e3c23"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"excludeArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"excludedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifactSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"artifact\",\"type\":\"string\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzArtifactSelector[]\",\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"targetedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetInterfaces\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"artifacts\",\"type\":\"string[]\"}],\"internalType\":\"struct StdInvariant.FuzzInterface[]\",\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/forge-std/src/StdInvariant.sol\":\"StdInvariant\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"view","type":"function","name":"excludeArtifacts","outputs":[{"internalType":"string[]","name":"excludedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeContracts","outputs":[{"internalType":"address[]","name":"excludedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"excludedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSenders","outputs":[{"internalType":"address[]","name":"excludedSenders_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifactSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzArtifactSelector[]","name":"targetedArtifactSelectors_","type":"tuple[]","components":[{"internalType":"string","name":"artifact","type":"string"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifacts","outputs":[{"internalType":"string[]","name":"targetedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetContracts","outputs":[{"internalType":"address[]","name":"targetedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetInterfaces","outputs":[{"internalType":"struct StdInvariant.FuzzInterface[]","name":"targetedInterfaces_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"string[]","name":"artifacts","type":"string[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"targetedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSenders","outputs":[{"internalType":"address[]","name":"targetedSenders_","type":"address[]"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"lib/forge-std/src/StdInvariant.sol":"StdInvariant"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"}},"version":1},"id":9} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/StdJson.sol/stdJson.json b/contracts/artifacts/wallet-contracts-v3/StdJson.sol/stdJson.json new file mode 100644 index 00000000..b9c3687e --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/StdJson.sol/stdJson.json @@ -0,0 +1 @@ +{"abi":[],"bytecode":{"object":"0x60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea26469706673582212207d4cf2ccffdb58556e933344fd91d40c421c32d9d4a7052633d83444e5e4cfd864736f6c634300081c0033","sourceMap":"610:9092:10:-:0;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x600080fdfea26469706673582212207d4cf2ccffdb58556e933344fd91d40c421c32d9d4a7052633d83444e5e4cfd864736f6c634300081c0033","sourceMap":"610:9092:10:-:0;;","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/forge-std/src/StdJson.sol\":\"stdJson\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"lib/forge-std/src/StdJson.sol":"stdJson"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"}},"version":1},"id":10} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/StdMath.sol/stdMath.json b/contracts/artifacts/wallet-contracts-v3/StdMath.sol/stdMath.json new file mode 100644 index 00000000..e323f8e5 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/StdMath.sol/stdMath.json @@ -0,0 +1 @@ +{"abi":[],"bytecode":{"object":"0x60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea2646970667358221220d4889da586655eb126c0d642e4a47f6fa5a8dbec9da6c9c634465132720c9bed64736f6c634300081c0033","sourceMap":"65:1294:11:-:0;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x600080fdfea2646970667358221220d4889da586655eb126c0d642e4a47f6fa5a8dbec9da6c9c634465132720c9bed64736f6c634300081c0033","sourceMap":"65:1294:11:-:0;;","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/forge-std/src/StdMath.sol\":\"stdMath\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"lib/forge-std/src/StdMath.sol":"stdMath"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"}},"version":1},"id":11} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/StdStorage.sol/stdStorage.json b/contracts/artifacts/wallet-contracts-v3/StdStorage.sol/stdStorage.json new file mode 100644 index 00000000..fb0c4193 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/StdStorage.sol/stdStorage.json @@ -0,0 +1 @@ +{"abi":[],"bytecode":{"object":"0x60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea2646970667358221220a7fb68083f488ad3ff7a8e470f1029011e6ce44dcf2107bdaf20c5fc018795d364736f6c634300081c0033","sourceMap":"12759:5081:12:-:0;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x600080fdfea2646970667358221220a7fb68083f488ad3ff7a8e470f1029011e6ce44dcf2107bdaf20c5fc018795d364736f6c634300081c0033","sourceMap":"12759:5081:12:-:0;;","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/forge-std/src/StdStorage.sol\":\"stdStorage\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"lib/forge-std/src/StdStorage.sol":"stdStorage"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"}},"version":1},"id":12} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/StdStorage.sol/stdStorageSafe.json b/contracts/artifacts/wallet-contracts-v3/StdStorage.sol/stdStorageSafe.json new file mode 100644 index 00000000..3dd1011b --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/StdStorage.sol/stdStorageSafe.json @@ -0,0 +1 @@ +{"abi":[{"type":"event","name":"SlotFound","inputs":[{"name":"who","type":"address","indexed":false,"internalType":"address"},{"name":"fsig","type":"bytes4","indexed":false,"internalType":"bytes4"},{"name":"keysHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"slot","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"WARNING_UninitedSlot","inputs":[{"name":"who","type":"address","indexed":false,"internalType":"address"},{"name":"slot","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false}],"bytecode":{"object":"0x60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea2646970667358221220fbc56cb84a9f0d320b9533573da8686996dcfe3c1815ba81b01a627eae7169fd64736f6c634300081c0033","sourceMap":"450:12307:12:-:0;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x600080fdfea2646970667358221220fbc56cb84a9f0d320b9533573da8686996dcfe3c1815ba81b01a627eae7169fd64736f6c634300081c0033","sourceMap":"450:12307:12:-:0;;","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"who\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes4\",\"name\":\"fsig\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"keysHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"slot\",\"type\":\"uint256\"}],\"name\":\"SlotFound\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"who\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"slot\",\"type\":\"uint256\"}],\"name\":\"WARNING_UninitedSlot\",\"type\":\"event\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/forge-std/src/StdStorage.sol\":\"stdStorageSafe\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"who","type":"address","indexed":false},{"internalType":"bytes4","name":"fsig","type":"bytes4","indexed":false},{"internalType":"bytes32","name":"keysHash","type":"bytes32","indexed":false},{"internalType":"uint256","name":"slot","type":"uint256","indexed":false}],"type":"event","name":"SlotFound","anonymous":false},{"inputs":[{"internalType":"address","name":"who","type":"address","indexed":false},{"internalType":"uint256","name":"slot","type":"uint256","indexed":false}],"type":"event","name":"WARNING_UninitedSlot","anonymous":false}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"lib/forge-std/src/StdStorage.sol":"stdStorageSafe"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"}},"version":1},"id":12} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/StdStyle.sol/StdStyle.json b/contracts/artifacts/wallet-contracts-v3/StdStyle.sol/StdStyle.json new file mode 100644 index 00000000..238f5f44 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/StdStyle.sol/StdStyle.json @@ -0,0 +1 @@ +{"abi":[],"bytecode":{"object":"0x60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea26469706673582212209a5e6d1fde37239648b97f98a3de521c43b63bb364245294f6e530cde0f1e7b964736f6c634300081c0033","sourceMap":"100:10361:13:-:0;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x600080fdfea26469706673582212209a5e6d1fde37239648b97f98a3de521c43b63bb364245294f6e530cde0f1e7b964736f6c634300081c0033","sourceMap":"100:10361:13:-:0;;","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/forge-std/src/StdStyle.sol\":\"StdStyle\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"lib/forge-std/src/StdStyle.sol":"StdStyle"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"}},"version":1},"id":13} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/StdToml.sol/stdToml.json b/contracts/artifacts/wallet-contracts-v3/StdToml.sol/stdToml.json new file mode 100644 index 00000000..61dcebfb --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/StdToml.sol/stdToml.json @@ -0,0 +1 @@ +{"abi":[],"bytecode":{"object":"0x60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea2646970667358221220839c58256eb8446d728ec7f2baa959c0aa5bc90713179b90d710e9d79213bb7864736f6c634300081c0033","sourceMap":"610:9092:14:-:0;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x600080fdfea2646970667358221220839c58256eb8446d728ec7f2baa959c0aa5bc90713179b90d710e9d79213bb7864736f6c634300081c0033","sourceMap":"610:9092:14:-:0;;","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/forge-std/src/StdToml.sol\":\"stdToml\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"lib/forge-std/src/StdToml.sol":"stdToml"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"}},"version":1},"id":14} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/StdUtils.sol/StdUtils.json b/contracts/artifacts/wallet-contracts-v3/StdUtils.sol/StdUtils.json new file mode 100644 index 00000000..21923d6a --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/StdUtils.sol/StdUtils.json @@ -0,0 +1 @@ +{"abi":[],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/forge-std/src/StdUtils.sol\":\"StdUtils\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"lib/forge-std/src/StdUtils.sol":"StdUtils"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"}},"version":1},"id":15} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Storage.sol/Storage.json b/contracts/artifacts/wallet-contracts-v3/Storage.sol/Storage.json new file mode 100644 index 00000000..170ca667 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Storage.sol/Storage.json @@ -0,0 +1 @@ +{"abi":[],"bytecode":{"object":"0x60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea2646970667358221220a184893a0eb3033f7fa97e37e6b700c82d59c5826b61912e0a9c7efb37b097b164736f6c634300081c0033","sourceMap":"174:658:49:-:0;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x600080fdfea2646970667358221220a184893a0eb3033f7fa97e37e6b700c82d59c5826b61912e0a9c7efb37b097b164736f6c634300081c0033","sourceMap":"174:658:49:-:0;;","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Agustin Aguilar\",\"kind\":\"dev\",\"methods\":{},\"title\":\"Storage\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Library for storing data at certain storage slots\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/modules/Storage.sol\":\"Storage\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/modules/Storage.sol\":{\"keccak256\":\"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da\",\"dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/modules/Storage.sol":"Storage"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/modules/Storage.sol":{"keccak256":"0xa6bc516642ea99194f3ac4375853daee3190272c4006d1e32f84ba88ec30173f","urls":["bzz-raw://209ba57704f952514910c54896df70197c695c2b4eeb1166a2c6ed29380741da","dweb:/ipfs/QmNmQpemo7qQxb2aDXdFooE6xNW1cp7gXGYa8xUUcJ4WWn"],"license":"Apache-2.0"}},"version":1},"id":49} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Test.sol/Test.json b/contracts/artifacts/wallet-contracts-v3/Test.sol/Test.json new file mode 100644 index 00000000..b094faef --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Test.sol/Test.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"excludeArtifacts","inputs":[],"outputs":[{"name":"excludedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"excludeContracts","inputs":[],"outputs":[{"name":"excludedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"excludeSelectors","inputs":[],"outputs":[{"name":"excludedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"excludeSenders","inputs":[],"outputs":[{"name":"excludedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"targetArtifactSelectors","inputs":[],"outputs":[{"name":"targetedArtifactSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzArtifactSelector[]","components":[{"name":"artifact","type":"string","internalType":"string"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetArtifacts","inputs":[],"outputs":[{"name":"targetedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"targetContracts","inputs":[],"outputs":[{"name":"targetedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"targetInterfaces","inputs":[],"outputs":[{"name":"targetedInterfaces_","type":"tuple[]","internalType":"struct StdInvariant.FuzzInterface[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"artifacts","type":"string[]","internalType":"string[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSelectors","inputs":[],"outputs":[{"name":"targetedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSenders","inputs":[],"outputs":[{"name":"targetedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"event","name":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"IS_TEST()":"fa7626d4","excludeArtifacts()":"b5508aa9","excludeContracts()":"e20c9f71","excludeSelectors()":"b0464fdc","excludeSenders()":"1ed7831c","failed()":"ba414fa6","targetArtifactSelectors()":"66d9a9a0","targetArtifacts()":"85226c81","targetContracts()":"3f7286f4","targetInterfaces()":"2ade3880","targetSelectors()":"916a17c6","targetSenders()":"3e5e3c23"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"IS_TEST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"excludedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifactSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"artifact\",\"type\":\"string\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzArtifactSelector[]\",\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"targetedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetInterfaces\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"artifacts\",\"type\":\"string[]\"}],\"internalType\":\"struct StdInvariant.FuzzInterface[]\",\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/forge-std/src/Test.sol\":\"Test\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log","anonymous":false},{"inputs":[{"internalType":"address","name":"","type":"address","indexed":false}],"type":"event","name":"log_address","anonymous":false},{"inputs":[{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"log_bytes","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32","indexed":false}],"type":"event","name":"log_bytes32","anonymous":false},{"inputs":[{"internalType":"int256","name":"","type":"int256","indexed":false}],"type":"event","name":"log_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address","name":"val","type":"address","indexed":false}],"type":"event","name":"log_named_address","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes","name":"val","type":"bytes","indexed":false}],"type":"event","name":"log_named_bytes","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes32","name":"val","type":"bytes32","indexed":false}],"type":"event","name":"log_named_bytes32","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false}],"type":"event","name":"log_named_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"string","name":"val","type":"string","indexed":false}],"type":"event","name":"log_named_string","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false}],"type":"event","name":"log_named_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log_string","anonymous":false},{"inputs":[{"internalType":"uint256","name":"","type":"uint256","indexed":false}],"type":"event","name":"log_uint","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"logs","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"IS_TEST","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeArtifacts","outputs":[{"internalType":"string[]","name":"excludedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeContracts","outputs":[{"internalType":"address[]","name":"excludedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"excludedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSenders","outputs":[{"internalType":"address[]","name":"excludedSenders_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"failed","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifactSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzArtifactSelector[]","name":"targetedArtifactSelectors_","type":"tuple[]","components":[{"internalType":"string","name":"artifact","type":"string"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifacts","outputs":[{"internalType":"string[]","name":"targetedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetContracts","outputs":[{"internalType":"address[]","name":"targetedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetInterfaces","outputs":[{"internalType":"struct StdInvariant.FuzzInterface[]","name":"targetedInterfaces_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"string[]","name":"artifacts","type":"string[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"targetedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSenders","outputs":[{"internalType":"address[]","name":"targetedSenders_","type":"address[]"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"lib/forge-std/src/Test.sol":"Test"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"}},"version":1},"id":16} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/TestUtils.sol/AdvTest.json b/contracts/artifacts/wallet-contracts-v3/TestUtils.sol/AdvTest.json new file mode 100644 index 00000000..652eac12 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/TestUtils.sol/AdvTest.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"excludeArtifacts","inputs":[],"outputs":[{"name":"excludedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"excludeContracts","inputs":[],"outputs":[{"name":"excludedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"excludeSelectors","inputs":[],"outputs":[{"name":"excludedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"excludeSenders","inputs":[],"outputs":[{"name":"excludedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"targetArtifactSelectors","inputs":[],"outputs":[{"name":"targetedArtifactSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzArtifactSelector[]","components":[{"name":"artifact","type":"string","internalType":"string"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetArtifacts","inputs":[],"outputs":[{"name":"targetedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"targetContracts","inputs":[],"outputs":[{"name":"targetedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"targetInterfaces","inputs":[],"outputs":[{"name":"targetedInterfaces_","type":"tuple[]","internalType":"struct StdInvariant.FuzzInterface[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"artifacts","type":"string[]","internalType":"string[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSelectors","inputs":[],"outputs":[{"name":"targetedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSenders","inputs":[],"outputs":[{"name":"targetedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"event","name":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false}],"bytecode":{"object":"0x60808060405234602f57600160ff19600c541617600c55600160ff19601f541617601f5561121990816100358239f35b600080fdfe608080604052600436101561001357600080fd5b60003560e01c9081631ed7831c146109dc575080632ade3880146107a65780633e5e3c23146106fb5780633f7286f41461065057806366d9a9a0146104ef57806385226c8114610444578063916a17c61461036b578063b0464fdc14610292578063b5508aa9146101e7578063ba414fa6146101a4578063e20c9f71146100e95763fa7626d4146100a357600080fd5b346100e45760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e457602060ff601f54166040519015158152f35b600080fd5b346100e45760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e45760405180602060155491828152019060156000527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4759060005b818110610178576101748561016881870382610cf6565b60405191829182610a83565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610151565b346100e45760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e45760206101dd6110fd565b6040519015158152f35b346100e45760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e45760195461022281610d37565b906102306040519283610cf6565b808252601960009081527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b83831061027557604051806101748782610b88565b60016020819261028485610d4f565b815201920192019190610260565b346100e45760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e457601c546102cd81610d37565b906102db6040519283610cf6565b80825260208201601c6000527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2116000915b83831061032157604051806101748782610c06565b6002602060019260405161033481610cab565b73ffffffffffffffffffffffffffffffffffffffff8654168152610359858701610e56565b8382015281520192019201919061030c565b346100e45760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e457601d546103a681610d37565b906103b46040519283610cf6565b80825260208201601d6000527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f6000915b8383106103fa57604051806101748782610c06565b6002602060019260405161040d81610cab565b73ffffffffffffffffffffffffffffffffffffffff8654168152610432858701610e56565b838201528152019201920191906103e5565b346100e45760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e457601a5461047f81610d37565b9061048d6040519283610cf6565b808252601a60009081527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b8383106104d257604051806101748782610b88565b6001602081926104e185610d4f565b8152019201920191906104bd565b346100e45760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e457601b5461052a81610d37565b906105386040519283610cf6565b808252602082019081601b6000527f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc16000915b83831061061557848660405191829160208301906020845251809152604083019060408160051b85010192916000905b8282106105aa57505050500390f35b91936020610605827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc06001959799849503018652885190836105f58351604084526040840190610ad3565b9201519084818403910152610b32565b960192019201859493919261059b565b6002602060019260405161062881610cab565b61063186610d4f565b815261063e858701610e56565b8382015281520192019201919061056b565b346100e45760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e45760405180602060175491828152019060176000527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c159060005b8181106106cf576101748561016881870382610cf6565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016106b8565b346100e45760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e45760405180602060185491828152019060186000527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e9060005b81811061077a576101748561016881870382610cf6565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610763565b346100e45760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e457601e546107e181610d37565b906107ef6040519283610cf6565b808252602082019081601e6000527f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e3506000915b83831061094157848660405191829160208301906020845251809152604083019060408160051b85010192916000905b82821061086157505050500390f35b91939092947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09082030182528451906020604082019273ffffffffffffffffffffffffffffffffffffffff81511683520151916040602083015282518091526060820190602060608260051b85010194019260005b8281106108f85750505050506020806001929601920192018594939192610852565b9091929394602080610934837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa087600196030189528951610ad3565b97019501939291016108d6565b60405161094d81610cab565b73ffffffffffffffffffffffffffffffffffffffff835416815260018301805461097681610d37565b916109846040519384610cf6565b81835260208301906000526020600020906000905b8382106109bf575050505060019282602092836002950152815201920192019190610822565b6001602081926109ce86610d4f565b815201930191019091610999565b346100e45760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e457601654808252602082019060166000527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b51242899060005b818110610a57576101748561016881870382610cf6565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610a40565b602060408183019282815284518094520192019060005b818110610aa75750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101610a9a565b919082519283825260005b848110610b1d5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201610ade565b906020808351928381520192019060005b818110610b505750505090565b82517fffffffff0000000000000000000000000000000000000000000000000000000016845260209384019390920191600101610b43565b602081016020825282518091526040820191602060408360051b8301019401926000915b838310610bbb57505050505090565b9091929394602080610bf7837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187528951610ad3565b97019301930191939290610bac565b602081016020825282518091526040820191602060408360051b8301019401926000915b838310610c3957505050505090565b9091929394602080610c9c837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190610b32565b97019301930191939290610c2a565b6040810190811067ffffffffffffffff821117610cc757604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610cc757604052565b67ffffffffffffffff8111610cc75760051b60200190565b906040519160008154918260011c92600181168015610e4c575b602085108114610e1f57848752869392918115610ddf5750600114610d98575b50610d9692500383610cf6565b565b90506000929192526020600020906000915b818310610dc3575050906020610d969282010138610d89565b6020919350806001915483858901015201910190918492610daa565b60209350610d969592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b82010138610d89565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f1693610d69565b90604051918281549182825260208201906000526020600020926000905b80600783011061107057610d9694549181811061103a575b818110611004575b818110610fce575b818110610f98575b818110610f62575b818110610f2c575b818110610ef7575b10610eca575b500383610cf6565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260200138610ec2565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b168152019301610ebc565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b168152019301610eb4565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b168152019301610eac565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b168152019301610ea4565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b168152019301610e9c565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b168152019301610e94565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b168152019301610e8c565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e0820152019401920185929391610e74565b60085460ff16801561110c5790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156111d7576000916111a5575b50151590565b90506020813d6020116111cf575b816111c060209383610cf6565b810103126100e457513861119f565b3d91506111b3565b6040513d6000823e3d90fdfea264697066735822122074e4c47379e606ad49e140f90d09849886cae59ef74c46add5e44d8fba56c8f564736f6c634300081c0033","sourceMap":"184:3972:98:-:0;;;;;;;3166:4:5;184:3972:98;;3166:4:5;184:3972:98;;;3166:4:5;184:3972:98;3166:4:5;184:3972:98;;1087:4:16;184:3972:98;;;1087:4:16;184:3972:98;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608080604052600436101561001357600080fd5b60003560e01c9081631ed7831c146109dc575080632ade3880146107a65780633e5e3c23146106fb5780633f7286f41461065057806366d9a9a0146104ef57806385226c8114610444578063916a17c61461036b578063b0464fdc14610292578063b5508aa9146101e7578063ba414fa6146101a4578063e20c9f71146100e95763fa7626d4146100a357600080fd5b346100e45760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e457602060ff601f54166040519015158152f35b600080fd5b346100e45760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e45760405180602060155491828152019060156000527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4759060005b818110610178576101748561016881870382610cf6565b60405191829182610a83565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610151565b346100e45760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e45760206101dd6110fd565b6040519015158152f35b346100e45760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e45760195461022281610d37565b906102306040519283610cf6565b808252601960009081527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b83831061027557604051806101748782610b88565b60016020819261028485610d4f565b815201920192019190610260565b346100e45760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e457601c546102cd81610d37565b906102db6040519283610cf6565b80825260208201601c6000527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2116000915b83831061032157604051806101748782610c06565b6002602060019260405161033481610cab565b73ffffffffffffffffffffffffffffffffffffffff8654168152610359858701610e56565b8382015281520192019201919061030c565b346100e45760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e457601d546103a681610d37565b906103b46040519283610cf6565b80825260208201601d6000527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f6000915b8383106103fa57604051806101748782610c06565b6002602060019260405161040d81610cab565b73ffffffffffffffffffffffffffffffffffffffff8654168152610432858701610e56565b838201528152019201920191906103e5565b346100e45760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e457601a5461047f81610d37565b9061048d6040519283610cf6565b808252601a60009081527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b8383106104d257604051806101748782610b88565b6001602081926104e185610d4f565b8152019201920191906104bd565b346100e45760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e457601b5461052a81610d37565b906105386040519283610cf6565b808252602082019081601b6000527f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc16000915b83831061061557848660405191829160208301906020845251809152604083019060408160051b85010192916000905b8282106105aa57505050500390f35b91936020610605827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc06001959799849503018652885190836105f58351604084526040840190610ad3565b9201519084818403910152610b32565b960192019201859493919261059b565b6002602060019260405161062881610cab565b61063186610d4f565b815261063e858701610e56565b8382015281520192019201919061056b565b346100e45760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e45760405180602060175491828152019060176000527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c159060005b8181106106cf576101748561016881870382610cf6565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016106b8565b346100e45760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e45760405180602060185491828152019060186000527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e9060005b81811061077a576101748561016881870382610cf6565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610763565b346100e45760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e457601e546107e181610d37565b906107ef6040519283610cf6565b808252602082019081601e6000527f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e3506000915b83831061094157848660405191829160208301906020845251809152604083019060408160051b85010192916000905b82821061086157505050500390f35b91939092947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09082030182528451906020604082019273ffffffffffffffffffffffffffffffffffffffff81511683520151916040602083015282518091526060820190602060608260051b85010194019260005b8281106108f85750505050506020806001929601920192018594939192610852565b9091929394602080610934837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa087600196030189528951610ad3565b97019501939291016108d6565b60405161094d81610cab565b73ffffffffffffffffffffffffffffffffffffffff835416815260018301805461097681610d37565b916109846040519384610cf6565b81835260208301906000526020600020906000905b8382106109bf575050505060019282602092836002950152815201920192019190610822565b6001602081926109ce86610d4f565b815201930191019091610999565b346100e45760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e457601654808252602082019060166000527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b51242899060005b818110610a57576101748561016881870382610cf6565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610a40565b602060408183019282815284518094520192019060005b818110610aa75750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101610a9a565b919082519283825260005b848110610b1d5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201610ade565b906020808351928381520192019060005b818110610b505750505090565b82517fffffffff0000000000000000000000000000000000000000000000000000000016845260209384019390920191600101610b43565b602081016020825282518091526040820191602060408360051b8301019401926000915b838310610bbb57505050505090565b9091929394602080610bf7837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187528951610ad3565b97019301930191939290610bac565b602081016020825282518091526040820191602060408360051b8301019401926000915b838310610c3957505050505090565b9091929394602080610c9c837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190610b32565b97019301930191939290610c2a565b6040810190811067ffffffffffffffff821117610cc757604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610cc757604052565b67ffffffffffffffff8111610cc75760051b60200190565b906040519160008154918260011c92600181168015610e4c575b602085108114610e1f57848752869392918115610ddf5750600114610d98575b50610d9692500383610cf6565b565b90506000929192526020600020906000915b818310610dc3575050906020610d969282010138610d89565b6020919350806001915483858901015201910190918492610daa565b60209350610d969592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b82010138610d89565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f1693610d69565b90604051918281549182825260208201906000526020600020926000905b80600783011061107057610d9694549181811061103a575b818110611004575b818110610fce575b818110610f98575b818110610f62575b818110610f2c575b818110610ef7575b10610eca575b500383610cf6565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260200138610ec2565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b168152019301610ebc565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b168152019301610eb4565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b168152019301610eac565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b168152019301610ea4565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b168152019301610e9c565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b168152019301610e94565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b168152019301610e8c565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e0820152019401920185929391610e74565b60085460ff16801561110c5790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9081156111d7576000916111a5575b50151590565b90506020813d6020116111cf575b816111c060209383610cf6565b810103126100e457513861119f565b3d91506111b3565b6040513d6000823e3d90fdfea264697066735822122074e4c47379e606ad49e140f90d09849886cae59ef74c46add5e44d8fba56c8f564736f6c634300081c0033","sourceMap":"184:3972:98:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1065:26:16;184:3972:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2723:18:9;184:3972:98;;;;;;;2723:18:9;184:3972:98;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;2575:18:9;184:3972:98;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;2575:18:9;184:3972:98;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;2876:18:9;184:3972:98;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;2876:18:9;184:3972:98;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;3653:18:9;184:3972:98;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;3653:18:9;184:3972:98;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;3162:18:9;184:3972:98;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;3162:18:9;184:3972:98;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3346:26:9;184:3972:98;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;3346:26:9;184:3972:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3501:18:9;184:3972:98;;;;;;;3501:18:9;184:3972:98;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3794:16:9;184:3972:98;;;;;;;3794:16:9;184:3972:98;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3948:19:9;184:3972:98;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;3948:19:9;184:3972:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3018:16:9;184:3972:98;;;;;;;;3018:16:9;184:3972:98;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;184:3972:98;;;;;;;;;;;-1:-1:-1;184:3972:98;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;184:3972:98;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;184:3972:98;;;;;-1:-1:-1;184:3972:98;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;-1:-1:-1;184:3972:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;;;-1:-1:-1;184:3972:98;;;;;-1:-1:-1;184:3972:98;;-1:-1:-1;184:3972:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;184:3972:98;;-1:-1:-1;184:3972:98;;-1:-1:-1;184:3972:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1243:204:4;1302:7;184:3972:98;;;;;;;1325:14:4;:::o;1298:143::-;184:3972:98;;;;1377:39:4;;184:3972:98;1377:39:4;;;184:3972:98;192:59:4;;;;;;1377:39;;;184:3972:98;1377:39:4;;;;;;;184:3972:98;1377:39:4;;;1298:143;1377:53;;;1370:60;:::o;1377:39::-;;;192:59;1377:39;;192:59;1377:39;;;;;;192:59;1377:39;;;:::i;:::-;;;192:59;;;;;1377:39;;;;;;-1:-1:-1;1377:39:4;;;184:3972:98;;192:59:4;184:3972:98;192:59:4;;;;","linkReferences":{}},"methodIdentifiers":{"IS_TEST()":"fa7626d4","excludeArtifacts()":"b5508aa9","excludeContracts()":"e20c9f71","excludeSelectors()":"b0464fdc","excludeSenders()":"1ed7831c","failed()":"ba414fa6","targetArtifactSelectors()":"66d9a9a0","targetArtifacts()":"85226c81","targetContracts()":"3f7286f4","targetInterfaces()":"2ade3880","targetSelectors()":"916a17c6","targetSenders()":"3e5e3c23"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"IS_TEST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"excludedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifactSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"artifact\",\"type\":\"string\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzArtifactSelector[]\",\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"targetedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetInterfaces\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"artifacts\",\"type\":\"string[]\"}],\"internalType\":\"struct StdInvariant.FuzzInterface[]\",\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/utils/TestUtils.sol\":\"AdvTest\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"test/utils/TestUtils.sol\":{\"keccak256\":\"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad\",\"dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log","anonymous":false},{"inputs":[{"internalType":"address","name":"","type":"address","indexed":false}],"type":"event","name":"log_address","anonymous":false},{"inputs":[{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"log_bytes","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32","indexed":false}],"type":"event","name":"log_bytes32","anonymous":false},{"inputs":[{"internalType":"int256","name":"","type":"int256","indexed":false}],"type":"event","name":"log_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address","name":"val","type":"address","indexed":false}],"type":"event","name":"log_named_address","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes","name":"val","type":"bytes","indexed":false}],"type":"event","name":"log_named_bytes","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes32","name":"val","type":"bytes32","indexed":false}],"type":"event","name":"log_named_bytes32","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false}],"type":"event","name":"log_named_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"string","name":"val","type":"string","indexed":false}],"type":"event","name":"log_named_string","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false}],"type":"event","name":"log_named_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log_string","anonymous":false},{"inputs":[{"internalType":"uint256","name":"","type":"uint256","indexed":false}],"type":"event","name":"log_uint","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"logs","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"IS_TEST","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeArtifacts","outputs":[{"internalType":"string[]","name":"excludedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeContracts","outputs":[{"internalType":"address[]","name":"excludedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"excludedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSenders","outputs":[{"internalType":"address[]","name":"excludedSenders_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"failed","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifactSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzArtifactSelector[]","name":"targetedArtifactSelectors_","type":"tuple[]","components":[{"internalType":"string","name":"artifact","type":"string"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifacts","outputs":[{"internalType":"string[]","name":"targetedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetContracts","outputs":[{"internalType":"address[]","name":"targetedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetInterfaces","outputs":[{"internalType":"struct StdInvariant.FuzzInterface[]","name":"targetedInterfaces_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"string[]","name":"artifacts","type":"string[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"targetedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSenders","outputs":[{"internalType":"address[]","name":"targetedSenders_","type":"address[]"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/utils/TestUtils.sol":"AdvTest"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"test/utils/TestUtils.sol":{"keccak256":"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79","urls":["bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad","dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa"],"license":"Apache-2.0"}},"version":1},"id":98} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Vm.sol/Vm.json b/contracts/artifacts/wallet-contracts-v3/Vm.sol/Vm.json new file mode 100644 index 00000000..a14c8df1 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Vm.sol/Vm.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"accessList","inputs":[{"name":"access","type":"tuple[]","internalType":"struct VmSafe.AccessListItem[]","components":[{"name":"target","type":"address","internalType":"address"},{"name":"storageKeys","type":"bytes32[]","internalType":"bytes32[]"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"accesses","inputs":[{"name":"target","type":"address","internalType":"address"}],"outputs":[{"name":"readSlots","type":"bytes32[]","internalType":"bytes32[]"},{"name":"writeSlots","type":"bytes32[]","internalType":"bytes32[]"}],"stateMutability":"nonpayable"},{"type":"function","name":"activeFork","inputs":[],"outputs":[{"name":"forkId","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"addr","inputs":[{"name":"privateKey","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"keyAddr","type":"address","internalType":"address"}],"stateMutability":"pure"},{"type":"function","name":"allowCheatcodes","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"assertApproxEqAbs","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"maxDelta","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertApproxEqAbs","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"maxDelta","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertApproxEqAbs","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"maxDelta","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertApproxEqAbs","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"maxDelta","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertApproxEqAbsDecimal","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"maxDelta","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertApproxEqAbsDecimal","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"maxDelta","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertApproxEqAbsDecimal","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"maxDelta","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertApproxEqAbsDecimal","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"maxDelta","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertApproxEqRel","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"maxPercentDelta","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertApproxEqRel","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"maxPercentDelta","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertApproxEqRel","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"maxPercentDelta","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertApproxEqRel","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"maxPercentDelta","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertApproxEqRelDecimal","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"maxPercentDelta","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertApproxEqRelDecimal","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"maxPercentDelta","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertApproxEqRelDecimal","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"maxPercentDelta","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertApproxEqRelDecimal","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"maxPercentDelta","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"bytes32[]","internalType":"bytes32[]"},{"name":"right","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"int256[]","internalType":"int256[]"},{"name":"right","type":"int256[]","internalType":"int256[]"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"address","internalType":"address"},{"name":"right","type":"address","internalType":"address"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"string","internalType":"string"},{"name":"right","type":"string","internalType":"string"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"address[]","internalType":"address[]"},{"name":"right","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"address[]","internalType":"address[]"},{"name":"right","type":"address[]","internalType":"address[]"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"bool","internalType":"bool"},{"name":"right","type":"bool","internalType":"bool"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"address","internalType":"address"},{"name":"right","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"uint256[]","internalType":"uint256[]"},{"name":"right","type":"uint256[]","internalType":"uint256[]"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"bool[]","internalType":"bool[]"},{"name":"right","type":"bool[]","internalType":"bool[]"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"int256[]","internalType":"int256[]"},{"name":"right","type":"int256[]","internalType":"int256[]"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"bytes32","internalType":"bytes32"},{"name":"right","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"uint256[]","internalType":"uint256[]"},{"name":"right","type":"uint256[]","internalType":"uint256[]"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"bytes","internalType":"bytes"},{"name":"right","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"bytes32","internalType":"bytes32"},{"name":"right","type":"bytes32","internalType":"bytes32"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"string[]","internalType":"string[]"},{"name":"right","type":"string[]","internalType":"string[]"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"bytes32[]","internalType":"bytes32[]"},{"name":"right","type":"bytes32[]","internalType":"bytes32[]"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"bytes","internalType":"bytes"},{"name":"right","type":"bytes","internalType":"bytes"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"bool[]","internalType":"bool[]"},{"name":"right","type":"bool[]","internalType":"bool[]"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"bytes[]","internalType":"bytes[]"},{"name":"right","type":"bytes[]","internalType":"bytes[]"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"string[]","internalType":"string[]"},{"name":"right","type":"string[]","internalType":"string[]"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"string","internalType":"string"},{"name":"right","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"bytes[]","internalType":"bytes[]"},{"name":"right","type":"bytes[]","internalType":"bytes[]"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"bool","internalType":"bool"},{"name":"right","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEqDecimal","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEqDecimal","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"decimals","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEqDecimal","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"decimals","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEqDecimal","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertFalse","inputs":[{"name":"condition","type":"bool","internalType":"bool"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertFalse","inputs":[{"name":"condition","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertGe","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertGe","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertGe","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertGe","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertGeDecimal","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertGeDecimal","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"decimals","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertGeDecimal","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertGeDecimal","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"decimals","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertGt","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertGt","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertGt","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertGt","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertGtDecimal","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"decimals","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertGtDecimal","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertGtDecimal","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"decimals","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertGtDecimal","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertLe","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertLe","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertLe","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertLe","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertLeDecimal","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"decimals","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertLeDecimal","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertLeDecimal","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"decimals","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertLeDecimal","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertLt","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertLt","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertLt","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertLt","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertLtDecimal","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertLtDecimal","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"decimals","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertLtDecimal","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertLtDecimal","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"decimals","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"bytes32[]","internalType":"bytes32[]"},{"name":"right","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"int256[]","internalType":"int256[]"},{"name":"right","type":"int256[]","internalType":"int256[]"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"bool","internalType":"bool"},{"name":"right","type":"bool","internalType":"bool"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"bytes[]","internalType":"bytes[]"},{"name":"right","type":"bytes[]","internalType":"bytes[]"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"bool","internalType":"bool"},{"name":"right","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"bool[]","internalType":"bool[]"},{"name":"right","type":"bool[]","internalType":"bool[]"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"bytes","internalType":"bytes"},{"name":"right","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"address[]","internalType":"address[]"},{"name":"right","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"uint256[]","internalType":"uint256[]"},{"name":"right","type":"uint256[]","internalType":"uint256[]"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"bool[]","internalType":"bool[]"},{"name":"right","type":"bool[]","internalType":"bool[]"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"string","internalType":"string"},{"name":"right","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"address[]","internalType":"address[]"},{"name":"right","type":"address[]","internalType":"address[]"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"string","internalType":"string"},{"name":"right","type":"string","internalType":"string"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"address","internalType":"address"},{"name":"right","type":"address","internalType":"address"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"bytes32","internalType":"bytes32"},{"name":"right","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"bytes","internalType":"bytes"},{"name":"right","type":"bytes","internalType":"bytes"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"uint256[]","internalType":"uint256[]"},{"name":"right","type":"uint256[]","internalType":"uint256[]"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"address","internalType":"address"},{"name":"right","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"bytes32","internalType":"bytes32"},{"name":"right","type":"bytes32","internalType":"bytes32"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"string[]","internalType":"string[]"},{"name":"right","type":"string[]","internalType":"string[]"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"bytes32[]","internalType":"bytes32[]"},{"name":"right","type":"bytes32[]","internalType":"bytes32[]"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"string[]","internalType":"string[]"},{"name":"right","type":"string[]","internalType":"string[]"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"int256[]","internalType":"int256[]"},{"name":"right","type":"int256[]","internalType":"int256[]"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"bytes[]","internalType":"bytes[]"},{"name":"right","type":"bytes[]","internalType":"bytes[]"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEqDecimal","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"decimals","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEqDecimal","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"decimals","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEqDecimal","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEqDecimal","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertTrue","inputs":[{"name":"condition","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertTrue","inputs":[{"name":"condition","type":"bool","internalType":"bool"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assume","inputs":[{"name":"condition","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assumeNoRevert","inputs":[],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assumeNoRevert","inputs":[{"name":"potentialReverts","type":"tuple[]","internalType":"struct VmSafe.PotentialRevert[]","components":[{"name":"reverter","type":"address","internalType":"address"},{"name":"partialMatch","type":"bool","internalType":"bool"},{"name":"revertData","type":"bytes","internalType":"bytes"}]}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assumeNoRevert","inputs":[{"name":"potentialRevert","type":"tuple","internalType":"struct VmSafe.PotentialRevert","components":[{"name":"reverter","type":"address","internalType":"address"},{"name":"partialMatch","type":"bool","internalType":"bool"},{"name":"revertData","type":"bytes","internalType":"bytes"}]}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"attachBlob","inputs":[{"name":"blob","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"attachDelegation","inputs":[{"name":"signedDelegation","type":"tuple","internalType":"struct VmSafe.SignedDelegation","components":[{"name":"v","type":"uint8","internalType":"uint8"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"},{"name":"nonce","type":"uint64","internalType":"uint64"},{"name":"implementation","type":"address","internalType":"address"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"blobBaseFee","inputs":[{"name":"newBlobBaseFee","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"blobhashes","inputs":[{"name":"hashes","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"breakpoint","inputs":[{"name":"char","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"breakpoint","inputs":[{"name":"char","type":"string","internalType":"string"},{"name":"value","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"broadcast","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"broadcast","inputs":[{"name":"signer","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"broadcast","inputs":[{"name":"privateKey","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"broadcastRawTransaction","inputs":[{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"chainId","inputs":[{"name":"newChainId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"clearMockedCalls","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"cloneAccount","inputs":[{"name":"source","type":"address","internalType":"address"},{"name":"target","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"closeFile","inputs":[{"name":"path","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"coinbase","inputs":[{"name":"newCoinbase","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"computeCreate2Address","inputs":[{"name":"salt","type":"bytes32","internalType":"bytes32"},{"name":"initCodeHash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"pure"},{"type":"function","name":"computeCreate2Address","inputs":[{"name":"salt","type":"bytes32","internalType":"bytes32"},{"name":"initCodeHash","type":"bytes32","internalType":"bytes32"},{"name":"deployer","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"pure"},{"type":"function","name":"computeCreateAddress","inputs":[{"name":"deployer","type":"address","internalType":"address"},{"name":"nonce","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"pure"},{"type":"function","name":"contains","inputs":[{"name":"subject","type":"string","internalType":"string"},{"name":"search","type":"string","internalType":"string"}],"outputs":[{"name":"result","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"cool","inputs":[{"name":"target","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"coolSlot","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"slot","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"copyFile","inputs":[{"name":"from","type":"string","internalType":"string"},{"name":"to","type":"string","internalType":"string"}],"outputs":[{"name":"copied","type":"uint64","internalType":"uint64"}],"stateMutability":"nonpayable"},{"type":"function","name":"copyStorage","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"createDir","inputs":[{"name":"path","type":"string","internalType":"string"},{"name":"recursive","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"createFork","inputs":[{"name":"urlOrAlias","type":"string","internalType":"string"}],"outputs":[{"name":"forkId","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"createFork","inputs":[{"name":"urlOrAlias","type":"string","internalType":"string"},{"name":"blockNumber","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"forkId","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"createFork","inputs":[{"name":"urlOrAlias","type":"string","internalType":"string"},{"name":"txHash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"forkId","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"createSelectFork","inputs":[{"name":"urlOrAlias","type":"string","internalType":"string"},{"name":"blockNumber","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"forkId","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"createSelectFork","inputs":[{"name":"urlOrAlias","type":"string","internalType":"string"},{"name":"txHash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"forkId","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"createSelectFork","inputs":[{"name":"urlOrAlias","type":"string","internalType":"string"}],"outputs":[{"name":"forkId","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"createWallet","inputs":[{"name":"walletLabel","type":"string","internalType":"string"}],"outputs":[{"name":"wallet","type":"tuple","internalType":"struct VmSafe.Wallet","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"publicKeyX","type":"uint256","internalType":"uint256"},{"name":"publicKeyY","type":"uint256","internalType":"uint256"},{"name":"privateKey","type":"uint256","internalType":"uint256"}]}],"stateMutability":"nonpayable"},{"type":"function","name":"createWallet","inputs":[{"name":"privateKey","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"wallet","type":"tuple","internalType":"struct VmSafe.Wallet","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"publicKeyX","type":"uint256","internalType":"uint256"},{"name":"publicKeyY","type":"uint256","internalType":"uint256"},{"name":"privateKey","type":"uint256","internalType":"uint256"}]}],"stateMutability":"nonpayable"},{"type":"function","name":"createWallet","inputs":[{"name":"privateKey","type":"uint256","internalType":"uint256"},{"name":"walletLabel","type":"string","internalType":"string"}],"outputs":[{"name":"wallet","type":"tuple","internalType":"struct VmSafe.Wallet","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"publicKeyX","type":"uint256","internalType":"uint256"},{"name":"publicKeyY","type":"uint256","internalType":"uint256"},{"name":"privateKey","type":"uint256","internalType":"uint256"}]}],"stateMutability":"nonpayable"},{"type":"function","name":"deal","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"newBalance","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"deleteSnapshot","inputs":[{"name":"snapshotId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"success","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"deleteSnapshots","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"deleteStateSnapshot","inputs":[{"name":"snapshotId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"success","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"deleteStateSnapshots","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"deployCode","inputs":[{"name":"artifactPath","type":"string","internalType":"string"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"deployedAddress","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"deployCode","inputs":[{"name":"artifactPath","type":"string","internalType":"string"},{"name":"constructorArgs","type":"bytes","internalType":"bytes"},{"name":"salt","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"deployedAddress","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"deployCode","inputs":[{"name":"artifactPath","type":"string","internalType":"string"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"deployedAddress","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"deployCode","inputs":[{"name":"artifactPath","type":"string","internalType":"string"},{"name":"salt","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"deployedAddress","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"deployCode","inputs":[{"name":"artifactPath","type":"string","internalType":"string"},{"name":"constructorArgs","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"deployedAddress","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"deployCode","inputs":[{"name":"artifactPath","type":"string","internalType":"string"},{"name":"constructorArgs","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"deployedAddress","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"deployCode","inputs":[{"name":"artifactPath","type":"string","internalType":"string"}],"outputs":[{"name":"deployedAddress","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"deployCode","inputs":[{"name":"artifactPath","type":"string","internalType":"string"},{"name":"constructorArgs","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"deployedAddress","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"deriveKey","inputs":[{"name":"mnemonic","type":"string","internalType":"string"},{"name":"derivationPath","type":"string","internalType":"string"},{"name":"index","type":"uint32","internalType":"uint32"},{"name":"language","type":"string","internalType":"string"}],"outputs":[{"name":"privateKey","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"deriveKey","inputs":[{"name":"mnemonic","type":"string","internalType":"string"},{"name":"index","type":"uint32","internalType":"uint32"},{"name":"language","type":"string","internalType":"string"}],"outputs":[{"name":"privateKey","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"deriveKey","inputs":[{"name":"mnemonic","type":"string","internalType":"string"},{"name":"index","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"privateKey","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"deriveKey","inputs":[{"name":"mnemonic","type":"string","internalType":"string"},{"name":"derivationPath","type":"string","internalType":"string"},{"name":"index","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"privateKey","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"difficulty","inputs":[{"name":"newDifficulty","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"dumpState","inputs":[{"name":"pathToStateJson","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"ensNamehash","inputs":[{"name":"name","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"type":"function","name":"envAddress","inputs":[{"name":"name","type":"string","internalType":"string"}],"outputs":[{"name":"value","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"envAddress","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"delim","type":"string","internalType":"string"}],"outputs":[{"name":"value","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"envBool","inputs":[{"name":"name","type":"string","internalType":"string"}],"outputs":[{"name":"value","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"envBool","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"delim","type":"string","internalType":"string"}],"outputs":[{"name":"value","type":"bool[]","internalType":"bool[]"}],"stateMutability":"view"},{"type":"function","name":"envBytes","inputs":[{"name":"name","type":"string","internalType":"string"}],"outputs":[{"name":"value","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"envBytes","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"delim","type":"string","internalType":"string"}],"outputs":[{"name":"value","type":"bytes[]","internalType":"bytes[]"}],"stateMutability":"view"},{"type":"function","name":"envBytes32","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"delim","type":"string","internalType":"string"}],"outputs":[{"name":"value","type":"bytes32[]","internalType":"bytes32[]"}],"stateMutability":"view"},{"type":"function","name":"envBytes32","inputs":[{"name":"name","type":"string","internalType":"string"}],"outputs":[{"name":"value","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"envExists","inputs":[{"name":"name","type":"string","internalType":"string"}],"outputs":[{"name":"result","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"envInt","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"delim","type":"string","internalType":"string"}],"outputs":[{"name":"value","type":"int256[]","internalType":"int256[]"}],"stateMutability":"view"},{"type":"function","name":"envInt","inputs":[{"name":"name","type":"string","internalType":"string"}],"outputs":[{"name":"value","type":"int256","internalType":"int256"}],"stateMutability":"view"},{"type":"function","name":"envOr","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"delim","type":"string","internalType":"string"},{"name":"defaultValue","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[{"name":"value","type":"bytes32[]","internalType":"bytes32[]"}],"stateMutability":"view"},{"type":"function","name":"envOr","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"delim","type":"string","internalType":"string"},{"name":"defaultValue","type":"int256[]","internalType":"int256[]"}],"outputs":[{"name":"value","type":"int256[]","internalType":"int256[]"}],"stateMutability":"view"},{"type":"function","name":"envOr","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"defaultValue","type":"bool","internalType":"bool"}],"outputs":[{"name":"value","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"envOr","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"defaultValue","type":"address","internalType":"address"}],"outputs":[{"name":"value","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"envOr","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"defaultValue","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"value","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"envOr","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"delim","type":"string","internalType":"string"},{"name":"defaultValue","type":"bytes[]","internalType":"bytes[]"}],"outputs":[{"name":"value","type":"bytes[]","internalType":"bytes[]"}],"stateMutability":"view"},{"type":"function","name":"envOr","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"delim","type":"string","internalType":"string"},{"name":"defaultValue","type":"uint256[]","internalType":"uint256[]"}],"outputs":[{"name":"value","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"envOr","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"delim","type":"string","internalType":"string"},{"name":"defaultValue","type":"string[]","internalType":"string[]"}],"outputs":[{"name":"value","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"envOr","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"defaultValue","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"value","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"envOr","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"defaultValue","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"value","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"envOr","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"defaultValue","type":"int256","internalType":"int256"}],"outputs":[{"name":"value","type":"int256","internalType":"int256"}],"stateMutability":"view"},{"type":"function","name":"envOr","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"delim","type":"string","internalType":"string"},{"name":"defaultValue","type":"address[]","internalType":"address[]"}],"outputs":[{"name":"value","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"envOr","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"defaultValue","type":"string","internalType":"string"}],"outputs":[{"name":"value","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"envOr","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"delim","type":"string","internalType":"string"},{"name":"defaultValue","type":"bool[]","internalType":"bool[]"}],"outputs":[{"name":"value","type":"bool[]","internalType":"bool[]"}],"stateMutability":"view"},{"type":"function","name":"envString","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"delim","type":"string","internalType":"string"}],"outputs":[{"name":"value","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"envString","inputs":[{"name":"name","type":"string","internalType":"string"}],"outputs":[{"name":"value","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"envUint","inputs":[{"name":"name","type":"string","internalType":"string"}],"outputs":[{"name":"value","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"envUint","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"delim","type":"string","internalType":"string"}],"outputs":[{"name":"value","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"etch","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"newRuntimeBytecode","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"eth_getLogs","inputs":[{"name":"fromBlock","type":"uint256","internalType":"uint256"},{"name":"toBlock","type":"uint256","internalType":"uint256"},{"name":"target","type":"address","internalType":"address"},{"name":"topics","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[{"name":"logs","type":"tuple[]","internalType":"struct VmSafe.EthGetLogs[]","components":[{"name":"emitter","type":"address","internalType":"address"},{"name":"topics","type":"bytes32[]","internalType":"bytes32[]"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"blockHash","type":"bytes32","internalType":"bytes32"},{"name":"blockNumber","type":"uint64","internalType":"uint64"},{"name":"transactionHash","type":"bytes32","internalType":"bytes32"},{"name":"transactionIndex","type":"uint64","internalType":"uint64"},{"name":"logIndex","type":"uint256","internalType":"uint256"},{"name":"removed","type":"bool","internalType":"bool"}]}],"stateMutability":"nonpayable"},{"type":"function","name":"exists","inputs":[{"name":"path","type":"string","internalType":"string"}],"outputs":[{"name":"result","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"expectCall","inputs":[{"name":"callee","type":"address","internalType":"address"},{"name":"msgValue","type":"uint256","internalType":"uint256"},{"name":"gas","type":"uint64","internalType":"uint64"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"expectCall","inputs":[{"name":"callee","type":"address","internalType":"address"},{"name":"msgValue","type":"uint256","internalType":"uint256"},{"name":"gas","type":"uint64","internalType":"uint64"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"count","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"expectCall","inputs":[{"name":"callee","type":"address","internalType":"address"},{"name":"msgValue","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"count","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"expectCall","inputs":[{"name":"callee","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"expectCall","inputs":[{"name":"callee","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"count","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"expectCall","inputs":[{"name":"callee","type":"address","internalType":"address"},{"name":"msgValue","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"expectCallMinGas","inputs":[{"name":"callee","type":"address","internalType":"address"},{"name":"msgValue","type":"uint256","internalType":"uint256"},{"name":"minGas","type":"uint64","internalType":"uint64"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"expectCallMinGas","inputs":[{"name":"callee","type":"address","internalType":"address"},{"name":"msgValue","type":"uint256","internalType":"uint256"},{"name":"minGas","type":"uint64","internalType":"uint64"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"count","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"expectCreate","inputs":[{"name":"bytecode","type":"bytes","internalType":"bytes"},{"name":"deployer","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"expectCreate2","inputs":[{"name":"bytecode","type":"bytes","internalType":"bytes"},{"name":"deployer","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"expectEmit","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"expectEmit","inputs":[{"name":"checkTopic1","type":"bool","internalType":"bool"},{"name":"checkTopic2","type":"bool","internalType":"bool"},{"name":"checkTopic3","type":"bool","internalType":"bool"},{"name":"checkData","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"expectEmit","inputs":[{"name":"count","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"expectEmit","inputs":[{"name":"checkTopic1","type":"bool","internalType":"bool"},{"name":"checkTopic2","type":"bool","internalType":"bool"},{"name":"checkTopic3","type":"bool","internalType":"bool"},{"name":"checkData","type":"bool","internalType":"bool"},{"name":"count","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"expectEmit","inputs":[{"name":"checkTopic1","type":"bool","internalType":"bool"},{"name":"checkTopic2","type":"bool","internalType":"bool"},{"name":"checkTopic3","type":"bool","internalType":"bool"},{"name":"checkData","type":"bool","internalType":"bool"},{"name":"emitter","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"expectEmit","inputs":[{"name":"emitter","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"expectEmit","inputs":[{"name":"emitter","type":"address","internalType":"address"},{"name":"count","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"expectEmit","inputs":[{"name":"checkTopic1","type":"bool","internalType":"bool"},{"name":"checkTopic2","type":"bool","internalType":"bool"},{"name":"checkTopic3","type":"bool","internalType":"bool"},{"name":"checkData","type":"bool","internalType":"bool"},{"name":"emitter","type":"address","internalType":"address"},{"name":"count","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"expectEmitAnonymous","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"expectEmitAnonymous","inputs":[{"name":"emitter","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"expectEmitAnonymous","inputs":[{"name":"checkTopic0","type":"bool","internalType":"bool"},{"name":"checkTopic1","type":"bool","internalType":"bool"},{"name":"checkTopic2","type":"bool","internalType":"bool"},{"name":"checkTopic3","type":"bool","internalType":"bool"},{"name":"checkData","type":"bool","internalType":"bool"},{"name":"emitter","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"expectEmitAnonymous","inputs":[{"name":"checkTopic0","type":"bool","internalType":"bool"},{"name":"checkTopic1","type":"bool","internalType":"bool"},{"name":"checkTopic2","type":"bool","internalType":"bool"},{"name":"checkTopic3","type":"bool","internalType":"bool"},{"name":"checkData","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"expectPartialRevert","inputs":[{"name":"revertData","type":"bytes4","internalType":"bytes4"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"expectPartialRevert","inputs":[{"name":"revertData","type":"bytes4","internalType":"bytes4"},{"name":"reverter","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"expectRevert","inputs":[{"name":"reverter","type":"address","internalType":"address"},{"name":"count","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"expectRevert","inputs":[{"name":"revertData","type":"bytes4","internalType":"bytes4"},{"name":"reverter","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"expectRevert","inputs":[{"name":"revertData","type":"bytes","internalType":"bytes"},{"name":"count","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"expectRevert","inputs":[{"name":"count","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"expectRevert","inputs":[{"name":"revertData","type":"bytes","internalType":"bytes"},{"name":"reverter","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"expectRevert","inputs":[{"name":"revertData","type":"bytes4","internalType":"bytes4"},{"name":"reverter","type":"address","internalType":"address"},{"name":"count","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"expectRevert","inputs":[{"name":"revertData","type":"bytes4","internalType":"bytes4"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"expectRevert","inputs":[{"name":"revertData","type":"bytes","internalType":"bytes"},{"name":"reverter","type":"address","internalType":"address"},{"name":"count","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"expectRevert","inputs":[{"name":"reverter","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"expectRevert","inputs":[{"name":"revertData","type":"bytes4","internalType":"bytes4"},{"name":"count","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"expectRevert","inputs":[{"name":"revertData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"expectRevert","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"expectSafeMemory","inputs":[{"name":"min","type":"uint64","internalType":"uint64"},{"name":"max","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"expectSafeMemoryCall","inputs":[{"name":"min","type":"uint64","internalType":"uint64"},{"name":"max","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"fee","inputs":[{"name":"newBasefee","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"ffi","inputs":[{"name":"commandInput","type":"string[]","internalType":"string[]"}],"outputs":[{"name":"result","type":"bytes","internalType":"bytes"}],"stateMutability":"nonpayable"},{"type":"function","name":"foundryVersionAtLeast","inputs":[{"name":"version","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"foundryVersionCmp","inputs":[{"name":"version","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"int256","internalType":"int256"}],"stateMutability":"view"},{"type":"function","name":"fsMetadata","inputs":[{"name":"path","type":"string","internalType":"string"}],"outputs":[{"name":"metadata","type":"tuple","internalType":"struct VmSafe.FsMetadata","components":[{"name":"isDir","type":"bool","internalType":"bool"},{"name":"isSymlink","type":"bool","internalType":"bool"},{"name":"length","type":"uint256","internalType":"uint256"},{"name":"readOnly","type":"bool","internalType":"bool"},{"name":"modified","type":"uint256","internalType":"uint256"},{"name":"accessed","type":"uint256","internalType":"uint256"},{"name":"created","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"getArtifactPathByCode","inputs":[{"name":"code","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"path","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"getArtifactPathByDeployedCode","inputs":[{"name":"deployedCode","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"path","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"getBlobBaseFee","inputs":[],"outputs":[{"name":"blobBaseFee","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getBlobhashes","inputs":[],"outputs":[{"name":"hashes","type":"bytes32[]","internalType":"bytes32[]"}],"stateMutability":"view"},{"type":"function","name":"getBlockNumber","inputs":[],"outputs":[{"name":"height","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getBlockTimestamp","inputs":[],"outputs":[{"name":"timestamp","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getBroadcast","inputs":[{"name":"contractName","type":"string","internalType":"string"},{"name":"chainId","type":"uint64","internalType":"uint64"},{"name":"txType","type":"uint8","internalType":"enum VmSafe.BroadcastTxType"}],"outputs":[{"name":"","type":"tuple","internalType":"struct VmSafe.BroadcastTxSummary","components":[{"name":"txHash","type":"bytes32","internalType":"bytes32"},{"name":"txType","type":"uint8","internalType":"enum VmSafe.BroadcastTxType"},{"name":"contractAddress","type":"address","internalType":"address"},{"name":"blockNumber","type":"uint64","internalType":"uint64"},{"name":"success","type":"bool","internalType":"bool"}]}],"stateMutability":"view"},{"type":"function","name":"getBroadcasts","inputs":[{"name":"contractName","type":"string","internalType":"string"},{"name":"chainId","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"","type":"tuple[]","internalType":"struct VmSafe.BroadcastTxSummary[]","components":[{"name":"txHash","type":"bytes32","internalType":"bytes32"},{"name":"txType","type":"uint8","internalType":"enum VmSafe.BroadcastTxType"},{"name":"contractAddress","type":"address","internalType":"address"},{"name":"blockNumber","type":"uint64","internalType":"uint64"},{"name":"success","type":"bool","internalType":"bool"}]}],"stateMutability":"view"},{"type":"function","name":"getBroadcasts","inputs":[{"name":"contractName","type":"string","internalType":"string"},{"name":"chainId","type":"uint64","internalType":"uint64"},{"name":"txType","type":"uint8","internalType":"enum VmSafe.BroadcastTxType"}],"outputs":[{"name":"","type":"tuple[]","internalType":"struct VmSafe.BroadcastTxSummary[]","components":[{"name":"txHash","type":"bytes32","internalType":"bytes32"},{"name":"txType","type":"uint8","internalType":"enum VmSafe.BroadcastTxType"},{"name":"contractAddress","type":"address","internalType":"address"},{"name":"blockNumber","type":"uint64","internalType":"uint64"},{"name":"success","type":"bool","internalType":"bool"}]}],"stateMutability":"view"},{"type":"function","name":"getChain","inputs":[{"name":"chainAlias","type":"string","internalType":"string"}],"outputs":[{"name":"chain","type":"tuple","internalType":"struct VmSafe.Chain","components":[{"name":"name","type":"string","internalType":"string"},{"name":"chainId","type":"uint256","internalType":"uint256"},{"name":"chainAlias","type":"string","internalType":"string"},{"name":"rpcUrl","type":"string","internalType":"string"}]}],"stateMutability":"view"},{"type":"function","name":"getChain","inputs":[{"name":"chainId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"chain","type":"tuple","internalType":"struct VmSafe.Chain","components":[{"name":"name","type":"string","internalType":"string"},{"name":"chainId","type":"uint256","internalType":"uint256"},{"name":"chainAlias","type":"string","internalType":"string"},{"name":"rpcUrl","type":"string","internalType":"string"}]}],"stateMutability":"view"},{"type":"function","name":"getCode","inputs":[{"name":"artifactPath","type":"string","internalType":"string"}],"outputs":[{"name":"creationBytecode","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"getDeployedCode","inputs":[{"name":"artifactPath","type":"string","internalType":"string"}],"outputs":[{"name":"runtimeBytecode","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"getDeployment","inputs":[{"name":"contractName","type":"string","internalType":"string"},{"name":"chainId","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"deployedAddress","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getDeployment","inputs":[{"name":"contractName","type":"string","internalType":"string"}],"outputs":[{"name":"deployedAddress","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getDeployments","inputs":[{"name":"contractName","type":"string","internalType":"string"},{"name":"chainId","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"deployedAddresses","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getFoundryVersion","inputs":[],"outputs":[{"name":"version","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"getLabel","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"currentLabel","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"getMappingKeyAndParentOf","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"elementSlot","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"found","type":"bool","internalType":"bool"},{"name":"key","type":"bytes32","internalType":"bytes32"},{"name":"parent","type":"bytes32","internalType":"bytes32"}],"stateMutability":"nonpayable"},{"type":"function","name":"getMappingLength","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"mappingSlot","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"length","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"getMappingSlotAt","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"mappingSlot","type":"bytes32","internalType":"bytes32"},{"name":"idx","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"value","type":"bytes32","internalType":"bytes32"}],"stateMutability":"nonpayable"},{"type":"function","name":"getNonce","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"nonce","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"getNonce","inputs":[{"name":"wallet","type":"tuple","internalType":"struct VmSafe.Wallet","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"publicKeyX","type":"uint256","internalType":"uint256"},{"name":"publicKeyY","type":"uint256","internalType":"uint256"},{"name":"privateKey","type":"uint256","internalType":"uint256"}]}],"outputs":[{"name":"nonce","type":"uint64","internalType":"uint64"}],"stateMutability":"nonpayable"},{"type":"function","name":"getRecordedLogs","inputs":[],"outputs":[{"name":"logs","type":"tuple[]","internalType":"struct VmSafe.Log[]","components":[{"name":"topics","type":"bytes32[]","internalType":"bytes32[]"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"emitter","type":"address","internalType":"address"}]}],"stateMutability":"nonpayable"},{"type":"function","name":"getStateDiff","inputs":[],"outputs":[{"name":"diff","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"getStateDiffJson","inputs":[],"outputs":[{"name":"diff","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"getWallets","inputs":[],"outputs":[{"name":"wallets","type":"address[]","internalType":"address[]"}],"stateMutability":"nonpayable"},{"type":"function","name":"indexOf","inputs":[{"name":"input","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"interceptInitcode","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isContext","inputs":[{"name":"context","type":"uint8","internalType":"enum VmSafe.ForgeContext"}],"outputs":[{"name":"result","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isDir","inputs":[{"name":"path","type":"string","internalType":"string"}],"outputs":[{"name":"result","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isFile","inputs":[{"name":"path","type":"string","internalType":"string"}],"outputs":[{"name":"result","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isPersistent","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"persistent","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"keyExists","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"keyExistsJson","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"keyExistsToml","inputs":[{"name":"toml","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"label","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"newLabel","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"lastCallGas","inputs":[],"outputs":[{"name":"gas","type":"tuple","internalType":"struct VmSafe.Gas","components":[{"name":"gasLimit","type":"uint64","internalType":"uint64"},{"name":"gasTotalUsed","type":"uint64","internalType":"uint64"},{"name":"gasMemoryUsed","type":"uint64","internalType":"uint64"},{"name":"gasRefunded","type":"int64","internalType":"int64"},{"name":"gasRemaining","type":"uint64","internalType":"uint64"}]}],"stateMutability":"view"},{"type":"function","name":"load","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"slot","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"data","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"loadAllocs","inputs":[{"name":"pathToAllocsJson","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"makePersistent","inputs":[{"name":"accounts","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"makePersistent","inputs":[{"name":"account0","type":"address","internalType":"address"},{"name":"account1","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"makePersistent","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"makePersistent","inputs":[{"name":"account0","type":"address","internalType":"address"},{"name":"account1","type":"address","internalType":"address"},{"name":"account2","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"mockCall","inputs":[{"name":"callee","type":"address","internalType":"address"},{"name":"data","type":"bytes4","internalType":"bytes4"},{"name":"returnData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"mockCall","inputs":[{"name":"callee","type":"address","internalType":"address"},{"name":"msgValue","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"returnData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"mockCall","inputs":[{"name":"callee","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"returnData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"mockCall","inputs":[{"name":"callee","type":"address","internalType":"address"},{"name":"msgValue","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes4","internalType":"bytes4"},{"name":"returnData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"mockCallRevert","inputs":[{"name":"callee","type":"address","internalType":"address"},{"name":"data","type":"bytes4","internalType":"bytes4"},{"name":"revertData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"mockCallRevert","inputs":[{"name":"callee","type":"address","internalType":"address"},{"name":"msgValue","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes4","internalType":"bytes4"},{"name":"revertData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"mockCallRevert","inputs":[{"name":"callee","type":"address","internalType":"address"},{"name":"msgValue","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"revertData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"mockCallRevert","inputs":[{"name":"callee","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"revertData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"mockCalls","inputs":[{"name":"callee","type":"address","internalType":"address"},{"name":"msgValue","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"returnData","type":"bytes[]","internalType":"bytes[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"mockCalls","inputs":[{"name":"callee","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"returnData","type":"bytes[]","internalType":"bytes[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"mockFunction","inputs":[{"name":"callee","type":"address","internalType":"address"},{"name":"target","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"noAccessList","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"parseAddress","inputs":[{"name":"stringifiedValue","type":"string","internalType":"string"}],"outputs":[{"name":"parsedValue","type":"address","internalType":"address"}],"stateMutability":"pure"},{"type":"function","name":"parseBool","inputs":[{"name":"stringifiedValue","type":"string","internalType":"string"}],"outputs":[{"name":"parsedValue","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"parseBytes","inputs":[{"name":"stringifiedValue","type":"string","internalType":"string"}],"outputs":[{"name":"parsedValue","type":"bytes","internalType":"bytes"}],"stateMutability":"pure"},{"type":"function","name":"parseBytes32","inputs":[{"name":"stringifiedValue","type":"string","internalType":"string"}],"outputs":[{"name":"parsedValue","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"type":"function","name":"parseInt","inputs":[{"name":"stringifiedValue","type":"string","internalType":"string"}],"outputs":[{"name":"parsedValue","type":"int256","internalType":"int256"}],"stateMutability":"pure"},{"type":"function","name":"parseJson","inputs":[{"name":"json","type":"string","internalType":"string"}],"outputs":[{"name":"abiEncodedData","type":"bytes","internalType":"bytes"}],"stateMutability":"pure"},{"type":"function","name":"parseJson","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"abiEncodedData","type":"bytes","internalType":"bytes"}],"stateMutability":"pure"},{"type":"function","name":"parseJsonAddress","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"pure"},{"type":"function","name":"parseJsonAddressArray","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"pure"},{"type":"function","name":"parseJsonBool","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"parseJsonBoolArray","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bool[]","internalType":"bool[]"}],"stateMutability":"pure"},{"type":"function","name":"parseJsonBytes","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"pure"},{"type":"function","name":"parseJsonBytes32","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"type":"function","name":"parseJsonBytes32Array","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bytes32[]","internalType":"bytes32[]"}],"stateMutability":"pure"},{"type":"function","name":"parseJsonBytesArray","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bytes[]","internalType":"bytes[]"}],"stateMutability":"pure"},{"type":"function","name":"parseJsonInt","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"int256","internalType":"int256"}],"stateMutability":"pure"},{"type":"function","name":"parseJsonIntArray","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"int256[]","internalType":"int256[]"}],"stateMutability":"pure"},{"type":"function","name":"parseJsonKeys","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"keys","type":"string[]","internalType":"string[]"}],"stateMutability":"pure"},{"type":"function","name":"parseJsonString","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"parseJsonStringArray","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"string[]","internalType":"string[]"}],"stateMutability":"pure"},{"type":"function","name":"parseJsonType","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"typeDescription","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"pure"},{"type":"function","name":"parseJsonType","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"},{"name":"typeDescription","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"pure"},{"type":"function","name":"parseJsonTypeArray","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"},{"name":"typeDescription","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"pure"},{"type":"function","name":"parseJsonUint","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"parseJsonUintArray","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"pure"},{"type":"function","name":"parseToml","inputs":[{"name":"toml","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"abiEncodedData","type":"bytes","internalType":"bytes"}],"stateMutability":"pure"},{"type":"function","name":"parseToml","inputs":[{"name":"toml","type":"string","internalType":"string"}],"outputs":[{"name":"abiEncodedData","type":"bytes","internalType":"bytes"}],"stateMutability":"pure"},{"type":"function","name":"parseTomlAddress","inputs":[{"name":"toml","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"pure"},{"type":"function","name":"parseTomlAddressArray","inputs":[{"name":"toml","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"pure"},{"type":"function","name":"parseTomlBool","inputs":[{"name":"toml","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"parseTomlBoolArray","inputs":[{"name":"toml","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bool[]","internalType":"bool[]"}],"stateMutability":"pure"},{"type":"function","name":"parseTomlBytes","inputs":[{"name":"toml","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"pure"},{"type":"function","name":"parseTomlBytes32","inputs":[{"name":"toml","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"type":"function","name":"parseTomlBytes32Array","inputs":[{"name":"toml","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bytes32[]","internalType":"bytes32[]"}],"stateMutability":"pure"},{"type":"function","name":"parseTomlBytesArray","inputs":[{"name":"toml","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bytes[]","internalType":"bytes[]"}],"stateMutability":"pure"},{"type":"function","name":"parseTomlInt","inputs":[{"name":"toml","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"int256","internalType":"int256"}],"stateMutability":"pure"},{"type":"function","name":"parseTomlIntArray","inputs":[{"name":"toml","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"int256[]","internalType":"int256[]"}],"stateMutability":"pure"},{"type":"function","name":"parseTomlKeys","inputs":[{"name":"toml","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"keys","type":"string[]","internalType":"string[]"}],"stateMutability":"pure"},{"type":"function","name":"parseTomlString","inputs":[{"name":"toml","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"parseTomlStringArray","inputs":[{"name":"toml","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"string[]","internalType":"string[]"}],"stateMutability":"pure"},{"type":"function","name":"parseTomlType","inputs":[{"name":"toml","type":"string","internalType":"string"},{"name":"typeDescription","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"pure"},{"type":"function","name":"parseTomlType","inputs":[{"name":"toml","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"},{"name":"typeDescription","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"pure"},{"type":"function","name":"parseTomlTypeArray","inputs":[{"name":"toml","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"},{"name":"typeDescription","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"pure"},{"type":"function","name":"parseTomlUint","inputs":[{"name":"toml","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"parseTomlUintArray","inputs":[{"name":"toml","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"pure"},{"type":"function","name":"parseUint","inputs":[{"name":"stringifiedValue","type":"string","internalType":"string"}],"outputs":[{"name":"parsedValue","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"pauseGasMetering","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"pauseTracing","inputs":[],"outputs":[],"stateMutability":"view"},{"type":"function","name":"prank","inputs":[{"name":"msgSender","type":"address","internalType":"address"},{"name":"txOrigin","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"prank","inputs":[{"name":"msgSender","type":"address","internalType":"address"},{"name":"txOrigin","type":"address","internalType":"address"},{"name":"delegateCall","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"prank","inputs":[{"name":"msgSender","type":"address","internalType":"address"},{"name":"delegateCall","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"prank","inputs":[{"name":"msgSender","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"prevrandao","inputs":[{"name":"newPrevrandao","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"prevrandao","inputs":[{"name":"newPrevrandao","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"projectRoot","inputs":[],"outputs":[{"name":"path","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"prompt","inputs":[{"name":"promptText","type":"string","internalType":"string"}],"outputs":[{"name":"input","type":"string","internalType":"string"}],"stateMutability":"nonpayable"},{"type":"function","name":"promptAddress","inputs":[{"name":"promptText","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"promptSecret","inputs":[{"name":"promptText","type":"string","internalType":"string"}],"outputs":[{"name":"input","type":"string","internalType":"string"}],"stateMutability":"nonpayable"},{"type":"function","name":"promptSecretUint","inputs":[{"name":"promptText","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"promptUint","inputs":[{"name":"promptText","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"publicKeyP256","inputs":[{"name":"privateKey","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"publicKeyX","type":"uint256","internalType":"uint256"},{"name":"publicKeyY","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"randomAddress","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"randomBool","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"randomBytes","inputs":[{"name":"len","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"randomBytes4","inputs":[],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"view"},{"type":"function","name":"randomBytes8","inputs":[],"outputs":[{"name":"","type":"bytes8","internalType":"bytes8"}],"stateMutability":"view"},{"type":"function","name":"randomInt","inputs":[],"outputs":[{"name":"","type":"int256","internalType":"int256"}],"stateMutability":"view"},{"type":"function","name":"randomInt","inputs":[{"name":"bits","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"int256","internalType":"int256"}],"stateMutability":"view"},{"type":"function","name":"randomUint","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"randomUint","inputs":[{"name":"bits","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"randomUint","inputs":[{"name":"min","type":"uint256","internalType":"uint256"},{"name":"max","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"readCallers","inputs":[],"outputs":[{"name":"callerMode","type":"uint8","internalType":"enum VmSafe.CallerMode"},{"name":"msgSender","type":"address","internalType":"address"},{"name":"txOrigin","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"readDir","inputs":[{"name":"path","type":"string","internalType":"string"},{"name":"maxDepth","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"entries","type":"tuple[]","internalType":"struct VmSafe.DirEntry[]","components":[{"name":"errorMessage","type":"string","internalType":"string"},{"name":"path","type":"string","internalType":"string"},{"name":"depth","type":"uint64","internalType":"uint64"},{"name":"isDir","type":"bool","internalType":"bool"},{"name":"isSymlink","type":"bool","internalType":"bool"}]}],"stateMutability":"view"},{"type":"function","name":"readDir","inputs":[{"name":"path","type":"string","internalType":"string"},{"name":"maxDepth","type":"uint64","internalType":"uint64"},{"name":"followLinks","type":"bool","internalType":"bool"}],"outputs":[{"name":"entries","type":"tuple[]","internalType":"struct VmSafe.DirEntry[]","components":[{"name":"errorMessage","type":"string","internalType":"string"},{"name":"path","type":"string","internalType":"string"},{"name":"depth","type":"uint64","internalType":"uint64"},{"name":"isDir","type":"bool","internalType":"bool"},{"name":"isSymlink","type":"bool","internalType":"bool"}]}],"stateMutability":"view"},{"type":"function","name":"readDir","inputs":[{"name":"path","type":"string","internalType":"string"}],"outputs":[{"name":"entries","type":"tuple[]","internalType":"struct VmSafe.DirEntry[]","components":[{"name":"errorMessage","type":"string","internalType":"string"},{"name":"path","type":"string","internalType":"string"},{"name":"depth","type":"uint64","internalType":"uint64"},{"name":"isDir","type":"bool","internalType":"bool"},{"name":"isSymlink","type":"bool","internalType":"bool"}]}],"stateMutability":"view"},{"type":"function","name":"readFile","inputs":[{"name":"path","type":"string","internalType":"string"}],"outputs":[{"name":"data","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"readFileBinary","inputs":[{"name":"path","type":"string","internalType":"string"}],"outputs":[{"name":"data","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"readLine","inputs":[{"name":"path","type":"string","internalType":"string"}],"outputs":[{"name":"line","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"readLink","inputs":[{"name":"linkPath","type":"string","internalType":"string"}],"outputs":[{"name":"targetPath","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"record","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"recordLogs","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"rememberKey","inputs":[{"name":"privateKey","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"keyAddr","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"rememberKeys","inputs":[{"name":"mnemonic","type":"string","internalType":"string"},{"name":"derivationPath","type":"string","internalType":"string"},{"name":"count","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"keyAddrs","type":"address[]","internalType":"address[]"}],"stateMutability":"nonpayable"},{"type":"function","name":"rememberKeys","inputs":[{"name":"mnemonic","type":"string","internalType":"string"},{"name":"derivationPath","type":"string","internalType":"string"},{"name":"language","type":"string","internalType":"string"},{"name":"count","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"keyAddrs","type":"address[]","internalType":"address[]"}],"stateMutability":"nonpayable"},{"type":"function","name":"removeDir","inputs":[{"name":"path","type":"string","internalType":"string"},{"name":"recursive","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeFile","inputs":[{"name":"path","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"replace","inputs":[{"name":"input","type":"string","internalType":"string"},{"name":"from","type":"string","internalType":"string"},{"name":"to","type":"string","internalType":"string"}],"outputs":[{"name":"output","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"resetGasMetering","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"resetNonce","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"resumeGasMetering","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"resumeTracing","inputs":[],"outputs":[],"stateMutability":"view"},{"type":"function","name":"revertTo","inputs":[{"name":"snapshotId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"success","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"revertToAndDelete","inputs":[{"name":"snapshotId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"success","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"revertToState","inputs":[{"name":"snapshotId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"success","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"revertToStateAndDelete","inputs":[{"name":"snapshotId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"success","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"revokePersistent","inputs":[{"name":"accounts","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokePersistent","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"roll","inputs":[{"name":"newHeight","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"rollFork","inputs":[{"name":"txHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"rollFork","inputs":[{"name":"forkId","type":"uint256","internalType":"uint256"},{"name":"blockNumber","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"rollFork","inputs":[{"name":"blockNumber","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"rollFork","inputs":[{"name":"forkId","type":"uint256","internalType":"uint256"},{"name":"txHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"rpc","inputs":[{"name":"urlOrAlias","type":"string","internalType":"string"},{"name":"method","type":"string","internalType":"string"},{"name":"params","type":"string","internalType":"string"}],"outputs":[{"name":"data","type":"bytes","internalType":"bytes"}],"stateMutability":"nonpayable"},{"type":"function","name":"rpc","inputs":[{"name":"method","type":"string","internalType":"string"},{"name":"params","type":"string","internalType":"string"}],"outputs":[{"name":"data","type":"bytes","internalType":"bytes"}],"stateMutability":"nonpayable"},{"type":"function","name":"rpcUrl","inputs":[{"name":"rpcAlias","type":"string","internalType":"string"}],"outputs":[{"name":"json","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"rpcUrlStructs","inputs":[],"outputs":[{"name":"urls","type":"tuple[]","internalType":"struct VmSafe.Rpc[]","components":[{"name":"key","type":"string","internalType":"string"},{"name":"url","type":"string","internalType":"string"}]}],"stateMutability":"view"},{"type":"function","name":"rpcUrls","inputs":[],"outputs":[{"name":"urls","type":"string[2][]","internalType":"string[2][]"}],"stateMutability":"view"},{"type":"function","name":"selectFork","inputs":[{"name":"forkId","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"serializeAddress","inputs":[{"name":"objectKey","type":"string","internalType":"string"},{"name":"valueKey","type":"string","internalType":"string"},{"name":"values","type":"address[]","internalType":"address[]"}],"outputs":[{"name":"json","type":"string","internalType":"string"}],"stateMutability":"nonpayable"},{"type":"function","name":"serializeAddress","inputs":[{"name":"objectKey","type":"string","internalType":"string"},{"name":"valueKey","type":"string","internalType":"string"},{"name":"value","type":"address","internalType":"address"}],"outputs":[{"name":"json","type":"string","internalType":"string"}],"stateMutability":"nonpayable"},{"type":"function","name":"serializeBool","inputs":[{"name":"objectKey","type":"string","internalType":"string"},{"name":"valueKey","type":"string","internalType":"string"},{"name":"values","type":"bool[]","internalType":"bool[]"}],"outputs":[{"name":"json","type":"string","internalType":"string"}],"stateMutability":"nonpayable"},{"type":"function","name":"serializeBool","inputs":[{"name":"objectKey","type":"string","internalType":"string"},{"name":"valueKey","type":"string","internalType":"string"},{"name":"value","type":"bool","internalType":"bool"}],"outputs":[{"name":"json","type":"string","internalType":"string"}],"stateMutability":"nonpayable"},{"type":"function","name":"serializeBytes","inputs":[{"name":"objectKey","type":"string","internalType":"string"},{"name":"valueKey","type":"string","internalType":"string"},{"name":"values","type":"bytes[]","internalType":"bytes[]"}],"outputs":[{"name":"json","type":"string","internalType":"string"}],"stateMutability":"nonpayable"},{"type":"function","name":"serializeBytes","inputs":[{"name":"objectKey","type":"string","internalType":"string"},{"name":"valueKey","type":"string","internalType":"string"},{"name":"value","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"json","type":"string","internalType":"string"}],"stateMutability":"nonpayable"},{"type":"function","name":"serializeBytes32","inputs":[{"name":"objectKey","type":"string","internalType":"string"},{"name":"valueKey","type":"string","internalType":"string"},{"name":"values","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[{"name":"json","type":"string","internalType":"string"}],"stateMutability":"nonpayable"},{"type":"function","name":"serializeBytes32","inputs":[{"name":"objectKey","type":"string","internalType":"string"},{"name":"valueKey","type":"string","internalType":"string"},{"name":"value","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"json","type":"string","internalType":"string"}],"stateMutability":"nonpayable"},{"type":"function","name":"serializeInt","inputs":[{"name":"objectKey","type":"string","internalType":"string"},{"name":"valueKey","type":"string","internalType":"string"},{"name":"value","type":"int256","internalType":"int256"}],"outputs":[{"name":"json","type":"string","internalType":"string"}],"stateMutability":"nonpayable"},{"type":"function","name":"serializeInt","inputs":[{"name":"objectKey","type":"string","internalType":"string"},{"name":"valueKey","type":"string","internalType":"string"},{"name":"values","type":"int256[]","internalType":"int256[]"}],"outputs":[{"name":"json","type":"string","internalType":"string"}],"stateMutability":"nonpayable"},{"type":"function","name":"serializeJson","inputs":[{"name":"objectKey","type":"string","internalType":"string"},{"name":"value","type":"string","internalType":"string"}],"outputs":[{"name":"json","type":"string","internalType":"string"}],"stateMutability":"nonpayable"},{"type":"function","name":"serializeJsonType","inputs":[{"name":"typeDescription","type":"string","internalType":"string"},{"name":"value","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"json","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"serializeJsonType","inputs":[{"name":"objectKey","type":"string","internalType":"string"},{"name":"valueKey","type":"string","internalType":"string"},{"name":"typeDescription","type":"string","internalType":"string"},{"name":"value","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"json","type":"string","internalType":"string"}],"stateMutability":"nonpayable"},{"type":"function","name":"serializeString","inputs":[{"name":"objectKey","type":"string","internalType":"string"},{"name":"valueKey","type":"string","internalType":"string"},{"name":"values","type":"string[]","internalType":"string[]"}],"outputs":[{"name":"json","type":"string","internalType":"string"}],"stateMutability":"nonpayable"},{"type":"function","name":"serializeString","inputs":[{"name":"objectKey","type":"string","internalType":"string"},{"name":"valueKey","type":"string","internalType":"string"},{"name":"value","type":"string","internalType":"string"}],"outputs":[{"name":"json","type":"string","internalType":"string"}],"stateMutability":"nonpayable"},{"type":"function","name":"serializeUint","inputs":[{"name":"objectKey","type":"string","internalType":"string"},{"name":"valueKey","type":"string","internalType":"string"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"json","type":"string","internalType":"string"}],"stateMutability":"nonpayable"},{"type":"function","name":"serializeUint","inputs":[{"name":"objectKey","type":"string","internalType":"string"},{"name":"valueKey","type":"string","internalType":"string"},{"name":"values","type":"uint256[]","internalType":"uint256[]"}],"outputs":[{"name":"json","type":"string","internalType":"string"}],"stateMutability":"nonpayable"},{"type":"function","name":"serializeUintToHex","inputs":[{"name":"objectKey","type":"string","internalType":"string"},{"name":"valueKey","type":"string","internalType":"string"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"json","type":"string","internalType":"string"}],"stateMutability":"nonpayable"},{"type":"function","name":"setArbitraryStorage","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"overwrite","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setArbitraryStorage","inputs":[{"name":"target","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setBlockhash","inputs":[{"name":"blockNumber","type":"uint256","internalType":"uint256"},{"name":"blockHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setEnv","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"value","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setNonce","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"newNonce","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setNonceUnsafe","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"newNonce","type":"uint64","internalType":"uint64"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"shuffle","inputs":[{"name":"array","type":"uint256[]","internalType":"uint256[]"}],"outputs":[{"name":"","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"nonpayable"},{"type":"function","name":"sign","inputs":[{"name":"digest","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"v","type":"uint8","internalType":"uint8"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"type":"function","name":"sign","inputs":[{"name":"signer","type":"address","internalType":"address"},{"name":"digest","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"v","type":"uint8","internalType":"uint8"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"type":"function","name":"sign","inputs":[{"name":"wallet","type":"tuple","internalType":"struct VmSafe.Wallet","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"publicKeyX","type":"uint256","internalType":"uint256"},{"name":"publicKeyY","type":"uint256","internalType":"uint256"},{"name":"privateKey","type":"uint256","internalType":"uint256"}]},{"name":"digest","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"v","type":"uint8","internalType":"uint8"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"}],"stateMutability":"nonpayable"},{"type":"function","name":"sign","inputs":[{"name":"privateKey","type":"uint256","internalType":"uint256"},{"name":"digest","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"v","type":"uint8","internalType":"uint8"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"type":"function","name":"signAndAttachDelegation","inputs":[{"name":"implementation","type":"address","internalType":"address"},{"name":"privateKey","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"signedDelegation","type":"tuple","internalType":"struct VmSafe.SignedDelegation","components":[{"name":"v","type":"uint8","internalType":"uint8"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"},{"name":"nonce","type":"uint64","internalType":"uint64"},{"name":"implementation","type":"address","internalType":"address"}]}],"stateMutability":"nonpayable"},{"type":"function","name":"signAndAttachDelegation","inputs":[{"name":"implementation","type":"address","internalType":"address"},{"name":"privateKey","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"signedDelegation","type":"tuple","internalType":"struct VmSafe.SignedDelegation","components":[{"name":"v","type":"uint8","internalType":"uint8"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"},{"name":"nonce","type":"uint64","internalType":"uint64"},{"name":"implementation","type":"address","internalType":"address"}]}],"stateMutability":"nonpayable"},{"type":"function","name":"signCompact","inputs":[{"name":"wallet","type":"tuple","internalType":"struct VmSafe.Wallet","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"publicKeyX","type":"uint256","internalType":"uint256"},{"name":"publicKeyY","type":"uint256","internalType":"uint256"},{"name":"privateKey","type":"uint256","internalType":"uint256"}]},{"name":"digest","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"vs","type":"bytes32","internalType":"bytes32"}],"stateMutability":"nonpayable"},{"type":"function","name":"signCompact","inputs":[{"name":"signer","type":"address","internalType":"address"},{"name":"digest","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"vs","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"type":"function","name":"signCompact","inputs":[{"name":"digest","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"vs","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"type":"function","name":"signCompact","inputs":[{"name":"privateKey","type":"uint256","internalType":"uint256"},{"name":"digest","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"vs","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"type":"function","name":"signDelegation","inputs":[{"name":"implementation","type":"address","internalType":"address"},{"name":"privateKey","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"signedDelegation","type":"tuple","internalType":"struct VmSafe.SignedDelegation","components":[{"name":"v","type":"uint8","internalType":"uint8"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"},{"name":"nonce","type":"uint64","internalType":"uint64"},{"name":"implementation","type":"address","internalType":"address"}]}],"stateMutability":"nonpayable"},{"type":"function","name":"signDelegation","inputs":[{"name":"implementation","type":"address","internalType":"address"},{"name":"privateKey","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"signedDelegation","type":"tuple","internalType":"struct VmSafe.SignedDelegation","components":[{"name":"v","type":"uint8","internalType":"uint8"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"},{"name":"nonce","type":"uint64","internalType":"uint64"},{"name":"implementation","type":"address","internalType":"address"}]}],"stateMutability":"nonpayable"},{"type":"function","name":"signP256","inputs":[{"name":"privateKey","type":"uint256","internalType":"uint256"},{"name":"digest","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"type":"function","name":"skip","inputs":[{"name":"skipTest","type":"bool","internalType":"bool"},{"name":"reason","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"skip","inputs":[{"name":"skipTest","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"sleep","inputs":[{"name":"duration","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"snapshot","inputs":[],"outputs":[{"name":"snapshotId","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"snapshotGasLastCall","inputs":[{"name":"group","type":"string","internalType":"string"},{"name":"name","type":"string","internalType":"string"}],"outputs":[{"name":"gasUsed","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"snapshotGasLastCall","inputs":[{"name":"name","type":"string","internalType":"string"}],"outputs":[{"name":"gasUsed","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"snapshotState","inputs":[],"outputs":[{"name":"snapshotId","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"snapshotValue","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"snapshotValue","inputs":[{"name":"group","type":"string","internalType":"string"},{"name":"name","type":"string","internalType":"string"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"sort","inputs":[{"name":"array","type":"uint256[]","internalType":"uint256[]"}],"outputs":[{"name":"","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"nonpayable"},{"type":"function","name":"split","inputs":[{"name":"input","type":"string","internalType":"string"},{"name":"delimiter","type":"string","internalType":"string"}],"outputs":[{"name":"outputs","type":"string[]","internalType":"string[]"}],"stateMutability":"pure"},{"type":"function","name":"startBroadcast","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"startBroadcast","inputs":[{"name":"signer","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"startBroadcast","inputs":[{"name":"privateKey","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"startDebugTraceRecording","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"startMappingRecording","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"startPrank","inputs":[{"name":"msgSender","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"startPrank","inputs":[{"name":"msgSender","type":"address","internalType":"address"},{"name":"delegateCall","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"startPrank","inputs":[{"name":"msgSender","type":"address","internalType":"address"},{"name":"txOrigin","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"startPrank","inputs":[{"name":"msgSender","type":"address","internalType":"address"},{"name":"txOrigin","type":"address","internalType":"address"},{"name":"delegateCall","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"startSnapshotGas","inputs":[{"name":"name","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"startSnapshotGas","inputs":[{"name":"group","type":"string","internalType":"string"},{"name":"name","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"startStateDiffRecording","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stopAndReturnDebugTraceRecording","inputs":[],"outputs":[{"name":"step","type":"tuple[]","internalType":"struct VmSafe.DebugStep[]","components":[{"name":"stack","type":"uint256[]","internalType":"uint256[]"},{"name":"memoryInput","type":"bytes","internalType":"bytes"},{"name":"opcode","type":"uint8","internalType":"uint8"},{"name":"depth","type":"uint64","internalType":"uint64"},{"name":"isOutOfGas","type":"bool","internalType":"bool"},{"name":"contractAddr","type":"address","internalType":"address"}]}],"stateMutability":"nonpayable"},{"type":"function","name":"stopAndReturnStateDiff","inputs":[],"outputs":[{"name":"accountAccesses","type":"tuple[]","internalType":"struct VmSafe.AccountAccess[]","components":[{"name":"chainInfo","type":"tuple","internalType":"struct VmSafe.ChainInfo","components":[{"name":"forkId","type":"uint256","internalType":"uint256"},{"name":"chainId","type":"uint256","internalType":"uint256"}]},{"name":"kind","type":"uint8","internalType":"enum VmSafe.AccountAccessKind"},{"name":"account","type":"address","internalType":"address"},{"name":"accessor","type":"address","internalType":"address"},{"name":"initialized","type":"bool","internalType":"bool"},{"name":"oldBalance","type":"uint256","internalType":"uint256"},{"name":"newBalance","type":"uint256","internalType":"uint256"},{"name":"deployedCode","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"reverted","type":"bool","internalType":"bool"},{"name":"storageAccesses","type":"tuple[]","internalType":"struct VmSafe.StorageAccess[]","components":[{"name":"account","type":"address","internalType":"address"},{"name":"slot","type":"bytes32","internalType":"bytes32"},{"name":"isWrite","type":"bool","internalType":"bool"},{"name":"previousValue","type":"bytes32","internalType":"bytes32"},{"name":"newValue","type":"bytes32","internalType":"bytes32"},{"name":"reverted","type":"bool","internalType":"bool"}]},{"name":"depth","type":"uint64","internalType":"uint64"}]}],"stateMutability":"nonpayable"},{"type":"function","name":"stopBroadcast","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stopExpectSafeMemory","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stopMappingRecording","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stopPrank","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stopSnapshotGas","inputs":[{"name":"group","type":"string","internalType":"string"},{"name":"name","type":"string","internalType":"string"}],"outputs":[{"name":"gasUsed","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"stopSnapshotGas","inputs":[{"name":"name","type":"string","internalType":"string"}],"outputs":[{"name":"gasUsed","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"stopSnapshotGas","inputs":[],"outputs":[{"name":"gasUsed","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"store","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"slot","type":"bytes32","internalType":"bytes32"},{"name":"value","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"toBase64","inputs":[{"name":"data","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"toBase64","inputs":[{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"toBase64URL","inputs":[{"name":"data","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"toBase64URL","inputs":[{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"toLowercase","inputs":[{"name":"input","type":"string","internalType":"string"}],"outputs":[{"name":"output","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"toString","inputs":[{"name":"value","type":"address","internalType":"address"}],"outputs":[{"name":"stringifiedValue","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"toString","inputs":[{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"stringifiedValue","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"toString","inputs":[{"name":"value","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"stringifiedValue","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"toString","inputs":[{"name":"value","type":"bool","internalType":"bool"}],"outputs":[{"name":"stringifiedValue","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"toString","inputs":[{"name":"value","type":"int256","internalType":"int256"}],"outputs":[{"name":"stringifiedValue","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"toString","inputs":[{"name":"value","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"stringifiedValue","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"toUppercase","inputs":[{"name":"input","type":"string","internalType":"string"}],"outputs":[{"name":"output","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"transact","inputs":[{"name":"forkId","type":"uint256","internalType":"uint256"},{"name":"txHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transact","inputs":[{"name":"txHash","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"trim","inputs":[{"name":"input","type":"string","internalType":"string"}],"outputs":[{"name":"output","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"tryFfi","inputs":[{"name":"commandInput","type":"string[]","internalType":"string[]"}],"outputs":[{"name":"result","type":"tuple","internalType":"struct VmSafe.FfiResult","components":[{"name":"exitCode","type":"int32","internalType":"int32"},{"name":"stdout","type":"bytes","internalType":"bytes"},{"name":"stderr","type":"bytes","internalType":"bytes"}]}],"stateMutability":"nonpayable"},{"type":"function","name":"txGasPrice","inputs":[{"name":"newGasPrice","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unixTime","inputs":[],"outputs":[{"name":"milliseconds","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"warmSlot","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"slot","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"warp","inputs":[{"name":"newTimestamp","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"writeFile","inputs":[{"name":"path","type":"string","internalType":"string"},{"name":"data","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"writeFileBinary","inputs":[{"name":"path","type":"string","internalType":"string"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"writeJson","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"path","type":"string","internalType":"string"},{"name":"valueKey","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"writeJson","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"path","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"writeLine","inputs":[{"name":"path","type":"string","internalType":"string"},{"name":"data","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"writeToml","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"path","type":"string","internalType":"string"},{"name":"valueKey","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"writeToml","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"path","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"accessList((address,bytes32[])[])":"743e4cb7","accesses(address)":"65bc9481","activeFork()":"2f103f22","addr(uint256)":"ffa18649","allowCheatcodes(address)":"ea060291","assertApproxEqAbs(int256,int256,uint256)":"240f839d","assertApproxEqAbs(int256,int256,uint256,string)":"8289e621","assertApproxEqAbs(uint256,uint256,uint256)":"16d207c6","assertApproxEqAbs(uint256,uint256,uint256,string)":"f710b062","assertApproxEqAbsDecimal(int256,int256,uint256,uint256)":"3d5bc8bc","assertApproxEqAbsDecimal(int256,int256,uint256,uint256,string)":"6a5066d4","assertApproxEqAbsDecimal(uint256,uint256,uint256,uint256)":"045c55ce","assertApproxEqAbsDecimal(uint256,uint256,uint256,uint256,string)":"60429eb2","assertApproxEqRel(int256,int256,uint256)":"fea2d14f","assertApproxEqRel(int256,int256,uint256,string)":"ef277d72","assertApproxEqRel(uint256,uint256,uint256)":"8cf25ef4","assertApproxEqRel(uint256,uint256,uint256,string)":"1ecb7d33","assertApproxEqRelDecimal(int256,int256,uint256,uint256)":"abbf21cc","assertApproxEqRelDecimal(int256,int256,uint256,uint256,string)":"fccc11c4","assertApproxEqRelDecimal(uint256,uint256,uint256,uint256)":"21ed2977","assertApproxEqRelDecimal(uint256,uint256,uint256,uint256,string)":"82d6c8fd","assertEq(address,address)":"515361f6","assertEq(address,address,string)":"2f2769d1","assertEq(address[],address[])":"3868ac34","assertEq(address[],address[],string)":"3e9173c5","assertEq(bool,bool)":"f7fe3477","assertEq(bool,bool,string)":"4db19e7e","assertEq(bool[],bool[])":"707df785","assertEq(bool[],bool[],string)":"e48a8f8d","assertEq(bytes,bytes)":"97624631","assertEq(bytes,bytes,string)":"e24fed00","assertEq(bytes32,bytes32)":"7c84c69b","assertEq(bytes32,bytes32,string)":"c1fa1ed0","assertEq(bytes32[],bytes32[])":"0cc9ee84","assertEq(bytes32[],bytes32[],string)":"e03e9177","assertEq(bytes[],bytes[])":"e5fb9b4a","assertEq(bytes[],bytes[],string)":"f413f0b6","assertEq(int256,int256)":"fe74f05b","assertEq(int256,int256,string)":"714a2f13","assertEq(int256[],int256[])":"711043ac","assertEq(int256[],int256[],string)":"191f1b30","assertEq(string,string)":"f320d963","assertEq(string,string,string)":"36f656d8","assertEq(string[],string[])":"cf1c049c","assertEq(string[],string[],string)":"eff6b27d","assertEq(uint256,uint256)":"98296c54","assertEq(uint256,uint256,string)":"88b44c85","assertEq(uint256[],uint256[])":"975d5a12","assertEq(uint256[],uint256[],string)":"5d18c73a","assertEqDecimal(int256,int256,uint256)":"48016c04","assertEqDecimal(int256,int256,uint256,string)":"7e77b0c5","assertEqDecimal(uint256,uint256,uint256)":"27af7d9c","assertEqDecimal(uint256,uint256,uint256,string)":"d0cbbdef","assertFalse(bool)":"a5982885","assertFalse(bool,string)":"7ba04809","assertGe(int256,int256)":"0a30b771","assertGe(int256,int256,string)":"a84328dd","assertGe(uint256,uint256)":"a8d4d1d9","assertGe(uint256,uint256,string)":"e25242c0","assertGeDecimal(int256,int256,uint256)":"dc28c0f1","assertGeDecimal(int256,int256,uint256,string)":"5df93c9b","assertGeDecimal(uint256,uint256,uint256)":"3d1fe08a","assertGeDecimal(uint256,uint256,uint256,string)":"8bff9133","assertGt(int256,int256)":"5a362d45","assertGt(int256,int256,string)":"f8d33b9b","assertGt(uint256,uint256)":"db07fcd2","assertGt(uint256,uint256,string)":"d9a3c4d2","assertGtDecimal(int256,int256,uint256)":"78611f0e","assertGtDecimal(int256,int256,uint256,string)":"04a5c7ab","assertGtDecimal(uint256,uint256,uint256)":"eccd2437","assertGtDecimal(uint256,uint256,uint256,string)":"64949a8d","assertLe(int256,int256)":"95fd154e","assertLe(int256,int256,string)":"4dfe692c","assertLe(uint256,uint256)":"8466f415","assertLe(uint256,uint256,string)":"d17d4b0d","assertLeDecimal(int256,int256,uint256)":"11d1364a","assertLeDecimal(int256,int256,uint256,string)":"aa5cf788","assertLeDecimal(uint256,uint256,uint256)":"c304aab7","assertLeDecimal(uint256,uint256,uint256,string)":"7fefbbe0","assertLt(int256,int256)":"3e914080","assertLt(int256,int256,string)":"9ff531e3","assertLt(uint256,uint256)":"b12fc005","assertLt(uint256,uint256,string)":"65d5c135","assertLtDecimal(int256,int256,uint256)":"dbe8d88b","assertLtDecimal(int256,int256,uint256,string)":"40f0b4e0","assertLtDecimal(uint256,uint256,uint256)":"2077337e","assertLtDecimal(uint256,uint256,uint256,string)":"a972d037","assertNotEq(address,address)":"b12e1694","assertNotEq(address,address,string)":"8775a591","assertNotEq(address[],address[])":"46d0b252","assertNotEq(address[],address[],string)":"72c7e0b5","assertNotEq(bool,bool)":"236e4d66","assertNotEq(bool,bool,string)":"1091a261","assertNotEq(bool[],bool[])":"286fafea","assertNotEq(bool[],bool[],string)":"62c6f9fb","assertNotEq(bytes,bytes)":"3cf78e28","assertNotEq(bytes,bytes,string)":"9507540e","assertNotEq(bytes32,bytes32)":"898e83fc","assertNotEq(bytes32,bytes32,string)":"b2332f51","assertNotEq(bytes32[],bytes32[])":"0603ea68","assertNotEq(bytes32[],bytes32[],string)":"b873634c","assertNotEq(bytes[],bytes[])":"edecd035","assertNotEq(bytes[],bytes[],string)":"1dcd1f68","assertNotEq(int256,int256)":"f4c004e3","assertNotEq(int256,int256,string)":"4724c5b9","assertNotEq(int256[],int256[])":"0b72f4ef","assertNotEq(int256[],int256[],string)":"d3977322","assertNotEq(string,string)":"6a8237b3","assertNotEq(string,string,string)":"78bdcea7","assertNotEq(string[],string[])":"bdfacbe8","assertNotEq(string[],string[],string)":"b67187f3","assertNotEq(uint256,uint256)":"b7909320","assertNotEq(uint256,uint256,string)":"98f9bdbd","assertNotEq(uint256[],uint256[])":"56f29cba","assertNotEq(uint256[],uint256[],string)":"9a7fbd8f","assertNotEqDecimal(int256,int256,uint256)":"14e75680","assertNotEqDecimal(int256,int256,uint256,string)":"33949f0b","assertNotEqDecimal(uint256,uint256,uint256)":"669efca7","assertNotEqDecimal(uint256,uint256,uint256,string)":"f5a55558","assertTrue(bool)":"0c9fd581","assertTrue(bool,string)":"a34edc03","assume(bool)":"4c63e562","assumeNoRevert((address,bool,bytes))":"d8591eeb","assumeNoRevert((address,bool,bytes)[])":"8a4592cc","assumeNoRevert()":"285b366a","attachBlob(bytes)":"10cb385c","attachDelegation((uint8,bytes32,bytes32,uint64,address))":"14ae3519","blobBaseFee(uint256)":"6d315d7e","blobhashes(bytes32[])":"129de7eb","breakpoint(string)":"f0259e92","breakpoint(string,bool)":"f7d39a8d","broadcast()":"afc98040","broadcast(address)":"e6962cdb","broadcast(uint256)":"f67a965b","broadcastRawTransaction(bytes)":"8c0c72e0","chainId(uint256)":"4049ddd2","clearMockedCalls()":"3fdf4e15","cloneAccount(address,address)":"533d61c9","closeFile(string)":"48c3241f","coinbase(address)":"ff483c54","computeCreate2Address(bytes32,bytes32)":"890c283b","computeCreate2Address(bytes32,bytes32,address)":"d323826a","computeCreateAddress(address,uint256)":"74637a7a","contains(string,string)":"3fb18aec","cool(address)":"40ff9f21","coolSlot(address,bytes32)":"8c78e654","copyFile(string,string)":"a54a87d8","copyStorage(address,address)":"203dac0d","createDir(string,bool)":"168b64d3","createFork(string)":"31ba3498","createFork(string,bytes32)":"7ca29682","createFork(string,uint256)":"6ba3ba2b","createSelectFork(string)":"98680034","createSelectFork(string,bytes32)":"84d52b7a","createSelectFork(string,uint256)":"71ee464d","createWallet(string)":"7404f1d2","createWallet(uint256)":"7a675bb6","createWallet(uint256,string)":"ed7c5462","deal(address,uint256)":"c88a5e6d","deleteSnapshot(uint256)":"a6368557","deleteSnapshots()":"421ae469","deleteStateSnapshot(uint256)":"08d6b37a","deleteStateSnapshots()":"e0933c74","deployCode(string)":"9a8325a0","deployCode(string,bytes)":"29ce9dde","deployCode(string,bytes,bytes32)":"016155bf","deployCode(string,bytes,uint256)":"ff5d64e4","deployCode(string,bytes,uint256,bytes32)":"3aa773ea","deployCode(string,bytes32)":"17ab1d79","deployCode(string,uint256)":"0af6a701","deployCode(string,uint256,bytes32)":"002cb687","deriveKey(string,string,uint32)":"6bcb2c1b","deriveKey(string,string,uint32,string)":"29233b1f","deriveKey(string,uint32)":"6229498b","deriveKey(string,uint32,string)":"32c8176d","difficulty(uint256)":"46cc92d9","dumpState(string)":"709ecd3f","ensNamehash(string)":"8c374c65","envAddress(string)":"350d56bf","envAddress(string,string)":"ad31b9fa","envBool(string)":"7ed1ec7d","envBool(string,string)":"aaaddeaf","envBytes(string)":"4d7baf06","envBytes(string,string)":"ddc2651b","envBytes32(string)":"97949042","envBytes32(string,string)":"5af231c1","envExists(string)":"ce8365f9","envInt(string)":"892a0c61","envInt(string,string)":"42181150","envOr(string,address)":"561fe540","envOr(string,bool)":"4777f3cf","envOr(string,bytes)":"b3e47705","envOr(string,bytes32)":"b4a85892","envOr(string,int256)":"bbcb713e","envOr(string,string)":"d145736c","envOr(string,string,address[])":"c74e9deb","envOr(string,string,bool[])":"eb85e83b","envOr(string,string,bytes32[])":"2281f367","envOr(string,string,bytes[])":"64bc3e64","envOr(string,string,int256[])":"4700d74b","envOr(string,string,string[])":"859216bc","envOr(string,string,uint256[])":"74318528","envOr(string,uint256)":"5e97348f","envString(string)":"f877cb19","envString(string,string)":"14b02bc9","envUint(string)":"c1978d1f","envUint(string,string)":"f3dec099","etch(address,bytes)":"b4d6c782","eth_getLogs(uint256,uint256,address,bytes32[])":"35e1349b","exists(string)":"261a323e","expectCall(address,bytes)":"bd6af434","expectCall(address,bytes,uint64)":"c1adbbff","expectCall(address,uint256,bytes)":"f30c7ba3","expectCall(address,uint256,bytes,uint64)":"a2b1a1ae","expectCall(address,uint256,uint64,bytes)":"23361207","expectCall(address,uint256,uint64,bytes,uint64)":"65b7b7cc","expectCallMinGas(address,uint256,uint64,bytes)":"08e4e116","expectCallMinGas(address,uint256,uint64,bytes,uint64)":"e13a1834","expectCreate(bytes,address)":"73cdce36","expectCreate2(bytes,address)":"ea54a472","expectEmit()":"440ed10d","expectEmit(address)":"86b9620d","expectEmit(address,uint64)":"b43aece3","expectEmit(bool,bool,bool,bool)":"491cc7c2","expectEmit(bool,bool,bool,bool,address)":"81bad6f3","expectEmit(bool,bool,bool,bool,address,uint64)":"c339d02c","expectEmit(bool,bool,bool,bool,uint64)":"5e1d1c33","expectEmit(uint64)":"4c74a335","expectEmitAnonymous()":"2e5f270c","expectEmitAnonymous(address)":"6fc68705","expectEmitAnonymous(bool,bool,bool,bool,bool)":"c948db5e","expectEmitAnonymous(bool,bool,bool,bool,bool,address)":"71c95899","expectPartialRevert(bytes4)":"11fb5b9c","expectPartialRevert(bytes4,address)":"51aa008a","expectRevert()":"f4844814","expectRevert(address)":"d814f38a","expectRevert(address,uint64)":"1ff5f952","expectRevert(bytes)":"f28dceb3","expectRevert(bytes,address)":"61ebcf12","expectRevert(bytes,address,uint64)":"d345fb1f","expectRevert(bytes,uint64)":"4994c273","expectRevert(bytes4)":"c31eb0e0","expectRevert(bytes4,address)":"260bc5de","expectRevert(bytes4,address,uint64)":"b0762d73","expectRevert(bytes4,uint64)":"e45ca72d","expectRevert(uint64)":"4ee38244","expectSafeMemory(uint64,uint64)":"6d016688","expectSafeMemoryCall(uint64,uint64)":"05838bf4","fee(uint256)":"39b37ab0","ffi(string[])":"89160467","foundryVersionAtLeast(string)":"6248be1f","foundryVersionCmp(string)":"ca7b0a09","fsMetadata(string)":"af368a08","getArtifactPathByCode(bytes)":"eb74848c","getArtifactPathByDeployedCode(bytes)":"6d853ba5","getBlobBaseFee()":"1f6d6ef7","getBlobhashes()":"f56ff18b","getBlockNumber()":"42cbb15c","getBlockTimestamp()":"796b89b9","getBroadcast(string,uint64,uint8)":"3dc90cb3","getBroadcasts(string,uint64)":"f2fa4a26","getBroadcasts(string,uint64,uint8)":"f7afe919","getChain(string)":"4cc1c2bb","getChain(uint256)":"b6791ad4","getCode(string)":"8d1cc925","getDeployedCode(string)":"3ebf73b4","getDeployment(string)":"a8091d97","getDeployment(string,uint64)":"0debd5d6","getDeployments(string,uint64)":"74e133dd","getFoundryVersion()":"ea991bb5","getLabel(address)":"28a249b0","getMappingKeyAndParentOf(address,bytes32)":"876e24e6","getMappingLength(address,bytes32)":"2f2fd63f","getMappingSlotAt(address,bytes32,uint256)":"ebc73ab4","getNonce((address,uint256,uint256,uint256))":"a5748aad","getNonce(address)":"2d0335ab","getRecordedLogs()":"191553a4","getStateDiff()":"80df01cc","getStateDiffJson()":"f54fe009","getWallets()":"db7a4605","indexOf(string,string)":"8a0807b7","interceptInitcode()":"838653c7","isContext(uint8)":"64af255d","isDir(string)":"7d15d019","isFile(string)":"e0eb04d4","isPersistent(address)":"d92d8efd","keyExists(string,string)":"528a683c","keyExistsJson(string,string)":"db4235f6","keyExistsToml(string,string)":"600903ad","label(address,string)":"c657c718","lastCallGas()":"2b589b28","load(address,bytes32)":"667f9d70","loadAllocs(string)":"b3a056d7","makePersistent(address)":"57e22dde","makePersistent(address,address)":"4074e0a8","makePersistent(address,address,address)":"efb77a75","makePersistent(address[])":"1d9e269e","mockCall(address,bytes,bytes)":"b96213e4","mockCall(address,bytes4,bytes)":"08e0c537","mockCall(address,uint256,bytes,bytes)":"81409b91","mockCall(address,uint256,bytes4,bytes)":"e7b36a3d","mockCallRevert(address,bytes,bytes)":"dbaad147","mockCallRevert(address,bytes4,bytes)":"2dfba5df","mockCallRevert(address,uint256,bytes,bytes)":"d23cd037","mockCallRevert(address,uint256,bytes4,bytes)":"596c8f04","mockCalls(address,bytes,bytes[])":"5c5c3de9","mockCalls(address,uint256,bytes,bytes[])":"08bcbae1","mockFunction(address,address,bytes)":"adf84d21","noAccessList()":"238ad778","parseAddress(string)":"c6ce059d","parseBool(string)":"974ef924","parseBytes(string)":"8f5d232d","parseBytes32(string)":"087e6e81","parseInt(string)":"42346c5e","parseJson(string)":"6a82600a","parseJson(string,string)":"85940ef1","parseJsonAddress(string,string)":"1e19e657","parseJsonAddressArray(string,string)":"2fce7883","parseJsonBool(string,string)":"9f86dc91","parseJsonBoolArray(string,string)":"91f3b94f","parseJsonBytes(string,string)":"fd921be8","parseJsonBytes32(string,string)":"1777e59d","parseJsonBytes32Array(string,string)":"91c75bc3","parseJsonBytesArray(string,string)":"6631aa99","parseJsonInt(string,string)":"7b048ccd","parseJsonIntArray(string,string)":"9983c28a","parseJsonKeys(string,string)":"213e4198","parseJsonString(string,string)":"49c4fac8","parseJsonStringArray(string,string)":"498fdcf4","parseJsonType(string,string)":"a9da313b","parseJsonType(string,string,string)":"e3f5ae33","parseJsonTypeArray(string,string,string)":"0175d535","parseJsonUint(string,string)":"addde2b6","parseJsonUintArray(string,string)":"522074ab","parseToml(string)":"592151f0","parseToml(string,string)":"37736e08","parseTomlAddress(string,string)":"65e7c844","parseTomlAddressArray(string,string)":"65c428e7","parseTomlBool(string,string)":"d30dced6","parseTomlBoolArray(string,string)":"127cfe9a","parseTomlBytes(string,string)":"d77bfdb9","parseTomlBytes32(string,string)":"8e214810","parseTomlBytes32Array(string,string)":"3e716f81","parseTomlBytesArray(string,string)":"b197c247","parseTomlInt(string,string)":"c1350739","parseTomlIntArray(string,string)":"d3522ae6","parseTomlKeys(string,string)":"812a44b2","parseTomlString(string,string)":"8bb8dd43","parseTomlStringArray(string,string)":"9f629281","parseTomlType(string,string)":"47fa5e11","parseTomlType(string,string,string)":"f9fa5cdb","parseTomlTypeArray(string,string,string)":"49be3743","parseTomlUint(string,string)":"cc7b0487","parseTomlUintArray(string,string)":"b5df27c8","parseUint(string)":"fa91454d","pauseGasMetering()":"d1a5b36f","pauseTracing()":"c94d1f90","prank(address)":"ca669fa7","prank(address,address)":"47e50cce","prank(address,address,bool)":"7d73d042","prank(address,bool)":"a7f8bf5c","prevrandao(bytes32)":"3b925549","prevrandao(uint256)":"9cb1c0d4","projectRoot()":"d930a0e6","prompt(string)":"47eaf474","promptAddress(string)":"62ee05f4","promptSecret(string)":"1e279d41","promptSecretUint(string)":"69ca02b7","promptUint(string)":"652fd489","publicKeyP256(uint256)":"c453949e","randomAddress()":"d5bee9f5","randomBool()":"cdc126bd","randomBytes(uint256)":"6c5d32a9","randomBytes4()":"9b7cd579","randomBytes8()":"0497b0a5","randomInt()":"111f1202","randomInt(uint256)":"12845966","randomUint()":"25124730","randomUint(uint256)":"cf81e69c","randomUint(uint256,uint256)":"d61b051b","readCallers()":"4ad0bac9","readDir(string)":"c4bc59e0","readDir(string,uint64)":"1497876c","readDir(string,uint64,bool)":"8102d70d","readFile(string)":"60f9bb11","readFileBinary(string)":"16ed7bc4","readLine(string)":"70f55728","readLink(string)":"9f5684a2","record()":"266cf109","recordLogs()":"41af2f52","rememberKey(uint256)":"22100064","rememberKeys(string,string,string,uint32)":"f8d58eaf","rememberKeys(string,string,uint32)":"97cb9189","removeDir(string,bool)":"45c62011","removeFile(string)":"f1afe04d","replace(string,string,string)":"e00ad03e","resetGasMetering()":"be367dd3","resetNonce(address)":"1c72346d","resumeGasMetering()":"2bcd50e0","resumeTracing()":"72a09ccb","revertTo(uint256)":"44d7f0a4","revertToAndDelete(uint256)":"03e0aca9","revertToState(uint256)":"c2527405","revertToStateAndDelete(uint256)":"3a1985dc","revokePersistent(address)":"997a0222","revokePersistent(address[])":"3ce969e6","roll(uint256)":"1f7b4f30","rollFork(bytes32)":"0f29772b","rollFork(uint256)":"d9bbf3a1","rollFork(uint256,bytes32)":"f2830f7b","rollFork(uint256,uint256)":"d74c83a4","rpc(string,string)":"1206c8a8","rpc(string,string,string)":"0199a220","rpcUrl(string)":"975a6ce9","rpcUrlStructs()":"9d2ad72a","rpcUrls()":"a85a8418","selectFork(uint256)":"9ebf6827","serializeAddress(string,string,address)":"972c6062","serializeAddress(string,string,address[])":"1e356e1a","serializeBool(string,string,bool)":"ac22e971","serializeBool(string,string,bool[])":"92925aa1","serializeBytes(string,string,bytes)":"f21d52c7","serializeBytes(string,string,bytes[])":"9884b232","serializeBytes32(string,string,bytes32)":"2d812b44","serializeBytes32(string,string,bytes32[])":"201e43e2","serializeInt(string,string,int256)":"3f33db60","serializeInt(string,string,int256[])":"7676e127","serializeJson(string,string)":"9b3358b0","serializeJsonType(string,bytes)":"6d4f96a6","serializeJsonType(string,string,string,bytes)":"6f93bccb","serializeString(string,string,string)":"88da6d35","serializeString(string,string,string[])":"561cd6f3","serializeUint(string,string,uint256)":"129e9002","serializeUint(string,string,uint256[])":"fee9a469","serializeUintToHex(string,string,uint256)":"ae5a2ae8","setArbitraryStorage(address)":"e1631837","setArbitraryStorage(address,bool)":"d3ec2a0b","setBlockhash(uint256,bytes32)":"5314b54a","setEnv(string,string)":"3d5923ee","setNonce(address,uint64)":"f8e18b57","setNonceUnsafe(address,uint64)":"9b67b21c","shuffle(uint256[])":"54f1469c","sign((address,uint256,uint256,uint256),bytes32)":"b25c5a25","sign(address,bytes32)":"8c1aa205","sign(bytes32)":"799cd333","sign(uint256,bytes32)":"e341eaa4","signAndAttachDelegation(address,uint256)":"c7fa7288","signAndAttachDelegation(address,uint256,uint64)":"cde3e5be","signCompact((address,uint256,uint256,uint256),bytes32)":"3d0e292f","signCompact(address,bytes32)":"8e2f97bf","signCompact(bytes32)":"a282dc4b","signCompact(uint256,bytes32)":"cc2a781f","signDelegation(address,uint256)":"5b593c7b","signDelegation(address,uint256,uint64)":"ceba2ec3","signP256(uint256,bytes32)":"83211b40","skip(bool)":"dd82d13e","skip(bool,string)":"c42a80a7","sleep(uint256)":"fa9d8713","snapshot()":"9711715a","snapshotGasLastCall(string)":"dd9fca12","snapshotGasLastCall(string,string)":"200c6772","snapshotState()":"9cd23835","snapshotValue(string,string,uint256)":"6d2b27d8","snapshotValue(string,uint256)":"51db805a","sort(uint256[])":"9ec8b026","split(string,string)":"8bb75533","startBroadcast()":"7fb5297f","startBroadcast(address)":"7fec2a8d","startBroadcast(uint256)":"ce817d47","startDebugTraceRecording()":"419c8832","startMappingRecording()":"3e9705c0","startPrank(address)":"06447d56","startPrank(address,address)":"45b56078","startPrank(address,address,bool)":"4eb859b5","startPrank(address,bool)":"1cc0b435","startSnapshotGas(string)":"3cad9d7b","startSnapshotGas(string,string)":"6cd0cc53","startStateDiffRecording()":"cf22e3c9","stopAndReturnDebugTraceRecording()":"ced398a2","stopAndReturnStateDiff()":"aa5cf90e","stopBroadcast()":"76eadd36","stopExpectSafeMemory()":"0956441b","stopMappingRecording()":"0d4aae9b","stopPrank()":"90c5013b","stopSnapshotGas()":"f6402eda","stopSnapshotGas(string)":"773b2805","stopSnapshotGas(string,string)":"0c9db707","store(address,bytes32,bytes32)":"70ca10bb","toBase64(bytes)":"a5cbfe65","toBase64(string)":"3f8be2c8","toBase64URL(bytes)":"c8bd0e4a","toBase64URL(string)":"ae3165b3","toLowercase(string)":"50bb0884","toString(address)":"56ca623e","toString(bool)":"71dce7da","toString(bytes)":"71aad10d","toString(bytes32)":"b11a19e8","toString(int256)":"a322c40e","toString(uint256)":"6900a3ae","toUppercase(string)":"074ae3d7","transact(bytes32)":"be646da1","transact(uint256,bytes32)":"4d8abc4b","trim(string)":"b2dad155","tryFfi(string[])":"f45c1ce7","txGasPrice(uint256)":"48f50c0f","unixTime()":"625387dc","warmSlot(address,bytes32)":"b23184cf","warp(uint256)":"e5d6bf02","writeFile(string,string)":"897e0a97","writeFileBinary(string,bytes)":"1f21fc80","writeJson(string,string)":"e23cd19f","writeJson(string,string,string)":"35d6ad46","writeLine(string,string)":"619d897f","writeToml(string,string)":"c0865ba7","writeToml(string,string,string)":"51ac6a33"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes32[]\",\"name\":\"storageKeys\",\"type\":\"bytes32[]\"}],\"internalType\":\"struct VmSafe.AccessListItem[]\",\"name\":\"access\",\"type\":\"tuple[]\"}],\"name\":\"accessList\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"accesses\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"readSlots\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"writeSlots\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"activeFork\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"forkId\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"name\":\"addr\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"keyAddr\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"allowCheatcodes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxDelta\",\"type\":\"uint256\"}],\"name\":\"assertApproxEqAbs\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"maxDelta\",\"type\":\"uint256\"}],\"name\":\"assertApproxEqAbs\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"maxDelta\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertApproxEqAbs\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxDelta\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertApproxEqAbs\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxDelta\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"assertApproxEqAbsDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"maxDelta\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"assertApproxEqAbsDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxDelta\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertApproxEqAbsDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"maxDelta\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertApproxEqAbsDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPercentDelta\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertApproxEqRel\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPercentDelta\",\"type\":\"uint256\"}],\"name\":\"assertApproxEqRel\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"maxPercentDelta\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertApproxEqRel\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"maxPercentDelta\",\"type\":\"uint256\"}],\"name\":\"assertApproxEqRel\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPercentDelta\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"assertApproxEqRelDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPercentDelta\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertApproxEqRelDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"maxPercentDelta\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"assertApproxEqRelDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"maxPercentDelta\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertApproxEqRelDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"left\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"right\",\"type\":\"bytes32[]\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256[]\",\"name\":\"left\",\"type\":\"int256[]\"},{\"internalType\":\"int256[]\",\"name\":\"right\",\"type\":\"int256[]\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"left\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"right\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"left\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"right\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"left\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"right\",\"type\":\"address[]\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"left\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"right\",\"type\":\"address[]\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"left\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"right\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"left\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"right\",\"type\":\"address\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"left\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"right\",\"type\":\"uint256[]\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool[]\",\"name\":\"left\",\"type\":\"bool[]\"},{\"internalType\":\"bool[]\",\"name\":\"right\",\"type\":\"bool[]\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256[]\",\"name\":\"left\",\"type\":\"int256[]\"},{\"internalType\":\"int256[]\",\"name\":\"right\",\"type\":\"int256[]\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"left\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"right\",\"type\":\"bytes32\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"left\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"right\",\"type\":\"uint256[]\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"left\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"right\",\"type\":\"bytes\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"left\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"right\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"left\",\"type\":\"string[]\"},{\"internalType\":\"string[]\",\"name\":\"right\",\"type\":\"string[]\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"left\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"right\",\"type\":\"bytes32[]\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"left\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"right\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool[]\",\"name\":\"left\",\"type\":\"bool[]\"},{\"internalType\":\"bool[]\",\"name\":\"right\",\"type\":\"bool[]\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"left\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"right\",\"type\":\"bytes[]\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"left\",\"type\":\"string[]\"},{\"internalType\":\"string[]\",\"name\":\"right\",\"type\":\"string[]\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"left\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"right\",\"type\":\"string\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"left\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"right\",\"type\":\"bytes[]\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"left\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"right\",\"type\":\"bool\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"assertEqDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"assertEqDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertEqDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertEqDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"condition\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertFalse\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"condition\",\"type\":\"bool\"}],\"name\":\"assertFalse\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"}],\"name\":\"assertGe\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertGe\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"}],\"name\":\"assertGe\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertGe\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"assertGeDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertGeDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertGeDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"assertGeDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"}],\"name\":\"assertGt\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertGt\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"}],\"name\":\"assertGt\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertGt\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertGtDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertGtDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"assertGtDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"assertGtDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertLe\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"}],\"name\":\"assertLe\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"}],\"name\":\"assertLe\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertLe\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"assertLeDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertLeDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertLeDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"assertLeDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"}],\"name\":\"assertLt\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertLt\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertLt\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"}],\"name\":\"assertLt\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"assertLtDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertLtDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertLtDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"assertLtDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"left\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"right\",\"type\":\"bytes32[]\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256[]\",\"name\":\"left\",\"type\":\"int256[]\"},{\"internalType\":\"int256[]\",\"name\":\"right\",\"type\":\"int256[]\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"left\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"right\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"left\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"right\",\"type\":\"bytes[]\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"left\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"right\",\"type\":\"bool\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool[]\",\"name\":\"left\",\"type\":\"bool[]\"},{\"internalType\":\"bool[]\",\"name\":\"right\",\"type\":\"bool[]\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"left\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"right\",\"type\":\"bytes\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"left\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"right\",\"type\":\"address[]\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"left\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"right\",\"type\":\"uint256[]\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool[]\",\"name\":\"left\",\"type\":\"bool[]\"},{\"internalType\":\"bool[]\",\"name\":\"right\",\"type\":\"bool[]\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"left\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"right\",\"type\":\"string\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"left\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"right\",\"type\":\"address[]\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"left\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"right\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"left\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"right\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"left\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"right\",\"type\":\"bytes32\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"left\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"right\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"left\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"right\",\"type\":\"uint256[]\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"left\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"right\",\"type\":\"address\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"left\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"right\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"left\",\"type\":\"string[]\"},{\"internalType\":\"string[]\",\"name\":\"right\",\"type\":\"string[]\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"left\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"right\",\"type\":\"bytes32[]\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"left\",\"type\":\"string[]\"},{\"internalType\":\"string[]\",\"name\":\"right\",\"type\":\"string[]\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256[]\",\"name\":\"left\",\"type\":\"int256[]\"},{\"internalType\":\"int256[]\",\"name\":\"right\",\"type\":\"int256[]\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"left\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"right\",\"type\":\"bytes[]\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"assertNotEqDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertNotEqDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"assertNotEqDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertNotEqDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"condition\",\"type\":\"bool\"}],\"name\":\"assertTrue\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"condition\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertTrue\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"condition\",\"type\":\"bool\"}],\"name\":\"assume\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"assumeNoRevert\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"reverter\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"partialMatch\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"revertData\",\"type\":\"bytes\"}],\"internalType\":\"struct VmSafe.PotentialRevert[]\",\"name\":\"potentialReverts\",\"type\":\"tuple[]\"}],\"name\":\"assumeNoRevert\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"reverter\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"partialMatch\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"revertData\",\"type\":\"bytes\"}],\"internalType\":\"struct VmSafe.PotentialRevert\",\"name\":\"potentialRevert\",\"type\":\"tuple\"}],\"name\":\"assumeNoRevert\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"blob\",\"type\":\"bytes\"}],\"name\":\"attachBlob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"internalType\":\"struct VmSafe.SignedDelegation\",\"name\":\"signedDelegation\",\"type\":\"tuple\"}],\"name\":\"attachDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newBlobBaseFee\",\"type\":\"uint256\"}],\"name\":\"blobBaseFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"hashes\",\"type\":\"bytes32[]\"}],\"name\":\"blobhashes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"char\",\"type\":\"string\"}],\"name\":\"breakpoint\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"char\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"value\",\"type\":\"bool\"}],\"name\":\"breakpoint\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"broadcast\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"broadcast\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"name\":\"broadcast\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"broadcastRawTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newChainId\",\"type\":\"uint256\"}],\"name\":\"chainId\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"clearMockedCalls\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"source\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"cloneAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"closeFile\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newCoinbase\",\"type\":\"address\"}],\"name\":\"coinbase\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"initCodeHash\",\"type\":\"bytes32\"}],\"name\":\"computeCreate2Address\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"initCodeHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"deployer\",\"type\":\"address\"}],\"name\":\"computeCreate2Address\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"deployer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"computeCreateAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"subject\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"search\",\"type\":\"string\"}],\"name\":\"contains\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"cool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"coolSlot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"from\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"to\",\"type\":\"string\"}],\"name\":\"copyFile\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"copied\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"copyStorage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"recursive\",\"type\":\"bool\"}],\"name\":\"createDir\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"urlOrAlias\",\"type\":\"string\"}],\"name\":\"createFork\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"forkId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"urlOrAlias\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"}],\"name\":\"createFork\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"forkId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"urlOrAlias\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"}],\"name\":\"createFork\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"forkId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"urlOrAlias\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"}],\"name\":\"createSelectFork\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"forkId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"urlOrAlias\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"}],\"name\":\"createSelectFork\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"forkId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"urlOrAlias\",\"type\":\"string\"}],\"name\":\"createSelectFork\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"forkId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"walletLabel\",\"type\":\"string\"}],\"name\":\"createWallet\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyX\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"internalType\":\"struct VmSafe.Wallet\",\"name\":\"wallet\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"name\":\"createWallet\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyX\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"internalType\":\"struct VmSafe.Wallet\",\"name\":\"wallet\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"walletLabel\",\"type\":\"string\"}],\"name\":\"createWallet\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyX\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"internalType\":\"struct VmSafe.Wallet\",\"name\":\"wallet\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newBalance\",\"type\":\"uint256\"}],\"name\":\"deal\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"snapshotId\",\"type\":\"uint256\"}],\"name\":\"deleteSnapshot\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deleteSnapshots\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"snapshotId\",\"type\":\"uint256\"}],\"name\":\"deleteStateSnapshot\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deleteStateSnapshots\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"artifactPath\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"deployCode\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"deployedAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"artifactPath\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"constructorArgs\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"deployCode\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"deployedAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"artifactPath\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"deployCode\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"deployedAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"artifactPath\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"deployCode\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"deployedAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"artifactPath\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"constructorArgs\",\"type\":\"bytes\"}],\"name\":\"deployCode\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"deployedAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"artifactPath\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"constructorArgs\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"deployCode\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"deployedAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"artifactPath\",\"type\":\"string\"}],\"name\":\"deployCode\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"deployedAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"artifactPath\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"constructorArgs\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"deployCode\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"deployedAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"mnemonic\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"derivationPath\",\"type\":\"string\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"},{\"internalType\":\"string\",\"name\":\"language\",\"type\":\"string\"}],\"name\":\"deriveKey\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"mnemonic\",\"type\":\"string\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"},{\"internalType\":\"string\",\"name\":\"language\",\"type\":\"string\"}],\"name\":\"deriveKey\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"mnemonic\",\"type\":\"string\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"}],\"name\":\"deriveKey\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"mnemonic\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"derivationPath\",\"type\":\"string\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"}],\"name\":\"deriveKey\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newDifficulty\",\"type\":\"uint256\"}],\"name\":\"difficulty\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"pathToStateJson\",\"type\":\"string\"}],\"name\":\"dumpState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"ensNamehash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"envAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"value\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"}],\"name\":\"envAddress\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"value\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"envBool\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"value\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"}],\"name\":\"envBool\",\"outputs\":[{\"internalType\":\"bool[]\",\"name\":\"value\",\"type\":\"bool[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"envBytes\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"value\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"}],\"name\":\"envBytes\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"value\",\"type\":\"bytes[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"}],\"name\":\"envBytes32\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"value\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"envBytes32\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"envExists\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"}],\"name\":\"envInt\",\"outputs\":[{\"internalType\":\"int256[]\",\"name\":\"value\",\"type\":\"int256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"envInt\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"},{\"internalType\":\"bytes32[]\",\"name\":\"defaultValue\",\"type\":\"bytes32[]\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"value\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"},{\"internalType\":\"int256[]\",\"name\":\"defaultValue\",\"type\":\"int256[]\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"int256[]\",\"name\":\"value\",\"type\":\"int256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"defaultValue\",\"type\":\"bool\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"value\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"defaultValue\",\"type\":\"address\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"value\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"defaultValue\",\"type\":\"uint256\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"},{\"internalType\":\"bytes[]\",\"name\":\"defaultValue\",\"type\":\"bytes[]\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"value\",\"type\":\"bytes[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"defaultValue\",\"type\":\"uint256[]\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"value\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"},{\"internalType\":\"string[]\",\"name\":\"defaultValue\",\"type\":\"string[]\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"value\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"defaultValue\",\"type\":\"bytes\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"value\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"defaultValue\",\"type\":\"bytes32\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"int256\",\"name\":\"defaultValue\",\"type\":\"int256\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"defaultValue\",\"type\":\"address[]\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"value\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"defaultValue\",\"type\":\"string\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"},{\"internalType\":\"bool[]\",\"name\":\"defaultValue\",\"type\":\"bool[]\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"bool[]\",\"name\":\"value\",\"type\":\"bool[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"}],\"name\":\"envString\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"value\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"envString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"envUint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"}],\"name\":\"envUint\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"value\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"newRuntimeBytecode\",\"type\":\"bytes\"}],\"name\":\"etch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"fromBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toBlock\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes32[]\",\"name\":\"topics\",\"type\":\"bytes32[]\"}],\"name\":\"eth_getLogs\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"emitter\",\"type\":\"address\"},{\"internalType\":\"bytes32[]\",\"name\":\"topics\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"blockNumber\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"transactionHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"transactionIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"logIndex\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"removed\",\"type\":\"bool\"}],\"internalType\":\"struct VmSafe.EthGetLogs[]\",\"name\":\"logs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"exists\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"gas\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"expectCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"gas\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"count\",\"type\":\"uint64\"}],\"name\":\"expectCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"count\",\"type\":\"uint64\"}],\"name\":\"expectCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callee\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"expectCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callee\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"count\",\"type\":\"uint64\"}],\"name\":\"expectCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"expectCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minGas\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"expectCallMinGas\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minGas\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"count\",\"type\":\"uint64\"}],\"name\":\"expectCallMinGas\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"bytecode\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"deployer\",\"type\":\"address\"}],\"name\":\"expectCreate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"bytecode\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"deployer\",\"type\":\"address\"}],\"name\":\"expectCreate2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"expectEmit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"checkTopic1\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"checkTopic2\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"checkTopic3\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"checkData\",\"type\":\"bool\"}],\"name\":\"expectEmit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"count\",\"type\":\"uint64\"}],\"name\":\"expectEmit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"checkTopic1\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"checkTopic2\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"checkTopic3\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"checkData\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"count\",\"type\":\"uint64\"}],\"name\":\"expectEmit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"checkTopic1\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"checkTopic2\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"checkTopic3\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"checkData\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"emitter\",\"type\":\"address\"}],\"name\":\"expectEmit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"emitter\",\"type\":\"address\"}],\"name\":\"expectEmit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"emitter\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"count\",\"type\":\"uint64\"}],\"name\":\"expectEmit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"checkTopic1\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"checkTopic2\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"checkTopic3\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"checkData\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"emitter\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"count\",\"type\":\"uint64\"}],\"name\":\"expectEmit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"expectEmitAnonymous\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"emitter\",\"type\":\"address\"}],\"name\":\"expectEmitAnonymous\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"checkTopic0\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"checkTopic1\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"checkTopic2\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"checkTopic3\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"checkData\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"emitter\",\"type\":\"address\"}],\"name\":\"expectEmitAnonymous\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"checkTopic0\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"checkTopic1\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"checkTopic2\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"checkTopic3\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"checkData\",\"type\":\"bool\"}],\"name\":\"expectEmitAnonymous\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"revertData\",\"type\":\"bytes4\"}],\"name\":\"expectPartialRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"revertData\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"reverter\",\"type\":\"address\"}],\"name\":\"expectPartialRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"reverter\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"count\",\"type\":\"uint64\"}],\"name\":\"expectRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"revertData\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"reverter\",\"type\":\"address\"}],\"name\":\"expectRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"revertData\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"count\",\"type\":\"uint64\"}],\"name\":\"expectRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"count\",\"type\":\"uint64\"}],\"name\":\"expectRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"revertData\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"reverter\",\"type\":\"address\"}],\"name\":\"expectRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"revertData\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"reverter\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"count\",\"type\":\"uint64\"}],\"name\":\"expectRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"revertData\",\"type\":\"bytes4\"}],\"name\":\"expectRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"revertData\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"reverter\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"count\",\"type\":\"uint64\"}],\"name\":\"expectRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"reverter\",\"type\":\"address\"}],\"name\":\"expectRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"revertData\",\"type\":\"bytes4\"},{\"internalType\":\"uint64\",\"name\":\"count\",\"type\":\"uint64\"}],\"name\":\"expectRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"revertData\",\"type\":\"bytes\"}],\"name\":\"expectRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"expectRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"name\":\"expectSafeMemory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"name\":\"expectSafeMemoryCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newBasefee\",\"type\":\"uint256\"}],\"name\":\"fee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"commandInput\",\"type\":\"string[]\"}],\"name\":\"ffi\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"}],\"name\":\"foundryVersionAtLeast\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"}],\"name\":\"foundryVersionCmp\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"fsMetadata\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isDir\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isSymlink\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"readOnly\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"modified\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accessed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"created\",\"type\":\"uint256\"}],\"internalType\":\"struct VmSafe.FsMetadata\",\"name\":\"metadata\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"code\",\"type\":\"bytes\"}],\"name\":\"getArtifactPathByCode\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"deployedCode\",\"type\":\"bytes\"}],\"name\":\"getArtifactPathByDeployedCode\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBlobBaseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"blobBaseFee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBlobhashes\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"hashes\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBlockTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"enum VmSafe.BroadcastTxType\",\"name\":\"txType\",\"type\":\"uint8\"}],\"name\":\"getBroadcast\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"},{\"internalType\":\"enum VmSafe.BroadcastTxType\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"blockNumber\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"internalType\":\"struct VmSafe.BroadcastTxSummary\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"}],\"name\":\"getBroadcasts\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"},{\"internalType\":\"enum VmSafe.BroadcastTxType\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"blockNumber\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"internalType\":\"struct VmSafe.BroadcastTxSummary[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"enum VmSafe.BroadcastTxType\",\"name\":\"txType\",\"type\":\"uint8\"}],\"name\":\"getBroadcasts\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"},{\"internalType\":\"enum VmSafe.BroadcastTxType\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"blockNumber\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"internalType\":\"struct VmSafe.BroadcastTxSummary[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"chainAlias\",\"type\":\"string\"}],\"name\":\"getChain\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"chainAlias\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"rpcUrl\",\"type\":\"string\"}],\"internalType\":\"struct VmSafe.Chain\",\"name\":\"chain\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"}],\"name\":\"getChain\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"chainAlias\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"rpcUrl\",\"type\":\"string\"}],\"internalType\":\"struct VmSafe.Chain\",\"name\":\"chain\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"artifactPath\",\"type\":\"string\"}],\"name\":\"getCode\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"creationBytecode\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"artifactPath\",\"type\":\"string\"}],\"name\":\"getDeployedCode\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"runtimeBytecode\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"}],\"name\":\"getDeployment\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"deployedAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"getDeployment\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"deployedAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"}],\"name\":\"getDeployments\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"deployedAddresses\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFoundryVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getLabel\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"currentLabel\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"elementSlot\",\"type\":\"bytes32\"}],\"name\":\"getMappingKeyAndParentOf\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"found\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"parent\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"mappingSlot\",\"type\":\"bytes32\"}],\"name\":\"getMappingLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"mappingSlot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"idx\",\"type\":\"uint256\"}],\"name\":\"getMappingSlotAt\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyX\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"internalType\":\"struct VmSafe.Wallet\",\"name\":\"wallet\",\"type\":\"tuple\"}],\"name\":\"getNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRecordedLogs\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"topics\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"emitter\",\"type\":\"address\"}],\"internalType\":\"struct VmSafe.Log[]\",\"name\":\"logs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStateDiff\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"diff\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStateDiffJson\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"diff\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWallets\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"wallets\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"input\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"indexOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"interceptInitcode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum VmSafe.ForgeContext\",\"name\":\"context\",\"type\":\"uint8\"}],\"name\":\"isContext\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"isDir\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"isFile\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isPersistent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"persistent\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"keyExists\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"keyExistsJson\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"keyExistsToml\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"newLabel\",\"type\":\"string\"}],\"name\":\"label\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastCallGas\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"gasTotalUsed\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"gasMemoryUsed\",\"type\":\"uint64\"},{\"internalType\":\"int64\",\"name\":\"gasRefunded\",\"type\":\"int64\"},{\"internalType\":\"uint64\",\"name\":\"gasRemaining\",\"type\":\"uint64\"}],\"internalType\":\"struct VmSafe.Gas\",\"name\":\"gas\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"load\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"data\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"pathToAllocsJson\",\"type\":\"string\"}],\"name\":\"loadAllocs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"}],\"name\":\"makePersistent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account1\",\"type\":\"address\"}],\"name\":\"makePersistent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"makePersistent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account1\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account2\",\"type\":\"address\"}],\"name\":\"makePersistent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callee\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"data\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"mockCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"mockCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callee\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"mockCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"data\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"name\":\"mockCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callee\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"data\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"revertData\",\"type\":\"bytes\"}],\"name\":\"mockCallRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"data\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"revertData\",\"type\":\"bytes\"}],\"name\":\"mockCallRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"revertData\",\"type\":\"bytes\"}],\"name\":\"mockCallRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callee\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"revertData\",\"type\":\"bytes\"}],\"name\":\"mockCallRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes[]\",\"name\":\"returnData\",\"type\":\"bytes[]\"}],\"name\":\"mockCalls\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callee\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes[]\",\"name\":\"returnData\",\"type\":\"bytes[]\"}],\"name\":\"mockCalls\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callee\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"mockFunction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"noAccessList\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"name\":\"parseAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"parsedValue\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"name\":\"parseBool\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"parsedValue\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"name\":\"parseBytes\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"parsedValue\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"name\":\"parseBytes32\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"parsedValue\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"name\":\"parseInt\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"parsedValue\",\"type\":\"int256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"name\":\"parseJson\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"abiEncodedData\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJson\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"abiEncodedData\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonAddressArray\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonBool\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonBoolArray\",\"outputs\":[{\"internalType\":\"bool[]\",\"name\":\"\",\"type\":\"bool[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonBytes\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonBytes32\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonBytes32Array\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonBytesArray\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"\",\"type\":\"bytes[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonInt\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonIntArray\",\"outputs\":[{\"internalType\":\"int256[]\",\"name\":\"\",\"type\":\"int256[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonKeys\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"keys\",\"type\":\"string[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonStringArray\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"typeDescription\",\"type\":\"string\"}],\"name\":\"parseJsonType\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"typeDescription\",\"type\":\"string\"}],\"name\":\"parseJsonType\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"typeDescription\",\"type\":\"string\"}],\"name\":\"parseJsonTypeArray\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonUint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonUintArray\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseToml\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"abiEncodedData\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"}],\"name\":\"parseToml\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"abiEncodedData\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseTomlAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseTomlAddressArray\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseTomlBool\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseTomlBoolArray\",\"outputs\":[{\"internalType\":\"bool[]\",\"name\":\"\",\"type\":\"bool[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseTomlBytes\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseTomlBytes32\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseTomlBytes32Array\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseTomlBytesArray\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"\",\"type\":\"bytes[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseTomlInt\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseTomlIntArray\",\"outputs\":[{\"internalType\":\"int256[]\",\"name\":\"\",\"type\":\"int256[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseTomlKeys\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"keys\",\"type\":\"string[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseTomlString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseTomlStringArray\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"typeDescription\",\"type\":\"string\"}],\"name\":\"parseTomlType\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"typeDescription\",\"type\":\"string\"}],\"name\":\"parseTomlType\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"typeDescription\",\"type\":\"string\"}],\"name\":\"parseTomlTypeArray\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseTomlUint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseTomlUintArray\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"name\":\"parseUint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"parsedValue\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseGasMetering\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseTracing\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"msgSender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"txOrigin\",\"type\":\"address\"}],\"name\":\"prank\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"msgSender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"txOrigin\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"}],\"name\":\"prank\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"msgSender\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"}],\"name\":\"prank\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"msgSender\",\"type\":\"address\"}],\"name\":\"prank\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"newPrevrandao\",\"type\":\"bytes32\"}],\"name\":\"prevrandao\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newPrevrandao\",\"type\":\"uint256\"}],\"name\":\"prevrandao\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"projectRoot\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"promptText\",\"type\":\"string\"}],\"name\":\"prompt\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"input\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"promptText\",\"type\":\"string\"}],\"name\":\"promptAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"promptText\",\"type\":\"string\"}],\"name\":\"promptSecret\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"input\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"promptText\",\"type\":\"string\"}],\"name\":\"promptSecretUint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"promptText\",\"type\":\"string\"}],\"name\":\"promptUint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"name\":\"publicKeyP256\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"publicKeyX\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyY\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"randomAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"randomBool\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"len\",\"type\":\"uint256\"}],\"name\":\"randomBytes\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"randomBytes4\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"randomBytes8\",\"outputs\":[{\"internalType\":\"bytes8\",\"name\":\"\",\"type\":\"bytes8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"randomInt\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"bits\",\"type\":\"uint256\"}],\"name\":\"randomInt\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"randomUint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"bits\",\"type\":\"uint256\"}],\"name\":\"randomUint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"name\":\"randomUint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"readCallers\",\"outputs\":[{\"internalType\":\"enum VmSafe.CallerMode\",\"name\":\"callerMode\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"msgSender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"txOrigin\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"maxDepth\",\"type\":\"uint64\"}],\"name\":\"readDir\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"errorMessage\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"depth\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isDir\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isSymlink\",\"type\":\"bool\"}],\"internalType\":\"struct VmSafe.DirEntry[]\",\"name\":\"entries\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"maxDepth\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"followLinks\",\"type\":\"bool\"}],\"name\":\"readDir\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"errorMessage\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"depth\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isDir\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isSymlink\",\"type\":\"bool\"}],\"internalType\":\"struct VmSafe.DirEntry[]\",\"name\":\"entries\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"readDir\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"errorMessage\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"depth\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isDir\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isSymlink\",\"type\":\"bool\"}],\"internalType\":\"struct VmSafe.DirEntry[]\",\"name\":\"entries\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"readFile\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"data\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"readFileBinary\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"readLine\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"line\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"linkPath\",\"type\":\"string\"}],\"name\":\"readLink\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"targetPath\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"record\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"recordLogs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"name\":\"rememberKey\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"keyAddr\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"mnemonic\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"derivationPath\",\"type\":\"string\"},{\"internalType\":\"uint32\",\"name\":\"count\",\"type\":\"uint32\"}],\"name\":\"rememberKeys\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"keyAddrs\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"mnemonic\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"derivationPath\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"language\",\"type\":\"string\"},{\"internalType\":\"uint32\",\"name\":\"count\",\"type\":\"uint32\"}],\"name\":\"rememberKeys\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"keyAddrs\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"recursive\",\"type\":\"bool\"}],\"name\":\"removeDir\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"removeFile\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"input\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"from\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"to\",\"type\":\"string\"}],\"name\":\"replace\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"output\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resetGasMetering\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"resetNonce\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resumeGasMetering\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resumeTracing\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"snapshotId\",\"type\":\"uint256\"}],\"name\":\"revertTo\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"snapshotId\",\"type\":\"uint256\"}],\"name\":\"revertToAndDelete\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"snapshotId\",\"type\":\"uint256\"}],\"name\":\"revertToState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"snapshotId\",\"type\":\"uint256\"}],\"name\":\"revertToStateAndDelete\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"}],\"name\":\"revokePersistent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokePersistent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newHeight\",\"type\":\"uint256\"}],\"name\":\"roll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"}],\"name\":\"rollFork\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"forkId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"}],\"name\":\"rollFork\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"}],\"name\":\"rollFork\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"forkId\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"}],\"name\":\"rollFork\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"urlOrAlias\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"method\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"params\",\"type\":\"string\"}],\"name\":\"rpc\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"method\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"params\",\"type\":\"string\"}],\"name\":\"rpc\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"rpcAlias\",\"type\":\"string\"}],\"name\":\"rpcUrl\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rpcUrlStructs\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"url\",\"type\":\"string\"}],\"internalType\":\"struct VmSafe.Rpc[]\",\"name\":\"urls\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rpcUrls\",\"outputs\":[{\"internalType\":\"string[2][]\",\"name\":\"urls\",\"type\":\"string[2][]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"forkId\",\"type\":\"uint256\"}],\"name\":\"selectFork\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"values\",\"type\":\"address[]\"}],\"name\":\"serializeAddress\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"value\",\"type\":\"address\"}],\"name\":\"serializeAddress\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"bool[]\",\"name\":\"values\",\"type\":\"bool[]\"}],\"name\":\"serializeBool\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"value\",\"type\":\"bool\"}],\"name\":\"serializeBool\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"bytes[]\",\"name\":\"values\",\"type\":\"bytes[]\"}],\"name\":\"serializeBytes\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"value\",\"type\":\"bytes\"}],\"name\":\"serializeBytes\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"bytes32[]\",\"name\":\"values\",\"type\":\"bytes32[]\"}],\"name\":\"serializeBytes32\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"}],\"name\":\"serializeBytes32\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"serializeInt\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"int256[]\",\"name\":\"values\",\"type\":\"int256[]\"}],\"name\":\"serializeInt\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"}],\"name\":\"serializeJson\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"typeDescription\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"value\",\"type\":\"bytes\"}],\"name\":\"serializeJsonType\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"typeDescription\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"value\",\"type\":\"bytes\"}],\"name\":\"serializeJsonType\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"string[]\",\"name\":\"values\",\"type\":\"string[]\"}],\"name\":\"serializeString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"}],\"name\":\"serializeString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"serializeUint\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"serializeUint\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"serializeUintToHex\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"overwrite\",\"type\":\"bool\"}],\"name\":\"setArbitraryStorage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"setArbitraryStorage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"}],\"name\":\"setBlockhash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"}],\"name\":\"setEnv\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"newNonce\",\"type\":\"uint64\"}],\"name\":\"setNonce\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"newNonce\",\"type\":\"uint64\"}],\"name\":\"setNonceUnsafe\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"array\",\"type\":\"uint256[]\"}],\"name\":\"shuffle\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"}],\"name\":\"sign\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"}],\"name\":\"sign\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyX\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"internalType\":\"struct VmSafe.Wallet\",\"name\":\"wallet\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"}],\"name\":\"sign\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"}],\"name\":\"sign\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"name\":\"signAndAttachDelegation\",\"outputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"internalType\":\"struct VmSafe.SignedDelegation\",\"name\":\"signedDelegation\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"signAndAttachDelegation\",\"outputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"internalType\":\"struct VmSafe.SignedDelegation\",\"name\":\"signedDelegation\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyX\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"internalType\":\"struct VmSafe.Wallet\",\"name\":\"wallet\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"}],\"name\":\"signCompact\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"vs\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"}],\"name\":\"signCompact\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"vs\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"}],\"name\":\"signCompact\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"vs\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"}],\"name\":\"signCompact\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"vs\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"name\":\"signDelegation\",\"outputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"internalType\":\"struct VmSafe.SignedDelegation\",\"name\":\"signedDelegation\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"signDelegation\",\"outputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"internalType\":\"struct VmSafe.SignedDelegation\",\"name\":\"signedDelegation\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"}],\"name\":\"signP256\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"skipTest\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"skip\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"skipTest\",\"type\":\"bool\"}],\"name\":\"skip\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"name\":\"sleep\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"snapshot\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"snapshotId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"group\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"snapshotGasLastCall\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"snapshotGasLastCall\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"snapshotState\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"snapshotId\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"snapshotValue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"group\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"snapshotValue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"array\",\"type\":\"uint256[]\"}],\"name\":\"sort\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"input\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delimiter\",\"type\":\"string\"}],\"name\":\"split\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"outputs\",\"type\":\"string[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startBroadcast\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"startBroadcast\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"name\":\"startBroadcast\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startDebugTraceRecording\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startMappingRecording\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"msgSender\",\"type\":\"address\"}],\"name\":\"startPrank\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"msgSender\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"}],\"name\":\"startPrank\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"msgSender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"txOrigin\",\"type\":\"address\"}],\"name\":\"startPrank\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"msgSender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"txOrigin\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"delegateCall\",\"type\":\"bool\"}],\"name\":\"startPrank\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"startSnapshotGas\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"group\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"startSnapshotGas\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startStateDiffRecording\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stopAndReturnDebugTraceRecording\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256[]\",\"name\":\"stack\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"memoryInput\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"opcode\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"depth\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isOutOfGas\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"contractAddr\",\"type\":\"address\"}],\"internalType\":\"struct VmSafe.DebugStep[]\",\"name\":\"step\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stopAndReturnStateDiff\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"forkId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"}],\"internalType\":\"struct VmSafe.ChainInfo\",\"name\":\"chainInfo\",\"type\":\"tuple\"},{\"internalType\":\"enum VmSafe.AccountAccessKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"accessor\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"oldBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newBalance\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"deployedCode\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"reverted\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"isWrite\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"previousValue\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"newValue\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"reverted\",\"type\":\"bool\"}],\"internalType\":\"struct VmSafe.StorageAccess[]\",\"name\":\"storageAccesses\",\"type\":\"tuple[]\"},{\"internalType\":\"uint64\",\"name\":\"depth\",\"type\":\"uint64\"}],\"internalType\":\"struct VmSafe.AccountAccess[]\",\"name\":\"accountAccesses\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stopBroadcast\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stopExpectSafeMemory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stopMappingRecording\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stopPrank\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"group\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"stopSnapshotGas\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"stopSnapshotGas\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stopSnapshotGas\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"}],\"name\":\"store\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"data\",\"type\":\"string\"}],\"name\":\"toBase64\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"toBase64\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"data\",\"type\":\"string\"}],\"name\":\"toBase64URL\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"toBase64URL\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"input\",\"type\":\"string\"}],\"name\":\"toLowercase\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"output\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"value\",\"type\":\"address\"}],\"name\":\"toString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"toString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"value\",\"type\":\"bytes\"}],\"name\":\"toString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"value\",\"type\":\"bool\"}],\"name\":\"toString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"toString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"}],\"name\":\"toString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"input\",\"type\":\"string\"}],\"name\":\"toUppercase\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"output\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"forkId\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"}],\"name\":\"transact\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"}],\"name\":\"transact\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"input\",\"type\":\"string\"}],\"name\":\"trim\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"output\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"commandInput\",\"type\":\"string[]\"}],\"name\":\"tryFfi\",\"outputs\":[{\"components\":[{\"internalType\":\"int32\",\"name\":\"exitCode\",\"type\":\"int32\"},{\"internalType\":\"bytes\",\"name\":\"stdout\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"stderr\",\"type\":\"bytes\"}],\"internalType\":\"struct VmSafe.FfiResult\",\"name\":\"result\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newGasPrice\",\"type\":\"uint256\"}],\"name\":\"txGasPrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unixTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"milliseconds\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"warmSlot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newTimestamp\",\"type\":\"uint256\"}],\"name\":\"warp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"data\",\"type\":\"string\"}],\"name\":\"writeFile\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"writeFileBinary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"}],\"name\":\"writeJson\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"writeJson\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"data\",\"type\":\"string\"}],\"name\":\"writeLine\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"}],\"name\":\"writeToml\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"writeToml\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"accessList((address,bytes32[])[])\":{\"notice\":\"Utility cheatcode to set an EIP-2930 access list for all subsequent transactions.\"},\"accesses(address)\":{\"notice\":\"Gets all accessed reads and write slot from a `vm.record` session, for a given address.\"},\"activeFork()\":{\"notice\":\"Returns the identifier of the currently active fork. Reverts if no fork is currently active.\"},\"addr(uint256)\":{\"notice\":\"Gets the address for a given private key.\"},\"allowCheatcodes(address)\":{\"notice\":\"In forking mode, explicitly grant the given address cheatcode access.\"},\"assertApproxEqAbs(int256,int256,uint256)\":{\"notice\":\"Compares two `int256` values. Expects difference to be less than or equal to `maxDelta`.\"},\"assertApproxEqAbs(int256,int256,uint256,string)\":{\"notice\":\"Compares two `int256` values. Expects difference to be less than or equal to `maxDelta`. Includes error message into revert string on failure.\"},\"assertApproxEqAbs(uint256,uint256,uint256)\":{\"notice\":\"Compares two `uint256` values. Expects difference to be less than or equal to `maxDelta`.\"},\"assertApproxEqAbs(uint256,uint256,uint256,string)\":{\"notice\":\"Compares two `uint256` values. Expects difference to be less than or equal to `maxDelta`. Includes error message into revert string on failure.\"},\"assertApproxEqAbsDecimal(int256,int256,uint256,uint256)\":{\"notice\":\"Compares two `int256` values. Expects difference to be less than or equal to `maxDelta`. Formats values with decimals in failure message.\"},\"assertApproxEqAbsDecimal(int256,int256,uint256,uint256,string)\":{\"notice\":\"Compares two `int256` values. Expects difference to be less than or equal to `maxDelta`. Formats values with decimals in failure message. Includes error message into revert string on failure.\"},\"assertApproxEqAbsDecimal(uint256,uint256,uint256,uint256)\":{\"notice\":\"Compares two `uint256` values. Expects difference to be less than or equal to `maxDelta`. Formats values with decimals in failure message.\"},\"assertApproxEqAbsDecimal(uint256,uint256,uint256,uint256,string)\":{\"notice\":\"Compares two `uint256` values. Expects difference to be less than or equal to `maxDelta`. Formats values with decimals in failure message. Includes error message into revert string on failure.\"},\"assertApproxEqRel(int256,int256,uint256)\":{\"notice\":\"Compares two `int256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`. `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100%\"},\"assertApproxEqRel(int256,int256,uint256,string)\":{\"notice\":\"Compares two `int256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`. `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100% Includes error message into revert string on failure.\"},\"assertApproxEqRel(uint256,uint256,uint256)\":{\"notice\":\"Compares two `uint256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`. `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100%\"},\"assertApproxEqRel(uint256,uint256,uint256,string)\":{\"notice\":\"Compares two `uint256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`. `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100% Includes error message into revert string on failure.\"},\"assertApproxEqRelDecimal(int256,int256,uint256,uint256)\":{\"notice\":\"Compares two `int256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`. `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100% Formats values with decimals in failure message.\"},\"assertApproxEqRelDecimal(int256,int256,uint256,uint256,string)\":{\"notice\":\"Compares two `int256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`. `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100% Formats values with decimals in failure message. Includes error message into revert string on failure.\"},\"assertApproxEqRelDecimal(uint256,uint256,uint256,uint256)\":{\"notice\":\"Compares two `uint256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`. `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100% Formats values with decimals in failure message.\"},\"assertApproxEqRelDecimal(uint256,uint256,uint256,uint256,string)\":{\"notice\":\"Compares two `uint256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`. `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100% Formats values with decimals in failure message. Includes error message into revert string on failure.\"},\"assertEq(address,address)\":{\"notice\":\"Asserts that two `address` values are equal.\"},\"assertEq(address,address,string)\":{\"notice\":\"Asserts that two `address` values are equal and includes error message into revert string on failure.\"},\"assertEq(address[],address[])\":{\"notice\":\"Asserts that two arrays of `address` values are equal.\"},\"assertEq(address[],address[],string)\":{\"notice\":\"Asserts that two arrays of `address` values are equal and includes error message into revert string on failure.\"},\"assertEq(bool,bool)\":{\"notice\":\"Asserts that two `bool` values are equal.\"},\"assertEq(bool,bool,string)\":{\"notice\":\"Asserts that two `bool` values are equal and includes error message into revert string on failure.\"},\"assertEq(bool[],bool[])\":{\"notice\":\"Asserts that two arrays of `bool` values are equal.\"},\"assertEq(bool[],bool[],string)\":{\"notice\":\"Asserts that two arrays of `bool` values are equal and includes error message into revert string on failure.\"},\"assertEq(bytes,bytes)\":{\"notice\":\"Asserts that two `bytes` values are equal.\"},\"assertEq(bytes,bytes,string)\":{\"notice\":\"Asserts that two `bytes` values are equal and includes error message into revert string on failure.\"},\"assertEq(bytes32,bytes32)\":{\"notice\":\"Asserts that two `bytes32` values are equal.\"},\"assertEq(bytes32,bytes32,string)\":{\"notice\":\"Asserts that two `bytes32` values are equal and includes error message into revert string on failure.\"},\"assertEq(bytes32[],bytes32[])\":{\"notice\":\"Asserts that two arrays of `bytes32` values are equal.\"},\"assertEq(bytes32[],bytes32[],string)\":{\"notice\":\"Asserts that two arrays of `bytes32` values are equal and includes error message into revert string on failure.\"},\"assertEq(bytes[],bytes[])\":{\"notice\":\"Asserts that two arrays of `bytes` values are equal.\"},\"assertEq(bytes[],bytes[],string)\":{\"notice\":\"Asserts that two arrays of `bytes` values are equal and includes error message into revert string on failure.\"},\"assertEq(int256,int256)\":{\"notice\":\"Asserts that two `int256` values are equal.\"},\"assertEq(int256,int256,string)\":{\"notice\":\"Asserts that two `int256` values are equal and includes error message into revert string on failure.\"},\"assertEq(int256[],int256[])\":{\"notice\":\"Asserts that two arrays of `int256` values are equal.\"},\"assertEq(int256[],int256[],string)\":{\"notice\":\"Asserts that two arrays of `int256` values are equal and includes error message into revert string on failure.\"},\"assertEq(string,string)\":{\"notice\":\"Asserts that two `string` values are equal.\"},\"assertEq(string,string,string)\":{\"notice\":\"Asserts that two `string` values are equal and includes error message into revert string on failure.\"},\"assertEq(string[],string[])\":{\"notice\":\"Asserts that two arrays of `string` values are equal.\"},\"assertEq(string[],string[],string)\":{\"notice\":\"Asserts that two arrays of `string` values are equal and includes error message into revert string on failure.\"},\"assertEq(uint256,uint256)\":{\"notice\":\"Asserts that two `uint256` values are equal.\"},\"assertEq(uint256,uint256,string)\":{\"notice\":\"Asserts that two `uint256` values are equal and includes error message into revert string on failure.\"},\"assertEq(uint256[],uint256[])\":{\"notice\":\"Asserts that two arrays of `uint256 values are equal.\"},\"assertEq(uint256[],uint256[],string)\":{\"notice\":\"Asserts that two arrays of `uint256` values are equal and includes error message into revert string on failure.\"},\"assertEqDecimal(int256,int256,uint256)\":{\"notice\":\"Asserts that two `int256` values are equal, formatting them with decimals in failure message.\"},\"assertEqDecimal(int256,int256,uint256,string)\":{\"notice\":\"Asserts that two `int256` values are equal, formatting them with decimals in failure message. Includes error message into revert string on failure.\"},\"assertEqDecimal(uint256,uint256,uint256)\":{\"notice\":\"Asserts that two `uint256` values are equal, formatting them with decimals in failure message.\"},\"assertEqDecimal(uint256,uint256,uint256,string)\":{\"notice\":\"Asserts that two `uint256` values are equal, formatting them with decimals in failure message. Includes error message into revert string on failure.\"},\"assertFalse(bool)\":{\"notice\":\"Asserts that the given condition is false.\"},\"assertFalse(bool,string)\":{\"notice\":\"Asserts that the given condition is false and includes error message into revert string on failure.\"},\"assertGe(int256,int256)\":{\"notice\":\"Compares two `int256` values. Expects first value to be greater than or equal to second.\"},\"assertGe(int256,int256,string)\":{\"notice\":\"Compares two `int256` values. Expects first value to be greater than or equal to second. Includes error message into revert string on failure.\"},\"assertGe(uint256,uint256)\":{\"notice\":\"Compares two `uint256` values. Expects first value to be greater than or equal to second.\"},\"assertGe(uint256,uint256,string)\":{\"notice\":\"Compares two `uint256` values. Expects first value to be greater than or equal to second. Includes error message into revert string on failure.\"},\"assertGeDecimal(int256,int256,uint256)\":{\"notice\":\"Compares two `int256` values. Expects first value to be greater than or equal to second. Formats values with decimals in failure message.\"},\"assertGeDecimal(int256,int256,uint256,string)\":{\"notice\":\"Compares two `int256` values. Expects first value to be greater than or equal to second. Formats values with decimals in failure message. Includes error message into revert string on failure.\"},\"assertGeDecimal(uint256,uint256,uint256)\":{\"notice\":\"Compares two `uint256` values. Expects first value to be greater than or equal to second. Formats values with decimals in failure message.\"},\"assertGeDecimal(uint256,uint256,uint256,string)\":{\"notice\":\"Compares two `uint256` values. Expects first value to be greater than or equal to second. Formats values with decimals in failure message. Includes error message into revert string on failure.\"},\"assertGt(int256,int256)\":{\"notice\":\"Compares two `int256` values. Expects first value to be greater than second.\"},\"assertGt(int256,int256,string)\":{\"notice\":\"Compares two `int256` values. Expects first value to be greater than second. Includes error message into revert string on failure.\"},\"assertGt(uint256,uint256)\":{\"notice\":\"Compares two `uint256` values. Expects first value to be greater than second.\"},\"assertGt(uint256,uint256,string)\":{\"notice\":\"Compares two `uint256` values. Expects first value to be greater than second. Includes error message into revert string on failure.\"},\"assertGtDecimal(int256,int256,uint256)\":{\"notice\":\"Compares two `int256` values. Expects first value to be greater than second. Formats values with decimals in failure message.\"},\"assertGtDecimal(int256,int256,uint256,string)\":{\"notice\":\"Compares two `int256` values. Expects first value to be greater than second. Formats values with decimals in failure message. Includes error message into revert string on failure.\"},\"assertGtDecimal(uint256,uint256,uint256)\":{\"notice\":\"Compares two `uint256` values. Expects first value to be greater than second. Formats values with decimals in failure message.\"},\"assertGtDecimal(uint256,uint256,uint256,string)\":{\"notice\":\"Compares two `uint256` values. Expects first value to be greater than second. Formats values with decimals in failure message. Includes error message into revert string on failure.\"},\"assertLe(int256,int256)\":{\"notice\":\"Compares two `int256` values. Expects first value to be less than or equal to second.\"},\"assertLe(int256,int256,string)\":{\"notice\":\"Compares two `int256` values. Expects first value to be less than or equal to second. Includes error message into revert string on failure.\"},\"assertLe(uint256,uint256)\":{\"notice\":\"Compares two `uint256` values. Expects first value to be less than or equal to second.\"},\"assertLe(uint256,uint256,string)\":{\"notice\":\"Compares two `uint256` values. Expects first value to be less than or equal to second. Includes error message into revert string on failure.\"},\"assertLeDecimal(int256,int256,uint256)\":{\"notice\":\"Compares two `int256` values. Expects first value to be less than or equal to second. Formats values with decimals in failure message.\"},\"assertLeDecimal(int256,int256,uint256,string)\":{\"notice\":\"Compares two `int256` values. Expects first value to be less than or equal to second. Formats values with decimals in failure message. Includes error message into revert string on failure.\"},\"assertLeDecimal(uint256,uint256,uint256)\":{\"notice\":\"Compares two `uint256` values. Expects first value to be less than or equal to second. Formats values with decimals in failure message.\"},\"assertLeDecimal(uint256,uint256,uint256,string)\":{\"notice\":\"Compares two `uint256` values. Expects first value to be less than or equal to second. Formats values with decimals in failure message. Includes error message into revert string on failure.\"},\"assertLt(int256,int256)\":{\"notice\":\"Compares two `int256` values. Expects first value to be less than second.\"},\"assertLt(int256,int256,string)\":{\"notice\":\"Compares two `int256` values. Expects first value to be less than second. Includes error message into revert string on failure.\"},\"assertLt(uint256,uint256)\":{\"notice\":\"Compares two `uint256` values. Expects first value to be less than second.\"},\"assertLt(uint256,uint256,string)\":{\"notice\":\"Compares two `uint256` values. Expects first value to be less than second. Includes error message into revert string on failure.\"},\"assertLtDecimal(int256,int256,uint256)\":{\"notice\":\"Compares two `int256` values. Expects first value to be less than second. Formats values with decimals in failure message.\"},\"assertLtDecimal(int256,int256,uint256,string)\":{\"notice\":\"Compares two `int256` values. Expects first value to be less than second. Formats values with decimals in failure message. Includes error message into revert string on failure.\"},\"assertLtDecimal(uint256,uint256,uint256)\":{\"notice\":\"Compares two `uint256` values. Expects first value to be less than second. Formats values with decimals in failure message.\"},\"assertLtDecimal(uint256,uint256,uint256,string)\":{\"notice\":\"Compares two `uint256` values. Expects first value to be less than second. Formats values with decimals in failure message. Includes error message into revert string on failure.\"},\"assertNotEq(address,address)\":{\"notice\":\"Asserts that two `address` values are not equal.\"},\"assertNotEq(address,address,string)\":{\"notice\":\"Asserts that two `address` values are not equal and includes error message into revert string on failure.\"},\"assertNotEq(address[],address[])\":{\"notice\":\"Asserts that two arrays of `address` values are not equal.\"},\"assertNotEq(address[],address[],string)\":{\"notice\":\"Asserts that two arrays of `address` values are not equal and includes error message into revert string on failure.\"},\"assertNotEq(bool,bool)\":{\"notice\":\"Asserts that two `bool` values are not equal.\"},\"assertNotEq(bool,bool,string)\":{\"notice\":\"Asserts that two `bool` values are not equal and includes error message into revert string on failure.\"},\"assertNotEq(bool[],bool[])\":{\"notice\":\"Asserts that two arrays of `bool` values are not equal.\"},\"assertNotEq(bool[],bool[],string)\":{\"notice\":\"Asserts that two arrays of `bool` values are not equal and includes error message into revert string on failure.\"},\"assertNotEq(bytes,bytes)\":{\"notice\":\"Asserts that two `bytes` values are not equal.\"},\"assertNotEq(bytes,bytes,string)\":{\"notice\":\"Asserts that two `bytes` values are not equal and includes error message into revert string on failure.\"},\"assertNotEq(bytes32,bytes32)\":{\"notice\":\"Asserts that two `bytes32` values are not equal.\"},\"assertNotEq(bytes32,bytes32,string)\":{\"notice\":\"Asserts that two `bytes32` values are not equal and includes error message into revert string on failure.\"},\"assertNotEq(bytes32[],bytes32[])\":{\"notice\":\"Asserts that two arrays of `bytes32` values are not equal.\"},\"assertNotEq(bytes32[],bytes32[],string)\":{\"notice\":\"Asserts that two arrays of `bytes32` values are not equal and includes error message into revert string on failure.\"},\"assertNotEq(bytes[],bytes[])\":{\"notice\":\"Asserts that two arrays of `bytes` values are not equal.\"},\"assertNotEq(bytes[],bytes[],string)\":{\"notice\":\"Asserts that two arrays of `bytes` values are not equal and includes error message into revert string on failure.\"},\"assertNotEq(int256,int256)\":{\"notice\":\"Asserts that two `int256` values are not equal.\"},\"assertNotEq(int256,int256,string)\":{\"notice\":\"Asserts that two `int256` values are not equal and includes error message into revert string on failure.\"},\"assertNotEq(int256[],int256[])\":{\"notice\":\"Asserts that two arrays of `int256` values are not equal.\"},\"assertNotEq(int256[],int256[],string)\":{\"notice\":\"Asserts that two arrays of `int256` values are not equal and includes error message into revert string on failure.\"},\"assertNotEq(string,string)\":{\"notice\":\"Asserts that two `string` values are not equal.\"},\"assertNotEq(string,string,string)\":{\"notice\":\"Asserts that two `string` values are not equal and includes error message into revert string on failure.\"},\"assertNotEq(string[],string[])\":{\"notice\":\"Asserts that two arrays of `string` values are not equal.\"},\"assertNotEq(string[],string[],string)\":{\"notice\":\"Asserts that two arrays of `string` values are not equal and includes error message into revert string on failure.\"},\"assertNotEq(uint256,uint256)\":{\"notice\":\"Asserts that two `uint256` values are not equal.\"},\"assertNotEq(uint256,uint256,string)\":{\"notice\":\"Asserts that two `uint256` values are not equal and includes error message into revert string on failure.\"},\"assertNotEq(uint256[],uint256[])\":{\"notice\":\"Asserts that two arrays of `uint256` values are not equal.\"},\"assertNotEq(uint256[],uint256[],string)\":{\"notice\":\"Asserts that two arrays of `uint256` values are not equal and includes error message into revert string on failure.\"},\"assertNotEqDecimal(int256,int256,uint256)\":{\"notice\":\"Asserts that two `int256` values are not equal, formatting them with decimals in failure message.\"},\"assertNotEqDecimal(int256,int256,uint256,string)\":{\"notice\":\"Asserts that two `int256` values are not equal, formatting them with decimals in failure message. Includes error message into revert string on failure.\"},\"assertNotEqDecimal(uint256,uint256,uint256)\":{\"notice\":\"Asserts that two `uint256` values are not equal, formatting them with decimals in failure message.\"},\"assertNotEqDecimal(uint256,uint256,uint256,string)\":{\"notice\":\"Asserts that two `uint256` values are not equal, formatting them with decimals in failure message. Includes error message into revert string on failure.\"},\"assertTrue(bool)\":{\"notice\":\"Asserts that the given condition is true.\"},\"assertTrue(bool,string)\":{\"notice\":\"Asserts that the given condition is true and includes error message into revert string on failure.\"},\"assume(bool)\":{\"notice\":\"If the condition is false, discard this run's fuzz inputs and generate new ones.\"},\"assumeNoRevert((address,bool,bytes))\":{\"notice\":\"Discard this run's fuzz inputs and generate new ones if next call reverts with the potential revert parameters.\"},\"assumeNoRevert((address,bool,bytes)[])\":{\"notice\":\"Discard this run's fuzz inputs and generate new ones if next call reverts with the any of the potential revert parameters.\"},\"assumeNoRevert()\":{\"notice\":\"Discard this run's fuzz inputs and generate new ones if next call reverted.\"},\"attachBlob(bytes)\":{\"notice\":\"Attach an EIP-4844 blob to the next call\"},\"attachDelegation((uint8,bytes32,bytes32,uint64,address))\":{\"notice\":\"Designate the next call as an EIP-7702 transaction\"},\"blobBaseFee(uint256)\":{\"notice\":\"Sets `block.blobbasefee`\"},\"blobhashes(bytes32[])\":{\"notice\":\"Sets the blobhashes in the transaction. Not available on EVM versions before Cancun. If used on unsupported EVM versions it will revert.\"},\"breakpoint(string)\":{\"notice\":\"Writes a breakpoint to jump to in the debugger.\"},\"breakpoint(string,bool)\":{\"notice\":\"Writes a conditional breakpoint to jump to in the debugger.\"},\"broadcast()\":{\"notice\":\"Has the next call (at this call depth only) create transactions that can later be signed and sent onchain. Broadcasting address is determined by checking the following in order: 1. If `--sender` argument was provided, that address is used. 2. If exactly one signer (e.g. private key, hw wallet, keystore) is set when `forge broadcast` is invoked, that signer is used. 3. Otherwise, default foundry sender (1804c8AB1F12E6bbf3894d4083f33e07309d1f38) is used.\"},\"broadcast(address)\":{\"notice\":\"Has the next call (at this call depth only) create a transaction with the address provided as the sender that can later be signed and sent onchain.\"},\"broadcast(uint256)\":{\"notice\":\"Has the next call (at this call depth only) create a transaction with the private key provided as the sender that can later be signed and sent onchain.\"},\"broadcastRawTransaction(bytes)\":{\"notice\":\"Takes a signed transaction and broadcasts it to the network.\"},\"chainId(uint256)\":{\"notice\":\"Sets `block.chainid`.\"},\"clearMockedCalls()\":{\"notice\":\"Clears all mocked calls.\"},\"cloneAccount(address,address)\":{\"notice\":\"Clones a source account code, state, balance and nonce to a target account and updates in-memory EVM state.\"},\"closeFile(string)\":{\"notice\":\"Closes file for reading, resetting the offset and allowing to read it from beginning with readLine. `path` is relative to the project root.\"},\"coinbase(address)\":{\"notice\":\"Sets `block.coinbase`.\"},\"computeCreate2Address(bytes32,bytes32)\":{\"notice\":\"Compute the address of a contract created with CREATE2 using the default CREATE2 deployer.\"},\"computeCreate2Address(bytes32,bytes32,address)\":{\"notice\":\"Compute the address of a contract created with CREATE2 using the given CREATE2 deployer.\"},\"computeCreateAddress(address,uint256)\":{\"notice\":\"Compute the address a contract will be deployed at for a given deployer address and nonce.\"},\"contains(string,string)\":{\"notice\":\"Returns true if `search` is found in `subject`, false otherwise.\"},\"cool(address)\":{\"notice\":\"Marks the slots of an account and the account address as cold.\"},\"coolSlot(address,bytes32)\":{\"notice\":\"Utility cheatcode to mark specific storage slot as cold, simulating no prior read.\"},\"copyFile(string,string)\":{\"notice\":\"Copies the contents of one file to another. This function will **overwrite** the contents of `to`. On success, the total number of bytes copied is returned and it is equal to the length of the `to` file as reported by `metadata`. Both `from` and `to` are relative to the project root.\"},\"copyStorage(address,address)\":{\"notice\":\"Utility cheatcode to copy storage of `from` contract to another `to` contract.\"},\"createDir(string,bool)\":{\"notice\":\"Creates a new, empty directory at the provided path. This cheatcode will revert in the following situations, but is not limited to just these cases: - User lacks permissions to modify `path`. - A parent of the given path doesn't exist and `recursive` is false. - `path` already exists and `recursive` is false. `path` is relative to the project root.\"},\"createFork(string)\":{\"notice\":\"Creates a new fork with the given endpoint and the _latest_ block and returns the identifier of the fork.\"},\"createFork(string,bytes32)\":{\"notice\":\"Creates a new fork with the given endpoint and at the block the given transaction was mined in, replays all transaction mined in the block before the transaction, and returns the identifier of the fork.\"},\"createFork(string,uint256)\":{\"notice\":\"Creates a new fork with the given endpoint and block and returns the identifier of the fork.\"},\"createSelectFork(string)\":{\"notice\":\"Creates and also selects a new fork with the given endpoint and the latest block and returns the identifier of the fork.\"},\"createSelectFork(string,bytes32)\":{\"notice\":\"Creates and also selects new fork with the given endpoint and at the block the given transaction was mined in, replays all transaction mined in the block before the transaction, returns the identifier of the fork.\"},\"createSelectFork(string,uint256)\":{\"notice\":\"Creates and also selects a new fork with the given endpoint and block and returns the identifier of the fork.\"},\"createWallet(string)\":{\"notice\":\"Derives a private key from the name, labels the account with that name, and returns the wallet.\"},\"createWallet(uint256)\":{\"notice\":\"Generates a wallet from the private key and returns the wallet.\"},\"createWallet(uint256,string)\":{\"notice\":\"Generates a wallet from the private key, labels the account with that name, and returns the wallet.\"},\"deal(address,uint256)\":{\"notice\":\"Sets an address' balance.\"},\"deleteSnapshot(uint256)\":{\"notice\":\"`deleteSnapshot` is being deprecated in favor of `deleteStateSnapshot`. It will be removed in future versions.\"},\"deleteSnapshots()\":{\"notice\":\"`deleteSnapshots` is being deprecated in favor of `deleteStateSnapshots`. It will be removed in future versions.\"},\"deleteStateSnapshot(uint256)\":{\"notice\":\"Removes the snapshot with the given ID created by `snapshot`. Takes the snapshot ID to delete. Returns `true` if the snapshot was successfully deleted. Returns `false` if the snapshot does not exist.\"},\"deleteStateSnapshots()\":{\"notice\":\"Removes _all_ snapshots previously created by `snapshot`.\"},\"deployCode(string)\":{\"notice\":\"Deploys a contract from an artifact file. Takes in the relative path to the json file or the path to the artifact in the form of :: where and parts are optional.\"},\"deployCode(string,bytes)\":{\"notice\":\"Deploys a contract from an artifact file. Takes in the relative path to the json file or the path to the artifact in the form of :: where and parts are optional. Additionally accepts abi-encoded constructor arguments.\"},\"deployCode(string,bytes,bytes32)\":{\"notice\":\"Deploys a contract from an artifact file, using the CREATE2 salt. Takes in the relative path to the json file or the path to the artifact in the form of :: where and parts are optional. Additionally accepts abi-encoded constructor arguments.\"},\"deployCode(string,bytes,uint256)\":{\"notice\":\"Deploys a contract from an artifact file. Takes in the relative path to the json file or the path to the artifact in the form of :: where and parts are optional. Additionally accepts abi-encoded constructor arguments and `msg.value`.\"},\"deployCode(string,bytes,uint256,bytes32)\":{\"notice\":\"Deploys a contract from an artifact file, using the CREATE2 salt. Takes in the relative path to the json file or the path to the artifact in the form of :: where and parts are optional. Additionally accepts abi-encoded constructor arguments and `msg.value`.\"},\"deployCode(string,bytes32)\":{\"notice\":\"Deploys a contract from an artifact file, using the CREATE2 salt. Takes in the relative path to the json file or the path to the artifact in the form of :: where and parts are optional.\"},\"deployCode(string,uint256)\":{\"notice\":\"Deploys a contract from an artifact file. Takes in the relative path to the json file or the path to the artifact in the form of :: where and parts are optional. Additionally accepts `msg.value`.\"},\"deployCode(string,uint256,bytes32)\":{\"notice\":\"Deploys a contract from an artifact file, using the CREATE2 salt. Takes in the relative path to the json file or the path to the artifact in the form of :: where and parts are optional. Additionally accepts `msg.value`.\"},\"deriveKey(string,string,uint32)\":{\"notice\":\"Derive a private key from a provided mnenomic string (or mnenomic file path) at `{derivationPath}{index}`.\"},\"deriveKey(string,string,uint32,string)\":{\"notice\":\"Derive a private key from a provided mnenomic string (or mnenomic file path) in the specified language at `{derivationPath}{index}`.\"},\"deriveKey(string,uint32)\":{\"notice\":\"Derive a private key from a provided mnenomic string (or mnenomic file path) at the derivation path `m/44'/60'/0'/0/{index}`.\"},\"deriveKey(string,uint32,string)\":{\"notice\":\"Derive a private key from a provided mnenomic string (or mnenomic file path) in the specified language at the derivation path `m/44'/60'/0'/0/{index}`.\"},\"difficulty(uint256)\":{\"notice\":\"Sets `block.difficulty`. Not available on EVM versions from Paris onwards. Use `prevrandao` instead. Reverts if used on unsupported EVM versions.\"},\"dumpState(string)\":{\"notice\":\"Dump a genesis JSON file's `allocs` to disk.\"},\"ensNamehash(string)\":{\"notice\":\"Returns ENS namehash for provided string.\"},\"envAddress(string)\":{\"notice\":\"Gets the environment variable `name` and parses it as `address`. Reverts if the variable was not found or could not be parsed.\"},\"envAddress(string,string)\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `address`, delimited by `delim`. Reverts if the variable was not found or could not be parsed.\"},\"envBool(string)\":{\"notice\":\"Gets the environment variable `name` and parses it as `bool`. Reverts if the variable was not found or could not be parsed.\"},\"envBool(string,string)\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `bool`, delimited by `delim`. Reverts if the variable was not found or could not be parsed.\"},\"envBytes(string)\":{\"notice\":\"Gets the environment variable `name` and parses it as `bytes`. Reverts if the variable was not found or could not be parsed.\"},\"envBytes(string,string)\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `bytes`, delimited by `delim`. Reverts if the variable was not found or could not be parsed.\"},\"envBytes32(string)\":{\"notice\":\"Gets the environment variable `name` and parses it as `bytes32`. Reverts if the variable was not found or could not be parsed.\"},\"envBytes32(string,string)\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `bytes32`, delimited by `delim`. Reverts if the variable was not found or could not be parsed.\"},\"envExists(string)\":{\"notice\":\"Gets the environment variable `name` and returns true if it exists, else returns false.\"},\"envInt(string)\":{\"notice\":\"Gets the environment variable `name` and parses it as `int256`. Reverts if the variable was not found or could not be parsed.\"},\"envInt(string,string)\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `int256`, delimited by `delim`. Reverts if the variable was not found or could not be parsed.\"},\"envOr(string,address)\":{\"notice\":\"Gets the environment variable `name` and parses it as `address`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,bool)\":{\"notice\":\"Gets the environment variable `name` and parses it as `bool`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,bytes)\":{\"notice\":\"Gets the environment variable `name` and parses it as `bytes`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,bytes32)\":{\"notice\":\"Gets the environment variable `name` and parses it as `bytes32`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,int256)\":{\"notice\":\"Gets the environment variable `name` and parses it as `int256`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,string)\":{\"notice\":\"Gets the environment variable `name` and parses it as `string`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,string,address[])\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `address`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,string,bool[])\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `bool`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,string,bytes32[])\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `bytes32`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,string,bytes[])\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `bytes`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,string,int256[])\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `int256`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,string,string[])\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `string`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,string,uint256[])\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `uint256`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,uint256)\":{\"notice\":\"Gets the environment variable `name` and parses it as `uint256`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envString(string)\":{\"notice\":\"Gets the environment variable `name` and parses it as `string`. Reverts if the variable was not found or could not be parsed.\"},\"envString(string,string)\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `string`, delimited by `delim`. Reverts if the variable was not found or could not be parsed.\"},\"envUint(string)\":{\"notice\":\"Gets the environment variable `name` and parses it as `uint256`. Reverts if the variable was not found or could not be parsed.\"},\"envUint(string,string)\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `uint256`, delimited by `delim`. Reverts if the variable was not found or could not be parsed.\"},\"etch(address,bytes)\":{\"notice\":\"Sets an address' code.\"},\"eth_getLogs(uint256,uint256,address,bytes32[])\":{\"notice\":\"Gets all the logs according to specified filter.\"},\"exists(string)\":{\"notice\":\"Returns true if the given path points to an existing entity, else returns false.\"},\"expectCall(address,bytes)\":{\"notice\":\"Expects a call to an address with the specified calldata. Calldata can either be a strict or a partial match.\"},\"expectCall(address,bytes,uint64)\":{\"notice\":\"Expects given number of calls to an address with the specified calldata.\"},\"expectCall(address,uint256,bytes)\":{\"notice\":\"Expects a call to an address with the specified `msg.value` and calldata.\"},\"expectCall(address,uint256,bytes,uint64)\":{\"notice\":\"Expects given number of calls to an address with the specified `msg.value` and calldata.\"},\"expectCall(address,uint256,uint64,bytes)\":{\"notice\":\"Expect a call to an address with the specified `msg.value`, gas, and calldata.\"},\"expectCall(address,uint256,uint64,bytes,uint64)\":{\"notice\":\"Expects given number of calls to an address with the specified `msg.value`, gas, and calldata.\"},\"expectCallMinGas(address,uint256,uint64,bytes)\":{\"notice\":\"Expect a call to an address with the specified `msg.value` and calldata, and a *minimum* amount of gas.\"},\"expectCallMinGas(address,uint256,uint64,bytes,uint64)\":{\"notice\":\"Expect given number of calls to an address with the specified `msg.value` and calldata, and a *minimum* amount of gas.\"},\"expectCreate(bytes,address)\":{\"notice\":\"Expects the deployment of the specified bytecode by the specified address using the CREATE opcode\"},\"expectCreate2(bytes,address)\":{\"notice\":\"Expects the deployment of the specified bytecode by the specified address using the CREATE2 opcode\"},\"expectEmit()\":{\"notice\":\"Prepare an expected log with all topic and data checks enabled. Call this function, then emit an event, then call a function. Internally after the call, we check if logs were emitted in the expected order with the expected topics and data.\"},\"expectEmit(address)\":{\"notice\":\"Same as the previous method, but also checks supplied address against emitting contract.\"},\"expectEmit(address,uint64)\":{\"notice\":\"Expect a given number of logs from a specific emitter with all topic and data checks enabled.\"},\"expectEmit(bool,bool,bool,bool)\":{\"notice\":\"Prepare an expected log with (bool checkTopic1, bool checkTopic2, bool checkTopic3, bool checkData.). Call this function, then emit an event, then call a function. Internally after the call, we check if logs were emitted in the expected order with the expected topics and data (as specified by the booleans).\"},\"expectEmit(bool,bool,bool,bool,address)\":{\"notice\":\"Same as the previous method, but also checks supplied address against emitting contract.\"},\"expectEmit(bool,bool,bool,bool,address,uint64)\":{\"notice\":\"Expect a given number of logs from a specific emitter with the provided topics.\"},\"expectEmit(bool,bool,bool,bool,uint64)\":{\"notice\":\"Expect a given number of logs with the provided topics.\"},\"expectEmit(uint64)\":{\"notice\":\"Expect a given number of logs with all topic and data checks enabled.\"},\"expectEmitAnonymous()\":{\"notice\":\"Prepare an expected anonymous log with all topic and data checks enabled. Call this function, then emit an anonymous event, then call a function. Internally after the call, we check if logs were emitted in the expected order with the expected topics and data.\"},\"expectEmitAnonymous(address)\":{\"notice\":\"Same as the previous method, but also checks supplied address against emitting contract.\"},\"expectEmitAnonymous(bool,bool,bool,bool,bool)\":{\"notice\":\"Prepare an expected anonymous log with (bool checkTopic1, bool checkTopic2, bool checkTopic3, bool checkData.). Call this function, then emit an anonymous event, then call a function. Internally after the call, we check if logs were emitted in the expected order with the expected topics and data (as specified by the booleans).\"},\"expectEmitAnonymous(bool,bool,bool,bool,bool,address)\":{\"notice\":\"Same as the previous method, but also checks supplied address against emitting contract.\"},\"expectPartialRevert(bytes4)\":{\"notice\":\"Expects an error on next call that starts with the revert data.\"},\"expectPartialRevert(bytes4,address)\":{\"notice\":\"Expects an error on next call to reverter address, that starts with the revert data.\"},\"expectRevert()\":{\"notice\":\"Expects an error on next call with any revert data.\"},\"expectRevert(address)\":{\"notice\":\"Expects an error with any revert data on next call to reverter address.\"},\"expectRevert(address,uint64)\":{\"notice\":\"Expects a `count` number of reverts from the upcoming calls from the reverter address.\"},\"expectRevert(bytes)\":{\"notice\":\"Expects an error on next call that exactly matches the revert data.\"},\"expectRevert(bytes,address)\":{\"notice\":\"Expects an error from reverter address on next call, that exactly matches the revert data.\"},\"expectRevert(bytes,address,uint64)\":{\"notice\":\"Expects a `count` number of reverts from the upcoming calls from the reverter address that exactly match the revert data.\"},\"expectRevert(bytes,uint64)\":{\"notice\":\"Expects a `count` number of reverts from the upcoming calls that exactly match the revert data.\"},\"expectRevert(bytes4)\":{\"notice\":\"Expects an error on next call that exactly matches the revert data.\"},\"expectRevert(bytes4,address)\":{\"notice\":\"Expects an error from reverter address on next call, with any revert data.\"},\"expectRevert(bytes4,address,uint64)\":{\"notice\":\"Expects a `count` number of reverts from the upcoming calls from the reverter address that match the revert data.\"},\"expectRevert(bytes4,uint64)\":{\"notice\":\"Expects a `count` number of reverts from the upcoming calls that match the revert data.\"},\"expectRevert(uint64)\":{\"notice\":\"Expects a `count` number of reverts from the upcoming calls with any revert data or reverter.\"},\"expectSafeMemory(uint64,uint64)\":{\"notice\":\"Only allows memory writes to offsets [0x00, 0x60) \\u222a [min, max) in the current subcontext. If any other memory is written to, the test will fail. Can be called multiple times to add more ranges to the set.\"},\"expectSafeMemoryCall(uint64,uint64)\":{\"notice\":\"Only allows memory writes to offsets [0x00, 0x60) \\u222a [min, max) in the next created subcontext. If any other memory is written to, the test will fail. Can be called multiple times to add more ranges to the set.\"},\"fee(uint256)\":{\"notice\":\"Sets `block.basefee`.\"},\"ffi(string[])\":{\"notice\":\"Performs a foreign function call via the terminal.\"},\"foundryVersionAtLeast(string)\":{\"notice\":\"Returns true if the current Foundry version is greater than or equal to the given version. The given version string must be in the format `major.minor.patch`. This is equivalent to `foundryVersionCmp(version) >= 0`.\"},\"foundryVersionCmp(string)\":{\"notice\":\"Compares the current Foundry version with the given version string. The given version string must be in the format `major.minor.patch`. Returns: -1 if current Foundry version is less than the given version 0 if current Foundry version equals the given version 1 if current Foundry version is greater than the given version This result can then be used with a comparison operator against `0`. For example, to check if the current Foundry version is greater than or equal to `1.0.0`: `if (foundryVersionCmp(\\\"1.0.0\\\") >= 0) { ... }`\"},\"fsMetadata(string)\":{\"notice\":\"Given a path, query the file system to get information about a file, directory, etc.\"},\"getArtifactPathByCode(bytes)\":{\"notice\":\"Gets the artifact path from code (aka. creation code).\"},\"getArtifactPathByDeployedCode(bytes)\":{\"notice\":\"Gets the artifact path from deployed code (aka. runtime code).\"},\"getBlobBaseFee()\":{\"notice\":\"Gets the current `block.blobbasefee`. You should use this instead of `block.blobbasefee` if you use `vm.blobBaseFee`, as `block.blobbasefee` is assumed to be constant across a transaction, and as a result will get optimized out by the compiler. See https://github.com/foundry-rs/foundry/issues/6180\"},\"getBlobhashes()\":{\"notice\":\"Gets the blockhashes from the current transaction. Not available on EVM versions before Cancun. If used on unsupported EVM versions it will revert.\"},\"getBlockNumber()\":{\"notice\":\"Gets the current `block.number`. You should use this instead of `block.number` if you use `vm.roll`, as `block.number` is assumed to be constant across a transaction, and as a result will get optimized out by the compiler. See https://github.com/foundry-rs/foundry/issues/6180\"},\"getBlockTimestamp()\":{\"notice\":\"Gets the current `block.timestamp`. You should use this instead of `block.timestamp` if you use `vm.warp`, as `block.timestamp` is assumed to be constant across a transaction, and as a result will get optimized out by the compiler. See https://github.com/foundry-rs/foundry/issues/6180\"},\"getBroadcast(string,uint64,uint8)\":{\"notice\":\"Returns the most recent broadcast for the given contract on `chainId` matching `txType`. For example: The most recent deployment can be fetched by passing `txType` as `CREATE` or `CREATE2`. The most recent call can be fetched by passing `txType` as `CALL`.\"},\"getBroadcasts(string,uint64)\":{\"notice\":\"Returns all broadcasts for the given contract on `chainId`. Sorted such that the most recent broadcast is the first element, and the oldest is the last. i.e descending order of BroadcastTxSummary.blockNumber.\"},\"getBroadcasts(string,uint64,uint8)\":{\"notice\":\"Returns all broadcasts for the given contract on `chainId` with the specified `txType`. Sorted such that the most recent broadcast is the first element, and the oldest is the last. i.e descending order of BroadcastTxSummary.blockNumber.\"},\"getChain(string)\":{\"notice\":\"Returns a Chain struct for specific alias\"},\"getChain(uint256)\":{\"notice\":\"Returns a Chain struct for specific chainId\"},\"getCode(string)\":{\"notice\":\"Gets the creation bytecode from an artifact file. Takes in the relative path to the json file or the path to the artifact in the form of :: where and parts are optional.\"},\"getDeployedCode(string)\":{\"notice\":\"Gets the deployed bytecode from an artifact file. Takes in the relative path to the json file or the path to the artifact in the form of :: where and parts are optional.\"},\"getDeployment(string)\":{\"notice\":\"Returns the most recent deployment for the current `chainId`.\"},\"getDeployment(string,uint64)\":{\"notice\":\"Returns the most recent deployment for the given contract on `chainId`\"},\"getDeployments(string,uint64)\":{\"notice\":\"Returns all deployments for the given contract on `chainId` Sorted in descending order of deployment time i.e descending order of BroadcastTxSummary.blockNumber. The most recent deployment is the first element, and the oldest is the last.\"},\"getFoundryVersion()\":{\"notice\":\"Returns the Foundry version. Format: -+.. Sample output: 0.3.0-nightly+3cb96bde9b.1737036656.debug Note: Build timestamps may vary slightly across platforms due to separate CI jobs. For reliable version comparisons, use UNIX format (e.g., >= 1700000000) to compare timestamps while ignoring minor time differences.\"},\"getLabel(address)\":{\"notice\":\"Gets the label for the specified address.\"},\"getMappingKeyAndParentOf(address,bytes32)\":{\"notice\":\"Gets the map key and parent of a mapping at a given slot, for a given address.\"},\"getMappingLength(address,bytes32)\":{\"notice\":\"Gets the number of elements in the mapping at the given slot, for a given address.\"},\"getMappingSlotAt(address,bytes32,uint256)\":{\"notice\":\"Gets the elements at index idx of the mapping at the given slot, for a given address. The index must be less than the length of the mapping (i.e. the number of keys in the mapping).\"},\"getNonce((address,uint256,uint256,uint256))\":{\"notice\":\"Get the nonce of a `Wallet`.\"},\"getNonce(address)\":{\"notice\":\"Gets the nonce of an account.\"},\"getRecordedLogs()\":{\"notice\":\"Gets all the recorded logs.\"},\"getStateDiff()\":{\"notice\":\"Returns state diffs from current `vm.startStateDiffRecording` session.\"},\"getStateDiffJson()\":{\"notice\":\"Returns state diffs from current `vm.startStateDiffRecording` session, in json format.\"},\"getWallets()\":{\"notice\":\"Returns addresses of available unlocked wallets in the script environment.\"},\"indexOf(string,string)\":{\"notice\":\"Returns the index of the first occurrence of a `key` in an `input` string. Returns `NOT_FOUND` (i.e. `type(uint256).max`) if the `key` is not found. Returns 0 in case of an empty `key`.\"},\"interceptInitcode()\":{\"notice\":\"Causes the next contract creation (via new) to fail and return its initcode in the returndata buffer. This allows type-safe access to the initcode payload that would be used for contract creation. Example usage: vm.interceptInitcode(); bytes memory initcode; try new MyContract(param1, param2) { assert(false); } catch (bytes memory interceptedInitcode) { initcode = interceptedInitcode; }\"},\"isContext(uint8)\":{\"notice\":\"Returns true if `forge` command was executed in given context.\"},\"isDir(string)\":{\"notice\":\"Returns true if the path exists on disk and is pointing at a directory, else returns false.\"},\"isFile(string)\":{\"notice\":\"Returns true if the path exists on disk and is pointing at a regular file, else returns false.\"},\"isPersistent(address)\":{\"notice\":\"Returns true if the account is marked as persistent.\"},\"keyExists(string,string)\":{\"notice\":\"Checks if `key` exists in a JSON object `keyExists` is being deprecated in favor of `keyExistsJson`. It will be removed in future versions.\"},\"keyExistsJson(string,string)\":{\"notice\":\"Checks if `key` exists in a JSON object.\"},\"keyExistsToml(string,string)\":{\"notice\":\"Checks if `key` exists in a TOML table.\"},\"label(address,string)\":{\"notice\":\"Labels an address in call traces.\"},\"lastCallGas()\":{\"notice\":\"Gets the gas used in the last call from the callee perspective.\"},\"load(address,bytes32)\":{\"notice\":\"Loads a storage slot from an address.\"},\"loadAllocs(string)\":{\"notice\":\"Load a genesis JSON file's `allocs` into the in-memory EVM state.\"},\"makePersistent(address)\":{\"notice\":\"Marks that the account(s) should use persistent storage across fork swaps in a multifork setup Meaning, changes made to the state of this account will be kept when switching forks.\"},\"makePersistent(address,address)\":{\"notice\":\"See `makePersistent(address)`.\"},\"makePersistent(address,address,address)\":{\"notice\":\"See `makePersistent(address)`.\"},\"makePersistent(address[])\":{\"notice\":\"See `makePersistent(address)`.\"},\"mockCall(address,bytes,bytes)\":{\"notice\":\"Mocks a call to an address, returning specified data. Calldata can either be strict or a partial match, e.g. if you only pass a Solidity selector to the expected calldata, then the entire Solidity function will be mocked.\"},\"mockCall(address,bytes4,bytes)\":{\"notice\":\"Mocks a call to an address, returning specified data. Calldata can either be strict or a partial match, e.g. if you only pass a Solidity selector to the expected calldata, then the entire Solidity function will be mocked. Overload to pass the function selector directly `token.approve.selector` instead of `abi.encodeWithSelector(token.approve.selector)`.\"},\"mockCall(address,uint256,bytes,bytes)\":{\"notice\":\"Mocks a call to an address with a specific `msg.value`, returning specified data. Calldata match takes precedence over `msg.value` in case of ambiguity.\"},\"mockCall(address,uint256,bytes4,bytes)\":{\"notice\":\"Mocks a call to an address with a specific `msg.value`, returning specified data. Calldata match takes precedence over `msg.value` in case of ambiguity. Overload to pass the function selector directly `token.approve.selector` instead of `abi.encodeWithSelector(token.approve.selector)`.\"},\"mockCallRevert(address,bytes,bytes)\":{\"notice\":\"Reverts a call to an address with specified revert data.\"},\"mockCallRevert(address,bytes4,bytes)\":{\"notice\":\"Reverts a call to an address with specified revert data. Overload to pass the function selector directly `token.approve.selector` instead of `abi.encodeWithSelector(token.approve.selector)`.\"},\"mockCallRevert(address,uint256,bytes,bytes)\":{\"notice\":\"Reverts a call to an address with a specific `msg.value`, with specified revert data.\"},\"mockCallRevert(address,uint256,bytes4,bytes)\":{\"notice\":\"Reverts a call to an address with a specific `msg.value`, with specified revert data. Overload to pass the function selector directly `token.approve.selector` instead of `abi.encodeWithSelector(token.approve.selector)`.\"},\"mockCalls(address,bytes,bytes[])\":{\"notice\":\"Mocks multiple calls to an address, returning specified data for each call.\"},\"mockCalls(address,uint256,bytes,bytes[])\":{\"notice\":\"Mocks multiple calls to an address with a specific `msg.value`, returning specified data for each call.\"},\"mockFunction(address,address,bytes)\":{\"notice\":\"Whenever a call is made to `callee` with calldata `data`, this cheatcode instead calls `target` with the same calldata. This functionality is similar to a delegate call made to `target` contract from `callee`. Can be used to substitute a call to a function with another implementation that captures the primary logic of the original function but is easier to reason about. If calldata is not a strict match then partial match by selector is attempted.\"},\"noAccessList()\":{\"notice\":\"Utility cheatcode to remove any EIP-2930 access list set by `accessList` cheatcode.\"},\"parseAddress(string)\":{\"notice\":\"Parses the given `string` into an `address`.\"},\"parseBool(string)\":{\"notice\":\"Parses the given `string` into a `bool`.\"},\"parseBytes(string)\":{\"notice\":\"Parses the given `string` into `bytes`.\"},\"parseBytes32(string)\":{\"notice\":\"Parses the given `string` into a `bytes32`.\"},\"parseInt(string)\":{\"notice\":\"Parses the given `string` into a `int256`.\"},\"parseJson(string)\":{\"notice\":\"ABI-encodes a JSON object.\"},\"parseJson(string,string)\":{\"notice\":\"ABI-encodes a JSON object at `key`.\"},\"parseJsonAddress(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `address`.\"},\"parseJsonAddressArray(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `address[]`.\"},\"parseJsonBool(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `bool`.\"},\"parseJsonBoolArray(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `bool[]`.\"},\"parseJsonBytes(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `bytes`.\"},\"parseJsonBytes32(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `bytes32`.\"},\"parseJsonBytes32Array(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `bytes32[]`.\"},\"parseJsonBytesArray(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `bytes[]`.\"},\"parseJsonInt(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `int256`.\"},\"parseJsonIntArray(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `int256[]`.\"},\"parseJsonKeys(string,string)\":{\"notice\":\"Returns an array of all the keys in a JSON object.\"},\"parseJsonString(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `string`.\"},\"parseJsonStringArray(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `string[]`.\"},\"parseJsonType(string,string)\":{\"notice\":\"Parses a string of JSON data and coerces it to type corresponding to `typeDescription`.\"},\"parseJsonType(string,string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to type corresponding to `typeDescription`.\"},\"parseJsonTypeArray(string,string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to type array corresponding to `typeDescription`.\"},\"parseJsonUint(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `uint256`.\"},\"parseJsonUintArray(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `uint256[]`.\"},\"parseToml(string)\":{\"notice\":\"ABI-encodes a TOML table.\"},\"parseToml(string,string)\":{\"notice\":\"ABI-encodes a TOML table at `key`.\"},\"parseTomlAddress(string,string)\":{\"notice\":\"Parses a string of TOML data at `key` and coerces it to `address`.\"},\"parseTomlAddressArray(string,string)\":{\"notice\":\"Parses a string of TOML data at `key` and coerces it to `address[]`.\"},\"parseTomlBool(string,string)\":{\"notice\":\"Parses a string of TOML data at `key` and coerces it to `bool`.\"},\"parseTomlBoolArray(string,string)\":{\"notice\":\"Parses a string of TOML data at `key` and coerces it to `bool[]`.\"},\"parseTomlBytes(string,string)\":{\"notice\":\"Parses a string of TOML data at `key` and coerces it to `bytes`.\"},\"parseTomlBytes32(string,string)\":{\"notice\":\"Parses a string of TOML data at `key` and coerces it to `bytes32`.\"},\"parseTomlBytes32Array(string,string)\":{\"notice\":\"Parses a string of TOML data at `key` and coerces it to `bytes32[]`.\"},\"parseTomlBytesArray(string,string)\":{\"notice\":\"Parses a string of TOML data at `key` and coerces it to `bytes[]`.\"},\"parseTomlInt(string,string)\":{\"notice\":\"Parses a string of TOML data at `key` and coerces it to `int256`.\"},\"parseTomlIntArray(string,string)\":{\"notice\":\"Parses a string of TOML data at `key` and coerces it to `int256[]`.\"},\"parseTomlKeys(string,string)\":{\"notice\":\"Returns an array of all the keys in a TOML table.\"},\"parseTomlString(string,string)\":{\"notice\":\"Parses a string of TOML data at `key` and coerces it to `string`.\"},\"parseTomlStringArray(string,string)\":{\"notice\":\"Parses a string of TOML data at `key` and coerces it to `string[]`.\"},\"parseTomlType(string,string)\":{\"notice\":\"Parses a string of TOML data and coerces it to type corresponding to `typeDescription`.\"},\"parseTomlType(string,string,string)\":{\"notice\":\"Parses a string of TOML data at `key` and coerces it to type corresponding to `typeDescription`.\"},\"parseTomlTypeArray(string,string,string)\":{\"notice\":\"Parses a string of TOML data at `key` and coerces it to type array corresponding to `typeDescription`.\"},\"parseTomlUint(string,string)\":{\"notice\":\"Parses a string of TOML data at `key` and coerces it to `uint256`.\"},\"parseTomlUintArray(string,string)\":{\"notice\":\"Parses a string of TOML data at `key` and coerces it to `uint256[]`.\"},\"parseUint(string)\":{\"notice\":\"Parses the given `string` into a `uint256`.\"},\"pauseGasMetering()\":{\"notice\":\"Pauses gas metering (i.e. gas usage is not counted). Noop if already paused.\"},\"pauseTracing()\":{\"notice\":\"Pauses collection of call traces. Useful in cases when you want to skip tracing of complex calls which are not useful for debugging.\"},\"prank(address)\":{\"notice\":\"Sets the *next* call's `msg.sender` to be the input address.\"},\"prank(address,address)\":{\"notice\":\"Sets the *next* call's `msg.sender` to be the input address, and the `tx.origin` to be the second input.\"},\"prank(address,address,bool)\":{\"notice\":\"Sets the *next* delegate call's `msg.sender` to be the input address, and the `tx.origin` to be the second input.\"},\"prank(address,bool)\":{\"notice\":\"Sets the *next* delegate call's `msg.sender` to be the input address.\"},\"prevrandao(bytes32)\":{\"notice\":\"Sets `block.prevrandao`. Not available on EVM versions before Paris. Use `difficulty` instead. If used on unsupported EVM versions it will revert.\"},\"prevrandao(uint256)\":{\"notice\":\"Sets `block.prevrandao`. Not available on EVM versions before Paris. Use `difficulty` instead. If used on unsupported EVM versions it will revert.\"},\"projectRoot()\":{\"notice\":\"Get the path of the current project root.\"},\"prompt(string)\":{\"notice\":\"Prompts the user for a string value in the terminal.\"},\"promptAddress(string)\":{\"notice\":\"Prompts the user for an address in the terminal.\"},\"promptSecret(string)\":{\"notice\":\"Prompts the user for a hidden string value in the terminal.\"},\"promptSecretUint(string)\":{\"notice\":\"Prompts the user for hidden uint256 in the terminal (usually pk).\"},\"promptUint(string)\":{\"notice\":\"Prompts the user for uint256 in the terminal.\"},\"publicKeyP256(uint256)\":{\"notice\":\"Derives secp256r1 public key from the provided `privateKey`.\"},\"randomAddress()\":{\"notice\":\"Returns a random `address`.\"},\"randomBool()\":{\"notice\":\"Returns a random `bool`.\"},\"randomBytes(uint256)\":{\"notice\":\"Returns a random byte array value of the given length.\"},\"randomBytes4()\":{\"notice\":\"Returns a random fixed-size byte array of length 4.\"},\"randomBytes8()\":{\"notice\":\"Returns a random fixed-size byte array of length 8.\"},\"randomInt()\":{\"notice\":\"Returns a random `int256` value.\"},\"randomInt(uint256)\":{\"notice\":\"Returns a random `int256` value of given bits.\"},\"randomUint()\":{\"notice\":\"Returns a random uint256 value.\"},\"randomUint(uint256)\":{\"notice\":\"Returns a random `uint256` value of given bits.\"},\"randomUint(uint256,uint256)\":{\"notice\":\"Returns random uint256 value between the provided range (=min..=max).\"},\"readCallers()\":{\"notice\":\"Reads the current `msg.sender` and `tx.origin` from state and reports if there is any active caller modification.\"},\"readDir(string)\":{\"notice\":\"Reads the directory at the given path recursively, up to `maxDepth`. `maxDepth` defaults to 1, meaning only the direct children of the given directory will be returned. Follows symbolic links if `followLinks` is true.\"},\"readDir(string,uint64)\":{\"notice\":\"See `readDir(string)`.\"},\"readDir(string,uint64,bool)\":{\"notice\":\"See `readDir(string)`.\"},\"readFile(string)\":{\"notice\":\"Reads the entire content of file to string. `path` is relative to the project root.\"},\"readFileBinary(string)\":{\"notice\":\"Reads the entire content of file as binary. `path` is relative to the project root.\"},\"readLine(string)\":{\"notice\":\"Reads next line of file to string.\"},\"readLink(string)\":{\"notice\":\"Reads a symbolic link, returning the path that the link points to. This cheatcode will revert in the following situations, but is not limited to just these cases: - `path` is not a symbolic link. - `path` does not exist.\"},\"record()\":{\"notice\":\"Records all storage reads and writes.\"},\"recordLogs()\":{\"notice\":\"Record all the transaction logs.\"},\"rememberKey(uint256)\":{\"notice\":\"Adds a private key to the local forge wallet and returns the address.\"},\"rememberKeys(string,string,string,uint32)\":{\"notice\":\"Derive a set number of wallets from a mnemonic in the specified language at the derivation path `m/44'/60'/0'/0/{0..count}`. The respective private keys are saved to the local forge wallet for later use and their addresses are returned.\"},\"rememberKeys(string,string,uint32)\":{\"notice\":\"Derive a set number of wallets from a mnemonic at the derivation path `m/44'/60'/0'/0/{0..count}`. The respective private keys are saved to the local forge wallet for later use and their addresses are returned.\"},\"removeDir(string,bool)\":{\"notice\":\"Removes a directory at the provided path. This cheatcode will revert in the following situations, but is not limited to just these cases: - `path` doesn't exist. - `path` isn't a directory. - User lacks permissions to modify `path`. - The directory is not empty and `recursive` is false. `path` is relative to the project root.\"},\"removeFile(string)\":{\"notice\":\"Removes a file from the filesystem. This cheatcode will revert in the following situations, but is not limited to just these cases: - `path` points to a directory. - The file doesn't exist. - The user lacks permissions to remove the file. `path` is relative to the project root.\"},\"replace(string,string,string)\":{\"notice\":\"Replaces occurrences of `from` in the given `string` with `to`.\"},\"resetGasMetering()\":{\"notice\":\"Reset gas metering (i.e. gas usage is set to gas limit).\"},\"resetNonce(address)\":{\"notice\":\"Resets the nonce of an account to 0 for EOAs and 1 for contract accounts.\"},\"resumeGasMetering()\":{\"notice\":\"Resumes gas metering (i.e. gas usage is counted again). Noop if already on.\"},\"resumeTracing()\":{\"notice\":\"Unpauses collection of call traces.\"},\"revertTo(uint256)\":{\"notice\":\"`revertTo` is being deprecated in favor of `revertToState`. It will be removed in future versions.\"},\"revertToAndDelete(uint256)\":{\"notice\":\"`revertToAndDelete` is being deprecated in favor of `revertToStateAndDelete`. It will be removed in future versions.\"},\"revertToState(uint256)\":{\"notice\":\"Revert the state of the EVM to a previous snapshot Takes the snapshot ID to revert to. Returns `true` if the snapshot was successfully reverted. Returns `false` if the snapshot does not exist. **Note:** This does not automatically delete the snapshot. To delete the snapshot use `deleteStateSnapshot`.\"},\"revertToStateAndDelete(uint256)\":{\"notice\":\"Revert the state of the EVM to a previous snapshot and automatically deletes the snapshots Takes the snapshot ID to revert to. Returns `true` if the snapshot was successfully reverted and deleted. Returns `false` if the snapshot does not exist.\"},\"revokePersistent(address)\":{\"notice\":\"Revokes persistent status from the address, previously added via `makePersistent`.\"},\"revokePersistent(address[])\":{\"notice\":\"See `revokePersistent(address)`.\"},\"roll(uint256)\":{\"notice\":\"Sets `block.height`.\"},\"rollFork(bytes32)\":{\"notice\":\"Updates the currently active fork to given transaction. This will `rollFork` with the number of the block the transaction was mined in and replays all transaction mined before it in the block.\"},\"rollFork(uint256)\":{\"notice\":\"Updates the currently active fork to given block number This is similar to `roll` but for the currently active fork.\"},\"rollFork(uint256,bytes32)\":{\"notice\":\"Updates the given fork to block number of the given transaction and replays all transaction mined before it in the block.\"},\"rollFork(uint256,uint256)\":{\"notice\":\"Updates the given fork to given block number.\"},\"rpc(string,string)\":{\"notice\":\"Performs an Ethereum JSON-RPC request to the current fork URL.\"},\"rpc(string,string,string)\":{\"notice\":\"Performs an Ethereum JSON-RPC request to the given endpoint.\"},\"rpcUrl(string)\":{\"notice\":\"Returns the RPC url for the given alias.\"},\"rpcUrlStructs()\":{\"notice\":\"Returns all rpc urls and their aliases as structs.\"},\"rpcUrls()\":{\"notice\":\"Returns all rpc urls and their aliases `[alias, url][]`.\"},\"selectFork(uint256)\":{\"notice\":\"Takes a fork identifier created by `createFork` and sets the corresponding forked state as active.\"},\"serializeAddress(string,string,address)\":{\"notice\":\"See `serializeJson`.\"},\"serializeAddress(string,string,address[])\":{\"notice\":\"See `serializeJson`.\"},\"serializeBool(string,string,bool)\":{\"notice\":\"See `serializeJson`.\"},\"serializeBool(string,string,bool[])\":{\"notice\":\"See `serializeJson`.\"},\"serializeBytes(string,string,bytes)\":{\"notice\":\"See `serializeJson`.\"},\"serializeBytes(string,string,bytes[])\":{\"notice\":\"See `serializeJson`.\"},\"serializeBytes32(string,string,bytes32)\":{\"notice\":\"See `serializeJson`.\"},\"serializeBytes32(string,string,bytes32[])\":{\"notice\":\"See `serializeJson`.\"},\"serializeInt(string,string,int256)\":{\"notice\":\"See `serializeJson`.\"},\"serializeInt(string,string,int256[])\":{\"notice\":\"See `serializeJson`.\"},\"serializeJson(string,string)\":{\"notice\":\"Serializes a key and value to a JSON object stored in-memory that can be later written to a file. Returns the stringified version of the specific JSON file up to that moment.\"},\"serializeJsonType(string,bytes)\":{\"notice\":\"See `serializeJson`.\"},\"serializeJsonType(string,string,string,bytes)\":{\"notice\":\"See `serializeJson`.\"},\"serializeString(string,string,string)\":{\"notice\":\"See `serializeJson`.\"},\"serializeString(string,string,string[])\":{\"notice\":\"See `serializeJson`.\"},\"serializeUint(string,string,uint256)\":{\"notice\":\"See `serializeJson`.\"},\"serializeUint(string,string,uint256[])\":{\"notice\":\"See `serializeJson`.\"},\"serializeUintToHex(string,string,uint256)\":{\"notice\":\"See `serializeJson`.\"},\"setArbitraryStorage(address)\":{\"notice\":\"Utility cheatcode to set arbitrary storage for given target address.\"},\"setArbitraryStorage(address,bool)\":{\"notice\":\"Utility cheatcode to set arbitrary storage for given target address and overwrite any storage slots that have been previously set.\"},\"setBlockhash(uint256,bytes32)\":{\"notice\":\"Set blockhash for the current block. It only sets the blockhash for blocks where `block.number - 256 <= number < block.number`.\"},\"setEnv(string,string)\":{\"notice\":\"Sets environment variables.\"},\"setNonce(address,uint64)\":{\"notice\":\"Sets the nonce of an account. Must be higher than the current nonce of the account.\"},\"setNonceUnsafe(address,uint64)\":{\"notice\":\"Sets the nonce of an account to an arbitrary value.\"},\"shuffle(uint256[])\":{\"notice\":\"Randomly shuffles an array.\"},\"sign((address,uint256,uint256,uint256),bytes32)\":{\"notice\":\"Signs data with a `Wallet`.\"},\"sign(address,bytes32)\":{\"notice\":\"Signs `digest` with signer provided to script using the secp256k1 curve. Raises error if none of the signers passed into the script have provided address.\"},\"sign(bytes32)\":{\"notice\":\"Signs `digest` with signer provided to script using the secp256k1 curve. If `--sender` is provided, the signer with provided address is used, otherwise, if exactly one signer is provided to the script, that signer is used. Raises error if signer passed through `--sender` does not match any unlocked signers or if `--sender` is not provided and not exactly one signer is passed to the script.\"},\"sign(uint256,bytes32)\":{\"notice\":\"Signs `digest` with `privateKey` using the secp256k1 curve.\"},\"signAndAttachDelegation(address,uint256)\":{\"notice\":\"Sign an EIP-7702 authorization and designate the next call as an EIP-7702 transaction\"},\"signAndAttachDelegation(address,uint256,uint64)\":{\"notice\":\"Sign an EIP-7702 authorization and designate the next call as an EIP-7702 transaction for specific nonce\"},\"signCompact((address,uint256,uint256,uint256),bytes32)\":{\"notice\":\"Signs data with a `Wallet`. Returns a compact signature (`r`, `vs`) as per EIP-2098, where `vs` encodes both the signature's `s` value, and the recovery id `v` in a single bytes32. This format reduces the signature size from 65 to 64 bytes.\"},\"signCompact(address,bytes32)\":{\"notice\":\"Signs `digest` with signer provided to script using the secp256k1 curve. Returns a compact signature (`r`, `vs`) as per EIP-2098, where `vs` encodes both the signature's `s` value, and the recovery id `v` in a single bytes32. This format reduces the signature size from 65 to 64 bytes. Raises error if none of the signers passed into the script have provided address.\"},\"signCompact(bytes32)\":{\"notice\":\"Signs `digest` with signer provided to script using the secp256k1 curve. Returns a compact signature (`r`, `vs`) as per EIP-2098, where `vs` encodes both the signature's `s` value, and the recovery id `v` in a single bytes32. This format reduces the signature size from 65 to 64 bytes. If `--sender` is provided, the signer with provided address is used, otherwise, if exactly one signer is provided to the script, that signer is used. Raises error if signer passed through `--sender` does not match any unlocked signers or if `--sender` is not provided and not exactly one signer is passed to the script.\"},\"signCompact(uint256,bytes32)\":{\"notice\":\"Signs `digest` with `privateKey` using the secp256k1 curve. Returns a compact signature (`r`, `vs`) as per EIP-2098, where `vs` encodes both the signature's `s` value, and the recovery id `v` in a single bytes32. This format reduces the signature size from 65 to 64 bytes.\"},\"signDelegation(address,uint256)\":{\"notice\":\"Sign an EIP-7702 authorization for delegation\"},\"signDelegation(address,uint256,uint64)\":{\"notice\":\"Sign an EIP-7702 authorization for delegation for specific nonce\"},\"signP256(uint256,bytes32)\":{\"notice\":\"Signs `digest` with `privateKey` using the secp256r1 curve.\"},\"skip(bool)\":{\"notice\":\"Marks a test as skipped. Must be called at the top level of a test.\"},\"skip(bool,string)\":{\"notice\":\"Marks a test as skipped with a reason. Must be called at the top level of a test.\"},\"sleep(uint256)\":{\"notice\":\"Suspends execution of the main thread for `duration` milliseconds.\"},\"snapshot()\":{\"notice\":\"`snapshot` is being deprecated in favor of `snapshotState`. It will be removed in future versions.\"},\"snapshotGasLastCall(string)\":{\"notice\":\"Snapshot capture the gas usage of the last call by name from the callee perspective.\"},\"snapshotGasLastCall(string,string)\":{\"notice\":\"Snapshot capture the gas usage of the last call by name in a group from the callee perspective.\"},\"snapshotState()\":{\"notice\":\"Snapshot the current state of the evm. Returns the ID of the snapshot that was created. To revert a snapshot use `revertToState`.\"},\"snapshotValue(string,string,uint256)\":{\"notice\":\"Snapshot capture an arbitrary numerical value by name in a group.\"},\"snapshotValue(string,uint256)\":{\"notice\":\"Snapshot capture an arbitrary numerical value by name. The group name is derived from the contract name.\"},\"sort(uint256[])\":{\"notice\":\"Sorts an array in ascending order.\"},\"split(string,string)\":{\"notice\":\"Splits the given `string` into an array of strings divided by the `delimiter`.\"},\"startBroadcast()\":{\"notice\":\"Has all subsequent calls (at this call depth only) create transactions that can later be signed and sent onchain. Broadcasting address is determined by checking the following in order: 1. If `--sender` argument was provided, that address is used. 2. If exactly one signer (e.g. private key, hw wallet, keystore) is set when `forge broadcast` is invoked, that signer is used. 3. Otherwise, default foundry sender (1804c8AB1F12E6bbf3894d4083f33e07309d1f38) is used.\"},\"startBroadcast(address)\":{\"notice\":\"Has all subsequent calls (at this call depth only) create transactions with the address provided that can later be signed and sent onchain.\"},\"startBroadcast(uint256)\":{\"notice\":\"Has all subsequent calls (at this call depth only) create transactions with the private key provided that can later be signed and sent onchain.\"},\"startDebugTraceRecording()\":{\"notice\":\"Records the debug trace during the run.\"},\"startMappingRecording()\":{\"notice\":\"Starts recording all map SSTOREs for later retrieval.\"},\"startPrank(address)\":{\"notice\":\"Sets all subsequent calls' `msg.sender` to be the input address until `stopPrank` is called.\"},\"startPrank(address,address)\":{\"notice\":\"Sets all subsequent calls' `msg.sender` to be the input address until `stopPrank` is called, and the `tx.origin` to be the second input.\"},\"startPrank(address,address,bool)\":{\"notice\":\"Sets all subsequent delegate calls' `msg.sender` to be the input address until `stopPrank` is called, and the `tx.origin` to be the second input.\"},\"startPrank(address,bool)\":{\"notice\":\"Sets all subsequent delegate calls' `msg.sender` to be the input address until `stopPrank` is called.\"},\"startSnapshotGas(string)\":{\"notice\":\"Start a snapshot capture of the current gas usage by name. The group name is derived from the contract name.\"},\"startSnapshotGas(string,string)\":{\"notice\":\"Start a snapshot capture of the current gas usage by name in a group.\"},\"startStateDiffRecording()\":{\"notice\":\"Record all account accesses as part of CREATE, CALL or SELFDESTRUCT opcodes in order, along with the context of the calls\"},\"stopAndReturnDebugTraceRecording()\":{\"notice\":\"Stop debug trace recording and returns the recorded debug trace.\"},\"stopAndReturnStateDiff()\":{\"notice\":\"Returns an ordered array of all account accesses from a `vm.startStateDiffRecording` session.\"},\"stopBroadcast()\":{\"notice\":\"Stops collecting onchain transactions.\"},\"stopExpectSafeMemory()\":{\"notice\":\"Stops all safe memory expectation in the current subcontext.\"},\"stopMappingRecording()\":{\"notice\":\"Stops recording all map SSTOREs for later retrieval and clears the recorded data.\"},\"stopPrank()\":{\"notice\":\"Resets subsequent calls' `msg.sender` to be `address(this)`.\"},\"stopSnapshotGas()\":{\"notice\":\"Stop the snapshot capture of the current gas by latest snapshot name, capturing the gas used since the start.\"},\"stopSnapshotGas(string)\":{\"notice\":\"Stop the snapshot capture of the current gas usage by name, capturing the gas used since the start. The group name is derived from the contract name.\"},\"stopSnapshotGas(string,string)\":{\"notice\":\"Stop the snapshot capture of the current gas usage by name in a group, capturing the gas used since the start.\"},\"store(address,bytes32,bytes32)\":{\"notice\":\"Stores a value to an address' storage slot.\"},\"toBase64(bytes)\":{\"notice\":\"Encodes a `bytes` value to a base64 string.\"},\"toBase64(string)\":{\"notice\":\"Encodes a `string` value to a base64 string.\"},\"toBase64URL(bytes)\":{\"notice\":\"Encodes a `bytes` value to a base64url string.\"},\"toBase64URL(string)\":{\"notice\":\"Encodes a `string` value to a base64url string.\"},\"toLowercase(string)\":{\"notice\":\"Converts the given `string` value to Lowercase.\"},\"toString(address)\":{\"notice\":\"Converts the given value to a `string`.\"},\"toString(bool)\":{\"notice\":\"Converts the given value to a `string`.\"},\"toString(bytes)\":{\"notice\":\"Converts the given value to a `string`.\"},\"toString(bytes32)\":{\"notice\":\"Converts the given value to a `string`.\"},\"toString(int256)\":{\"notice\":\"Converts the given value to a `string`.\"},\"toString(uint256)\":{\"notice\":\"Converts the given value to a `string`.\"},\"toUppercase(string)\":{\"notice\":\"Converts the given `string` value to Uppercase.\"},\"transact(bytes32)\":{\"notice\":\"Fetches the given transaction from the active fork and executes it on the current state.\"},\"transact(uint256,bytes32)\":{\"notice\":\"Fetches the given transaction from the given fork and executes it on the current state.\"},\"trim(string)\":{\"notice\":\"Trims leading and trailing whitespace from the given `string` value.\"},\"tryFfi(string[])\":{\"notice\":\"Performs a foreign function call via terminal and returns the exit code, stdout, and stderr.\"},\"txGasPrice(uint256)\":{\"notice\":\"Sets `tx.gasprice`.\"},\"unixTime()\":{\"notice\":\"Returns the time since unix epoch in milliseconds.\"},\"warmSlot(address,bytes32)\":{\"notice\":\"Utility cheatcode to mark specific storage slot as warm, simulating a prior read.\"},\"warp(uint256)\":{\"notice\":\"Sets `block.timestamp`.\"},\"writeFile(string,string)\":{\"notice\":\"Writes data to file, creating a file if it does not exist, and entirely replacing its contents if it does. `path` is relative to the project root.\"},\"writeFileBinary(string,bytes)\":{\"notice\":\"Writes binary data to a file, creating a file if it does not exist, and entirely replacing its contents if it does. `path` is relative to the project root.\"},\"writeJson(string,string)\":{\"notice\":\"Write a serialized JSON object to a file. If the file exists, it will be overwritten.\"},\"writeJson(string,string,string)\":{\"notice\":\"Write a serialized JSON object to an **existing** JSON file, replacing a value with key = This is useful to replace a specific value of a JSON file, without having to parse the entire thing.\"},\"writeLine(string,string)\":{\"notice\":\"Writes line to file, creating a file if it does not exist. `path` is relative to the project root.\"},\"writeToml(string,string)\":{\"notice\":\"Takes serialized JSON, converts to TOML and write a serialized TOML to a file.\"},\"writeToml(string,string,string)\":{\"notice\":\"Takes serialized JSON, converts to TOML and write a serialized TOML table to an **existing** TOML file, replacing a value with key = This is useful to replace a specific value of a TOML file, without having to parse the entire thing.\"}},\"notice\":\"The `Vm` interface does allow manipulation of the EVM state. These are all intended to be used in tests, but it is not recommended to use these cheats in scripts.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/forge-std/src/Vm.sol\":\"Vm\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"struct VmSafe.AccessListItem[]","name":"access","type":"tuple[]","components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes32[]","name":"storageKeys","type":"bytes32[]"}]}],"stateMutability":"nonpayable","type":"function","name":"accessList"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"accesses","outputs":[{"internalType":"bytes32[]","name":"readSlots","type":"bytes32[]"},{"internalType":"bytes32[]","name":"writeSlots","type":"bytes32[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"activeFork","outputs":[{"internalType":"uint256","name":"forkId","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"privateKey","type":"uint256"}],"stateMutability":"pure","type":"function","name":"addr","outputs":[{"internalType":"address","name":"keyAddr","type":"address"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"allowCheatcodes"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"uint256","name":"maxDelta","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertApproxEqAbs"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"uint256","name":"maxDelta","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertApproxEqAbs"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"uint256","name":"maxDelta","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertApproxEqAbs"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"uint256","name":"maxDelta","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertApproxEqAbs"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"uint256","name":"maxDelta","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertApproxEqAbsDecimal"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"uint256","name":"maxDelta","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertApproxEqAbsDecimal"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"uint256","name":"maxDelta","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertApproxEqAbsDecimal"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"uint256","name":"maxDelta","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertApproxEqAbsDecimal"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"uint256","name":"maxPercentDelta","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertApproxEqRel"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"uint256","name":"maxPercentDelta","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertApproxEqRel"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"uint256","name":"maxPercentDelta","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertApproxEqRel"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"uint256","name":"maxPercentDelta","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertApproxEqRel"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"uint256","name":"maxPercentDelta","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertApproxEqRelDecimal"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"uint256","name":"maxPercentDelta","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertApproxEqRelDecimal"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"uint256","name":"maxPercentDelta","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertApproxEqRelDecimal"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"uint256","name":"maxPercentDelta","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertApproxEqRelDecimal"},{"inputs":[{"internalType":"bytes32[]","name":"left","type":"bytes32[]"},{"internalType":"bytes32[]","name":"right","type":"bytes32[]"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"int256[]","name":"left","type":"int256[]"},{"internalType":"int256[]","name":"right","type":"int256[]"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"address","name":"left","type":"address"},{"internalType":"address","name":"right","type":"address"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"string","name":"left","type":"string"},{"internalType":"string","name":"right","type":"string"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"address[]","name":"left","type":"address[]"},{"internalType":"address[]","name":"right","type":"address[]"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"address[]","name":"left","type":"address[]"},{"internalType":"address[]","name":"right","type":"address[]"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"bool","name":"left","type":"bool"},{"internalType":"bool","name":"right","type":"bool"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"address","name":"left","type":"address"},{"internalType":"address","name":"right","type":"address"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"uint256[]","name":"left","type":"uint256[]"},{"internalType":"uint256[]","name":"right","type":"uint256[]"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"bool[]","name":"left","type":"bool[]"},{"internalType":"bool[]","name":"right","type":"bool[]"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"int256[]","name":"left","type":"int256[]"},{"internalType":"int256[]","name":"right","type":"int256[]"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"bytes32","name":"left","type":"bytes32"},{"internalType":"bytes32","name":"right","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"uint256[]","name":"left","type":"uint256[]"},{"internalType":"uint256[]","name":"right","type":"uint256[]"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"bytes","name":"left","type":"bytes"},{"internalType":"bytes","name":"right","type":"bytes"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"bytes32","name":"left","type":"bytes32"},{"internalType":"bytes32","name":"right","type":"bytes32"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"string[]","name":"left","type":"string[]"},{"internalType":"string[]","name":"right","type":"string[]"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"bytes32[]","name":"left","type":"bytes32[]"},{"internalType":"bytes32[]","name":"right","type":"bytes32[]"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"bytes","name":"left","type":"bytes"},{"internalType":"bytes","name":"right","type":"bytes"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"bool[]","name":"left","type":"bool[]"},{"internalType":"bool[]","name":"right","type":"bool[]"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"bytes[]","name":"left","type":"bytes[]"},{"internalType":"bytes[]","name":"right","type":"bytes[]"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"string[]","name":"left","type":"string[]"},{"internalType":"string[]","name":"right","type":"string[]"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"string","name":"left","type":"string"},{"internalType":"string","name":"right","type":"string"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"bytes[]","name":"left","type":"bytes[]"},{"internalType":"bytes[]","name":"right","type":"bytes[]"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"bool","name":"left","type":"bool"},{"internalType":"bool","name":"right","type":"bool"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertEqDecimal"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertEqDecimal"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertEqDecimal"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertEqDecimal"},{"inputs":[{"internalType":"bool","name":"condition","type":"bool"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertFalse"},{"inputs":[{"internalType":"bool","name":"condition","type":"bool"}],"stateMutability":"pure","type":"function","name":"assertFalse"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"}],"stateMutability":"pure","type":"function","name":"assertGe"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertGe"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertGe"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertGe"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertGeDecimal"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertGeDecimal"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertGeDecimal"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertGeDecimal"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"}],"stateMutability":"pure","type":"function","name":"assertGt"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertGt"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertGt"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertGt"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertGtDecimal"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertGtDecimal"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertGtDecimal"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertGtDecimal"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertLe"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertLe"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"}],"stateMutability":"pure","type":"function","name":"assertLe"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertLe"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertLeDecimal"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertLeDecimal"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertLeDecimal"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertLeDecimal"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"}],"stateMutability":"pure","type":"function","name":"assertLt"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertLt"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertLt"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertLt"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertLtDecimal"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertLtDecimal"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertLtDecimal"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertLtDecimal"},{"inputs":[{"internalType":"bytes32[]","name":"left","type":"bytes32[]"},{"internalType":"bytes32[]","name":"right","type":"bytes32[]"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"int256[]","name":"left","type":"int256[]"},{"internalType":"int256[]","name":"right","type":"int256[]"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"bool","name":"left","type":"bool"},{"internalType":"bool","name":"right","type":"bool"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"bytes[]","name":"left","type":"bytes[]"},{"internalType":"bytes[]","name":"right","type":"bytes[]"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"bool","name":"left","type":"bool"},{"internalType":"bool","name":"right","type":"bool"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"bool[]","name":"left","type":"bool[]"},{"internalType":"bool[]","name":"right","type":"bool[]"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"bytes","name":"left","type":"bytes"},{"internalType":"bytes","name":"right","type":"bytes"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"address[]","name":"left","type":"address[]"},{"internalType":"address[]","name":"right","type":"address[]"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"uint256[]","name":"left","type":"uint256[]"},{"internalType":"uint256[]","name":"right","type":"uint256[]"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"bool[]","name":"left","type":"bool[]"},{"internalType":"bool[]","name":"right","type":"bool[]"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"string","name":"left","type":"string"},{"internalType":"string","name":"right","type":"string"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"address[]","name":"left","type":"address[]"},{"internalType":"address[]","name":"right","type":"address[]"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"string","name":"left","type":"string"},{"internalType":"string","name":"right","type":"string"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"address","name":"left","type":"address"},{"internalType":"address","name":"right","type":"address"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"bytes32","name":"left","type":"bytes32"},{"internalType":"bytes32","name":"right","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"bytes","name":"left","type":"bytes"},{"internalType":"bytes","name":"right","type":"bytes"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"uint256[]","name":"left","type":"uint256[]"},{"internalType":"uint256[]","name":"right","type":"uint256[]"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"address","name":"left","type":"address"},{"internalType":"address","name":"right","type":"address"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"bytes32","name":"left","type":"bytes32"},{"internalType":"bytes32","name":"right","type":"bytes32"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"string[]","name":"left","type":"string[]"},{"internalType":"string[]","name":"right","type":"string[]"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"bytes32[]","name":"left","type":"bytes32[]"},{"internalType":"bytes32[]","name":"right","type":"bytes32[]"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"string[]","name":"left","type":"string[]"},{"internalType":"string[]","name":"right","type":"string[]"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"int256[]","name":"left","type":"int256[]"},{"internalType":"int256[]","name":"right","type":"int256[]"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"bytes[]","name":"left","type":"bytes[]"},{"internalType":"bytes[]","name":"right","type":"bytes[]"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertNotEqDecimal"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertNotEqDecimal"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertNotEqDecimal"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertNotEqDecimal"},{"inputs":[{"internalType":"bool","name":"condition","type":"bool"}],"stateMutability":"pure","type":"function","name":"assertTrue"},{"inputs":[{"internalType":"bool","name":"condition","type":"bool"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertTrue"},{"inputs":[{"internalType":"bool","name":"condition","type":"bool"}],"stateMutability":"pure","type":"function","name":"assume"},{"inputs":[],"stateMutability":"pure","type":"function","name":"assumeNoRevert"},{"inputs":[{"internalType":"struct VmSafe.PotentialRevert[]","name":"potentialReverts","type":"tuple[]","components":[{"internalType":"address","name":"reverter","type":"address"},{"internalType":"bool","name":"partialMatch","type":"bool"},{"internalType":"bytes","name":"revertData","type":"bytes"}]}],"stateMutability":"pure","type":"function","name":"assumeNoRevert"},{"inputs":[{"internalType":"struct VmSafe.PotentialRevert","name":"potentialRevert","type":"tuple","components":[{"internalType":"address","name":"reverter","type":"address"},{"internalType":"bool","name":"partialMatch","type":"bool"},{"internalType":"bytes","name":"revertData","type":"bytes"}]}],"stateMutability":"pure","type":"function","name":"assumeNoRevert"},{"inputs":[{"internalType":"bytes","name":"blob","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"attachBlob"},{"inputs":[{"internalType":"struct VmSafe.SignedDelegation","name":"signedDelegation","type":"tuple","components":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"},{"internalType":"address","name":"implementation","type":"address"}]}],"stateMutability":"nonpayable","type":"function","name":"attachDelegation"},{"inputs":[{"internalType":"uint256","name":"newBlobBaseFee","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"blobBaseFee"},{"inputs":[{"internalType":"bytes32[]","name":"hashes","type":"bytes32[]"}],"stateMutability":"nonpayable","type":"function","name":"blobhashes"},{"inputs":[{"internalType":"string","name":"char","type":"string"}],"stateMutability":"pure","type":"function","name":"breakpoint"},{"inputs":[{"internalType":"string","name":"char","type":"string"},{"internalType":"bool","name":"value","type":"bool"}],"stateMutability":"pure","type":"function","name":"breakpoint"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"broadcast"},{"inputs":[{"internalType":"address","name":"signer","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"broadcast"},{"inputs":[{"internalType":"uint256","name":"privateKey","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"broadcast"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"broadcastRawTransaction"},{"inputs":[{"internalType":"uint256","name":"newChainId","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"chainId"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"clearMockedCalls"},{"inputs":[{"internalType":"address","name":"source","type":"address"},{"internalType":"address","name":"target","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"cloneAccount"},{"inputs":[{"internalType":"string","name":"path","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"closeFile"},{"inputs":[{"internalType":"address","name":"newCoinbase","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"coinbase"},{"inputs":[{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"bytes32","name":"initCodeHash","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"computeCreate2Address","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"bytes32","name":"initCodeHash","type":"bytes32"},{"internalType":"address","name":"deployer","type":"address"}],"stateMutability":"pure","type":"function","name":"computeCreate2Address","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"deployer","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"}],"stateMutability":"pure","type":"function","name":"computeCreateAddress","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"string","name":"subject","type":"string"},{"internalType":"string","name":"search","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"contains","outputs":[{"internalType":"bool","name":"result","type":"bool"}]},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"cool"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes32","name":"slot","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"coolSlot"},{"inputs":[{"internalType":"string","name":"from","type":"string"},{"internalType":"string","name":"to","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"copyFile","outputs":[{"internalType":"uint64","name":"copied","type":"uint64"}]},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"copyStorage"},{"inputs":[{"internalType":"string","name":"path","type":"string"},{"internalType":"bool","name":"recursive","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"createDir"},{"inputs":[{"internalType":"string","name":"urlOrAlias","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"createFork","outputs":[{"internalType":"uint256","name":"forkId","type":"uint256"}]},{"inputs":[{"internalType":"string","name":"urlOrAlias","type":"string"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"createFork","outputs":[{"internalType":"uint256","name":"forkId","type":"uint256"}]},{"inputs":[{"internalType":"string","name":"urlOrAlias","type":"string"},{"internalType":"bytes32","name":"txHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"createFork","outputs":[{"internalType":"uint256","name":"forkId","type":"uint256"}]},{"inputs":[{"internalType":"string","name":"urlOrAlias","type":"string"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"createSelectFork","outputs":[{"internalType":"uint256","name":"forkId","type":"uint256"}]},{"inputs":[{"internalType":"string","name":"urlOrAlias","type":"string"},{"internalType":"bytes32","name":"txHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"createSelectFork","outputs":[{"internalType":"uint256","name":"forkId","type":"uint256"}]},{"inputs":[{"internalType":"string","name":"urlOrAlias","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"createSelectFork","outputs":[{"internalType":"uint256","name":"forkId","type":"uint256"}]},{"inputs":[{"internalType":"string","name":"walletLabel","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"createWallet","outputs":[{"internalType":"struct VmSafe.Wallet","name":"wallet","type":"tuple","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"publicKeyX","type":"uint256"},{"internalType":"uint256","name":"publicKeyY","type":"uint256"},{"internalType":"uint256","name":"privateKey","type":"uint256"}]}]},{"inputs":[{"internalType":"uint256","name":"privateKey","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"createWallet","outputs":[{"internalType":"struct VmSafe.Wallet","name":"wallet","type":"tuple","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"publicKeyX","type":"uint256"},{"internalType":"uint256","name":"publicKeyY","type":"uint256"},{"internalType":"uint256","name":"privateKey","type":"uint256"}]}]},{"inputs":[{"internalType":"uint256","name":"privateKey","type":"uint256"},{"internalType":"string","name":"walletLabel","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"createWallet","outputs":[{"internalType":"struct VmSafe.Wallet","name":"wallet","type":"tuple","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"publicKeyX","type":"uint256"},{"internalType":"uint256","name":"publicKeyY","type":"uint256"},{"internalType":"uint256","name":"privateKey","type":"uint256"}]}]},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"newBalance","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"deal"},{"inputs":[{"internalType":"uint256","name":"snapshotId","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"deleteSnapshot","outputs":[{"internalType":"bool","name":"success","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"deleteSnapshots"},{"inputs":[{"internalType":"uint256","name":"snapshotId","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"deleteStateSnapshot","outputs":[{"internalType":"bool","name":"success","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"deleteStateSnapshots"},{"inputs":[{"internalType":"string","name":"artifactPath","type":"string"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"deployCode","outputs":[{"internalType":"address","name":"deployedAddress","type":"address"}]},{"inputs":[{"internalType":"string","name":"artifactPath","type":"string"},{"internalType":"bytes","name":"constructorArgs","type":"bytes"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"deployCode","outputs":[{"internalType":"address","name":"deployedAddress","type":"address"}]},{"inputs":[{"internalType":"string","name":"artifactPath","type":"string"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"deployCode","outputs":[{"internalType":"address","name":"deployedAddress","type":"address"}]},{"inputs":[{"internalType":"string","name":"artifactPath","type":"string"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"deployCode","outputs":[{"internalType":"address","name":"deployedAddress","type":"address"}]},{"inputs":[{"internalType":"string","name":"artifactPath","type":"string"},{"internalType":"bytes","name":"constructorArgs","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"deployCode","outputs":[{"internalType":"address","name":"deployedAddress","type":"address"}]},{"inputs":[{"internalType":"string","name":"artifactPath","type":"string"},{"internalType":"bytes","name":"constructorArgs","type":"bytes"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"deployCode","outputs":[{"internalType":"address","name":"deployedAddress","type":"address"}]},{"inputs":[{"internalType":"string","name":"artifactPath","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"deployCode","outputs":[{"internalType":"address","name":"deployedAddress","type":"address"}]},{"inputs":[{"internalType":"string","name":"artifactPath","type":"string"},{"internalType":"bytes","name":"constructorArgs","type":"bytes"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"deployCode","outputs":[{"internalType":"address","name":"deployedAddress","type":"address"}]},{"inputs":[{"internalType":"string","name":"mnemonic","type":"string"},{"internalType":"string","name":"derivationPath","type":"string"},{"internalType":"uint32","name":"index","type":"uint32"},{"internalType":"string","name":"language","type":"string"}],"stateMutability":"pure","type":"function","name":"deriveKey","outputs":[{"internalType":"uint256","name":"privateKey","type":"uint256"}]},{"inputs":[{"internalType":"string","name":"mnemonic","type":"string"},{"internalType":"uint32","name":"index","type":"uint32"},{"internalType":"string","name":"language","type":"string"}],"stateMutability":"pure","type":"function","name":"deriveKey","outputs":[{"internalType":"uint256","name":"privateKey","type":"uint256"}]},{"inputs":[{"internalType":"string","name":"mnemonic","type":"string"},{"internalType":"uint32","name":"index","type":"uint32"}],"stateMutability":"pure","type":"function","name":"deriveKey","outputs":[{"internalType":"uint256","name":"privateKey","type":"uint256"}]},{"inputs":[{"internalType":"string","name":"mnemonic","type":"string"},{"internalType":"string","name":"derivationPath","type":"string"},{"internalType":"uint32","name":"index","type":"uint32"}],"stateMutability":"pure","type":"function","name":"deriveKey","outputs":[{"internalType":"uint256","name":"privateKey","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"newDifficulty","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"difficulty"},{"inputs":[{"internalType":"string","name":"pathToStateJson","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"dumpState"},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"stateMutability":"pure","type":"function","name":"ensNamehash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"stateMutability":"view","type":"function","name":"envAddress","outputs":[{"internalType":"address","name":"value","type":"address"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"delim","type":"string"}],"stateMutability":"view","type":"function","name":"envAddress","outputs":[{"internalType":"address[]","name":"value","type":"address[]"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"stateMutability":"view","type":"function","name":"envBool","outputs":[{"internalType":"bool","name":"value","type":"bool"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"delim","type":"string"}],"stateMutability":"view","type":"function","name":"envBool","outputs":[{"internalType":"bool[]","name":"value","type":"bool[]"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"stateMutability":"view","type":"function","name":"envBytes","outputs":[{"internalType":"bytes","name":"value","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"delim","type":"string"}],"stateMutability":"view","type":"function","name":"envBytes","outputs":[{"internalType":"bytes[]","name":"value","type":"bytes[]"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"delim","type":"string"}],"stateMutability":"view","type":"function","name":"envBytes32","outputs":[{"internalType":"bytes32[]","name":"value","type":"bytes32[]"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"stateMutability":"view","type":"function","name":"envBytes32","outputs":[{"internalType":"bytes32","name":"value","type":"bytes32"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"stateMutability":"view","type":"function","name":"envExists","outputs":[{"internalType":"bool","name":"result","type":"bool"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"delim","type":"string"}],"stateMutability":"view","type":"function","name":"envInt","outputs":[{"internalType":"int256[]","name":"value","type":"int256[]"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"stateMutability":"view","type":"function","name":"envInt","outputs":[{"internalType":"int256","name":"value","type":"int256"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"delim","type":"string"},{"internalType":"bytes32[]","name":"defaultValue","type":"bytes32[]"}],"stateMutability":"view","type":"function","name":"envOr","outputs":[{"internalType":"bytes32[]","name":"value","type":"bytes32[]"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"delim","type":"string"},{"internalType":"int256[]","name":"defaultValue","type":"int256[]"}],"stateMutability":"view","type":"function","name":"envOr","outputs":[{"internalType":"int256[]","name":"value","type":"int256[]"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"bool","name":"defaultValue","type":"bool"}],"stateMutability":"view","type":"function","name":"envOr","outputs":[{"internalType":"bool","name":"value","type":"bool"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"address","name":"defaultValue","type":"address"}],"stateMutability":"view","type":"function","name":"envOr","outputs":[{"internalType":"address","name":"value","type":"address"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"defaultValue","type":"uint256"}],"stateMutability":"view","type":"function","name":"envOr","outputs":[{"internalType":"uint256","name":"value","type":"uint256"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"delim","type":"string"},{"internalType":"bytes[]","name":"defaultValue","type":"bytes[]"}],"stateMutability":"view","type":"function","name":"envOr","outputs":[{"internalType":"bytes[]","name":"value","type":"bytes[]"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"delim","type":"string"},{"internalType":"uint256[]","name":"defaultValue","type":"uint256[]"}],"stateMutability":"view","type":"function","name":"envOr","outputs":[{"internalType":"uint256[]","name":"value","type":"uint256[]"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"delim","type":"string"},{"internalType":"string[]","name":"defaultValue","type":"string[]"}],"stateMutability":"view","type":"function","name":"envOr","outputs":[{"internalType":"string[]","name":"value","type":"string[]"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"bytes","name":"defaultValue","type":"bytes"}],"stateMutability":"view","type":"function","name":"envOr","outputs":[{"internalType":"bytes","name":"value","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"bytes32","name":"defaultValue","type":"bytes32"}],"stateMutability":"view","type":"function","name":"envOr","outputs":[{"internalType":"bytes32","name":"value","type":"bytes32"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"int256","name":"defaultValue","type":"int256"}],"stateMutability":"view","type":"function","name":"envOr","outputs":[{"internalType":"int256","name":"value","type":"int256"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"delim","type":"string"},{"internalType":"address[]","name":"defaultValue","type":"address[]"}],"stateMutability":"view","type":"function","name":"envOr","outputs":[{"internalType":"address[]","name":"value","type":"address[]"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"defaultValue","type":"string"}],"stateMutability":"view","type":"function","name":"envOr","outputs":[{"internalType":"string","name":"value","type":"string"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"delim","type":"string"},{"internalType":"bool[]","name":"defaultValue","type":"bool[]"}],"stateMutability":"view","type":"function","name":"envOr","outputs":[{"internalType":"bool[]","name":"value","type":"bool[]"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"delim","type":"string"}],"stateMutability":"view","type":"function","name":"envString","outputs":[{"internalType":"string[]","name":"value","type":"string[]"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"stateMutability":"view","type":"function","name":"envString","outputs":[{"internalType":"string","name":"value","type":"string"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"stateMutability":"view","type":"function","name":"envUint","outputs":[{"internalType":"uint256","name":"value","type":"uint256"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"delim","type":"string"}],"stateMutability":"view","type":"function","name":"envUint","outputs":[{"internalType":"uint256[]","name":"value","type":"uint256[]"}]},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"newRuntimeBytecode","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"etch"},{"inputs":[{"internalType":"uint256","name":"fromBlock","type":"uint256"},{"internalType":"uint256","name":"toBlock","type":"uint256"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes32[]","name":"topics","type":"bytes32[]"}],"stateMutability":"nonpayable","type":"function","name":"eth_getLogs","outputs":[{"internalType":"struct VmSafe.EthGetLogs[]","name":"logs","type":"tuple[]","components":[{"internalType":"address","name":"emitter","type":"address"},{"internalType":"bytes32[]","name":"topics","type":"bytes32[]"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes32","name":"blockHash","type":"bytes32"},{"internalType":"uint64","name":"blockNumber","type":"uint64"},{"internalType":"bytes32","name":"transactionHash","type":"bytes32"},{"internalType":"uint64","name":"transactionIndex","type":"uint64"},{"internalType":"uint256","name":"logIndex","type":"uint256"},{"internalType":"bool","name":"removed","type":"bool"}]}]},{"inputs":[{"internalType":"string","name":"path","type":"string"}],"stateMutability":"view","type":"function","name":"exists","outputs":[{"internalType":"bool","name":"result","type":"bool"}]},{"inputs":[{"internalType":"address","name":"callee","type":"address"},{"internalType":"uint256","name":"msgValue","type":"uint256"},{"internalType":"uint64","name":"gas","type":"uint64"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"expectCall"},{"inputs":[{"internalType":"address","name":"callee","type":"address"},{"internalType":"uint256","name":"msgValue","type":"uint256"},{"internalType":"uint64","name":"gas","type":"uint64"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint64","name":"count","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"expectCall"},{"inputs":[{"internalType":"address","name":"callee","type":"address"},{"internalType":"uint256","name":"msgValue","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint64","name":"count","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"expectCall"},{"inputs":[{"internalType":"address","name":"callee","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"expectCall"},{"inputs":[{"internalType":"address","name":"callee","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint64","name":"count","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"expectCall"},{"inputs":[{"internalType":"address","name":"callee","type":"address"},{"internalType":"uint256","name":"msgValue","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"expectCall"},{"inputs":[{"internalType":"address","name":"callee","type":"address"},{"internalType":"uint256","name":"msgValue","type":"uint256"},{"internalType":"uint64","name":"minGas","type":"uint64"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"expectCallMinGas"},{"inputs":[{"internalType":"address","name":"callee","type":"address"},{"internalType":"uint256","name":"msgValue","type":"uint256"},{"internalType":"uint64","name":"minGas","type":"uint64"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint64","name":"count","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"expectCallMinGas"},{"inputs":[{"internalType":"bytes","name":"bytecode","type":"bytes"},{"internalType":"address","name":"deployer","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"expectCreate"},{"inputs":[{"internalType":"bytes","name":"bytecode","type":"bytes"},{"internalType":"address","name":"deployer","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"expectCreate2"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"expectEmit"},{"inputs":[{"internalType":"bool","name":"checkTopic1","type":"bool"},{"internalType":"bool","name":"checkTopic2","type":"bool"},{"internalType":"bool","name":"checkTopic3","type":"bool"},{"internalType":"bool","name":"checkData","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"expectEmit"},{"inputs":[{"internalType":"uint64","name":"count","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"expectEmit"},{"inputs":[{"internalType":"bool","name":"checkTopic1","type":"bool"},{"internalType":"bool","name":"checkTopic2","type":"bool"},{"internalType":"bool","name":"checkTopic3","type":"bool"},{"internalType":"bool","name":"checkData","type":"bool"},{"internalType":"uint64","name":"count","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"expectEmit"},{"inputs":[{"internalType":"bool","name":"checkTopic1","type":"bool"},{"internalType":"bool","name":"checkTopic2","type":"bool"},{"internalType":"bool","name":"checkTopic3","type":"bool"},{"internalType":"bool","name":"checkData","type":"bool"},{"internalType":"address","name":"emitter","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"expectEmit"},{"inputs":[{"internalType":"address","name":"emitter","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"expectEmit"},{"inputs":[{"internalType":"address","name":"emitter","type":"address"},{"internalType":"uint64","name":"count","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"expectEmit"},{"inputs":[{"internalType":"bool","name":"checkTopic1","type":"bool"},{"internalType":"bool","name":"checkTopic2","type":"bool"},{"internalType":"bool","name":"checkTopic3","type":"bool"},{"internalType":"bool","name":"checkData","type":"bool"},{"internalType":"address","name":"emitter","type":"address"},{"internalType":"uint64","name":"count","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"expectEmit"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"expectEmitAnonymous"},{"inputs":[{"internalType":"address","name":"emitter","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"expectEmitAnonymous"},{"inputs":[{"internalType":"bool","name":"checkTopic0","type":"bool"},{"internalType":"bool","name":"checkTopic1","type":"bool"},{"internalType":"bool","name":"checkTopic2","type":"bool"},{"internalType":"bool","name":"checkTopic3","type":"bool"},{"internalType":"bool","name":"checkData","type":"bool"},{"internalType":"address","name":"emitter","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"expectEmitAnonymous"},{"inputs":[{"internalType":"bool","name":"checkTopic0","type":"bool"},{"internalType":"bool","name":"checkTopic1","type":"bool"},{"internalType":"bool","name":"checkTopic2","type":"bool"},{"internalType":"bool","name":"checkTopic3","type":"bool"},{"internalType":"bool","name":"checkData","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"expectEmitAnonymous"},{"inputs":[{"internalType":"bytes4","name":"revertData","type":"bytes4"}],"stateMutability":"nonpayable","type":"function","name":"expectPartialRevert"},{"inputs":[{"internalType":"bytes4","name":"revertData","type":"bytes4"},{"internalType":"address","name":"reverter","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"expectPartialRevert"},{"inputs":[{"internalType":"address","name":"reverter","type":"address"},{"internalType":"uint64","name":"count","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"expectRevert"},{"inputs":[{"internalType":"bytes4","name":"revertData","type":"bytes4"},{"internalType":"address","name":"reverter","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"expectRevert"},{"inputs":[{"internalType":"bytes","name":"revertData","type":"bytes"},{"internalType":"uint64","name":"count","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"expectRevert"},{"inputs":[{"internalType":"uint64","name":"count","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"expectRevert"},{"inputs":[{"internalType":"bytes","name":"revertData","type":"bytes"},{"internalType":"address","name":"reverter","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"expectRevert"},{"inputs":[{"internalType":"bytes4","name":"revertData","type":"bytes4"},{"internalType":"address","name":"reverter","type":"address"},{"internalType":"uint64","name":"count","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"expectRevert"},{"inputs":[{"internalType":"bytes4","name":"revertData","type":"bytes4"}],"stateMutability":"nonpayable","type":"function","name":"expectRevert"},{"inputs":[{"internalType":"bytes","name":"revertData","type":"bytes"},{"internalType":"address","name":"reverter","type":"address"},{"internalType":"uint64","name":"count","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"expectRevert"},{"inputs":[{"internalType":"address","name":"reverter","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"expectRevert"},{"inputs":[{"internalType":"bytes4","name":"revertData","type":"bytes4"},{"internalType":"uint64","name":"count","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"expectRevert"},{"inputs":[{"internalType":"bytes","name":"revertData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"expectRevert"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"expectRevert"},{"inputs":[{"internalType":"uint64","name":"min","type":"uint64"},{"internalType":"uint64","name":"max","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"expectSafeMemory"},{"inputs":[{"internalType":"uint64","name":"min","type":"uint64"},{"internalType":"uint64","name":"max","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"expectSafeMemoryCall"},{"inputs":[{"internalType":"uint256","name":"newBasefee","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"fee"},{"inputs":[{"internalType":"string[]","name":"commandInput","type":"string[]"}],"stateMutability":"nonpayable","type":"function","name":"ffi","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"version","type":"string"}],"stateMutability":"view","type":"function","name":"foundryVersionAtLeast","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"string","name":"version","type":"string"}],"stateMutability":"view","type":"function","name":"foundryVersionCmp","outputs":[{"internalType":"int256","name":"","type":"int256"}]},{"inputs":[{"internalType":"string","name":"path","type":"string"}],"stateMutability":"view","type":"function","name":"fsMetadata","outputs":[{"internalType":"struct VmSafe.FsMetadata","name":"metadata","type":"tuple","components":[{"internalType":"bool","name":"isDir","type":"bool"},{"internalType":"bool","name":"isSymlink","type":"bool"},{"internalType":"uint256","name":"length","type":"uint256"},{"internalType":"bool","name":"readOnly","type":"bool"},{"internalType":"uint256","name":"modified","type":"uint256"},{"internalType":"uint256","name":"accessed","type":"uint256"},{"internalType":"uint256","name":"created","type":"uint256"}]}]},{"inputs":[{"internalType":"bytes","name":"code","type":"bytes"}],"stateMutability":"view","type":"function","name":"getArtifactPathByCode","outputs":[{"internalType":"string","name":"path","type":"string"}]},{"inputs":[{"internalType":"bytes","name":"deployedCode","type":"bytes"}],"stateMutability":"view","type":"function","name":"getArtifactPathByDeployedCode","outputs":[{"internalType":"string","name":"path","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getBlobBaseFee","outputs":[{"internalType":"uint256","name":"blobBaseFee","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getBlobhashes","outputs":[{"internalType":"bytes32[]","name":"hashes","type":"bytes32[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getBlockNumber","outputs":[{"internalType":"uint256","name":"height","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getBlockTimestamp","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}]},{"inputs":[{"internalType":"string","name":"contractName","type":"string"},{"internalType":"uint64","name":"chainId","type":"uint64"},{"internalType":"enum VmSafe.BroadcastTxType","name":"txType","type":"uint8"}],"stateMutability":"view","type":"function","name":"getBroadcast","outputs":[{"internalType":"struct VmSafe.BroadcastTxSummary","name":"","type":"tuple","components":[{"internalType":"bytes32","name":"txHash","type":"bytes32"},{"internalType":"enum VmSafe.BroadcastTxType","name":"txType","type":"uint8"},{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint64","name":"blockNumber","type":"uint64"},{"internalType":"bool","name":"success","type":"bool"}]}]},{"inputs":[{"internalType":"string","name":"contractName","type":"string"},{"internalType":"uint64","name":"chainId","type":"uint64"}],"stateMutability":"view","type":"function","name":"getBroadcasts","outputs":[{"internalType":"struct VmSafe.BroadcastTxSummary[]","name":"","type":"tuple[]","components":[{"internalType":"bytes32","name":"txHash","type":"bytes32"},{"internalType":"enum VmSafe.BroadcastTxType","name":"txType","type":"uint8"},{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint64","name":"blockNumber","type":"uint64"},{"internalType":"bool","name":"success","type":"bool"}]}]},{"inputs":[{"internalType":"string","name":"contractName","type":"string"},{"internalType":"uint64","name":"chainId","type":"uint64"},{"internalType":"enum VmSafe.BroadcastTxType","name":"txType","type":"uint8"}],"stateMutability":"view","type":"function","name":"getBroadcasts","outputs":[{"internalType":"struct VmSafe.BroadcastTxSummary[]","name":"","type":"tuple[]","components":[{"internalType":"bytes32","name":"txHash","type":"bytes32"},{"internalType":"enum VmSafe.BroadcastTxType","name":"txType","type":"uint8"},{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint64","name":"blockNumber","type":"uint64"},{"internalType":"bool","name":"success","type":"bool"}]}]},{"inputs":[{"internalType":"string","name":"chainAlias","type":"string"}],"stateMutability":"view","type":"function","name":"getChain","outputs":[{"internalType":"struct VmSafe.Chain","name":"chain","type":"tuple","components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"string","name":"chainAlias","type":"string"},{"internalType":"string","name":"rpcUrl","type":"string"}]}]},{"inputs":[{"internalType":"uint256","name":"chainId","type":"uint256"}],"stateMutability":"view","type":"function","name":"getChain","outputs":[{"internalType":"struct VmSafe.Chain","name":"chain","type":"tuple","components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"string","name":"chainAlias","type":"string"},{"internalType":"string","name":"rpcUrl","type":"string"}]}]},{"inputs":[{"internalType":"string","name":"artifactPath","type":"string"}],"stateMutability":"view","type":"function","name":"getCode","outputs":[{"internalType":"bytes","name":"creationBytecode","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"artifactPath","type":"string"}],"stateMutability":"view","type":"function","name":"getDeployedCode","outputs":[{"internalType":"bytes","name":"runtimeBytecode","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"contractName","type":"string"},{"internalType":"uint64","name":"chainId","type":"uint64"}],"stateMutability":"view","type":"function","name":"getDeployment","outputs":[{"internalType":"address","name":"deployedAddress","type":"address"}]},{"inputs":[{"internalType":"string","name":"contractName","type":"string"}],"stateMutability":"view","type":"function","name":"getDeployment","outputs":[{"internalType":"address","name":"deployedAddress","type":"address"}]},{"inputs":[{"internalType":"string","name":"contractName","type":"string"},{"internalType":"uint64","name":"chainId","type":"uint64"}],"stateMutability":"view","type":"function","name":"getDeployments","outputs":[{"internalType":"address[]","name":"deployedAddresses","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getFoundryVersion","outputs":[{"internalType":"string","name":"version","type":"string"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"getLabel","outputs":[{"internalType":"string","name":"currentLabel","type":"string"}]},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes32","name":"elementSlot","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"getMappingKeyAndParentOf","outputs":[{"internalType":"bool","name":"found","type":"bool"},{"internalType":"bytes32","name":"key","type":"bytes32"},{"internalType":"bytes32","name":"parent","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes32","name":"mappingSlot","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"getMappingLength","outputs":[{"internalType":"uint256","name":"length","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes32","name":"mappingSlot","type":"bytes32"},{"internalType":"uint256","name":"idx","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"getMappingSlotAt","outputs":[{"internalType":"bytes32","name":"value","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"getNonce","outputs":[{"internalType":"uint64","name":"nonce","type":"uint64"}]},{"inputs":[{"internalType":"struct VmSafe.Wallet","name":"wallet","type":"tuple","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"publicKeyX","type":"uint256"},{"internalType":"uint256","name":"publicKeyY","type":"uint256"},{"internalType":"uint256","name":"privateKey","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"getNonce","outputs":[{"internalType":"uint64","name":"nonce","type":"uint64"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"getRecordedLogs","outputs":[{"internalType":"struct VmSafe.Log[]","name":"logs","type":"tuple[]","components":[{"internalType":"bytes32[]","name":"topics","type":"bytes32[]"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"address","name":"emitter","type":"address"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getStateDiff","outputs":[{"internalType":"string","name":"diff","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getStateDiffJson","outputs":[{"internalType":"string","name":"diff","type":"string"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"getWallets","outputs":[{"internalType":"address[]","name":"wallets","type":"address[]"}]},{"inputs":[{"internalType":"string","name":"input","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"indexOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"interceptInitcode"},{"inputs":[{"internalType":"enum VmSafe.ForgeContext","name":"context","type":"uint8"}],"stateMutability":"view","type":"function","name":"isContext","outputs":[{"internalType":"bool","name":"result","type":"bool"}]},{"inputs":[{"internalType":"string","name":"path","type":"string"}],"stateMutability":"view","type":"function","name":"isDir","outputs":[{"internalType":"bool","name":"result","type":"bool"}]},{"inputs":[{"internalType":"string","name":"path","type":"string"}],"stateMutability":"view","type":"function","name":"isFile","outputs":[{"internalType":"bool","name":"result","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"isPersistent","outputs":[{"internalType":"bool","name":"persistent","type":"bool"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"view","type":"function","name":"keyExists","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"view","type":"function","name":"keyExistsJson","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"view","type":"function","name":"keyExistsToml","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"string","name":"newLabel","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"label"},{"inputs":[],"stateMutability":"view","type":"function","name":"lastCallGas","outputs":[{"internalType":"struct VmSafe.Gas","name":"gas","type":"tuple","components":[{"internalType":"uint64","name":"gasLimit","type":"uint64"},{"internalType":"uint64","name":"gasTotalUsed","type":"uint64"},{"internalType":"uint64","name":"gasMemoryUsed","type":"uint64"},{"internalType":"int64","name":"gasRefunded","type":"int64"},{"internalType":"uint64","name":"gasRemaining","type":"uint64"}]}]},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes32","name":"slot","type":"bytes32"}],"stateMutability":"view","type":"function","name":"load","outputs":[{"internalType":"bytes32","name":"data","type":"bytes32"}]},{"inputs":[{"internalType":"string","name":"pathToAllocsJson","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"loadAllocs"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"makePersistent"},{"inputs":[{"internalType":"address","name":"account0","type":"address"},{"internalType":"address","name":"account1","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"makePersistent"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"makePersistent"},{"inputs":[{"internalType":"address","name":"account0","type":"address"},{"internalType":"address","name":"account1","type":"address"},{"internalType":"address","name":"account2","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"makePersistent"},{"inputs":[{"internalType":"address","name":"callee","type":"address"},{"internalType":"bytes4","name":"data","type":"bytes4"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"mockCall"},{"inputs":[{"internalType":"address","name":"callee","type":"address"},{"internalType":"uint256","name":"msgValue","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"mockCall"},{"inputs":[{"internalType":"address","name":"callee","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"mockCall"},{"inputs":[{"internalType":"address","name":"callee","type":"address"},{"internalType":"uint256","name":"msgValue","type":"uint256"},{"internalType":"bytes4","name":"data","type":"bytes4"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"mockCall"},{"inputs":[{"internalType":"address","name":"callee","type":"address"},{"internalType":"bytes4","name":"data","type":"bytes4"},{"internalType":"bytes","name":"revertData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"mockCallRevert"},{"inputs":[{"internalType":"address","name":"callee","type":"address"},{"internalType":"uint256","name":"msgValue","type":"uint256"},{"internalType":"bytes4","name":"data","type":"bytes4"},{"internalType":"bytes","name":"revertData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"mockCallRevert"},{"inputs":[{"internalType":"address","name":"callee","type":"address"},{"internalType":"uint256","name":"msgValue","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes","name":"revertData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"mockCallRevert"},{"inputs":[{"internalType":"address","name":"callee","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes","name":"revertData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"mockCallRevert"},{"inputs":[{"internalType":"address","name":"callee","type":"address"},{"internalType":"uint256","name":"msgValue","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes[]","name":"returnData","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function","name":"mockCalls"},{"inputs":[{"internalType":"address","name":"callee","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes[]","name":"returnData","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function","name":"mockCalls"},{"inputs":[{"internalType":"address","name":"callee","type":"address"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"mockFunction"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"noAccessList"},{"inputs":[{"internalType":"string","name":"stringifiedValue","type":"string"}],"stateMutability":"pure","type":"function","name":"parseAddress","outputs":[{"internalType":"address","name":"parsedValue","type":"address"}]},{"inputs":[{"internalType":"string","name":"stringifiedValue","type":"string"}],"stateMutability":"pure","type":"function","name":"parseBool","outputs":[{"internalType":"bool","name":"parsedValue","type":"bool"}]},{"inputs":[{"internalType":"string","name":"stringifiedValue","type":"string"}],"stateMutability":"pure","type":"function","name":"parseBytes","outputs":[{"internalType":"bytes","name":"parsedValue","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"stringifiedValue","type":"string"}],"stateMutability":"pure","type":"function","name":"parseBytes32","outputs":[{"internalType":"bytes32","name":"parsedValue","type":"bytes32"}]},{"inputs":[{"internalType":"string","name":"stringifiedValue","type":"string"}],"stateMutability":"pure","type":"function","name":"parseInt","outputs":[{"internalType":"int256","name":"parsedValue","type":"int256"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"}],"stateMutability":"pure","type":"function","name":"parseJson","outputs":[{"internalType":"bytes","name":"abiEncodedData","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseJson","outputs":[{"internalType":"bytes","name":"abiEncodedData","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseJsonAddress","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseJsonAddressArray","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseJsonBool","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseJsonBoolArray","outputs":[{"internalType":"bool[]","name":"","type":"bool[]"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseJsonBytes","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseJsonBytes32","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseJsonBytes32Array","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseJsonBytesArray","outputs":[{"internalType":"bytes[]","name":"","type":"bytes[]"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseJsonInt","outputs":[{"internalType":"int256","name":"","type":"int256"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseJsonIntArray","outputs":[{"internalType":"int256[]","name":"","type":"int256[]"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseJsonKeys","outputs":[{"internalType":"string[]","name":"keys","type":"string[]"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseJsonString","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseJsonStringArray","outputs":[{"internalType":"string[]","name":"","type":"string[]"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"typeDescription","type":"string"}],"stateMutability":"pure","type":"function","name":"parseJsonType","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"key","type":"string"},{"internalType":"string","name":"typeDescription","type":"string"}],"stateMutability":"pure","type":"function","name":"parseJsonType","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"key","type":"string"},{"internalType":"string","name":"typeDescription","type":"string"}],"stateMutability":"pure","type":"function","name":"parseJsonTypeArray","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseJsonUint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseJsonUintArray","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseToml","outputs":[{"internalType":"bytes","name":"abiEncodedData","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"}],"stateMutability":"pure","type":"function","name":"parseToml","outputs":[{"internalType":"bytes","name":"abiEncodedData","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseTomlAddress","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseTomlAddressArray","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseTomlBool","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseTomlBoolArray","outputs":[{"internalType":"bool[]","name":"","type":"bool[]"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseTomlBytes","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseTomlBytes32","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseTomlBytes32Array","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseTomlBytesArray","outputs":[{"internalType":"bytes[]","name":"","type":"bytes[]"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseTomlInt","outputs":[{"internalType":"int256","name":"","type":"int256"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseTomlIntArray","outputs":[{"internalType":"int256[]","name":"","type":"int256[]"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseTomlKeys","outputs":[{"internalType":"string[]","name":"keys","type":"string[]"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseTomlString","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseTomlStringArray","outputs":[{"internalType":"string[]","name":"","type":"string[]"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"},{"internalType":"string","name":"typeDescription","type":"string"}],"stateMutability":"pure","type":"function","name":"parseTomlType","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"},{"internalType":"string","name":"key","type":"string"},{"internalType":"string","name":"typeDescription","type":"string"}],"stateMutability":"pure","type":"function","name":"parseTomlType","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"},{"internalType":"string","name":"key","type":"string"},{"internalType":"string","name":"typeDescription","type":"string"}],"stateMutability":"pure","type":"function","name":"parseTomlTypeArray","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseTomlUint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseTomlUintArray","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}]},{"inputs":[{"internalType":"string","name":"stringifiedValue","type":"string"}],"stateMutability":"pure","type":"function","name":"parseUint","outputs":[{"internalType":"uint256","name":"parsedValue","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"pauseGasMetering"},{"inputs":[],"stateMutability":"view","type":"function","name":"pauseTracing"},{"inputs":[{"internalType":"address","name":"msgSender","type":"address"},{"internalType":"address","name":"txOrigin","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"prank"},{"inputs":[{"internalType":"address","name":"msgSender","type":"address"},{"internalType":"address","name":"txOrigin","type":"address"},{"internalType":"bool","name":"delegateCall","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"prank"},{"inputs":[{"internalType":"address","name":"msgSender","type":"address"},{"internalType":"bool","name":"delegateCall","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"prank"},{"inputs":[{"internalType":"address","name":"msgSender","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"prank"},{"inputs":[{"internalType":"bytes32","name":"newPrevrandao","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"prevrandao"},{"inputs":[{"internalType":"uint256","name":"newPrevrandao","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"prevrandao"},{"inputs":[],"stateMutability":"view","type":"function","name":"projectRoot","outputs":[{"internalType":"string","name":"path","type":"string"}]},{"inputs":[{"internalType":"string","name":"promptText","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"prompt","outputs":[{"internalType":"string","name":"input","type":"string"}]},{"inputs":[{"internalType":"string","name":"promptText","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"promptAddress","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"string","name":"promptText","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"promptSecret","outputs":[{"internalType":"string","name":"input","type":"string"}]},{"inputs":[{"internalType":"string","name":"promptText","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"promptSecretUint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"string","name":"promptText","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"promptUint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"privateKey","type":"uint256"}],"stateMutability":"pure","type":"function","name":"publicKeyP256","outputs":[{"internalType":"uint256","name":"publicKeyX","type":"uint256"},{"internalType":"uint256","name":"publicKeyY","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"randomAddress","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"randomBool","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"len","type":"uint256"}],"stateMutability":"view","type":"function","name":"randomBytes","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"randomBytes4","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"randomBytes8","outputs":[{"internalType":"bytes8","name":"","type":"bytes8"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"randomInt","outputs":[{"internalType":"int256","name":"","type":"int256"}]},{"inputs":[{"internalType":"uint256","name":"bits","type":"uint256"}],"stateMutability":"view","type":"function","name":"randomInt","outputs":[{"internalType":"int256","name":"","type":"int256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"randomUint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"bits","type":"uint256"}],"stateMutability":"view","type":"function","name":"randomUint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"min","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"randomUint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"readCallers","outputs":[{"internalType":"enum VmSafe.CallerMode","name":"callerMode","type":"uint8"},{"internalType":"address","name":"msgSender","type":"address"},{"internalType":"address","name":"txOrigin","type":"address"}]},{"inputs":[{"internalType":"string","name":"path","type":"string"},{"internalType":"uint64","name":"maxDepth","type":"uint64"}],"stateMutability":"view","type":"function","name":"readDir","outputs":[{"internalType":"struct VmSafe.DirEntry[]","name":"entries","type":"tuple[]","components":[{"internalType":"string","name":"errorMessage","type":"string"},{"internalType":"string","name":"path","type":"string"},{"internalType":"uint64","name":"depth","type":"uint64"},{"internalType":"bool","name":"isDir","type":"bool"},{"internalType":"bool","name":"isSymlink","type":"bool"}]}]},{"inputs":[{"internalType":"string","name":"path","type":"string"},{"internalType":"uint64","name":"maxDepth","type":"uint64"},{"internalType":"bool","name":"followLinks","type":"bool"}],"stateMutability":"view","type":"function","name":"readDir","outputs":[{"internalType":"struct VmSafe.DirEntry[]","name":"entries","type":"tuple[]","components":[{"internalType":"string","name":"errorMessage","type":"string"},{"internalType":"string","name":"path","type":"string"},{"internalType":"uint64","name":"depth","type":"uint64"},{"internalType":"bool","name":"isDir","type":"bool"},{"internalType":"bool","name":"isSymlink","type":"bool"}]}]},{"inputs":[{"internalType":"string","name":"path","type":"string"}],"stateMutability":"view","type":"function","name":"readDir","outputs":[{"internalType":"struct VmSafe.DirEntry[]","name":"entries","type":"tuple[]","components":[{"internalType":"string","name":"errorMessage","type":"string"},{"internalType":"string","name":"path","type":"string"},{"internalType":"uint64","name":"depth","type":"uint64"},{"internalType":"bool","name":"isDir","type":"bool"},{"internalType":"bool","name":"isSymlink","type":"bool"}]}]},{"inputs":[{"internalType":"string","name":"path","type":"string"}],"stateMutability":"view","type":"function","name":"readFile","outputs":[{"internalType":"string","name":"data","type":"string"}]},{"inputs":[{"internalType":"string","name":"path","type":"string"}],"stateMutability":"view","type":"function","name":"readFileBinary","outputs":[{"internalType":"bytes","name":"data","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"path","type":"string"}],"stateMutability":"view","type":"function","name":"readLine","outputs":[{"internalType":"string","name":"line","type":"string"}]},{"inputs":[{"internalType":"string","name":"linkPath","type":"string"}],"stateMutability":"view","type":"function","name":"readLink","outputs":[{"internalType":"string","name":"targetPath","type":"string"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"record"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"recordLogs"},{"inputs":[{"internalType":"uint256","name":"privateKey","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"rememberKey","outputs":[{"internalType":"address","name":"keyAddr","type":"address"}]},{"inputs":[{"internalType":"string","name":"mnemonic","type":"string"},{"internalType":"string","name":"derivationPath","type":"string"},{"internalType":"uint32","name":"count","type":"uint32"}],"stateMutability":"nonpayable","type":"function","name":"rememberKeys","outputs":[{"internalType":"address[]","name":"keyAddrs","type":"address[]"}]},{"inputs":[{"internalType":"string","name":"mnemonic","type":"string"},{"internalType":"string","name":"derivationPath","type":"string"},{"internalType":"string","name":"language","type":"string"},{"internalType":"uint32","name":"count","type":"uint32"}],"stateMutability":"nonpayable","type":"function","name":"rememberKeys","outputs":[{"internalType":"address[]","name":"keyAddrs","type":"address[]"}]},{"inputs":[{"internalType":"string","name":"path","type":"string"},{"internalType":"bool","name":"recursive","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"removeDir"},{"inputs":[{"internalType":"string","name":"path","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"removeFile"},{"inputs":[{"internalType":"string","name":"input","type":"string"},{"internalType":"string","name":"from","type":"string"},{"internalType":"string","name":"to","type":"string"}],"stateMutability":"pure","type":"function","name":"replace","outputs":[{"internalType":"string","name":"output","type":"string"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"resetGasMetering"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"resetNonce"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"resumeGasMetering"},{"inputs":[],"stateMutability":"view","type":"function","name":"resumeTracing"},{"inputs":[{"internalType":"uint256","name":"snapshotId","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"revertTo","outputs":[{"internalType":"bool","name":"success","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"snapshotId","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"revertToAndDelete","outputs":[{"internalType":"bool","name":"success","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"snapshotId","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"revertToState","outputs":[{"internalType":"bool","name":"success","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"snapshotId","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"revertToStateAndDelete","outputs":[{"internalType":"bool","name":"success","type":"bool"}]},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"revokePersistent"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokePersistent"},{"inputs":[{"internalType":"uint256","name":"newHeight","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"roll"},{"inputs":[{"internalType":"bytes32","name":"txHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"rollFork"},{"inputs":[{"internalType":"uint256","name":"forkId","type":"uint256"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"rollFork"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"rollFork"},{"inputs":[{"internalType":"uint256","name":"forkId","type":"uint256"},{"internalType":"bytes32","name":"txHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"rollFork"},{"inputs":[{"internalType":"string","name":"urlOrAlias","type":"string"},{"internalType":"string","name":"method","type":"string"},{"internalType":"string","name":"params","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"rpc","outputs":[{"internalType":"bytes","name":"data","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"method","type":"string"},{"internalType":"string","name":"params","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"rpc","outputs":[{"internalType":"bytes","name":"data","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"rpcAlias","type":"string"}],"stateMutability":"view","type":"function","name":"rpcUrl","outputs":[{"internalType":"string","name":"json","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"rpcUrlStructs","outputs":[{"internalType":"struct VmSafe.Rpc[]","name":"urls","type":"tuple[]","components":[{"internalType":"string","name":"key","type":"string"},{"internalType":"string","name":"url","type":"string"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"rpcUrls","outputs":[{"internalType":"string[2][]","name":"urls","type":"string[2][]"}]},{"inputs":[{"internalType":"uint256","name":"forkId","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"selectFork"},{"inputs":[{"internalType":"string","name":"objectKey","type":"string"},{"internalType":"string","name":"valueKey","type":"string"},{"internalType":"address[]","name":"values","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"serializeAddress","outputs":[{"internalType":"string","name":"json","type":"string"}]},{"inputs":[{"internalType":"string","name":"objectKey","type":"string"},{"internalType":"string","name":"valueKey","type":"string"},{"internalType":"address","name":"value","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"serializeAddress","outputs":[{"internalType":"string","name":"json","type":"string"}]},{"inputs":[{"internalType":"string","name":"objectKey","type":"string"},{"internalType":"string","name":"valueKey","type":"string"},{"internalType":"bool[]","name":"values","type":"bool[]"}],"stateMutability":"nonpayable","type":"function","name":"serializeBool","outputs":[{"internalType":"string","name":"json","type":"string"}]},{"inputs":[{"internalType":"string","name":"objectKey","type":"string"},{"internalType":"string","name":"valueKey","type":"string"},{"internalType":"bool","name":"value","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"serializeBool","outputs":[{"internalType":"string","name":"json","type":"string"}]},{"inputs":[{"internalType":"string","name":"objectKey","type":"string"},{"internalType":"string","name":"valueKey","type":"string"},{"internalType":"bytes[]","name":"values","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function","name":"serializeBytes","outputs":[{"internalType":"string","name":"json","type":"string"}]},{"inputs":[{"internalType":"string","name":"objectKey","type":"string"},{"internalType":"string","name":"valueKey","type":"string"},{"internalType":"bytes","name":"value","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"serializeBytes","outputs":[{"internalType":"string","name":"json","type":"string"}]},{"inputs":[{"internalType":"string","name":"objectKey","type":"string"},{"internalType":"string","name":"valueKey","type":"string"},{"internalType":"bytes32[]","name":"values","type":"bytes32[]"}],"stateMutability":"nonpayable","type":"function","name":"serializeBytes32","outputs":[{"internalType":"string","name":"json","type":"string"}]},{"inputs":[{"internalType":"string","name":"objectKey","type":"string"},{"internalType":"string","name":"valueKey","type":"string"},{"internalType":"bytes32","name":"value","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"serializeBytes32","outputs":[{"internalType":"string","name":"json","type":"string"}]},{"inputs":[{"internalType":"string","name":"objectKey","type":"string"},{"internalType":"string","name":"valueKey","type":"string"},{"internalType":"int256","name":"value","type":"int256"}],"stateMutability":"nonpayable","type":"function","name":"serializeInt","outputs":[{"internalType":"string","name":"json","type":"string"}]},{"inputs":[{"internalType":"string","name":"objectKey","type":"string"},{"internalType":"string","name":"valueKey","type":"string"},{"internalType":"int256[]","name":"values","type":"int256[]"}],"stateMutability":"nonpayable","type":"function","name":"serializeInt","outputs":[{"internalType":"string","name":"json","type":"string"}]},{"inputs":[{"internalType":"string","name":"objectKey","type":"string"},{"internalType":"string","name":"value","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"serializeJson","outputs":[{"internalType":"string","name":"json","type":"string"}]},{"inputs":[{"internalType":"string","name":"typeDescription","type":"string"},{"internalType":"bytes","name":"value","type":"bytes"}],"stateMutability":"pure","type":"function","name":"serializeJsonType","outputs":[{"internalType":"string","name":"json","type":"string"}]},{"inputs":[{"internalType":"string","name":"objectKey","type":"string"},{"internalType":"string","name":"valueKey","type":"string"},{"internalType":"string","name":"typeDescription","type":"string"},{"internalType":"bytes","name":"value","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"serializeJsonType","outputs":[{"internalType":"string","name":"json","type":"string"}]},{"inputs":[{"internalType":"string","name":"objectKey","type":"string"},{"internalType":"string","name":"valueKey","type":"string"},{"internalType":"string[]","name":"values","type":"string[]"}],"stateMutability":"nonpayable","type":"function","name":"serializeString","outputs":[{"internalType":"string","name":"json","type":"string"}]},{"inputs":[{"internalType":"string","name":"objectKey","type":"string"},{"internalType":"string","name":"valueKey","type":"string"},{"internalType":"string","name":"value","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"serializeString","outputs":[{"internalType":"string","name":"json","type":"string"}]},{"inputs":[{"internalType":"string","name":"objectKey","type":"string"},{"internalType":"string","name":"valueKey","type":"string"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"serializeUint","outputs":[{"internalType":"string","name":"json","type":"string"}]},{"inputs":[{"internalType":"string","name":"objectKey","type":"string"},{"internalType":"string","name":"valueKey","type":"string"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function","name":"serializeUint","outputs":[{"internalType":"string","name":"json","type":"string"}]},{"inputs":[{"internalType":"string","name":"objectKey","type":"string"},{"internalType":"string","name":"valueKey","type":"string"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"serializeUintToHex","outputs":[{"internalType":"string","name":"json","type":"string"}]},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"overwrite","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"setArbitraryStorage"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setArbitraryStorage"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"bytes32","name":"blockHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"setBlockhash"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"value","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"setEnv"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint64","name":"newNonce","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"setNonce"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint64","name":"newNonce","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"setNonceUnsafe"},{"inputs":[{"internalType":"uint256[]","name":"array","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function","name":"shuffle","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}]},{"inputs":[{"internalType":"bytes32","name":"digest","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"sign","outputs":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"bytes32","name":"digest","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"sign","outputs":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}]},{"inputs":[{"internalType":"struct VmSafe.Wallet","name":"wallet","type":"tuple","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"publicKeyX","type":"uint256"},{"internalType":"uint256","name":"publicKeyY","type":"uint256"},{"internalType":"uint256","name":"privateKey","type":"uint256"}]},{"internalType":"bytes32","name":"digest","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"sign","outputs":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}]},{"inputs":[{"internalType":"uint256","name":"privateKey","type":"uint256"},{"internalType":"bytes32","name":"digest","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"sign","outputs":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"implementation","type":"address"},{"internalType":"uint256","name":"privateKey","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"signAndAttachDelegation","outputs":[{"internalType":"struct VmSafe.SignedDelegation","name":"signedDelegation","type":"tuple","components":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"},{"internalType":"address","name":"implementation","type":"address"}]}]},{"inputs":[{"internalType":"address","name":"implementation","type":"address"},{"internalType":"uint256","name":"privateKey","type":"uint256"},{"internalType":"uint64","name":"nonce","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"signAndAttachDelegation","outputs":[{"internalType":"struct VmSafe.SignedDelegation","name":"signedDelegation","type":"tuple","components":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"},{"internalType":"address","name":"implementation","type":"address"}]}]},{"inputs":[{"internalType":"struct VmSafe.Wallet","name":"wallet","type":"tuple","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"publicKeyX","type":"uint256"},{"internalType":"uint256","name":"publicKeyY","type":"uint256"},{"internalType":"uint256","name":"privateKey","type":"uint256"}]},{"internalType":"bytes32","name":"digest","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"signCompact","outputs":[{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"vs","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"bytes32","name":"digest","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"signCompact","outputs":[{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"vs","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"digest","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"signCompact","outputs":[{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"vs","type":"bytes32"}]},{"inputs":[{"internalType":"uint256","name":"privateKey","type":"uint256"},{"internalType":"bytes32","name":"digest","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"signCompact","outputs":[{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"vs","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"implementation","type":"address"},{"internalType":"uint256","name":"privateKey","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"signDelegation","outputs":[{"internalType":"struct VmSafe.SignedDelegation","name":"signedDelegation","type":"tuple","components":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"},{"internalType":"address","name":"implementation","type":"address"}]}]},{"inputs":[{"internalType":"address","name":"implementation","type":"address"},{"internalType":"uint256","name":"privateKey","type":"uint256"},{"internalType":"uint64","name":"nonce","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"signDelegation","outputs":[{"internalType":"struct VmSafe.SignedDelegation","name":"signedDelegation","type":"tuple","components":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"},{"internalType":"address","name":"implementation","type":"address"}]}]},{"inputs":[{"internalType":"uint256","name":"privateKey","type":"uint256"},{"internalType":"bytes32","name":"digest","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"signP256","outputs":[{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}]},{"inputs":[{"internalType":"bool","name":"skipTest","type":"bool"},{"internalType":"string","name":"reason","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"skip"},{"inputs":[{"internalType":"bool","name":"skipTest","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"skip"},{"inputs":[{"internalType":"uint256","name":"duration","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"sleep"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"snapshot","outputs":[{"internalType":"uint256","name":"snapshotId","type":"uint256"}]},{"inputs":[{"internalType":"string","name":"group","type":"string"},{"internalType":"string","name":"name","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"snapshotGasLastCall","outputs":[{"internalType":"uint256","name":"gasUsed","type":"uint256"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"snapshotGasLastCall","outputs":[{"internalType":"uint256","name":"gasUsed","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"snapshotState","outputs":[{"internalType":"uint256","name":"snapshotId","type":"uint256"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"snapshotValue"},{"inputs":[{"internalType":"string","name":"group","type":"string"},{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"snapshotValue"},{"inputs":[{"internalType":"uint256[]","name":"array","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function","name":"sort","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}]},{"inputs":[{"internalType":"string","name":"input","type":"string"},{"internalType":"string","name":"delimiter","type":"string"}],"stateMutability":"pure","type":"function","name":"split","outputs":[{"internalType":"string[]","name":"outputs","type":"string[]"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"startBroadcast"},{"inputs":[{"internalType":"address","name":"signer","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"startBroadcast"},{"inputs":[{"internalType":"uint256","name":"privateKey","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"startBroadcast"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"startDebugTraceRecording"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"startMappingRecording"},{"inputs":[{"internalType":"address","name":"msgSender","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"startPrank"},{"inputs":[{"internalType":"address","name":"msgSender","type":"address"},{"internalType":"bool","name":"delegateCall","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"startPrank"},{"inputs":[{"internalType":"address","name":"msgSender","type":"address"},{"internalType":"address","name":"txOrigin","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"startPrank"},{"inputs":[{"internalType":"address","name":"msgSender","type":"address"},{"internalType":"address","name":"txOrigin","type":"address"},{"internalType":"bool","name":"delegateCall","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"startPrank"},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"startSnapshotGas"},{"inputs":[{"internalType":"string","name":"group","type":"string"},{"internalType":"string","name":"name","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"startSnapshotGas"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"startStateDiffRecording"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"stopAndReturnDebugTraceRecording","outputs":[{"internalType":"struct VmSafe.DebugStep[]","name":"step","type":"tuple[]","components":[{"internalType":"uint256[]","name":"stack","type":"uint256[]"},{"internalType":"bytes","name":"memoryInput","type":"bytes"},{"internalType":"uint8","name":"opcode","type":"uint8"},{"internalType":"uint64","name":"depth","type":"uint64"},{"internalType":"bool","name":"isOutOfGas","type":"bool"},{"internalType":"address","name":"contractAddr","type":"address"}]}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"stopAndReturnStateDiff","outputs":[{"internalType":"struct VmSafe.AccountAccess[]","name":"accountAccesses","type":"tuple[]","components":[{"internalType":"struct VmSafe.ChainInfo","name":"chainInfo","type":"tuple","components":[{"internalType":"uint256","name":"forkId","type":"uint256"},{"internalType":"uint256","name":"chainId","type":"uint256"}]},{"internalType":"enum VmSafe.AccountAccessKind","name":"kind","type":"uint8"},{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"accessor","type":"address"},{"internalType":"bool","name":"initialized","type":"bool"},{"internalType":"uint256","name":"oldBalance","type":"uint256"},{"internalType":"uint256","name":"newBalance","type":"uint256"},{"internalType":"bytes","name":"deployedCode","type":"bytes"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bool","name":"reverted","type":"bool"},{"internalType":"struct VmSafe.StorageAccess[]","name":"storageAccesses","type":"tuple[]","components":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"slot","type":"bytes32"},{"internalType":"bool","name":"isWrite","type":"bool"},{"internalType":"bytes32","name":"previousValue","type":"bytes32"},{"internalType":"bytes32","name":"newValue","type":"bytes32"},{"internalType":"bool","name":"reverted","type":"bool"}]},{"internalType":"uint64","name":"depth","type":"uint64"}]}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"stopBroadcast"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"stopExpectSafeMemory"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"stopMappingRecording"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"stopPrank"},{"inputs":[{"internalType":"string","name":"group","type":"string"},{"internalType":"string","name":"name","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"stopSnapshotGas","outputs":[{"internalType":"uint256","name":"gasUsed","type":"uint256"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"stopSnapshotGas","outputs":[{"internalType":"uint256","name":"gasUsed","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"stopSnapshotGas","outputs":[{"internalType":"uint256","name":"gasUsed","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes32","name":"slot","type":"bytes32"},{"internalType":"bytes32","name":"value","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"store"},{"inputs":[{"internalType":"string","name":"data","type":"string"}],"stateMutability":"pure","type":"function","name":"toBase64","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"pure","type":"function","name":"toBase64","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"string","name":"data","type":"string"}],"stateMutability":"pure","type":"function","name":"toBase64URL","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"pure","type":"function","name":"toBase64URL","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"string","name":"input","type":"string"}],"stateMutability":"pure","type":"function","name":"toLowercase","outputs":[{"internalType":"string","name":"output","type":"string"}]},{"inputs":[{"internalType":"address","name":"value","type":"address"}],"stateMutability":"pure","type":"function","name":"toString","outputs":[{"internalType":"string","name":"stringifiedValue","type":"string"}]},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"pure","type":"function","name":"toString","outputs":[{"internalType":"string","name":"stringifiedValue","type":"string"}]},{"inputs":[{"internalType":"bytes","name":"value","type":"bytes"}],"stateMutability":"pure","type":"function","name":"toString","outputs":[{"internalType":"string","name":"stringifiedValue","type":"string"}]},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"stateMutability":"pure","type":"function","name":"toString","outputs":[{"internalType":"string","name":"stringifiedValue","type":"string"}]},{"inputs":[{"internalType":"int256","name":"value","type":"int256"}],"stateMutability":"pure","type":"function","name":"toString","outputs":[{"internalType":"string","name":"stringifiedValue","type":"string"}]},{"inputs":[{"internalType":"bytes32","name":"value","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"toString","outputs":[{"internalType":"string","name":"stringifiedValue","type":"string"}]},{"inputs":[{"internalType":"string","name":"input","type":"string"}],"stateMutability":"pure","type":"function","name":"toUppercase","outputs":[{"internalType":"string","name":"output","type":"string"}]},{"inputs":[{"internalType":"uint256","name":"forkId","type":"uint256"},{"internalType":"bytes32","name":"txHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"transact"},{"inputs":[{"internalType":"bytes32","name":"txHash","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"transact"},{"inputs":[{"internalType":"string","name":"input","type":"string"}],"stateMutability":"pure","type":"function","name":"trim","outputs":[{"internalType":"string","name":"output","type":"string"}]},{"inputs":[{"internalType":"string[]","name":"commandInput","type":"string[]"}],"stateMutability":"nonpayable","type":"function","name":"tryFfi","outputs":[{"internalType":"struct VmSafe.FfiResult","name":"result","type":"tuple","components":[{"internalType":"int32","name":"exitCode","type":"int32"},{"internalType":"bytes","name":"stdout","type":"bytes"},{"internalType":"bytes","name":"stderr","type":"bytes"}]}]},{"inputs":[{"internalType":"uint256","name":"newGasPrice","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"txGasPrice"},{"inputs":[],"stateMutability":"view","type":"function","name":"unixTime","outputs":[{"internalType":"uint256","name":"milliseconds","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes32","name":"slot","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"warmSlot"},{"inputs":[{"internalType":"uint256","name":"newTimestamp","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"warp"},{"inputs":[{"internalType":"string","name":"path","type":"string"},{"internalType":"string","name":"data","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"writeFile"},{"inputs":[{"internalType":"string","name":"path","type":"string"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"writeFileBinary"},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"path","type":"string"},{"internalType":"string","name":"valueKey","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"writeJson"},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"path","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"writeJson"},{"inputs":[{"internalType":"string","name":"path","type":"string"},{"internalType":"string","name":"data","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"writeLine"},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"path","type":"string"},{"internalType":"string","name":"valueKey","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"writeToml"},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"path","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"writeToml"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{"accessList((address,bytes32[])[])":{"notice":"Utility cheatcode to set an EIP-2930 access list for all subsequent transactions."},"accesses(address)":{"notice":"Gets all accessed reads and write slot from a `vm.record` session, for a given address."},"activeFork()":{"notice":"Returns the identifier of the currently active fork. Reverts if no fork is currently active."},"addr(uint256)":{"notice":"Gets the address for a given private key."},"allowCheatcodes(address)":{"notice":"In forking mode, explicitly grant the given address cheatcode access."},"assertApproxEqAbs(int256,int256,uint256)":{"notice":"Compares two `int256` values. Expects difference to be less than or equal to `maxDelta`."},"assertApproxEqAbs(int256,int256,uint256,string)":{"notice":"Compares two `int256` values. Expects difference to be less than or equal to `maxDelta`. Includes error message into revert string on failure."},"assertApproxEqAbs(uint256,uint256,uint256)":{"notice":"Compares two `uint256` values. Expects difference to be less than or equal to `maxDelta`."},"assertApproxEqAbs(uint256,uint256,uint256,string)":{"notice":"Compares two `uint256` values. Expects difference to be less than or equal to `maxDelta`. Includes error message into revert string on failure."},"assertApproxEqAbsDecimal(int256,int256,uint256,uint256)":{"notice":"Compares two `int256` values. Expects difference to be less than or equal to `maxDelta`. Formats values with decimals in failure message."},"assertApproxEqAbsDecimal(int256,int256,uint256,uint256,string)":{"notice":"Compares two `int256` values. Expects difference to be less than or equal to `maxDelta`. Formats values with decimals in failure message. Includes error message into revert string on failure."},"assertApproxEqAbsDecimal(uint256,uint256,uint256,uint256)":{"notice":"Compares two `uint256` values. Expects difference to be less than or equal to `maxDelta`. Formats values with decimals in failure message."},"assertApproxEqAbsDecimal(uint256,uint256,uint256,uint256,string)":{"notice":"Compares two `uint256` values. Expects difference to be less than or equal to `maxDelta`. Formats values with decimals in failure message. Includes error message into revert string on failure."},"assertApproxEqRel(int256,int256,uint256)":{"notice":"Compares two `int256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`. `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100%"},"assertApproxEqRel(int256,int256,uint256,string)":{"notice":"Compares two `int256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`. `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100% Includes error message into revert string on failure."},"assertApproxEqRel(uint256,uint256,uint256)":{"notice":"Compares two `uint256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`. `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100%"},"assertApproxEqRel(uint256,uint256,uint256,string)":{"notice":"Compares two `uint256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`. `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100% Includes error message into revert string on failure."},"assertApproxEqRelDecimal(int256,int256,uint256,uint256)":{"notice":"Compares two `int256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`. `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100% Formats values with decimals in failure message."},"assertApproxEqRelDecimal(int256,int256,uint256,uint256,string)":{"notice":"Compares two `int256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`. `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100% Formats values with decimals in failure message. Includes error message into revert string on failure."},"assertApproxEqRelDecimal(uint256,uint256,uint256,uint256)":{"notice":"Compares two `uint256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`. `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100% Formats values with decimals in failure message."},"assertApproxEqRelDecimal(uint256,uint256,uint256,uint256,string)":{"notice":"Compares two `uint256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`. `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100% Formats values with decimals in failure message. Includes error message into revert string on failure."},"assertEq(address,address)":{"notice":"Asserts that two `address` values are equal."},"assertEq(address,address,string)":{"notice":"Asserts that two `address` values are equal and includes error message into revert string on failure."},"assertEq(address[],address[])":{"notice":"Asserts that two arrays of `address` values are equal."},"assertEq(address[],address[],string)":{"notice":"Asserts that two arrays of `address` values are equal and includes error message into revert string on failure."},"assertEq(bool,bool)":{"notice":"Asserts that two `bool` values are equal."},"assertEq(bool,bool,string)":{"notice":"Asserts that two `bool` values are equal and includes error message into revert string on failure."},"assertEq(bool[],bool[])":{"notice":"Asserts that two arrays of `bool` values are equal."},"assertEq(bool[],bool[],string)":{"notice":"Asserts that two arrays of `bool` values are equal and includes error message into revert string on failure."},"assertEq(bytes,bytes)":{"notice":"Asserts that two `bytes` values are equal."},"assertEq(bytes,bytes,string)":{"notice":"Asserts that two `bytes` values are equal and includes error message into revert string on failure."},"assertEq(bytes32,bytes32)":{"notice":"Asserts that two `bytes32` values are equal."},"assertEq(bytes32,bytes32,string)":{"notice":"Asserts that two `bytes32` values are equal and includes error message into revert string on failure."},"assertEq(bytes32[],bytes32[])":{"notice":"Asserts that two arrays of `bytes32` values are equal."},"assertEq(bytes32[],bytes32[],string)":{"notice":"Asserts that two arrays of `bytes32` values are equal and includes error message into revert string on failure."},"assertEq(bytes[],bytes[])":{"notice":"Asserts that two arrays of `bytes` values are equal."},"assertEq(bytes[],bytes[],string)":{"notice":"Asserts that two arrays of `bytes` values are equal and includes error message into revert string on failure."},"assertEq(int256,int256)":{"notice":"Asserts that two `int256` values are equal."},"assertEq(int256,int256,string)":{"notice":"Asserts that two `int256` values are equal and includes error message into revert string on failure."},"assertEq(int256[],int256[])":{"notice":"Asserts that two arrays of `int256` values are equal."},"assertEq(int256[],int256[],string)":{"notice":"Asserts that two arrays of `int256` values are equal and includes error message into revert string on failure."},"assertEq(string,string)":{"notice":"Asserts that two `string` values are equal."},"assertEq(string,string,string)":{"notice":"Asserts that two `string` values are equal and includes error message into revert string on failure."},"assertEq(string[],string[])":{"notice":"Asserts that two arrays of `string` values are equal."},"assertEq(string[],string[],string)":{"notice":"Asserts that two arrays of `string` values are equal and includes error message into revert string on failure."},"assertEq(uint256,uint256)":{"notice":"Asserts that two `uint256` values are equal."},"assertEq(uint256,uint256,string)":{"notice":"Asserts that two `uint256` values are equal and includes error message into revert string on failure."},"assertEq(uint256[],uint256[])":{"notice":"Asserts that two arrays of `uint256 values are equal."},"assertEq(uint256[],uint256[],string)":{"notice":"Asserts that two arrays of `uint256` values are equal and includes error message into revert string on failure."},"assertEqDecimal(int256,int256,uint256)":{"notice":"Asserts that two `int256` values are equal, formatting them with decimals in failure message."},"assertEqDecimal(int256,int256,uint256,string)":{"notice":"Asserts that two `int256` values are equal, formatting them with decimals in failure message. Includes error message into revert string on failure."},"assertEqDecimal(uint256,uint256,uint256)":{"notice":"Asserts that two `uint256` values are equal, formatting them with decimals in failure message."},"assertEqDecimal(uint256,uint256,uint256,string)":{"notice":"Asserts that two `uint256` values are equal, formatting them with decimals in failure message. Includes error message into revert string on failure."},"assertFalse(bool)":{"notice":"Asserts that the given condition is false."},"assertFalse(bool,string)":{"notice":"Asserts that the given condition is false and includes error message into revert string on failure."},"assertGe(int256,int256)":{"notice":"Compares two `int256` values. Expects first value to be greater than or equal to second."},"assertGe(int256,int256,string)":{"notice":"Compares two `int256` values. Expects first value to be greater than or equal to second. Includes error message into revert string on failure."},"assertGe(uint256,uint256)":{"notice":"Compares two `uint256` values. Expects first value to be greater than or equal to second."},"assertGe(uint256,uint256,string)":{"notice":"Compares two `uint256` values. Expects first value to be greater than or equal to second. Includes error message into revert string on failure."},"assertGeDecimal(int256,int256,uint256)":{"notice":"Compares two `int256` values. Expects first value to be greater than or equal to second. Formats values with decimals in failure message."},"assertGeDecimal(int256,int256,uint256,string)":{"notice":"Compares two `int256` values. Expects first value to be greater than or equal to second. Formats values with decimals in failure message. Includes error message into revert string on failure."},"assertGeDecimal(uint256,uint256,uint256)":{"notice":"Compares two `uint256` values. Expects first value to be greater than or equal to second. Formats values with decimals in failure message."},"assertGeDecimal(uint256,uint256,uint256,string)":{"notice":"Compares two `uint256` values. Expects first value to be greater than or equal to second. Formats values with decimals in failure message. Includes error message into revert string on failure."},"assertGt(int256,int256)":{"notice":"Compares two `int256` values. Expects first value to be greater than second."},"assertGt(int256,int256,string)":{"notice":"Compares two `int256` values. Expects first value to be greater than second. Includes error message into revert string on failure."},"assertGt(uint256,uint256)":{"notice":"Compares two `uint256` values. Expects first value to be greater than second."},"assertGt(uint256,uint256,string)":{"notice":"Compares two `uint256` values. Expects first value to be greater than second. Includes error message into revert string on failure."},"assertGtDecimal(int256,int256,uint256)":{"notice":"Compares two `int256` values. Expects first value to be greater than second. Formats values with decimals in failure message."},"assertGtDecimal(int256,int256,uint256,string)":{"notice":"Compares two `int256` values. Expects first value to be greater than second. Formats values with decimals in failure message. Includes error message into revert string on failure."},"assertGtDecimal(uint256,uint256,uint256)":{"notice":"Compares two `uint256` values. Expects first value to be greater than second. Formats values with decimals in failure message."},"assertGtDecimal(uint256,uint256,uint256,string)":{"notice":"Compares two `uint256` values. Expects first value to be greater than second. Formats values with decimals in failure message. Includes error message into revert string on failure."},"assertLe(int256,int256)":{"notice":"Compares two `int256` values. Expects first value to be less than or equal to second."},"assertLe(int256,int256,string)":{"notice":"Compares two `int256` values. Expects first value to be less than or equal to second. Includes error message into revert string on failure."},"assertLe(uint256,uint256)":{"notice":"Compares two `uint256` values. Expects first value to be less than or equal to second."},"assertLe(uint256,uint256,string)":{"notice":"Compares two `uint256` values. Expects first value to be less than or equal to second. Includes error message into revert string on failure."},"assertLeDecimal(int256,int256,uint256)":{"notice":"Compares two `int256` values. Expects first value to be less than or equal to second. Formats values with decimals in failure message."},"assertLeDecimal(int256,int256,uint256,string)":{"notice":"Compares two `int256` values. Expects first value to be less than or equal to second. Formats values with decimals in failure message. Includes error message into revert string on failure."},"assertLeDecimal(uint256,uint256,uint256)":{"notice":"Compares two `uint256` values. Expects first value to be less than or equal to second. Formats values with decimals in failure message."},"assertLeDecimal(uint256,uint256,uint256,string)":{"notice":"Compares two `uint256` values. Expects first value to be less than or equal to second. Formats values with decimals in failure message. Includes error message into revert string on failure."},"assertLt(int256,int256)":{"notice":"Compares two `int256` values. Expects first value to be less than second."},"assertLt(int256,int256,string)":{"notice":"Compares two `int256` values. Expects first value to be less than second. Includes error message into revert string on failure."},"assertLt(uint256,uint256)":{"notice":"Compares two `uint256` values. Expects first value to be less than second."},"assertLt(uint256,uint256,string)":{"notice":"Compares two `uint256` values. Expects first value to be less than second. Includes error message into revert string on failure."},"assertLtDecimal(int256,int256,uint256)":{"notice":"Compares two `int256` values. Expects first value to be less than second. Formats values with decimals in failure message."},"assertLtDecimal(int256,int256,uint256,string)":{"notice":"Compares two `int256` values. Expects first value to be less than second. Formats values with decimals in failure message. Includes error message into revert string on failure."},"assertLtDecimal(uint256,uint256,uint256)":{"notice":"Compares two `uint256` values. Expects first value to be less than second. Formats values with decimals in failure message."},"assertLtDecimal(uint256,uint256,uint256,string)":{"notice":"Compares two `uint256` values. Expects first value to be less than second. Formats values with decimals in failure message. Includes error message into revert string on failure."},"assertNotEq(address,address)":{"notice":"Asserts that two `address` values are not equal."},"assertNotEq(address,address,string)":{"notice":"Asserts that two `address` values are not equal and includes error message into revert string on failure."},"assertNotEq(address[],address[])":{"notice":"Asserts that two arrays of `address` values are not equal."},"assertNotEq(address[],address[],string)":{"notice":"Asserts that two arrays of `address` values are not equal and includes error message into revert string on failure."},"assertNotEq(bool,bool)":{"notice":"Asserts that two `bool` values are not equal."},"assertNotEq(bool,bool,string)":{"notice":"Asserts that two `bool` values are not equal and includes error message into revert string on failure."},"assertNotEq(bool[],bool[])":{"notice":"Asserts that two arrays of `bool` values are not equal."},"assertNotEq(bool[],bool[],string)":{"notice":"Asserts that two arrays of `bool` values are not equal and includes error message into revert string on failure."},"assertNotEq(bytes,bytes)":{"notice":"Asserts that two `bytes` values are not equal."},"assertNotEq(bytes,bytes,string)":{"notice":"Asserts that two `bytes` values are not equal and includes error message into revert string on failure."},"assertNotEq(bytes32,bytes32)":{"notice":"Asserts that two `bytes32` values are not equal."},"assertNotEq(bytes32,bytes32,string)":{"notice":"Asserts that two `bytes32` values are not equal and includes error message into revert string on failure."},"assertNotEq(bytes32[],bytes32[])":{"notice":"Asserts that two arrays of `bytes32` values are not equal."},"assertNotEq(bytes32[],bytes32[],string)":{"notice":"Asserts that two arrays of `bytes32` values are not equal and includes error message into revert string on failure."},"assertNotEq(bytes[],bytes[])":{"notice":"Asserts that two arrays of `bytes` values are not equal."},"assertNotEq(bytes[],bytes[],string)":{"notice":"Asserts that two arrays of `bytes` values are not equal and includes error message into revert string on failure."},"assertNotEq(int256,int256)":{"notice":"Asserts that two `int256` values are not equal."},"assertNotEq(int256,int256,string)":{"notice":"Asserts that two `int256` values are not equal and includes error message into revert string on failure."},"assertNotEq(int256[],int256[])":{"notice":"Asserts that two arrays of `int256` values are not equal."},"assertNotEq(int256[],int256[],string)":{"notice":"Asserts that two arrays of `int256` values are not equal and includes error message into revert string on failure."},"assertNotEq(string,string)":{"notice":"Asserts that two `string` values are not equal."},"assertNotEq(string,string,string)":{"notice":"Asserts that two `string` values are not equal and includes error message into revert string on failure."},"assertNotEq(string[],string[])":{"notice":"Asserts that two arrays of `string` values are not equal."},"assertNotEq(string[],string[],string)":{"notice":"Asserts that two arrays of `string` values are not equal and includes error message into revert string on failure."},"assertNotEq(uint256,uint256)":{"notice":"Asserts that two `uint256` values are not equal."},"assertNotEq(uint256,uint256,string)":{"notice":"Asserts that two `uint256` values are not equal and includes error message into revert string on failure."},"assertNotEq(uint256[],uint256[])":{"notice":"Asserts that two arrays of `uint256` values are not equal."},"assertNotEq(uint256[],uint256[],string)":{"notice":"Asserts that two arrays of `uint256` values are not equal and includes error message into revert string on failure."},"assertNotEqDecimal(int256,int256,uint256)":{"notice":"Asserts that two `int256` values are not equal, formatting them with decimals in failure message."},"assertNotEqDecimal(int256,int256,uint256,string)":{"notice":"Asserts that two `int256` values are not equal, formatting them with decimals in failure message. Includes error message into revert string on failure."},"assertNotEqDecimal(uint256,uint256,uint256)":{"notice":"Asserts that two `uint256` values are not equal, formatting them with decimals in failure message."},"assertNotEqDecimal(uint256,uint256,uint256,string)":{"notice":"Asserts that two `uint256` values are not equal, formatting them with decimals in failure message. Includes error message into revert string on failure."},"assertTrue(bool)":{"notice":"Asserts that the given condition is true."},"assertTrue(bool,string)":{"notice":"Asserts that the given condition is true and includes error message into revert string on failure."},"assume(bool)":{"notice":"If the condition is false, discard this run's fuzz inputs and generate new ones."},"assumeNoRevert((address,bool,bytes))":{"notice":"Discard this run's fuzz inputs and generate new ones if next call reverts with the potential revert parameters."},"assumeNoRevert((address,bool,bytes)[])":{"notice":"Discard this run's fuzz inputs and generate new ones if next call reverts with the any of the potential revert parameters."},"assumeNoRevert()":{"notice":"Discard this run's fuzz inputs and generate new ones if next call reverted."},"attachBlob(bytes)":{"notice":"Attach an EIP-4844 blob to the next call"},"attachDelegation((uint8,bytes32,bytes32,uint64,address))":{"notice":"Designate the next call as an EIP-7702 transaction"},"blobBaseFee(uint256)":{"notice":"Sets `block.blobbasefee`"},"blobhashes(bytes32[])":{"notice":"Sets the blobhashes in the transaction. Not available on EVM versions before Cancun. If used on unsupported EVM versions it will revert."},"breakpoint(string)":{"notice":"Writes a breakpoint to jump to in the debugger."},"breakpoint(string,bool)":{"notice":"Writes a conditional breakpoint to jump to in the debugger."},"broadcast()":{"notice":"Has the next call (at this call depth only) create transactions that can later be signed and sent onchain. Broadcasting address is determined by checking the following in order: 1. If `--sender` argument was provided, that address is used. 2. If exactly one signer (e.g. private key, hw wallet, keystore) is set when `forge broadcast` is invoked, that signer is used. 3. Otherwise, default foundry sender (1804c8AB1F12E6bbf3894d4083f33e07309d1f38) is used."},"broadcast(address)":{"notice":"Has the next call (at this call depth only) create a transaction with the address provided as the sender that can later be signed and sent onchain."},"broadcast(uint256)":{"notice":"Has the next call (at this call depth only) create a transaction with the private key provided as the sender that can later be signed and sent onchain."},"broadcastRawTransaction(bytes)":{"notice":"Takes a signed transaction and broadcasts it to the network."},"chainId(uint256)":{"notice":"Sets `block.chainid`."},"clearMockedCalls()":{"notice":"Clears all mocked calls."},"cloneAccount(address,address)":{"notice":"Clones a source account code, state, balance and nonce to a target account and updates in-memory EVM state."},"closeFile(string)":{"notice":"Closes file for reading, resetting the offset and allowing to read it from beginning with readLine. `path` is relative to the project root."},"coinbase(address)":{"notice":"Sets `block.coinbase`."},"computeCreate2Address(bytes32,bytes32)":{"notice":"Compute the address of a contract created with CREATE2 using the default CREATE2 deployer."},"computeCreate2Address(bytes32,bytes32,address)":{"notice":"Compute the address of a contract created with CREATE2 using the given CREATE2 deployer."},"computeCreateAddress(address,uint256)":{"notice":"Compute the address a contract will be deployed at for a given deployer address and nonce."},"contains(string,string)":{"notice":"Returns true if `search` is found in `subject`, false otherwise."},"cool(address)":{"notice":"Marks the slots of an account and the account address as cold."},"coolSlot(address,bytes32)":{"notice":"Utility cheatcode to mark specific storage slot as cold, simulating no prior read."},"copyFile(string,string)":{"notice":"Copies the contents of one file to another. This function will **overwrite** the contents of `to`. On success, the total number of bytes copied is returned and it is equal to the length of the `to` file as reported by `metadata`. Both `from` and `to` are relative to the project root."},"copyStorage(address,address)":{"notice":"Utility cheatcode to copy storage of `from` contract to another `to` contract."},"createDir(string,bool)":{"notice":"Creates a new, empty directory at the provided path. This cheatcode will revert in the following situations, but is not limited to just these cases: - User lacks permissions to modify `path`. - A parent of the given path doesn't exist and `recursive` is false. - `path` already exists and `recursive` is false. `path` is relative to the project root."},"createFork(string)":{"notice":"Creates a new fork with the given endpoint and the _latest_ block and returns the identifier of the fork."},"createFork(string,bytes32)":{"notice":"Creates a new fork with the given endpoint and at the block the given transaction was mined in, replays all transaction mined in the block before the transaction, and returns the identifier of the fork."},"createFork(string,uint256)":{"notice":"Creates a new fork with the given endpoint and block and returns the identifier of the fork."},"createSelectFork(string)":{"notice":"Creates and also selects a new fork with the given endpoint and the latest block and returns the identifier of the fork."},"createSelectFork(string,bytes32)":{"notice":"Creates and also selects new fork with the given endpoint and at the block the given transaction was mined in, replays all transaction mined in the block before the transaction, returns the identifier of the fork."},"createSelectFork(string,uint256)":{"notice":"Creates and also selects a new fork with the given endpoint and block and returns the identifier of the fork."},"createWallet(string)":{"notice":"Derives a private key from the name, labels the account with that name, and returns the wallet."},"createWallet(uint256)":{"notice":"Generates a wallet from the private key and returns the wallet."},"createWallet(uint256,string)":{"notice":"Generates a wallet from the private key, labels the account with that name, and returns the wallet."},"deal(address,uint256)":{"notice":"Sets an address' balance."},"deleteSnapshot(uint256)":{"notice":"`deleteSnapshot` is being deprecated in favor of `deleteStateSnapshot`. It will be removed in future versions."},"deleteSnapshots()":{"notice":"`deleteSnapshots` is being deprecated in favor of `deleteStateSnapshots`. It will be removed in future versions."},"deleteStateSnapshot(uint256)":{"notice":"Removes the snapshot with the given ID created by `snapshot`. Takes the snapshot ID to delete. Returns `true` if the snapshot was successfully deleted. Returns `false` if the snapshot does not exist."},"deleteStateSnapshots()":{"notice":"Removes _all_ snapshots previously created by `snapshot`."},"deployCode(string)":{"notice":"Deploys a contract from an artifact file. Takes in the relative path to the json file or the path to the artifact in the form of :: where and parts are optional."},"deployCode(string,bytes)":{"notice":"Deploys a contract from an artifact file. Takes in the relative path to the json file or the path to the artifact in the form of :: where and parts are optional. Additionally accepts abi-encoded constructor arguments."},"deployCode(string,bytes,bytes32)":{"notice":"Deploys a contract from an artifact file, using the CREATE2 salt. Takes in the relative path to the json file or the path to the artifact in the form of :: where and parts are optional. Additionally accepts abi-encoded constructor arguments."},"deployCode(string,bytes,uint256)":{"notice":"Deploys a contract from an artifact file. Takes in the relative path to the json file or the path to the artifact in the form of :: where and parts are optional. Additionally accepts abi-encoded constructor arguments and `msg.value`."},"deployCode(string,bytes,uint256,bytes32)":{"notice":"Deploys a contract from an artifact file, using the CREATE2 salt. Takes in the relative path to the json file or the path to the artifact in the form of :: where and parts are optional. Additionally accepts abi-encoded constructor arguments and `msg.value`."},"deployCode(string,bytes32)":{"notice":"Deploys a contract from an artifact file, using the CREATE2 salt. Takes in the relative path to the json file or the path to the artifact in the form of :: where and parts are optional."},"deployCode(string,uint256)":{"notice":"Deploys a contract from an artifact file. Takes in the relative path to the json file or the path to the artifact in the form of :: where and parts are optional. Additionally accepts `msg.value`."},"deployCode(string,uint256,bytes32)":{"notice":"Deploys a contract from an artifact file, using the CREATE2 salt. Takes in the relative path to the json file or the path to the artifact in the form of :: where and parts are optional. Additionally accepts `msg.value`."},"deriveKey(string,string,uint32)":{"notice":"Derive a private key from a provided mnenomic string (or mnenomic file path) at `{derivationPath}{index}`."},"deriveKey(string,string,uint32,string)":{"notice":"Derive a private key from a provided mnenomic string (or mnenomic file path) in the specified language at `{derivationPath}{index}`."},"deriveKey(string,uint32)":{"notice":"Derive a private key from a provided mnenomic string (or mnenomic file path) at the derivation path `m/44'/60'/0'/0/{index}`."},"deriveKey(string,uint32,string)":{"notice":"Derive a private key from a provided mnenomic string (or mnenomic file path) in the specified language at the derivation path `m/44'/60'/0'/0/{index}`."},"difficulty(uint256)":{"notice":"Sets `block.difficulty`. Not available on EVM versions from Paris onwards. Use `prevrandao` instead. Reverts if used on unsupported EVM versions."},"dumpState(string)":{"notice":"Dump a genesis JSON file's `allocs` to disk."},"ensNamehash(string)":{"notice":"Returns ENS namehash for provided string."},"envAddress(string)":{"notice":"Gets the environment variable `name` and parses it as `address`. Reverts if the variable was not found or could not be parsed."},"envAddress(string,string)":{"notice":"Gets the environment variable `name` and parses it as an array of `address`, delimited by `delim`. Reverts if the variable was not found or could not be parsed."},"envBool(string)":{"notice":"Gets the environment variable `name` and parses it as `bool`. Reverts if the variable was not found or could not be parsed."},"envBool(string,string)":{"notice":"Gets the environment variable `name` and parses it as an array of `bool`, delimited by `delim`. Reverts if the variable was not found or could not be parsed."},"envBytes(string)":{"notice":"Gets the environment variable `name` and parses it as `bytes`. Reverts if the variable was not found or could not be parsed."},"envBytes(string,string)":{"notice":"Gets the environment variable `name` and parses it as an array of `bytes`, delimited by `delim`. Reverts if the variable was not found or could not be parsed."},"envBytes32(string)":{"notice":"Gets the environment variable `name` and parses it as `bytes32`. Reverts if the variable was not found or could not be parsed."},"envBytes32(string,string)":{"notice":"Gets the environment variable `name` and parses it as an array of `bytes32`, delimited by `delim`. Reverts if the variable was not found or could not be parsed."},"envExists(string)":{"notice":"Gets the environment variable `name` and returns true if it exists, else returns false."},"envInt(string)":{"notice":"Gets the environment variable `name` and parses it as `int256`. Reverts if the variable was not found or could not be parsed."},"envInt(string,string)":{"notice":"Gets the environment variable `name` and parses it as an array of `int256`, delimited by `delim`. Reverts if the variable was not found or could not be parsed."},"envOr(string,address)":{"notice":"Gets the environment variable `name` and parses it as `address`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found."},"envOr(string,bool)":{"notice":"Gets the environment variable `name` and parses it as `bool`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found."},"envOr(string,bytes)":{"notice":"Gets the environment variable `name` and parses it as `bytes`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found."},"envOr(string,bytes32)":{"notice":"Gets the environment variable `name` and parses it as `bytes32`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found."},"envOr(string,int256)":{"notice":"Gets the environment variable `name` and parses it as `int256`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found."},"envOr(string,string)":{"notice":"Gets the environment variable `name` and parses it as `string`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found."},"envOr(string,string,address[])":{"notice":"Gets the environment variable `name` and parses it as an array of `address`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found."},"envOr(string,string,bool[])":{"notice":"Gets the environment variable `name` and parses it as an array of `bool`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found."},"envOr(string,string,bytes32[])":{"notice":"Gets the environment variable `name` and parses it as an array of `bytes32`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found."},"envOr(string,string,bytes[])":{"notice":"Gets the environment variable `name` and parses it as an array of `bytes`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found."},"envOr(string,string,int256[])":{"notice":"Gets the environment variable `name` and parses it as an array of `int256`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found."},"envOr(string,string,string[])":{"notice":"Gets the environment variable `name` and parses it as an array of `string`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found."},"envOr(string,string,uint256[])":{"notice":"Gets the environment variable `name` and parses it as an array of `uint256`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found."},"envOr(string,uint256)":{"notice":"Gets the environment variable `name` and parses it as `uint256`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found."},"envString(string)":{"notice":"Gets the environment variable `name` and parses it as `string`. Reverts if the variable was not found or could not be parsed."},"envString(string,string)":{"notice":"Gets the environment variable `name` and parses it as an array of `string`, delimited by `delim`. Reverts if the variable was not found or could not be parsed."},"envUint(string)":{"notice":"Gets the environment variable `name` and parses it as `uint256`. Reverts if the variable was not found or could not be parsed."},"envUint(string,string)":{"notice":"Gets the environment variable `name` and parses it as an array of `uint256`, delimited by `delim`. Reverts if the variable was not found or could not be parsed."},"etch(address,bytes)":{"notice":"Sets an address' code."},"eth_getLogs(uint256,uint256,address,bytes32[])":{"notice":"Gets all the logs according to specified filter."},"exists(string)":{"notice":"Returns true if the given path points to an existing entity, else returns false."},"expectCall(address,bytes)":{"notice":"Expects a call to an address with the specified calldata. Calldata can either be a strict or a partial match."},"expectCall(address,bytes,uint64)":{"notice":"Expects given number of calls to an address with the specified calldata."},"expectCall(address,uint256,bytes)":{"notice":"Expects a call to an address with the specified `msg.value` and calldata."},"expectCall(address,uint256,bytes,uint64)":{"notice":"Expects given number of calls to an address with the specified `msg.value` and calldata."},"expectCall(address,uint256,uint64,bytes)":{"notice":"Expect a call to an address with the specified `msg.value`, gas, and calldata."},"expectCall(address,uint256,uint64,bytes,uint64)":{"notice":"Expects given number of calls to an address with the specified `msg.value`, gas, and calldata."},"expectCallMinGas(address,uint256,uint64,bytes)":{"notice":"Expect a call to an address with the specified `msg.value` and calldata, and a *minimum* amount of gas."},"expectCallMinGas(address,uint256,uint64,bytes,uint64)":{"notice":"Expect given number of calls to an address with the specified `msg.value` and calldata, and a *minimum* amount of gas."},"expectCreate(bytes,address)":{"notice":"Expects the deployment of the specified bytecode by the specified address using the CREATE opcode"},"expectCreate2(bytes,address)":{"notice":"Expects the deployment of the specified bytecode by the specified address using the CREATE2 opcode"},"expectEmit()":{"notice":"Prepare an expected log with all topic and data checks enabled. Call this function, then emit an event, then call a function. Internally after the call, we check if logs were emitted in the expected order with the expected topics and data."},"expectEmit(address)":{"notice":"Same as the previous method, but also checks supplied address against emitting contract."},"expectEmit(address,uint64)":{"notice":"Expect a given number of logs from a specific emitter with all topic and data checks enabled."},"expectEmit(bool,bool,bool,bool)":{"notice":"Prepare an expected log with (bool checkTopic1, bool checkTopic2, bool checkTopic3, bool checkData.). Call this function, then emit an event, then call a function. Internally after the call, we check if logs were emitted in the expected order with the expected topics and data (as specified by the booleans)."},"expectEmit(bool,bool,bool,bool,address)":{"notice":"Same as the previous method, but also checks supplied address against emitting contract."},"expectEmit(bool,bool,bool,bool,address,uint64)":{"notice":"Expect a given number of logs from a specific emitter with the provided topics."},"expectEmit(bool,bool,bool,bool,uint64)":{"notice":"Expect a given number of logs with the provided topics."},"expectEmit(uint64)":{"notice":"Expect a given number of logs with all topic and data checks enabled."},"expectEmitAnonymous()":{"notice":"Prepare an expected anonymous log with all topic and data checks enabled. Call this function, then emit an anonymous event, then call a function. Internally after the call, we check if logs were emitted in the expected order with the expected topics and data."},"expectEmitAnonymous(address)":{"notice":"Same as the previous method, but also checks supplied address against emitting contract."},"expectEmitAnonymous(bool,bool,bool,bool,bool)":{"notice":"Prepare an expected anonymous log with (bool checkTopic1, bool checkTopic2, bool checkTopic3, bool checkData.). Call this function, then emit an anonymous event, then call a function. Internally after the call, we check if logs were emitted in the expected order with the expected topics and data (as specified by the booleans)."},"expectEmitAnonymous(bool,bool,bool,bool,bool,address)":{"notice":"Same as the previous method, but also checks supplied address against emitting contract."},"expectPartialRevert(bytes4)":{"notice":"Expects an error on next call that starts with the revert data."},"expectPartialRevert(bytes4,address)":{"notice":"Expects an error on next call to reverter address, that starts with the revert data."},"expectRevert()":{"notice":"Expects an error on next call with any revert data."},"expectRevert(address)":{"notice":"Expects an error with any revert data on next call to reverter address."},"expectRevert(address,uint64)":{"notice":"Expects a `count` number of reverts from the upcoming calls from the reverter address."},"expectRevert(bytes)":{"notice":"Expects an error on next call that exactly matches the revert data."},"expectRevert(bytes,address)":{"notice":"Expects an error from reverter address on next call, that exactly matches the revert data."},"expectRevert(bytes,address,uint64)":{"notice":"Expects a `count` number of reverts from the upcoming calls from the reverter address that exactly match the revert data."},"expectRevert(bytes,uint64)":{"notice":"Expects a `count` number of reverts from the upcoming calls that exactly match the revert data."},"expectRevert(bytes4)":{"notice":"Expects an error on next call that exactly matches the revert data."},"expectRevert(bytes4,address)":{"notice":"Expects an error from reverter address on next call, with any revert data."},"expectRevert(bytes4,address,uint64)":{"notice":"Expects a `count` number of reverts from the upcoming calls from the reverter address that match the revert data."},"expectRevert(bytes4,uint64)":{"notice":"Expects a `count` number of reverts from the upcoming calls that match the revert data."},"expectRevert(uint64)":{"notice":"Expects a `count` number of reverts from the upcoming calls with any revert data or reverter."},"expectSafeMemory(uint64,uint64)":{"notice":"Only allows memory writes to offsets [0x00, 0x60) ∪ [min, max) in the current subcontext. If any other memory is written to, the test will fail. Can be called multiple times to add more ranges to the set."},"expectSafeMemoryCall(uint64,uint64)":{"notice":"Only allows memory writes to offsets [0x00, 0x60) ∪ [min, max) in the next created subcontext. If any other memory is written to, the test will fail. Can be called multiple times to add more ranges to the set."},"fee(uint256)":{"notice":"Sets `block.basefee`."},"ffi(string[])":{"notice":"Performs a foreign function call via the terminal."},"foundryVersionAtLeast(string)":{"notice":"Returns true if the current Foundry version is greater than or equal to the given version. The given version string must be in the format `major.minor.patch`. This is equivalent to `foundryVersionCmp(version) >= 0`."},"foundryVersionCmp(string)":{"notice":"Compares the current Foundry version with the given version string. The given version string must be in the format `major.minor.patch`. Returns: -1 if current Foundry version is less than the given version 0 if current Foundry version equals the given version 1 if current Foundry version is greater than the given version This result can then be used with a comparison operator against `0`. For example, to check if the current Foundry version is greater than or equal to `1.0.0`: `if (foundryVersionCmp(\"1.0.0\") >= 0) { ... }`"},"fsMetadata(string)":{"notice":"Given a path, query the file system to get information about a file, directory, etc."},"getArtifactPathByCode(bytes)":{"notice":"Gets the artifact path from code (aka. creation code)."},"getArtifactPathByDeployedCode(bytes)":{"notice":"Gets the artifact path from deployed code (aka. runtime code)."},"getBlobBaseFee()":{"notice":"Gets the current `block.blobbasefee`. You should use this instead of `block.blobbasefee` if you use `vm.blobBaseFee`, as `block.blobbasefee` is assumed to be constant across a transaction, and as a result will get optimized out by the compiler. See https://github.com/foundry-rs/foundry/issues/6180"},"getBlobhashes()":{"notice":"Gets the blockhashes from the current transaction. Not available on EVM versions before Cancun. If used on unsupported EVM versions it will revert."},"getBlockNumber()":{"notice":"Gets the current `block.number`. You should use this instead of `block.number` if you use `vm.roll`, as `block.number` is assumed to be constant across a transaction, and as a result will get optimized out by the compiler. See https://github.com/foundry-rs/foundry/issues/6180"},"getBlockTimestamp()":{"notice":"Gets the current `block.timestamp`. You should use this instead of `block.timestamp` if you use `vm.warp`, as `block.timestamp` is assumed to be constant across a transaction, and as a result will get optimized out by the compiler. See https://github.com/foundry-rs/foundry/issues/6180"},"getBroadcast(string,uint64,uint8)":{"notice":"Returns the most recent broadcast for the given contract on `chainId` matching `txType`. For example: The most recent deployment can be fetched by passing `txType` as `CREATE` or `CREATE2`. The most recent call can be fetched by passing `txType` as `CALL`."},"getBroadcasts(string,uint64)":{"notice":"Returns all broadcasts for the given contract on `chainId`. Sorted such that the most recent broadcast is the first element, and the oldest is the last. i.e descending order of BroadcastTxSummary.blockNumber."},"getBroadcasts(string,uint64,uint8)":{"notice":"Returns all broadcasts for the given contract on `chainId` with the specified `txType`. Sorted such that the most recent broadcast is the first element, and the oldest is the last. i.e descending order of BroadcastTxSummary.blockNumber."},"getChain(string)":{"notice":"Returns a Chain struct for specific alias"},"getChain(uint256)":{"notice":"Returns a Chain struct for specific chainId"},"getCode(string)":{"notice":"Gets the creation bytecode from an artifact file. Takes in the relative path to the json file or the path to the artifact in the form of :: where and parts are optional."},"getDeployedCode(string)":{"notice":"Gets the deployed bytecode from an artifact file. Takes in the relative path to the json file or the path to the artifact in the form of :: where and parts are optional."},"getDeployment(string)":{"notice":"Returns the most recent deployment for the current `chainId`."},"getDeployment(string,uint64)":{"notice":"Returns the most recent deployment for the given contract on `chainId`"},"getDeployments(string,uint64)":{"notice":"Returns all deployments for the given contract on `chainId` Sorted in descending order of deployment time i.e descending order of BroadcastTxSummary.blockNumber. The most recent deployment is the first element, and the oldest is the last."},"getFoundryVersion()":{"notice":"Returns the Foundry version. Format: -+.. Sample output: 0.3.0-nightly+3cb96bde9b.1737036656.debug Note: Build timestamps may vary slightly across platforms due to separate CI jobs. For reliable version comparisons, use UNIX format (e.g., >= 1700000000) to compare timestamps while ignoring minor time differences."},"getLabel(address)":{"notice":"Gets the label for the specified address."},"getMappingKeyAndParentOf(address,bytes32)":{"notice":"Gets the map key and parent of a mapping at a given slot, for a given address."},"getMappingLength(address,bytes32)":{"notice":"Gets the number of elements in the mapping at the given slot, for a given address."},"getMappingSlotAt(address,bytes32,uint256)":{"notice":"Gets the elements at index idx of the mapping at the given slot, for a given address. The index must be less than the length of the mapping (i.e. the number of keys in the mapping)."},"getNonce((address,uint256,uint256,uint256))":{"notice":"Get the nonce of a `Wallet`."},"getNonce(address)":{"notice":"Gets the nonce of an account."},"getRecordedLogs()":{"notice":"Gets all the recorded logs."},"getStateDiff()":{"notice":"Returns state diffs from current `vm.startStateDiffRecording` session."},"getStateDiffJson()":{"notice":"Returns state diffs from current `vm.startStateDiffRecording` session, in json format."},"getWallets()":{"notice":"Returns addresses of available unlocked wallets in the script environment."},"indexOf(string,string)":{"notice":"Returns the index of the first occurrence of a `key` in an `input` string. Returns `NOT_FOUND` (i.e. `type(uint256).max`) if the `key` is not found. Returns 0 in case of an empty `key`."},"interceptInitcode()":{"notice":"Causes the next contract creation (via new) to fail and return its initcode in the returndata buffer. This allows type-safe access to the initcode payload that would be used for contract creation. Example usage: vm.interceptInitcode(); bytes memory initcode; try new MyContract(param1, param2) { assert(false); } catch (bytes memory interceptedInitcode) { initcode = interceptedInitcode; }"},"isContext(uint8)":{"notice":"Returns true if `forge` command was executed in given context."},"isDir(string)":{"notice":"Returns true if the path exists on disk and is pointing at a directory, else returns false."},"isFile(string)":{"notice":"Returns true if the path exists on disk and is pointing at a regular file, else returns false."},"isPersistent(address)":{"notice":"Returns true if the account is marked as persistent."},"keyExists(string,string)":{"notice":"Checks if `key` exists in a JSON object `keyExists` is being deprecated in favor of `keyExistsJson`. It will be removed in future versions."},"keyExistsJson(string,string)":{"notice":"Checks if `key` exists in a JSON object."},"keyExistsToml(string,string)":{"notice":"Checks if `key` exists in a TOML table."},"label(address,string)":{"notice":"Labels an address in call traces."},"lastCallGas()":{"notice":"Gets the gas used in the last call from the callee perspective."},"load(address,bytes32)":{"notice":"Loads a storage slot from an address."},"loadAllocs(string)":{"notice":"Load a genesis JSON file's `allocs` into the in-memory EVM state."},"makePersistent(address)":{"notice":"Marks that the account(s) should use persistent storage across fork swaps in a multifork setup Meaning, changes made to the state of this account will be kept when switching forks."},"makePersistent(address,address)":{"notice":"See `makePersistent(address)`."},"makePersistent(address,address,address)":{"notice":"See `makePersistent(address)`."},"makePersistent(address[])":{"notice":"See `makePersistent(address)`."},"mockCall(address,bytes,bytes)":{"notice":"Mocks a call to an address, returning specified data. Calldata can either be strict or a partial match, e.g. if you only pass a Solidity selector to the expected calldata, then the entire Solidity function will be mocked."},"mockCall(address,bytes4,bytes)":{"notice":"Mocks a call to an address, returning specified data. Calldata can either be strict or a partial match, e.g. if you only pass a Solidity selector to the expected calldata, then the entire Solidity function will be mocked. Overload to pass the function selector directly `token.approve.selector` instead of `abi.encodeWithSelector(token.approve.selector)`."},"mockCall(address,uint256,bytes,bytes)":{"notice":"Mocks a call to an address with a specific `msg.value`, returning specified data. Calldata match takes precedence over `msg.value` in case of ambiguity."},"mockCall(address,uint256,bytes4,bytes)":{"notice":"Mocks a call to an address with a specific `msg.value`, returning specified data. Calldata match takes precedence over `msg.value` in case of ambiguity. Overload to pass the function selector directly `token.approve.selector` instead of `abi.encodeWithSelector(token.approve.selector)`."},"mockCallRevert(address,bytes,bytes)":{"notice":"Reverts a call to an address with specified revert data."},"mockCallRevert(address,bytes4,bytes)":{"notice":"Reverts a call to an address with specified revert data. Overload to pass the function selector directly `token.approve.selector` instead of `abi.encodeWithSelector(token.approve.selector)`."},"mockCallRevert(address,uint256,bytes,bytes)":{"notice":"Reverts a call to an address with a specific `msg.value`, with specified revert data."},"mockCallRevert(address,uint256,bytes4,bytes)":{"notice":"Reverts a call to an address with a specific `msg.value`, with specified revert data. Overload to pass the function selector directly `token.approve.selector` instead of `abi.encodeWithSelector(token.approve.selector)`."},"mockCalls(address,bytes,bytes[])":{"notice":"Mocks multiple calls to an address, returning specified data for each call."},"mockCalls(address,uint256,bytes,bytes[])":{"notice":"Mocks multiple calls to an address with a specific `msg.value`, returning specified data for each call."},"mockFunction(address,address,bytes)":{"notice":"Whenever a call is made to `callee` with calldata `data`, this cheatcode instead calls `target` with the same calldata. This functionality is similar to a delegate call made to `target` contract from `callee`. Can be used to substitute a call to a function with another implementation that captures the primary logic of the original function but is easier to reason about. If calldata is not a strict match then partial match by selector is attempted."},"noAccessList()":{"notice":"Utility cheatcode to remove any EIP-2930 access list set by `accessList` cheatcode."},"parseAddress(string)":{"notice":"Parses the given `string` into an `address`."},"parseBool(string)":{"notice":"Parses the given `string` into a `bool`."},"parseBytes(string)":{"notice":"Parses the given `string` into `bytes`."},"parseBytes32(string)":{"notice":"Parses the given `string` into a `bytes32`."},"parseInt(string)":{"notice":"Parses the given `string` into a `int256`."},"parseJson(string)":{"notice":"ABI-encodes a JSON object."},"parseJson(string,string)":{"notice":"ABI-encodes a JSON object at `key`."},"parseJsonAddress(string,string)":{"notice":"Parses a string of JSON data at `key` and coerces it to `address`."},"parseJsonAddressArray(string,string)":{"notice":"Parses a string of JSON data at `key` and coerces it to `address[]`."},"parseJsonBool(string,string)":{"notice":"Parses a string of JSON data at `key` and coerces it to `bool`."},"parseJsonBoolArray(string,string)":{"notice":"Parses a string of JSON data at `key` and coerces it to `bool[]`."},"parseJsonBytes(string,string)":{"notice":"Parses a string of JSON data at `key` and coerces it to `bytes`."},"parseJsonBytes32(string,string)":{"notice":"Parses a string of JSON data at `key` and coerces it to `bytes32`."},"parseJsonBytes32Array(string,string)":{"notice":"Parses a string of JSON data at `key` and coerces it to `bytes32[]`."},"parseJsonBytesArray(string,string)":{"notice":"Parses a string of JSON data at `key` and coerces it to `bytes[]`."},"parseJsonInt(string,string)":{"notice":"Parses a string of JSON data at `key` and coerces it to `int256`."},"parseJsonIntArray(string,string)":{"notice":"Parses a string of JSON data at `key` and coerces it to `int256[]`."},"parseJsonKeys(string,string)":{"notice":"Returns an array of all the keys in a JSON object."},"parseJsonString(string,string)":{"notice":"Parses a string of JSON data at `key` and coerces it to `string`."},"parseJsonStringArray(string,string)":{"notice":"Parses a string of JSON data at `key` and coerces it to `string[]`."},"parseJsonType(string,string)":{"notice":"Parses a string of JSON data and coerces it to type corresponding to `typeDescription`."},"parseJsonType(string,string,string)":{"notice":"Parses a string of JSON data at `key` and coerces it to type corresponding to `typeDescription`."},"parseJsonTypeArray(string,string,string)":{"notice":"Parses a string of JSON data at `key` and coerces it to type array corresponding to `typeDescription`."},"parseJsonUint(string,string)":{"notice":"Parses a string of JSON data at `key` and coerces it to `uint256`."},"parseJsonUintArray(string,string)":{"notice":"Parses a string of JSON data at `key` and coerces it to `uint256[]`."},"parseToml(string)":{"notice":"ABI-encodes a TOML table."},"parseToml(string,string)":{"notice":"ABI-encodes a TOML table at `key`."},"parseTomlAddress(string,string)":{"notice":"Parses a string of TOML data at `key` and coerces it to `address`."},"parseTomlAddressArray(string,string)":{"notice":"Parses a string of TOML data at `key` and coerces it to `address[]`."},"parseTomlBool(string,string)":{"notice":"Parses a string of TOML data at `key` and coerces it to `bool`."},"parseTomlBoolArray(string,string)":{"notice":"Parses a string of TOML data at `key` and coerces it to `bool[]`."},"parseTomlBytes(string,string)":{"notice":"Parses a string of TOML data at `key` and coerces it to `bytes`."},"parseTomlBytes32(string,string)":{"notice":"Parses a string of TOML data at `key` and coerces it to `bytes32`."},"parseTomlBytes32Array(string,string)":{"notice":"Parses a string of TOML data at `key` and coerces it to `bytes32[]`."},"parseTomlBytesArray(string,string)":{"notice":"Parses a string of TOML data at `key` and coerces it to `bytes[]`."},"parseTomlInt(string,string)":{"notice":"Parses a string of TOML data at `key` and coerces it to `int256`."},"parseTomlIntArray(string,string)":{"notice":"Parses a string of TOML data at `key` and coerces it to `int256[]`."},"parseTomlKeys(string,string)":{"notice":"Returns an array of all the keys in a TOML table."},"parseTomlString(string,string)":{"notice":"Parses a string of TOML data at `key` and coerces it to `string`."},"parseTomlStringArray(string,string)":{"notice":"Parses a string of TOML data at `key` and coerces it to `string[]`."},"parseTomlType(string,string)":{"notice":"Parses a string of TOML data and coerces it to type corresponding to `typeDescription`."},"parseTomlType(string,string,string)":{"notice":"Parses a string of TOML data at `key` and coerces it to type corresponding to `typeDescription`."},"parseTomlTypeArray(string,string,string)":{"notice":"Parses a string of TOML data at `key` and coerces it to type array corresponding to `typeDescription`."},"parseTomlUint(string,string)":{"notice":"Parses a string of TOML data at `key` and coerces it to `uint256`."},"parseTomlUintArray(string,string)":{"notice":"Parses a string of TOML data at `key` and coerces it to `uint256[]`."},"parseUint(string)":{"notice":"Parses the given `string` into a `uint256`."},"pauseGasMetering()":{"notice":"Pauses gas metering (i.e. gas usage is not counted). Noop if already paused."},"pauseTracing()":{"notice":"Pauses collection of call traces. Useful in cases when you want to skip tracing of complex calls which are not useful for debugging."},"prank(address)":{"notice":"Sets the *next* call's `msg.sender` to be the input address."},"prank(address,address)":{"notice":"Sets the *next* call's `msg.sender` to be the input address, and the `tx.origin` to be the second input."},"prank(address,address,bool)":{"notice":"Sets the *next* delegate call's `msg.sender` to be the input address, and the `tx.origin` to be the second input."},"prank(address,bool)":{"notice":"Sets the *next* delegate call's `msg.sender` to be the input address."},"prevrandao(bytes32)":{"notice":"Sets `block.prevrandao`. Not available on EVM versions before Paris. Use `difficulty` instead. If used on unsupported EVM versions it will revert."},"prevrandao(uint256)":{"notice":"Sets `block.prevrandao`. Not available on EVM versions before Paris. Use `difficulty` instead. If used on unsupported EVM versions it will revert."},"projectRoot()":{"notice":"Get the path of the current project root."},"prompt(string)":{"notice":"Prompts the user for a string value in the terminal."},"promptAddress(string)":{"notice":"Prompts the user for an address in the terminal."},"promptSecret(string)":{"notice":"Prompts the user for a hidden string value in the terminal."},"promptSecretUint(string)":{"notice":"Prompts the user for hidden uint256 in the terminal (usually pk)."},"promptUint(string)":{"notice":"Prompts the user for uint256 in the terminal."},"publicKeyP256(uint256)":{"notice":"Derives secp256r1 public key from the provided `privateKey`."},"randomAddress()":{"notice":"Returns a random `address`."},"randomBool()":{"notice":"Returns a random `bool`."},"randomBytes(uint256)":{"notice":"Returns a random byte array value of the given length."},"randomBytes4()":{"notice":"Returns a random fixed-size byte array of length 4."},"randomBytes8()":{"notice":"Returns a random fixed-size byte array of length 8."},"randomInt()":{"notice":"Returns a random `int256` value."},"randomInt(uint256)":{"notice":"Returns a random `int256` value of given bits."},"randomUint()":{"notice":"Returns a random uint256 value."},"randomUint(uint256)":{"notice":"Returns a random `uint256` value of given bits."},"randomUint(uint256,uint256)":{"notice":"Returns random uint256 value between the provided range (=min..=max)."},"readCallers()":{"notice":"Reads the current `msg.sender` and `tx.origin` from state and reports if there is any active caller modification."},"readDir(string)":{"notice":"Reads the directory at the given path recursively, up to `maxDepth`. `maxDepth` defaults to 1, meaning only the direct children of the given directory will be returned. Follows symbolic links if `followLinks` is true."},"readDir(string,uint64)":{"notice":"See `readDir(string)`."},"readDir(string,uint64,bool)":{"notice":"See `readDir(string)`."},"readFile(string)":{"notice":"Reads the entire content of file to string. `path` is relative to the project root."},"readFileBinary(string)":{"notice":"Reads the entire content of file as binary. `path` is relative to the project root."},"readLine(string)":{"notice":"Reads next line of file to string."},"readLink(string)":{"notice":"Reads a symbolic link, returning the path that the link points to. This cheatcode will revert in the following situations, but is not limited to just these cases: - `path` is not a symbolic link. - `path` does not exist."},"record()":{"notice":"Records all storage reads and writes."},"recordLogs()":{"notice":"Record all the transaction logs."},"rememberKey(uint256)":{"notice":"Adds a private key to the local forge wallet and returns the address."},"rememberKeys(string,string,string,uint32)":{"notice":"Derive a set number of wallets from a mnemonic in the specified language at the derivation path `m/44'/60'/0'/0/{0..count}`. The respective private keys are saved to the local forge wallet for later use and their addresses are returned."},"rememberKeys(string,string,uint32)":{"notice":"Derive a set number of wallets from a mnemonic at the derivation path `m/44'/60'/0'/0/{0..count}`. The respective private keys are saved to the local forge wallet for later use and their addresses are returned."},"removeDir(string,bool)":{"notice":"Removes a directory at the provided path. This cheatcode will revert in the following situations, but is not limited to just these cases: - `path` doesn't exist. - `path` isn't a directory. - User lacks permissions to modify `path`. - The directory is not empty and `recursive` is false. `path` is relative to the project root."},"removeFile(string)":{"notice":"Removes a file from the filesystem. This cheatcode will revert in the following situations, but is not limited to just these cases: - `path` points to a directory. - The file doesn't exist. - The user lacks permissions to remove the file. `path` is relative to the project root."},"replace(string,string,string)":{"notice":"Replaces occurrences of `from` in the given `string` with `to`."},"resetGasMetering()":{"notice":"Reset gas metering (i.e. gas usage is set to gas limit)."},"resetNonce(address)":{"notice":"Resets the nonce of an account to 0 for EOAs and 1 for contract accounts."},"resumeGasMetering()":{"notice":"Resumes gas metering (i.e. gas usage is counted again). Noop if already on."},"resumeTracing()":{"notice":"Unpauses collection of call traces."},"revertTo(uint256)":{"notice":"`revertTo` is being deprecated in favor of `revertToState`. It will be removed in future versions."},"revertToAndDelete(uint256)":{"notice":"`revertToAndDelete` is being deprecated in favor of `revertToStateAndDelete`. It will be removed in future versions."},"revertToState(uint256)":{"notice":"Revert the state of the EVM to a previous snapshot Takes the snapshot ID to revert to. Returns `true` if the snapshot was successfully reverted. Returns `false` if the snapshot does not exist. **Note:** This does not automatically delete the snapshot. To delete the snapshot use `deleteStateSnapshot`."},"revertToStateAndDelete(uint256)":{"notice":"Revert the state of the EVM to a previous snapshot and automatically deletes the snapshots Takes the snapshot ID to revert to. Returns `true` if the snapshot was successfully reverted and deleted. Returns `false` if the snapshot does not exist."},"revokePersistent(address)":{"notice":"Revokes persistent status from the address, previously added via `makePersistent`."},"revokePersistent(address[])":{"notice":"See `revokePersistent(address)`."},"roll(uint256)":{"notice":"Sets `block.height`."},"rollFork(bytes32)":{"notice":"Updates the currently active fork to given transaction. This will `rollFork` with the number of the block the transaction was mined in and replays all transaction mined before it in the block."},"rollFork(uint256)":{"notice":"Updates the currently active fork to given block number This is similar to `roll` but for the currently active fork."},"rollFork(uint256,bytes32)":{"notice":"Updates the given fork to block number of the given transaction and replays all transaction mined before it in the block."},"rollFork(uint256,uint256)":{"notice":"Updates the given fork to given block number."},"rpc(string,string)":{"notice":"Performs an Ethereum JSON-RPC request to the current fork URL."},"rpc(string,string,string)":{"notice":"Performs an Ethereum JSON-RPC request to the given endpoint."},"rpcUrl(string)":{"notice":"Returns the RPC url for the given alias."},"rpcUrlStructs()":{"notice":"Returns all rpc urls and their aliases as structs."},"rpcUrls()":{"notice":"Returns all rpc urls and their aliases `[alias, url][]`."},"selectFork(uint256)":{"notice":"Takes a fork identifier created by `createFork` and sets the corresponding forked state as active."},"serializeAddress(string,string,address)":{"notice":"See `serializeJson`."},"serializeAddress(string,string,address[])":{"notice":"See `serializeJson`."},"serializeBool(string,string,bool)":{"notice":"See `serializeJson`."},"serializeBool(string,string,bool[])":{"notice":"See `serializeJson`."},"serializeBytes(string,string,bytes)":{"notice":"See `serializeJson`."},"serializeBytes(string,string,bytes[])":{"notice":"See `serializeJson`."},"serializeBytes32(string,string,bytes32)":{"notice":"See `serializeJson`."},"serializeBytes32(string,string,bytes32[])":{"notice":"See `serializeJson`."},"serializeInt(string,string,int256)":{"notice":"See `serializeJson`."},"serializeInt(string,string,int256[])":{"notice":"See `serializeJson`."},"serializeJson(string,string)":{"notice":"Serializes a key and value to a JSON object stored in-memory that can be later written to a file. Returns the stringified version of the specific JSON file up to that moment."},"serializeJsonType(string,bytes)":{"notice":"See `serializeJson`."},"serializeJsonType(string,string,string,bytes)":{"notice":"See `serializeJson`."},"serializeString(string,string,string)":{"notice":"See `serializeJson`."},"serializeString(string,string,string[])":{"notice":"See `serializeJson`."},"serializeUint(string,string,uint256)":{"notice":"See `serializeJson`."},"serializeUint(string,string,uint256[])":{"notice":"See `serializeJson`."},"serializeUintToHex(string,string,uint256)":{"notice":"See `serializeJson`."},"setArbitraryStorage(address)":{"notice":"Utility cheatcode to set arbitrary storage for given target address."},"setArbitraryStorage(address,bool)":{"notice":"Utility cheatcode to set arbitrary storage for given target address and overwrite any storage slots that have been previously set."},"setBlockhash(uint256,bytes32)":{"notice":"Set blockhash for the current block. It only sets the blockhash for blocks where `block.number - 256 <= number < block.number`."},"setEnv(string,string)":{"notice":"Sets environment variables."},"setNonce(address,uint64)":{"notice":"Sets the nonce of an account. Must be higher than the current nonce of the account."},"setNonceUnsafe(address,uint64)":{"notice":"Sets the nonce of an account to an arbitrary value."},"shuffle(uint256[])":{"notice":"Randomly shuffles an array."},"sign((address,uint256,uint256,uint256),bytes32)":{"notice":"Signs data with a `Wallet`."},"sign(address,bytes32)":{"notice":"Signs `digest` with signer provided to script using the secp256k1 curve. Raises error if none of the signers passed into the script have provided address."},"sign(bytes32)":{"notice":"Signs `digest` with signer provided to script using the secp256k1 curve. If `--sender` is provided, the signer with provided address is used, otherwise, if exactly one signer is provided to the script, that signer is used. Raises error if signer passed through `--sender` does not match any unlocked signers or if `--sender` is not provided and not exactly one signer is passed to the script."},"sign(uint256,bytes32)":{"notice":"Signs `digest` with `privateKey` using the secp256k1 curve."},"signAndAttachDelegation(address,uint256)":{"notice":"Sign an EIP-7702 authorization and designate the next call as an EIP-7702 transaction"},"signAndAttachDelegation(address,uint256,uint64)":{"notice":"Sign an EIP-7702 authorization and designate the next call as an EIP-7702 transaction for specific nonce"},"signCompact((address,uint256,uint256,uint256),bytes32)":{"notice":"Signs data with a `Wallet`. Returns a compact signature (`r`, `vs`) as per EIP-2098, where `vs` encodes both the signature's `s` value, and the recovery id `v` in a single bytes32. This format reduces the signature size from 65 to 64 bytes."},"signCompact(address,bytes32)":{"notice":"Signs `digest` with signer provided to script using the secp256k1 curve. Returns a compact signature (`r`, `vs`) as per EIP-2098, where `vs` encodes both the signature's `s` value, and the recovery id `v` in a single bytes32. This format reduces the signature size from 65 to 64 bytes. Raises error if none of the signers passed into the script have provided address."},"signCompact(bytes32)":{"notice":"Signs `digest` with signer provided to script using the secp256k1 curve. Returns a compact signature (`r`, `vs`) as per EIP-2098, where `vs` encodes both the signature's `s` value, and the recovery id `v` in a single bytes32. This format reduces the signature size from 65 to 64 bytes. If `--sender` is provided, the signer with provided address is used, otherwise, if exactly one signer is provided to the script, that signer is used. Raises error if signer passed through `--sender` does not match any unlocked signers or if `--sender` is not provided and not exactly one signer is passed to the script."},"signCompact(uint256,bytes32)":{"notice":"Signs `digest` with `privateKey` using the secp256k1 curve. Returns a compact signature (`r`, `vs`) as per EIP-2098, where `vs` encodes both the signature's `s` value, and the recovery id `v` in a single bytes32. This format reduces the signature size from 65 to 64 bytes."},"signDelegation(address,uint256)":{"notice":"Sign an EIP-7702 authorization for delegation"},"signDelegation(address,uint256,uint64)":{"notice":"Sign an EIP-7702 authorization for delegation for specific nonce"},"signP256(uint256,bytes32)":{"notice":"Signs `digest` with `privateKey` using the secp256r1 curve."},"skip(bool)":{"notice":"Marks a test as skipped. Must be called at the top level of a test."},"skip(bool,string)":{"notice":"Marks a test as skipped with a reason. Must be called at the top level of a test."},"sleep(uint256)":{"notice":"Suspends execution of the main thread for `duration` milliseconds."},"snapshot()":{"notice":"`snapshot` is being deprecated in favor of `snapshotState`. It will be removed in future versions."},"snapshotGasLastCall(string)":{"notice":"Snapshot capture the gas usage of the last call by name from the callee perspective."},"snapshotGasLastCall(string,string)":{"notice":"Snapshot capture the gas usage of the last call by name in a group from the callee perspective."},"snapshotState()":{"notice":"Snapshot the current state of the evm. Returns the ID of the snapshot that was created. To revert a snapshot use `revertToState`."},"snapshotValue(string,string,uint256)":{"notice":"Snapshot capture an arbitrary numerical value by name in a group."},"snapshotValue(string,uint256)":{"notice":"Snapshot capture an arbitrary numerical value by name. The group name is derived from the contract name."},"sort(uint256[])":{"notice":"Sorts an array in ascending order."},"split(string,string)":{"notice":"Splits the given `string` into an array of strings divided by the `delimiter`."},"startBroadcast()":{"notice":"Has all subsequent calls (at this call depth only) create transactions that can later be signed and sent onchain. Broadcasting address is determined by checking the following in order: 1. If `--sender` argument was provided, that address is used. 2. If exactly one signer (e.g. private key, hw wallet, keystore) is set when `forge broadcast` is invoked, that signer is used. 3. Otherwise, default foundry sender (1804c8AB1F12E6bbf3894d4083f33e07309d1f38) is used."},"startBroadcast(address)":{"notice":"Has all subsequent calls (at this call depth only) create transactions with the address provided that can later be signed and sent onchain."},"startBroadcast(uint256)":{"notice":"Has all subsequent calls (at this call depth only) create transactions with the private key provided that can later be signed and sent onchain."},"startDebugTraceRecording()":{"notice":"Records the debug trace during the run."},"startMappingRecording()":{"notice":"Starts recording all map SSTOREs for later retrieval."},"startPrank(address)":{"notice":"Sets all subsequent calls' `msg.sender` to be the input address until `stopPrank` is called."},"startPrank(address,address)":{"notice":"Sets all subsequent calls' `msg.sender` to be the input address until `stopPrank` is called, and the `tx.origin` to be the second input."},"startPrank(address,address,bool)":{"notice":"Sets all subsequent delegate calls' `msg.sender` to be the input address until `stopPrank` is called, and the `tx.origin` to be the second input."},"startPrank(address,bool)":{"notice":"Sets all subsequent delegate calls' `msg.sender` to be the input address until `stopPrank` is called."},"startSnapshotGas(string)":{"notice":"Start a snapshot capture of the current gas usage by name. The group name is derived from the contract name."},"startSnapshotGas(string,string)":{"notice":"Start a snapshot capture of the current gas usage by name in a group."},"startStateDiffRecording()":{"notice":"Record all account accesses as part of CREATE, CALL or SELFDESTRUCT opcodes in order, along with the context of the calls"},"stopAndReturnDebugTraceRecording()":{"notice":"Stop debug trace recording and returns the recorded debug trace."},"stopAndReturnStateDiff()":{"notice":"Returns an ordered array of all account accesses from a `vm.startStateDiffRecording` session."},"stopBroadcast()":{"notice":"Stops collecting onchain transactions."},"stopExpectSafeMemory()":{"notice":"Stops all safe memory expectation in the current subcontext."},"stopMappingRecording()":{"notice":"Stops recording all map SSTOREs for later retrieval and clears the recorded data."},"stopPrank()":{"notice":"Resets subsequent calls' `msg.sender` to be `address(this)`."},"stopSnapshotGas()":{"notice":"Stop the snapshot capture of the current gas by latest snapshot name, capturing the gas used since the start."},"stopSnapshotGas(string)":{"notice":"Stop the snapshot capture of the current gas usage by name, capturing the gas used since the start. The group name is derived from the contract name."},"stopSnapshotGas(string,string)":{"notice":"Stop the snapshot capture of the current gas usage by name in a group, capturing the gas used since the start."},"store(address,bytes32,bytes32)":{"notice":"Stores a value to an address' storage slot."},"toBase64(bytes)":{"notice":"Encodes a `bytes` value to a base64 string."},"toBase64(string)":{"notice":"Encodes a `string` value to a base64 string."},"toBase64URL(bytes)":{"notice":"Encodes a `bytes` value to a base64url string."},"toBase64URL(string)":{"notice":"Encodes a `string` value to a base64url string."},"toLowercase(string)":{"notice":"Converts the given `string` value to Lowercase."},"toString(address)":{"notice":"Converts the given value to a `string`."},"toString(bool)":{"notice":"Converts the given value to a `string`."},"toString(bytes)":{"notice":"Converts the given value to a `string`."},"toString(bytes32)":{"notice":"Converts the given value to a `string`."},"toString(int256)":{"notice":"Converts the given value to a `string`."},"toString(uint256)":{"notice":"Converts the given value to a `string`."},"toUppercase(string)":{"notice":"Converts the given `string` value to Uppercase."},"transact(bytes32)":{"notice":"Fetches the given transaction from the active fork and executes it on the current state."},"transact(uint256,bytes32)":{"notice":"Fetches the given transaction from the given fork and executes it on the current state."},"trim(string)":{"notice":"Trims leading and trailing whitespace from the given `string` value."},"tryFfi(string[])":{"notice":"Performs a foreign function call via terminal and returns the exit code, stdout, and stderr."},"txGasPrice(uint256)":{"notice":"Sets `tx.gasprice`."},"unixTime()":{"notice":"Returns the time since unix epoch in milliseconds."},"warmSlot(address,bytes32)":{"notice":"Utility cheatcode to mark specific storage slot as warm, simulating a prior read."},"warp(uint256)":{"notice":"Sets `block.timestamp`."},"writeFile(string,string)":{"notice":"Writes data to file, creating a file if it does not exist, and entirely replacing its contents if it does. `path` is relative to the project root."},"writeFileBinary(string,bytes)":{"notice":"Writes binary data to a file, creating a file if it does not exist, and entirely replacing its contents if it does. `path` is relative to the project root."},"writeJson(string,string)":{"notice":"Write a serialized JSON object to a file. If the file exists, it will be overwritten."},"writeJson(string,string,string)":{"notice":"Write a serialized JSON object to an **existing** JSON file, replacing a value with key = This is useful to replace a specific value of a JSON file, without having to parse the entire thing."},"writeLine(string,string)":{"notice":"Writes line to file, creating a file if it does not exist. `path` is relative to the project root."},"writeToml(string,string)":{"notice":"Takes serialized JSON, converts to TOML and write a serialized TOML to a file."},"writeToml(string,string,string)":{"notice":"Takes serialized JSON, converts to TOML and write a serialized TOML table to an **existing** TOML file, replacing a value with key = This is useful to replace a specific value of a TOML file, without having to parse the entire thing."}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"lib/forge-std/src/Vm.sol":"Vm"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"}},"version":1},"id":17} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Vm.sol/VmSafe.json b/contracts/artifacts/wallet-contracts-v3/Vm.sol/VmSafe.json new file mode 100644 index 00000000..bd5e59f7 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Vm.sol/VmSafe.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"accesses","inputs":[{"name":"target","type":"address","internalType":"address"}],"outputs":[{"name":"readSlots","type":"bytes32[]","internalType":"bytes32[]"},{"name":"writeSlots","type":"bytes32[]","internalType":"bytes32[]"}],"stateMutability":"nonpayable"},{"type":"function","name":"addr","inputs":[{"name":"privateKey","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"keyAddr","type":"address","internalType":"address"}],"stateMutability":"pure"},{"type":"function","name":"assertApproxEqAbs","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"maxDelta","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertApproxEqAbs","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"maxDelta","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertApproxEqAbs","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"maxDelta","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertApproxEqAbs","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"maxDelta","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertApproxEqAbsDecimal","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"maxDelta","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertApproxEqAbsDecimal","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"maxDelta","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertApproxEqAbsDecimal","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"maxDelta","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertApproxEqAbsDecimal","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"maxDelta","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertApproxEqRel","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"maxPercentDelta","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertApproxEqRel","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"maxPercentDelta","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertApproxEqRel","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"maxPercentDelta","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertApproxEqRel","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"maxPercentDelta","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertApproxEqRelDecimal","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"maxPercentDelta","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertApproxEqRelDecimal","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"maxPercentDelta","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertApproxEqRelDecimal","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"maxPercentDelta","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertApproxEqRelDecimal","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"maxPercentDelta","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"bytes32[]","internalType":"bytes32[]"},{"name":"right","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"int256[]","internalType":"int256[]"},{"name":"right","type":"int256[]","internalType":"int256[]"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"address","internalType":"address"},{"name":"right","type":"address","internalType":"address"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"string","internalType":"string"},{"name":"right","type":"string","internalType":"string"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"address[]","internalType":"address[]"},{"name":"right","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"address[]","internalType":"address[]"},{"name":"right","type":"address[]","internalType":"address[]"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"bool","internalType":"bool"},{"name":"right","type":"bool","internalType":"bool"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"address","internalType":"address"},{"name":"right","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"uint256[]","internalType":"uint256[]"},{"name":"right","type":"uint256[]","internalType":"uint256[]"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"bool[]","internalType":"bool[]"},{"name":"right","type":"bool[]","internalType":"bool[]"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"int256[]","internalType":"int256[]"},{"name":"right","type":"int256[]","internalType":"int256[]"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"bytes32","internalType":"bytes32"},{"name":"right","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"uint256[]","internalType":"uint256[]"},{"name":"right","type":"uint256[]","internalType":"uint256[]"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"bytes","internalType":"bytes"},{"name":"right","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"bytes32","internalType":"bytes32"},{"name":"right","type":"bytes32","internalType":"bytes32"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"string[]","internalType":"string[]"},{"name":"right","type":"string[]","internalType":"string[]"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"bytes32[]","internalType":"bytes32[]"},{"name":"right","type":"bytes32[]","internalType":"bytes32[]"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"bytes","internalType":"bytes"},{"name":"right","type":"bytes","internalType":"bytes"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"bool[]","internalType":"bool[]"},{"name":"right","type":"bool[]","internalType":"bool[]"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"bytes[]","internalType":"bytes[]"},{"name":"right","type":"bytes[]","internalType":"bytes[]"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"string[]","internalType":"string[]"},{"name":"right","type":"string[]","internalType":"string[]"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"string","internalType":"string"},{"name":"right","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"bytes[]","internalType":"bytes[]"},{"name":"right","type":"bytes[]","internalType":"bytes[]"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"bool","internalType":"bool"},{"name":"right","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEq","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEqDecimal","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEqDecimal","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"decimals","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEqDecimal","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"decimals","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertEqDecimal","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertFalse","inputs":[{"name":"condition","type":"bool","internalType":"bool"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertFalse","inputs":[{"name":"condition","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertGe","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertGe","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertGe","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertGe","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertGeDecimal","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertGeDecimal","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"decimals","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertGeDecimal","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertGeDecimal","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"decimals","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertGt","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertGt","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertGt","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertGt","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertGtDecimal","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"decimals","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertGtDecimal","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertGtDecimal","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"decimals","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertGtDecimal","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertLe","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertLe","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertLe","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertLe","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertLeDecimal","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"decimals","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertLeDecimal","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertLeDecimal","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"decimals","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertLeDecimal","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertLt","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertLt","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertLt","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertLt","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertLtDecimal","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertLtDecimal","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"decimals","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertLtDecimal","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertLtDecimal","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"decimals","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"bytes32[]","internalType":"bytes32[]"},{"name":"right","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"int256[]","internalType":"int256[]"},{"name":"right","type":"int256[]","internalType":"int256[]"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"bool","internalType":"bool"},{"name":"right","type":"bool","internalType":"bool"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"bytes[]","internalType":"bytes[]"},{"name":"right","type":"bytes[]","internalType":"bytes[]"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"bool","internalType":"bool"},{"name":"right","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"bool[]","internalType":"bool[]"},{"name":"right","type":"bool[]","internalType":"bool[]"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"bytes","internalType":"bytes"},{"name":"right","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"address[]","internalType":"address[]"},{"name":"right","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"uint256[]","internalType":"uint256[]"},{"name":"right","type":"uint256[]","internalType":"uint256[]"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"bool[]","internalType":"bool[]"},{"name":"right","type":"bool[]","internalType":"bool[]"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"string","internalType":"string"},{"name":"right","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"address[]","internalType":"address[]"},{"name":"right","type":"address[]","internalType":"address[]"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"string","internalType":"string"},{"name":"right","type":"string","internalType":"string"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"address","internalType":"address"},{"name":"right","type":"address","internalType":"address"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"bytes32","internalType":"bytes32"},{"name":"right","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"bytes","internalType":"bytes"},{"name":"right","type":"bytes","internalType":"bytes"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"uint256[]","internalType":"uint256[]"},{"name":"right","type":"uint256[]","internalType":"uint256[]"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"address","internalType":"address"},{"name":"right","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"bytes32","internalType":"bytes32"},{"name":"right","type":"bytes32","internalType":"bytes32"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"string[]","internalType":"string[]"},{"name":"right","type":"string[]","internalType":"string[]"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"bytes32[]","internalType":"bytes32[]"},{"name":"right","type":"bytes32[]","internalType":"bytes32[]"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"string[]","internalType":"string[]"},{"name":"right","type":"string[]","internalType":"string[]"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"int256[]","internalType":"int256[]"},{"name":"right","type":"int256[]","internalType":"int256[]"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"bytes[]","internalType":"bytes[]"},{"name":"right","type":"bytes[]","internalType":"bytes[]"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEq","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEqDecimal","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"decimals","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEqDecimal","inputs":[{"name":"left","type":"int256","internalType":"int256"},{"name":"right","type":"int256","internalType":"int256"},{"name":"decimals","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEqDecimal","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertNotEqDecimal","inputs":[{"name":"left","type":"uint256","internalType":"uint256"},{"name":"right","type":"uint256","internalType":"uint256"},{"name":"decimals","type":"uint256","internalType":"uint256"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertTrue","inputs":[{"name":"condition","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assertTrue","inputs":[{"name":"condition","type":"bool","internalType":"bool"},{"name":"error","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assume","inputs":[{"name":"condition","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assumeNoRevert","inputs":[],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assumeNoRevert","inputs":[{"name":"potentialReverts","type":"tuple[]","internalType":"struct VmSafe.PotentialRevert[]","components":[{"name":"reverter","type":"address","internalType":"address"},{"name":"partialMatch","type":"bool","internalType":"bool"},{"name":"revertData","type":"bytes","internalType":"bytes"}]}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"assumeNoRevert","inputs":[{"name":"potentialRevert","type":"tuple","internalType":"struct VmSafe.PotentialRevert","components":[{"name":"reverter","type":"address","internalType":"address"},{"name":"partialMatch","type":"bool","internalType":"bool"},{"name":"revertData","type":"bytes","internalType":"bytes"}]}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"attachBlob","inputs":[{"name":"blob","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"attachDelegation","inputs":[{"name":"signedDelegation","type":"tuple","internalType":"struct VmSafe.SignedDelegation","components":[{"name":"v","type":"uint8","internalType":"uint8"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"},{"name":"nonce","type":"uint64","internalType":"uint64"},{"name":"implementation","type":"address","internalType":"address"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"breakpoint","inputs":[{"name":"char","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"breakpoint","inputs":[{"name":"char","type":"string","internalType":"string"},{"name":"value","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"broadcast","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"broadcast","inputs":[{"name":"signer","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"broadcast","inputs":[{"name":"privateKey","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"broadcastRawTransaction","inputs":[{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"closeFile","inputs":[{"name":"path","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"computeCreate2Address","inputs":[{"name":"salt","type":"bytes32","internalType":"bytes32"},{"name":"initCodeHash","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"pure"},{"type":"function","name":"computeCreate2Address","inputs":[{"name":"salt","type":"bytes32","internalType":"bytes32"},{"name":"initCodeHash","type":"bytes32","internalType":"bytes32"},{"name":"deployer","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"pure"},{"type":"function","name":"computeCreateAddress","inputs":[{"name":"deployer","type":"address","internalType":"address"},{"name":"nonce","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"pure"},{"type":"function","name":"contains","inputs":[{"name":"subject","type":"string","internalType":"string"},{"name":"search","type":"string","internalType":"string"}],"outputs":[{"name":"result","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"copyFile","inputs":[{"name":"from","type":"string","internalType":"string"},{"name":"to","type":"string","internalType":"string"}],"outputs":[{"name":"copied","type":"uint64","internalType":"uint64"}],"stateMutability":"nonpayable"},{"type":"function","name":"copyStorage","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"createDir","inputs":[{"name":"path","type":"string","internalType":"string"},{"name":"recursive","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"createWallet","inputs":[{"name":"walletLabel","type":"string","internalType":"string"}],"outputs":[{"name":"wallet","type":"tuple","internalType":"struct VmSafe.Wallet","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"publicKeyX","type":"uint256","internalType":"uint256"},{"name":"publicKeyY","type":"uint256","internalType":"uint256"},{"name":"privateKey","type":"uint256","internalType":"uint256"}]}],"stateMutability":"nonpayable"},{"type":"function","name":"createWallet","inputs":[{"name":"privateKey","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"wallet","type":"tuple","internalType":"struct VmSafe.Wallet","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"publicKeyX","type":"uint256","internalType":"uint256"},{"name":"publicKeyY","type":"uint256","internalType":"uint256"},{"name":"privateKey","type":"uint256","internalType":"uint256"}]}],"stateMutability":"nonpayable"},{"type":"function","name":"createWallet","inputs":[{"name":"privateKey","type":"uint256","internalType":"uint256"},{"name":"walletLabel","type":"string","internalType":"string"}],"outputs":[{"name":"wallet","type":"tuple","internalType":"struct VmSafe.Wallet","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"publicKeyX","type":"uint256","internalType":"uint256"},{"name":"publicKeyY","type":"uint256","internalType":"uint256"},{"name":"privateKey","type":"uint256","internalType":"uint256"}]}],"stateMutability":"nonpayable"},{"type":"function","name":"deployCode","inputs":[{"name":"artifactPath","type":"string","internalType":"string"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"deployedAddress","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"deployCode","inputs":[{"name":"artifactPath","type":"string","internalType":"string"},{"name":"constructorArgs","type":"bytes","internalType":"bytes"},{"name":"salt","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"deployedAddress","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"deployCode","inputs":[{"name":"artifactPath","type":"string","internalType":"string"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"deployedAddress","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"deployCode","inputs":[{"name":"artifactPath","type":"string","internalType":"string"},{"name":"salt","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"deployedAddress","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"deployCode","inputs":[{"name":"artifactPath","type":"string","internalType":"string"},{"name":"constructorArgs","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"deployedAddress","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"deployCode","inputs":[{"name":"artifactPath","type":"string","internalType":"string"},{"name":"constructorArgs","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"deployedAddress","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"deployCode","inputs":[{"name":"artifactPath","type":"string","internalType":"string"}],"outputs":[{"name":"deployedAddress","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"deployCode","inputs":[{"name":"artifactPath","type":"string","internalType":"string"},{"name":"constructorArgs","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"deployedAddress","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"deriveKey","inputs":[{"name":"mnemonic","type":"string","internalType":"string"},{"name":"derivationPath","type":"string","internalType":"string"},{"name":"index","type":"uint32","internalType":"uint32"},{"name":"language","type":"string","internalType":"string"}],"outputs":[{"name":"privateKey","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"deriveKey","inputs":[{"name":"mnemonic","type":"string","internalType":"string"},{"name":"index","type":"uint32","internalType":"uint32"},{"name":"language","type":"string","internalType":"string"}],"outputs":[{"name":"privateKey","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"deriveKey","inputs":[{"name":"mnemonic","type":"string","internalType":"string"},{"name":"index","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"privateKey","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"deriveKey","inputs":[{"name":"mnemonic","type":"string","internalType":"string"},{"name":"derivationPath","type":"string","internalType":"string"},{"name":"index","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"privateKey","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"ensNamehash","inputs":[{"name":"name","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"type":"function","name":"envAddress","inputs":[{"name":"name","type":"string","internalType":"string"}],"outputs":[{"name":"value","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"envAddress","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"delim","type":"string","internalType":"string"}],"outputs":[{"name":"value","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"envBool","inputs":[{"name":"name","type":"string","internalType":"string"}],"outputs":[{"name":"value","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"envBool","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"delim","type":"string","internalType":"string"}],"outputs":[{"name":"value","type":"bool[]","internalType":"bool[]"}],"stateMutability":"view"},{"type":"function","name":"envBytes","inputs":[{"name":"name","type":"string","internalType":"string"}],"outputs":[{"name":"value","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"envBytes","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"delim","type":"string","internalType":"string"}],"outputs":[{"name":"value","type":"bytes[]","internalType":"bytes[]"}],"stateMutability":"view"},{"type":"function","name":"envBytes32","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"delim","type":"string","internalType":"string"}],"outputs":[{"name":"value","type":"bytes32[]","internalType":"bytes32[]"}],"stateMutability":"view"},{"type":"function","name":"envBytes32","inputs":[{"name":"name","type":"string","internalType":"string"}],"outputs":[{"name":"value","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"envExists","inputs":[{"name":"name","type":"string","internalType":"string"}],"outputs":[{"name":"result","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"envInt","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"delim","type":"string","internalType":"string"}],"outputs":[{"name":"value","type":"int256[]","internalType":"int256[]"}],"stateMutability":"view"},{"type":"function","name":"envInt","inputs":[{"name":"name","type":"string","internalType":"string"}],"outputs":[{"name":"value","type":"int256","internalType":"int256"}],"stateMutability":"view"},{"type":"function","name":"envOr","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"delim","type":"string","internalType":"string"},{"name":"defaultValue","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[{"name":"value","type":"bytes32[]","internalType":"bytes32[]"}],"stateMutability":"view"},{"type":"function","name":"envOr","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"delim","type":"string","internalType":"string"},{"name":"defaultValue","type":"int256[]","internalType":"int256[]"}],"outputs":[{"name":"value","type":"int256[]","internalType":"int256[]"}],"stateMutability":"view"},{"type":"function","name":"envOr","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"defaultValue","type":"bool","internalType":"bool"}],"outputs":[{"name":"value","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"envOr","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"defaultValue","type":"address","internalType":"address"}],"outputs":[{"name":"value","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"envOr","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"defaultValue","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"value","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"envOr","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"delim","type":"string","internalType":"string"},{"name":"defaultValue","type":"bytes[]","internalType":"bytes[]"}],"outputs":[{"name":"value","type":"bytes[]","internalType":"bytes[]"}],"stateMutability":"view"},{"type":"function","name":"envOr","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"delim","type":"string","internalType":"string"},{"name":"defaultValue","type":"uint256[]","internalType":"uint256[]"}],"outputs":[{"name":"value","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"envOr","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"delim","type":"string","internalType":"string"},{"name":"defaultValue","type":"string[]","internalType":"string[]"}],"outputs":[{"name":"value","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"envOr","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"defaultValue","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"value","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"envOr","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"defaultValue","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"value","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"envOr","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"defaultValue","type":"int256","internalType":"int256"}],"outputs":[{"name":"value","type":"int256","internalType":"int256"}],"stateMutability":"view"},{"type":"function","name":"envOr","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"delim","type":"string","internalType":"string"},{"name":"defaultValue","type":"address[]","internalType":"address[]"}],"outputs":[{"name":"value","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"envOr","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"defaultValue","type":"string","internalType":"string"}],"outputs":[{"name":"value","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"envOr","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"delim","type":"string","internalType":"string"},{"name":"defaultValue","type":"bool[]","internalType":"bool[]"}],"outputs":[{"name":"value","type":"bool[]","internalType":"bool[]"}],"stateMutability":"view"},{"type":"function","name":"envString","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"delim","type":"string","internalType":"string"}],"outputs":[{"name":"value","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"envString","inputs":[{"name":"name","type":"string","internalType":"string"}],"outputs":[{"name":"value","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"envUint","inputs":[{"name":"name","type":"string","internalType":"string"}],"outputs":[{"name":"value","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"envUint","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"delim","type":"string","internalType":"string"}],"outputs":[{"name":"value","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"view"},{"type":"function","name":"eth_getLogs","inputs":[{"name":"fromBlock","type":"uint256","internalType":"uint256"},{"name":"toBlock","type":"uint256","internalType":"uint256"},{"name":"target","type":"address","internalType":"address"},{"name":"topics","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[{"name":"logs","type":"tuple[]","internalType":"struct VmSafe.EthGetLogs[]","components":[{"name":"emitter","type":"address","internalType":"address"},{"name":"topics","type":"bytes32[]","internalType":"bytes32[]"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"blockHash","type":"bytes32","internalType":"bytes32"},{"name":"blockNumber","type":"uint64","internalType":"uint64"},{"name":"transactionHash","type":"bytes32","internalType":"bytes32"},{"name":"transactionIndex","type":"uint64","internalType":"uint64"},{"name":"logIndex","type":"uint256","internalType":"uint256"},{"name":"removed","type":"bool","internalType":"bool"}]}],"stateMutability":"nonpayable"},{"type":"function","name":"exists","inputs":[{"name":"path","type":"string","internalType":"string"}],"outputs":[{"name":"result","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"ffi","inputs":[{"name":"commandInput","type":"string[]","internalType":"string[]"}],"outputs":[{"name":"result","type":"bytes","internalType":"bytes"}],"stateMutability":"nonpayable"},{"type":"function","name":"foundryVersionAtLeast","inputs":[{"name":"version","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"foundryVersionCmp","inputs":[{"name":"version","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"int256","internalType":"int256"}],"stateMutability":"view"},{"type":"function","name":"fsMetadata","inputs":[{"name":"path","type":"string","internalType":"string"}],"outputs":[{"name":"metadata","type":"tuple","internalType":"struct VmSafe.FsMetadata","components":[{"name":"isDir","type":"bool","internalType":"bool"},{"name":"isSymlink","type":"bool","internalType":"bool"},{"name":"length","type":"uint256","internalType":"uint256"},{"name":"readOnly","type":"bool","internalType":"bool"},{"name":"modified","type":"uint256","internalType":"uint256"},{"name":"accessed","type":"uint256","internalType":"uint256"},{"name":"created","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"getArtifactPathByCode","inputs":[{"name":"code","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"path","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"getArtifactPathByDeployedCode","inputs":[{"name":"deployedCode","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"path","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"getBlobBaseFee","inputs":[],"outputs":[{"name":"blobBaseFee","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getBlockNumber","inputs":[],"outputs":[{"name":"height","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getBlockTimestamp","inputs":[],"outputs":[{"name":"timestamp","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getBroadcast","inputs":[{"name":"contractName","type":"string","internalType":"string"},{"name":"chainId","type":"uint64","internalType":"uint64"},{"name":"txType","type":"uint8","internalType":"enum VmSafe.BroadcastTxType"}],"outputs":[{"name":"","type":"tuple","internalType":"struct VmSafe.BroadcastTxSummary","components":[{"name":"txHash","type":"bytes32","internalType":"bytes32"},{"name":"txType","type":"uint8","internalType":"enum VmSafe.BroadcastTxType"},{"name":"contractAddress","type":"address","internalType":"address"},{"name":"blockNumber","type":"uint64","internalType":"uint64"},{"name":"success","type":"bool","internalType":"bool"}]}],"stateMutability":"view"},{"type":"function","name":"getBroadcasts","inputs":[{"name":"contractName","type":"string","internalType":"string"},{"name":"chainId","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"","type":"tuple[]","internalType":"struct VmSafe.BroadcastTxSummary[]","components":[{"name":"txHash","type":"bytes32","internalType":"bytes32"},{"name":"txType","type":"uint8","internalType":"enum VmSafe.BroadcastTxType"},{"name":"contractAddress","type":"address","internalType":"address"},{"name":"blockNumber","type":"uint64","internalType":"uint64"},{"name":"success","type":"bool","internalType":"bool"}]}],"stateMutability":"view"},{"type":"function","name":"getBroadcasts","inputs":[{"name":"contractName","type":"string","internalType":"string"},{"name":"chainId","type":"uint64","internalType":"uint64"},{"name":"txType","type":"uint8","internalType":"enum VmSafe.BroadcastTxType"}],"outputs":[{"name":"","type":"tuple[]","internalType":"struct VmSafe.BroadcastTxSummary[]","components":[{"name":"txHash","type":"bytes32","internalType":"bytes32"},{"name":"txType","type":"uint8","internalType":"enum VmSafe.BroadcastTxType"},{"name":"contractAddress","type":"address","internalType":"address"},{"name":"blockNumber","type":"uint64","internalType":"uint64"},{"name":"success","type":"bool","internalType":"bool"}]}],"stateMutability":"view"},{"type":"function","name":"getChain","inputs":[{"name":"chainAlias","type":"string","internalType":"string"}],"outputs":[{"name":"chain","type":"tuple","internalType":"struct VmSafe.Chain","components":[{"name":"name","type":"string","internalType":"string"},{"name":"chainId","type":"uint256","internalType":"uint256"},{"name":"chainAlias","type":"string","internalType":"string"},{"name":"rpcUrl","type":"string","internalType":"string"}]}],"stateMutability":"view"},{"type":"function","name":"getChain","inputs":[{"name":"chainId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"chain","type":"tuple","internalType":"struct VmSafe.Chain","components":[{"name":"name","type":"string","internalType":"string"},{"name":"chainId","type":"uint256","internalType":"uint256"},{"name":"chainAlias","type":"string","internalType":"string"},{"name":"rpcUrl","type":"string","internalType":"string"}]}],"stateMutability":"view"},{"type":"function","name":"getCode","inputs":[{"name":"artifactPath","type":"string","internalType":"string"}],"outputs":[{"name":"creationBytecode","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"getDeployedCode","inputs":[{"name":"artifactPath","type":"string","internalType":"string"}],"outputs":[{"name":"runtimeBytecode","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"getDeployment","inputs":[{"name":"contractName","type":"string","internalType":"string"},{"name":"chainId","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"deployedAddress","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getDeployment","inputs":[{"name":"contractName","type":"string","internalType":"string"}],"outputs":[{"name":"deployedAddress","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getDeployments","inputs":[{"name":"contractName","type":"string","internalType":"string"},{"name":"chainId","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"deployedAddresses","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getFoundryVersion","inputs":[],"outputs":[{"name":"version","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"getLabel","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"currentLabel","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"getMappingKeyAndParentOf","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"elementSlot","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"found","type":"bool","internalType":"bool"},{"name":"key","type":"bytes32","internalType":"bytes32"},{"name":"parent","type":"bytes32","internalType":"bytes32"}],"stateMutability":"nonpayable"},{"type":"function","name":"getMappingLength","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"mappingSlot","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"length","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"getMappingSlotAt","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"mappingSlot","type":"bytes32","internalType":"bytes32"},{"name":"idx","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"value","type":"bytes32","internalType":"bytes32"}],"stateMutability":"nonpayable"},{"type":"function","name":"getNonce","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"nonce","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"getNonce","inputs":[{"name":"wallet","type":"tuple","internalType":"struct VmSafe.Wallet","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"publicKeyX","type":"uint256","internalType":"uint256"},{"name":"publicKeyY","type":"uint256","internalType":"uint256"},{"name":"privateKey","type":"uint256","internalType":"uint256"}]}],"outputs":[{"name":"nonce","type":"uint64","internalType":"uint64"}],"stateMutability":"nonpayable"},{"type":"function","name":"getRecordedLogs","inputs":[],"outputs":[{"name":"logs","type":"tuple[]","internalType":"struct VmSafe.Log[]","components":[{"name":"topics","type":"bytes32[]","internalType":"bytes32[]"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"emitter","type":"address","internalType":"address"}]}],"stateMutability":"nonpayable"},{"type":"function","name":"getStateDiff","inputs":[],"outputs":[{"name":"diff","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"getStateDiffJson","inputs":[],"outputs":[{"name":"diff","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"getWallets","inputs":[],"outputs":[{"name":"wallets","type":"address[]","internalType":"address[]"}],"stateMutability":"nonpayable"},{"type":"function","name":"indexOf","inputs":[{"name":"input","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"isContext","inputs":[{"name":"context","type":"uint8","internalType":"enum VmSafe.ForgeContext"}],"outputs":[{"name":"result","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isDir","inputs":[{"name":"path","type":"string","internalType":"string"}],"outputs":[{"name":"result","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isFile","inputs":[{"name":"path","type":"string","internalType":"string"}],"outputs":[{"name":"result","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"keyExists","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"keyExistsJson","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"keyExistsToml","inputs":[{"name":"toml","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"label","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"newLabel","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"lastCallGas","inputs":[],"outputs":[{"name":"gas","type":"tuple","internalType":"struct VmSafe.Gas","components":[{"name":"gasLimit","type":"uint64","internalType":"uint64"},{"name":"gasTotalUsed","type":"uint64","internalType":"uint64"},{"name":"gasMemoryUsed","type":"uint64","internalType":"uint64"},{"name":"gasRefunded","type":"int64","internalType":"int64"},{"name":"gasRemaining","type":"uint64","internalType":"uint64"}]}],"stateMutability":"view"},{"type":"function","name":"load","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"slot","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"data","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"parseAddress","inputs":[{"name":"stringifiedValue","type":"string","internalType":"string"}],"outputs":[{"name":"parsedValue","type":"address","internalType":"address"}],"stateMutability":"pure"},{"type":"function","name":"parseBool","inputs":[{"name":"stringifiedValue","type":"string","internalType":"string"}],"outputs":[{"name":"parsedValue","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"parseBytes","inputs":[{"name":"stringifiedValue","type":"string","internalType":"string"}],"outputs":[{"name":"parsedValue","type":"bytes","internalType":"bytes"}],"stateMutability":"pure"},{"type":"function","name":"parseBytes32","inputs":[{"name":"stringifiedValue","type":"string","internalType":"string"}],"outputs":[{"name":"parsedValue","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"type":"function","name":"parseInt","inputs":[{"name":"stringifiedValue","type":"string","internalType":"string"}],"outputs":[{"name":"parsedValue","type":"int256","internalType":"int256"}],"stateMutability":"pure"},{"type":"function","name":"parseJson","inputs":[{"name":"json","type":"string","internalType":"string"}],"outputs":[{"name":"abiEncodedData","type":"bytes","internalType":"bytes"}],"stateMutability":"pure"},{"type":"function","name":"parseJson","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"abiEncodedData","type":"bytes","internalType":"bytes"}],"stateMutability":"pure"},{"type":"function","name":"parseJsonAddress","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"pure"},{"type":"function","name":"parseJsonAddressArray","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"pure"},{"type":"function","name":"parseJsonBool","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"parseJsonBoolArray","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bool[]","internalType":"bool[]"}],"stateMutability":"pure"},{"type":"function","name":"parseJsonBytes","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"pure"},{"type":"function","name":"parseJsonBytes32","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"type":"function","name":"parseJsonBytes32Array","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bytes32[]","internalType":"bytes32[]"}],"stateMutability":"pure"},{"type":"function","name":"parseJsonBytesArray","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bytes[]","internalType":"bytes[]"}],"stateMutability":"pure"},{"type":"function","name":"parseJsonInt","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"int256","internalType":"int256"}],"stateMutability":"pure"},{"type":"function","name":"parseJsonIntArray","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"int256[]","internalType":"int256[]"}],"stateMutability":"pure"},{"type":"function","name":"parseJsonKeys","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"keys","type":"string[]","internalType":"string[]"}],"stateMutability":"pure"},{"type":"function","name":"parseJsonString","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"parseJsonStringArray","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"string[]","internalType":"string[]"}],"stateMutability":"pure"},{"type":"function","name":"parseJsonType","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"typeDescription","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"pure"},{"type":"function","name":"parseJsonType","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"},{"name":"typeDescription","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"pure"},{"type":"function","name":"parseJsonTypeArray","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"},{"name":"typeDescription","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"pure"},{"type":"function","name":"parseJsonUint","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"parseJsonUintArray","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"pure"},{"type":"function","name":"parseToml","inputs":[{"name":"toml","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"abiEncodedData","type":"bytes","internalType":"bytes"}],"stateMutability":"pure"},{"type":"function","name":"parseToml","inputs":[{"name":"toml","type":"string","internalType":"string"}],"outputs":[{"name":"abiEncodedData","type":"bytes","internalType":"bytes"}],"stateMutability":"pure"},{"type":"function","name":"parseTomlAddress","inputs":[{"name":"toml","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"pure"},{"type":"function","name":"parseTomlAddressArray","inputs":[{"name":"toml","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"pure"},{"type":"function","name":"parseTomlBool","inputs":[{"name":"toml","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"parseTomlBoolArray","inputs":[{"name":"toml","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bool[]","internalType":"bool[]"}],"stateMutability":"pure"},{"type":"function","name":"parseTomlBytes","inputs":[{"name":"toml","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"pure"},{"type":"function","name":"parseTomlBytes32","inputs":[{"name":"toml","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"type":"function","name":"parseTomlBytes32Array","inputs":[{"name":"toml","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bytes32[]","internalType":"bytes32[]"}],"stateMutability":"pure"},{"type":"function","name":"parseTomlBytesArray","inputs":[{"name":"toml","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bytes[]","internalType":"bytes[]"}],"stateMutability":"pure"},{"type":"function","name":"parseTomlInt","inputs":[{"name":"toml","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"int256","internalType":"int256"}],"stateMutability":"pure"},{"type":"function","name":"parseTomlIntArray","inputs":[{"name":"toml","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"int256[]","internalType":"int256[]"}],"stateMutability":"pure"},{"type":"function","name":"parseTomlKeys","inputs":[{"name":"toml","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"keys","type":"string[]","internalType":"string[]"}],"stateMutability":"pure"},{"type":"function","name":"parseTomlString","inputs":[{"name":"toml","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"parseTomlStringArray","inputs":[{"name":"toml","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"string[]","internalType":"string[]"}],"stateMutability":"pure"},{"type":"function","name":"parseTomlType","inputs":[{"name":"toml","type":"string","internalType":"string"},{"name":"typeDescription","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"pure"},{"type":"function","name":"parseTomlType","inputs":[{"name":"toml","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"},{"name":"typeDescription","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"pure"},{"type":"function","name":"parseTomlTypeArray","inputs":[{"name":"toml","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"},{"name":"typeDescription","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"pure"},{"type":"function","name":"parseTomlUint","inputs":[{"name":"toml","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"parseTomlUintArray","inputs":[{"name":"toml","type":"string","internalType":"string"},{"name":"key","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"pure"},{"type":"function","name":"parseUint","inputs":[{"name":"stringifiedValue","type":"string","internalType":"string"}],"outputs":[{"name":"parsedValue","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"pauseGasMetering","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"pauseTracing","inputs":[],"outputs":[],"stateMutability":"view"},{"type":"function","name":"projectRoot","inputs":[],"outputs":[{"name":"path","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"prompt","inputs":[{"name":"promptText","type":"string","internalType":"string"}],"outputs":[{"name":"input","type":"string","internalType":"string"}],"stateMutability":"nonpayable"},{"type":"function","name":"promptAddress","inputs":[{"name":"promptText","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"promptSecret","inputs":[{"name":"promptText","type":"string","internalType":"string"}],"outputs":[{"name":"input","type":"string","internalType":"string"}],"stateMutability":"nonpayable"},{"type":"function","name":"promptSecretUint","inputs":[{"name":"promptText","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"promptUint","inputs":[{"name":"promptText","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"publicKeyP256","inputs":[{"name":"privateKey","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"publicKeyX","type":"uint256","internalType":"uint256"},{"name":"publicKeyY","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"type":"function","name":"randomAddress","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"randomBool","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"randomBytes","inputs":[{"name":"len","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"randomBytes4","inputs":[],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"view"},{"type":"function","name":"randomBytes8","inputs":[],"outputs":[{"name":"","type":"bytes8","internalType":"bytes8"}],"stateMutability":"view"},{"type":"function","name":"randomInt","inputs":[],"outputs":[{"name":"","type":"int256","internalType":"int256"}],"stateMutability":"view"},{"type":"function","name":"randomInt","inputs":[{"name":"bits","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"int256","internalType":"int256"}],"stateMutability":"view"},{"type":"function","name":"randomUint","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"randomUint","inputs":[{"name":"bits","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"randomUint","inputs":[{"name":"min","type":"uint256","internalType":"uint256"},{"name":"max","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"readDir","inputs":[{"name":"path","type":"string","internalType":"string"},{"name":"maxDepth","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"entries","type":"tuple[]","internalType":"struct VmSafe.DirEntry[]","components":[{"name":"errorMessage","type":"string","internalType":"string"},{"name":"path","type":"string","internalType":"string"},{"name":"depth","type":"uint64","internalType":"uint64"},{"name":"isDir","type":"bool","internalType":"bool"},{"name":"isSymlink","type":"bool","internalType":"bool"}]}],"stateMutability":"view"},{"type":"function","name":"readDir","inputs":[{"name":"path","type":"string","internalType":"string"},{"name":"maxDepth","type":"uint64","internalType":"uint64"},{"name":"followLinks","type":"bool","internalType":"bool"}],"outputs":[{"name":"entries","type":"tuple[]","internalType":"struct VmSafe.DirEntry[]","components":[{"name":"errorMessage","type":"string","internalType":"string"},{"name":"path","type":"string","internalType":"string"},{"name":"depth","type":"uint64","internalType":"uint64"},{"name":"isDir","type":"bool","internalType":"bool"},{"name":"isSymlink","type":"bool","internalType":"bool"}]}],"stateMutability":"view"},{"type":"function","name":"readDir","inputs":[{"name":"path","type":"string","internalType":"string"}],"outputs":[{"name":"entries","type":"tuple[]","internalType":"struct VmSafe.DirEntry[]","components":[{"name":"errorMessage","type":"string","internalType":"string"},{"name":"path","type":"string","internalType":"string"},{"name":"depth","type":"uint64","internalType":"uint64"},{"name":"isDir","type":"bool","internalType":"bool"},{"name":"isSymlink","type":"bool","internalType":"bool"}]}],"stateMutability":"view"},{"type":"function","name":"readFile","inputs":[{"name":"path","type":"string","internalType":"string"}],"outputs":[{"name":"data","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"readFileBinary","inputs":[{"name":"path","type":"string","internalType":"string"}],"outputs":[{"name":"data","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"readLine","inputs":[{"name":"path","type":"string","internalType":"string"}],"outputs":[{"name":"line","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"readLink","inputs":[{"name":"linkPath","type":"string","internalType":"string"}],"outputs":[{"name":"targetPath","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"record","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"recordLogs","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"rememberKey","inputs":[{"name":"privateKey","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"keyAddr","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"rememberKeys","inputs":[{"name":"mnemonic","type":"string","internalType":"string"},{"name":"derivationPath","type":"string","internalType":"string"},{"name":"count","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"keyAddrs","type":"address[]","internalType":"address[]"}],"stateMutability":"nonpayable"},{"type":"function","name":"rememberKeys","inputs":[{"name":"mnemonic","type":"string","internalType":"string"},{"name":"derivationPath","type":"string","internalType":"string"},{"name":"language","type":"string","internalType":"string"},{"name":"count","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"keyAddrs","type":"address[]","internalType":"address[]"}],"stateMutability":"nonpayable"},{"type":"function","name":"removeDir","inputs":[{"name":"path","type":"string","internalType":"string"},{"name":"recursive","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeFile","inputs":[{"name":"path","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"replace","inputs":[{"name":"input","type":"string","internalType":"string"},{"name":"from","type":"string","internalType":"string"},{"name":"to","type":"string","internalType":"string"}],"outputs":[{"name":"output","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"resetGasMetering","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"resumeGasMetering","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"resumeTracing","inputs":[],"outputs":[],"stateMutability":"view"},{"type":"function","name":"rpc","inputs":[{"name":"urlOrAlias","type":"string","internalType":"string"},{"name":"method","type":"string","internalType":"string"},{"name":"params","type":"string","internalType":"string"}],"outputs":[{"name":"data","type":"bytes","internalType":"bytes"}],"stateMutability":"nonpayable"},{"type":"function","name":"rpc","inputs":[{"name":"method","type":"string","internalType":"string"},{"name":"params","type":"string","internalType":"string"}],"outputs":[{"name":"data","type":"bytes","internalType":"bytes"}],"stateMutability":"nonpayable"},{"type":"function","name":"rpcUrl","inputs":[{"name":"rpcAlias","type":"string","internalType":"string"}],"outputs":[{"name":"json","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"rpcUrlStructs","inputs":[],"outputs":[{"name":"urls","type":"tuple[]","internalType":"struct VmSafe.Rpc[]","components":[{"name":"key","type":"string","internalType":"string"},{"name":"url","type":"string","internalType":"string"}]}],"stateMutability":"view"},{"type":"function","name":"rpcUrls","inputs":[],"outputs":[{"name":"urls","type":"string[2][]","internalType":"string[2][]"}],"stateMutability":"view"},{"type":"function","name":"serializeAddress","inputs":[{"name":"objectKey","type":"string","internalType":"string"},{"name":"valueKey","type":"string","internalType":"string"},{"name":"values","type":"address[]","internalType":"address[]"}],"outputs":[{"name":"json","type":"string","internalType":"string"}],"stateMutability":"nonpayable"},{"type":"function","name":"serializeAddress","inputs":[{"name":"objectKey","type":"string","internalType":"string"},{"name":"valueKey","type":"string","internalType":"string"},{"name":"value","type":"address","internalType":"address"}],"outputs":[{"name":"json","type":"string","internalType":"string"}],"stateMutability":"nonpayable"},{"type":"function","name":"serializeBool","inputs":[{"name":"objectKey","type":"string","internalType":"string"},{"name":"valueKey","type":"string","internalType":"string"},{"name":"values","type":"bool[]","internalType":"bool[]"}],"outputs":[{"name":"json","type":"string","internalType":"string"}],"stateMutability":"nonpayable"},{"type":"function","name":"serializeBool","inputs":[{"name":"objectKey","type":"string","internalType":"string"},{"name":"valueKey","type":"string","internalType":"string"},{"name":"value","type":"bool","internalType":"bool"}],"outputs":[{"name":"json","type":"string","internalType":"string"}],"stateMutability":"nonpayable"},{"type":"function","name":"serializeBytes","inputs":[{"name":"objectKey","type":"string","internalType":"string"},{"name":"valueKey","type":"string","internalType":"string"},{"name":"values","type":"bytes[]","internalType":"bytes[]"}],"outputs":[{"name":"json","type":"string","internalType":"string"}],"stateMutability":"nonpayable"},{"type":"function","name":"serializeBytes","inputs":[{"name":"objectKey","type":"string","internalType":"string"},{"name":"valueKey","type":"string","internalType":"string"},{"name":"value","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"json","type":"string","internalType":"string"}],"stateMutability":"nonpayable"},{"type":"function","name":"serializeBytes32","inputs":[{"name":"objectKey","type":"string","internalType":"string"},{"name":"valueKey","type":"string","internalType":"string"},{"name":"values","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[{"name":"json","type":"string","internalType":"string"}],"stateMutability":"nonpayable"},{"type":"function","name":"serializeBytes32","inputs":[{"name":"objectKey","type":"string","internalType":"string"},{"name":"valueKey","type":"string","internalType":"string"},{"name":"value","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"json","type":"string","internalType":"string"}],"stateMutability":"nonpayable"},{"type":"function","name":"serializeInt","inputs":[{"name":"objectKey","type":"string","internalType":"string"},{"name":"valueKey","type":"string","internalType":"string"},{"name":"value","type":"int256","internalType":"int256"}],"outputs":[{"name":"json","type":"string","internalType":"string"}],"stateMutability":"nonpayable"},{"type":"function","name":"serializeInt","inputs":[{"name":"objectKey","type":"string","internalType":"string"},{"name":"valueKey","type":"string","internalType":"string"},{"name":"values","type":"int256[]","internalType":"int256[]"}],"outputs":[{"name":"json","type":"string","internalType":"string"}],"stateMutability":"nonpayable"},{"type":"function","name":"serializeJson","inputs":[{"name":"objectKey","type":"string","internalType":"string"},{"name":"value","type":"string","internalType":"string"}],"outputs":[{"name":"json","type":"string","internalType":"string"}],"stateMutability":"nonpayable"},{"type":"function","name":"serializeJsonType","inputs":[{"name":"typeDescription","type":"string","internalType":"string"},{"name":"value","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"json","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"serializeJsonType","inputs":[{"name":"objectKey","type":"string","internalType":"string"},{"name":"valueKey","type":"string","internalType":"string"},{"name":"typeDescription","type":"string","internalType":"string"},{"name":"value","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"json","type":"string","internalType":"string"}],"stateMutability":"nonpayable"},{"type":"function","name":"serializeString","inputs":[{"name":"objectKey","type":"string","internalType":"string"},{"name":"valueKey","type":"string","internalType":"string"},{"name":"values","type":"string[]","internalType":"string[]"}],"outputs":[{"name":"json","type":"string","internalType":"string"}],"stateMutability":"nonpayable"},{"type":"function","name":"serializeString","inputs":[{"name":"objectKey","type":"string","internalType":"string"},{"name":"valueKey","type":"string","internalType":"string"},{"name":"value","type":"string","internalType":"string"}],"outputs":[{"name":"json","type":"string","internalType":"string"}],"stateMutability":"nonpayable"},{"type":"function","name":"serializeUint","inputs":[{"name":"objectKey","type":"string","internalType":"string"},{"name":"valueKey","type":"string","internalType":"string"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"json","type":"string","internalType":"string"}],"stateMutability":"nonpayable"},{"type":"function","name":"serializeUint","inputs":[{"name":"objectKey","type":"string","internalType":"string"},{"name":"valueKey","type":"string","internalType":"string"},{"name":"values","type":"uint256[]","internalType":"uint256[]"}],"outputs":[{"name":"json","type":"string","internalType":"string"}],"stateMutability":"nonpayable"},{"type":"function","name":"serializeUintToHex","inputs":[{"name":"objectKey","type":"string","internalType":"string"},{"name":"valueKey","type":"string","internalType":"string"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"json","type":"string","internalType":"string"}],"stateMutability":"nonpayable"},{"type":"function","name":"setArbitraryStorage","inputs":[{"name":"target","type":"address","internalType":"address"},{"name":"overwrite","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setArbitraryStorage","inputs":[{"name":"target","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setEnv","inputs":[{"name":"name","type":"string","internalType":"string"},{"name":"value","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"shuffle","inputs":[{"name":"array","type":"uint256[]","internalType":"uint256[]"}],"outputs":[{"name":"","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"nonpayable"},{"type":"function","name":"sign","inputs":[{"name":"digest","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"v","type":"uint8","internalType":"uint8"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"type":"function","name":"sign","inputs":[{"name":"signer","type":"address","internalType":"address"},{"name":"digest","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"v","type":"uint8","internalType":"uint8"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"type":"function","name":"sign","inputs":[{"name":"wallet","type":"tuple","internalType":"struct VmSafe.Wallet","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"publicKeyX","type":"uint256","internalType":"uint256"},{"name":"publicKeyY","type":"uint256","internalType":"uint256"},{"name":"privateKey","type":"uint256","internalType":"uint256"}]},{"name":"digest","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"v","type":"uint8","internalType":"uint8"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"}],"stateMutability":"nonpayable"},{"type":"function","name":"sign","inputs":[{"name":"privateKey","type":"uint256","internalType":"uint256"},{"name":"digest","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"v","type":"uint8","internalType":"uint8"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"type":"function","name":"signAndAttachDelegation","inputs":[{"name":"implementation","type":"address","internalType":"address"},{"name":"privateKey","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"signedDelegation","type":"tuple","internalType":"struct VmSafe.SignedDelegation","components":[{"name":"v","type":"uint8","internalType":"uint8"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"},{"name":"nonce","type":"uint64","internalType":"uint64"},{"name":"implementation","type":"address","internalType":"address"}]}],"stateMutability":"nonpayable"},{"type":"function","name":"signAndAttachDelegation","inputs":[{"name":"implementation","type":"address","internalType":"address"},{"name":"privateKey","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"signedDelegation","type":"tuple","internalType":"struct VmSafe.SignedDelegation","components":[{"name":"v","type":"uint8","internalType":"uint8"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"},{"name":"nonce","type":"uint64","internalType":"uint64"},{"name":"implementation","type":"address","internalType":"address"}]}],"stateMutability":"nonpayable"},{"type":"function","name":"signCompact","inputs":[{"name":"wallet","type":"tuple","internalType":"struct VmSafe.Wallet","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"publicKeyX","type":"uint256","internalType":"uint256"},{"name":"publicKeyY","type":"uint256","internalType":"uint256"},{"name":"privateKey","type":"uint256","internalType":"uint256"}]},{"name":"digest","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"vs","type":"bytes32","internalType":"bytes32"}],"stateMutability":"nonpayable"},{"type":"function","name":"signCompact","inputs":[{"name":"signer","type":"address","internalType":"address"},{"name":"digest","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"vs","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"type":"function","name":"signCompact","inputs":[{"name":"digest","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"vs","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"type":"function","name":"signCompact","inputs":[{"name":"privateKey","type":"uint256","internalType":"uint256"},{"name":"digest","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"vs","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"type":"function","name":"signDelegation","inputs":[{"name":"implementation","type":"address","internalType":"address"},{"name":"privateKey","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"signedDelegation","type":"tuple","internalType":"struct VmSafe.SignedDelegation","components":[{"name":"v","type":"uint8","internalType":"uint8"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"},{"name":"nonce","type":"uint64","internalType":"uint64"},{"name":"implementation","type":"address","internalType":"address"}]}],"stateMutability":"nonpayable"},{"type":"function","name":"signDelegation","inputs":[{"name":"implementation","type":"address","internalType":"address"},{"name":"privateKey","type":"uint256","internalType":"uint256"},{"name":"nonce","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"signedDelegation","type":"tuple","internalType":"struct VmSafe.SignedDelegation","components":[{"name":"v","type":"uint8","internalType":"uint8"},{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"},{"name":"nonce","type":"uint64","internalType":"uint64"},{"name":"implementation","type":"address","internalType":"address"}]}],"stateMutability":"nonpayable"},{"type":"function","name":"signP256","inputs":[{"name":"privateKey","type":"uint256","internalType":"uint256"},{"name":"digest","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"r","type":"bytes32","internalType":"bytes32"},{"name":"s","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"type":"function","name":"sleep","inputs":[{"name":"duration","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"sort","inputs":[{"name":"array","type":"uint256[]","internalType":"uint256[]"}],"outputs":[{"name":"","type":"uint256[]","internalType":"uint256[]"}],"stateMutability":"nonpayable"},{"type":"function","name":"split","inputs":[{"name":"input","type":"string","internalType":"string"},{"name":"delimiter","type":"string","internalType":"string"}],"outputs":[{"name":"outputs","type":"string[]","internalType":"string[]"}],"stateMutability":"pure"},{"type":"function","name":"startBroadcast","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"startBroadcast","inputs":[{"name":"signer","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"startBroadcast","inputs":[{"name":"privateKey","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"startDebugTraceRecording","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"startMappingRecording","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"startStateDiffRecording","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stopAndReturnDebugTraceRecording","inputs":[],"outputs":[{"name":"step","type":"tuple[]","internalType":"struct VmSafe.DebugStep[]","components":[{"name":"stack","type":"uint256[]","internalType":"uint256[]"},{"name":"memoryInput","type":"bytes","internalType":"bytes"},{"name":"opcode","type":"uint8","internalType":"uint8"},{"name":"depth","type":"uint64","internalType":"uint64"},{"name":"isOutOfGas","type":"bool","internalType":"bool"},{"name":"contractAddr","type":"address","internalType":"address"}]}],"stateMutability":"nonpayable"},{"type":"function","name":"stopAndReturnStateDiff","inputs":[],"outputs":[{"name":"accountAccesses","type":"tuple[]","internalType":"struct VmSafe.AccountAccess[]","components":[{"name":"chainInfo","type":"tuple","internalType":"struct VmSafe.ChainInfo","components":[{"name":"forkId","type":"uint256","internalType":"uint256"},{"name":"chainId","type":"uint256","internalType":"uint256"}]},{"name":"kind","type":"uint8","internalType":"enum VmSafe.AccountAccessKind"},{"name":"account","type":"address","internalType":"address"},{"name":"accessor","type":"address","internalType":"address"},{"name":"initialized","type":"bool","internalType":"bool"},{"name":"oldBalance","type":"uint256","internalType":"uint256"},{"name":"newBalance","type":"uint256","internalType":"uint256"},{"name":"deployedCode","type":"bytes","internalType":"bytes"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"data","type":"bytes","internalType":"bytes"},{"name":"reverted","type":"bool","internalType":"bool"},{"name":"storageAccesses","type":"tuple[]","internalType":"struct VmSafe.StorageAccess[]","components":[{"name":"account","type":"address","internalType":"address"},{"name":"slot","type":"bytes32","internalType":"bytes32"},{"name":"isWrite","type":"bool","internalType":"bool"},{"name":"previousValue","type":"bytes32","internalType":"bytes32"},{"name":"newValue","type":"bytes32","internalType":"bytes32"},{"name":"reverted","type":"bool","internalType":"bool"}]},{"name":"depth","type":"uint64","internalType":"uint64"}]}],"stateMutability":"nonpayable"},{"type":"function","name":"stopBroadcast","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stopMappingRecording","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"toBase64","inputs":[{"name":"data","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"toBase64","inputs":[{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"toBase64URL","inputs":[{"name":"data","type":"string","internalType":"string"}],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"toBase64URL","inputs":[{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"toLowercase","inputs":[{"name":"input","type":"string","internalType":"string"}],"outputs":[{"name":"output","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"toString","inputs":[{"name":"value","type":"address","internalType":"address"}],"outputs":[{"name":"stringifiedValue","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"toString","inputs":[{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"stringifiedValue","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"toString","inputs":[{"name":"value","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"stringifiedValue","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"toString","inputs":[{"name":"value","type":"bool","internalType":"bool"}],"outputs":[{"name":"stringifiedValue","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"toString","inputs":[{"name":"value","type":"int256","internalType":"int256"}],"outputs":[{"name":"stringifiedValue","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"toString","inputs":[{"name":"value","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"stringifiedValue","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"toUppercase","inputs":[{"name":"input","type":"string","internalType":"string"}],"outputs":[{"name":"output","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"trim","inputs":[{"name":"input","type":"string","internalType":"string"}],"outputs":[{"name":"output","type":"string","internalType":"string"}],"stateMutability":"pure"},{"type":"function","name":"tryFfi","inputs":[{"name":"commandInput","type":"string[]","internalType":"string[]"}],"outputs":[{"name":"result","type":"tuple","internalType":"struct VmSafe.FfiResult","components":[{"name":"exitCode","type":"int32","internalType":"int32"},{"name":"stdout","type":"bytes","internalType":"bytes"},{"name":"stderr","type":"bytes","internalType":"bytes"}]}],"stateMutability":"nonpayable"},{"type":"function","name":"unixTime","inputs":[],"outputs":[{"name":"milliseconds","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"writeFile","inputs":[{"name":"path","type":"string","internalType":"string"},{"name":"data","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"writeFileBinary","inputs":[{"name":"path","type":"string","internalType":"string"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"writeJson","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"path","type":"string","internalType":"string"},{"name":"valueKey","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"writeJson","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"path","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"writeLine","inputs":[{"name":"path","type":"string","internalType":"string"},{"name":"data","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"writeToml","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"path","type":"string","internalType":"string"},{"name":"valueKey","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"writeToml","inputs":[{"name":"json","type":"string","internalType":"string"},{"name":"path","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"}],"bytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"deployedBytecode":{"object":"0x","sourceMap":"","linkReferences":{}},"methodIdentifiers":{"accesses(address)":"65bc9481","addr(uint256)":"ffa18649","assertApproxEqAbs(int256,int256,uint256)":"240f839d","assertApproxEqAbs(int256,int256,uint256,string)":"8289e621","assertApproxEqAbs(uint256,uint256,uint256)":"16d207c6","assertApproxEqAbs(uint256,uint256,uint256,string)":"f710b062","assertApproxEqAbsDecimal(int256,int256,uint256,uint256)":"3d5bc8bc","assertApproxEqAbsDecimal(int256,int256,uint256,uint256,string)":"6a5066d4","assertApproxEqAbsDecimal(uint256,uint256,uint256,uint256)":"045c55ce","assertApproxEqAbsDecimal(uint256,uint256,uint256,uint256,string)":"60429eb2","assertApproxEqRel(int256,int256,uint256)":"fea2d14f","assertApproxEqRel(int256,int256,uint256,string)":"ef277d72","assertApproxEqRel(uint256,uint256,uint256)":"8cf25ef4","assertApproxEqRel(uint256,uint256,uint256,string)":"1ecb7d33","assertApproxEqRelDecimal(int256,int256,uint256,uint256)":"abbf21cc","assertApproxEqRelDecimal(int256,int256,uint256,uint256,string)":"fccc11c4","assertApproxEqRelDecimal(uint256,uint256,uint256,uint256)":"21ed2977","assertApproxEqRelDecimal(uint256,uint256,uint256,uint256,string)":"82d6c8fd","assertEq(address,address)":"515361f6","assertEq(address,address,string)":"2f2769d1","assertEq(address[],address[])":"3868ac34","assertEq(address[],address[],string)":"3e9173c5","assertEq(bool,bool)":"f7fe3477","assertEq(bool,bool,string)":"4db19e7e","assertEq(bool[],bool[])":"707df785","assertEq(bool[],bool[],string)":"e48a8f8d","assertEq(bytes,bytes)":"97624631","assertEq(bytes,bytes,string)":"e24fed00","assertEq(bytes32,bytes32)":"7c84c69b","assertEq(bytes32,bytes32,string)":"c1fa1ed0","assertEq(bytes32[],bytes32[])":"0cc9ee84","assertEq(bytes32[],bytes32[],string)":"e03e9177","assertEq(bytes[],bytes[])":"e5fb9b4a","assertEq(bytes[],bytes[],string)":"f413f0b6","assertEq(int256,int256)":"fe74f05b","assertEq(int256,int256,string)":"714a2f13","assertEq(int256[],int256[])":"711043ac","assertEq(int256[],int256[],string)":"191f1b30","assertEq(string,string)":"f320d963","assertEq(string,string,string)":"36f656d8","assertEq(string[],string[])":"cf1c049c","assertEq(string[],string[],string)":"eff6b27d","assertEq(uint256,uint256)":"98296c54","assertEq(uint256,uint256,string)":"88b44c85","assertEq(uint256[],uint256[])":"975d5a12","assertEq(uint256[],uint256[],string)":"5d18c73a","assertEqDecimal(int256,int256,uint256)":"48016c04","assertEqDecimal(int256,int256,uint256,string)":"7e77b0c5","assertEqDecimal(uint256,uint256,uint256)":"27af7d9c","assertEqDecimal(uint256,uint256,uint256,string)":"d0cbbdef","assertFalse(bool)":"a5982885","assertFalse(bool,string)":"7ba04809","assertGe(int256,int256)":"0a30b771","assertGe(int256,int256,string)":"a84328dd","assertGe(uint256,uint256)":"a8d4d1d9","assertGe(uint256,uint256,string)":"e25242c0","assertGeDecimal(int256,int256,uint256)":"dc28c0f1","assertGeDecimal(int256,int256,uint256,string)":"5df93c9b","assertGeDecimal(uint256,uint256,uint256)":"3d1fe08a","assertGeDecimal(uint256,uint256,uint256,string)":"8bff9133","assertGt(int256,int256)":"5a362d45","assertGt(int256,int256,string)":"f8d33b9b","assertGt(uint256,uint256)":"db07fcd2","assertGt(uint256,uint256,string)":"d9a3c4d2","assertGtDecimal(int256,int256,uint256)":"78611f0e","assertGtDecimal(int256,int256,uint256,string)":"04a5c7ab","assertGtDecimal(uint256,uint256,uint256)":"eccd2437","assertGtDecimal(uint256,uint256,uint256,string)":"64949a8d","assertLe(int256,int256)":"95fd154e","assertLe(int256,int256,string)":"4dfe692c","assertLe(uint256,uint256)":"8466f415","assertLe(uint256,uint256,string)":"d17d4b0d","assertLeDecimal(int256,int256,uint256)":"11d1364a","assertLeDecimal(int256,int256,uint256,string)":"aa5cf788","assertLeDecimal(uint256,uint256,uint256)":"c304aab7","assertLeDecimal(uint256,uint256,uint256,string)":"7fefbbe0","assertLt(int256,int256)":"3e914080","assertLt(int256,int256,string)":"9ff531e3","assertLt(uint256,uint256)":"b12fc005","assertLt(uint256,uint256,string)":"65d5c135","assertLtDecimal(int256,int256,uint256)":"dbe8d88b","assertLtDecimal(int256,int256,uint256,string)":"40f0b4e0","assertLtDecimal(uint256,uint256,uint256)":"2077337e","assertLtDecimal(uint256,uint256,uint256,string)":"a972d037","assertNotEq(address,address)":"b12e1694","assertNotEq(address,address,string)":"8775a591","assertNotEq(address[],address[])":"46d0b252","assertNotEq(address[],address[],string)":"72c7e0b5","assertNotEq(bool,bool)":"236e4d66","assertNotEq(bool,bool,string)":"1091a261","assertNotEq(bool[],bool[])":"286fafea","assertNotEq(bool[],bool[],string)":"62c6f9fb","assertNotEq(bytes,bytes)":"3cf78e28","assertNotEq(bytes,bytes,string)":"9507540e","assertNotEq(bytes32,bytes32)":"898e83fc","assertNotEq(bytes32,bytes32,string)":"b2332f51","assertNotEq(bytes32[],bytes32[])":"0603ea68","assertNotEq(bytes32[],bytes32[],string)":"b873634c","assertNotEq(bytes[],bytes[])":"edecd035","assertNotEq(bytes[],bytes[],string)":"1dcd1f68","assertNotEq(int256,int256)":"f4c004e3","assertNotEq(int256,int256,string)":"4724c5b9","assertNotEq(int256[],int256[])":"0b72f4ef","assertNotEq(int256[],int256[],string)":"d3977322","assertNotEq(string,string)":"6a8237b3","assertNotEq(string,string,string)":"78bdcea7","assertNotEq(string[],string[])":"bdfacbe8","assertNotEq(string[],string[],string)":"b67187f3","assertNotEq(uint256,uint256)":"b7909320","assertNotEq(uint256,uint256,string)":"98f9bdbd","assertNotEq(uint256[],uint256[])":"56f29cba","assertNotEq(uint256[],uint256[],string)":"9a7fbd8f","assertNotEqDecimal(int256,int256,uint256)":"14e75680","assertNotEqDecimal(int256,int256,uint256,string)":"33949f0b","assertNotEqDecimal(uint256,uint256,uint256)":"669efca7","assertNotEqDecimal(uint256,uint256,uint256,string)":"f5a55558","assertTrue(bool)":"0c9fd581","assertTrue(bool,string)":"a34edc03","assume(bool)":"4c63e562","assumeNoRevert((address,bool,bytes))":"d8591eeb","assumeNoRevert((address,bool,bytes)[])":"8a4592cc","assumeNoRevert()":"285b366a","attachBlob(bytes)":"10cb385c","attachDelegation((uint8,bytes32,bytes32,uint64,address))":"14ae3519","breakpoint(string)":"f0259e92","breakpoint(string,bool)":"f7d39a8d","broadcast()":"afc98040","broadcast(address)":"e6962cdb","broadcast(uint256)":"f67a965b","broadcastRawTransaction(bytes)":"8c0c72e0","closeFile(string)":"48c3241f","computeCreate2Address(bytes32,bytes32)":"890c283b","computeCreate2Address(bytes32,bytes32,address)":"d323826a","computeCreateAddress(address,uint256)":"74637a7a","contains(string,string)":"3fb18aec","copyFile(string,string)":"a54a87d8","copyStorage(address,address)":"203dac0d","createDir(string,bool)":"168b64d3","createWallet(string)":"7404f1d2","createWallet(uint256)":"7a675bb6","createWallet(uint256,string)":"ed7c5462","deployCode(string)":"9a8325a0","deployCode(string,bytes)":"29ce9dde","deployCode(string,bytes,bytes32)":"016155bf","deployCode(string,bytes,uint256)":"ff5d64e4","deployCode(string,bytes,uint256,bytes32)":"3aa773ea","deployCode(string,bytes32)":"17ab1d79","deployCode(string,uint256)":"0af6a701","deployCode(string,uint256,bytes32)":"002cb687","deriveKey(string,string,uint32)":"6bcb2c1b","deriveKey(string,string,uint32,string)":"29233b1f","deriveKey(string,uint32)":"6229498b","deriveKey(string,uint32,string)":"32c8176d","ensNamehash(string)":"8c374c65","envAddress(string)":"350d56bf","envAddress(string,string)":"ad31b9fa","envBool(string)":"7ed1ec7d","envBool(string,string)":"aaaddeaf","envBytes(string)":"4d7baf06","envBytes(string,string)":"ddc2651b","envBytes32(string)":"97949042","envBytes32(string,string)":"5af231c1","envExists(string)":"ce8365f9","envInt(string)":"892a0c61","envInt(string,string)":"42181150","envOr(string,address)":"561fe540","envOr(string,bool)":"4777f3cf","envOr(string,bytes)":"b3e47705","envOr(string,bytes32)":"b4a85892","envOr(string,int256)":"bbcb713e","envOr(string,string)":"d145736c","envOr(string,string,address[])":"c74e9deb","envOr(string,string,bool[])":"eb85e83b","envOr(string,string,bytes32[])":"2281f367","envOr(string,string,bytes[])":"64bc3e64","envOr(string,string,int256[])":"4700d74b","envOr(string,string,string[])":"859216bc","envOr(string,string,uint256[])":"74318528","envOr(string,uint256)":"5e97348f","envString(string)":"f877cb19","envString(string,string)":"14b02bc9","envUint(string)":"c1978d1f","envUint(string,string)":"f3dec099","eth_getLogs(uint256,uint256,address,bytes32[])":"35e1349b","exists(string)":"261a323e","ffi(string[])":"89160467","foundryVersionAtLeast(string)":"6248be1f","foundryVersionCmp(string)":"ca7b0a09","fsMetadata(string)":"af368a08","getArtifactPathByCode(bytes)":"eb74848c","getArtifactPathByDeployedCode(bytes)":"6d853ba5","getBlobBaseFee()":"1f6d6ef7","getBlockNumber()":"42cbb15c","getBlockTimestamp()":"796b89b9","getBroadcast(string,uint64,uint8)":"3dc90cb3","getBroadcasts(string,uint64)":"f2fa4a26","getBroadcasts(string,uint64,uint8)":"f7afe919","getChain(string)":"4cc1c2bb","getChain(uint256)":"b6791ad4","getCode(string)":"8d1cc925","getDeployedCode(string)":"3ebf73b4","getDeployment(string)":"a8091d97","getDeployment(string,uint64)":"0debd5d6","getDeployments(string,uint64)":"74e133dd","getFoundryVersion()":"ea991bb5","getLabel(address)":"28a249b0","getMappingKeyAndParentOf(address,bytes32)":"876e24e6","getMappingLength(address,bytes32)":"2f2fd63f","getMappingSlotAt(address,bytes32,uint256)":"ebc73ab4","getNonce((address,uint256,uint256,uint256))":"a5748aad","getNonce(address)":"2d0335ab","getRecordedLogs()":"191553a4","getStateDiff()":"80df01cc","getStateDiffJson()":"f54fe009","getWallets()":"db7a4605","indexOf(string,string)":"8a0807b7","isContext(uint8)":"64af255d","isDir(string)":"7d15d019","isFile(string)":"e0eb04d4","keyExists(string,string)":"528a683c","keyExistsJson(string,string)":"db4235f6","keyExistsToml(string,string)":"600903ad","label(address,string)":"c657c718","lastCallGas()":"2b589b28","load(address,bytes32)":"667f9d70","parseAddress(string)":"c6ce059d","parseBool(string)":"974ef924","parseBytes(string)":"8f5d232d","parseBytes32(string)":"087e6e81","parseInt(string)":"42346c5e","parseJson(string)":"6a82600a","parseJson(string,string)":"85940ef1","parseJsonAddress(string,string)":"1e19e657","parseJsonAddressArray(string,string)":"2fce7883","parseJsonBool(string,string)":"9f86dc91","parseJsonBoolArray(string,string)":"91f3b94f","parseJsonBytes(string,string)":"fd921be8","parseJsonBytes32(string,string)":"1777e59d","parseJsonBytes32Array(string,string)":"91c75bc3","parseJsonBytesArray(string,string)":"6631aa99","parseJsonInt(string,string)":"7b048ccd","parseJsonIntArray(string,string)":"9983c28a","parseJsonKeys(string,string)":"213e4198","parseJsonString(string,string)":"49c4fac8","parseJsonStringArray(string,string)":"498fdcf4","parseJsonType(string,string)":"a9da313b","parseJsonType(string,string,string)":"e3f5ae33","parseJsonTypeArray(string,string,string)":"0175d535","parseJsonUint(string,string)":"addde2b6","parseJsonUintArray(string,string)":"522074ab","parseToml(string)":"592151f0","parseToml(string,string)":"37736e08","parseTomlAddress(string,string)":"65e7c844","parseTomlAddressArray(string,string)":"65c428e7","parseTomlBool(string,string)":"d30dced6","parseTomlBoolArray(string,string)":"127cfe9a","parseTomlBytes(string,string)":"d77bfdb9","parseTomlBytes32(string,string)":"8e214810","parseTomlBytes32Array(string,string)":"3e716f81","parseTomlBytesArray(string,string)":"b197c247","parseTomlInt(string,string)":"c1350739","parseTomlIntArray(string,string)":"d3522ae6","parseTomlKeys(string,string)":"812a44b2","parseTomlString(string,string)":"8bb8dd43","parseTomlStringArray(string,string)":"9f629281","parseTomlType(string,string)":"47fa5e11","parseTomlType(string,string,string)":"f9fa5cdb","parseTomlTypeArray(string,string,string)":"49be3743","parseTomlUint(string,string)":"cc7b0487","parseTomlUintArray(string,string)":"b5df27c8","parseUint(string)":"fa91454d","pauseGasMetering()":"d1a5b36f","pauseTracing()":"c94d1f90","projectRoot()":"d930a0e6","prompt(string)":"47eaf474","promptAddress(string)":"62ee05f4","promptSecret(string)":"1e279d41","promptSecretUint(string)":"69ca02b7","promptUint(string)":"652fd489","publicKeyP256(uint256)":"c453949e","randomAddress()":"d5bee9f5","randomBool()":"cdc126bd","randomBytes(uint256)":"6c5d32a9","randomBytes4()":"9b7cd579","randomBytes8()":"0497b0a5","randomInt()":"111f1202","randomInt(uint256)":"12845966","randomUint()":"25124730","randomUint(uint256)":"cf81e69c","randomUint(uint256,uint256)":"d61b051b","readDir(string)":"c4bc59e0","readDir(string,uint64)":"1497876c","readDir(string,uint64,bool)":"8102d70d","readFile(string)":"60f9bb11","readFileBinary(string)":"16ed7bc4","readLine(string)":"70f55728","readLink(string)":"9f5684a2","record()":"266cf109","recordLogs()":"41af2f52","rememberKey(uint256)":"22100064","rememberKeys(string,string,string,uint32)":"f8d58eaf","rememberKeys(string,string,uint32)":"97cb9189","removeDir(string,bool)":"45c62011","removeFile(string)":"f1afe04d","replace(string,string,string)":"e00ad03e","resetGasMetering()":"be367dd3","resumeGasMetering()":"2bcd50e0","resumeTracing()":"72a09ccb","rpc(string,string)":"1206c8a8","rpc(string,string,string)":"0199a220","rpcUrl(string)":"975a6ce9","rpcUrlStructs()":"9d2ad72a","rpcUrls()":"a85a8418","serializeAddress(string,string,address)":"972c6062","serializeAddress(string,string,address[])":"1e356e1a","serializeBool(string,string,bool)":"ac22e971","serializeBool(string,string,bool[])":"92925aa1","serializeBytes(string,string,bytes)":"f21d52c7","serializeBytes(string,string,bytes[])":"9884b232","serializeBytes32(string,string,bytes32)":"2d812b44","serializeBytes32(string,string,bytes32[])":"201e43e2","serializeInt(string,string,int256)":"3f33db60","serializeInt(string,string,int256[])":"7676e127","serializeJson(string,string)":"9b3358b0","serializeJsonType(string,bytes)":"6d4f96a6","serializeJsonType(string,string,string,bytes)":"6f93bccb","serializeString(string,string,string)":"88da6d35","serializeString(string,string,string[])":"561cd6f3","serializeUint(string,string,uint256)":"129e9002","serializeUint(string,string,uint256[])":"fee9a469","serializeUintToHex(string,string,uint256)":"ae5a2ae8","setArbitraryStorage(address)":"e1631837","setArbitraryStorage(address,bool)":"d3ec2a0b","setEnv(string,string)":"3d5923ee","shuffle(uint256[])":"54f1469c","sign((address,uint256,uint256,uint256),bytes32)":"b25c5a25","sign(address,bytes32)":"8c1aa205","sign(bytes32)":"799cd333","sign(uint256,bytes32)":"e341eaa4","signAndAttachDelegation(address,uint256)":"c7fa7288","signAndAttachDelegation(address,uint256,uint64)":"cde3e5be","signCompact((address,uint256,uint256,uint256),bytes32)":"3d0e292f","signCompact(address,bytes32)":"8e2f97bf","signCompact(bytes32)":"a282dc4b","signCompact(uint256,bytes32)":"cc2a781f","signDelegation(address,uint256)":"5b593c7b","signDelegation(address,uint256,uint64)":"ceba2ec3","signP256(uint256,bytes32)":"83211b40","sleep(uint256)":"fa9d8713","sort(uint256[])":"9ec8b026","split(string,string)":"8bb75533","startBroadcast()":"7fb5297f","startBroadcast(address)":"7fec2a8d","startBroadcast(uint256)":"ce817d47","startDebugTraceRecording()":"419c8832","startMappingRecording()":"3e9705c0","startStateDiffRecording()":"cf22e3c9","stopAndReturnDebugTraceRecording()":"ced398a2","stopAndReturnStateDiff()":"aa5cf90e","stopBroadcast()":"76eadd36","stopMappingRecording()":"0d4aae9b","toBase64(bytes)":"a5cbfe65","toBase64(string)":"3f8be2c8","toBase64URL(bytes)":"c8bd0e4a","toBase64URL(string)":"ae3165b3","toLowercase(string)":"50bb0884","toString(address)":"56ca623e","toString(bool)":"71dce7da","toString(bytes)":"71aad10d","toString(bytes32)":"b11a19e8","toString(int256)":"a322c40e","toString(uint256)":"6900a3ae","toUppercase(string)":"074ae3d7","trim(string)":"b2dad155","tryFfi(string[])":"f45c1ce7","unixTime()":"625387dc","writeFile(string,string)":"897e0a97","writeFileBinary(string,bytes)":"1f21fc80","writeJson(string,string)":"e23cd19f","writeJson(string,string,string)":"35d6ad46","writeLine(string,string)":"619d897f","writeToml(string,string)":"c0865ba7","writeToml(string,string,string)":"51ac6a33"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"accesses\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"readSlots\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"writeSlots\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"name\":\"addr\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"keyAddr\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxDelta\",\"type\":\"uint256\"}],\"name\":\"assertApproxEqAbs\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"maxDelta\",\"type\":\"uint256\"}],\"name\":\"assertApproxEqAbs\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"maxDelta\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertApproxEqAbs\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxDelta\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertApproxEqAbs\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxDelta\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"assertApproxEqAbsDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"maxDelta\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"assertApproxEqAbsDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxDelta\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertApproxEqAbsDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"maxDelta\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertApproxEqAbsDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPercentDelta\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertApproxEqRel\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPercentDelta\",\"type\":\"uint256\"}],\"name\":\"assertApproxEqRel\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"maxPercentDelta\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertApproxEqRel\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"maxPercentDelta\",\"type\":\"uint256\"}],\"name\":\"assertApproxEqRel\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPercentDelta\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"assertApproxEqRelDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPercentDelta\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertApproxEqRelDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"maxPercentDelta\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"assertApproxEqRelDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"maxPercentDelta\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertApproxEqRelDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"left\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"right\",\"type\":\"bytes32[]\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256[]\",\"name\":\"left\",\"type\":\"int256[]\"},{\"internalType\":\"int256[]\",\"name\":\"right\",\"type\":\"int256[]\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"left\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"right\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"left\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"right\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"left\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"right\",\"type\":\"address[]\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"left\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"right\",\"type\":\"address[]\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"left\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"right\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"left\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"right\",\"type\":\"address\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"left\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"right\",\"type\":\"uint256[]\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool[]\",\"name\":\"left\",\"type\":\"bool[]\"},{\"internalType\":\"bool[]\",\"name\":\"right\",\"type\":\"bool[]\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256[]\",\"name\":\"left\",\"type\":\"int256[]\"},{\"internalType\":\"int256[]\",\"name\":\"right\",\"type\":\"int256[]\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"left\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"right\",\"type\":\"bytes32\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"left\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"right\",\"type\":\"uint256[]\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"left\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"right\",\"type\":\"bytes\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"left\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"right\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"left\",\"type\":\"string[]\"},{\"internalType\":\"string[]\",\"name\":\"right\",\"type\":\"string[]\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"left\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"right\",\"type\":\"bytes32[]\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"left\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"right\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool[]\",\"name\":\"left\",\"type\":\"bool[]\"},{\"internalType\":\"bool[]\",\"name\":\"right\",\"type\":\"bool[]\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"left\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"right\",\"type\":\"bytes[]\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"left\",\"type\":\"string[]\"},{\"internalType\":\"string[]\",\"name\":\"right\",\"type\":\"string[]\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"left\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"right\",\"type\":\"string\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"left\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"right\",\"type\":\"bytes[]\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"left\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"right\",\"type\":\"bool\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"}],\"name\":\"assertEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"assertEqDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"assertEqDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertEqDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertEqDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"condition\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertFalse\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"condition\",\"type\":\"bool\"}],\"name\":\"assertFalse\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"}],\"name\":\"assertGe\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertGe\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"}],\"name\":\"assertGe\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertGe\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"assertGeDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertGeDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertGeDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"assertGeDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"}],\"name\":\"assertGt\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertGt\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"}],\"name\":\"assertGt\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertGt\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertGtDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertGtDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"assertGtDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"assertGtDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertLe\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"}],\"name\":\"assertLe\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"}],\"name\":\"assertLe\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertLe\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"assertLeDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertLeDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertLeDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"assertLeDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"}],\"name\":\"assertLt\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertLt\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertLt\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"}],\"name\":\"assertLt\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"assertLtDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertLtDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertLtDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"assertLtDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"left\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"right\",\"type\":\"bytes32[]\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256[]\",\"name\":\"left\",\"type\":\"int256[]\"},{\"internalType\":\"int256[]\",\"name\":\"right\",\"type\":\"int256[]\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"left\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"right\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"left\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"right\",\"type\":\"bytes[]\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"left\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"right\",\"type\":\"bool\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool[]\",\"name\":\"left\",\"type\":\"bool[]\"},{\"internalType\":\"bool[]\",\"name\":\"right\",\"type\":\"bool[]\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"left\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"right\",\"type\":\"bytes\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"left\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"right\",\"type\":\"address[]\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"left\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"right\",\"type\":\"uint256[]\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool[]\",\"name\":\"left\",\"type\":\"bool[]\"},{\"internalType\":\"bool[]\",\"name\":\"right\",\"type\":\"bool[]\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"left\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"right\",\"type\":\"string\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"left\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"right\",\"type\":\"address[]\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"left\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"right\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"left\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"right\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"left\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"right\",\"type\":\"bytes32\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"left\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"right\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"left\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"right\",\"type\":\"uint256[]\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"left\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"right\",\"type\":\"address\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"left\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"right\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"left\",\"type\":\"string[]\"},{\"internalType\":\"string[]\",\"name\":\"right\",\"type\":\"string[]\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"left\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"right\",\"type\":\"bytes32[]\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"left\",\"type\":\"string[]\"},{\"internalType\":\"string[]\",\"name\":\"right\",\"type\":\"string[]\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256[]\",\"name\":\"left\",\"type\":\"int256[]\"},{\"internalType\":\"int256[]\",\"name\":\"right\",\"type\":\"int256[]\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"left\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"right\",\"type\":\"bytes[]\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"}],\"name\":\"assertNotEq\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"assertNotEqDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"left\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"right\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertNotEqDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"assertNotEqDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"left\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"right\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertNotEqDecimal\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"condition\",\"type\":\"bool\"}],\"name\":\"assertTrue\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"condition\",\"type\":\"bool\"},{\"internalType\":\"string\",\"name\":\"error\",\"type\":\"string\"}],\"name\":\"assertTrue\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"condition\",\"type\":\"bool\"}],\"name\":\"assume\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"assumeNoRevert\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"reverter\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"partialMatch\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"revertData\",\"type\":\"bytes\"}],\"internalType\":\"struct VmSafe.PotentialRevert[]\",\"name\":\"potentialReverts\",\"type\":\"tuple[]\"}],\"name\":\"assumeNoRevert\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"reverter\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"partialMatch\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"revertData\",\"type\":\"bytes\"}],\"internalType\":\"struct VmSafe.PotentialRevert\",\"name\":\"potentialRevert\",\"type\":\"tuple\"}],\"name\":\"assumeNoRevert\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"blob\",\"type\":\"bytes\"}],\"name\":\"attachBlob\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"internalType\":\"struct VmSafe.SignedDelegation\",\"name\":\"signedDelegation\",\"type\":\"tuple\"}],\"name\":\"attachDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"char\",\"type\":\"string\"}],\"name\":\"breakpoint\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"char\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"value\",\"type\":\"bool\"}],\"name\":\"breakpoint\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"broadcast\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"broadcast\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"name\":\"broadcast\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"broadcastRawTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"closeFile\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"initCodeHash\",\"type\":\"bytes32\"}],\"name\":\"computeCreate2Address\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"initCodeHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"deployer\",\"type\":\"address\"}],\"name\":\"computeCreate2Address\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"deployer\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"name\":\"computeCreateAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"subject\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"search\",\"type\":\"string\"}],\"name\":\"contains\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"from\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"to\",\"type\":\"string\"}],\"name\":\"copyFile\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"copied\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"copyStorage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"recursive\",\"type\":\"bool\"}],\"name\":\"createDir\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"walletLabel\",\"type\":\"string\"}],\"name\":\"createWallet\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyX\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"internalType\":\"struct VmSafe.Wallet\",\"name\":\"wallet\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"name\":\"createWallet\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyX\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"internalType\":\"struct VmSafe.Wallet\",\"name\":\"wallet\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"walletLabel\",\"type\":\"string\"}],\"name\":\"createWallet\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyX\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"internalType\":\"struct VmSafe.Wallet\",\"name\":\"wallet\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"artifactPath\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"deployCode\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"deployedAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"artifactPath\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"constructorArgs\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"deployCode\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"deployedAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"artifactPath\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"deployCode\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"deployedAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"artifactPath\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"deployCode\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"deployedAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"artifactPath\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"constructorArgs\",\"type\":\"bytes\"}],\"name\":\"deployCode\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"deployedAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"artifactPath\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"constructorArgs\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"deployCode\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"deployedAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"artifactPath\",\"type\":\"string\"}],\"name\":\"deployCode\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"deployedAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"artifactPath\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"constructorArgs\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"deployCode\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"deployedAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"mnemonic\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"derivationPath\",\"type\":\"string\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"},{\"internalType\":\"string\",\"name\":\"language\",\"type\":\"string\"}],\"name\":\"deriveKey\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"mnemonic\",\"type\":\"string\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"},{\"internalType\":\"string\",\"name\":\"language\",\"type\":\"string\"}],\"name\":\"deriveKey\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"mnemonic\",\"type\":\"string\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"}],\"name\":\"deriveKey\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"mnemonic\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"derivationPath\",\"type\":\"string\"},{\"internalType\":\"uint32\",\"name\":\"index\",\"type\":\"uint32\"}],\"name\":\"deriveKey\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"ensNamehash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"envAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"value\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"}],\"name\":\"envAddress\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"value\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"envBool\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"value\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"}],\"name\":\"envBool\",\"outputs\":[{\"internalType\":\"bool[]\",\"name\":\"value\",\"type\":\"bool[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"envBytes\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"value\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"}],\"name\":\"envBytes\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"value\",\"type\":\"bytes[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"}],\"name\":\"envBytes32\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"value\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"envBytes32\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"envExists\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"}],\"name\":\"envInt\",\"outputs\":[{\"internalType\":\"int256[]\",\"name\":\"value\",\"type\":\"int256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"envInt\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"},{\"internalType\":\"bytes32[]\",\"name\":\"defaultValue\",\"type\":\"bytes32[]\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"value\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"},{\"internalType\":\"int256[]\",\"name\":\"defaultValue\",\"type\":\"int256[]\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"int256[]\",\"name\":\"value\",\"type\":\"int256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"defaultValue\",\"type\":\"bool\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"value\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"defaultValue\",\"type\":\"address\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"value\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"defaultValue\",\"type\":\"uint256\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"},{\"internalType\":\"bytes[]\",\"name\":\"defaultValue\",\"type\":\"bytes[]\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"value\",\"type\":\"bytes[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"defaultValue\",\"type\":\"uint256[]\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"value\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"},{\"internalType\":\"string[]\",\"name\":\"defaultValue\",\"type\":\"string[]\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"value\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"defaultValue\",\"type\":\"bytes\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"value\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"defaultValue\",\"type\":\"bytes32\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"int256\",\"name\":\"defaultValue\",\"type\":\"int256\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"defaultValue\",\"type\":\"address[]\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"value\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"defaultValue\",\"type\":\"string\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"},{\"internalType\":\"bool[]\",\"name\":\"defaultValue\",\"type\":\"bool[]\"}],\"name\":\"envOr\",\"outputs\":[{\"internalType\":\"bool[]\",\"name\":\"value\",\"type\":\"bool[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"}],\"name\":\"envString\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"value\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"envString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"envUint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delim\",\"type\":\"string\"}],\"name\":\"envUint\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"value\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"fromBlock\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"toBlock\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes32[]\",\"name\":\"topics\",\"type\":\"bytes32[]\"}],\"name\":\"eth_getLogs\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"emitter\",\"type\":\"address\"},{\"internalType\":\"bytes32[]\",\"name\":\"topics\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"blockNumber\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"transactionHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"transactionIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"logIndex\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"removed\",\"type\":\"bool\"}],\"internalType\":\"struct VmSafe.EthGetLogs[]\",\"name\":\"logs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"exists\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"commandInput\",\"type\":\"string[]\"}],\"name\":\"ffi\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"}],\"name\":\"foundryVersionAtLeast\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"}],\"name\":\"foundryVersionCmp\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"fsMetadata\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isDir\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isSymlink\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"readOnly\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"modified\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accessed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"created\",\"type\":\"uint256\"}],\"internalType\":\"struct VmSafe.FsMetadata\",\"name\":\"metadata\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"code\",\"type\":\"bytes\"}],\"name\":\"getArtifactPathByCode\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"deployedCode\",\"type\":\"bytes\"}],\"name\":\"getArtifactPathByDeployedCode\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBlobBaseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"blobBaseFee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBlockTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"enum VmSafe.BroadcastTxType\",\"name\":\"txType\",\"type\":\"uint8\"}],\"name\":\"getBroadcast\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"},{\"internalType\":\"enum VmSafe.BroadcastTxType\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"blockNumber\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"internalType\":\"struct VmSafe.BroadcastTxSummary\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"}],\"name\":\"getBroadcasts\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"},{\"internalType\":\"enum VmSafe.BroadcastTxType\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"blockNumber\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"internalType\":\"struct VmSafe.BroadcastTxSummary[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"},{\"internalType\":\"enum VmSafe.BroadcastTxType\",\"name\":\"txType\",\"type\":\"uint8\"}],\"name\":\"getBroadcasts\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"txHash\",\"type\":\"bytes32\"},{\"internalType\":\"enum VmSafe.BroadcastTxType\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"blockNumber\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"internalType\":\"struct VmSafe.BroadcastTxSummary[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"chainAlias\",\"type\":\"string\"}],\"name\":\"getChain\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"chainAlias\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"rpcUrl\",\"type\":\"string\"}],\"internalType\":\"struct VmSafe.Chain\",\"name\":\"chain\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"}],\"name\":\"getChain\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"chainAlias\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"rpcUrl\",\"type\":\"string\"}],\"internalType\":\"struct VmSafe.Chain\",\"name\":\"chain\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"artifactPath\",\"type\":\"string\"}],\"name\":\"getCode\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"creationBytecode\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"artifactPath\",\"type\":\"string\"}],\"name\":\"getDeployedCode\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"runtimeBytecode\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"}],\"name\":\"getDeployment\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"deployedAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"}],\"name\":\"getDeployment\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"deployedAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"contractName\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"chainId\",\"type\":\"uint64\"}],\"name\":\"getDeployments\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"deployedAddresses\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFoundryVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getLabel\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"currentLabel\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"elementSlot\",\"type\":\"bytes32\"}],\"name\":\"getMappingKeyAndParentOf\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"found\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"key\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"parent\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"mappingSlot\",\"type\":\"bytes32\"}],\"name\":\"getMappingLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"mappingSlot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"idx\",\"type\":\"uint256\"}],\"name\":\"getMappingSlotAt\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyX\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"internalType\":\"struct VmSafe.Wallet\",\"name\":\"wallet\",\"type\":\"tuple\"}],\"name\":\"getNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRecordedLogs\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"topics\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"emitter\",\"type\":\"address\"}],\"internalType\":\"struct VmSafe.Log[]\",\"name\":\"logs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStateDiff\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"diff\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStateDiffJson\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"diff\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWallets\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"wallets\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"input\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"indexOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum VmSafe.ForgeContext\",\"name\":\"context\",\"type\":\"uint8\"}],\"name\":\"isContext\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"isDir\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"isFile\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"keyExists\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"keyExistsJson\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"keyExistsToml\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"newLabel\",\"type\":\"string\"}],\"name\":\"label\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastCallGas\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"gasTotalUsed\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"gasMemoryUsed\",\"type\":\"uint64\"},{\"internalType\":\"int64\",\"name\":\"gasRefunded\",\"type\":\"int64\"},{\"internalType\":\"uint64\",\"name\":\"gasRemaining\",\"type\":\"uint64\"}],\"internalType\":\"struct VmSafe.Gas\",\"name\":\"gas\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"load\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"data\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"name\":\"parseAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"parsedValue\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"name\":\"parseBool\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"parsedValue\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"name\":\"parseBytes\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"parsedValue\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"name\":\"parseBytes32\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"parsedValue\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"name\":\"parseInt\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"parsedValue\",\"type\":\"int256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"name\":\"parseJson\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"abiEncodedData\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJson\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"abiEncodedData\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonAddressArray\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonBool\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonBoolArray\",\"outputs\":[{\"internalType\":\"bool[]\",\"name\":\"\",\"type\":\"bool[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonBytes\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonBytes32\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonBytes32Array\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonBytesArray\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"\",\"type\":\"bytes[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonInt\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonIntArray\",\"outputs\":[{\"internalType\":\"int256[]\",\"name\":\"\",\"type\":\"int256[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonKeys\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"keys\",\"type\":\"string[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonStringArray\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"typeDescription\",\"type\":\"string\"}],\"name\":\"parseJsonType\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"typeDescription\",\"type\":\"string\"}],\"name\":\"parseJsonType\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"typeDescription\",\"type\":\"string\"}],\"name\":\"parseJsonTypeArray\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonUint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseJsonUintArray\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseToml\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"abiEncodedData\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"}],\"name\":\"parseToml\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"abiEncodedData\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseTomlAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseTomlAddressArray\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseTomlBool\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseTomlBoolArray\",\"outputs\":[{\"internalType\":\"bool[]\",\"name\":\"\",\"type\":\"bool[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseTomlBytes\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseTomlBytes32\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseTomlBytes32Array\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseTomlBytesArray\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"\",\"type\":\"bytes[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseTomlInt\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseTomlIntArray\",\"outputs\":[{\"internalType\":\"int256[]\",\"name\":\"\",\"type\":\"int256[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseTomlKeys\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"keys\",\"type\":\"string[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseTomlString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseTomlStringArray\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"typeDescription\",\"type\":\"string\"}],\"name\":\"parseTomlType\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"typeDescription\",\"type\":\"string\"}],\"name\":\"parseTomlType\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"typeDescription\",\"type\":\"string\"}],\"name\":\"parseTomlTypeArray\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseTomlUint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"toml\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"}],\"name\":\"parseTomlUintArray\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"name\":\"parseUint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"parsedValue\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseGasMetering\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseTracing\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"projectRoot\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"promptText\",\"type\":\"string\"}],\"name\":\"prompt\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"input\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"promptText\",\"type\":\"string\"}],\"name\":\"promptAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"promptText\",\"type\":\"string\"}],\"name\":\"promptSecret\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"input\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"promptText\",\"type\":\"string\"}],\"name\":\"promptSecretUint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"promptText\",\"type\":\"string\"}],\"name\":\"promptUint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"name\":\"publicKeyP256\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"publicKeyX\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyY\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"randomAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"randomBool\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"len\",\"type\":\"uint256\"}],\"name\":\"randomBytes\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"randomBytes4\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"randomBytes8\",\"outputs\":[{\"internalType\":\"bytes8\",\"name\":\"\",\"type\":\"bytes8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"randomInt\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"bits\",\"type\":\"uint256\"}],\"name\":\"randomInt\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"randomUint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"bits\",\"type\":\"uint256\"}],\"name\":\"randomUint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"name\":\"randomUint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"maxDepth\",\"type\":\"uint64\"}],\"name\":\"readDir\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"errorMessage\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"depth\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isDir\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isSymlink\",\"type\":\"bool\"}],\"internalType\":\"struct VmSafe.DirEntry[]\",\"name\":\"entries\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"maxDepth\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"followLinks\",\"type\":\"bool\"}],\"name\":\"readDir\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"errorMessage\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"depth\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isDir\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isSymlink\",\"type\":\"bool\"}],\"internalType\":\"struct VmSafe.DirEntry[]\",\"name\":\"entries\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"readDir\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"errorMessage\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"uint64\",\"name\":\"depth\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isDir\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isSymlink\",\"type\":\"bool\"}],\"internalType\":\"struct VmSafe.DirEntry[]\",\"name\":\"entries\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"readFile\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"data\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"readFileBinary\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"readLine\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"line\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"linkPath\",\"type\":\"string\"}],\"name\":\"readLink\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"targetPath\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"record\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"recordLogs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"name\":\"rememberKey\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"keyAddr\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"mnemonic\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"derivationPath\",\"type\":\"string\"},{\"internalType\":\"uint32\",\"name\":\"count\",\"type\":\"uint32\"}],\"name\":\"rememberKeys\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"keyAddrs\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"mnemonic\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"derivationPath\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"language\",\"type\":\"string\"},{\"internalType\":\"uint32\",\"name\":\"count\",\"type\":\"uint32\"}],\"name\":\"rememberKeys\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"keyAddrs\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"recursive\",\"type\":\"bool\"}],\"name\":\"removeDir\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"removeFile\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"input\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"from\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"to\",\"type\":\"string\"}],\"name\":\"replace\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"output\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resetGasMetering\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resumeGasMetering\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resumeTracing\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"urlOrAlias\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"method\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"params\",\"type\":\"string\"}],\"name\":\"rpc\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"method\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"params\",\"type\":\"string\"}],\"name\":\"rpc\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"rpcAlias\",\"type\":\"string\"}],\"name\":\"rpcUrl\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rpcUrlStructs\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"url\",\"type\":\"string\"}],\"internalType\":\"struct VmSafe.Rpc[]\",\"name\":\"urls\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rpcUrls\",\"outputs\":[{\"internalType\":\"string[2][]\",\"name\":\"urls\",\"type\":\"string[2][]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"values\",\"type\":\"address[]\"}],\"name\":\"serializeAddress\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"value\",\"type\":\"address\"}],\"name\":\"serializeAddress\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"bool[]\",\"name\":\"values\",\"type\":\"bool[]\"}],\"name\":\"serializeBool\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"value\",\"type\":\"bool\"}],\"name\":\"serializeBool\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"bytes[]\",\"name\":\"values\",\"type\":\"bytes[]\"}],\"name\":\"serializeBytes\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"value\",\"type\":\"bytes\"}],\"name\":\"serializeBytes\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"bytes32[]\",\"name\":\"values\",\"type\":\"bytes32[]\"}],\"name\":\"serializeBytes32\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"}],\"name\":\"serializeBytes32\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"serializeInt\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"int256[]\",\"name\":\"values\",\"type\":\"int256[]\"}],\"name\":\"serializeInt\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"}],\"name\":\"serializeJson\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"typeDescription\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"value\",\"type\":\"bytes\"}],\"name\":\"serializeJsonType\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"typeDescription\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"value\",\"type\":\"bytes\"}],\"name\":\"serializeJsonType\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"string[]\",\"name\":\"values\",\"type\":\"string[]\"}],\"name\":\"serializeString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"}],\"name\":\"serializeString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"serializeUint\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"serializeUint\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"objectKey\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"serializeUintToHex\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"overwrite\",\"type\":\"bool\"}],\"name\":\"setArbitraryStorage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"setArbitraryStorage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"}],\"name\":\"setEnv\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"array\",\"type\":\"uint256[]\"}],\"name\":\"shuffle\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"}],\"name\":\"sign\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"}],\"name\":\"sign\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyX\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"internalType\":\"struct VmSafe.Wallet\",\"name\":\"wallet\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"}],\"name\":\"sign\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"}],\"name\":\"sign\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"name\":\"signAndAttachDelegation\",\"outputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"internalType\":\"struct VmSafe.SignedDelegation\",\"name\":\"signedDelegation\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"signAndAttachDelegation\",\"outputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"internalType\":\"struct VmSafe.SignedDelegation\",\"name\":\"signedDelegation\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyX\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"publicKeyY\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"internalType\":\"struct VmSafe.Wallet\",\"name\":\"wallet\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"}],\"name\":\"signCompact\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"vs\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"}],\"name\":\"signCompact\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"vs\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"}],\"name\":\"signCompact\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"vs\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"}],\"name\":\"signCompact\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"vs\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"name\":\"signDelegation\",\"outputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"internalType\":\"struct VmSafe.SignedDelegation\",\"name\":\"signedDelegation\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"signDelegation\",\"outputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"internalType\":\"struct VmSafe.SignedDelegation\",\"name\":\"signedDelegation\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"}],\"name\":\"signP256\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"duration\",\"type\":\"uint256\"}],\"name\":\"sleep\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"array\",\"type\":\"uint256[]\"}],\"name\":\"sort\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"input\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"delimiter\",\"type\":\"string\"}],\"name\":\"split\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"outputs\",\"type\":\"string[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startBroadcast\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"}],\"name\":\"startBroadcast\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"privateKey\",\"type\":\"uint256\"}],\"name\":\"startBroadcast\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startDebugTraceRecording\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startMappingRecording\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startStateDiffRecording\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stopAndReturnDebugTraceRecording\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256[]\",\"name\":\"stack\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"memoryInput\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"opcode\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"depth\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isOutOfGas\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"contractAddr\",\"type\":\"address\"}],\"internalType\":\"struct VmSafe.DebugStep[]\",\"name\":\"step\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stopAndReturnStateDiff\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"forkId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"}],\"internalType\":\"struct VmSafe.ChainInfo\",\"name\":\"chainInfo\",\"type\":\"tuple\"},{\"internalType\":\"enum VmSafe.AccountAccessKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"accessor\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"oldBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newBalance\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"deployedCode\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"reverted\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"isWrite\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"previousValue\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"newValue\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"reverted\",\"type\":\"bool\"}],\"internalType\":\"struct VmSafe.StorageAccess[]\",\"name\":\"storageAccesses\",\"type\":\"tuple[]\"},{\"internalType\":\"uint64\",\"name\":\"depth\",\"type\":\"uint64\"}],\"internalType\":\"struct VmSafe.AccountAccess[]\",\"name\":\"accountAccesses\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stopBroadcast\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stopMappingRecording\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"data\",\"type\":\"string\"}],\"name\":\"toBase64\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"toBase64\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"data\",\"type\":\"string\"}],\"name\":\"toBase64URL\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"toBase64URL\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"input\",\"type\":\"string\"}],\"name\":\"toLowercase\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"output\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"value\",\"type\":\"address\"}],\"name\":\"toString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"toString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"value\",\"type\":\"bytes\"}],\"name\":\"toString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"value\",\"type\":\"bool\"}],\"name\":\"toString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"toString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"value\",\"type\":\"bytes32\"}],\"name\":\"toString\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"stringifiedValue\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"input\",\"type\":\"string\"}],\"name\":\"toUppercase\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"output\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"input\",\"type\":\"string\"}],\"name\":\"trim\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"output\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string[]\",\"name\":\"commandInput\",\"type\":\"string[]\"}],\"name\":\"tryFfi\",\"outputs\":[{\"components\":[{\"internalType\":\"int32\",\"name\":\"exitCode\",\"type\":\"int32\"},{\"internalType\":\"bytes\",\"name\":\"stdout\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"stderr\",\"type\":\"bytes\"}],\"internalType\":\"struct VmSafe.FfiResult\",\"name\":\"result\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unixTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"milliseconds\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"data\",\"type\":\"string\"}],\"name\":\"writeFile\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"writeFileBinary\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"}],\"name\":\"writeJson\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"writeJson\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"data\",\"type\":\"string\"}],\"name\":\"writeLine\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"valueKey\",\"type\":\"string\"}],\"name\":\"writeToml\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"json\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"path\",\"type\":\"string\"}],\"name\":\"writeToml\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"accesses(address)\":{\"notice\":\"Gets all accessed reads and write slot from a `vm.record` session, for a given address.\"},\"addr(uint256)\":{\"notice\":\"Gets the address for a given private key.\"},\"assertApproxEqAbs(int256,int256,uint256)\":{\"notice\":\"Compares two `int256` values. Expects difference to be less than or equal to `maxDelta`.\"},\"assertApproxEqAbs(int256,int256,uint256,string)\":{\"notice\":\"Compares two `int256` values. Expects difference to be less than or equal to `maxDelta`. Includes error message into revert string on failure.\"},\"assertApproxEqAbs(uint256,uint256,uint256)\":{\"notice\":\"Compares two `uint256` values. Expects difference to be less than or equal to `maxDelta`.\"},\"assertApproxEqAbs(uint256,uint256,uint256,string)\":{\"notice\":\"Compares two `uint256` values. Expects difference to be less than or equal to `maxDelta`. Includes error message into revert string on failure.\"},\"assertApproxEqAbsDecimal(int256,int256,uint256,uint256)\":{\"notice\":\"Compares two `int256` values. Expects difference to be less than or equal to `maxDelta`. Formats values with decimals in failure message.\"},\"assertApproxEqAbsDecimal(int256,int256,uint256,uint256,string)\":{\"notice\":\"Compares two `int256` values. Expects difference to be less than or equal to `maxDelta`. Formats values with decimals in failure message. Includes error message into revert string on failure.\"},\"assertApproxEqAbsDecimal(uint256,uint256,uint256,uint256)\":{\"notice\":\"Compares two `uint256` values. Expects difference to be less than or equal to `maxDelta`. Formats values with decimals in failure message.\"},\"assertApproxEqAbsDecimal(uint256,uint256,uint256,uint256,string)\":{\"notice\":\"Compares two `uint256` values. Expects difference to be less than or equal to `maxDelta`. Formats values with decimals in failure message. Includes error message into revert string on failure.\"},\"assertApproxEqRel(int256,int256,uint256)\":{\"notice\":\"Compares two `int256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`. `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100%\"},\"assertApproxEqRel(int256,int256,uint256,string)\":{\"notice\":\"Compares two `int256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`. `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100% Includes error message into revert string on failure.\"},\"assertApproxEqRel(uint256,uint256,uint256)\":{\"notice\":\"Compares two `uint256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`. `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100%\"},\"assertApproxEqRel(uint256,uint256,uint256,string)\":{\"notice\":\"Compares two `uint256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`. `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100% Includes error message into revert string on failure.\"},\"assertApproxEqRelDecimal(int256,int256,uint256,uint256)\":{\"notice\":\"Compares two `int256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`. `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100% Formats values with decimals in failure message.\"},\"assertApproxEqRelDecimal(int256,int256,uint256,uint256,string)\":{\"notice\":\"Compares two `int256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`. `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100% Formats values with decimals in failure message. Includes error message into revert string on failure.\"},\"assertApproxEqRelDecimal(uint256,uint256,uint256,uint256)\":{\"notice\":\"Compares two `uint256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`. `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100% Formats values with decimals in failure message.\"},\"assertApproxEqRelDecimal(uint256,uint256,uint256,uint256,string)\":{\"notice\":\"Compares two `uint256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`. `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100% Formats values with decimals in failure message. Includes error message into revert string on failure.\"},\"assertEq(address,address)\":{\"notice\":\"Asserts that two `address` values are equal.\"},\"assertEq(address,address,string)\":{\"notice\":\"Asserts that two `address` values are equal and includes error message into revert string on failure.\"},\"assertEq(address[],address[])\":{\"notice\":\"Asserts that two arrays of `address` values are equal.\"},\"assertEq(address[],address[],string)\":{\"notice\":\"Asserts that two arrays of `address` values are equal and includes error message into revert string on failure.\"},\"assertEq(bool,bool)\":{\"notice\":\"Asserts that two `bool` values are equal.\"},\"assertEq(bool,bool,string)\":{\"notice\":\"Asserts that two `bool` values are equal and includes error message into revert string on failure.\"},\"assertEq(bool[],bool[])\":{\"notice\":\"Asserts that two arrays of `bool` values are equal.\"},\"assertEq(bool[],bool[],string)\":{\"notice\":\"Asserts that two arrays of `bool` values are equal and includes error message into revert string on failure.\"},\"assertEq(bytes,bytes)\":{\"notice\":\"Asserts that two `bytes` values are equal.\"},\"assertEq(bytes,bytes,string)\":{\"notice\":\"Asserts that two `bytes` values are equal and includes error message into revert string on failure.\"},\"assertEq(bytes32,bytes32)\":{\"notice\":\"Asserts that two `bytes32` values are equal.\"},\"assertEq(bytes32,bytes32,string)\":{\"notice\":\"Asserts that two `bytes32` values are equal and includes error message into revert string on failure.\"},\"assertEq(bytes32[],bytes32[])\":{\"notice\":\"Asserts that two arrays of `bytes32` values are equal.\"},\"assertEq(bytes32[],bytes32[],string)\":{\"notice\":\"Asserts that two arrays of `bytes32` values are equal and includes error message into revert string on failure.\"},\"assertEq(bytes[],bytes[])\":{\"notice\":\"Asserts that two arrays of `bytes` values are equal.\"},\"assertEq(bytes[],bytes[],string)\":{\"notice\":\"Asserts that two arrays of `bytes` values are equal and includes error message into revert string on failure.\"},\"assertEq(int256,int256)\":{\"notice\":\"Asserts that two `int256` values are equal.\"},\"assertEq(int256,int256,string)\":{\"notice\":\"Asserts that two `int256` values are equal and includes error message into revert string on failure.\"},\"assertEq(int256[],int256[])\":{\"notice\":\"Asserts that two arrays of `int256` values are equal.\"},\"assertEq(int256[],int256[],string)\":{\"notice\":\"Asserts that two arrays of `int256` values are equal and includes error message into revert string on failure.\"},\"assertEq(string,string)\":{\"notice\":\"Asserts that two `string` values are equal.\"},\"assertEq(string,string,string)\":{\"notice\":\"Asserts that two `string` values are equal and includes error message into revert string on failure.\"},\"assertEq(string[],string[])\":{\"notice\":\"Asserts that two arrays of `string` values are equal.\"},\"assertEq(string[],string[],string)\":{\"notice\":\"Asserts that two arrays of `string` values are equal and includes error message into revert string on failure.\"},\"assertEq(uint256,uint256)\":{\"notice\":\"Asserts that two `uint256` values are equal.\"},\"assertEq(uint256,uint256,string)\":{\"notice\":\"Asserts that two `uint256` values are equal and includes error message into revert string on failure.\"},\"assertEq(uint256[],uint256[])\":{\"notice\":\"Asserts that two arrays of `uint256 values are equal.\"},\"assertEq(uint256[],uint256[],string)\":{\"notice\":\"Asserts that two arrays of `uint256` values are equal and includes error message into revert string on failure.\"},\"assertEqDecimal(int256,int256,uint256)\":{\"notice\":\"Asserts that two `int256` values are equal, formatting them with decimals in failure message.\"},\"assertEqDecimal(int256,int256,uint256,string)\":{\"notice\":\"Asserts that two `int256` values are equal, formatting them with decimals in failure message. Includes error message into revert string on failure.\"},\"assertEqDecimal(uint256,uint256,uint256)\":{\"notice\":\"Asserts that two `uint256` values are equal, formatting them with decimals in failure message.\"},\"assertEqDecimal(uint256,uint256,uint256,string)\":{\"notice\":\"Asserts that two `uint256` values are equal, formatting them with decimals in failure message. Includes error message into revert string on failure.\"},\"assertFalse(bool)\":{\"notice\":\"Asserts that the given condition is false.\"},\"assertFalse(bool,string)\":{\"notice\":\"Asserts that the given condition is false and includes error message into revert string on failure.\"},\"assertGe(int256,int256)\":{\"notice\":\"Compares two `int256` values. Expects first value to be greater than or equal to second.\"},\"assertGe(int256,int256,string)\":{\"notice\":\"Compares two `int256` values. Expects first value to be greater than or equal to second. Includes error message into revert string on failure.\"},\"assertGe(uint256,uint256)\":{\"notice\":\"Compares two `uint256` values. Expects first value to be greater than or equal to second.\"},\"assertGe(uint256,uint256,string)\":{\"notice\":\"Compares two `uint256` values. Expects first value to be greater than or equal to second. Includes error message into revert string on failure.\"},\"assertGeDecimal(int256,int256,uint256)\":{\"notice\":\"Compares two `int256` values. Expects first value to be greater than or equal to second. Formats values with decimals in failure message.\"},\"assertGeDecimal(int256,int256,uint256,string)\":{\"notice\":\"Compares two `int256` values. Expects first value to be greater than or equal to second. Formats values with decimals in failure message. Includes error message into revert string on failure.\"},\"assertGeDecimal(uint256,uint256,uint256)\":{\"notice\":\"Compares two `uint256` values. Expects first value to be greater than or equal to second. Formats values with decimals in failure message.\"},\"assertGeDecimal(uint256,uint256,uint256,string)\":{\"notice\":\"Compares two `uint256` values. Expects first value to be greater than or equal to second. Formats values with decimals in failure message. Includes error message into revert string on failure.\"},\"assertGt(int256,int256)\":{\"notice\":\"Compares two `int256` values. Expects first value to be greater than second.\"},\"assertGt(int256,int256,string)\":{\"notice\":\"Compares two `int256` values. Expects first value to be greater than second. Includes error message into revert string on failure.\"},\"assertGt(uint256,uint256)\":{\"notice\":\"Compares two `uint256` values. Expects first value to be greater than second.\"},\"assertGt(uint256,uint256,string)\":{\"notice\":\"Compares two `uint256` values. Expects first value to be greater than second. Includes error message into revert string on failure.\"},\"assertGtDecimal(int256,int256,uint256)\":{\"notice\":\"Compares two `int256` values. Expects first value to be greater than second. Formats values with decimals in failure message.\"},\"assertGtDecimal(int256,int256,uint256,string)\":{\"notice\":\"Compares two `int256` values. Expects first value to be greater than second. Formats values with decimals in failure message. Includes error message into revert string on failure.\"},\"assertGtDecimal(uint256,uint256,uint256)\":{\"notice\":\"Compares two `uint256` values. Expects first value to be greater than second. Formats values with decimals in failure message.\"},\"assertGtDecimal(uint256,uint256,uint256,string)\":{\"notice\":\"Compares two `uint256` values. Expects first value to be greater than second. Formats values with decimals in failure message. Includes error message into revert string on failure.\"},\"assertLe(int256,int256)\":{\"notice\":\"Compares two `int256` values. Expects first value to be less than or equal to second.\"},\"assertLe(int256,int256,string)\":{\"notice\":\"Compares two `int256` values. Expects first value to be less than or equal to second. Includes error message into revert string on failure.\"},\"assertLe(uint256,uint256)\":{\"notice\":\"Compares two `uint256` values. Expects first value to be less than or equal to second.\"},\"assertLe(uint256,uint256,string)\":{\"notice\":\"Compares two `uint256` values. Expects first value to be less than or equal to second. Includes error message into revert string on failure.\"},\"assertLeDecimal(int256,int256,uint256)\":{\"notice\":\"Compares two `int256` values. Expects first value to be less than or equal to second. Formats values with decimals in failure message.\"},\"assertLeDecimal(int256,int256,uint256,string)\":{\"notice\":\"Compares two `int256` values. Expects first value to be less than or equal to second. Formats values with decimals in failure message. Includes error message into revert string on failure.\"},\"assertLeDecimal(uint256,uint256,uint256)\":{\"notice\":\"Compares two `uint256` values. Expects first value to be less than or equal to second. Formats values with decimals in failure message.\"},\"assertLeDecimal(uint256,uint256,uint256,string)\":{\"notice\":\"Compares two `uint256` values. Expects first value to be less than or equal to second. Formats values with decimals in failure message. Includes error message into revert string on failure.\"},\"assertLt(int256,int256)\":{\"notice\":\"Compares two `int256` values. Expects first value to be less than second.\"},\"assertLt(int256,int256,string)\":{\"notice\":\"Compares two `int256` values. Expects first value to be less than second. Includes error message into revert string on failure.\"},\"assertLt(uint256,uint256)\":{\"notice\":\"Compares two `uint256` values. Expects first value to be less than second.\"},\"assertLt(uint256,uint256,string)\":{\"notice\":\"Compares two `uint256` values. Expects first value to be less than second. Includes error message into revert string on failure.\"},\"assertLtDecimal(int256,int256,uint256)\":{\"notice\":\"Compares two `int256` values. Expects first value to be less than second. Formats values with decimals in failure message.\"},\"assertLtDecimal(int256,int256,uint256,string)\":{\"notice\":\"Compares two `int256` values. Expects first value to be less than second. Formats values with decimals in failure message. Includes error message into revert string on failure.\"},\"assertLtDecimal(uint256,uint256,uint256)\":{\"notice\":\"Compares two `uint256` values. Expects first value to be less than second. Formats values with decimals in failure message.\"},\"assertLtDecimal(uint256,uint256,uint256,string)\":{\"notice\":\"Compares two `uint256` values. Expects first value to be less than second. Formats values with decimals in failure message. Includes error message into revert string on failure.\"},\"assertNotEq(address,address)\":{\"notice\":\"Asserts that two `address` values are not equal.\"},\"assertNotEq(address,address,string)\":{\"notice\":\"Asserts that two `address` values are not equal and includes error message into revert string on failure.\"},\"assertNotEq(address[],address[])\":{\"notice\":\"Asserts that two arrays of `address` values are not equal.\"},\"assertNotEq(address[],address[],string)\":{\"notice\":\"Asserts that two arrays of `address` values are not equal and includes error message into revert string on failure.\"},\"assertNotEq(bool,bool)\":{\"notice\":\"Asserts that two `bool` values are not equal.\"},\"assertNotEq(bool,bool,string)\":{\"notice\":\"Asserts that two `bool` values are not equal and includes error message into revert string on failure.\"},\"assertNotEq(bool[],bool[])\":{\"notice\":\"Asserts that two arrays of `bool` values are not equal.\"},\"assertNotEq(bool[],bool[],string)\":{\"notice\":\"Asserts that two arrays of `bool` values are not equal and includes error message into revert string on failure.\"},\"assertNotEq(bytes,bytes)\":{\"notice\":\"Asserts that two `bytes` values are not equal.\"},\"assertNotEq(bytes,bytes,string)\":{\"notice\":\"Asserts that two `bytes` values are not equal and includes error message into revert string on failure.\"},\"assertNotEq(bytes32,bytes32)\":{\"notice\":\"Asserts that two `bytes32` values are not equal.\"},\"assertNotEq(bytes32,bytes32,string)\":{\"notice\":\"Asserts that two `bytes32` values are not equal and includes error message into revert string on failure.\"},\"assertNotEq(bytes32[],bytes32[])\":{\"notice\":\"Asserts that two arrays of `bytes32` values are not equal.\"},\"assertNotEq(bytes32[],bytes32[],string)\":{\"notice\":\"Asserts that two arrays of `bytes32` values are not equal and includes error message into revert string on failure.\"},\"assertNotEq(bytes[],bytes[])\":{\"notice\":\"Asserts that two arrays of `bytes` values are not equal.\"},\"assertNotEq(bytes[],bytes[],string)\":{\"notice\":\"Asserts that two arrays of `bytes` values are not equal and includes error message into revert string on failure.\"},\"assertNotEq(int256,int256)\":{\"notice\":\"Asserts that two `int256` values are not equal.\"},\"assertNotEq(int256,int256,string)\":{\"notice\":\"Asserts that two `int256` values are not equal and includes error message into revert string on failure.\"},\"assertNotEq(int256[],int256[])\":{\"notice\":\"Asserts that two arrays of `int256` values are not equal.\"},\"assertNotEq(int256[],int256[],string)\":{\"notice\":\"Asserts that two arrays of `int256` values are not equal and includes error message into revert string on failure.\"},\"assertNotEq(string,string)\":{\"notice\":\"Asserts that two `string` values are not equal.\"},\"assertNotEq(string,string,string)\":{\"notice\":\"Asserts that two `string` values are not equal and includes error message into revert string on failure.\"},\"assertNotEq(string[],string[])\":{\"notice\":\"Asserts that two arrays of `string` values are not equal.\"},\"assertNotEq(string[],string[],string)\":{\"notice\":\"Asserts that two arrays of `string` values are not equal and includes error message into revert string on failure.\"},\"assertNotEq(uint256,uint256)\":{\"notice\":\"Asserts that two `uint256` values are not equal.\"},\"assertNotEq(uint256,uint256,string)\":{\"notice\":\"Asserts that two `uint256` values are not equal and includes error message into revert string on failure.\"},\"assertNotEq(uint256[],uint256[])\":{\"notice\":\"Asserts that two arrays of `uint256` values are not equal.\"},\"assertNotEq(uint256[],uint256[],string)\":{\"notice\":\"Asserts that two arrays of `uint256` values are not equal and includes error message into revert string on failure.\"},\"assertNotEqDecimal(int256,int256,uint256)\":{\"notice\":\"Asserts that two `int256` values are not equal, formatting them with decimals in failure message.\"},\"assertNotEqDecimal(int256,int256,uint256,string)\":{\"notice\":\"Asserts that two `int256` values are not equal, formatting them with decimals in failure message. Includes error message into revert string on failure.\"},\"assertNotEqDecimal(uint256,uint256,uint256)\":{\"notice\":\"Asserts that two `uint256` values are not equal, formatting them with decimals in failure message.\"},\"assertNotEqDecimal(uint256,uint256,uint256,string)\":{\"notice\":\"Asserts that two `uint256` values are not equal, formatting them with decimals in failure message. Includes error message into revert string on failure.\"},\"assertTrue(bool)\":{\"notice\":\"Asserts that the given condition is true.\"},\"assertTrue(bool,string)\":{\"notice\":\"Asserts that the given condition is true and includes error message into revert string on failure.\"},\"assume(bool)\":{\"notice\":\"If the condition is false, discard this run's fuzz inputs and generate new ones.\"},\"assumeNoRevert((address,bool,bytes))\":{\"notice\":\"Discard this run's fuzz inputs and generate new ones if next call reverts with the potential revert parameters.\"},\"assumeNoRevert((address,bool,bytes)[])\":{\"notice\":\"Discard this run's fuzz inputs and generate new ones if next call reverts with the any of the potential revert parameters.\"},\"assumeNoRevert()\":{\"notice\":\"Discard this run's fuzz inputs and generate new ones if next call reverted.\"},\"attachBlob(bytes)\":{\"notice\":\"Attach an EIP-4844 blob to the next call\"},\"attachDelegation((uint8,bytes32,bytes32,uint64,address))\":{\"notice\":\"Designate the next call as an EIP-7702 transaction\"},\"breakpoint(string)\":{\"notice\":\"Writes a breakpoint to jump to in the debugger.\"},\"breakpoint(string,bool)\":{\"notice\":\"Writes a conditional breakpoint to jump to in the debugger.\"},\"broadcast()\":{\"notice\":\"Has the next call (at this call depth only) create transactions that can later be signed and sent onchain. Broadcasting address is determined by checking the following in order: 1. If `--sender` argument was provided, that address is used. 2. If exactly one signer (e.g. private key, hw wallet, keystore) is set when `forge broadcast` is invoked, that signer is used. 3. Otherwise, default foundry sender (1804c8AB1F12E6bbf3894d4083f33e07309d1f38) is used.\"},\"broadcast(address)\":{\"notice\":\"Has the next call (at this call depth only) create a transaction with the address provided as the sender that can later be signed and sent onchain.\"},\"broadcast(uint256)\":{\"notice\":\"Has the next call (at this call depth only) create a transaction with the private key provided as the sender that can later be signed and sent onchain.\"},\"broadcastRawTransaction(bytes)\":{\"notice\":\"Takes a signed transaction and broadcasts it to the network.\"},\"closeFile(string)\":{\"notice\":\"Closes file for reading, resetting the offset and allowing to read it from beginning with readLine. `path` is relative to the project root.\"},\"computeCreate2Address(bytes32,bytes32)\":{\"notice\":\"Compute the address of a contract created with CREATE2 using the default CREATE2 deployer.\"},\"computeCreate2Address(bytes32,bytes32,address)\":{\"notice\":\"Compute the address of a contract created with CREATE2 using the given CREATE2 deployer.\"},\"computeCreateAddress(address,uint256)\":{\"notice\":\"Compute the address a contract will be deployed at for a given deployer address and nonce.\"},\"contains(string,string)\":{\"notice\":\"Returns true if `search` is found in `subject`, false otherwise.\"},\"copyFile(string,string)\":{\"notice\":\"Copies the contents of one file to another. This function will **overwrite** the contents of `to`. On success, the total number of bytes copied is returned and it is equal to the length of the `to` file as reported by `metadata`. Both `from` and `to` are relative to the project root.\"},\"copyStorage(address,address)\":{\"notice\":\"Utility cheatcode to copy storage of `from` contract to another `to` contract.\"},\"createDir(string,bool)\":{\"notice\":\"Creates a new, empty directory at the provided path. This cheatcode will revert in the following situations, but is not limited to just these cases: - User lacks permissions to modify `path`. - A parent of the given path doesn't exist and `recursive` is false. - `path` already exists and `recursive` is false. `path` is relative to the project root.\"},\"createWallet(string)\":{\"notice\":\"Derives a private key from the name, labels the account with that name, and returns the wallet.\"},\"createWallet(uint256)\":{\"notice\":\"Generates a wallet from the private key and returns the wallet.\"},\"createWallet(uint256,string)\":{\"notice\":\"Generates a wallet from the private key, labels the account with that name, and returns the wallet.\"},\"deployCode(string)\":{\"notice\":\"Deploys a contract from an artifact file. Takes in the relative path to the json file or the path to the artifact in the form of :: where and parts are optional.\"},\"deployCode(string,bytes)\":{\"notice\":\"Deploys a contract from an artifact file. Takes in the relative path to the json file or the path to the artifact in the form of :: where and parts are optional. Additionally accepts abi-encoded constructor arguments.\"},\"deployCode(string,bytes,bytes32)\":{\"notice\":\"Deploys a contract from an artifact file, using the CREATE2 salt. Takes in the relative path to the json file or the path to the artifact in the form of :: where and parts are optional. Additionally accepts abi-encoded constructor arguments.\"},\"deployCode(string,bytes,uint256)\":{\"notice\":\"Deploys a contract from an artifact file. Takes in the relative path to the json file or the path to the artifact in the form of :: where and parts are optional. Additionally accepts abi-encoded constructor arguments and `msg.value`.\"},\"deployCode(string,bytes,uint256,bytes32)\":{\"notice\":\"Deploys a contract from an artifact file, using the CREATE2 salt. Takes in the relative path to the json file or the path to the artifact in the form of :: where and parts are optional. Additionally accepts abi-encoded constructor arguments and `msg.value`.\"},\"deployCode(string,bytes32)\":{\"notice\":\"Deploys a contract from an artifact file, using the CREATE2 salt. Takes in the relative path to the json file or the path to the artifact in the form of :: where and parts are optional.\"},\"deployCode(string,uint256)\":{\"notice\":\"Deploys a contract from an artifact file. Takes in the relative path to the json file or the path to the artifact in the form of :: where and parts are optional. Additionally accepts `msg.value`.\"},\"deployCode(string,uint256,bytes32)\":{\"notice\":\"Deploys a contract from an artifact file, using the CREATE2 salt. Takes in the relative path to the json file or the path to the artifact in the form of :: where and parts are optional. Additionally accepts `msg.value`.\"},\"deriveKey(string,string,uint32)\":{\"notice\":\"Derive a private key from a provided mnenomic string (or mnenomic file path) at `{derivationPath}{index}`.\"},\"deriveKey(string,string,uint32,string)\":{\"notice\":\"Derive a private key from a provided mnenomic string (or mnenomic file path) in the specified language at `{derivationPath}{index}`.\"},\"deriveKey(string,uint32)\":{\"notice\":\"Derive a private key from a provided mnenomic string (or mnenomic file path) at the derivation path `m/44'/60'/0'/0/{index}`.\"},\"deriveKey(string,uint32,string)\":{\"notice\":\"Derive a private key from a provided mnenomic string (or mnenomic file path) in the specified language at the derivation path `m/44'/60'/0'/0/{index}`.\"},\"ensNamehash(string)\":{\"notice\":\"Returns ENS namehash for provided string.\"},\"envAddress(string)\":{\"notice\":\"Gets the environment variable `name` and parses it as `address`. Reverts if the variable was not found or could not be parsed.\"},\"envAddress(string,string)\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `address`, delimited by `delim`. Reverts if the variable was not found or could not be parsed.\"},\"envBool(string)\":{\"notice\":\"Gets the environment variable `name` and parses it as `bool`. Reverts if the variable was not found or could not be parsed.\"},\"envBool(string,string)\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `bool`, delimited by `delim`. Reverts if the variable was not found or could not be parsed.\"},\"envBytes(string)\":{\"notice\":\"Gets the environment variable `name` and parses it as `bytes`. Reverts if the variable was not found or could not be parsed.\"},\"envBytes(string,string)\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `bytes`, delimited by `delim`. Reverts if the variable was not found or could not be parsed.\"},\"envBytes32(string)\":{\"notice\":\"Gets the environment variable `name` and parses it as `bytes32`. Reverts if the variable was not found or could not be parsed.\"},\"envBytes32(string,string)\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `bytes32`, delimited by `delim`. Reverts if the variable was not found or could not be parsed.\"},\"envExists(string)\":{\"notice\":\"Gets the environment variable `name` and returns true if it exists, else returns false.\"},\"envInt(string)\":{\"notice\":\"Gets the environment variable `name` and parses it as `int256`. Reverts if the variable was not found or could not be parsed.\"},\"envInt(string,string)\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `int256`, delimited by `delim`. Reverts if the variable was not found or could not be parsed.\"},\"envOr(string,address)\":{\"notice\":\"Gets the environment variable `name` and parses it as `address`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,bool)\":{\"notice\":\"Gets the environment variable `name` and parses it as `bool`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,bytes)\":{\"notice\":\"Gets the environment variable `name` and parses it as `bytes`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,bytes32)\":{\"notice\":\"Gets the environment variable `name` and parses it as `bytes32`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,int256)\":{\"notice\":\"Gets the environment variable `name` and parses it as `int256`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,string)\":{\"notice\":\"Gets the environment variable `name` and parses it as `string`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,string,address[])\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `address`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,string,bool[])\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `bool`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,string,bytes32[])\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `bytes32`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,string,bytes[])\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `bytes`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,string,int256[])\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `int256`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,string,string[])\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `string`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,string,uint256[])\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `uint256`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envOr(string,uint256)\":{\"notice\":\"Gets the environment variable `name` and parses it as `uint256`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found.\"},\"envString(string)\":{\"notice\":\"Gets the environment variable `name` and parses it as `string`. Reverts if the variable was not found or could not be parsed.\"},\"envString(string,string)\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `string`, delimited by `delim`. Reverts if the variable was not found or could not be parsed.\"},\"envUint(string)\":{\"notice\":\"Gets the environment variable `name` and parses it as `uint256`. Reverts if the variable was not found or could not be parsed.\"},\"envUint(string,string)\":{\"notice\":\"Gets the environment variable `name` and parses it as an array of `uint256`, delimited by `delim`. Reverts if the variable was not found or could not be parsed.\"},\"eth_getLogs(uint256,uint256,address,bytes32[])\":{\"notice\":\"Gets all the logs according to specified filter.\"},\"exists(string)\":{\"notice\":\"Returns true if the given path points to an existing entity, else returns false.\"},\"ffi(string[])\":{\"notice\":\"Performs a foreign function call via the terminal.\"},\"foundryVersionAtLeast(string)\":{\"notice\":\"Returns true if the current Foundry version is greater than or equal to the given version. The given version string must be in the format `major.minor.patch`. This is equivalent to `foundryVersionCmp(version) >= 0`.\"},\"foundryVersionCmp(string)\":{\"notice\":\"Compares the current Foundry version with the given version string. The given version string must be in the format `major.minor.patch`. Returns: -1 if current Foundry version is less than the given version 0 if current Foundry version equals the given version 1 if current Foundry version is greater than the given version This result can then be used with a comparison operator against `0`. For example, to check if the current Foundry version is greater than or equal to `1.0.0`: `if (foundryVersionCmp(\\\"1.0.0\\\") >= 0) { ... }`\"},\"fsMetadata(string)\":{\"notice\":\"Given a path, query the file system to get information about a file, directory, etc.\"},\"getArtifactPathByCode(bytes)\":{\"notice\":\"Gets the artifact path from code (aka. creation code).\"},\"getArtifactPathByDeployedCode(bytes)\":{\"notice\":\"Gets the artifact path from deployed code (aka. runtime code).\"},\"getBlobBaseFee()\":{\"notice\":\"Gets the current `block.blobbasefee`. You should use this instead of `block.blobbasefee` if you use `vm.blobBaseFee`, as `block.blobbasefee` is assumed to be constant across a transaction, and as a result will get optimized out by the compiler. See https://github.com/foundry-rs/foundry/issues/6180\"},\"getBlockNumber()\":{\"notice\":\"Gets the current `block.number`. You should use this instead of `block.number` if you use `vm.roll`, as `block.number` is assumed to be constant across a transaction, and as a result will get optimized out by the compiler. See https://github.com/foundry-rs/foundry/issues/6180\"},\"getBlockTimestamp()\":{\"notice\":\"Gets the current `block.timestamp`. You should use this instead of `block.timestamp` if you use `vm.warp`, as `block.timestamp` is assumed to be constant across a transaction, and as a result will get optimized out by the compiler. See https://github.com/foundry-rs/foundry/issues/6180\"},\"getBroadcast(string,uint64,uint8)\":{\"notice\":\"Returns the most recent broadcast for the given contract on `chainId` matching `txType`. For example: The most recent deployment can be fetched by passing `txType` as `CREATE` or `CREATE2`. The most recent call can be fetched by passing `txType` as `CALL`.\"},\"getBroadcasts(string,uint64)\":{\"notice\":\"Returns all broadcasts for the given contract on `chainId`. Sorted such that the most recent broadcast is the first element, and the oldest is the last. i.e descending order of BroadcastTxSummary.blockNumber.\"},\"getBroadcasts(string,uint64,uint8)\":{\"notice\":\"Returns all broadcasts for the given contract on `chainId` with the specified `txType`. Sorted such that the most recent broadcast is the first element, and the oldest is the last. i.e descending order of BroadcastTxSummary.blockNumber.\"},\"getChain(string)\":{\"notice\":\"Returns a Chain struct for specific alias\"},\"getChain(uint256)\":{\"notice\":\"Returns a Chain struct for specific chainId\"},\"getCode(string)\":{\"notice\":\"Gets the creation bytecode from an artifact file. Takes in the relative path to the json file or the path to the artifact in the form of :: where and parts are optional.\"},\"getDeployedCode(string)\":{\"notice\":\"Gets the deployed bytecode from an artifact file. Takes in the relative path to the json file or the path to the artifact in the form of :: where and parts are optional.\"},\"getDeployment(string)\":{\"notice\":\"Returns the most recent deployment for the current `chainId`.\"},\"getDeployment(string,uint64)\":{\"notice\":\"Returns the most recent deployment for the given contract on `chainId`\"},\"getDeployments(string,uint64)\":{\"notice\":\"Returns all deployments for the given contract on `chainId` Sorted in descending order of deployment time i.e descending order of BroadcastTxSummary.blockNumber. The most recent deployment is the first element, and the oldest is the last.\"},\"getFoundryVersion()\":{\"notice\":\"Returns the Foundry version. Format: -+.. Sample output: 0.3.0-nightly+3cb96bde9b.1737036656.debug Note: Build timestamps may vary slightly across platforms due to separate CI jobs. For reliable version comparisons, use UNIX format (e.g., >= 1700000000) to compare timestamps while ignoring minor time differences.\"},\"getLabel(address)\":{\"notice\":\"Gets the label for the specified address.\"},\"getMappingKeyAndParentOf(address,bytes32)\":{\"notice\":\"Gets the map key and parent of a mapping at a given slot, for a given address.\"},\"getMappingLength(address,bytes32)\":{\"notice\":\"Gets the number of elements in the mapping at the given slot, for a given address.\"},\"getMappingSlotAt(address,bytes32,uint256)\":{\"notice\":\"Gets the elements at index idx of the mapping at the given slot, for a given address. The index must be less than the length of the mapping (i.e. the number of keys in the mapping).\"},\"getNonce((address,uint256,uint256,uint256))\":{\"notice\":\"Get the nonce of a `Wallet`.\"},\"getNonce(address)\":{\"notice\":\"Gets the nonce of an account.\"},\"getRecordedLogs()\":{\"notice\":\"Gets all the recorded logs.\"},\"getStateDiff()\":{\"notice\":\"Returns state diffs from current `vm.startStateDiffRecording` session.\"},\"getStateDiffJson()\":{\"notice\":\"Returns state diffs from current `vm.startStateDiffRecording` session, in json format.\"},\"getWallets()\":{\"notice\":\"Returns addresses of available unlocked wallets in the script environment.\"},\"indexOf(string,string)\":{\"notice\":\"Returns the index of the first occurrence of a `key` in an `input` string. Returns `NOT_FOUND` (i.e. `type(uint256).max`) if the `key` is not found. Returns 0 in case of an empty `key`.\"},\"isContext(uint8)\":{\"notice\":\"Returns true if `forge` command was executed in given context.\"},\"isDir(string)\":{\"notice\":\"Returns true if the path exists on disk and is pointing at a directory, else returns false.\"},\"isFile(string)\":{\"notice\":\"Returns true if the path exists on disk and is pointing at a regular file, else returns false.\"},\"keyExists(string,string)\":{\"notice\":\"Checks if `key` exists in a JSON object `keyExists` is being deprecated in favor of `keyExistsJson`. It will be removed in future versions.\"},\"keyExistsJson(string,string)\":{\"notice\":\"Checks if `key` exists in a JSON object.\"},\"keyExistsToml(string,string)\":{\"notice\":\"Checks if `key` exists in a TOML table.\"},\"label(address,string)\":{\"notice\":\"Labels an address in call traces.\"},\"lastCallGas()\":{\"notice\":\"Gets the gas used in the last call from the callee perspective.\"},\"load(address,bytes32)\":{\"notice\":\"Loads a storage slot from an address.\"},\"parseAddress(string)\":{\"notice\":\"Parses the given `string` into an `address`.\"},\"parseBool(string)\":{\"notice\":\"Parses the given `string` into a `bool`.\"},\"parseBytes(string)\":{\"notice\":\"Parses the given `string` into `bytes`.\"},\"parseBytes32(string)\":{\"notice\":\"Parses the given `string` into a `bytes32`.\"},\"parseInt(string)\":{\"notice\":\"Parses the given `string` into a `int256`.\"},\"parseJson(string)\":{\"notice\":\"ABI-encodes a JSON object.\"},\"parseJson(string,string)\":{\"notice\":\"ABI-encodes a JSON object at `key`.\"},\"parseJsonAddress(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `address`.\"},\"parseJsonAddressArray(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `address[]`.\"},\"parseJsonBool(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `bool`.\"},\"parseJsonBoolArray(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `bool[]`.\"},\"parseJsonBytes(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `bytes`.\"},\"parseJsonBytes32(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `bytes32`.\"},\"parseJsonBytes32Array(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `bytes32[]`.\"},\"parseJsonBytesArray(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `bytes[]`.\"},\"parseJsonInt(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `int256`.\"},\"parseJsonIntArray(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `int256[]`.\"},\"parseJsonKeys(string,string)\":{\"notice\":\"Returns an array of all the keys in a JSON object.\"},\"parseJsonString(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `string`.\"},\"parseJsonStringArray(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `string[]`.\"},\"parseJsonType(string,string)\":{\"notice\":\"Parses a string of JSON data and coerces it to type corresponding to `typeDescription`.\"},\"parseJsonType(string,string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to type corresponding to `typeDescription`.\"},\"parseJsonTypeArray(string,string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to type array corresponding to `typeDescription`.\"},\"parseJsonUint(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `uint256`.\"},\"parseJsonUintArray(string,string)\":{\"notice\":\"Parses a string of JSON data at `key` and coerces it to `uint256[]`.\"},\"parseToml(string)\":{\"notice\":\"ABI-encodes a TOML table.\"},\"parseToml(string,string)\":{\"notice\":\"ABI-encodes a TOML table at `key`.\"},\"parseTomlAddress(string,string)\":{\"notice\":\"Parses a string of TOML data at `key` and coerces it to `address`.\"},\"parseTomlAddressArray(string,string)\":{\"notice\":\"Parses a string of TOML data at `key` and coerces it to `address[]`.\"},\"parseTomlBool(string,string)\":{\"notice\":\"Parses a string of TOML data at `key` and coerces it to `bool`.\"},\"parseTomlBoolArray(string,string)\":{\"notice\":\"Parses a string of TOML data at `key` and coerces it to `bool[]`.\"},\"parseTomlBytes(string,string)\":{\"notice\":\"Parses a string of TOML data at `key` and coerces it to `bytes`.\"},\"parseTomlBytes32(string,string)\":{\"notice\":\"Parses a string of TOML data at `key` and coerces it to `bytes32`.\"},\"parseTomlBytes32Array(string,string)\":{\"notice\":\"Parses a string of TOML data at `key` and coerces it to `bytes32[]`.\"},\"parseTomlBytesArray(string,string)\":{\"notice\":\"Parses a string of TOML data at `key` and coerces it to `bytes[]`.\"},\"parseTomlInt(string,string)\":{\"notice\":\"Parses a string of TOML data at `key` and coerces it to `int256`.\"},\"parseTomlIntArray(string,string)\":{\"notice\":\"Parses a string of TOML data at `key` and coerces it to `int256[]`.\"},\"parseTomlKeys(string,string)\":{\"notice\":\"Returns an array of all the keys in a TOML table.\"},\"parseTomlString(string,string)\":{\"notice\":\"Parses a string of TOML data at `key` and coerces it to `string`.\"},\"parseTomlStringArray(string,string)\":{\"notice\":\"Parses a string of TOML data at `key` and coerces it to `string[]`.\"},\"parseTomlType(string,string)\":{\"notice\":\"Parses a string of TOML data and coerces it to type corresponding to `typeDescription`.\"},\"parseTomlType(string,string,string)\":{\"notice\":\"Parses a string of TOML data at `key` and coerces it to type corresponding to `typeDescription`.\"},\"parseTomlTypeArray(string,string,string)\":{\"notice\":\"Parses a string of TOML data at `key` and coerces it to type array corresponding to `typeDescription`.\"},\"parseTomlUint(string,string)\":{\"notice\":\"Parses a string of TOML data at `key` and coerces it to `uint256`.\"},\"parseTomlUintArray(string,string)\":{\"notice\":\"Parses a string of TOML data at `key` and coerces it to `uint256[]`.\"},\"parseUint(string)\":{\"notice\":\"Parses the given `string` into a `uint256`.\"},\"pauseGasMetering()\":{\"notice\":\"Pauses gas metering (i.e. gas usage is not counted). Noop if already paused.\"},\"pauseTracing()\":{\"notice\":\"Pauses collection of call traces. Useful in cases when you want to skip tracing of complex calls which are not useful for debugging.\"},\"projectRoot()\":{\"notice\":\"Get the path of the current project root.\"},\"prompt(string)\":{\"notice\":\"Prompts the user for a string value in the terminal.\"},\"promptAddress(string)\":{\"notice\":\"Prompts the user for an address in the terminal.\"},\"promptSecret(string)\":{\"notice\":\"Prompts the user for a hidden string value in the terminal.\"},\"promptSecretUint(string)\":{\"notice\":\"Prompts the user for hidden uint256 in the terminal (usually pk).\"},\"promptUint(string)\":{\"notice\":\"Prompts the user for uint256 in the terminal.\"},\"publicKeyP256(uint256)\":{\"notice\":\"Derives secp256r1 public key from the provided `privateKey`.\"},\"randomAddress()\":{\"notice\":\"Returns a random `address`.\"},\"randomBool()\":{\"notice\":\"Returns a random `bool`.\"},\"randomBytes(uint256)\":{\"notice\":\"Returns a random byte array value of the given length.\"},\"randomBytes4()\":{\"notice\":\"Returns a random fixed-size byte array of length 4.\"},\"randomBytes8()\":{\"notice\":\"Returns a random fixed-size byte array of length 8.\"},\"randomInt()\":{\"notice\":\"Returns a random `int256` value.\"},\"randomInt(uint256)\":{\"notice\":\"Returns a random `int256` value of given bits.\"},\"randomUint()\":{\"notice\":\"Returns a random uint256 value.\"},\"randomUint(uint256)\":{\"notice\":\"Returns a random `uint256` value of given bits.\"},\"randomUint(uint256,uint256)\":{\"notice\":\"Returns random uint256 value between the provided range (=min..=max).\"},\"readDir(string)\":{\"notice\":\"Reads the directory at the given path recursively, up to `maxDepth`. `maxDepth` defaults to 1, meaning only the direct children of the given directory will be returned. Follows symbolic links if `followLinks` is true.\"},\"readDir(string,uint64)\":{\"notice\":\"See `readDir(string)`.\"},\"readDir(string,uint64,bool)\":{\"notice\":\"See `readDir(string)`.\"},\"readFile(string)\":{\"notice\":\"Reads the entire content of file to string. `path` is relative to the project root.\"},\"readFileBinary(string)\":{\"notice\":\"Reads the entire content of file as binary. `path` is relative to the project root.\"},\"readLine(string)\":{\"notice\":\"Reads next line of file to string.\"},\"readLink(string)\":{\"notice\":\"Reads a symbolic link, returning the path that the link points to. This cheatcode will revert in the following situations, but is not limited to just these cases: - `path` is not a symbolic link. - `path` does not exist.\"},\"record()\":{\"notice\":\"Records all storage reads and writes.\"},\"recordLogs()\":{\"notice\":\"Record all the transaction logs.\"},\"rememberKey(uint256)\":{\"notice\":\"Adds a private key to the local forge wallet and returns the address.\"},\"rememberKeys(string,string,string,uint32)\":{\"notice\":\"Derive a set number of wallets from a mnemonic in the specified language at the derivation path `m/44'/60'/0'/0/{0..count}`. The respective private keys are saved to the local forge wallet for later use and their addresses are returned.\"},\"rememberKeys(string,string,uint32)\":{\"notice\":\"Derive a set number of wallets from a mnemonic at the derivation path `m/44'/60'/0'/0/{0..count}`. The respective private keys are saved to the local forge wallet for later use and their addresses are returned.\"},\"removeDir(string,bool)\":{\"notice\":\"Removes a directory at the provided path. This cheatcode will revert in the following situations, but is not limited to just these cases: - `path` doesn't exist. - `path` isn't a directory. - User lacks permissions to modify `path`. - The directory is not empty and `recursive` is false. `path` is relative to the project root.\"},\"removeFile(string)\":{\"notice\":\"Removes a file from the filesystem. This cheatcode will revert in the following situations, but is not limited to just these cases: - `path` points to a directory. - The file doesn't exist. - The user lacks permissions to remove the file. `path` is relative to the project root.\"},\"replace(string,string,string)\":{\"notice\":\"Replaces occurrences of `from` in the given `string` with `to`.\"},\"resetGasMetering()\":{\"notice\":\"Reset gas metering (i.e. gas usage is set to gas limit).\"},\"resumeGasMetering()\":{\"notice\":\"Resumes gas metering (i.e. gas usage is counted again). Noop if already on.\"},\"resumeTracing()\":{\"notice\":\"Unpauses collection of call traces.\"},\"rpc(string,string)\":{\"notice\":\"Performs an Ethereum JSON-RPC request to the current fork URL.\"},\"rpc(string,string,string)\":{\"notice\":\"Performs an Ethereum JSON-RPC request to the given endpoint.\"},\"rpcUrl(string)\":{\"notice\":\"Returns the RPC url for the given alias.\"},\"rpcUrlStructs()\":{\"notice\":\"Returns all rpc urls and their aliases as structs.\"},\"rpcUrls()\":{\"notice\":\"Returns all rpc urls and their aliases `[alias, url][]`.\"},\"serializeAddress(string,string,address)\":{\"notice\":\"See `serializeJson`.\"},\"serializeAddress(string,string,address[])\":{\"notice\":\"See `serializeJson`.\"},\"serializeBool(string,string,bool)\":{\"notice\":\"See `serializeJson`.\"},\"serializeBool(string,string,bool[])\":{\"notice\":\"See `serializeJson`.\"},\"serializeBytes(string,string,bytes)\":{\"notice\":\"See `serializeJson`.\"},\"serializeBytes(string,string,bytes[])\":{\"notice\":\"See `serializeJson`.\"},\"serializeBytes32(string,string,bytes32)\":{\"notice\":\"See `serializeJson`.\"},\"serializeBytes32(string,string,bytes32[])\":{\"notice\":\"See `serializeJson`.\"},\"serializeInt(string,string,int256)\":{\"notice\":\"See `serializeJson`.\"},\"serializeInt(string,string,int256[])\":{\"notice\":\"See `serializeJson`.\"},\"serializeJson(string,string)\":{\"notice\":\"Serializes a key and value to a JSON object stored in-memory that can be later written to a file. Returns the stringified version of the specific JSON file up to that moment.\"},\"serializeJsonType(string,bytes)\":{\"notice\":\"See `serializeJson`.\"},\"serializeJsonType(string,string,string,bytes)\":{\"notice\":\"See `serializeJson`.\"},\"serializeString(string,string,string)\":{\"notice\":\"See `serializeJson`.\"},\"serializeString(string,string,string[])\":{\"notice\":\"See `serializeJson`.\"},\"serializeUint(string,string,uint256)\":{\"notice\":\"See `serializeJson`.\"},\"serializeUint(string,string,uint256[])\":{\"notice\":\"See `serializeJson`.\"},\"serializeUintToHex(string,string,uint256)\":{\"notice\":\"See `serializeJson`.\"},\"setArbitraryStorage(address)\":{\"notice\":\"Utility cheatcode to set arbitrary storage for given target address.\"},\"setArbitraryStorage(address,bool)\":{\"notice\":\"Utility cheatcode to set arbitrary storage for given target address and overwrite any storage slots that have been previously set.\"},\"setEnv(string,string)\":{\"notice\":\"Sets environment variables.\"},\"shuffle(uint256[])\":{\"notice\":\"Randomly shuffles an array.\"},\"sign((address,uint256,uint256,uint256),bytes32)\":{\"notice\":\"Signs data with a `Wallet`.\"},\"sign(address,bytes32)\":{\"notice\":\"Signs `digest` with signer provided to script using the secp256k1 curve. Raises error if none of the signers passed into the script have provided address.\"},\"sign(bytes32)\":{\"notice\":\"Signs `digest` with signer provided to script using the secp256k1 curve. If `--sender` is provided, the signer with provided address is used, otherwise, if exactly one signer is provided to the script, that signer is used. Raises error if signer passed through `--sender` does not match any unlocked signers or if `--sender` is not provided and not exactly one signer is passed to the script.\"},\"sign(uint256,bytes32)\":{\"notice\":\"Signs `digest` with `privateKey` using the secp256k1 curve.\"},\"signAndAttachDelegation(address,uint256)\":{\"notice\":\"Sign an EIP-7702 authorization and designate the next call as an EIP-7702 transaction\"},\"signAndAttachDelegation(address,uint256,uint64)\":{\"notice\":\"Sign an EIP-7702 authorization and designate the next call as an EIP-7702 transaction for specific nonce\"},\"signCompact((address,uint256,uint256,uint256),bytes32)\":{\"notice\":\"Signs data with a `Wallet`. Returns a compact signature (`r`, `vs`) as per EIP-2098, where `vs` encodes both the signature's `s` value, and the recovery id `v` in a single bytes32. This format reduces the signature size from 65 to 64 bytes.\"},\"signCompact(address,bytes32)\":{\"notice\":\"Signs `digest` with signer provided to script using the secp256k1 curve. Returns a compact signature (`r`, `vs`) as per EIP-2098, where `vs` encodes both the signature's `s` value, and the recovery id `v` in a single bytes32. This format reduces the signature size from 65 to 64 bytes. Raises error if none of the signers passed into the script have provided address.\"},\"signCompact(bytes32)\":{\"notice\":\"Signs `digest` with signer provided to script using the secp256k1 curve. Returns a compact signature (`r`, `vs`) as per EIP-2098, where `vs` encodes both the signature's `s` value, and the recovery id `v` in a single bytes32. This format reduces the signature size from 65 to 64 bytes. If `--sender` is provided, the signer with provided address is used, otherwise, if exactly one signer is provided to the script, that signer is used. Raises error if signer passed through `--sender` does not match any unlocked signers or if `--sender` is not provided and not exactly one signer is passed to the script.\"},\"signCompact(uint256,bytes32)\":{\"notice\":\"Signs `digest` with `privateKey` using the secp256k1 curve. Returns a compact signature (`r`, `vs`) as per EIP-2098, where `vs` encodes both the signature's `s` value, and the recovery id `v` in a single bytes32. This format reduces the signature size from 65 to 64 bytes.\"},\"signDelegation(address,uint256)\":{\"notice\":\"Sign an EIP-7702 authorization for delegation\"},\"signDelegation(address,uint256,uint64)\":{\"notice\":\"Sign an EIP-7702 authorization for delegation for specific nonce\"},\"signP256(uint256,bytes32)\":{\"notice\":\"Signs `digest` with `privateKey` using the secp256r1 curve.\"},\"sleep(uint256)\":{\"notice\":\"Suspends execution of the main thread for `duration` milliseconds.\"},\"sort(uint256[])\":{\"notice\":\"Sorts an array in ascending order.\"},\"split(string,string)\":{\"notice\":\"Splits the given `string` into an array of strings divided by the `delimiter`.\"},\"startBroadcast()\":{\"notice\":\"Has all subsequent calls (at this call depth only) create transactions that can later be signed and sent onchain. Broadcasting address is determined by checking the following in order: 1. If `--sender` argument was provided, that address is used. 2. If exactly one signer (e.g. private key, hw wallet, keystore) is set when `forge broadcast` is invoked, that signer is used. 3. Otherwise, default foundry sender (1804c8AB1F12E6bbf3894d4083f33e07309d1f38) is used.\"},\"startBroadcast(address)\":{\"notice\":\"Has all subsequent calls (at this call depth only) create transactions with the address provided that can later be signed and sent onchain.\"},\"startBroadcast(uint256)\":{\"notice\":\"Has all subsequent calls (at this call depth only) create transactions with the private key provided that can later be signed and sent onchain.\"},\"startDebugTraceRecording()\":{\"notice\":\"Records the debug trace during the run.\"},\"startMappingRecording()\":{\"notice\":\"Starts recording all map SSTOREs for later retrieval.\"},\"startStateDiffRecording()\":{\"notice\":\"Record all account accesses as part of CREATE, CALL or SELFDESTRUCT opcodes in order, along with the context of the calls\"},\"stopAndReturnDebugTraceRecording()\":{\"notice\":\"Stop debug trace recording and returns the recorded debug trace.\"},\"stopAndReturnStateDiff()\":{\"notice\":\"Returns an ordered array of all account accesses from a `vm.startStateDiffRecording` session.\"},\"stopBroadcast()\":{\"notice\":\"Stops collecting onchain transactions.\"},\"stopMappingRecording()\":{\"notice\":\"Stops recording all map SSTOREs for later retrieval and clears the recorded data.\"},\"toBase64(bytes)\":{\"notice\":\"Encodes a `bytes` value to a base64 string.\"},\"toBase64(string)\":{\"notice\":\"Encodes a `string` value to a base64 string.\"},\"toBase64URL(bytes)\":{\"notice\":\"Encodes a `bytes` value to a base64url string.\"},\"toBase64URL(string)\":{\"notice\":\"Encodes a `string` value to a base64url string.\"},\"toLowercase(string)\":{\"notice\":\"Converts the given `string` value to Lowercase.\"},\"toString(address)\":{\"notice\":\"Converts the given value to a `string`.\"},\"toString(bool)\":{\"notice\":\"Converts the given value to a `string`.\"},\"toString(bytes)\":{\"notice\":\"Converts the given value to a `string`.\"},\"toString(bytes32)\":{\"notice\":\"Converts the given value to a `string`.\"},\"toString(int256)\":{\"notice\":\"Converts the given value to a `string`.\"},\"toString(uint256)\":{\"notice\":\"Converts the given value to a `string`.\"},\"toUppercase(string)\":{\"notice\":\"Converts the given `string` value to Uppercase.\"},\"trim(string)\":{\"notice\":\"Trims leading and trailing whitespace from the given `string` value.\"},\"tryFfi(string[])\":{\"notice\":\"Performs a foreign function call via terminal and returns the exit code, stdout, and stderr.\"},\"unixTime()\":{\"notice\":\"Returns the time since unix epoch in milliseconds.\"},\"writeFile(string,string)\":{\"notice\":\"Writes data to file, creating a file if it does not exist, and entirely replacing its contents if it does. `path` is relative to the project root.\"},\"writeFileBinary(string,bytes)\":{\"notice\":\"Writes binary data to a file, creating a file if it does not exist, and entirely replacing its contents if it does. `path` is relative to the project root.\"},\"writeJson(string,string)\":{\"notice\":\"Write a serialized JSON object to a file. If the file exists, it will be overwritten.\"},\"writeJson(string,string,string)\":{\"notice\":\"Write a serialized JSON object to an **existing** JSON file, replacing a value with key = This is useful to replace a specific value of a JSON file, without having to parse the entire thing.\"},\"writeLine(string,string)\":{\"notice\":\"Writes line to file, creating a file if it does not exist. `path` is relative to the project root.\"},\"writeToml(string,string)\":{\"notice\":\"Takes serialized JSON, converts to TOML and write a serialized TOML to a file.\"},\"writeToml(string,string,string)\":{\"notice\":\"Takes serialized JSON, converts to TOML and write a serialized TOML table to an **existing** TOML file, replacing a value with key = This is useful to replace a specific value of a TOML file, without having to parse the entire thing.\"}},\"notice\":\"The `VmSafe` interface does not allow manipulation of the EVM state or other actions that may result in Script simulations differing from on-chain execution. It is recommended to only use these cheats in scripts.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/forge-std/src/Vm.sol\":\"VmSafe\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"target","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"accesses","outputs":[{"internalType":"bytes32[]","name":"readSlots","type":"bytes32[]"},{"internalType":"bytes32[]","name":"writeSlots","type":"bytes32[]"}]},{"inputs":[{"internalType":"uint256","name":"privateKey","type":"uint256"}],"stateMutability":"pure","type":"function","name":"addr","outputs":[{"internalType":"address","name":"keyAddr","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"uint256","name":"maxDelta","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertApproxEqAbs"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"uint256","name":"maxDelta","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertApproxEqAbs"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"uint256","name":"maxDelta","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertApproxEqAbs"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"uint256","name":"maxDelta","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertApproxEqAbs"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"uint256","name":"maxDelta","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertApproxEqAbsDecimal"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"uint256","name":"maxDelta","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertApproxEqAbsDecimal"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"uint256","name":"maxDelta","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertApproxEqAbsDecimal"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"uint256","name":"maxDelta","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertApproxEqAbsDecimal"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"uint256","name":"maxPercentDelta","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertApproxEqRel"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"uint256","name":"maxPercentDelta","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertApproxEqRel"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"uint256","name":"maxPercentDelta","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertApproxEqRel"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"uint256","name":"maxPercentDelta","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertApproxEqRel"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"uint256","name":"maxPercentDelta","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertApproxEqRelDecimal"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"uint256","name":"maxPercentDelta","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertApproxEqRelDecimal"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"uint256","name":"maxPercentDelta","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertApproxEqRelDecimal"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"uint256","name":"maxPercentDelta","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertApproxEqRelDecimal"},{"inputs":[{"internalType":"bytes32[]","name":"left","type":"bytes32[]"},{"internalType":"bytes32[]","name":"right","type":"bytes32[]"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"int256[]","name":"left","type":"int256[]"},{"internalType":"int256[]","name":"right","type":"int256[]"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"address","name":"left","type":"address"},{"internalType":"address","name":"right","type":"address"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"string","name":"left","type":"string"},{"internalType":"string","name":"right","type":"string"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"address[]","name":"left","type":"address[]"},{"internalType":"address[]","name":"right","type":"address[]"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"address[]","name":"left","type":"address[]"},{"internalType":"address[]","name":"right","type":"address[]"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"bool","name":"left","type":"bool"},{"internalType":"bool","name":"right","type":"bool"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"address","name":"left","type":"address"},{"internalType":"address","name":"right","type":"address"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"uint256[]","name":"left","type":"uint256[]"},{"internalType":"uint256[]","name":"right","type":"uint256[]"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"bool[]","name":"left","type":"bool[]"},{"internalType":"bool[]","name":"right","type":"bool[]"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"int256[]","name":"left","type":"int256[]"},{"internalType":"int256[]","name":"right","type":"int256[]"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"bytes32","name":"left","type":"bytes32"},{"internalType":"bytes32","name":"right","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"uint256[]","name":"left","type":"uint256[]"},{"internalType":"uint256[]","name":"right","type":"uint256[]"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"bytes","name":"left","type":"bytes"},{"internalType":"bytes","name":"right","type":"bytes"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"bytes32","name":"left","type":"bytes32"},{"internalType":"bytes32","name":"right","type":"bytes32"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"string[]","name":"left","type":"string[]"},{"internalType":"string[]","name":"right","type":"string[]"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"bytes32[]","name":"left","type":"bytes32[]"},{"internalType":"bytes32[]","name":"right","type":"bytes32[]"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"bytes","name":"left","type":"bytes"},{"internalType":"bytes","name":"right","type":"bytes"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"bool[]","name":"left","type":"bool[]"},{"internalType":"bool[]","name":"right","type":"bool[]"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"bytes[]","name":"left","type":"bytes[]"},{"internalType":"bytes[]","name":"right","type":"bytes[]"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"string[]","name":"left","type":"string[]"},{"internalType":"string[]","name":"right","type":"string[]"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"string","name":"left","type":"string"},{"internalType":"string","name":"right","type":"string"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"bytes[]","name":"left","type":"bytes[]"},{"internalType":"bytes[]","name":"right","type":"bytes[]"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"bool","name":"left","type":"bool"},{"internalType":"bool","name":"right","type":"bool"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"}],"stateMutability":"pure","type":"function","name":"assertEq"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertEqDecimal"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertEqDecimal"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertEqDecimal"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertEqDecimal"},{"inputs":[{"internalType":"bool","name":"condition","type":"bool"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertFalse"},{"inputs":[{"internalType":"bool","name":"condition","type":"bool"}],"stateMutability":"pure","type":"function","name":"assertFalse"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"}],"stateMutability":"pure","type":"function","name":"assertGe"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertGe"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertGe"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertGe"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertGeDecimal"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertGeDecimal"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertGeDecimal"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertGeDecimal"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"}],"stateMutability":"pure","type":"function","name":"assertGt"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertGt"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertGt"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertGt"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertGtDecimal"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertGtDecimal"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertGtDecimal"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertGtDecimal"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertLe"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertLe"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"}],"stateMutability":"pure","type":"function","name":"assertLe"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertLe"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertLeDecimal"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertLeDecimal"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertLeDecimal"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertLeDecimal"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"}],"stateMutability":"pure","type":"function","name":"assertLt"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertLt"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertLt"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertLt"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertLtDecimal"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertLtDecimal"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertLtDecimal"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertLtDecimal"},{"inputs":[{"internalType":"bytes32[]","name":"left","type":"bytes32[]"},{"internalType":"bytes32[]","name":"right","type":"bytes32[]"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"int256[]","name":"left","type":"int256[]"},{"internalType":"int256[]","name":"right","type":"int256[]"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"bool","name":"left","type":"bool"},{"internalType":"bool","name":"right","type":"bool"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"bytes[]","name":"left","type":"bytes[]"},{"internalType":"bytes[]","name":"right","type":"bytes[]"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"bool","name":"left","type":"bool"},{"internalType":"bool","name":"right","type":"bool"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"bool[]","name":"left","type":"bool[]"},{"internalType":"bool[]","name":"right","type":"bool[]"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"bytes","name":"left","type":"bytes"},{"internalType":"bytes","name":"right","type":"bytes"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"address[]","name":"left","type":"address[]"},{"internalType":"address[]","name":"right","type":"address[]"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"uint256[]","name":"left","type":"uint256[]"},{"internalType":"uint256[]","name":"right","type":"uint256[]"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"bool[]","name":"left","type":"bool[]"},{"internalType":"bool[]","name":"right","type":"bool[]"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"string","name":"left","type":"string"},{"internalType":"string","name":"right","type":"string"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"address[]","name":"left","type":"address[]"},{"internalType":"address[]","name":"right","type":"address[]"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"string","name":"left","type":"string"},{"internalType":"string","name":"right","type":"string"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"address","name":"left","type":"address"},{"internalType":"address","name":"right","type":"address"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"bytes32","name":"left","type":"bytes32"},{"internalType":"bytes32","name":"right","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"bytes","name":"left","type":"bytes"},{"internalType":"bytes","name":"right","type":"bytes"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"uint256[]","name":"left","type":"uint256[]"},{"internalType":"uint256[]","name":"right","type":"uint256[]"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"address","name":"left","type":"address"},{"internalType":"address","name":"right","type":"address"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"bytes32","name":"left","type":"bytes32"},{"internalType":"bytes32","name":"right","type":"bytes32"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"string[]","name":"left","type":"string[]"},{"internalType":"string[]","name":"right","type":"string[]"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"bytes32[]","name":"left","type":"bytes32[]"},{"internalType":"bytes32[]","name":"right","type":"bytes32[]"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"string[]","name":"left","type":"string[]"},{"internalType":"string[]","name":"right","type":"string[]"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"int256[]","name":"left","type":"int256[]"},{"internalType":"int256[]","name":"right","type":"int256[]"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"bytes[]","name":"left","type":"bytes[]"},{"internalType":"bytes[]","name":"right","type":"bytes[]"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"}],"stateMutability":"pure","type":"function","name":"assertNotEq"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertNotEqDecimal"},{"inputs":[{"internalType":"int256","name":"left","type":"int256"},{"internalType":"int256","name":"right","type":"int256"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertNotEqDecimal"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"}],"stateMutability":"pure","type":"function","name":"assertNotEqDecimal"},{"inputs":[{"internalType":"uint256","name":"left","type":"uint256"},{"internalType":"uint256","name":"right","type":"uint256"},{"internalType":"uint256","name":"decimals","type":"uint256"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertNotEqDecimal"},{"inputs":[{"internalType":"bool","name":"condition","type":"bool"}],"stateMutability":"pure","type":"function","name":"assertTrue"},{"inputs":[{"internalType":"bool","name":"condition","type":"bool"},{"internalType":"string","name":"error","type":"string"}],"stateMutability":"pure","type":"function","name":"assertTrue"},{"inputs":[{"internalType":"bool","name":"condition","type":"bool"}],"stateMutability":"pure","type":"function","name":"assume"},{"inputs":[],"stateMutability":"pure","type":"function","name":"assumeNoRevert"},{"inputs":[{"internalType":"struct VmSafe.PotentialRevert[]","name":"potentialReverts","type":"tuple[]","components":[{"internalType":"address","name":"reverter","type":"address"},{"internalType":"bool","name":"partialMatch","type":"bool"},{"internalType":"bytes","name":"revertData","type":"bytes"}]}],"stateMutability":"pure","type":"function","name":"assumeNoRevert"},{"inputs":[{"internalType":"struct VmSafe.PotentialRevert","name":"potentialRevert","type":"tuple","components":[{"internalType":"address","name":"reverter","type":"address"},{"internalType":"bool","name":"partialMatch","type":"bool"},{"internalType":"bytes","name":"revertData","type":"bytes"}]}],"stateMutability":"pure","type":"function","name":"assumeNoRevert"},{"inputs":[{"internalType":"bytes","name":"blob","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"attachBlob"},{"inputs":[{"internalType":"struct VmSafe.SignedDelegation","name":"signedDelegation","type":"tuple","components":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"},{"internalType":"address","name":"implementation","type":"address"}]}],"stateMutability":"nonpayable","type":"function","name":"attachDelegation"},{"inputs":[{"internalType":"string","name":"char","type":"string"}],"stateMutability":"pure","type":"function","name":"breakpoint"},{"inputs":[{"internalType":"string","name":"char","type":"string"},{"internalType":"bool","name":"value","type":"bool"}],"stateMutability":"pure","type":"function","name":"breakpoint"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"broadcast"},{"inputs":[{"internalType":"address","name":"signer","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"broadcast"},{"inputs":[{"internalType":"uint256","name":"privateKey","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"broadcast"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"broadcastRawTransaction"},{"inputs":[{"internalType":"string","name":"path","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"closeFile"},{"inputs":[{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"bytes32","name":"initCodeHash","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"computeCreate2Address","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"bytes32","name":"initCodeHash","type":"bytes32"},{"internalType":"address","name":"deployer","type":"address"}],"stateMutability":"pure","type":"function","name":"computeCreate2Address","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"deployer","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"}],"stateMutability":"pure","type":"function","name":"computeCreateAddress","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"string","name":"subject","type":"string"},{"internalType":"string","name":"search","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"contains","outputs":[{"internalType":"bool","name":"result","type":"bool"}]},{"inputs":[{"internalType":"string","name":"from","type":"string"},{"internalType":"string","name":"to","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"copyFile","outputs":[{"internalType":"uint64","name":"copied","type":"uint64"}]},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"copyStorage"},{"inputs":[{"internalType":"string","name":"path","type":"string"},{"internalType":"bool","name":"recursive","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"createDir"},{"inputs":[{"internalType":"string","name":"walletLabel","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"createWallet","outputs":[{"internalType":"struct VmSafe.Wallet","name":"wallet","type":"tuple","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"publicKeyX","type":"uint256"},{"internalType":"uint256","name":"publicKeyY","type":"uint256"},{"internalType":"uint256","name":"privateKey","type":"uint256"}]}]},{"inputs":[{"internalType":"uint256","name":"privateKey","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"createWallet","outputs":[{"internalType":"struct VmSafe.Wallet","name":"wallet","type":"tuple","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"publicKeyX","type":"uint256"},{"internalType":"uint256","name":"publicKeyY","type":"uint256"},{"internalType":"uint256","name":"privateKey","type":"uint256"}]}]},{"inputs":[{"internalType":"uint256","name":"privateKey","type":"uint256"},{"internalType":"string","name":"walletLabel","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"createWallet","outputs":[{"internalType":"struct VmSafe.Wallet","name":"wallet","type":"tuple","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"publicKeyX","type":"uint256"},{"internalType":"uint256","name":"publicKeyY","type":"uint256"},{"internalType":"uint256","name":"privateKey","type":"uint256"}]}]},{"inputs":[{"internalType":"string","name":"artifactPath","type":"string"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"deployCode","outputs":[{"internalType":"address","name":"deployedAddress","type":"address"}]},{"inputs":[{"internalType":"string","name":"artifactPath","type":"string"},{"internalType":"bytes","name":"constructorArgs","type":"bytes"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"deployCode","outputs":[{"internalType":"address","name":"deployedAddress","type":"address"}]},{"inputs":[{"internalType":"string","name":"artifactPath","type":"string"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"deployCode","outputs":[{"internalType":"address","name":"deployedAddress","type":"address"}]},{"inputs":[{"internalType":"string","name":"artifactPath","type":"string"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"deployCode","outputs":[{"internalType":"address","name":"deployedAddress","type":"address"}]},{"inputs":[{"internalType":"string","name":"artifactPath","type":"string"},{"internalType":"bytes","name":"constructorArgs","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"deployCode","outputs":[{"internalType":"address","name":"deployedAddress","type":"address"}]},{"inputs":[{"internalType":"string","name":"artifactPath","type":"string"},{"internalType":"bytes","name":"constructorArgs","type":"bytes"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"deployCode","outputs":[{"internalType":"address","name":"deployedAddress","type":"address"}]},{"inputs":[{"internalType":"string","name":"artifactPath","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"deployCode","outputs":[{"internalType":"address","name":"deployedAddress","type":"address"}]},{"inputs":[{"internalType":"string","name":"artifactPath","type":"string"},{"internalType":"bytes","name":"constructorArgs","type":"bytes"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"deployCode","outputs":[{"internalType":"address","name":"deployedAddress","type":"address"}]},{"inputs":[{"internalType":"string","name":"mnemonic","type":"string"},{"internalType":"string","name":"derivationPath","type":"string"},{"internalType":"uint32","name":"index","type":"uint32"},{"internalType":"string","name":"language","type":"string"}],"stateMutability":"pure","type":"function","name":"deriveKey","outputs":[{"internalType":"uint256","name":"privateKey","type":"uint256"}]},{"inputs":[{"internalType":"string","name":"mnemonic","type":"string"},{"internalType":"uint32","name":"index","type":"uint32"},{"internalType":"string","name":"language","type":"string"}],"stateMutability":"pure","type":"function","name":"deriveKey","outputs":[{"internalType":"uint256","name":"privateKey","type":"uint256"}]},{"inputs":[{"internalType":"string","name":"mnemonic","type":"string"},{"internalType":"uint32","name":"index","type":"uint32"}],"stateMutability":"pure","type":"function","name":"deriveKey","outputs":[{"internalType":"uint256","name":"privateKey","type":"uint256"}]},{"inputs":[{"internalType":"string","name":"mnemonic","type":"string"},{"internalType":"string","name":"derivationPath","type":"string"},{"internalType":"uint32","name":"index","type":"uint32"}],"stateMutability":"pure","type":"function","name":"deriveKey","outputs":[{"internalType":"uint256","name":"privateKey","type":"uint256"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"stateMutability":"pure","type":"function","name":"ensNamehash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"stateMutability":"view","type":"function","name":"envAddress","outputs":[{"internalType":"address","name":"value","type":"address"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"delim","type":"string"}],"stateMutability":"view","type":"function","name":"envAddress","outputs":[{"internalType":"address[]","name":"value","type":"address[]"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"stateMutability":"view","type":"function","name":"envBool","outputs":[{"internalType":"bool","name":"value","type":"bool"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"delim","type":"string"}],"stateMutability":"view","type":"function","name":"envBool","outputs":[{"internalType":"bool[]","name":"value","type":"bool[]"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"stateMutability":"view","type":"function","name":"envBytes","outputs":[{"internalType":"bytes","name":"value","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"delim","type":"string"}],"stateMutability":"view","type":"function","name":"envBytes","outputs":[{"internalType":"bytes[]","name":"value","type":"bytes[]"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"delim","type":"string"}],"stateMutability":"view","type":"function","name":"envBytes32","outputs":[{"internalType":"bytes32[]","name":"value","type":"bytes32[]"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"stateMutability":"view","type":"function","name":"envBytes32","outputs":[{"internalType":"bytes32","name":"value","type":"bytes32"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"stateMutability":"view","type":"function","name":"envExists","outputs":[{"internalType":"bool","name":"result","type":"bool"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"delim","type":"string"}],"stateMutability":"view","type":"function","name":"envInt","outputs":[{"internalType":"int256[]","name":"value","type":"int256[]"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"stateMutability":"view","type":"function","name":"envInt","outputs":[{"internalType":"int256","name":"value","type":"int256"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"delim","type":"string"},{"internalType":"bytes32[]","name":"defaultValue","type":"bytes32[]"}],"stateMutability":"view","type":"function","name":"envOr","outputs":[{"internalType":"bytes32[]","name":"value","type":"bytes32[]"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"delim","type":"string"},{"internalType":"int256[]","name":"defaultValue","type":"int256[]"}],"stateMutability":"view","type":"function","name":"envOr","outputs":[{"internalType":"int256[]","name":"value","type":"int256[]"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"bool","name":"defaultValue","type":"bool"}],"stateMutability":"view","type":"function","name":"envOr","outputs":[{"internalType":"bool","name":"value","type":"bool"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"address","name":"defaultValue","type":"address"}],"stateMutability":"view","type":"function","name":"envOr","outputs":[{"internalType":"address","name":"value","type":"address"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"defaultValue","type":"uint256"}],"stateMutability":"view","type":"function","name":"envOr","outputs":[{"internalType":"uint256","name":"value","type":"uint256"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"delim","type":"string"},{"internalType":"bytes[]","name":"defaultValue","type":"bytes[]"}],"stateMutability":"view","type":"function","name":"envOr","outputs":[{"internalType":"bytes[]","name":"value","type":"bytes[]"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"delim","type":"string"},{"internalType":"uint256[]","name":"defaultValue","type":"uint256[]"}],"stateMutability":"view","type":"function","name":"envOr","outputs":[{"internalType":"uint256[]","name":"value","type":"uint256[]"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"delim","type":"string"},{"internalType":"string[]","name":"defaultValue","type":"string[]"}],"stateMutability":"view","type":"function","name":"envOr","outputs":[{"internalType":"string[]","name":"value","type":"string[]"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"bytes","name":"defaultValue","type":"bytes"}],"stateMutability":"view","type":"function","name":"envOr","outputs":[{"internalType":"bytes","name":"value","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"bytes32","name":"defaultValue","type":"bytes32"}],"stateMutability":"view","type":"function","name":"envOr","outputs":[{"internalType":"bytes32","name":"value","type":"bytes32"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"int256","name":"defaultValue","type":"int256"}],"stateMutability":"view","type":"function","name":"envOr","outputs":[{"internalType":"int256","name":"value","type":"int256"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"delim","type":"string"},{"internalType":"address[]","name":"defaultValue","type":"address[]"}],"stateMutability":"view","type":"function","name":"envOr","outputs":[{"internalType":"address[]","name":"value","type":"address[]"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"defaultValue","type":"string"}],"stateMutability":"view","type":"function","name":"envOr","outputs":[{"internalType":"string","name":"value","type":"string"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"delim","type":"string"},{"internalType":"bool[]","name":"defaultValue","type":"bool[]"}],"stateMutability":"view","type":"function","name":"envOr","outputs":[{"internalType":"bool[]","name":"value","type":"bool[]"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"delim","type":"string"}],"stateMutability":"view","type":"function","name":"envString","outputs":[{"internalType":"string[]","name":"value","type":"string[]"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"stateMutability":"view","type":"function","name":"envString","outputs":[{"internalType":"string","name":"value","type":"string"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"}],"stateMutability":"view","type":"function","name":"envUint","outputs":[{"internalType":"uint256","name":"value","type":"uint256"}]},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"delim","type":"string"}],"stateMutability":"view","type":"function","name":"envUint","outputs":[{"internalType":"uint256[]","name":"value","type":"uint256[]"}]},{"inputs":[{"internalType":"uint256","name":"fromBlock","type":"uint256"},{"internalType":"uint256","name":"toBlock","type":"uint256"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes32[]","name":"topics","type":"bytes32[]"}],"stateMutability":"nonpayable","type":"function","name":"eth_getLogs","outputs":[{"internalType":"struct VmSafe.EthGetLogs[]","name":"logs","type":"tuple[]","components":[{"internalType":"address","name":"emitter","type":"address"},{"internalType":"bytes32[]","name":"topics","type":"bytes32[]"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes32","name":"blockHash","type":"bytes32"},{"internalType":"uint64","name":"blockNumber","type":"uint64"},{"internalType":"bytes32","name":"transactionHash","type":"bytes32"},{"internalType":"uint64","name":"transactionIndex","type":"uint64"},{"internalType":"uint256","name":"logIndex","type":"uint256"},{"internalType":"bool","name":"removed","type":"bool"}]}]},{"inputs":[{"internalType":"string","name":"path","type":"string"}],"stateMutability":"view","type":"function","name":"exists","outputs":[{"internalType":"bool","name":"result","type":"bool"}]},{"inputs":[{"internalType":"string[]","name":"commandInput","type":"string[]"}],"stateMutability":"nonpayable","type":"function","name":"ffi","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"version","type":"string"}],"stateMutability":"view","type":"function","name":"foundryVersionAtLeast","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"string","name":"version","type":"string"}],"stateMutability":"view","type":"function","name":"foundryVersionCmp","outputs":[{"internalType":"int256","name":"","type":"int256"}]},{"inputs":[{"internalType":"string","name":"path","type":"string"}],"stateMutability":"view","type":"function","name":"fsMetadata","outputs":[{"internalType":"struct VmSafe.FsMetadata","name":"metadata","type":"tuple","components":[{"internalType":"bool","name":"isDir","type":"bool"},{"internalType":"bool","name":"isSymlink","type":"bool"},{"internalType":"uint256","name":"length","type":"uint256"},{"internalType":"bool","name":"readOnly","type":"bool"},{"internalType":"uint256","name":"modified","type":"uint256"},{"internalType":"uint256","name":"accessed","type":"uint256"},{"internalType":"uint256","name":"created","type":"uint256"}]}]},{"inputs":[{"internalType":"bytes","name":"code","type":"bytes"}],"stateMutability":"view","type":"function","name":"getArtifactPathByCode","outputs":[{"internalType":"string","name":"path","type":"string"}]},{"inputs":[{"internalType":"bytes","name":"deployedCode","type":"bytes"}],"stateMutability":"view","type":"function","name":"getArtifactPathByDeployedCode","outputs":[{"internalType":"string","name":"path","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getBlobBaseFee","outputs":[{"internalType":"uint256","name":"blobBaseFee","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getBlockNumber","outputs":[{"internalType":"uint256","name":"height","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getBlockTimestamp","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}]},{"inputs":[{"internalType":"string","name":"contractName","type":"string"},{"internalType":"uint64","name":"chainId","type":"uint64"},{"internalType":"enum VmSafe.BroadcastTxType","name":"txType","type":"uint8"}],"stateMutability":"view","type":"function","name":"getBroadcast","outputs":[{"internalType":"struct VmSafe.BroadcastTxSummary","name":"","type":"tuple","components":[{"internalType":"bytes32","name":"txHash","type":"bytes32"},{"internalType":"enum VmSafe.BroadcastTxType","name":"txType","type":"uint8"},{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint64","name":"blockNumber","type":"uint64"},{"internalType":"bool","name":"success","type":"bool"}]}]},{"inputs":[{"internalType":"string","name":"contractName","type":"string"},{"internalType":"uint64","name":"chainId","type":"uint64"}],"stateMutability":"view","type":"function","name":"getBroadcasts","outputs":[{"internalType":"struct VmSafe.BroadcastTxSummary[]","name":"","type":"tuple[]","components":[{"internalType":"bytes32","name":"txHash","type":"bytes32"},{"internalType":"enum VmSafe.BroadcastTxType","name":"txType","type":"uint8"},{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint64","name":"blockNumber","type":"uint64"},{"internalType":"bool","name":"success","type":"bool"}]}]},{"inputs":[{"internalType":"string","name":"contractName","type":"string"},{"internalType":"uint64","name":"chainId","type":"uint64"},{"internalType":"enum VmSafe.BroadcastTxType","name":"txType","type":"uint8"}],"stateMutability":"view","type":"function","name":"getBroadcasts","outputs":[{"internalType":"struct VmSafe.BroadcastTxSummary[]","name":"","type":"tuple[]","components":[{"internalType":"bytes32","name":"txHash","type":"bytes32"},{"internalType":"enum VmSafe.BroadcastTxType","name":"txType","type":"uint8"},{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"uint64","name":"blockNumber","type":"uint64"},{"internalType":"bool","name":"success","type":"bool"}]}]},{"inputs":[{"internalType":"string","name":"chainAlias","type":"string"}],"stateMutability":"view","type":"function","name":"getChain","outputs":[{"internalType":"struct VmSafe.Chain","name":"chain","type":"tuple","components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"string","name":"chainAlias","type":"string"},{"internalType":"string","name":"rpcUrl","type":"string"}]}]},{"inputs":[{"internalType":"uint256","name":"chainId","type":"uint256"}],"stateMutability":"view","type":"function","name":"getChain","outputs":[{"internalType":"struct VmSafe.Chain","name":"chain","type":"tuple","components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"string","name":"chainAlias","type":"string"},{"internalType":"string","name":"rpcUrl","type":"string"}]}]},{"inputs":[{"internalType":"string","name":"artifactPath","type":"string"}],"stateMutability":"view","type":"function","name":"getCode","outputs":[{"internalType":"bytes","name":"creationBytecode","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"artifactPath","type":"string"}],"stateMutability":"view","type":"function","name":"getDeployedCode","outputs":[{"internalType":"bytes","name":"runtimeBytecode","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"contractName","type":"string"},{"internalType":"uint64","name":"chainId","type":"uint64"}],"stateMutability":"view","type":"function","name":"getDeployment","outputs":[{"internalType":"address","name":"deployedAddress","type":"address"}]},{"inputs":[{"internalType":"string","name":"contractName","type":"string"}],"stateMutability":"view","type":"function","name":"getDeployment","outputs":[{"internalType":"address","name":"deployedAddress","type":"address"}]},{"inputs":[{"internalType":"string","name":"contractName","type":"string"},{"internalType":"uint64","name":"chainId","type":"uint64"}],"stateMutability":"view","type":"function","name":"getDeployments","outputs":[{"internalType":"address[]","name":"deployedAddresses","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getFoundryVersion","outputs":[{"internalType":"string","name":"version","type":"string"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"getLabel","outputs":[{"internalType":"string","name":"currentLabel","type":"string"}]},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes32","name":"elementSlot","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"getMappingKeyAndParentOf","outputs":[{"internalType":"bool","name":"found","type":"bool"},{"internalType":"bytes32","name":"key","type":"bytes32"},{"internalType":"bytes32","name":"parent","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes32","name":"mappingSlot","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"getMappingLength","outputs":[{"internalType":"uint256","name":"length","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes32","name":"mappingSlot","type":"bytes32"},{"internalType":"uint256","name":"idx","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"getMappingSlotAt","outputs":[{"internalType":"bytes32","name":"value","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"getNonce","outputs":[{"internalType":"uint64","name":"nonce","type":"uint64"}]},{"inputs":[{"internalType":"struct VmSafe.Wallet","name":"wallet","type":"tuple","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"publicKeyX","type":"uint256"},{"internalType":"uint256","name":"publicKeyY","type":"uint256"},{"internalType":"uint256","name":"privateKey","type":"uint256"}]}],"stateMutability":"nonpayable","type":"function","name":"getNonce","outputs":[{"internalType":"uint64","name":"nonce","type":"uint64"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"getRecordedLogs","outputs":[{"internalType":"struct VmSafe.Log[]","name":"logs","type":"tuple[]","components":[{"internalType":"bytes32[]","name":"topics","type":"bytes32[]"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"address","name":"emitter","type":"address"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getStateDiff","outputs":[{"internalType":"string","name":"diff","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getStateDiffJson","outputs":[{"internalType":"string","name":"diff","type":"string"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"getWallets","outputs":[{"internalType":"address[]","name":"wallets","type":"address[]"}]},{"inputs":[{"internalType":"string","name":"input","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"indexOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"enum VmSafe.ForgeContext","name":"context","type":"uint8"}],"stateMutability":"view","type":"function","name":"isContext","outputs":[{"internalType":"bool","name":"result","type":"bool"}]},{"inputs":[{"internalType":"string","name":"path","type":"string"}],"stateMutability":"view","type":"function","name":"isDir","outputs":[{"internalType":"bool","name":"result","type":"bool"}]},{"inputs":[{"internalType":"string","name":"path","type":"string"}],"stateMutability":"view","type":"function","name":"isFile","outputs":[{"internalType":"bool","name":"result","type":"bool"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"view","type":"function","name":"keyExists","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"view","type":"function","name":"keyExistsJson","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"view","type":"function","name":"keyExistsToml","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"string","name":"newLabel","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"label"},{"inputs":[],"stateMutability":"view","type":"function","name":"lastCallGas","outputs":[{"internalType":"struct VmSafe.Gas","name":"gas","type":"tuple","components":[{"internalType":"uint64","name":"gasLimit","type":"uint64"},{"internalType":"uint64","name":"gasTotalUsed","type":"uint64"},{"internalType":"uint64","name":"gasMemoryUsed","type":"uint64"},{"internalType":"int64","name":"gasRefunded","type":"int64"},{"internalType":"uint64","name":"gasRemaining","type":"uint64"}]}]},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes32","name":"slot","type":"bytes32"}],"stateMutability":"view","type":"function","name":"load","outputs":[{"internalType":"bytes32","name":"data","type":"bytes32"}]},{"inputs":[{"internalType":"string","name":"stringifiedValue","type":"string"}],"stateMutability":"pure","type":"function","name":"parseAddress","outputs":[{"internalType":"address","name":"parsedValue","type":"address"}]},{"inputs":[{"internalType":"string","name":"stringifiedValue","type":"string"}],"stateMutability":"pure","type":"function","name":"parseBool","outputs":[{"internalType":"bool","name":"parsedValue","type":"bool"}]},{"inputs":[{"internalType":"string","name":"stringifiedValue","type":"string"}],"stateMutability":"pure","type":"function","name":"parseBytes","outputs":[{"internalType":"bytes","name":"parsedValue","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"stringifiedValue","type":"string"}],"stateMutability":"pure","type":"function","name":"parseBytes32","outputs":[{"internalType":"bytes32","name":"parsedValue","type":"bytes32"}]},{"inputs":[{"internalType":"string","name":"stringifiedValue","type":"string"}],"stateMutability":"pure","type":"function","name":"parseInt","outputs":[{"internalType":"int256","name":"parsedValue","type":"int256"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"}],"stateMutability":"pure","type":"function","name":"parseJson","outputs":[{"internalType":"bytes","name":"abiEncodedData","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseJson","outputs":[{"internalType":"bytes","name":"abiEncodedData","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseJsonAddress","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseJsonAddressArray","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseJsonBool","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseJsonBoolArray","outputs":[{"internalType":"bool[]","name":"","type":"bool[]"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseJsonBytes","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseJsonBytes32","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseJsonBytes32Array","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseJsonBytesArray","outputs":[{"internalType":"bytes[]","name":"","type":"bytes[]"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseJsonInt","outputs":[{"internalType":"int256","name":"","type":"int256"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseJsonIntArray","outputs":[{"internalType":"int256[]","name":"","type":"int256[]"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseJsonKeys","outputs":[{"internalType":"string[]","name":"keys","type":"string[]"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseJsonString","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseJsonStringArray","outputs":[{"internalType":"string[]","name":"","type":"string[]"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"typeDescription","type":"string"}],"stateMutability":"pure","type":"function","name":"parseJsonType","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"key","type":"string"},{"internalType":"string","name":"typeDescription","type":"string"}],"stateMutability":"pure","type":"function","name":"parseJsonType","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"key","type":"string"},{"internalType":"string","name":"typeDescription","type":"string"}],"stateMutability":"pure","type":"function","name":"parseJsonTypeArray","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseJsonUint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseJsonUintArray","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseToml","outputs":[{"internalType":"bytes","name":"abiEncodedData","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"}],"stateMutability":"pure","type":"function","name":"parseToml","outputs":[{"internalType":"bytes","name":"abiEncodedData","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseTomlAddress","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseTomlAddressArray","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseTomlBool","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseTomlBoolArray","outputs":[{"internalType":"bool[]","name":"","type":"bool[]"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseTomlBytes","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseTomlBytes32","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseTomlBytes32Array","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseTomlBytesArray","outputs":[{"internalType":"bytes[]","name":"","type":"bytes[]"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseTomlInt","outputs":[{"internalType":"int256","name":"","type":"int256"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseTomlIntArray","outputs":[{"internalType":"int256[]","name":"","type":"int256[]"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseTomlKeys","outputs":[{"internalType":"string[]","name":"keys","type":"string[]"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseTomlString","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseTomlStringArray","outputs":[{"internalType":"string[]","name":"","type":"string[]"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"},{"internalType":"string","name":"typeDescription","type":"string"}],"stateMutability":"pure","type":"function","name":"parseTomlType","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"},{"internalType":"string","name":"key","type":"string"},{"internalType":"string","name":"typeDescription","type":"string"}],"stateMutability":"pure","type":"function","name":"parseTomlType","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"},{"internalType":"string","name":"key","type":"string"},{"internalType":"string","name":"typeDescription","type":"string"}],"stateMutability":"pure","type":"function","name":"parseTomlTypeArray","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseTomlUint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"string","name":"toml","type":"string"},{"internalType":"string","name":"key","type":"string"}],"stateMutability":"pure","type":"function","name":"parseTomlUintArray","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}]},{"inputs":[{"internalType":"string","name":"stringifiedValue","type":"string"}],"stateMutability":"pure","type":"function","name":"parseUint","outputs":[{"internalType":"uint256","name":"parsedValue","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"pauseGasMetering"},{"inputs":[],"stateMutability":"view","type":"function","name":"pauseTracing"},{"inputs":[],"stateMutability":"view","type":"function","name":"projectRoot","outputs":[{"internalType":"string","name":"path","type":"string"}]},{"inputs":[{"internalType":"string","name":"promptText","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"prompt","outputs":[{"internalType":"string","name":"input","type":"string"}]},{"inputs":[{"internalType":"string","name":"promptText","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"promptAddress","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"string","name":"promptText","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"promptSecret","outputs":[{"internalType":"string","name":"input","type":"string"}]},{"inputs":[{"internalType":"string","name":"promptText","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"promptSecretUint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"string","name":"promptText","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"promptUint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"privateKey","type":"uint256"}],"stateMutability":"pure","type":"function","name":"publicKeyP256","outputs":[{"internalType":"uint256","name":"publicKeyX","type":"uint256"},{"internalType":"uint256","name":"publicKeyY","type":"uint256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"randomAddress","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"randomBool","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"len","type":"uint256"}],"stateMutability":"view","type":"function","name":"randomBytes","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"randomBytes4","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"randomBytes8","outputs":[{"internalType":"bytes8","name":"","type":"bytes8"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"randomInt","outputs":[{"internalType":"int256","name":"","type":"int256"}]},{"inputs":[{"internalType":"uint256","name":"bits","type":"uint256"}],"stateMutability":"view","type":"function","name":"randomInt","outputs":[{"internalType":"int256","name":"","type":"int256"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"randomUint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"bits","type":"uint256"}],"stateMutability":"view","type":"function","name":"randomUint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"min","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"randomUint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"string","name":"path","type":"string"},{"internalType":"uint64","name":"maxDepth","type":"uint64"}],"stateMutability":"view","type":"function","name":"readDir","outputs":[{"internalType":"struct VmSafe.DirEntry[]","name":"entries","type":"tuple[]","components":[{"internalType":"string","name":"errorMessage","type":"string"},{"internalType":"string","name":"path","type":"string"},{"internalType":"uint64","name":"depth","type":"uint64"},{"internalType":"bool","name":"isDir","type":"bool"},{"internalType":"bool","name":"isSymlink","type":"bool"}]}]},{"inputs":[{"internalType":"string","name":"path","type":"string"},{"internalType":"uint64","name":"maxDepth","type":"uint64"},{"internalType":"bool","name":"followLinks","type":"bool"}],"stateMutability":"view","type":"function","name":"readDir","outputs":[{"internalType":"struct VmSafe.DirEntry[]","name":"entries","type":"tuple[]","components":[{"internalType":"string","name":"errorMessage","type":"string"},{"internalType":"string","name":"path","type":"string"},{"internalType":"uint64","name":"depth","type":"uint64"},{"internalType":"bool","name":"isDir","type":"bool"},{"internalType":"bool","name":"isSymlink","type":"bool"}]}]},{"inputs":[{"internalType":"string","name":"path","type":"string"}],"stateMutability":"view","type":"function","name":"readDir","outputs":[{"internalType":"struct VmSafe.DirEntry[]","name":"entries","type":"tuple[]","components":[{"internalType":"string","name":"errorMessage","type":"string"},{"internalType":"string","name":"path","type":"string"},{"internalType":"uint64","name":"depth","type":"uint64"},{"internalType":"bool","name":"isDir","type":"bool"},{"internalType":"bool","name":"isSymlink","type":"bool"}]}]},{"inputs":[{"internalType":"string","name":"path","type":"string"}],"stateMutability":"view","type":"function","name":"readFile","outputs":[{"internalType":"string","name":"data","type":"string"}]},{"inputs":[{"internalType":"string","name":"path","type":"string"}],"stateMutability":"view","type":"function","name":"readFileBinary","outputs":[{"internalType":"bytes","name":"data","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"path","type":"string"}],"stateMutability":"view","type":"function","name":"readLine","outputs":[{"internalType":"string","name":"line","type":"string"}]},{"inputs":[{"internalType":"string","name":"linkPath","type":"string"}],"stateMutability":"view","type":"function","name":"readLink","outputs":[{"internalType":"string","name":"targetPath","type":"string"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"record"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"recordLogs"},{"inputs":[{"internalType":"uint256","name":"privateKey","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"rememberKey","outputs":[{"internalType":"address","name":"keyAddr","type":"address"}]},{"inputs":[{"internalType":"string","name":"mnemonic","type":"string"},{"internalType":"string","name":"derivationPath","type":"string"},{"internalType":"uint32","name":"count","type":"uint32"}],"stateMutability":"nonpayable","type":"function","name":"rememberKeys","outputs":[{"internalType":"address[]","name":"keyAddrs","type":"address[]"}]},{"inputs":[{"internalType":"string","name":"mnemonic","type":"string"},{"internalType":"string","name":"derivationPath","type":"string"},{"internalType":"string","name":"language","type":"string"},{"internalType":"uint32","name":"count","type":"uint32"}],"stateMutability":"nonpayable","type":"function","name":"rememberKeys","outputs":[{"internalType":"address[]","name":"keyAddrs","type":"address[]"}]},{"inputs":[{"internalType":"string","name":"path","type":"string"},{"internalType":"bool","name":"recursive","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"removeDir"},{"inputs":[{"internalType":"string","name":"path","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"removeFile"},{"inputs":[{"internalType":"string","name":"input","type":"string"},{"internalType":"string","name":"from","type":"string"},{"internalType":"string","name":"to","type":"string"}],"stateMutability":"pure","type":"function","name":"replace","outputs":[{"internalType":"string","name":"output","type":"string"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"resetGasMetering"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"resumeGasMetering"},{"inputs":[],"stateMutability":"view","type":"function","name":"resumeTracing"},{"inputs":[{"internalType":"string","name":"urlOrAlias","type":"string"},{"internalType":"string","name":"method","type":"string"},{"internalType":"string","name":"params","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"rpc","outputs":[{"internalType":"bytes","name":"data","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"method","type":"string"},{"internalType":"string","name":"params","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"rpc","outputs":[{"internalType":"bytes","name":"data","type":"bytes"}]},{"inputs":[{"internalType":"string","name":"rpcAlias","type":"string"}],"stateMutability":"view","type":"function","name":"rpcUrl","outputs":[{"internalType":"string","name":"json","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"rpcUrlStructs","outputs":[{"internalType":"struct VmSafe.Rpc[]","name":"urls","type":"tuple[]","components":[{"internalType":"string","name":"key","type":"string"},{"internalType":"string","name":"url","type":"string"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"rpcUrls","outputs":[{"internalType":"string[2][]","name":"urls","type":"string[2][]"}]},{"inputs":[{"internalType":"string","name":"objectKey","type":"string"},{"internalType":"string","name":"valueKey","type":"string"},{"internalType":"address[]","name":"values","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"serializeAddress","outputs":[{"internalType":"string","name":"json","type":"string"}]},{"inputs":[{"internalType":"string","name":"objectKey","type":"string"},{"internalType":"string","name":"valueKey","type":"string"},{"internalType":"address","name":"value","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"serializeAddress","outputs":[{"internalType":"string","name":"json","type":"string"}]},{"inputs":[{"internalType":"string","name":"objectKey","type":"string"},{"internalType":"string","name":"valueKey","type":"string"},{"internalType":"bool[]","name":"values","type":"bool[]"}],"stateMutability":"nonpayable","type":"function","name":"serializeBool","outputs":[{"internalType":"string","name":"json","type":"string"}]},{"inputs":[{"internalType":"string","name":"objectKey","type":"string"},{"internalType":"string","name":"valueKey","type":"string"},{"internalType":"bool","name":"value","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"serializeBool","outputs":[{"internalType":"string","name":"json","type":"string"}]},{"inputs":[{"internalType":"string","name":"objectKey","type":"string"},{"internalType":"string","name":"valueKey","type":"string"},{"internalType":"bytes[]","name":"values","type":"bytes[]"}],"stateMutability":"nonpayable","type":"function","name":"serializeBytes","outputs":[{"internalType":"string","name":"json","type":"string"}]},{"inputs":[{"internalType":"string","name":"objectKey","type":"string"},{"internalType":"string","name":"valueKey","type":"string"},{"internalType":"bytes","name":"value","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"serializeBytes","outputs":[{"internalType":"string","name":"json","type":"string"}]},{"inputs":[{"internalType":"string","name":"objectKey","type":"string"},{"internalType":"string","name":"valueKey","type":"string"},{"internalType":"bytes32[]","name":"values","type":"bytes32[]"}],"stateMutability":"nonpayable","type":"function","name":"serializeBytes32","outputs":[{"internalType":"string","name":"json","type":"string"}]},{"inputs":[{"internalType":"string","name":"objectKey","type":"string"},{"internalType":"string","name":"valueKey","type":"string"},{"internalType":"bytes32","name":"value","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"serializeBytes32","outputs":[{"internalType":"string","name":"json","type":"string"}]},{"inputs":[{"internalType":"string","name":"objectKey","type":"string"},{"internalType":"string","name":"valueKey","type":"string"},{"internalType":"int256","name":"value","type":"int256"}],"stateMutability":"nonpayable","type":"function","name":"serializeInt","outputs":[{"internalType":"string","name":"json","type":"string"}]},{"inputs":[{"internalType":"string","name":"objectKey","type":"string"},{"internalType":"string","name":"valueKey","type":"string"},{"internalType":"int256[]","name":"values","type":"int256[]"}],"stateMutability":"nonpayable","type":"function","name":"serializeInt","outputs":[{"internalType":"string","name":"json","type":"string"}]},{"inputs":[{"internalType":"string","name":"objectKey","type":"string"},{"internalType":"string","name":"value","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"serializeJson","outputs":[{"internalType":"string","name":"json","type":"string"}]},{"inputs":[{"internalType":"string","name":"typeDescription","type":"string"},{"internalType":"bytes","name":"value","type":"bytes"}],"stateMutability":"pure","type":"function","name":"serializeJsonType","outputs":[{"internalType":"string","name":"json","type":"string"}]},{"inputs":[{"internalType":"string","name":"objectKey","type":"string"},{"internalType":"string","name":"valueKey","type":"string"},{"internalType":"string","name":"typeDescription","type":"string"},{"internalType":"bytes","name":"value","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"serializeJsonType","outputs":[{"internalType":"string","name":"json","type":"string"}]},{"inputs":[{"internalType":"string","name":"objectKey","type":"string"},{"internalType":"string","name":"valueKey","type":"string"},{"internalType":"string[]","name":"values","type":"string[]"}],"stateMutability":"nonpayable","type":"function","name":"serializeString","outputs":[{"internalType":"string","name":"json","type":"string"}]},{"inputs":[{"internalType":"string","name":"objectKey","type":"string"},{"internalType":"string","name":"valueKey","type":"string"},{"internalType":"string","name":"value","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"serializeString","outputs":[{"internalType":"string","name":"json","type":"string"}]},{"inputs":[{"internalType":"string","name":"objectKey","type":"string"},{"internalType":"string","name":"valueKey","type":"string"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"serializeUint","outputs":[{"internalType":"string","name":"json","type":"string"}]},{"inputs":[{"internalType":"string","name":"objectKey","type":"string"},{"internalType":"string","name":"valueKey","type":"string"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function","name":"serializeUint","outputs":[{"internalType":"string","name":"json","type":"string"}]},{"inputs":[{"internalType":"string","name":"objectKey","type":"string"},{"internalType":"string","name":"valueKey","type":"string"},{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"serializeUintToHex","outputs":[{"internalType":"string","name":"json","type":"string"}]},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"overwrite","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"setArbitraryStorage"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setArbitraryStorage"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"value","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"setEnv"},{"inputs":[{"internalType":"uint256[]","name":"array","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function","name":"shuffle","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}]},{"inputs":[{"internalType":"bytes32","name":"digest","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"sign","outputs":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"bytes32","name":"digest","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"sign","outputs":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}]},{"inputs":[{"internalType":"struct VmSafe.Wallet","name":"wallet","type":"tuple","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"publicKeyX","type":"uint256"},{"internalType":"uint256","name":"publicKeyY","type":"uint256"},{"internalType":"uint256","name":"privateKey","type":"uint256"}]},{"internalType":"bytes32","name":"digest","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"sign","outputs":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}]},{"inputs":[{"internalType":"uint256","name":"privateKey","type":"uint256"},{"internalType":"bytes32","name":"digest","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"sign","outputs":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"implementation","type":"address"},{"internalType":"uint256","name":"privateKey","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"signAndAttachDelegation","outputs":[{"internalType":"struct VmSafe.SignedDelegation","name":"signedDelegation","type":"tuple","components":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"},{"internalType":"address","name":"implementation","type":"address"}]}]},{"inputs":[{"internalType":"address","name":"implementation","type":"address"},{"internalType":"uint256","name":"privateKey","type":"uint256"},{"internalType":"uint64","name":"nonce","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"signAndAttachDelegation","outputs":[{"internalType":"struct VmSafe.SignedDelegation","name":"signedDelegation","type":"tuple","components":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"},{"internalType":"address","name":"implementation","type":"address"}]}]},{"inputs":[{"internalType":"struct VmSafe.Wallet","name":"wallet","type":"tuple","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"publicKeyX","type":"uint256"},{"internalType":"uint256","name":"publicKeyY","type":"uint256"},{"internalType":"uint256","name":"privateKey","type":"uint256"}]},{"internalType":"bytes32","name":"digest","type":"bytes32"}],"stateMutability":"nonpayable","type":"function","name":"signCompact","outputs":[{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"vs","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"bytes32","name":"digest","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"signCompact","outputs":[{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"vs","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"digest","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"signCompact","outputs":[{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"vs","type":"bytes32"}]},{"inputs":[{"internalType":"uint256","name":"privateKey","type":"uint256"},{"internalType":"bytes32","name":"digest","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"signCompact","outputs":[{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"vs","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"implementation","type":"address"},{"internalType":"uint256","name":"privateKey","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"signDelegation","outputs":[{"internalType":"struct VmSafe.SignedDelegation","name":"signedDelegation","type":"tuple","components":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"},{"internalType":"address","name":"implementation","type":"address"}]}]},{"inputs":[{"internalType":"address","name":"implementation","type":"address"},{"internalType":"uint256","name":"privateKey","type":"uint256"},{"internalType":"uint64","name":"nonce","type":"uint64"}],"stateMutability":"nonpayable","type":"function","name":"signDelegation","outputs":[{"internalType":"struct VmSafe.SignedDelegation","name":"signedDelegation","type":"tuple","components":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint64","name":"nonce","type":"uint64"},{"internalType":"address","name":"implementation","type":"address"}]}]},{"inputs":[{"internalType":"uint256","name":"privateKey","type":"uint256"},{"internalType":"bytes32","name":"digest","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"signP256","outputs":[{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}]},{"inputs":[{"internalType":"uint256","name":"duration","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"sleep"},{"inputs":[{"internalType":"uint256[]","name":"array","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function","name":"sort","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}]},{"inputs":[{"internalType":"string","name":"input","type":"string"},{"internalType":"string","name":"delimiter","type":"string"}],"stateMutability":"pure","type":"function","name":"split","outputs":[{"internalType":"string[]","name":"outputs","type":"string[]"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"startBroadcast"},{"inputs":[{"internalType":"address","name":"signer","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"startBroadcast"},{"inputs":[{"internalType":"uint256","name":"privateKey","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"startBroadcast"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"startDebugTraceRecording"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"startMappingRecording"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"startStateDiffRecording"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"stopAndReturnDebugTraceRecording","outputs":[{"internalType":"struct VmSafe.DebugStep[]","name":"step","type":"tuple[]","components":[{"internalType":"uint256[]","name":"stack","type":"uint256[]"},{"internalType":"bytes","name":"memoryInput","type":"bytes"},{"internalType":"uint8","name":"opcode","type":"uint8"},{"internalType":"uint64","name":"depth","type":"uint64"},{"internalType":"bool","name":"isOutOfGas","type":"bool"},{"internalType":"address","name":"contractAddr","type":"address"}]}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"stopAndReturnStateDiff","outputs":[{"internalType":"struct VmSafe.AccountAccess[]","name":"accountAccesses","type":"tuple[]","components":[{"internalType":"struct VmSafe.ChainInfo","name":"chainInfo","type":"tuple","components":[{"internalType":"uint256","name":"forkId","type":"uint256"},{"internalType":"uint256","name":"chainId","type":"uint256"}]},{"internalType":"enum VmSafe.AccountAccessKind","name":"kind","type":"uint8"},{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"accessor","type":"address"},{"internalType":"bool","name":"initialized","type":"bool"},{"internalType":"uint256","name":"oldBalance","type":"uint256"},{"internalType":"uint256","name":"newBalance","type":"uint256"},{"internalType":"bytes","name":"deployedCode","type":"bytes"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bool","name":"reverted","type":"bool"},{"internalType":"struct VmSafe.StorageAccess[]","name":"storageAccesses","type":"tuple[]","components":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"slot","type":"bytes32"},{"internalType":"bool","name":"isWrite","type":"bool"},{"internalType":"bytes32","name":"previousValue","type":"bytes32"},{"internalType":"bytes32","name":"newValue","type":"bytes32"},{"internalType":"bool","name":"reverted","type":"bool"}]},{"internalType":"uint64","name":"depth","type":"uint64"}]}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"stopBroadcast"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"stopMappingRecording"},{"inputs":[{"internalType":"string","name":"data","type":"string"}],"stateMutability":"pure","type":"function","name":"toBase64","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"pure","type":"function","name":"toBase64","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"string","name":"data","type":"string"}],"stateMutability":"pure","type":"function","name":"toBase64URL","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"pure","type":"function","name":"toBase64URL","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[{"internalType":"string","name":"input","type":"string"}],"stateMutability":"pure","type":"function","name":"toLowercase","outputs":[{"internalType":"string","name":"output","type":"string"}]},{"inputs":[{"internalType":"address","name":"value","type":"address"}],"stateMutability":"pure","type":"function","name":"toString","outputs":[{"internalType":"string","name":"stringifiedValue","type":"string"}]},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"pure","type":"function","name":"toString","outputs":[{"internalType":"string","name":"stringifiedValue","type":"string"}]},{"inputs":[{"internalType":"bytes","name":"value","type":"bytes"}],"stateMutability":"pure","type":"function","name":"toString","outputs":[{"internalType":"string","name":"stringifiedValue","type":"string"}]},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"stateMutability":"pure","type":"function","name":"toString","outputs":[{"internalType":"string","name":"stringifiedValue","type":"string"}]},{"inputs":[{"internalType":"int256","name":"value","type":"int256"}],"stateMutability":"pure","type":"function","name":"toString","outputs":[{"internalType":"string","name":"stringifiedValue","type":"string"}]},{"inputs":[{"internalType":"bytes32","name":"value","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"toString","outputs":[{"internalType":"string","name":"stringifiedValue","type":"string"}]},{"inputs":[{"internalType":"string","name":"input","type":"string"}],"stateMutability":"pure","type":"function","name":"toUppercase","outputs":[{"internalType":"string","name":"output","type":"string"}]},{"inputs":[{"internalType":"string","name":"input","type":"string"}],"stateMutability":"pure","type":"function","name":"trim","outputs":[{"internalType":"string","name":"output","type":"string"}]},{"inputs":[{"internalType":"string[]","name":"commandInput","type":"string[]"}],"stateMutability":"nonpayable","type":"function","name":"tryFfi","outputs":[{"internalType":"struct VmSafe.FfiResult","name":"result","type":"tuple","components":[{"internalType":"int32","name":"exitCode","type":"int32"},{"internalType":"bytes","name":"stdout","type":"bytes"},{"internalType":"bytes","name":"stderr","type":"bytes"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"unixTime","outputs":[{"internalType":"uint256","name":"milliseconds","type":"uint256"}]},{"inputs":[{"internalType":"string","name":"path","type":"string"},{"internalType":"string","name":"data","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"writeFile"},{"inputs":[{"internalType":"string","name":"path","type":"string"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"writeFileBinary"},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"path","type":"string"},{"internalType":"string","name":"valueKey","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"writeJson"},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"path","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"writeJson"},{"inputs":[{"internalType":"string","name":"path","type":"string"},{"internalType":"string","name":"data","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"writeLine"},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"path","type":"string"},{"internalType":"string","name":"valueKey","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"writeToml"},{"inputs":[{"internalType":"string","name":"json","type":"string"},{"internalType":"string","name":"path","type":"string"}],"stateMutability":"nonpayable","type":"function","name":"writeToml"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{"accesses(address)":{"notice":"Gets all accessed reads and write slot from a `vm.record` session, for a given address."},"addr(uint256)":{"notice":"Gets the address for a given private key."},"assertApproxEqAbs(int256,int256,uint256)":{"notice":"Compares two `int256` values. Expects difference to be less than or equal to `maxDelta`."},"assertApproxEqAbs(int256,int256,uint256,string)":{"notice":"Compares two `int256` values. Expects difference to be less than or equal to `maxDelta`. Includes error message into revert string on failure."},"assertApproxEqAbs(uint256,uint256,uint256)":{"notice":"Compares two `uint256` values. Expects difference to be less than or equal to `maxDelta`."},"assertApproxEqAbs(uint256,uint256,uint256,string)":{"notice":"Compares two `uint256` values. Expects difference to be less than or equal to `maxDelta`. Includes error message into revert string on failure."},"assertApproxEqAbsDecimal(int256,int256,uint256,uint256)":{"notice":"Compares two `int256` values. Expects difference to be less than or equal to `maxDelta`. Formats values with decimals in failure message."},"assertApproxEqAbsDecimal(int256,int256,uint256,uint256,string)":{"notice":"Compares two `int256` values. Expects difference to be less than or equal to `maxDelta`. Formats values with decimals in failure message. Includes error message into revert string on failure."},"assertApproxEqAbsDecimal(uint256,uint256,uint256,uint256)":{"notice":"Compares two `uint256` values. Expects difference to be less than or equal to `maxDelta`. Formats values with decimals in failure message."},"assertApproxEqAbsDecimal(uint256,uint256,uint256,uint256,string)":{"notice":"Compares two `uint256` values. Expects difference to be less than or equal to `maxDelta`. Formats values with decimals in failure message. Includes error message into revert string on failure."},"assertApproxEqRel(int256,int256,uint256)":{"notice":"Compares two `int256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`. `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100%"},"assertApproxEqRel(int256,int256,uint256,string)":{"notice":"Compares two `int256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`. `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100% Includes error message into revert string on failure."},"assertApproxEqRel(uint256,uint256,uint256)":{"notice":"Compares two `uint256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`. `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100%"},"assertApproxEqRel(uint256,uint256,uint256,string)":{"notice":"Compares two `uint256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`. `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100% Includes error message into revert string on failure."},"assertApproxEqRelDecimal(int256,int256,uint256,uint256)":{"notice":"Compares two `int256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`. `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100% Formats values with decimals in failure message."},"assertApproxEqRelDecimal(int256,int256,uint256,uint256,string)":{"notice":"Compares two `int256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`. `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100% Formats values with decimals in failure message. Includes error message into revert string on failure."},"assertApproxEqRelDecimal(uint256,uint256,uint256,uint256)":{"notice":"Compares two `uint256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`. `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100% Formats values with decimals in failure message."},"assertApproxEqRelDecimal(uint256,uint256,uint256,uint256,string)":{"notice":"Compares two `uint256` values. Expects relative difference in percents to be less than or equal to `maxPercentDelta`. `maxPercentDelta` is an 18 decimal fixed point number, where 1e18 == 100% Formats values with decimals in failure message. Includes error message into revert string on failure."},"assertEq(address,address)":{"notice":"Asserts that two `address` values are equal."},"assertEq(address,address,string)":{"notice":"Asserts that two `address` values are equal and includes error message into revert string on failure."},"assertEq(address[],address[])":{"notice":"Asserts that two arrays of `address` values are equal."},"assertEq(address[],address[],string)":{"notice":"Asserts that two arrays of `address` values are equal and includes error message into revert string on failure."},"assertEq(bool,bool)":{"notice":"Asserts that two `bool` values are equal."},"assertEq(bool,bool,string)":{"notice":"Asserts that two `bool` values are equal and includes error message into revert string on failure."},"assertEq(bool[],bool[])":{"notice":"Asserts that two arrays of `bool` values are equal."},"assertEq(bool[],bool[],string)":{"notice":"Asserts that two arrays of `bool` values are equal and includes error message into revert string on failure."},"assertEq(bytes,bytes)":{"notice":"Asserts that two `bytes` values are equal."},"assertEq(bytes,bytes,string)":{"notice":"Asserts that two `bytes` values are equal and includes error message into revert string on failure."},"assertEq(bytes32,bytes32)":{"notice":"Asserts that two `bytes32` values are equal."},"assertEq(bytes32,bytes32,string)":{"notice":"Asserts that two `bytes32` values are equal and includes error message into revert string on failure."},"assertEq(bytes32[],bytes32[])":{"notice":"Asserts that two arrays of `bytes32` values are equal."},"assertEq(bytes32[],bytes32[],string)":{"notice":"Asserts that two arrays of `bytes32` values are equal and includes error message into revert string on failure."},"assertEq(bytes[],bytes[])":{"notice":"Asserts that two arrays of `bytes` values are equal."},"assertEq(bytes[],bytes[],string)":{"notice":"Asserts that two arrays of `bytes` values are equal and includes error message into revert string on failure."},"assertEq(int256,int256)":{"notice":"Asserts that two `int256` values are equal."},"assertEq(int256,int256,string)":{"notice":"Asserts that two `int256` values are equal and includes error message into revert string on failure."},"assertEq(int256[],int256[])":{"notice":"Asserts that two arrays of `int256` values are equal."},"assertEq(int256[],int256[],string)":{"notice":"Asserts that two arrays of `int256` values are equal and includes error message into revert string on failure."},"assertEq(string,string)":{"notice":"Asserts that two `string` values are equal."},"assertEq(string,string,string)":{"notice":"Asserts that two `string` values are equal and includes error message into revert string on failure."},"assertEq(string[],string[])":{"notice":"Asserts that two arrays of `string` values are equal."},"assertEq(string[],string[],string)":{"notice":"Asserts that two arrays of `string` values are equal and includes error message into revert string on failure."},"assertEq(uint256,uint256)":{"notice":"Asserts that two `uint256` values are equal."},"assertEq(uint256,uint256,string)":{"notice":"Asserts that two `uint256` values are equal and includes error message into revert string on failure."},"assertEq(uint256[],uint256[])":{"notice":"Asserts that two arrays of `uint256 values are equal."},"assertEq(uint256[],uint256[],string)":{"notice":"Asserts that two arrays of `uint256` values are equal and includes error message into revert string on failure."},"assertEqDecimal(int256,int256,uint256)":{"notice":"Asserts that two `int256` values are equal, formatting them with decimals in failure message."},"assertEqDecimal(int256,int256,uint256,string)":{"notice":"Asserts that two `int256` values are equal, formatting them with decimals in failure message. Includes error message into revert string on failure."},"assertEqDecimal(uint256,uint256,uint256)":{"notice":"Asserts that two `uint256` values are equal, formatting them with decimals in failure message."},"assertEqDecimal(uint256,uint256,uint256,string)":{"notice":"Asserts that two `uint256` values are equal, formatting them with decimals in failure message. Includes error message into revert string on failure."},"assertFalse(bool)":{"notice":"Asserts that the given condition is false."},"assertFalse(bool,string)":{"notice":"Asserts that the given condition is false and includes error message into revert string on failure."},"assertGe(int256,int256)":{"notice":"Compares two `int256` values. Expects first value to be greater than or equal to second."},"assertGe(int256,int256,string)":{"notice":"Compares two `int256` values. Expects first value to be greater than or equal to second. Includes error message into revert string on failure."},"assertGe(uint256,uint256)":{"notice":"Compares two `uint256` values. Expects first value to be greater than or equal to second."},"assertGe(uint256,uint256,string)":{"notice":"Compares two `uint256` values. Expects first value to be greater than or equal to second. Includes error message into revert string on failure."},"assertGeDecimal(int256,int256,uint256)":{"notice":"Compares two `int256` values. Expects first value to be greater than or equal to second. Formats values with decimals in failure message."},"assertGeDecimal(int256,int256,uint256,string)":{"notice":"Compares two `int256` values. Expects first value to be greater than or equal to second. Formats values with decimals in failure message. Includes error message into revert string on failure."},"assertGeDecimal(uint256,uint256,uint256)":{"notice":"Compares two `uint256` values. Expects first value to be greater than or equal to second. Formats values with decimals in failure message."},"assertGeDecimal(uint256,uint256,uint256,string)":{"notice":"Compares two `uint256` values. Expects first value to be greater than or equal to second. Formats values with decimals in failure message. Includes error message into revert string on failure."},"assertGt(int256,int256)":{"notice":"Compares two `int256` values. Expects first value to be greater than second."},"assertGt(int256,int256,string)":{"notice":"Compares two `int256` values. Expects first value to be greater than second. Includes error message into revert string on failure."},"assertGt(uint256,uint256)":{"notice":"Compares two `uint256` values. Expects first value to be greater than second."},"assertGt(uint256,uint256,string)":{"notice":"Compares two `uint256` values. Expects first value to be greater than second. Includes error message into revert string on failure."},"assertGtDecimal(int256,int256,uint256)":{"notice":"Compares two `int256` values. Expects first value to be greater than second. Formats values with decimals in failure message."},"assertGtDecimal(int256,int256,uint256,string)":{"notice":"Compares two `int256` values. Expects first value to be greater than second. Formats values with decimals in failure message. Includes error message into revert string on failure."},"assertGtDecimal(uint256,uint256,uint256)":{"notice":"Compares two `uint256` values. Expects first value to be greater than second. Formats values with decimals in failure message."},"assertGtDecimal(uint256,uint256,uint256,string)":{"notice":"Compares two `uint256` values. Expects first value to be greater than second. Formats values with decimals in failure message. Includes error message into revert string on failure."},"assertLe(int256,int256)":{"notice":"Compares two `int256` values. Expects first value to be less than or equal to second."},"assertLe(int256,int256,string)":{"notice":"Compares two `int256` values. Expects first value to be less than or equal to second. Includes error message into revert string on failure."},"assertLe(uint256,uint256)":{"notice":"Compares two `uint256` values. Expects first value to be less than or equal to second."},"assertLe(uint256,uint256,string)":{"notice":"Compares two `uint256` values. Expects first value to be less than or equal to second. Includes error message into revert string on failure."},"assertLeDecimal(int256,int256,uint256)":{"notice":"Compares two `int256` values. Expects first value to be less than or equal to second. Formats values with decimals in failure message."},"assertLeDecimal(int256,int256,uint256,string)":{"notice":"Compares two `int256` values. Expects first value to be less than or equal to second. Formats values with decimals in failure message. Includes error message into revert string on failure."},"assertLeDecimal(uint256,uint256,uint256)":{"notice":"Compares two `uint256` values. Expects first value to be less than or equal to second. Formats values with decimals in failure message."},"assertLeDecimal(uint256,uint256,uint256,string)":{"notice":"Compares two `uint256` values. Expects first value to be less than or equal to second. Formats values with decimals in failure message. Includes error message into revert string on failure."},"assertLt(int256,int256)":{"notice":"Compares two `int256` values. Expects first value to be less than second."},"assertLt(int256,int256,string)":{"notice":"Compares two `int256` values. Expects first value to be less than second. Includes error message into revert string on failure."},"assertLt(uint256,uint256)":{"notice":"Compares two `uint256` values. Expects first value to be less than second."},"assertLt(uint256,uint256,string)":{"notice":"Compares two `uint256` values. Expects first value to be less than second. Includes error message into revert string on failure."},"assertLtDecimal(int256,int256,uint256)":{"notice":"Compares two `int256` values. Expects first value to be less than second. Formats values with decimals in failure message."},"assertLtDecimal(int256,int256,uint256,string)":{"notice":"Compares two `int256` values. Expects first value to be less than second. Formats values with decimals in failure message. Includes error message into revert string on failure."},"assertLtDecimal(uint256,uint256,uint256)":{"notice":"Compares two `uint256` values. Expects first value to be less than second. Formats values with decimals in failure message."},"assertLtDecimal(uint256,uint256,uint256,string)":{"notice":"Compares two `uint256` values. Expects first value to be less than second. Formats values with decimals in failure message. Includes error message into revert string on failure."},"assertNotEq(address,address)":{"notice":"Asserts that two `address` values are not equal."},"assertNotEq(address,address,string)":{"notice":"Asserts that two `address` values are not equal and includes error message into revert string on failure."},"assertNotEq(address[],address[])":{"notice":"Asserts that two arrays of `address` values are not equal."},"assertNotEq(address[],address[],string)":{"notice":"Asserts that two arrays of `address` values are not equal and includes error message into revert string on failure."},"assertNotEq(bool,bool)":{"notice":"Asserts that two `bool` values are not equal."},"assertNotEq(bool,bool,string)":{"notice":"Asserts that two `bool` values are not equal and includes error message into revert string on failure."},"assertNotEq(bool[],bool[])":{"notice":"Asserts that two arrays of `bool` values are not equal."},"assertNotEq(bool[],bool[],string)":{"notice":"Asserts that two arrays of `bool` values are not equal and includes error message into revert string on failure."},"assertNotEq(bytes,bytes)":{"notice":"Asserts that two `bytes` values are not equal."},"assertNotEq(bytes,bytes,string)":{"notice":"Asserts that two `bytes` values are not equal and includes error message into revert string on failure."},"assertNotEq(bytes32,bytes32)":{"notice":"Asserts that two `bytes32` values are not equal."},"assertNotEq(bytes32,bytes32,string)":{"notice":"Asserts that two `bytes32` values are not equal and includes error message into revert string on failure."},"assertNotEq(bytes32[],bytes32[])":{"notice":"Asserts that two arrays of `bytes32` values are not equal."},"assertNotEq(bytes32[],bytes32[],string)":{"notice":"Asserts that two arrays of `bytes32` values are not equal and includes error message into revert string on failure."},"assertNotEq(bytes[],bytes[])":{"notice":"Asserts that two arrays of `bytes` values are not equal."},"assertNotEq(bytes[],bytes[],string)":{"notice":"Asserts that two arrays of `bytes` values are not equal and includes error message into revert string on failure."},"assertNotEq(int256,int256)":{"notice":"Asserts that two `int256` values are not equal."},"assertNotEq(int256,int256,string)":{"notice":"Asserts that two `int256` values are not equal and includes error message into revert string on failure."},"assertNotEq(int256[],int256[])":{"notice":"Asserts that two arrays of `int256` values are not equal."},"assertNotEq(int256[],int256[],string)":{"notice":"Asserts that two arrays of `int256` values are not equal and includes error message into revert string on failure."},"assertNotEq(string,string)":{"notice":"Asserts that two `string` values are not equal."},"assertNotEq(string,string,string)":{"notice":"Asserts that two `string` values are not equal and includes error message into revert string on failure."},"assertNotEq(string[],string[])":{"notice":"Asserts that two arrays of `string` values are not equal."},"assertNotEq(string[],string[],string)":{"notice":"Asserts that two arrays of `string` values are not equal and includes error message into revert string on failure."},"assertNotEq(uint256,uint256)":{"notice":"Asserts that two `uint256` values are not equal."},"assertNotEq(uint256,uint256,string)":{"notice":"Asserts that two `uint256` values are not equal and includes error message into revert string on failure."},"assertNotEq(uint256[],uint256[])":{"notice":"Asserts that two arrays of `uint256` values are not equal."},"assertNotEq(uint256[],uint256[],string)":{"notice":"Asserts that two arrays of `uint256` values are not equal and includes error message into revert string on failure."},"assertNotEqDecimal(int256,int256,uint256)":{"notice":"Asserts that two `int256` values are not equal, formatting them with decimals in failure message."},"assertNotEqDecimal(int256,int256,uint256,string)":{"notice":"Asserts that two `int256` values are not equal, formatting them with decimals in failure message. Includes error message into revert string on failure."},"assertNotEqDecimal(uint256,uint256,uint256)":{"notice":"Asserts that two `uint256` values are not equal, formatting them with decimals in failure message."},"assertNotEqDecimal(uint256,uint256,uint256,string)":{"notice":"Asserts that two `uint256` values are not equal, formatting them with decimals in failure message. Includes error message into revert string on failure."},"assertTrue(bool)":{"notice":"Asserts that the given condition is true."},"assertTrue(bool,string)":{"notice":"Asserts that the given condition is true and includes error message into revert string on failure."},"assume(bool)":{"notice":"If the condition is false, discard this run's fuzz inputs and generate new ones."},"assumeNoRevert((address,bool,bytes))":{"notice":"Discard this run's fuzz inputs and generate new ones if next call reverts with the potential revert parameters."},"assumeNoRevert((address,bool,bytes)[])":{"notice":"Discard this run's fuzz inputs and generate new ones if next call reverts with the any of the potential revert parameters."},"assumeNoRevert()":{"notice":"Discard this run's fuzz inputs and generate new ones if next call reverted."},"attachBlob(bytes)":{"notice":"Attach an EIP-4844 blob to the next call"},"attachDelegation((uint8,bytes32,bytes32,uint64,address))":{"notice":"Designate the next call as an EIP-7702 transaction"},"breakpoint(string)":{"notice":"Writes a breakpoint to jump to in the debugger."},"breakpoint(string,bool)":{"notice":"Writes a conditional breakpoint to jump to in the debugger."},"broadcast()":{"notice":"Has the next call (at this call depth only) create transactions that can later be signed and sent onchain. Broadcasting address is determined by checking the following in order: 1. If `--sender` argument was provided, that address is used. 2. If exactly one signer (e.g. private key, hw wallet, keystore) is set when `forge broadcast` is invoked, that signer is used. 3. Otherwise, default foundry sender (1804c8AB1F12E6bbf3894d4083f33e07309d1f38) is used."},"broadcast(address)":{"notice":"Has the next call (at this call depth only) create a transaction with the address provided as the sender that can later be signed and sent onchain."},"broadcast(uint256)":{"notice":"Has the next call (at this call depth only) create a transaction with the private key provided as the sender that can later be signed and sent onchain."},"broadcastRawTransaction(bytes)":{"notice":"Takes a signed transaction and broadcasts it to the network."},"closeFile(string)":{"notice":"Closes file for reading, resetting the offset and allowing to read it from beginning with readLine. `path` is relative to the project root."},"computeCreate2Address(bytes32,bytes32)":{"notice":"Compute the address of a contract created with CREATE2 using the default CREATE2 deployer."},"computeCreate2Address(bytes32,bytes32,address)":{"notice":"Compute the address of a contract created with CREATE2 using the given CREATE2 deployer."},"computeCreateAddress(address,uint256)":{"notice":"Compute the address a contract will be deployed at for a given deployer address and nonce."},"contains(string,string)":{"notice":"Returns true if `search` is found in `subject`, false otherwise."},"copyFile(string,string)":{"notice":"Copies the contents of one file to another. This function will **overwrite** the contents of `to`. On success, the total number of bytes copied is returned and it is equal to the length of the `to` file as reported by `metadata`. Both `from` and `to` are relative to the project root."},"copyStorage(address,address)":{"notice":"Utility cheatcode to copy storage of `from` contract to another `to` contract."},"createDir(string,bool)":{"notice":"Creates a new, empty directory at the provided path. This cheatcode will revert in the following situations, but is not limited to just these cases: - User lacks permissions to modify `path`. - A parent of the given path doesn't exist and `recursive` is false. - `path` already exists and `recursive` is false. `path` is relative to the project root."},"createWallet(string)":{"notice":"Derives a private key from the name, labels the account with that name, and returns the wallet."},"createWallet(uint256)":{"notice":"Generates a wallet from the private key and returns the wallet."},"createWallet(uint256,string)":{"notice":"Generates a wallet from the private key, labels the account with that name, and returns the wallet."},"deployCode(string)":{"notice":"Deploys a contract from an artifact file. Takes in the relative path to the json file or the path to the artifact in the form of :: where and parts are optional."},"deployCode(string,bytes)":{"notice":"Deploys a contract from an artifact file. Takes in the relative path to the json file or the path to the artifact in the form of :: where and parts are optional. Additionally accepts abi-encoded constructor arguments."},"deployCode(string,bytes,bytes32)":{"notice":"Deploys a contract from an artifact file, using the CREATE2 salt. Takes in the relative path to the json file or the path to the artifact in the form of :: where and parts are optional. Additionally accepts abi-encoded constructor arguments."},"deployCode(string,bytes,uint256)":{"notice":"Deploys a contract from an artifact file. Takes in the relative path to the json file or the path to the artifact in the form of :: where and parts are optional. Additionally accepts abi-encoded constructor arguments and `msg.value`."},"deployCode(string,bytes,uint256,bytes32)":{"notice":"Deploys a contract from an artifact file, using the CREATE2 salt. Takes in the relative path to the json file or the path to the artifact in the form of :: where and parts are optional. Additionally accepts abi-encoded constructor arguments and `msg.value`."},"deployCode(string,bytes32)":{"notice":"Deploys a contract from an artifact file, using the CREATE2 salt. Takes in the relative path to the json file or the path to the artifact in the form of :: where and parts are optional."},"deployCode(string,uint256)":{"notice":"Deploys a contract from an artifact file. Takes in the relative path to the json file or the path to the artifact in the form of :: where and parts are optional. Additionally accepts `msg.value`."},"deployCode(string,uint256,bytes32)":{"notice":"Deploys a contract from an artifact file, using the CREATE2 salt. Takes in the relative path to the json file or the path to the artifact in the form of :: where and parts are optional. Additionally accepts `msg.value`."},"deriveKey(string,string,uint32)":{"notice":"Derive a private key from a provided mnenomic string (or mnenomic file path) at `{derivationPath}{index}`."},"deriveKey(string,string,uint32,string)":{"notice":"Derive a private key from a provided mnenomic string (or mnenomic file path) in the specified language at `{derivationPath}{index}`."},"deriveKey(string,uint32)":{"notice":"Derive a private key from a provided mnenomic string (or mnenomic file path) at the derivation path `m/44'/60'/0'/0/{index}`."},"deriveKey(string,uint32,string)":{"notice":"Derive a private key from a provided mnenomic string (or mnenomic file path) in the specified language at the derivation path `m/44'/60'/0'/0/{index}`."},"ensNamehash(string)":{"notice":"Returns ENS namehash for provided string."},"envAddress(string)":{"notice":"Gets the environment variable `name` and parses it as `address`. Reverts if the variable was not found or could not be parsed."},"envAddress(string,string)":{"notice":"Gets the environment variable `name` and parses it as an array of `address`, delimited by `delim`. Reverts if the variable was not found or could not be parsed."},"envBool(string)":{"notice":"Gets the environment variable `name` and parses it as `bool`. Reverts if the variable was not found or could not be parsed."},"envBool(string,string)":{"notice":"Gets the environment variable `name` and parses it as an array of `bool`, delimited by `delim`. Reverts if the variable was not found or could not be parsed."},"envBytes(string)":{"notice":"Gets the environment variable `name` and parses it as `bytes`. Reverts if the variable was not found or could not be parsed."},"envBytes(string,string)":{"notice":"Gets the environment variable `name` and parses it as an array of `bytes`, delimited by `delim`. Reverts if the variable was not found or could not be parsed."},"envBytes32(string)":{"notice":"Gets the environment variable `name` and parses it as `bytes32`. Reverts if the variable was not found or could not be parsed."},"envBytes32(string,string)":{"notice":"Gets the environment variable `name` and parses it as an array of `bytes32`, delimited by `delim`. Reverts if the variable was not found or could not be parsed."},"envExists(string)":{"notice":"Gets the environment variable `name` and returns true if it exists, else returns false."},"envInt(string)":{"notice":"Gets the environment variable `name` and parses it as `int256`. Reverts if the variable was not found or could not be parsed."},"envInt(string,string)":{"notice":"Gets the environment variable `name` and parses it as an array of `int256`, delimited by `delim`. Reverts if the variable was not found or could not be parsed."},"envOr(string,address)":{"notice":"Gets the environment variable `name` and parses it as `address`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found."},"envOr(string,bool)":{"notice":"Gets the environment variable `name` and parses it as `bool`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found."},"envOr(string,bytes)":{"notice":"Gets the environment variable `name` and parses it as `bytes`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found."},"envOr(string,bytes32)":{"notice":"Gets the environment variable `name` and parses it as `bytes32`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found."},"envOr(string,int256)":{"notice":"Gets the environment variable `name` and parses it as `int256`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found."},"envOr(string,string)":{"notice":"Gets the environment variable `name` and parses it as `string`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found."},"envOr(string,string,address[])":{"notice":"Gets the environment variable `name` and parses it as an array of `address`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found."},"envOr(string,string,bool[])":{"notice":"Gets the environment variable `name` and parses it as an array of `bool`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found."},"envOr(string,string,bytes32[])":{"notice":"Gets the environment variable `name` and parses it as an array of `bytes32`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found."},"envOr(string,string,bytes[])":{"notice":"Gets the environment variable `name` and parses it as an array of `bytes`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found."},"envOr(string,string,int256[])":{"notice":"Gets the environment variable `name` and parses it as an array of `int256`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found."},"envOr(string,string,string[])":{"notice":"Gets the environment variable `name` and parses it as an array of `string`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found."},"envOr(string,string,uint256[])":{"notice":"Gets the environment variable `name` and parses it as an array of `uint256`, delimited by `delim`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found."},"envOr(string,uint256)":{"notice":"Gets the environment variable `name` and parses it as `uint256`. Reverts if the variable could not be parsed. Returns `defaultValue` if the variable was not found."},"envString(string)":{"notice":"Gets the environment variable `name` and parses it as `string`. Reverts if the variable was not found or could not be parsed."},"envString(string,string)":{"notice":"Gets the environment variable `name` and parses it as an array of `string`, delimited by `delim`. Reverts if the variable was not found or could not be parsed."},"envUint(string)":{"notice":"Gets the environment variable `name` and parses it as `uint256`. Reverts if the variable was not found or could not be parsed."},"envUint(string,string)":{"notice":"Gets the environment variable `name` and parses it as an array of `uint256`, delimited by `delim`. Reverts if the variable was not found or could not be parsed."},"eth_getLogs(uint256,uint256,address,bytes32[])":{"notice":"Gets all the logs according to specified filter."},"exists(string)":{"notice":"Returns true if the given path points to an existing entity, else returns false."},"ffi(string[])":{"notice":"Performs a foreign function call via the terminal."},"foundryVersionAtLeast(string)":{"notice":"Returns true if the current Foundry version is greater than or equal to the given version. The given version string must be in the format `major.minor.patch`. This is equivalent to `foundryVersionCmp(version) >= 0`."},"foundryVersionCmp(string)":{"notice":"Compares the current Foundry version with the given version string. The given version string must be in the format `major.minor.patch`. Returns: -1 if current Foundry version is less than the given version 0 if current Foundry version equals the given version 1 if current Foundry version is greater than the given version This result can then be used with a comparison operator against `0`. For example, to check if the current Foundry version is greater than or equal to `1.0.0`: `if (foundryVersionCmp(\"1.0.0\") >= 0) { ... }`"},"fsMetadata(string)":{"notice":"Given a path, query the file system to get information about a file, directory, etc."},"getArtifactPathByCode(bytes)":{"notice":"Gets the artifact path from code (aka. creation code)."},"getArtifactPathByDeployedCode(bytes)":{"notice":"Gets the artifact path from deployed code (aka. runtime code)."},"getBlobBaseFee()":{"notice":"Gets the current `block.blobbasefee`. You should use this instead of `block.blobbasefee` if you use `vm.blobBaseFee`, as `block.blobbasefee` is assumed to be constant across a transaction, and as a result will get optimized out by the compiler. See https://github.com/foundry-rs/foundry/issues/6180"},"getBlockNumber()":{"notice":"Gets the current `block.number`. You should use this instead of `block.number` if you use `vm.roll`, as `block.number` is assumed to be constant across a transaction, and as a result will get optimized out by the compiler. See https://github.com/foundry-rs/foundry/issues/6180"},"getBlockTimestamp()":{"notice":"Gets the current `block.timestamp`. You should use this instead of `block.timestamp` if you use `vm.warp`, as `block.timestamp` is assumed to be constant across a transaction, and as a result will get optimized out by the compiler. See https://github.com/foundry-rs/foundry/issues/6180"},"getBroadcast(string,uint64,uint8)":{"notice":"Returns the most recent broadcast for the given contract on `chainId` matching `txType`. For example: The most recent deployment can be fetched by passing `txType` as `CREATE` or `CREATE2`. The most recent call can be fetched by passing `txType` as `CALL`."},"getBroadcasts(string,uint64)":{"notice":"Returns all broadcasts for the given contract on `chainId`. Sorted such that the most recent broadcast is the first element, and the oldest is the last. i.e descending order of BroadcastTxSummary.blockNumber."},"getBroadcasts(string,uint64,uint8)":{"notice":"Returns all broadcasts for the given contract on `chainId` with the specified `txType`. Sorted such that the most recent broadcast is the first element, and the oldest is the last. i.e descending order of BroadcastTxSummary.blockNumber."},"getChain(string)":{"notice":"Returns a Chain struct for specific alias"},"getChain(uint256)":{"notice":"Returns a Chain struct for specific chainId"},"getCode(string)":{"notice":"Gets the creation bytecode from an artifact file. Takes in the relative path to the json file or the path to the artifact in the form of :: where and parts are optional."},"getDeployedCode(string)":{"notice":"Gets the deployed bytecode from an artifact file. Takes in the relative path to the json file or the path to the artifact in the form of :: where and parts are optional."},"getDeployment(string)":{"notice":"Returns the most recent deployment for the current `chainId`."},"getDeployment(string,uint64)":{"notice":"Returns the most recent deployment for the given contract on `chainId`"},"getDeployments(string,uint64)":{"notice":"Returns all deployments for the given contract on `chainId` Sorted in descending order of deployment time i.e descending order of BroadcastTxSummary.blockNumber. The most recent deployment is the first element, and the oldest is the last."},"getFoundryVersion()":{"notice":"Returns the Foundry version. Format: -+.. Sample output: 0.3.0-nightly+3cb96bde9b.1737036656.debug Note: Build timestamps may vary slightly across platforms due to separate CI jobs. For reliable version comparisons, use UNIX format (e.g., >= 1700000000) to compare timestamps while ignoring minor time differences."},"getLabel(address)":{"notice":"Gets the label for the specified address."},"getMappingKeyAndParentOf(address,bytes32)":{"notice":"Gets the map key and parent of a mapping at a given slot, for a given address."},"getMappingLength(address,bytes32)":{"notice":"Gets the number of elements in the mapping at the given slot, for a given address."},"getMappingSlotAt(address,bytes32,uint256)":{"notice":"Gets the elements at index idx of the mapping at the given slot, for a given address. The index must be less than the length of the mapping (i.e. the number of keys in the mapping)."},"getNonce((address,uint256,uint256,uint256))":{"notice":"Get the nonce of a `Wallet`."},"getNonce(address)":{"notice":"Gets the nonce of an account."},"getRecordedLogs()":{"notice":"Gets all the recorded logs."},"getStateDiff()":{"notice":"Returns state diffs from current `vm.startStateDiffRecording` session."},"getStateDiffJson()":{"notice":"Returns state diffs from current `vm.startStateDiffRecording` session, in json format."},"getWallets()":{"notice":"Returns addresses of available unlocked wallets in the script environment."},"indexOf(string,string)":{"notice":"Returns the index of the first occurrence of a `key` in an `input` string. Returns `NOT_FOUND` (i.e. `type(uint256).max`) if the `key` is not found. Returns 0 in case of an empty `key`."},"isContext(uint8)":{"notice":"Returns true if `forge` command was executed in given context."},"isDir(string)":{"notice":"Returns true if the path exists on disk and is pointing at a directory, else returns false."},"isFile(string)":{"notice":"Returns true if the path exists on disk and is pointing at a regular file, else returns false."},"keyExists(string,string)":{"notice":"Checks if `key` exists in a JSON object `keyExists` is being deprecated in favor of `keyExistsJson`. It will be removed in future versions."},"keyExistsJson(string,string)":{"notice":"Checks if `key` exists in a JSON object."},"keyExistsToml(string,string)":{"notice":"Checks if `key` exists in a TOML table."},"label(address,string)":{"notice":"Labels an address in call traces."},"lastCallGas()":{"notice":"Gets the gas used in the last call from the callee perspective."},"load(address,bytes32)":{"notice":"Loads a storage slot from an address."},"parseAddress(string)":{"notice":"Parses the given `string` into an `address`."},"parseBool(string)":{"notice":"Parses the given `string` into a `bool`."},"parseBytes(string)":{"notice":"Parses the given `string` into `bytes`."},"parseBytes32(string)":{"notice":"Parses the given `string` into a `bytes32`."},"parseInt(string)":{"notice":"Parses the given `string` into a `int256`."},"parseJson(string)":{"notice":"ABI-encodes a JSON object."},"parseJson(string,string)":{"notice":"ABI-encodes a JSON object at `key`."},"parseJsonAddress(string,string)":{"notice":"Parses a string of JSON data at `key` and coerces it to `address`."},"parseJsonAddressArray(string,string)":{"notice":"Parses a string of JSON data at `key` and coerces it to `address[]`."},"parseJsonBool(string,string)":{"notice":"Parses a string of JSON data at `key` and coerces it to `bool`."},"parseJsonBoolArray(string,string)":{"notice":"Parses a string of JSON data at `key` and coerces it to `bool[]`."},"parseJsonBytes(string,string)":{"notice":"Parses a string of JSON data at `key` and coerces it to `bytes`."},"parseJsonBytes32(string,string)":{"notice":"Parses a string of JSON data at `key` and coerces it to `bytes32`."},"parseJsonBytes32Array(string,string)":{"notice":"Parses a string of JSON data at `key` and coerces it to `bytes32[]`."},"parseJsonBytesArray(string,string)":{"notice":"Parses a string of JSON data at `key` and coerces it to `bytes[]`."},"parseJsonInt(string,string)":{"notice":"Parses a string of JSON data at `key` and coerces it to `int256`."},"parseJsonIntArray(string,string)":{"notice":"Parses a string of JSON data at `key` and coerces it to `int256[]`."},"parseJsonKeys(string,string)":{"notice":"Returns an array of all the keys in a JSON object."},"parseJsonString(string,string)":{"notice":"Parses a string of JSON data at `key` and coerces it to `string`."},"parseJsonStringArray(string,string)":{"notice":"Parses a string of JSON data at `key` and coerces it to `string[]`."},"parseJsonType(string,string)":{"notice":"Parses a string of JSON data and coerces it to type corresponding to `typeDescription`."},"parseJsonType(string,string,string)":{"notice":"Parses a string of JSON data at `key` and coerces it to type corresponding to `typeDescription`."},"parseJsonTypeArray(string,string,string)":{"notice":"Parses a string of JSON data at `key` and coerces it to type array corresponding to `typeDescription`."},"parseJsonUint(string,string)":{"notice":"Parses a string of JSON data at `key` and coerces it to `uint256`."},"parseJsonUintArray(string,string)":{"notice":"Parses a string of JSON data at `key` and coerces it to `uint256[]`."},"parseToml(string)":{"notice":"ABI-encodes a TOML table."},"parseToml(string,string)":{"notice":"ABI-encodes a TOML table at `key`."},"parseTomlAddress(string,string)":{"notice":"Parses a string of TOML data at `key` and coerces it to `address`."},"parseTomlAddressArray(string,string)":{"notice":"Parses a string of TOML data at `key` and coerces it to `address[]`."},"parseTomlBool(string,string)":{"notice":"Parses a string of TOML data at `key` and coerces it to `bool`."},"parseTomlBoolArray(string,string)":{"notice":"Parses a string of TOML data at `key` and coerces it to `bool[]`."},"parseTomlBytes(string,string)":{"notice":"Parses a string of TOML data at `key` and coerces it to `bytes`."},"parseTomlBytes32(string,string)":{"notice":"Parses a string of TOML data at `key` and coerces it to `bytes32`."},"parseTomlBytes32Array(string,string)":{"notice":"Parses a string of TOML data at `key` and coerces it to `bytes32[]`."},"parseTomlBytesArray(string,string)":{"notice":"Parses a string of TOML data at `key` and coerces it to `bytes[]`."},"parseTomlInt(string,string)":{"notice":"Parses a string of TOML data at `key` and coerces it to `int256`."},"parseTomlIntArray(string,string)":{"notice":"Parses a string of TOML data at `key` and coerces it to `int256[]`."},"parseTomlKeys(string,string)":{"notice":"Returns an array of all the keys in a TOML table."},"parseTomlString(string,string)":{"notice":"Parses a string of TOML data at `key` and coerces it to `string`."},"parseTomlStringArray(string,string)":{"notice":"Parses a string of TOML data at `key` and coerces it to `string[]`."},"parseTomlType(string,string)":{"notice":"Parses a string of TOML data and coerces it to type corresponding to `typeDescription`."},"parseTomlType(string,string,string)":{"notice":"Parses a string of TOML data at `key` and coerces it to type corresponding to `typeDescription`."},"parseTomlTypeArray(string,string,string)":{"notice":"Parses a string of TOML data at `key` and coerces it to type array corresponding to `typeDescription`."},"parseTomlUint(string,string)":{"notice":"Parses a string of TOML data at `key` and coerces it to `uint256`."},"parseTomlUintArray(string,string)":{"notice":"Parses a string of TOML data at `key` and coerces it to `uint256[]`."},"parseUint(string)":{"notice":"Parses the given `string` into a `uint256`."},"pauseGasMetering()":{"notice":"Pauses gas metering (i.e. gas usage is not counted). Noop if already paused."},"pauseTracing()":{"notice":"Pauses collection of call traces. Useful in cases when you want to skip tracing of complex calls which are not useful for debugging."},"projectRoot()":{"notice":"Get the path of the current project root."},"prompt(string)":{"notice":"Prompts the user for a string value in the terminal."},"promptAddress(string)":{"notice":"Prompts the user for an address in the terminal."},"promptSecret(string)":{"notice":"Prompts the user for a hidden string value in the terminal."},"promptSecretUint(string)":{"notice":"Prompts the user for hidden uint256 in the terminal (usually pk)."},"promptUint(string)":{"notice":"Prompts the user for uint256 in the terminal."},"publicKeyP256(uint256)":{"notice":"Derives secp256r1 public key from the provided `privateKey`."},"randomAddress()":{"notice":"Returns a random `address`."},"randomBool()":{"notice":"Returns a random `bool`."},"randomBytes(uint256)":{"notice":"Returns a random byte array value of the given length."},"randomBytes4()":{"notice":"Returns a random fixed-size byte array of length 4."},"randomBytes8()":{"notice":"Returns a random fixed-size byte array of length 8."},"randomInt()":{"notice":"Returns a random `int256` value."},"randomInt(uint256)":{"notice":"Returns a random `int256` value of given bits."},"randomUint()":{"notice":"Returns a random uint256 value."},"randomUint(uint256)":{"notice":"Returns a random `uint256` value of given bits."},"randomUint(uint256,uint256)":{"notice":"Returns random uint256 value between the provided range (=min..=max)."},"readDir(string)":{"notice":"Reads the directory at the given path recursively, up to `maxDepth`. `maxDepth` defaults to 1, meaning only the direct children of the given directory will be returned. Follows symbolic links if `followLinks` is true."},"readDir(string,uint64)":{"notice":"See `readDir(string)`."},"readDir(string,uint64,bool)":{"notice":"See `readDir(string)`."},"readFile(string)":{"notice":"Reads the entire content of file to string. `path` is relative to the project root."},"readFileBinary(string)":{"notice":"Reads the entire content of file as binary. `path` is relative to the project root."},"readLine(string)":{"notice":"Reads next line of file to string."},"readLink(string)":{"notice":"Reads a symbolic link, returning the path that the link points to. This cheatcode will revert in the following situations, but is not limited to just these cases: - `path` is not a symbolic link. - `path` does not exist."},"record()":{"notice":"Records all storage reads and writes."},"recordLogs()":{"notice":"Record all the transaction logs."},"rememberKey(uint256)":{"notice":"Adds a private key to the local forge wallet and returns the address."},"rememberKeys(string,string,string,uint32)":{"notice":"Derive a set number of wallets from a mnemonic in the specified language at the derivation path `m/44'/60'/0'/0/{0..count}`. The respective private keys are saved to the local forge wallet for later use and their addresses are returned."},"rememberKeys(string,string,uint32)":{"notice":"Derive a set number of wallets from a mnemonic at the derivation path `m/44'/60'/0'/0/{0..count}`. The respective private keys are saved to the local forge wallet for later use and their addresses are returned."},"removeDir(string,bool)":{"notice":"Removes a directory at the provided path. This cheatcode will revert in the following situations, but is not limited to just these cases: - `path` doesn't exist. - `path` isn't a directory. - User lacks permissions to modify `path`. - The directory is not empty and `recursive` is false. `path` is relative to the project root."},"removeFile(string)":{"notice":"Removes a file from the filesystem. This cheatcode will revert in the following situations, but is not limited to just these cases: - `path` points to a directory. - The file doesn't exist. - The user lacks permissions to remove the file. `path` is relative to the project root."},"replace(string,string,string)":{"notice":"Replaces occurrences of `from` in the given `string` with `to`."},"resetGasMetering()":{"notice":"Reset gas metering (i.e. gas usage is set to gas limit)."},"resumeGasMetering()":{"notice":"Resumes gas metering (i.e. gas usage is counted again). Noop if already on."},"resumeTracing()":{"notice":"Unpauses collection of call traces."},"rpc(string,string)":{"notice":"Performs an Ethereum JSON-RPC request to the current fork URL."},"rpc(string,string,string)":{"notice":"Performs an Ethereum JSON-RPC request to the given endpoint."},"rpcUrl(string)":{"notice":"Returns the RPC url for the given alias."},"rpcUrlStructs()":{"notice":"Returns all rpc urls and their aliases as structs."},"rpcUrls()":{"notice":"Returns all rpc urls and their aliases `[alias, url][]`."},"serializeAddress(string,string,address)":{"notice":"See `serializeJson`."},"serializeAddress(string,string,address[])":{"notice":"See `serializeJson`."},"serializeBool(string,string,bool)":{"notice":"See `serializeJson`."},"serializeBool(string,string,bool[])":{"notice":"See `serializeJson`."},"serializeBytes(string,string,bytes)":{"notice":"See `serializeJson`."},"serializeBytes(string,string,bytes[])":{"notice":"See `serializeJson`."},"serializeBytes32(string,string,bytes32)":{"notice":"See `serializeJson`."},"serializeBytes32(string,string,bytes32[])":{"notice":"See `serializeJson`."},"serializeInt(string,string,int256)":{"notice":"See `serializeJson`."},"serializeInt(string,string,int256[])":{"notice":"See `serializeJson`."},"serializeJson(string,string)":{"notice":"Serializes a key and value to a JSON object stored in-memory that can be later written to a file. Returns the stringified version of the specific JSON file up to that moment."},"serializeJsonType(string,bytes)":{"notice":"See `serializeJson`."},"serializeJsonType(string,string,string,bytes)":{"notice":"See `serializeJson`."},"serializeString(string,string,string)":{"notice":"See `serializeJson`."},"serializeString(string,string,string[])":{"notice":"See `serializeJson`."},"serializeUint(string,string,uint256)":{"notice":"See `serializeJson`."},"serializeUint(string,string,uint256[])":{"notice":"See `serializeJson`."},"serializeUintToHex(string,string,uint256)":{"notice":"See `serializeJson`."},"setArbitraryStorage(address)":{"notice":"Utility cheatcode to set arbitrary storage for given target address."},"setArbitraryStorage(address,bool)":{"notice":"Utility cheatcode to set arbitrary storage for given target address and overwrite any storage slots that have been previously set."},"setEnv(string,string)":{"notice":"Sets environment variables."},"shuffle(uint256[])":{"notice":"Randomly shuffles an array."},"sign((address,uint256,uint256,uint256),bytes32)":{"notice":"Signs data with a `Wallet`."},"sign(address,bytes32)":{"notice":"Signs `digest` with signer provided to script using the secp256k1 curve. Raises error if none of the signers passed into the script have provided address."},"sign(bytes32)":{"notice":"Signs `digest` with signer provided to script using the secp256k1 curve. If `--sender` is provided, the signer with provided address is used, otherwise, if exactly one signer is provided to the script, that signer is used. Raises error if signer passed through `--sender` does not match any unlocked signers or if `--sender` is not provided and not exactly one signer is passed to the script."},"sign(uint256,bytes32)":{"notice":"Signs `digest` with `privateKey` using the secp256k1 curve."},"signAndAttachDelegation(address,uint256)":{"notice":"Sign an EIP-7702 authorization and designate the next call as an EIP-7702 transaction"},"signAndAttachDelegation(address,uint256,uint64)":{"notice":"Sign an EIP-7702 authorization and designate the next call as an EIP-7702 transaction for specific nonce"},"signCompact((address,uint256,uint256,uint256),bytes32)":{"notice":"Signs data with a `Wallet`. Returns a compact signature (`r`, `vs`) as per EIP-2098, where `vs` encodes both the signature's `s` value, and the recovery id `v` in a single bytes32. This format reduces the signature size from 65 to 64 bytes."},"signCompact(address,bytes32)":{"notice":"Signs `digest` with signer provided to script using the secp256k1 curve. Returns a compact signature (`r`, `vs`) as per EIP-2098, where `vs` encodes both the signature's `s` value, and the recovery id `v` in a single bytes32. This format reduces the signature size from 65 to 64 bytes. Raises error if none of the signers passed into the script have provided address."},"signCompact(bytes32)":{"notice":"Signs `digest` with signer provided to script using the secp256k1 curve. Returns a compact signature (`r`, `vs`) as per EIP-2098, where `vs` encodes both the signature's `s` value, and the recovery id `v` in a single bytes32. This format reduces the signature size from 65 to 64 bytes. If `--sender` is provided, the signer with provided address is used, otherwise, if exactly one signer is provided to the script, that signer is used. Raises error if signer passed through `--sender` does not match any unlocked signers or if `--sender` is not provided and not exactly one signer is passed to the script."},"signCompact(uint256,bytes32)":{"notice":"Signs `digest` with `privateKey` using the secp256k1 curve. Returns a compact signature (`r`, `vs`) as per EIP-2098, where `vs` encodes both the signature's `s` value, and the recovery id `v` in a single bytes32. This format reduces the signature size from 65 to 64 bytes."},"signDelegation(address,uint256)":{"notice":"Sign an EIP-7702 authorization for delegation"},"signDelegation(address,uint256,uint64)":{"notice":"Sign an EIP-7702 authorization for delegation for specific nonce"},"signP256(uint256,bytes32)":{"notice":"Signs `digest` with `privateKey` using the secp256r1 curve."},"sleep(uint256)":{"notice":"Suspends execution of the main thread for `duration` milliseconds."},"sort(uint256[])":{"notice":"Sorts an array in ascending order."},"split(string,string)":{"notice":"Splits the given `string` into an array of strings divided by the `delimiter`."},"startBroadcast()":{"notice":"Has all subsequent calls (at this call depth only) create transactions that can later be signed and sent onchain. Broadcasting address is determined by checking the following in order: 1. If `--sender` argument was provided, that address is used. 2. If exactly one signer (e.g. private key, hw wallet, keystore) is set when `forge broadcast` is invoked, that signer is used. 3. Otherwise, default foundry sender (1804c8AB1F12E6bbf3894d4083f33e07309d1f38) is used."},"startBroadcast(address)":{"notice":"Has all subsequent calls (at this call depth only) create transactions with the address provided that can later be signed and sent onchain."},"startBroadcast(uint256)":{"notice":"Has all subsequent calls (at this call depth only) create transactions with the private key provided that can later be signed and sent onchain."},"startDebugTraceRecording()":{"notice":"Records the debug trace during the run."},"startMappingRecording()":{"notice":"Starts recording all map SSTOREs for later retrieval."},"startStateDiffRecording()":{"notice":"Record all account accesses as part of CREATE, CALL or SELFDESTRUCT opcodes in order, along with the context of the calls"},"stopAndReturnDebugTraceRecording()":{"notice":"Stop debug trace recording and returns the recorded debug trace."},"stopAndReturnStateDiff()":{"notice":"Returns an ordered array of all account accesses from a `vm.startStateDiffRecording` session."},"stopBroadcast()":{"notice":"Stops collecting onchain transactions."},"stopMappingRecording()":{"notice":"Stops recording all map SSTOREs for later retrieval and clears the recorded data."},"toBase64(bytes)":{"notice":"Encodes a `bytes` value to a base64 string."},"toBase64(string)":{"notice":"Encodes a `string` value to a base64 string."},"toBase64URL(bytes)":{"notice":"Encodes a `bytes` value to a base64url string."},"toBase64URL(string)":{"notice":"Encodes a `string` value to a base64url string."},"toLowercase(string)":{"notice":"Converts the given `string` value to Lowercase."},"toString(address)":{"notice":"Converts the given value to a `string`."},"toString(bool)":{"notice":"Converts the given value to a `string`."},"toString(bytes)":{"notice":"Converts the given value to a `string`."},"toString(bytes32)":{"notice":"Converts the given value to a `string`."},"toString(int256)":{"notice":"Converts the given value to a `string`."},"toString(uint256)":{"notice":"Converts the given value to a `string`."},"toUppercase(string)":{"notice":"Converts the given `string` value to Uppercase."},"trim(string)":{"notice":"Trims leading and trailing whitespace from the given `string` value."},"tryFfi(string[])":{"notice":"Performs a foreign function call via terminal and returns the exit code, stdout, and stderr."},"unixTime()":{"notice":"Returns the time since unix epoch in milliseconds."},"writeFile(string,string)":{"notice":"Writes data to file, creating a file if it does not exist, and entirely replacing its contents if it does. `path` is relative to the project root."},"writeFileBinary(string,bytes)":{"notice":"Writes binary data to a file, creating a file if it does not exist, and entirely replacing its contents if it does. `path` is relative to the project root."},"writeJson(string,string)":{"notice":"Write a serialized JSON object to a file. If the file exists, it will be overwritten."},"writeJson(string,string,string)":{"notice":"Write a serialized JSON object to an **existing** JSON file, replacing a value with key = This is useful to replace a specific value of a JSON file, without having to parse the entire thing."},"writeLine(string,string)":{"notice":"Writes line to file, creating a file if it does not exist. `path` is relative to the project root."},"writeToml(string,string)":{"notice":"Takes serialized JSON, converts to TOML and write a serialized TOML to a file."},"writeToml(string,string,string)":{"notice":"Takes serialized JSON, converts to TOML and write a serialized TOML table to an **existing** TOML file, replacing a value with key = This is useful to replace a specific value of a TOML file, without having to parse the entire thing."}},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"lib/forge-std/src/Vm.sol":"VmSafe"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"}},"version":1},"id":17} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Wallet.sol/Wallet.json b/contracts/artifacts/wallet-contracts-v3/Wallet.sol/Wallet.json new file mode 100644 index 00000000..f55bca30 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Wallet.sol/Wallet.json @@ -0,0 +1 @@ +{"abi":[],"bytecode":{"object":"0x60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea2646970667358221220d8ff4ffd3e673404b86e2bfb54c37e3daddc36eca1edd1bad3ce7a02e8bdae8164736f6c634300081c0033","sourceMap":"2114:166:30:-:0;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x600080fdfea2646970667358221220d8ff4ffd3e673404b86e2bfb54c37e3daddc36eca1edd1bad3ce7a02e8bdae8164736f6c634300081c0033","sourceMap":"2114:166:30:-:0;;","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Wallet.sol\":\"Wallet\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/Wallet.sol\":{\"keccak256\":\"0xe01e9e937dd8d7572976ccc8ec3ec87e4a557069dafb05f85977a7b71f5c58d5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2e9ab78d33655f8e822258dff3f2d5ad01e84f6dc90174840d5a283b8e6413c1\",\"dweb:/ipfs/QmNMyYe3C1fs3cxKmUZ3S9VU5EE4WVWPVcwiGbgvbS1vrH\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/Wallet.sol":"Wallet"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/Wallet.sol":{"keccak256":"0xe01e9e937dd8d7572976ccc8ec3ec87e4a557069dafb05f85977a7b71f5c58d5","urls":["bzz-raw://2e9ab78d33655f8e822258dff3f2d5ad01e84f6dc90174840d5a283b8e6413c1","dweb:/ipfs/QmNMyYe3C1fs3cxKmUZ3S9VU5EE4WVWPVcwiGbgvbS1vrH"],"license":"Apache-2.0"}},"version":1},"id":30} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Wallet.t.sol/ModuleImp.json b/contracts/artifacts/wallet-contracts-v3/Wallet.t.sol/ModuleImp.json new file mode 100644 index 00000000..70ca7454 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Wallet.t.sol/ModuleImp.json @@ -0,0 +1 @@ +{"abi":[{"type":"constructor","inputs":[{"name":"_expectedData","type":"bytes","internalType":"bytes"},{"name":"_willReturn","type":"bytes","internalType":"bytes"},{"name":"_expectedValue","type":"uint256","internalType":"uint256"},{"name":"_alwaysReverts","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"fallback","stateMutability":"payable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"alwaysReverts","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"expectedDataPointer","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract VariableDataStore"}],"stateMutability":"view"},{"type":"function","name":"expectedValue","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"willReturnPointer","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract VariableDataStore"}],"stateMutability":"view"}],"bytecode":{"object":"0x6101006040523461016257610d948038038061001a81610167565b9283398101906080818303126101625780516001600160401b03811161016257826100469183016101af565b602082015190926001600160401b038211610162576100669183016101af565b60606040830151920151928315158403610162576040516104f69182820191906001600160401b0383118284101761014c576100aa829161089e94868685396101ff565b03906000f0801561014057608052604051928284016001600160401b0381118582101761014c5784936100de9385396101ff565b03906000f080156101405760a05260c05260e052604051610672908161022c823960805181818161013901526103e6015260a051818181609e015261045c015260c05181818161019301526104ad015260e0518181816101ec01526103800152f35b6040513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b600080fd5b6040519190601f01601f191682016001600160401b0381118382101761014c57604052565b60005b83811061019f5750506000910152565b818101518382015260200161018f565b81601f820112156101625780516001600160401b03811161014c576101dd601f8201601f1916602001610167565b9281845260208284010111610162576101fc916020808501910161018c565b90565b6040916020825261021f815180928160208601526020868601910161018c565b601f01601f191601019056fe60806040526004361015610018575b3661037e5761037e565b60003560e01c80632469f22d1461005857806354f6ae9b14610053578063a7472ff81461004e5763b4f5537d0361000e576101b6565b61015d565b6100ee565b346100e95760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e95773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166080527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8060a0016080f35b600080fd5b346100e95760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e957602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100e95760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e95760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346100e95760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e95760206040517f000000000000000000000000000000000000000000000000000000000000000015158152f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761028157604052565b610211565b67ffffffffffffffff811161028157601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b6020818303126100e95780519067ffffffffffffffff82116100e9570181601f820112156100e9578051906102f482610286565b926103026040519485610240565b828452602083830101116100e95760005b82811061032857505060206000918301015290565b80602080928401015182828701015201610313565b6040513d6000823e3d90fd5b91909161035581610286565b6103626040519182610240565b809382825282116100e957818160009384602080950137010152565b7f00000000000000000000000000000000000000000000000000000000000000006105dd576040517f73d4a13a00000000000000000000000000000000000000000000000000000000815260008160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156105bd576000916105c2575b50604051907f73d4a13a00000000000000000000000000000000000000000000000000000000825260008260048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9182156105bd57600092610598575b506020815191012061049f3636610349565b6020815191012003610539577f000000000000000000000000000000000000000000000000000000000000000034036104da57602081519101f35b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f496e76616c69642076616c7565000000000000000000000000000000000000006044820152606490fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f496e76616c6964206461746100000000000000000000000000000000000000006044820152606490fd5b6105b69192503d806000833e6105ae8183610240565b8101906102c0565b903861048d565b61033d565b6105d791503d806000833e6105ae8183610240565b38610417565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f416c7761797320726576657274730000000000000000000000000000000000006044820152606490fdfea26469706673582212208e93d4b4dec00d6b22b072d51b438198d83dd7cd11f4ea0ce3095b0526911acc64736f6c634300081c003360806040523461021d576104f68038038061001981610222565b92833981019060208183031261021d578051906001600160401b03821161021d570181601f8201121561021d578051906001600160401b0382116101f25761006a601f8301601f1916602001610222565b928284526020838301011161021d5760005b82811061020857600083850160200152835184906001600160401b0381116101f257600054600181811c911680156101e8575b60208210146101d257601f811161016e575b50602091601f821160011461010b57918192600092610100575b50508160011b916000199060031b1c1916176000555b6040516102ae90816102488239f35b0151905082806100db565b601f1982169260008052806000209160005b8581106101565750836001951061013d575b505050811b016000556100f1565b015160001960f88460031b161c1916905582808061012f565b9192602060018192868501518155019401920161011d565b600080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563601f830160051c810191602084106101c8575b601f0160051c01905b8181106101bc57506100c1565b600081556001016101af565b90915081906101a6565b634e487b7160e01b600052602260045260246000fd5b90607f16906100af565b634e487b7160e01b600052604160045260246000fd5b8060208092840101518282870101520161007c565b600080fd5b6040519190601f01601f191682016001600160401b038111838210176101f25760405256fe6080600436101561000f57600080fd5b60003560e01c6373d4a13a1461002457600080fd5b346102735760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610273576000908154918260011c60018416938415610269575b60208210851461023c57839482855290816000146101dc5750600114610163575b5003601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681019067ffffffffffffffff8211818310176101345781604052602082528181519182602083015260005b83811061011c5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f836000604080968601015201168101030190f35b602082820181015160408784010152859350016100dc565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080805291507f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b8183106101c057505081016020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061008a565b602091935080600191548385880101520191019091839261018c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208581019190915291151560051b840190910191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0905061008a565b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b90607f1690610069565b600080fdfea26469706673582212206b8d69ae38188528963ca21d233dedf82eb2bcd4482e04b751b8101226f6a4f864736f6c634300081c0033","sourceMap":"283:1128:75:-:0;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;283:1128:75;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;283:1128:75;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;642:36;;;;;;283:1128;-1:-1:-1;;;;;642:36:75;;;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;642:36:75;;;;;283:1128;620:58;283:1128;;;704:34;;;-1:-1:-1;;;;;704:34:75;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;704:34:75;;;;;684:54;;744:30;;780;;283:1128;;;;;;;;;;;;;;;;;;;684:54;283:1128;;;;;;;;;;744:30;283:1128;;;;;;;;;;780:30;283:1128;;;;;;;;;;;704:34;283:1128;;;-1:-1:-1;283:1128:75;;;;;704:34;283:1128;;;-1:-1:-1;283:1128:75;;;;;-1:-1:-1;283:1128:75;;-1:-1:-1;283:1128:75;;;;;;;;;-1:-1:-1;;283:1128:75;;;-1:-1:-1;;;;;283:1128:75;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;283:1128:75;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;283:1128:75;;;;;;;;-1:-1:-1;;283:1128:75;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;283:1128:75;;;;:::o","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361015610018575b3661037e5761037e565b60003560e01c80632469f22d1461005857806354f6ae9b14610053578063a7472ff81461004e5763b4f5537d0361000e576101b6565b61015d565b6100ee565b346100e95760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e95773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166080527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8060a0016080f35b600080fd5b346100e95760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e957602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100e95760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e95760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346100e95760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e95760206040517f000000000000000000000000000000000000000000000000000000000000000015158152f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761028157604052565b610211565b67ffffffffffffffff811161028157601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b6020818303126100e95780519067ffffffffffffffff82116100e9570181601f820112156100e9578051906102f482610286565b926103026040519485610240565b828452602083830101116100e95760005b82811061032857505060206000918301015290565b80602080928401015182828701015201610313565b6040513d6000823e3d90fd5b91909161035581610286565b6103626040519182610240565b809382825282116100e957818160009384602080950137010152565b7f00000000000000000000000000000000000000000000000000000000000000006105dd576040517f73d4a13a00000000000000000000000000000000000000000000000000000000815260008160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156105bd576000916105c2575b50604051907f73d4a13a00000000000000000000000000000000000000000000000000000000825260008260048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9182156105bd57600092610598575b506020815191012061049f3636610349565b6020815191012003610539577f000000000000000000000000000000000000000000000000000000000000000034036104da57602081519101f35b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f496e76616c69642076616c7565000000000000000000000000000000000000006044820152606490fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f496e76616c6964206461746100000000000000000000000000000000000000006044820152606490fd5b6105b69192503d806000833e6105ae8183610240565b8101906102c0565b903861048d565b61033d565b6105d791503d806000833e6105ae8183610240565b38610417565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f416c7761797320726576657274730000000000000000000000000000000000006044820152606490fdfea26469706673582212208e93d4b4dec00d6b22b072d51b438198d83dd7cd11f4ea0ce3095b0526911acc64736f6c634300081c0033","sourceMap":"283:1128:75:-:0;;;;;;;;;-1:-1:-1;283:1128:75;819:56;283:1128;819:56;:::i;283:1128::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;365:52;283:1128;;;;;;;;;;;;;;;;;;;;;;;;;;;307:54;283:1128;;;;;;;;;;;;;;;;;;421:38;283:1128;;;;;;;;;;;;;;;;;463:35;283:1128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;283:1128:75;;;;;;;;;-1:-1:-1;283:1128:75;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;1075:26;283:1128;;;;;;;;;;:::o;940:468::-;987:13;983:58;;283:1128;;;1075:26;;;:19;:26;:19;283:1128;1075:19;283:1128;1075:26;;;;;;;;;;;940:468;283:1128;;;1133:24;283:1128;1133:24;;1075:26;1133:17;1075:26;1133:17;283:1128;1133:17;283:1128;1133:24;;;;;;;1075:26;1133:24;;;940:468;283:1128;;;;;;1168:23;283:1128;;;;:::i;:::-;;;;;;1195:19;1168:46;1164:89;;1276:13;1263:9;:26;1259:70;;283:1128;1335:69;;;;;1259:70;283:1128;;1299:23;;;283:1128;1075:26;1299:23;;283:1128;;;;;;;;;;;;;1299:23;1164:89;283:1128;;1224:22;;;283:1128;1075:26;1224:22;;283:1128;;;;;;;;;;;;;1299:23;1133:24;;;;;;;1075:26;1133:24;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;:::i;1075:26::-;;;;;;;;;;;;;:::i;:::-;;;;983:58;283:1128;;1010:24;;;283:1128;1010:24;;;283:1128;;;;;;;;;;;;;1299:23","linkReferences":{},"immutableReferences":{"56949":[{"start":313,"length":32},{"start":998,"length":32}],"56952":[{"start":158,"length":32},{"start":1116,"length":32}],"56954":[{"start":403,"length":32},{"start":1197,"length":32}],"56956":[{"start":492,"length":32},{"start":896,"length":32}]}},"methodIdentifiers":{"alwaysReverts()":"b4f5537d","expectedDataPointer()":"54f6ae9b","expectedValue()":"a7472ff8","willReturnPointer()":"2469f22d"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_expectedData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_willReturn\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_expectedValue\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_alwaysReverts\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"alwaysReverts\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"expectedDataPointer\",\"outputs\":[{\"internalType\":\"contract VariableDataStore\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"expectedValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"willReturnPointer\",\"outputs\":[{\"internalType\":\"contract VariableDataStore\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/Wallet.t.sol\":\"ModuleImp\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/Factory.sol\":{\"keccak256\":\"0x5924fe583809e9c148d47c871866f6094599bb07a4d1fc2d60c814fda9c37f46\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e24d3575bf2606cd5f0f6da093e420118e018549eeb3a4ccb94f57c0e285e123\",\"dweb:/ipfs/QmRvWQt91YLJEgk5hgnRkPjDdB39tUHLYtxijYyXKdCm5J\"]},\"src/Wallet.sol\":{\"keccak256\":\"0xe01e9e937dd8d7572976ccc8ec3ec87e4a557069dafb05f85977a7b71f5c58d5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2e9ab78d33655f8e822258dff3f2d5ad01e84f6dc90174840d5a283b8e6413c1\",\"dweb:/ipfs/QmNMyYe3C1fs3cxKmUZ3S9VU5EE4WVWPVcwiGbgvbS1vrH\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"test/Wallet.t.sol\":{\"keccak256\":\"0x6276ce6037c97e099bc83dd09ac93571a28aafb6e4f6afda52eaa5474691f7c4\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d0368de9fefa4e57f6260dd353b82c3f66b9f7f4957a47c44a34fbaac41dc16e\",\"dweb:/ipfs/QmahBmo5iuyLUH88eU78m9JYaB1U8WbYix9aj5xkMiBai1\"]},\"test/utils/TestUtils.sol\":{\"keccak256\":\"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad\",\"dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"bytes","name":"_expectedData","type":"bytes"},{"internalType":"bytes","name":"_willReturn","type":"bytes"},{"internalType":"uint256","name":"_expectedValue","type":"uint256"},{"internalType":"bool","name":"_alwaysReverts","type":"bool"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"stateMutability":"payable","type":"fallback"},{"inputs":[],"stateMutability":"view","type":"function","name":"alwaysReverts","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"expectedDataPointer","outputs":[{"internalType":"contract VariableDataStore","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"expectedValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"willReturnPointer","outputs":[{"internalType":"contract VariableDataStore","name":"","type":"address"}]},{"inputs":[],"stateMutability":"payable","type":"receive"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/Wallet.t.sol":"ModuleImp"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/Factory.sol":{"keccak256":"0x5924fe583809e9c148d47c871866f6094599bb07a4d1fc2d60c814fda9c37f46","urls":["bzz-raw://e24d3575bf2606cd5f0f6da093e420118e018549eeb3a4ccb94f57c0e285e123","dweb:/ipfs/QmRvWQt91YLJEgk5hgnRkPjDdB39tUHLYtxijYyXKdCm5J"],"license":"Apache-2.0"},"src/Wallet.sol":{"keccak256":"0xe01e9e937dd8d7572976ccc8ec3ec87e4a557069dafb05f85977a7b71f5c58d5","urls":["bzz-raw://2e9ab78d33655f8e822258dff3f2d5ad01e84f6dc90174840d5a283b8e6413c1","dweb:/ipfs/QmNMyYe3C1fs3cxKmUZ3S9VU5EE4WVWPVcwiGbgvbS1vrH"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"test/Wallet.t.sol":{"keccak256":"0x6276ce6037c97e099bc83dd09ac93571a28aafb6e4f6afda52eaa5474691f7c4","urls":["bzz-raw://d0368de9fefa4e57f6260dd353b82c3f66b9f7f4957a47c44a34fbaac41dc16e","dweb:/ipfs/QmahBmo5iuyLUH88eU78m9JYaB1U8WbYix9aj5xkMiBai1"],"license":"Apache-2.0"},"test/utils/TestUtils.sol":{"keccak256":"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79","urls":["bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad","dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa"],"license":"Apache-2.0"}},"version":1},"id":75} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Wallet.t.sol/VariableDataStore.json b/contracts/artifacts/wallet-contracts-v3/Wallet.t.sol/VariableDataStore.json new file mode 100644 index 00000000..1d23518f --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Wallet.t.sol/VariableDataStore.json @@ -0,0 +1 @@ +{"abi":[{"type":"constructor","inputs":[{"name":"_data","type":"bytes","internalType":"bytes"}],"stateMutability":"nonpayable"},{"type":"function","name":"data","inputs":[],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"}],"bytecode":{"object":"0x60806040523461021d576104f68038038061001981610222565b92833981019060208183031261021d578051906001600160401b03821161021d570181601f8201121561021d578051906001600160401b0382116101f25761006a601f8301601f1916602001610222565b928284526020838301011161021d5760005b82811061020857600083850160200152835184906001600160401b0381116101f257600054600181811c911680156101e8575b60208210146101d257601f811161016e575b50602091601f821160011461010b57918192600092610100575b50508160011b916000199060031b1c1916176000555b6040516102ae90816102488239f35b0151905082806100db565b601f1982169260008052806000209160005b8581106101565750836001951061013d575b505050811b016000556100f1565b015160001960f88460031b161c1916905582808061012f565b9192602060018192868501518155019401920161011d565b600080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563601f830160051c810191602084106101c8575b601f0160051c01905b8181106101bc57506100c1565b600081556001016101af565b90915081906101a6565b634e487b7160e01b600052602260045260246000fd5b90607f16906100af565b634e487b7160e01b600052604160045260246000fd5b8060208092840101518282870101520161007c565b600080fd5b6040519190601f01601f191682016001600160401b038111838210176101f25760405256fe6080600436101561000f57600080fd5b60003560e01c6373d4a13a1461002457600080fd5b346102735760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610273576000908154918260011c60018416938415610269575b60208210851461023c57839482855290816000146101dc5750600114610163575b5003601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681019067ffffffffffffffff8211818310176101345781604052602082528181519182602083015260005b83811061011c5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f836000604080968601015201168101030190f35b602082820181015160408784010152859350016100dc565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080805291507f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b8183106101c057505081016020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061008a565b602091935080600191548385880101520191019091839261018c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208581019190915291151560051b840190910191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0905061008a565b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b90607f1690610069565b600080fdfea26469706673582212206b8d69ae38188528963ca21d233dedf82eb2bcd4482e04b751b8101226f6a4f864736f6c634300081c0033","sourceMap":"161:120:75:-:0;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;161:120:75;;;;;;;;;;;;;;;;-1:-1:-1;;;;;161:120:75;;;;;;;;-1:-1:-1;;161:120:75;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;161:120:75;;;;;;-1:-1:-1;161:120:75;;;;;;;;;;-1:-1:-1;;;;;161:120:75;;;;-1:-1:-1;161:120:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;161:120:75;;;;;;;;;;;;;;;;;;;-1:-1:-1;161:120:75;;;;;;;;;;;;;;;-1:-1:-1;161:120:75;;;;;;;;;;-1:-1:-1;161:120:75;;;-1:-1:-1;161:120:75;;-1:-1:-1;161:120:75;;;;;;;;;;;;;;;;;;;;-1:-1:-1;161:120:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;161:120:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;161:120:75;;;;;;;;;-1:-1:-1;161:120:75;;;;;;;;-1:-1:-1;161:120:75;;;;;-1:-1:-1;161:120:75;;;;;;;;;;;;-1:-1:-1;161:120:75;;;;;-1:-1:-1;161:120:75;;;;;;;;;;;;;;;;;;;;-1:-1:-1;161:120:75;;;;;;;;;-1:-1:-1;;161:120:75;;;-1:-1:-1;;;;;161:120:75;;;;;;;;;;:::o","linkReferences":{}},"deployedBytecode":{"object":"0x6080600436101561000f57600080fd5b60003560e01c6373d4a13a1461002457600080fd5b346102735760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610273576000908154918260011c60018416938415610269575b60208210851461023c57839482855290816000146101dc5750600114610163575b5003601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681019067ffffffffffffffff8211818310176101345781604052602082528181519182602083015260005b83811061011c5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f836000604080968601015201168101030190f35b602082820181015160408784010152859350016100dc565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080805291507f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b8183106101c057505081016020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061008a565b602091935080600191548385880101520191019091839261018c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208581019190915291151560051b840190910191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0905061008a565b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b90607f1690610069565b600080fdfea26469706673582212206b8d69ae38188528963ca21d233dedf82eb2bcd4482e04b751b8101226f6a4f864736f6c634300081c0033","sourceMap":"161:120:75:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;161:120:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;161:120:75;;;;;;;;;;;;;;;;;;;-1:-1:-1;161:120:75;;;;;;;-1:-1:-1;;161:120:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;161:120:75;;-1:-1:-1;161:120:75;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"methodIdentifiers":{"data()":"73d4a13a"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"data\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/Wallet.t.sol\":\"VariableDataStore\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/Factory.sol\":{\"keccak256\":\"0x5924fe583809e9c148d47c871866f6094599bb07a4d1fc2d60c814fda9c37f46\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e24d3575bf2606cd5f0f6da093e420118e018549eeb3a4ccb94f57c0e285e123\",\"dweb:/ipfs/QmRvWQt91YLJEgk5hgnRkPjDdB39tUHLYtxijYyXKdCm5J\"]},\"src/Wallet.sol\":{\"keccak256\":\"0xe01e9e937dd8d7572976ccc8ec3ec87e4a557069dafb05f85977a7b71f5c58d5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2e9ab78d33655f8e822258dff3f2d5ad01e84f6dc90174840d5a283b8e6413c1\",\"dweb:/ipfs/QmNMyYe3C1fs3cxKmUZ3S9VU5EE4WVWPVcwiGbgvbS1vrH\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"test/Wallet.t.sol\":{\"keccak256\":\"0x6276ce6037c97e099bc83dd09ac93571a28aafb6e4f6afda52eaa5474691f7c4\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d0368de9fefa4e57f6260dd353b82c3f66b9f7f4957a47c44a34fbaac41dc16e\",\"dweb:/ipfs/QmahBmo5iuyLUH88eU78m9JYaB1U8WbYix9aj5xkMiBai1\"]},\"test/utils/TestUtils.sol\":{\"keccak256\":\"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad\",\"dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"stateMutability":"view","type":"function","name":"data","outputs":[{"internalType":"bytes","name":"","type":"bytes"}]}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/Wallet.t.sol":"VariableDataStore"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/Factory.sol":{"keccak256":"0x5924fe583809e9c148d47c871866f6094599bb07a4d1fc2d60c814fda9c37f46","urls":["bzz-raw://e24d3575bf2606cd5f0f6da093e420118e018549eeb3a4ccb94f57c0e285e123","dweb:/ipfs/QmRvWQt91YLJEgk5hgnRkPjDdB39tUHLYtxijYyXKdCm5J"],"license":"Apache-2.0"},"src/Wallet.sol":{"keccak256":"0xe01e9e937dd8d7572976ccc8ec3ec87e4a557069dafb05f85977a7b71f5c58d5","urls":["bzz-raw://2e9ab78d33655f8e822258dff3f2d5ad01e84f6dc90174840d5a283b8e6413c1","dweb:/ipfs/QmNMyYe3C1fs3cxKmUZ3S9VU5EE4WVWPVcwiGbgvbS1vrH"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"test/Wallet.t.sol":{"keccak256":"0x6276ce6037c97e099bc83dd09ac93571a28aafb6e4f6afda52eaa5474691f7c4","urls":["bzz-raw://d0368de9fefa4e57f6260dd353b82c3f66b9f7f4957a47c44a34fbaac41dc16e","dweb:/ipfs/QmahBmo5iuyLUH88eU78m9JYaB1U8WbYix9aj5xkMiBai1"],"license":"Apache-2.0"},"test/utils/TestUtils.sol":{"keccak256":"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79","urls":["bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad","dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa"],"license":"Apache-2.0"}},"version":1},"id":75} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/Wallet.t.sol/WalletTest.json b/contracts/artifacts/wallet-contracts-v3/Wallet.t.sol/WalletTest.json new file mode 100644 index 00000000..a9643f48 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/Wallet.t.sol/WalletTest.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"excludeArtifacts","inputs":[],"outputs":[{"name":"excludedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"excludeContracts","inputs":[],"outputs":[{"name":"excludedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"excludeSelectors","inputs":[],"outputs":[{"name":"excludedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"excludeSenders","inputs":[],"outputs":[{"name":"excludedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"factory","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract Factory"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"setUp","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"targetArtifactSelectors","inputs":[],"outputs":[{"name":"targetedArtifactSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzArtifactSelector[]","components":[{"name":"artifact","type":"string","internalType":"string"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetArtifacts","inputs":[],"outputs":[{"name":"targetedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"targetContracts","inputs":[],"outputs":[{"name":"targetedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"targetInterfaces","inputs":[],"outputs":[{"name":"targetedInterfaces_","type":"tuple[]","internalType":"struct StdInvariant.FuzzInterface[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"artifacts","type":"string[]","internalType":"string[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSelectors","inputs":[],"outputs":[{"name":"targetedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSenders","inputs":[],"outputs":[{"name":"targetedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"test_doNotForwardWithValue","inputs":[{"name":"_salt","type":"bytes32","internalType":"bytes32"},{"name":"_value","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_forward","inputs":[{"name":"_salt","type":"bytes32","internalType":"bytes32"},{"name":"_data","type":"bytes","internalType":"bytes"},{"name":"_return","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_forwardValueWithData","inputs":[{"name":"_salt","type":"bytes32","internalType":"bytes32"},{"name":"_data","type":"bytes","internalType":"bytes"},{"name":"_return","type":"bytes","internalType":"bytes"},{"name":"_value","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false}],"bytecode":{"object":"0x60808060405234602f57600160ff19600c541617600c55600160ff19601f541617601f55612dcc90816100358239f35b600080fdfe608080604052600436101561001357600080fd5b600090813560e01c9081630301e1ce146110ac575080630a9254e414610fcc5780631ed7831c14610f235780632ade388014610cf75780633e5e3c2314610c4e5780633f7286f414610ba55780633fbb7c19146109e657806366d9a9a01461088b5780637d8bb8581461056a57806385226c81146104c2578063916a17c6146103ed578063b0464fdc14610318578063b5508aa914610270578063ba414fa61461022d578063c45a0155146101d8578063e20c9f711461011f5763fa7626d4146100dc57600080fd5b3461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57602060ff601f54166040519015158152f35b80fd5b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c5760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b8181106101ac576101a88561019c81870382611618565b60405191829182611372565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610185565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051908152f35b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c576020610266611b2b565b6040519015158152f35b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c576019546102ab816116ef565b916102b96040519384611618565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b8383106102fb57604051806101a887826114aa565b60016020819261030a85611707565b8152019201920191906102e6565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57601c54610353816116ef565b916103616040519384611618565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b8383106103a357604051806101a88782611528565b600260206001926040516103b6816115cd565b73ffffffffffffffffffffffffffffffffffffffff86541681526103db858701611884565b8382015281520192019201919061038e565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57601d54610428816116ef565b916104366040519384611618565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b83831061047857604051806101a88782611528565b6002602060019260405161048b816115cd565b73ffffffffffffffffffffffffffffffffffffffff86541681526104b0858701611884565b83820152815201920192019190610463565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57601a546104fd816116ef565b9161050b6040519384611618565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b83831061054d57604051806101a887826114aa565b60016020819261055c85611707565b815201920192019190610538565b503461011c5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c5760243567ffffffffffffffff8111610887576105ba903690600401611421565b9060443567ffffffffffffffff8111610883576105db903690600401611421565b919060643593737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561086a57856040517f4c63e56200000000000000000000000000000000000000000000000000000000815282151560048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561081d5761086e575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561086a576040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018690528690818160448183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561081d57610855575b5050604051610d948082019082821067ffffffffffffffff83111761082857918091899493611d4d83396080815284606061071d61070e60808501888c61180e565b84810360208601528b8a61180e565b928b60408201520152039083f090811561081d57601f546040517f32c02a1400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9384166004808301919091523560248201529260209184916044918391889160081c165af1908115610812576107de976107d896859485946107e1575b50826040519384928337810185815203925af1926107d16107cb6116bf565b94611c11565b369161184d565b90611c96565b80f35b61080491945060203d60201161080b575b6107fc8183611618565b810190611693565b92386107ac565b503d6107f2565b6040513d85823e3d90fd5b6040513d84823e3d90fd5b6024897f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b8161085f91611618565b61086a5785386106cc565b8580fd5b8161087891611618565b61086a578538610652565b8380fd5b5080fd5b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57601b546108c6816116ef565b6108d36040519182611618565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b8383106109ab57868587604051928392602084019060208552518091526040840160408260051b8601019392905b82821061094057505050500390f35b9193602061099b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc060019597998495030186528851908361098b83516040845260408401906113c2565b9201519084818403910152611454565b9601920192018594939192610931565b600260206001926040516109be816115cd565b6109c786611707565b81526109d4858701611884565b83820152815201920192019190610903565b503461011c5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c5760243567ffffffffffffffff811161088757610a36903690600401611421565b9060443567ffffffffffffffff811161088357610a57903690600401611421565b91604051610d948082019082821067ffffffffffffffff831117610b785791809188959493611d4d833960808152856060610aa8610a99608085018c8961180e565b84810360208601528a8961180e565b928260408201520152039084f090811561081257601f546040517f32c02a1400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416600480830191909152356024820152949260209186916044918391879160081c165af1801561081d576107de968380936107d8978294610b57575b50826040519384928337810182815203925af1926107d16107cb6116bf565b610b7191945060203d60201161080b576107fc8183611618565b9238610b38565b6024887f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c5760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b818110610c22576101a88561019c81870382611618565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610c0b565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c5760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b818110610ccb576101a88561019c81870382611618565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610cb4565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57601e54610d32816116ef565b610d3f6040519182611618565b818152601e83526020810191837f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350845b838310610e8d5786858760405192839260208401906020855251809152604084019160408260051b8601019392815b838310610dab5786860387f35b9193957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09086929496030183528551906020604082019273ffffffffffffffffffffffffffffffffffffffff81511683520151916040602083015282518091526060820190602060608260051b850101940192855b828110610e4457505050505060208060019297019301930190928695949293610d9e565b9091929394602080610e80837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0876001960301895289516113c2565b9701950193929101610e20565b604051610e99816115cd565b73ffffffffffffffffffffffffffffffffffffffff8354168152600183018054610ec2816116ef565b91610ed06040519384611618565b8183528a526020808b20908b9084015b838210610f06575050505060019282602092836002950152815201920192019190610d6f565b600160208192610f1586611707565b815201930191019091610ee0565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c5760405180916020601654928381520191601682527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289915b818110610fa0576101a88561019c81870382611618565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610f89565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c576040516102b68082019082821067ffffffffffffffff83111761107f57908291612ae18339039082f08015611072577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00601f549260081b16911617601f5580f35b50604051903d90823e3d90fd5b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b823461011c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c5760243591737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610887577f4c63e56200000000000000000000000000000000000000000000000000000000815282151560048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561081d578290611362575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561011c576040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815230600482015260248101839052818160448183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561081d5790829161134d575b50506020604051926111dc8285611618565b8284526040516111ec8382611618565b83815260405190610d94958683019683881067ffffffffffffffff89111761132057606061123e85946112318a9b95600195611d4d89396080875260808701906113c2565b908582038a8701526113c2565b928860408201520152039084f090811561081257601f546040517f32c02a1400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9384166004808301919091523560248201529492849186916044918391879160081c165af1801561081d5782809281926107de978391611303575b50826040516112da8982611618565b525af16112ee6112e86116bf565b91611c11565b6112fb6040519283611618565b838252611c96565b61131a9150873d891161080b576107fc8183611618565b896112cb565b6024877f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b8161135791611618565b61011c5780836111ca565b61136b91611618565b828161114f565b602060408183019282815284518094520192019060005b8181106113965750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101611389565b919082519283825260005b84811061140c5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b806020809284010151828286010152016113cd565b9181601f8401121561144f5782359167ffffffffffffffff831161144f576020838186019501011161144f57565b600080fd5b906020808351928381520192019060005b8181106114725750505090565b82517fffffffff0000000000000000000000000000000000000000000000000000000016845260209384019390920191600101611465565b602081016020825282518091526040820191602060408360051b8301019401926000915b8383106114dd57505050505090565b9091929394602080611519837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0866001960301875289516113c2565b970193019301919392906114ce565b602081016020825282518091526040820191602060408360051b8301019401926000915b83831061155b57505050505090565b90919293946020806115be837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190611454565b9701930193019193929061154c565b6040810190811067ffffffffffffffff8211176115e957604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176115e957604052565b67ffffffffffffffff81116115e957601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9081602091031261144f575173ffffffffffffffffffffffffffffffffffffffff8116810361144f5790565b3d156116ea573d906116d082611659565b916116de6040519384611618565b82523d6000602084013e565b606090565b67ffffffffffffffff81116115e95760051b60200190565b906040519160008154918260011c92600181168015611804575b6020851081146117d7578487528693929181156117975750600114611750575b5061174e92500383611618565b565b90506000929192526020600020906000915b81831061177b57505090602061174e9282010138611741565b6020919350806001915483858901015201910190918492611762565b6020935061174e9592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b82010138611741565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f1693611721565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b92919261185982611659565b916118676040519384611618565b82948184528183011161144f578281602093846000960137010152565b90604051918281549182825260208201906000526020600020926000905b806007830110611a9e5761174e945491818110611a68575b818110611a32575b8181106119fc575b8181106119c6575b818110611990575b81811061195a575b818110611925575b106118f8575b500383611618565b7fffffffff00000000000000000000000000000000000000000000000000000000168152602001386118f0565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b1681520193016118ea565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b1681520193016118e2565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b1681520193016118da565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b1681520193016118d2565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b1681520193016118ca565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b1681520193016118c2565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b1681520193016118ba565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e08201520194019201859293916118a2565b60085460ff168015611b3a5790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115611c0557600091611bd3575b50151590565b90506020813d602011611bfd575b81611bee60209383611618565b8101031261144f575138611bcd565b3d9150611be1565b6040513d6000823e3d90fd5b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561144f57604051907ff7fe34770000000000000000000000000000000000000000000000000000000082521515600482015260016024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015611c0557611c8b5750565b600061174e91611618565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561144f57611cf6600091611d2660405194859384937f976246310000000000000000000000000000000000000000000000000000000085526040600486015260448501906113c2565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8483030160248501526113c2565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015611c0557611c8b575056fe6101006040523461016257610d948038038061001a81610167565b9283398101906080818303126101625780516001600160401b03811161016257826100469183016101af565b602082015190926001600160401b038211610162576100669183016101af565b60606040830151920151928315158403610162576040516104f69182820191906001600160401b0383118284101761014c576100aa829161089e94868685396101ff565b03906000f0801561014057608052604051928284016001600160401b0381118582101761014c5784936100de9385396101ff565b03906000f080156101405760a05260c05260e052604051610672908161022c823960805181818161013901526103e6015260a051818181609e015261045c015260c05181818161019301526104ad015260e0518181816101ec01526103800152f35b6040513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b600080fd5b6040519190601f01601f191682016001600160401b0381118382101761014c57604052565b60005b83811061019f5750506000910152565b818101518382015260200161018f565b81601f820112156101625780516001600160401b03811161014c576101dd601f8201601f1916602001610167565b9281845260208284010111610162576101fc916020808501910161018c565b90565b6040916020825261021f815180928160208601526020868601910161018c565b601f01601f191601019056fe60806040526004361015610018575b3661037e5761037e565b60003560e01c80632469f22d1461005857806354f6ae9b14610053578063a7472ff81461004e5763b4f5537d0361000e576101b6565b61015d565b6100ee565b346100e95760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e95773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166080527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8060a0016080f35b600080fd5b346100e95760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e957602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100e95760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e95760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346100e95760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e95760206040517f000000000000000000000000000000000000000000000000000000000000000015158152f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761028157604052565b610211565b67ffffffffffffffff811161028157601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b6020818303126100e95780519067ffffffffffffffff82116100e9570181601f820112156100e9578051906102f482610286565b926103026040519485610240565b828452602083830101116100e95760005b82811061032857505060206000918301015290565b80602080928401015182828701015201610313565b6040513d6000823e3d90fd5b91909161035581610286565b6103626040519182610240565b809382825282116100e957818160009384602080950137010152565b7f00000000000000000000000000000000000000000000000000000000000000006105dd576040517f73d4a13a00000000000000000000000000000000000000000000000000000000815260008160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156105bd576000916105c2575b50604051907f73d4a13a00000000000000000000000000000000000000000000000000000000825260008260048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9182156105bd57600092610598575b506020815191012061049f3636610349565b6020815191012003610539577f000000000000000000000000000000000000000000000000000000000000000034036104da57602081519101f35b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f496e76616c69642076616c7565000000000000000000000000000000000000006044820152606490fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f496e76616c6964206461746100000000000000000000000000000000000000006044820152606490fd5b6105b69192503d806000833e6105ae8183610240565b8101906102c0565b903861048d565b61033d565b6105d791503d806000833e6105ae8183610240565b38610417565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f416c7761797320726576657274730000000000000000000000000000000000006044820152606490fdfea26469706673582212208e93d4b4dec00d6b22b072d51b438198d83dd7cd11f4ea0ce3095b0526911acc64736f6c634300081c003360806040523461021d576104f68038038061001981610222565b92833981019060208183031261021d578051906001600160401b03821161021d570181601f8201121561021d578051906001600160401b0382116101f25761006a601f8301601f1916602001610222565b928284526020838301011161021d5760005b82811061020857600083850160200152835184906001600160401b0381116101f257600054600181811c911680156101e8575b60208210146101d257601f811161016e575b50602091601f821160011461010b57918192600092610100575b50508160011b916000199060031b1c1916176000555b6040516102ae90816102488239f35b0151905082806100db565b601f1982169260008052806000209160005b8581106101565750836001951061013d575b505050811b016000556100f1565b015160001960f88460031b161c1916905582808061012f565b9192602060018192868501518155019401920161011d565b600080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563601f830160051c810191602084106101c8575b601f0160051c01905b8181106101bc57506100c1565b600081556001016101af565b90915081906101a6565b634e487b7160e01b600052602260045260246000fd5b90607f16906100af565b634e487b7160e01b600052604160045260246000fd5b8060208092840101518282870101520161007c565b600080fd5b6040519190601f01601f191682016001600160401b038111838210176101f25760405256fe6080600436101561000f57600080fd5b60003560e01c6373d4a13a1461002457600080fd5b346102735760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610273576000908154918260011c60018416938415610269575b60208210851461023c57839482855290816000146101dc5750600114610163575b5003601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681019067ffffffffffffffff8211818310176101345781604052602082528181519182602083015260005b83811061011c5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f836000604080968601015201168101030190f35b602082820181015160408784010152859350016100dc565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080805291507f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b8183106101c057505081016020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061008a565b602091935080600191548385880101520191019091839261018c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208581019190915291151560051b840190910191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0905061008a565b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b90607f1690610069565b600080fdfea26469706673582212206b8d69ae38188528963ca21d233dedf82eb2bcd4482e04b751b8101226f6a4f864736f6c634300081c00336080806040523460155761029b908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c6332c02a141461002757600080fd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019f5760043573ffffffffffffffffffffffffffffffffffffffff811680820361019f5760243580916100eb6101176040519261008a846101d3565b602f84527f6041600e3d396021805130553df33d3d36153402601f57363d3d373d363d305460208501527f5af43d82803e903d91601f57fd5bf300000000000000000000000000000000006040850152604051928391602083019586610235565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826101f4565b519034f59173ffffffffffffffffffffffffffffffffffffffff8316156101595760405173ffffffffffffffffffffffffffffffffffffffff84168152602090f35b7f8caac8050000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff1660045260245260446000fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6060810190811067ffffffffffffffff8211176101ef57604052565b6101a4565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176101ef57604052565b9291909283519060005b8281106102525750019081526020019150565b806020809288010151818401520161023f56fea2646970667358221220be04d6b1fea99f8da63c42ae89d7f45bd43865e722cddb9cb70f1713011e9fe264736f6c634300081c0033a2646970667358221220c4e996c60efb4b24630303c7b73d68e17c5e18f9a0f148698125175e8b48461b64736f6c634300081c0033","sourceMap":"1413:1412:75:-:0;;;;;;;3166:4:5;1413:1412:75;;3166:4:5;1413:1412:75;;;3166:4:5;1413:1412:75;3166:4:5;1413:1412:75;;1087:4:16;1413:1412:75;;;1087:4:16;1413:1412:75;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608080604052600436101561001357600080fd5b600090813560e01c9081630301e1ce146110ac575080630a9254e414610fcc5780631ed7831c14610f235780632ade388014610cf75780633e5e3c2314610c4e5780633f7286f414610ba55780633fbb7c19146109e657806366d9a9a01461088b5780637d8bb8581461056a57806385226c81146104c2578063916a17c6146103ed578063b0464fdc14610318578063b5508aa914610270578063ba414fa61461022d578063c45a0155146101d8578063e20c9f711461011f5763fa7626d4146100dc57600080fd5b3461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57602060ff601f54166040519015158152f35b80fd5b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c5760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b8181106101ac576101a88561019c81870382611618565b60405191829182611372565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610185565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57602073ffffffffffffffffffffffffffffffffffffffff601f5460081c16604051908152f35b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c576020610266611b2b565b6040519015158152f35b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c576019546102ab816116ef565b916102b96040519384611618565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b8383106102fb57604051806101a887826114aa565b60016020819261030a85611707565b8152019201920191906102e6565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57601c54610353816116ef565b916103616040519384611618565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b8383106103a357604051806101a88782611528565b600260206001926040516103b6816115cd565b73ffffffffffffffffffffffffffffffffffffffff86541681526103db858701611884565b8382015281520192019201919061038e565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57601d54610428816116ef565b916104366040519384611618565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b83831061047857604051806101a88782611528565b6002602060019260405161048b816115cd565b73ffffffffffffffffffffffffffffffffffffffff86541681526104b0858701611884565b83820152815201920192019190610463565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57601a546104fd816116ef565b9161050b6040519384611618565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b83831061054d57604051806101a887826114aa565b60016020819261055c85611707565b815201920192019190610538565b503461011c5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c5760243567ffffffffffffffff8111610887576105ba903690600401611421565b9060443567ffffffffffffffff8111610883576105db903690600401611421565b919060643593737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561086a57856040517f4c63e56200000000000000000000000000000000000000000000000000000000815282151560048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561081d5761086e575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561086a576040517fc88a5e6d000000000000000000000000000000000000000000000000000000008152306004820152602481018690528690818160448183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561081d57610855575b5050604051610d948082019082821067ffffffffffffffff83111761082857918091899493611d4d83396080815284606061071d61070e60808501888c61180e565b84810360208601528b8a61180e565b928b60408201520152039083f090811561081d57601f546040517f32c02a1400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9384166004808301919091523560248201529260209184916044918391889160081c165af1908115610812576107de976107d896859485946107e1575b50826040519384928337810185815203925af1926107d16107cb6116bf565b94611c11565b369161184d565b90611c96565b80f35b61080491945060203d60201161080b575b6107fc8183611618565b810190611693565b92386107ac565b503d6107f2565b6040513d85823e3d90fd5b6040513d84823e3d90fd5b6024897f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b8161085f91611618565b61086a5785386106cc565b8580fd5b8161087891611618565b61086a578538610652565b8380fd5b5080fd5b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57601b546108c6816116ef565b6108d36040519182611618565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b8383106109ab57868587604051928392602084019060208552518091526040840160408260051b8601019392905b82821061094057505050500390f35b9193602061099b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc060019597998495030186528851908361098b83516040845260408401906113c2565b9201519084818403910152611454565b9601920192018594939192610931565b600260206001926040516109be816115cd565b6109c786611707565b81526109d4858701611884565b83820152815201920192019190610903565b503461011c5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c5760243567ffffffffffffffff811161088757610a36903690600401611421565b9060443567ffffffffffffffff811161088357610a57903690600401611421565b91604051610d948082019082821067ffffffffffffffff831117610b785791809188959493611d4d833960808152856060610aa8610a99608085018c8961180e565b84810360208601528a8961180e565b928260408201520152039084f090811561081257601f546040517f32c02a1400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416600480830191909152356024820152949260209186916044918391879160081c165af1801561081d576107de968380936107d8978294610b57575b50826040519384928337810182815203925af1926107d16107cb6116bf565b610b7191945060203d60201161080b576107fc8183611618565b9238610b38565b6024887f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c5760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b818110610c22576101a88561019c81870382611618565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610c0b565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c5760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b818110610ccb576101a88561019c81870382611618565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610cb4565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c57601e54610d32816116ef565b610d3f6040519182611618565b818152601e83526020810191837f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350845b838310610e8d5786858760405192839260208401906020855251809152604084019160408260051b8601019392815b838310610dab5786860387f35b9193957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09086929496030183528551906020604082019273ffffffffffffffffffffffffffffffffffffffff81511683520151916040602083015282518091526060820190602060608260051b850101940192855b828110610e4457505050505060208060019297019301930190928695949293610d9e565b9091929394602080610e80837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0876001960301895289516113c2565b9701950193929101610e20565b604051610e99816115cd565b73ffffffffffffffffffffffffffffffffffffffff8354168152600183018054610ec2816116ef565b91610ed06040519384611618565b8183528a526020808b20908b9084015b838210610f06575050505060019282602092836002950152815201920192019190610d6f565b600160208192610f1586611707565b815201930191019091610ee0565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c5760405180916020601654928381520191601682527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289915b818110610fa0576101a88561019c81870382611618565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610f89565b503461011c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c576040516102b68082019082821067ffffffffffffffff83111761107f57908291612ae18339039082f08015611072577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00601f549260081b16911617601f5580f35b50604051903d90823e3d90fd5b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b823461011c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261011c5760243591737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610887577f4c63e56200000000000000000000000000000000000000000000000000000000815282151560048201528181602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561081d578290611362575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561011c576040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815230600482015260248101839052818160448183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561081d5790829161134d575b50506020604051926111dc8285611618565b8284526040516111ec8382611618565b83815260405190610d94958683019683881067ffffffffffffffff89111761132057606061123e85946112318a9b95600195611d4d89396080875260808701906113c2565b908582038a8701526113c2565b928860408201520152039084f090811561081257601f546040517f32c02a1400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9384166004808301919091523560248201529492849186916044918391879160081c165af1801561081d5782809281926107de978391611303575b50826040516112da8982611618565b525af16112ee6112e86116bf565b91611c11565b6112fb6040519283611618565b838252611c96565b61131a9150873d891161080b576107fc8183611618565b896112cb565b6024877f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b8161135791611618565b61011c5780836111ca565b61136b91611618565b828161114f565b602060408183019282815284518094520192019060005b8181106113965750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101611389565b919082519283825260005b84811061140c5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b806020809284010151828286010152016113cd565b9181601f8401121561144f5782359167ffffffffffffffff831161144f576020838186019501011161144f57565b600080fd5b906020808351928381520192019060005b8181106114725750505090565b82517fffffffff0000000000000000000000000000000000000000000000000000000016845260209384019390920191600101611465565b602081016020825282518091526040820191602060408360051b8301019401926000915b8383106114dd57505050505090565b9091929394602080611519837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0866001960301875289516113c2565b970193019301919392906114ce565b602081016020825282518091526040820191602060408360051b8301019401926000915b83831061155b57505050505090565b90919293946020806115be837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190611454565b9701930193019193929061154c565b6040810190811067ffffffffffffffff8211176115e957604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176115e957604052565b67ffffffffffffffff81116115e957601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9081602091031261144f575173ffffffffffffffffffffffffffffffffffffffff8116810361144f5790565b3d156116ea573d906116d082611659565b916116de6040519384611618565b82523d6000602084013e565b606090565b67ffffffffffffffff81116115e95760051b60200190565b906040519160008154918260011c92600181168015611804575b6020851081146117d7578487528693929181156117975750600114611750575b5061174e92500383611618565b565b90506000929192526020600020906000915b81831061177b57505090602061174e9282010138611741565b6020919350806001915483858901015201910190918492611762565b6020935061174e9592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b82010138611741565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f1693611721565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b92919261185982611659565b916118676040519384611618565b82948184528183011161144f578281602093846000960137010152565b90604051918281549182825260208201906000526020600020926000905b806007830110611a9e5761174e945491818110611a68575b818110611a32575b8181106119fc575b8181106119c6575b818110611990575b81811061195a575b818110611925575b106118f8575b500383611618565b7fffffffff00000000000000000000000000000000000000000000000000000000168152602001386118f0565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b1681520193016118ea565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b1681520193016118e2565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b1681520193016118da565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b1681520193016118d2565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b1681520193016118ca565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b1681520193016118c2565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b1681520193016118ba565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e08201520194019201859293916118a2565b60085460ff168015611b3a5790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115611c0557600091611bd3575b50151590565b90506020813d602011611bfd575b81611bee60209383611618565b8101031261144f575138611bcd565b3d9150611be1565b6040513d6000823e3d90fd5b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561144f57604051907ff7fe34770000000000000000000000000000000000000000000000000000000082521515600482015260016024820152600081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015611c0557611c8b5750565b600061174e91611618565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561144f57611cf6600091611d2660405194859384937f976246310000000000000000000000000000000000000000000000000000000085526040600486015260448501906113c2565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8483030160248501526113c2565b0381737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015611c0557611c8b575056fe6101006040523461016257610d948038038061001a81610167565b9283398101906080818303126101625780516001600160401b03811161016257826100469183016101af565b602082015190926001600160401b038211610162576100669183016101af565b60606040830151920151928315158403610162576040516104f69182820191906001600160401b0383118284101761014c576100aa829161089e94868685396101ff565b03906000f0801561014057608052604051928284016001600160401b0381118582101761014c5784936100de9385396101ff565b03906000f080156101405760a05260c05260e052604051610672908161022c823960805181818161013901526103e6015260a051818181609e015261045c015260c05181818161019301526104ad015260e0518181816101ec01526103800152f35b6040513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b600080fd5b6040519190601f01601f191682016001600160401b0381118382101761014c57604052565b60005b83811061019f5750506000910152565b818101518382015260200161018f565b81601f820112156101625780516001600160401b03811161014c576101dd601f8201601f1916602001610167565b9281845260208284010111610162576101fc916020808501910161018c565b90565b6040916020825261021f815180928160208601526020868601910161018c565b601f01601f191601019056fe60806040526004361015610018575b3661037e5761037e565b60003560e01c80632469f22d1461005857806354f6ae9b14610053578063a7472ff81461004e5763b4f5537d0361000e576101b6565b61015d565b6100ee565b346100e95760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e95773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166080527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8060a0016080f35b600080fd5b346100e95760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e957602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100e95760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e95760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346100e95760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e95760206040517f000000000000000000000000000000000000000000000000000000000000000015158152f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761028157604052565b610211565b67ffffffffffffffff811161028157601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b6020818303126100e95780519067ffffffffffffffff82116100e9570181601f820112156100e9578051906102f482610286565b926103026040519485610240565b828452602083830101116100e95760005b82811061032857505060206000918301015290565b80602080928401015182828701015201610313565b6040513d6000823e3d90fd5b91909161035581610286565b6103626040519182610240565b809382825282116100e957818160009384602080950137010152565b7f00000000000000000000000000000000000000000000000000000000000000006105dd576040517f73d4a13a00000000000000000000000000000000000000000000000000000000815260008160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156105bd576000916105c2575b50604051907f73d4a13a00000000000000000000000000000000000000000000000000000000825260008260048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9182156105bd57600092610598575b506020815191012061049f3636610349565b6020815191012003610539577f000000000000000000000000000000000000000000000000000000000000000034036104da57602081519101f35b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f496e76616c69642076616c7565000000000000000000000000000000000000006044820152606490fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f496e76616c6964206461746100000000000000000000000000000000000000006044820152606490fd5b6105b69192503d806000833e6105ae8183610240565b8101906102c0565b903861048d565b61033d565b6105d791503d806000833e6105ae8183610240565b38610417565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f416c7761797320726576657274730000000000000000000000000000000000006044820152606490fdfea26469706673582212208e93d4b4dec00d6b22b072d51b438198d83dd7cd11f4ea0ce3095b0526911acc64736f6c634300081c003360806040523461021d576104f68038038061001981610222565b92833981019060208183031261021d578051906001600160401b03821161021d570181601f8201121561021d578051906001600160401b0382116101f25761006a601f8301601f1916602001610222565b928284526020838301011161021d5760005b82811061020857600083850160200152835184906001600160401b0381116101f257600054600181811c911680156101e8575b60208210146101d257601f811161016e575b50602091601f821160011461010b57918192600092610100575b50508160011b916000199060031b1c1916176000555b6040516102ae90816102488239f35b0151905082806100db565b601f1982169260008052806000209160005b8581106101565750836001951061013d575b505050811b016000556100f1565b015160001960f88460031b161c1916905582808061012f565b9192602060018192868501518155019401920161011d565b600080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563601f830160051c810191602084106101c8575b601f0160051c01905b8181106101bc57506100c1565b600081556001016101af565b90915081906101a6565b634e487b7160e01b600052602260045260246000fd5b90607f16906100af565b634e487b7160e01b600052604160045260246000fd5b8060208092840101518282870101520161007c565b600080fd5b6040519190601f01601f191682016001600160401b038111838210176101f25760405256fe6080600436101561000f57600080fd5b60003560e01c6373d4a13a1461002457600080fd5b346102735760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610273576000908154918260011c60018416938415610269575b60208210851461023c57839482855290816000146101dc5750600114610163575b5003601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01681019067ffffffffffffffff8211818310176101345781604052602082528181519182602083015260005b83811061011c5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f836000604080968601015201168101030190f35b602082820181015160408784010152859350016100dc565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080805291507f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b8183106101c057505081016020017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061008a565b602091935080600191548385880101520191019091839261018c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208581019190915291151560051b840190910191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0905061008a565b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b90607f1690610069565b600080fdfea26469706673582212206b8d69ae38188528963ca21d233dedf82eb2bcd4482e04b751b8101226f6a4f864736f6c634300081c00336080806040523460155761029b908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c6332c02a141461002757600080fd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019f5760043573ffffffffffffffffffffffffffffffffffffffff811680820361019f5760243580916100eb6101176040519261008a846101d3565b602f84527f6041600e3d396021805130553df33d3d36153402601f57363d3d373d363d305460208501527f5af43d82803e903d91601f57fd5bf300000000000000000000000000000000006040850152604051928391602083019586610235565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826101f4565b519034f59173ffffffffffffffffffffffffffffffffffffffff8316156101595760405173ffffffffffffffffffffffffffffffffffffffff84168152602090f35b7f8caac8050000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff1660045260245260446000fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6060810190811067ffffffffffffffff8211176101ef57604052565b6101a4565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176101ef57604052565b9291909283519060005b8281106102525750019081526020019150565b806020809288010151818401520161023f56fea2646970667358221220be04d6b1fea99f8da63c42ae89d7f45bd43865e722cddb9cb70f1713011e9fe264736f6c634300081c0033a2646970667358221220c4e996c60efb4b24630303c7b73d68e17c5e18f9a0f148698125175e8b48461b64736f6c634300081c0033","sourceMap":"1413:1412:75:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1065:26:16;1413:1412:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2723:18:9;1413:1412:75;;;;;;;2723:18:9;1413:1412:75;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1449:22;1413:1412;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2575:18:9;1413:1412:75;;;;:::i;:::-;;2024:14:2;1413:1412:75;;2024:14:2;;;:::i;:::-;1413:1412:75;;;2575:18:9;1413:1412:75;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;2876:18:9;1413:1412:75;;;;:::i;:::-;;2024:14:2;1413:1412:75;;2024:14:2;;;:::i;:::-;1413:1412:75;;;2876:18:9;1413:1412:75;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;2024:14:2;;;:::i;:::-;1413:1412:75;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;3653:18:9;1413:1412:75;;;;:::i;:::-;;2024:14:2;1413:1412:75;;2024:14:2;;;:::i;:::-;1413:1412:75;;;3653:18:9;1413:1412:75;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;2024:14:2;;;:::i;:::-;1413:1412:75;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;3162:18:9;1413:1412:75;;;;:::i;:::-;;2024:14:2;1413:1412:75;;2024:14:2;;;:::i;:::-;1413:1412:75;;;3162:18:9;1413:1412:75;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;2475:27;336:42:2;2475:27:75;;;;1413:1412;;;2024:14:2;2475:27:75;;2485:16;;;1413:1412;2475:27;;1413:1412;2475:27;;1413:1412;2475:27;336:42:2;2475:27:75;;;;;;;;1413:1412;2509:30;;336:42:2;2509:30:75;;;;1413:1412;;2024:14:2;2509:30:75;;2525:4;1413:1412;2509:30;;1413:1412;2024:14:2;;;;;;1413:1412:75;;;;2024:14:2;1413:1412:75;;336:42:2;2509:30:75;;;;;;;;1413:1412;;;;;2564:44;;;;;;;;1413:1412;2564:44;;;;;;;;;;;;;;1413:1412;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;2024:14:2;1413:1412:75;;2564:44;;;;;;;;;2631:7;2024:14:2;1413:1412:75;;2024:14:2;2631:38:75;;1413:1412;;;;;2631:38;;;1413:1412;;;;;2024:14:2;;;;1413:1412:75;;;;;2024:14:2;;1413:1412:75;;2024:14:2;;;;1413:1412:75;2631:38;;;;;;;2788:29;2631:38;1413:1412;2631:38;;;;;;;1413:1412;;;;;;;;;;;;;;;2718:35;;;;;2777:4;2718:35;;:::i;:::-;2777:4;;:::i;:::-;1413:1412;;;:::i;:::-;2788:29;;:::i;:::-;1413:1412;;2631:38;;;;;1413:1412;2631:38;1413:1412;2631:38;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;1413:1412;;2024:14:2;1413:1412:75;;2024:14:2;;;;2564:44:75;1413:1412;;2024:14:2;1413:1412:75;;2024:14:2;;;;2564:44:75;1413:1412;2024:14:2;;;;;1413:1412:75;2024:14:2;;2509:30:75;;;;;:::i;:::-;1413:1412;;2509:30;;;;1413:1412;;;;2475:27;;;;;:::i;:::-;1413:1412;;2475:27;;;;1413:1412;;;;;;;;;;;;;;;;;;;;3346:26:9;1413:1412:75;;;;:::i;:::-;2024:14:2;1413:1412:75;;2024:14:2;;;:::i;:::-;1413:1412:75;;;3346:26:9;1413:1412:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2024:14:2;;;:::i;:::-;1413:1412:75;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;1655:39;;;;;;;;1413:1412;1655:39;;;;;;;;;;;;;;;1413:1412;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;2024:14:2;1413:1412:75;;1655:39;;;;;;;;;1717:7;2024:14:2;1413:1412:75;;2024:14:2;1717:38:75;;1413:1412;;;;;1717:38;;;1413:1412;;;;;2024:14:2;;;;1413:1412:75;;;;;;2024:14:2;;1413:1412:75;;;;2024:14:2;;1413:1412:75;1717:38;;;;;;1857:29;1717:38;;;;1413:1412;1717:38;;;;;1413:1412;;;;;;;;;;;;;;;1804:18;;;;;1846:4;1804:18;;:::i;1717:38::-;;;;;1413:1412;1717:38;1413:1412;1717:38;;;;;;;:::i;:::-;;;;;1655:39;1413:1412;2024:14:2;;;;;1413:1412:75;2024:14:2;;1413:1412:75;;;;;;;;;;;;;;;;;3501:18:9;1413:1412:75;;;;;;;3501:18:9;1413:1412:75;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3794:16:9;1413:1412:75;;;;;;;3794:16:9;1413:1412:75;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3948:19:9;1413:1412:75;;;;:::i;:::-;2024:14:2;1413:1412:75;;2024:14:2;;;:::i;:::-;1413:1412:75;;;3948:19:9;1413:1412:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;2024:14:2;;;:::i;:::-;1413:1412:75;;;;;;;;;;;;;;:::i;:::-;;2024:14:2;1413:1412:75;;2024:14:2;;;:::i;:::-;1413:1412:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3018:16:9;1413:1412:75;;;;;;;3018:16:9;1413:1412:75;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1516:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;1413:1412;;1506:23;1413:1412;;;;;;;;1506:23;1413:1412;;;1516:13;1413:1412;;;2024:14:2;;;;;;;;1516:13:75;2024:14:2;;;;;;1413:1412:75;2024:14:2;;1413:1412:75;;;;;;;;;;;;;;1977:21;336:42:2;1977:21:75;;;;2024:14:2;1977:21:75;;1987:10;;;1413:1412;1977:21;;1413:1412;1977:21;;1413:1412;1977:21;336:42:2;1977:21:75;;;;;;;;;;1413:1412;2005:30;;336:42:2;2005:30:75;;;;1413:1412;;2024:14:2;2005:30:75;;2021:4;1413:1412;2005:30;;1413:1412;2024:14:2;;;;;;2021:4:75;1413:1412;2024:14:2;1413:1412:75;2021:4;336:42:2;2005:30:75;;;;;;;;;;;1413:1412;2024:14:2;;;1413:1412:75;;2024:14:2;;;;;:::i;:::-;;;;1413:1412:75;;2024:14:2;;;;:::i;:::-;;;;1413:1412:75;;2060:44;;;;;;;;;;;;;;;;2024:14:2;;2060:44:75;;2024:14:2;2060:44:75;;;1413:1412;2060:44;;;;2024:14:2;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;1413:1412:75;2024:14:2;;;;1413:1412:75;2060:44;;;;;;;;;2127:7;2024:14:2;1413:1412:75;;2024:14:2;2127:38:75;;1413:1412;;;;;2127:38;;;1413:1412;;;;;2024:14:2;;;;1413:1412:75;;2024:14:2;;1413:1412:75;;2024:14:2;;1413:1412:75;;;;2024:14:2;;1413:1412:75;2127:38;;;;;;;;;;;2309:9;2127:38;;;;;1413:1412;;;;;2024:14:2;;;;:::i;:::-;;2214:39:75;;2277:4;2214:39;;:::i;:::-;2277:4;;:::i;:::-;2024:14:2;1413:1412:75;;2024:14:2;;;:::i;:::-;;;;2309:9:75;:::i;2127:38::-;;;;;;;;;;;;;;:::i;:::-;;;;2060:44;1413:1412;2024:14:2;;;;;1413:1412:75;2024:14:2;;2005:30:75;;;;;:::i;:::-;1413:1412;;2005:30;;;;1977:21;;;;:::i;:::-;;;;;1413:1412;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;1413:1412:75;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2024:14:2;1413:1412:75;2024:14:2;;;;;;;;;;;1413:1412:75;2024:14:2;:::o;:::-;;-1:-1:-1;2024:14:2;;;;;-1:-1:-1;2024:14:2;;;1413:1412:75;;2024:14:2;1413:1412:75;;2024:14:2;;;;;;;;;;;;;:::o;:::-;;;;;;1413:1412:75;;;;2024:14:2;;;:::o;:::-;;;;;;;;;;1413:1412:75;;;2024:14:2;;;;;:::o;:::-;;;;;;;;;;:::i;:::-;1413:1412:75;2024:14:2;1413:1412:75;;2024:14:2;;;:::i;:::-;;;;-1:-1:-1;2024:14:2;;;;:::o;:::-;;;:::o;1413:1412:75:-;;;;;;;;;;;:::o;:::-;;;;;-1:-1:-1;1413:1412:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;;;-1:-1:-1;1413:1412:75;;;;;-1:-1:-1;1413:1412:75;;-1:-1:-1;1413:1412:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1413:1412:75;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;2024:14:2;1413:1412:75;;2024:14:2;;;:::i;:::-;1413:1412:75;;;;;;;;;;;;;;;;-1:-1:-1;1413:1412:75;;;;;;:::o;:::-;;;;;;;;;;;;;;;;-1:-1:-1;1413:1412:75;;-1:-1:-1;1413:1412:75;;-1:-1:-1;1413:1412:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2024:14:2;1413:1412:75;;;;;;;;2024:14:2;1413:1412:75;;2024:14:2;1413:1412:75;2024:14:2;;;;1413:1412:75;;;;;;;;2024:14:2;1413:1412:75;;2024:14:2;1413:1412:75;2024:14:2;1413:1412:75;2024:14:2;;1413:1412:75;;;;;;;;2024:14:2;1413:1412:75;;2024:14:2;1413:1412:75;2024:14:2;1413:1412:75;2024:14:2;;1413:1412:75;;;;;;;;2024:14:2;1413:1412:75;;2024:14:2;1413:1412:75;2024:14:2;1413:1412:75;2024:14:2;;1413:1412:75;;;;;;;;2024:14:2;1413:1412:75;;2024:14:2;1413:1412:75;2024:14:2;1413:1412:75;2024:14:2;;1413:1412:75;;;;;;;;2024:14:2;1413:1412:75;;2024:14:2;1413:1412:75;2024:14:2;1413:1412:75;2024:14:2;;1413:1412:75;;;;;;;;2024:14:2;1413:1412:75;;2024:14:2;1413:1412:75;2024:14:2;;;1413:1412:75;;;;;;;;;;;;;;;;;;;;2024:14:2;;;;1413:1412:75;;;2024:14:2;;1413:1412:75;2024:14:2;;1413:1412:75;;;;2024:14:2;;1413:1412:75;2024:14:2;;1413:1412:75;;;;2024:14:2;;1413:1412:75;2024:14:2;;1413:1412:75;;;;2024:14:2;;1413:1412:75;2024:14:2;;1413:1412:75;;;;2024:14:2;;1413:1412:75;2024:14:2;;1413:1412:75;;;;2024:14:2;;1413:1412:75;2024:14:2;;1413:1412:75;;;;2024:14:2;;1413:1412:75;;;;;;;;;;;;;;1243:204:4;1302:7;1413:1412:75;;;;;;;1325:14:4;:::o;1298:143::-;1413:1412:75;;;2024:14:2;1377:39:4;;1413:1412:75;1377:39:4;;;1413:1412:75;192:59:4;2024:14:2;;;;;1377:39:4;;;1413:1412:75;1377:39:4;;;;;;;1413:1412:75;1377:39:4;;;1298:143;1377:53;;;1370:60;:::o;1377:39::-;;;2024:14:2;1377:39:4;;2024:14:2;1377:39:4;;;;;;2024:14:2;1377:39:4;;;:::i;:::-;;;192:59;;;;;1377:39;;;;;;-1:-1:-1;1377:39:4;;;1413:1412:75;;2024:14:2;1413:1412:75;2024:14:2;;;;;2026:104:4;1413:1412:75;2099:24:4;;;;1413:1412:75;;2099:24:4;2024:14:2;2099:24:4;;1413:1412:75;;2099:24:4;;;1413:1412:75;2099:4;1413:1412;;;;-1:-1:-1;2099:24:4;;;1413:1412:75;2099:24:4;;;;;;;;2026:104;:::o;2099:24::-;-1:-1:-1;2099:24:4;;;:::i;4500:120::-;1413:1412:75;4589:24:4;;;;1413:1412:75;-1:-1:-1;1413:1412:75;;;;4589:24:4;;;;;2024:14:2;4589:24:4;;1413:1412:75;4589:24:4;;;1413:1412:75;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;4589:24:4;;1413:1412:75;4589:24:4;;;;;;;;4500:120;:::o","linkReferences":{}},"methodIdentifiers":{"IS_TEST()":"fa7626d4","excludeArtifacts()":"b5508aa9","excludeContracts()":"e20c9f71","excludeSelectors()":"b0464fdc","excludeSenders()":"1ed7831c","factory()":"c45a0155","failed()":"ba414fa6","setUp()":"0a9254e4","targetArtifactSelectors()":"66d9a9a0","targetArtifacts()":"85226c81","targetContracts()":"3f7286f4","targetInterfaces()":"2ade3880","targetSelectors()":"916a17c6","targetSenders()":"3e5e3c23","test_doNotForwardWithValue(bytes32,uint256)":"0301e1ce","test_forward(bytes32,bytes,bytes)":"3fbb7c19","test_forwardValueWithData(bytes32,bytes,bytes,uint256)":"7d8bb858"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"IS_TEST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"excludedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"factory\",\"outputs\":[{\"internalType\":\"contract Factory\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setUp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifactSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"artifact\",\"type\":\"string\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzArtifactSelector[]\",\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"targetedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetInterfaces\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"artifacts\",\"type\":\"string[]\"}],\"internalType\":\"struct StdInvariant.FuzzInterface[]\",\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"test_doNotForwardWithValue\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_return\",\"type\":\"bytes\"}],\"name\":\"test_forward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_return\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"test_forwardValueWithData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/Wallet.t.sol\":\"WalletTest\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/Base.sol\":{\"keccak256\":\"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d\",\"dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z\"]},\"lib/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe\",\"dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b\"]},\"lib/forge-std/src/StdChains.sol\":{\"keccak256\":\"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351\",\"dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm\"]},\"lib/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41\",\"dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK\"]},\"lib/forge-std/src/StdConstants.sol\":{\"keccak256\":\"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc\",\"dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r\"]},\"lib/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"lib/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391\",\"dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5\"]},\"lib/forge-std/src/StdJson.sol\":{\"keccak256\":\"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974\",\"dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3\"]},\"lib/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"lib/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57\",\"dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ\"]},\"lib/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"lib/forge-std/src/StdToml.sol\":{\"keccak256\":\"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3\",\"dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8\"]},\"lib/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138\",\"dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776\"]},\"lib/forge-std/src/Test.sol\":{\"keccak256\":\"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4\",\"dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG\"]},\"lib/forge-std/src/Vm.sol\":{\"keccak256\":\"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25\",\"license\":\"MIT OR Apache-2.0\",\"urls\":[\"bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c\",\"dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ\"]},\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]},\"lib/forge-std/src/console2.sol\":{\"keccak256\":\"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d\",\"dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ\"]},\"lib/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]},\"src/Factory.sol\":{\"keccak256\":\"0x5924fe583809e9c148d47c871866f6094599bb07a4d1fc2d60c814fda9c37f46\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e24d3575bf2606cd5f0f6da093e420118e018549eeb3a4ccb94f57c0e285e123\",\"dweb:/ipfs/QmRvWQt91YLJEgk5hgnRkPjDdB39tUHLYtxijYyXKdCm5J\"]},\"src/Wallet.sol\":{\"keccak256\":\"0xe01e9e937dd8d7572976ccc8ec3ec87e4a557069dafb05f85977a7b71f5c58d5\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2e9ab78d33655f8e822258dff3f2d5ad01e84f6dc90174840d5a283b8e6413c1\",\"dweb:/ipfs/QmNMyYe3C1fs3cxKmUZ3S9VU5EE4WVWPVcwiGbgvbS1vrH\"]},\"src/modules/Payload.sol\":{\"keccak256\":\"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990\",\"dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN\"]},\"src/utils/LibBytes.sol\":{\"keccak256\":\"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c\",\"dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3\"]},\"test/Wallet.t.sol\":{\"keccak256\":\"0x6276ce6037c97e099bc83dd09ac93571a28aafb6e4f6afda52eaa5474691f7c4\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d0368de9fefa4e57f6260dd353b82c3f66b9f7f4957a47c44a34fbaac41dc16e\",\"dweb:/ipfs/QmahBmo5iuyLUH88eU78m9JYaB1U8WbYix9aj5xkMiBai1\"]},\"test/utils/TestUtils.sol\":{\"keccak256\":\"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad\",\"dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log","anonymous":false},{"inputs":[{"internalType":"address","name":"","type":"address","indexed":false}],"type":"event","name":"log_address","anonymous":false},{"inputs":[{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"log_bytes","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32","indexed":false}],"type":"event","name":"log_bytes32","anonymous":false},{"inputs":[{"internalType":"int256","name":"","type":"int256","indexed":false}],"type":"event","name":"log_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address","name":"val","type":"address","indexed":false}],"type":"event","name":"log_named_address","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes","name":"val","type":"bytes","indexed":false}],"type":"event","name":"log_named_bytes","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes32","name":"val","type":"bytes32","indexed":false}],"type":"event","name":"log_named_bytes32","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false}],"type":"event","name":"log_named_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"string","name":"val","type":"string","indexed":false}],"type":"event","name":"log_named_string","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false}],"type":"event","name":"log_named_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log_string","anonymous":false},{"inputs":[{"internalType":"uint256","name":"","type":"uint256","indexed":false}],"type":"event","name":"log_uint","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"logs","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"IS_TEST","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeArtifacts","outputs":[{"internalType":"string[]","name":"excludedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeContracts","outputs":[{"internalType":"address[]","name":"excludedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"excludedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSenders","outputs":[{"internalType":"address[]","name":"excludedSenders_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"factory","outputs":[{"internalType":"contract Factory","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"failed","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"setUp"},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifactSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzArtifactSelector[]","name":"targetedArtifactSelectors_","type":"tuple[]","components":[{"internalType":"string","name":"artifact","type":"string"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifacts","outputs":[{"internalType":"string[]","name":"targetedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetContracts","outputs":[{"internalType":"address[]","name":"targetedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetInterfaces","outputs":[{"internalType":"struct StdInvariant.FuzzInterface[]","name":"targetedInterfaces_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"string[]","name":"artifacts","type":"string[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"targetedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSenders","outputs":[{"internalType":"address[]","name":"targetedSenders_","type":"address[]"}]},{"inputs":[{"internalType":"bytes32","name":"_salt","type":"bytes32"},{"internalType":"uint256","name":"_value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"test_doNotForwardWithValue"},{"inputs":[{"internalType":"bytes32","name":"_salt","type":"bytes32"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes","name":"_return","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"test_forward"},{"inputs":[{"internalType":"bytes32","name":"_salt","type":"bytes32"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes","name":"_return","type":"bytes"},{"internalType":"uint256","name":"_value","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"test_forwardValueWithData"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"test/Wallet.t.sol":"WalletTest"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/Base.sol":{"keccak256":"0xa3735a6618a3014e42bb4329ad143e3b2c59cd95094350202e4c4a06c9d585dd","urls":["bzz-raw://eef9db48d94726ec3d3fa3a84a8d520903705190f7ee7a04a065335a6aeeac4d","dweb:/ipfs/QmSWmNny7TkzyqRPjGdpERAJuBwwznrGPLUqS4DZy5fX5z"],"license":"MIT"},"lib/forge-std/src/StdAssertions.sol":{"keccak256":"0x4584f551c3a875c26423c1e50a77179bc2f9c9c1ee6d0f0c6be0f89ca5ee8270","urls":["bzz-raw://ef118876a862b60ba8a6612b8b3f3a6c226e11a0071a2e9695f021586d1bfdbe","dweb:/ipfs/QmXd2vD91PkvoFWasFkgbDi89PctmgsHVxGvGNyhjmRK2b"],"license":"MIT"},"lib/forge-std/src/StdChains.sol":{"keccak256":"0xd3edaf57db178f839d97ccee0009c2b7b20f78c2adca9028a6013acb8d5b4c5e","urls":["bzz-raw://0f17329ac1d25d3e6657ca240dee0a3f9b2cf22a64a05b87dac15252dee74351","dweb:/ipfs/QmPHxkEwgVpQNbU52s58RmmegrkYGj8bNKTVSW8rZm3dBm"],"license":"MIT"},"lib/forge-std/src/StdCheats.sol":{"keccak256":"0x0fa6ec03602648b62cce41aab2096e6b7e052f2846075d967b6958dd586db746","urls":["bzz-raw://cd84e2ca9c1eaed6b76768cc12bb8c1af8289170ea8b7706f58d516460d79c41","dweb:/ipfs/QmQ7BK7co6DE4eWUqMyv11s5eHYkS1tyx8tDSZGZVtf2aK"],"license":"MIT"},"lib/forge-std/src/StdConstants.sol":{"keccak256":"0x319ccdabfa2c0b2428301445873270ffea20f0e039d4fd5e6eeba65158e4e534","urls":["bzz-raw://b633f9d3a719e1d035ce7daa6cc051ddf89a72d34200d14cec37728e245cdabc","dweb:/ipfs/QmRP7HQJpHMx1CsFrY8tXVVx1DQmi2dcb2BoGfiWaA923r"],"license":"MIT"},"lib/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"lib/forge-std/src/StdInvariant.sol":{"keccak256":"0x4dab3021edfa9511bbdd80c48f060ef62eaf457f99eaf841f561fc2557d9a08d","urls":["bzz-raw://07668628673174cf8f27f8f4e1f862bab775013ec247eb34f698c5005f229391","dweb:/ipfs/QmPJsiiYwmCZXMsHmQv5tg8VF3CAhNdat7WnKLTWZZH2v5"],"license":"MIT"},"lib/forge-std/src/StdJson.sol":{"keccak256":"0xbc0132abe1c2accc2867c0f03667afffdf92f3e95a581bb03c9557eaa38ea500","urls":["bzz-raw://eb6fab37dc73c219cfbb7b4f4998bcf7677ca5397a867e850f40232192073974","dweb:/ipfs/QmUHsbVdp9SKmgek7ZfPcLTKrpZFXpqaqt4sVejzxGEQL3"],"license":"MIT"},"lib/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"lib/forge-std/src/StdStorage.sol":{"keccak256":"0xb91ab24383a5872b894fc93325eef1add6cbbf981628f18e860068bf88bb7dcc","urls":["bzz-raw://2651e33b9ac8fc5803ed0a43078c1bf4fa90a0b0347aafd95776b02daccdcc57","dweb:/ipfs/QmbdRyPuGJdZgnCuMnp7c1WsBo1Spf7j1KMmws1Z5rd4BQ"],"license":"MIT"},"lib/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"lib/forge-std/src/StdToml.sol":{"keccak256":"0x58a72c765ed3f7ff6b105509689658795b8a3739b8931772a497155878381861","urls":["bzz-raw://b4a3746f4fabaeb980bd77d9e091d3904ee38a6c0e191bfa8ba6874c6f8558a3","dweb:/ipfs/QmUfFDMEn461FgGEXt5HicyGD54sc28sLaQ9JRWDMBKed8"],"license":"MIT"},"lib/forge-std/src/StdUtils.sol":{"keccak256":"0x7274081e11c05164fd8eadde4de8305c033e58a43008dea58065f3170ccf0737","urls":["bzz-raw://e9801614b6c9d3e472982e6cc68f5f1ad03682f84eafb686be65633c7132d138","dweb:/ipfs/QmcQSUcrm2A7XuektnxJjvYGmZtBeA6LKPxCXRqdXBX776"],"license":"MIT"},"lib/forge-std/src/Test.sol":{"keccak256":"0x3dda6083a83dfa3e8526e97bcc28e862ee2442dd58fe94d5c426d65b8e38f73c","urls":["bzz-raw://33f8c02e4dabdab86a6825125856446a8657eacd712318b51b7818e4a6f6e3f4","dweb:/ipfs/QmRKSjVnrk54yr8wTK2e6QxRjiuba2H8HJSKunHAkdo7RG"],"license":"MIT"},"lib/forge-std/src/Vm.sol":{"keccak256":"0xaae88142a348064677cf81169ea0ca706be3e99e2a0f13a01878ff8d52cf6b25","urls":["bzz-raw://da4fb0ed1b31381c7e60ee386acc72796e8a8325c83739ec9a3678e2f841073c","dweb:/ipfs/Qmb4MU6FpAi8Wt5kUQ3wa7ooHnfMVbdd9zuvnqbTehLmxJ"],"license":"MIT OR Apache-2.0"},"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"},"lib/forge-std/src/console2.sol":{"keccak256":"0x3b8fe79f48f065a4e4d35362171304a33784c3a90febae5f2787805a438de12f","urls":["bzz-raw://61de63af08803549299e68b6e6e88d40f3c5afac450e4ee0a228c66a61ba003d","dweb:/ipfs/QmWVoQ5rrVxnczD4ZZoPbD4PC9Z3uExJtzjD4awTqd14MZ"],"license":"MIT"},"lib/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"},"src/Factory.sol":{"keccak256":"0x5924fe583809e9c148d47c871866f6094599bb07a4d1fc2d60c814fda9c37f46","urls":["bzz-raw://e24d3575bf2606cd5f0f6da093e420118e018549eeb3a4ccb94f57c0e285e123","dweb:/ipfs/QmRvWQt91YLJEgk5hgnRkPjDdB39tUHLYtxijYyXKdCm5J"],"license":"Apache-2.0"},"src/Wallet.sol":{"keccak256":"0xe01e9e937dd8d7572976ccc8ec3ec87e4a557069dafb05f85977a7b71f5c58d5","urls":["bzz-raw://2e9ab78d33655f8e822258dff3f2d5ad01e84f6dc90174840d5a283b8e6413c1","dweb:/ipfs/QmNMyYe3C1fs3cxKmUZ3S9VU5EE4WVWPVcwiGbgvbS1vrH"],"license":"Apache-2.0"},"src/modules/Payload.sol":{"keccak256":"0x25066fa78d12d0d73d463b97b37528291f3d4d60ca642247441538b83d6597d6","urls":["bzz-raw://c1a17c40bb46692036743eadfeb027912e66ba3be6f5f697b9d99b845ad67990","dweb:/ipfs/QmWH4XCkkCMhfhkMANHfew4VUCCYYcjX4TnkXy1fuiP1CN"],"license":"Apache-2.0"},"src/utils/LibBytes.sol":{"keccak256":"0x4fe0b4786b2157e12384b90ae9daa1009b74b2547a8a24b800a8b998278c874b","urls":["bzz-raw://065129e32d1a318e89fb7587e136c33177a7848393f9055c0ac601b84741cd8c","dweb:/ipfs/QmVWucfHSHRJriRFNoJqoeDcVB4fDfqbccM8KPBmwcxVu3"],"license":"Apache-2.0"},"test/Wallet.t.sol":{"keccak256":"0x6276ce6037c97e099bc83dd09ac93571a28aafb6e4f6afda52eaa5474691f7c4","urls":["bzz-raw://d0368de9fefa4e57f6260dd353b82c3f66b9f7f4957a47c44a34fbaac41dc16e","dweb:/ipfs/QmahBmo5iuyLUH88eU78m9JYaB1U8WbYix9aj5xkMiBai1"],"license":"Apache-2.0"},"test/utils/TestUtils.sol":{"keccak256":"0x0300f0400bb5243bb96a4405dd9075e83e28d93473fa8977f4d4ed1ab8c74e79","urls":["bzz-raw://05f3f31e14f2576ca3709c742b5d61a06913573fa210034ba59daaa2b264e1ad","dweb:/ipfs/QmSGSEUrURfGRYRLsyguror9TDyrYcaszmSereszakqCUa"],"license":"Apache-2.0"}},"version":1},"id":75} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/WebAuthn.sol/WebAuthn.json b/contracts/artifacts/wallet-contracts-v3/WebAuthn.sol/WebAuthn.json new file mode 100644 index 00000000..88d1fb29 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/WebAuthn.sol/WebAuthn.json @@ -0,0 +1 @@ +{"abi":[],"bytecode":{"object":"0x60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea26469706673582212208cbc02078804b8eaacc6daa2bdd87bd3d378101121cbe5df057cb24fc31f159064736f6c634300081c0033","sourceMap":"481:15507:71:-:0;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x600080fdfea26469706673582212208cbc02078804b8eaacc6daa2bdd87bd3d378101121cbe5df057cb24fc31f159064736f6c634300081c0033","sourceMap":"481:15507:71:-:0;;","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"Solady (https://github.com/vectorized/solady/blob/main/src/utils/WebAuthn.sol)Modified from Daimo WebAuthn (https://github.com/daimo-eth/p256-verifier/blob/master/src/WebAuthn.sol)Modified from Coinbase WebAuthn (https://github.com/base-org/webauthn-sol/blob/main/src/WebAuthn.sol)\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"WebAuthn helper.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/utils/WebAuthn.sol\":\"WebAuthn\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"src/utils/Base64.sol\":{\"keccak256\":\"0xcac0262a4cd9b8ad3097dbbeeddb715d1bb00de216428328044f2543ef1b7dd1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e53e555db05754733333946af30995887e7274d617744b1205f3cd8648fab3b4\",\"dweb:/ipfs/Qme9hZfFyKCMLNWqA1vK3a82k7kXznkpid4FeBFQdS67WR\"]},\"src/utils/P256.sol\":{\"keccak256\":\"0x15f366eef2850bb0e8a608e51f66c1caed19841631000eedc05ff34a0de38d7e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5c9403d13cecb87a232d241226bc921667d958bc68876d012e7a68a2f0df7fb7\",\"dweb:/ipfs/QmeUnWx58EzjRTmBjLAdMzswDjvuAcThP5gaUWQximCukH\"]},\"src/utils/WebAuthn.sol\":{\"keccak256\":\"0x6f825387da39964728d423244ed952709cfdeba164ca7d88a12922aa8159e52b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c8917c9c76d63df994c860f96be1d1ae68620105a35962245ed63d397048bb2e\",\"dweb:/ipfs/QmbHxKsUhc2nEyBinPSXAR9pMjLChKW2wpc9XYfddXU3rG\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/utils/WebAuthn.sol":"WebAuthn"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"src/utils/Base64.sol":{"keccak256":"0xcac0262a4cd9b8ad3097dbbeeddb715d1bb00de216428328044f2543ef1b7dd1","urls":["bzz-raw://e53e555db05754733333946af30995887e7274d617744b1205f3cd8648fab3b4","dweb:/ipfs/Qme9hZfFyKCMLNWqA1vK3a82k7kXznkpid4FeBFQdS67WR"],"license":"MIT"},"src/utils/P256.sol":{"keccak256":"0x15f366eef2850bb0e8a608e51f66c1caed19841631000eedc05ff34a0de38d7e","urls":["bzz-raw://5c9403d13cecb87a232d241226bc921667d958bc68876d012e7a68a2f0df7fb7","dweb:/ipfs/QmeUnWx58EzjRTmBjLAdMzswDjvuAcThP5gaUWQximCukH"],"license":"MIT"},"src/utils/WebAuthn.sol":{"keccak256":"0x6f825387da39964728d423244ed952709cfdeba164ca7d88a12922aa8159e52b","urls":["bzz-raw://c8917c9c76d63df994c860f96be1d1ae68620105a35962245ed63d397048bb2e","dweb:/ipfs/QmbHxKsUhc2nEyBinPSXAR9pMjLChKW2wpc9XYfddXU3rG"],"license":"MIT"}},"version":1},"id":71} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/build-info/48a3a4b8605b586f28a6a347efbfe5d8.json b/contracts/artifacts/wallet-contracts-v3/build-info/48a3a4b8605b586f28a6a347efbfe5d8.json new file mode 100644 index 00000000..e7f189af --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/build-info/48a3a4b8605b586f28a6a347efbfe5d8.json @@ -0,0 +1 @@ +{"id":"48a3a4b8605b586f28a6a347efbfe5d8","source_id_to_path":{"0":"lib/erc2470-libs/script/SingletonDeployer.s.sol","1":"lib/erc2470-libs/src/ISingletonFactory.sol","2":"lib/forge-std/src/Base.sol","3":"lib/forge-std/src/Script.sol","4":"lib/forge-std/src/StdAssertions.sol","5":"lib/forge-std/src/StdChains.sol","6":"lib/forge-std/src/StdCheats.sol","7":"lib/forge-std/src/StdConstants.sol","8":"lib/forge-std/src/StdError.sol","9":"lib/forge-std/src/StdInvariant.sol","10":"lib/forge-std/src/StdJson.sol","11":"lib/forge-std/src/StdMath.sol","12":"lib/forge-std/src/StdStorage.sol","13":"lib/forge-std/src/StdStyle.sol","14":"lib/forge-std/src/StdToml.sol","15":"lib/forge-std/src/StdUtils.sol","16":"lib/forge-std/src/Test.sol","17":"lib/forge-std/src/Vm.sol","18":"lib/forge-std/src/console.sol","19":"lib/forge-std/src/console2.sol","20":"lib/forge-std/src/interfaces/IMulticall3.sol","21":"lib/forge-std/src/safeconsole.sol","22":"script/Deploy.s.sol","23":"script/DeployMocks.s.sol","24":"src/Estimator.sol","25":"src/Factory.sol","26":"src/Guest.sol","27":"src/Simulator.sol","28":"src/Stage1Module.sol","29":"src/Stage2Module.sol","30":"src/Wallet.sol","31":"src/extensions/passkeys/Passkeys.sol","32":"src/extensions/recovery/Recovery.sol","33":"src/extensions/sessions/SessionErrors.sol","34":"src/extensions/sessions/SessionManager.sol","35":"src/extensions/sessions/SessionSig.sol","36":"src/extensions/sessions/explicit/ExplicitSessionManager.sol","37":"src/extensions/sessions/explicit/IExplicitSessionManager.sol","38":"src/extensions/sessions/explicit/Permission.sol","39":"src/extensions/sessions/explicit/PermissionValidator.sol","40":"src/extensions/sessions/implicit/Attestation.sol","41":"src/extensions/sessions/implicit/ISignalsImplicitMode.sol","42":"src/extensions/sessions/implicit/ImplicitSessionManager.sol","43":"src/modules/Calls.sol","44":"src/modules/ERC4337v07.sol","45":"src/modules/Hooks.sol","46":"src/modules/Implementation.sol","47":"src/modules/Nonce.sol","48":"src/modules/Payload.sol","49":"src/modules/Storage.sol","50":"src/modules/auth/BaseAuth.sol","51":"src/modules/auth/BaseSig.sol","52":"src/modules/auth/SelfAuth.sol","53":"src/modules/auth/Stage1Auth.sol","54":"src/modules/auth/Stage2Auth.sol","55":"src/modules/interfaces/IAccount.sol","56":"src/modules/interfaces/IAuth.sol","57":"src/modules/interfaces/ICheckpointer.sol","58":"src/modules/interfaces/IDelegatedExtension.sol","59":"src/modules/interfaces/IERC1155Receiver.sol","60":"src/modules/interfaces/IERC1271.sol","61":"src/modules/interfaces/IERC223Receiver.sol","62":"src/modules/interfaces/IERC721Receiver.sol","63":"src/modules/interfaces/IERC777Receiver.sol","64":"src/modules/interfaces/IEntryPoint.sol","65":"src/modules/interfaces/IPartialAuth.sol","66":"src/modules/interfaces/ISapient.sol","67":"src/utils/Base64.sol","68":"src/utils/LibBytes.sol","69":"src/utils/LibOptim.sol","70":"src/utils/P256.sol","71":"src/utils/WebAuthn.sol","72":"test/Factory.t.sol","73":"test/Guest.t.sol","74":"test/Stage1Module.t.sol","75":"test/Wallet.t.sol","76":"test/extensions/passkeys/Passkeys.t.sol","77":"test/extensions/recovery/Recovery.t.sol","78":"test/extensions/sessions/Attestation.t.sol","79":"test/extensions/sessions/Permission.t.sol","80":"test/extensions/sessions/SessionManager.t.sol","81":"test/extensions/sessions/SessionSig.t.sol","82":"test/extensions/sessions/SessionTestBase.sol","83":"test/extensions/sessions/explicit/ExplicitSessionManager.t.sol","84":"test/extensions/sessions/explicit/PermissionValidator.t.sol","85":"test/extensions/sessions/implicit/ImplicitSessionManager.t.sol","86":"test/mocks/Emitter.sol","87":"test/mocks/MockPayableReceiver.sol","88":"test/modules/BaseSig.t.sol","89":"test/modules/Calls.t.sol","90":"test/modules/ERC4337v07.t.sol","91":"test/modules/Hooks.t.sol","92":"test/modules/Implementation.t.sol","93":"test/modules/Nonce.t.sol","94":"test/modules/Payload.t.sol","95":"test/utils/Base64.t.sol","96":"test/utils/LibBytes.t.sol","97":"test/utils/PrimitivesRPC.sol","98":"test/utils/TestUtils.sol"},"language":"Solidity"} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/console.sol/console.json b/contracts/artifacts/wallet-contracts-v3/console.sol/console.json new file mode 100644 index 00000000..6a37f8e5 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/console.sol/console.json @@ -0,0 +1 @@ +{"abi":[],"bytecode":{"object":"0x60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea2646970667358221220f2c71a7f1cdbe776700b93d73a35baad0b8aa5f72c7dc2b248a01106ed97ab3264736f6c634300081c0033","sourceMap":"66:69203:18:-:0;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x600080fdfea2646970667358221220f2c71a7f1cdbe776700b93d73a35baad0b8aa5f72c7dc2b248a01106ed97ab3264736f6c634300081c0033","sourceMap":"66:69203:18:-:0;;","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/forge-std/src/console.sol\":\"console\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57\",\"dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"lib/forge-std/src/console.sol":"console"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/console.sol":{"keccak256":"0x4bbf47eb762cef93729d6ef15e78789957147039b113e5d4df48e3d3fd16d0f5","urls":["bzz-raw://af9e3a7c3d82fb5b10b57ca4d1a82f2acbef80c077f6f6ef0cc0187c7bfd9f57","dweb:/ipfs/QmR9VzmnBDJpgiDP6CHT6truehukF9HpYvuP6kRiJbDwPP"],"license":"MIT"}},"version":1},"id":18} \ No newline at end of file diff --git a/contracts/artifacts/wallet-contracts-v3/safeconsole.sol/safeconsole.json b/contracts/artifacts/wallet-contracts-v3/safeconsole.sol/safeconsole.json new file mode 100644 index 00000000..ce967d40 --- /dev/null +++ b/contracts/artifacts/wallet-contracts-v3/safeconsole.sol/safeconsole.json @@ -0,0 +1 @@ +{"abi":[],"bytecode":{"object":"0x60808060405234601757603a9081601d823930815050f35b600080fdfe600080fdfea2646970667358221220d02775d75b30349742796e88012d02d54482e9285989f60443e587ab8c1861b664736f6c634300081c0033","sourceMap":"163:427371:21:-:0;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x600080fdfea2646970667358221220d02775d75b30349742796e88012d02d54482e9285989f60443e587ab8c1861b664736f6c634300081c0033","sourceMap":"163:427371:21:-:0;;","linkReferences":{}},"methodIdentifiers":{},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.28+commit.7893614a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"author\":\"philogy \",\"details\":\"Code generated automatically by script.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/forge-std/src/safeconsole.sol\":\"safeconsole\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":4294967295},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":erc2470-libs/=lib/erc2470-libs/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"],\"viaIR\":true},\"sources\":{\"lib/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab\",\"dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.28+commit.7893614a"},"language":"Solidity","output":{"abi":[],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","erc2470-libs/=lib/erc2470-libs/","erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/","forge-std/=lib/forge-std/src/","halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/","openzeppelin-contracts/=lib/openzeppelin-contracts/"],"optimizer":{"enabled":true,"runs":4294967295},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"lib/forge-std/src/safeconsole.sol":"safeconsole"},"evmVersion":"paris","libraries":{},"viaIR":true},"sources":{"lib/forge-std/src/safeconsole.sol":{"keccak256":"0xbef9786cb49d3eade757bad87568c49c8c8f35721f0193c95ffb055d9e466e11","urls":["bzz-raw://3bafd2b0b2d28068d329f95ea8a1fbce3719c257fcb863fc01abcbafd8d531ab","dweb:/ipfs/QmUeaFjKWTVDBsHVfSob4mwt6A5hTnKDz22HaUXeZhypa3"],"license":"MIT"}},"version":1},"id":21} \ No newline at end of file diff --git a/contracts/contracts.go b/contracts/contracts.go index 41b0458d..57ab38b5 100644 --- a/contracts/contracts.go +++ b/contracts/contracts.go @@ -6,6 +6,7 @@ import ( "github.com/0xsequence/ethkit/ethartifact" "github.com/0xsequence/ethkit/ethcontract" "github.com/0xsequence/ethkit/go-ethereum/common" + "github.com/0xsequence/ethkit/go-ethereum/common/hexutil" "github.com/0xsequence/go-sequence/contracts/gen/gasestimator" "github.com/0xsequence/go-sequence/contracts/gen/ierc1271" @@ -16,18 +17,25 @@ import ( seqsale721v0 "github.com/0xsequence/go-sequence/contracts/gen/seq_sale/erc721v0" "github.com/0xsequence/go-sequence/contracts/gen/supply" "github.com/0xsequence/go-sequence/contracts/gen/tokens" - walletfactory1 "github.com/0xsequence/go-sequence/contracts/gen/v1/walletfactory" - walletgasestimator1 "github.com/0xsequence/go-sequence/contracts/gen/v1/walletgasestimator" - walletguest1 "github.com/0xsequence/go-sequence/contracts/gen/v1/walletguest" - walletmain1 "github.com/0xsequence/go-sequence/contracts/gen/v1/walletmain" - walletupgradable1 "github.com/0xsequence/go-sequence/contracts/gen/v1/walletupgradable" - walletutils1 "github.com/0xsequence/go-sequence/contracts/gen/v1/walletutils" - walletfactory2 "github.com/0xsequence/go-sequence/contracts/gen/v2/walletfactory" - walletgasestimator2 "github.com/0xsequence/go-sequence/contracts/gen/v2/walletgasestimator" - walletguest2 "github.com/0xsequence/go-sequence/contracts/gen/v2/walletguest" - walletmain2 "github.com/0xsequence/go-sequence/contracts/gen/v2/walletmain" - walletupgradable2 "github.com/0xsequence/go-sequence/contracts/gen/v2/walletupgradable" - walletutils2 "github.com/0xsequence/go-sequence/contracts/gen/v2/walletutils" + v1Factory "github.com/0xsequence/go-sequence/contracts/gen/v1/walletfactory" + v1Estimator "github.com/0xsequence/go-sequence/contracts/gen/v1/walletgasestimator" + v1Guest "github.com/0xsequence/go-sequence/contracts/gen/v1/walletguest" + v1Main "github.com/0xsequence/go-sequence/contracts/gen/v1/walletmain" + v1Upgradable "github.com/0xsequence/go-sequence/contracts/gen/v1/walletupgradable" + v1Utils "github.com/0xsequence/go-sequence/contracts/gen/v1/walletutils" + v2Factory "github.com/0xsequence/go-sequence/contracts/gen/v2/walletfactory" + v2Estimator "github.com/0xsequence/go-sequence/contracts/gen/v2/walletgasestimator" + v2Guest "github.com/0xsequence/go-sequence/contracts/gen/v2/walletguest" + v2Main "github.com/0xsequence/go-sequence/contracts/gen/v2/walletmain" + v2Upgradable "github.com/0xsequence/go-sequence/contracts/gen/v2/walletupgradable" + v2Utils "github.com/0xsequence/go-sequence/contracts/gen/v2/walletutils" + v3Estimator "github.com/0xsequence/go-sequence/contracts/gen/v3/walletestimator" + v3Factory "github.com/0xsequence/go-sequence/contracts/gen/v3/walletfactory" + v3Guest "github.com/0xsequence/go-sequence/contracts/gen/v3/walletguest" + v3Simulator "github.com/0xsequence/go-sequence/contracts/gen/v3/walletsimulator" + v3Stage1 "github.com/0xsequence/go-sequence/contracts/gen/v3/walletstage1" + v3Stage2 "github.com/0xsequence/go-sequence/contracts/gen/v3/walletstage2" + "github.com/0xsequence/go-sequence/contracts/gen/valueforwarder" ) var GasEstimator, @@ -48,6 +56,7 @@ var GasEstimator, SeqSale721V0, SeqSale1155V0, SeqSale1155V1, + ValueForwarder, _ ethartifact.Artifact var V1 struct { @@ -58,6 +67,7 @@ var V1 struct { WalletUtils ethartifact.Artifact WalletRequireFreshSigner ethartifact.Artifact WalletGasEstimator ethartifact.Artifact + CreationCode []byte } var V2 struct { @@ -67,29 +77,54 @@ var V2 struct { WalletGuestModule ethartifact.Artifact WalletUtils ethartifact.Artifact WalletGasEstimator ethartifact.Artifact + CreationCode []byte } -//go:embed artifacts/erc1155/mocks/ERC20Mock.sol/ERC20Mock.json -var artifact_erc20mock string +var V3 struct { + WalletFactory ethartifact.Artifact + WalletStage1Module ethartifact.Artifact + WalletStage2Module ethartifact.Artifact + WalletGuestModule ethartifact.Artifact + WalletEstimator ethartifact.Artifact + WalletSimulator ethartifact.Artifact + CreationCode []byte +} + +var ( + //go:embed artifacts/erc1155/mocks/ERC20Mock.sol/ERC20Mock.json + artifact_erc20mock string +) func init() { - V1.WalletFactory = artifact("WALLET_FACTORY", walletfactory1.WalletFactoryABI, walletfactory1.WalletFactoryBin) - V1.WalletMainModule = artifact("WALLET_MAIN", walletmain1.WalletMainABI, walletmain1.WalletMainBin) - V1.WalletMainModuleUpgradable = artifact("WALLET_UPGRADABLE", walletupgradable1.WalletUpgradableABI, walletupgradable1.WalletUpgradableBin) - V1.WalletGuestModule = artifact("WALLET_GUEST", walletguest1.WalletGuestABI, walletguest1.WalletGuestBin) - V1.WalletUtils = artifact("WALLET_UTILS", walletutils1.WalletUtilsABI, walletutils1.WalletUtilsBin) - V1.WalletRequireFreshSigner = artifact("WALLET_REQUIRE_FRESH_SIGNER", walletutils1.WalletRequireFreshSignerABI, walletutils1.WalletRequireFreshSignerBin) - V1.WalletGasEstimator = artifact("WALLET_GAS_ESTIMATOR", walletgasestimator1.WalletGasEstimatorABI, walletgasestimator1.WalletGasEstimatorBin, walletgasestimator1.WalletGasEstimatorDeployedBin) - - V2.WalletFactory = artifact("WALLET_FACTORY", walletfactory2.WalletFactoryABI, walletfactory2.WalletFactoryBin) - V2.WalletMainModule = artifact("WALLET_MAIN", walletmain2.WalletMainABI, walletmain2.WalletMainBin) - V2.WalletMainModuleUpgradable = artifact("WALLET_UPGRADABLE", walletupgradable2.WalletUpgradableABI, walletupgradable2.WalletUpgradableBin) - V2.WalletGuestModule = artifact("WALLET_GUEST", walletguest2.WalletGuestABI, walletguest2.WalletGuestBin) - V2.WalletUtils = artifact("WALLET_UTILS", walletutils2.WalletUtilsABI, walletutils2.WalletUtilsBin) - V2.WalletGasEstimator = artifact("WALLET_GAS_ESTIMATOR", walletgasestimator2.WalletGasEstimatorABI, walletgasestimator2.WalletGasEstimatorBin, walletgasestimator2.WalletGasEstimatorDeployedBin) + V1.WalletFactory = artifact("WALLET_FACTORY", v1Factory.WalletFactoryABI, v1Factory.WalletFactoryBin) + V1.WalletMainModule = artifact("WALLET_MAIN", v1Main.WalletMainABI, v1Main.WalletMainBin) + V1.WalletMainModuleUpgradable = artifact("WALLET_UPGRADABLE", v1Upgradable.WalletUpgradableABI, v1Upgradable.WalletUpgradableBin) + V1.WalletGuestModule = artifact("WALLET_GUEST", v1Guest.WalletGuestABI, v1Guest.WalletGuestBin) + V1.WalletUtils = artifact("WALLET_UTILS", v1Utils.WalletUtilsABI, v1Utils.WalletUtilsBin) + V1.WalletRequireFreshSigner = artifact("WALLET_REQUIRE_FRESH_SIGNER", v1Utils.WalletRequireFreshSignerABI, v1Utils.WalletRequireFreshSignerBin) + V1.WalletGasEstimator = artifact("WALLET_GAS_ESTIMATOR", v1Estimator.WalletGasEstimatorABI, v1Estimator.WalletGasEstimatorBin, v1Estimator.WalletGasEstimatorDeployedBin) + V1.CreationCode = hexutil.MustDecode("0x603a600e3d39601a805130553df3363d3d373d3d3d363d30545af43d82803e903d91601857fd5bf3") + + V2.WalletFactory = artifact("WALLET_FACTORY", v2Factory.WalletFactoryABI, v2Factory.WalletFactoryBin) + V2.WalletMainModule = artifact("WALLET_MAIN", v2Main.WalletMainABI, v2Main.WalletMainBin) + V2.WalletMainModuleUpgradable = artifact("WALLET_UPGRADABLE", v2Upgradable.WalletUpgradableABI, v2Upgradable.WalletUpgradableBin) + V2.WalletGuestModule = artifact("WALLET_GUEST", v2Guest.WalletGuestABI, v2Guest.WalletGuestBin) + V2.WalletUtils = artifact("WALLET_UTILS", v2Utils.WalletUtilsABI, v2Utils.WalletUtilsBin) + V2.WalletGasEstimator = artifact("WALLET_GAS_ESTIMATOR", v2Estimator.WalletGasEstimatorABI, v2Estimator.WalletGasEstimatorBin, v2Estimator.WalletGasEstimatorDeployedBin) + V2.CreationCode = hexutil.MustDecode("0x603a600e3d39601a805130553df3363d3d373d3d3d363d30545af43d82803e903d91601857fd5bf3") + + V3.WalletFactory = artifact("WALLET_FACTORY", v3Factory.WalletFactoryABI, v3Factory.WalletFactoryBin) + V3.WalletStage1Module = artifact("WALLET_STAGE_1", v3Stage1.WalletStage1ABI, v3Stage1.WalletStage1Bin) + V3.WalletStage2Module = artifact("WALLET_STAGE_2", v3Stage2.WalletStage2ABI, v3Stage2.WalletStage2Bin) + V3.WalletGuestModule = artifact("WALLET_GUEST", v3Guest.WalletGuestABI, v3Guest.WalletGuestBin) + V3.WalletEstimator = artifact("WALLET_ESTIMATOR", v3Estimator.WalletEstimatorABI, v3Estimator.WalletEstimatorBin, v3Estimator.WalletEstimatorDeployedBin) + V3.WalletSimulator = artifact("WALLET_SIMULATOR", v3Simulator.WalletSimulatorABI, v3Simulator.WalletSimulatorBin, v3Simulator.WalletSimulatorDeployedBin) + V3.CreationCode = hexutil.MustDecode("0x6041600e3d396021805130553df33d3d36153402601f57363d3d373d363d30545af43d82803e903d91601f57fd5bf3") GasEstimator = artifact("GAS_ESTIMATOR", gasestimator.GasEstimatorABI, gasestimator.GasEstimatorBin, gasestimator.GasEstimatorDeployedBin) + ValueForwarder = artifact("VALUE_FORWARDER", valueforwarder.ValueForwarderABI, valueforwarder.ValueForwarderBin) + IERC1271 = artifact("IERC1271", ierc1271.IERC1271ABI, "") IERC20 = artifact("IERC20", tokens.IERC20ABI, "") diff --git a/contracts/gen/gasestimator/gas_estimator.gen.go b/contracts/gen/gasestimator/gas_estimator.gen.go index 4c40b06c..bf099e0e 100644 --- a/contracts/gen/gasestimator/gas_estimator.gen.go +++ b/contracts/gen/gasestimator/gas_estimator.gen.go @@ -60,9 +60,6 @@ func DeployGasEstimator(auth *bind.TransactOpts, backend bind.ContractBackend) ( return address, tx, &GasEstimator{GasEstimatorCaller: GasEstimatorCaller{contract: contract}, GasEstimatorTransactor: GasEstimatorTransactor{contract: contract}, GasEstimatorFilterer: GasEstimatorFilterer{contract: contract}}, nil } -// GasEstimatorDeployedBin is the resulting bytecode of the created contract -const GasEstimatorDeployedBin = "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c80630eb34cd314610030575b600080fd5b61004361003e3660046100eb565b61005b565b60405161005293929190610189565b60405180910390f35b600060606000805a90508673ffffffffffffffffffffffffffffffffffffffff16868660405161008c929190610206565b6000604051808303816000865af19150503d80600081146100c9576040519150601f19603f3d011682016040523d82523d6000602084013e6100ce565b606091505b5090945092505a6100df9082610216565b91505093509350939050565b60008060006040848603121561010057600080fd5b833573ffffffffffffffffffffffffffffffffffffffff8116811461012457600080fd5b9250602084013567ffffffffffffffff8082111561014157600080fd5b818601915086601f83011261015557600080fd5b81358181111561016457600080fd5b87602082850101111561017657600080fd5b6020830194508093505050509250925092565b831515815260006020606081840152845180606085015260005b818110156101bf578681018301518582016080015282016101a3565b5060006080828601015260807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010192505050826040830152949350505050565b8183823760009101908152919050565b81810381811115610250577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9291505056fea26469706673582212206fceab4570410e5aaef6bf82e04a9e582054db6ef051e3d1376a3c3ddfe0d7e464736f6c63430008120033" - // GasEstimator is an auto generated Go binding around an Ethereum contract. type GasEstimator struct { GasEstimatorCaller // Read-only binding to the contract @@ -225,3 +222,6 @@ func (_GasEstimator *GasEstimatorSession) Estimate(_to common.Address, _data []b func (_GasEstimator *GasEstimatorTransactorSession) Estimate(_to common.Address, _data []byte) (*types.Transaction, error) { return _GasEstimator.Contract.Estimate(&_GasEstimator.TransactOpts, _to, _data) } + +// GasEstimatorDeployedBin is the resulting bytecode of the created contract +const GasEstimatorDeployedBin = "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c80630eb34cd314610030575b600080fd5b61004361003e3660046100eb565b61005b565b60405161005293929190610189565b60405180910390f35b600060606000805a90508673ffffffffffffffffffffffffffffffffffffffff16868660405161008c929190610206565b6000604051808303816000865af19150503d80600081146100c9576040519150601f19603f3d011682016040523d82523d6000602084013e6100ce565b606091505b5090945092505a6100df9082610216565b91505093509350939050565b60008060006040848603121561010057600080fd5b833573ffffffffffffffffffffffffffffffffffffffff8116811461012457600080fd5b9250602084013567ffffffffffffffff8082111561014157600080fd5b818601915086601f83011261015557600080fd5b81358181111561016457600080fd5b87602082850101111561017657600080fd5b6020830194508093505050509250925092565b831515815260006020606081840152845180606085015260005b818110156101bf578681018301518582016080015282016101a3565b5060006080828601015260807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010192505050826040830152949350505050565b8183823760009101908152919050565b81810381811115610250577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9291505056fea26469706673582212206fceab4570410e5aaef6bf82e04a9e582054db6ef051e3d1376a3c3ddfe0d7e464736f6c63430008120033" diff --git a/contracts/gen/gen.go b/contracts/gen/gen.go index 03de6c1d..6f7768fd 100644 --- a/contracts/gen/gen.go +++ b/contracts/gen/gen.go @@ -8,7 +8,7 @@ //go:generate go run github.com/0xsequence/ethkit/cmd/ethkit abigen --pkg=walletutils --type=WalletUtils --outFile=./v1/walletutils/wallet_utils.gen.go --artifactsFile=../artifacts/wallet-contracts/modules/utils/SequenceUtils.sol/SequenceUtils.json //go:generate go run github.com/0xsequence/ethkit/cmd/ethkit abigen --pkg=walletutils --type=WalletRequireFreshSigner --outFile=./v1/walletutils/wallet_require_fresh_signer.gen.go --artifactsFile=../artifacts/wallet-contracts/modules/utils/libs/RequireFreshSigner.sol/RequireFreshSigner.json -//go:generate go run github.com/0xsequence/ethkit/cmd/ethkit abigen --pkg=walletgasestimator --type=WalletGasEstimator --outFile=./v1/walletgasestimator/wallet_gas_estimator.gen.go --artifactsFile=../artifacts/wallet-contracts/modules/MainModuleGasEstimation.sol/MainModuleGasEstimation.json --includeDeployed=true +//go:generate go run github.com/0xsequence/ethkit/cmd/ethkit abigen --pkg=walletgasestimator --type=WalletGasEstimator --outFile=./v1/walletgasestimator/wallet_gas_estimator.gen.go --artifactsFile=../artifacts/wallet-contracts/modules/MainModuleGasEstimation.sol/MainModuleGasEstimation.json --includeDeployedBin=true // // sequence wallet-contracts v2 @@ -21,8 +21,21 @@ //go:generate go run github.com/0xsequence/ethkit/cmd/ethkit abigen --pkg=walletcallmock --type=CallReceiverMock --outFile=./walletcallmock/wallet_call_mock.gen.go --artifactsFile=../artifacts/wallet-contracts-v2/mocks/CallReceiverMock.sol/CallReceiverMock.json -//go:generate go run github.com/0xsequence/ethkit/cmd/ethkit abigen --pkg=walletgasestimator --type=WalletGasEstimator --outFile=./v2/walletgasestimator/wallet_gas_estimator.gen.go --artifactsFile=../artifacts/wallet-contracts-v2/modules/MainModuleGasEstimation.sol/MainModuleGasEstimation.json --includeDeployed=true -//go:generate go run github.com/0xsequence/ethkit/cmd/ethkit abigen --pkg=gasestimator --type=GasEstimator --outFile=./gasestimator/gas_estimator.gen.go --artifactsFile=../artifacts/wallet-contracts-v2/modules/utils/GasEstimator.sol/GasEstimator.json --includeDeployed=true +//go:generate go run github.com/0xsequence/ethkit/cmd/ethkit abigen --pkg=walletgasestimator --type=WalletGasEstimator --outFile=./v2/walletgasestimator/wallet_gas_estimator.gen.go --artifactsFile=../artifacts/wallet-contracts-v2/modules/MainModuleGasEstimation.sol/MainModuleGasEstimation.json --includeDeployedBin +//go:generate go run github.com/0xsequence/ethkit/cmd/ethkit abigen --pkg=gasestimator --type=GasEstimator --outFile=./gasestimator/gas_estimator.gen.go --artifactsFile=../artifacts/wallet-contracts-v2/modules/utils/GasEstimator.sol/GasEstimator.json --includeDeployedBin + +// +// sequence wallet-contracts v3 +// +//go:generate go run github.com/0xsequence/ethkit/cmd/ethkit abigen --pkg=walletfactory --type=WalletFactory --outFile=./v3/walletfactory/wallet_factory.gen.go --artifactsFile=../artifacts/wallet-contracts-v3/Factory.sol/Factory.json +//go:generate go run github.com/0xsequence/ethkit/cmd/ethkit abigen --pkg=walletstage1 --type=WalletStage1 --outFile=./v3/walletstage1/wallet_stage1.gen.go --artifactsFile=../artifacts/wallet-contracts-v3/Stage1Module.sol/Stage1Module.json +//go:generate go run github.com/0xsequence/ethkit/cmd/ethkit abigen --pkg=walletstage2 --type=WalletStage2 --outFile=./v3/walletstage2/wallet_stage2.gen.go --artifactsFile=../artifacts/wallet-contracts-v3/Stage2Module.sol/Stage2Module.json +//go:generate go run github.com/0xsequence/ethkit/cmd/ethkit abigen --pkg=walletguest --type=WalletGuest --outFile=./v3/walletguest/wallet_guest.gen.go --artifactsFile=../artifacts/wallet-contracts-v3/Guest.sol/Guest.json + +//go:generate go run github.com/0xsequence/ethkit/cmd/ethkit abigen --pkg=passkeys --type=Passkeys --outFile=./v3/passkeys/passkeys.gen.go --artifactsFile=../artifacts/wallet-contracts-v3/Passkeys.sol/Passkeys.json + +//go:generate go run github.com/0xsequence/ethkit/cmd/ethkit abigen --pkg=walletestimator --type=WalletEstimator --outFile=./v3/walletestimator/wallet_estimator.gen.go --artifactsFile=../artifacts/wallet-contracts-v3/Estimator.sol/Estimator.json --includeDeployedBin +//go:generate go run github.com/0xsequence/ethkit/cmd/ethkit abigen --pkg=walletsimulator --type=WalletSimulator --outFile=./v3/walletsimulator/wallet_simulator.gen.go --artifactsFile=../artifacts/wallet-contracts-v3/Simulator.sol/Simulator.json --includeDeployedBin // // tokens @@ -70,4 +83,9 @@ //go:generate go run github.com/0xsequence/ethkit/cmd/ethkit abigen --pkg=seq_sale_erc1155 --type=Sale --outFile=./seq_sale/erc1155v0/sale_erc1155_v0.gen.go --artifactsFile=../artifacts/seq_sale/IERC1155SaleV0.sol/IERC1155SaleV0.json //go:generate go run github.com/0xsequence/ethkit/cmd/ethkit abigen --pkg=seq_sale_erc1155 --type=Sale --outFile=./seq_sale/erc1155v1/sale_erc1155_v1.gen.go --artifactsFile=../artifacts/seq_sale/IERC1155SaleV1.sol/IERC1155SaleV1.json +// +// value forwarder +// +//go:generate go run github.com/0xsequence/ethkit/cmd/ethkit abigen --pkg=valueforwarder --type=ValueForwarder --outFile=./valueforwarder/value_forwarder.gen.go --artifactsFile=../artifacts/value-forwarder/ValueForwarder.json + package gen diff --git a/contracts/gen/v1/walletgasestimator/wallet_gas_estimator.gen.go b/contracts/gen/v1/walletgasestimator/wallet_gas_estimator.gen.go index 4b099fda..6beb3b50 100644 --- a/contracts/gen/v1/walletgasestimator/wallet_gas_estimator.gen.go +++ b/contracts/gen/v1/walletgasestimator/wallet_gas_estimator.gen.go @@ -78,9 +78,6 @@ func DeployWalletGasEstimator(auth *bind.TransactOpts, backend bind.ContractBack return address, tx, &WalletGasEstimator{WalletGasEstimatorCaller: WalletGasEstimatorCaller{contract: contract}, WalletGasEstimatorTransactor: WalletGasEstimatorTransactor{contract: contract}, WalletGasEstimatorFilterer: WalletGasEstimatorFilterer{contract: contract}}, nil } -// WalletGasEstimatorDeployedBin is the resulting bytecode of the created contract -const WalletGasEstimatorDeployedBin = "0x60806040526004361061012d5760003560e01c806361c2926c116100a557806390042baf11610074578063b93ea7ad11610059578063b93ea7ad14610418578063bc197c8114610438578063f23a6e611461045857610134565b806390042baf146103f0578063affed0e01461040357610134565b806361c2926c146103635780637a9a16281461038357806384dc463c146103a35780638c3f5563146103d057610134565b80631a9b2337116100fc57806329561426116100e157806329561426146103015780634fcf3eca1461032157806351605d801461034157610134565b80631a9b2337146102b457806320c13b0b146102e157610134565b806301ffc9a71461020f578063025b22bc14610245578063150b7a02146102675780631626ba7e1461029457610134565b3661013457005b60006101636000357fffffffff0000000000000000000000000000000000000000000000000000000016610478565b905073ffffffffffffffffffffffffffffffffffffffff81161561020c576000808273ffffffffffffffffffffffffffffffffffffffff166000366040518083838082843760405192019450600093509091505080830381855af49150503d80600081146101ed576040519150601f19603f3d011682016040523d82523d6000602084013e6101f2565b606091505b50915091508161020457805160208201fd5b805160208201f35b50005b34801561021b57600080fd5b5061022f61022a3660046128e0565b6104ce565b60405161023c9190612ba5565b60405180910390f35b34801561025157600080fd5b506102656102603660046125d3565b6104d9565b005b34801561027357600080fd5b506102876102823660046126a4565b6105fa565b60405161023c9190612bd2565b3480156102a057600080fd5b506102876102af366004612896565b610624565b3480156102c057600080fd5b506102d46102cf3660046128e0565b61069d565b60405161023c9190612ad9565b3480156102ed57600080fd5b506102876102fc36600461292c565b6106a8565b34801561030d57600080fd5b5061026561031c36600461287e565b610702565b34801561032d57600080fd5b5061026561033c3660046128e0565b610810565b34801561034d57600080fd5b506103566108ee565b60405161023c9190612bb0565b34801561036f57600080fd5b5061026561037e3660046127c7565b61091e565b34801561038f57600080fd5b5061026561039e3660046127fa565b6109b7565b3480156103af57600080fd5b506103c36103be366004612787565b610a33565b60405161023c9190612afa565b3480156103dc57600080fd5b506103566103eb36600461287e565b610d6b565b6102d46103fe366004612995565b610d97565b34801561040f57600080fd5b50610356610e4b565b34801561042457600080fd5b506102656104333660046128fa565b610e57565b34801561044457600080fd5b506102876104533660046125ed565b610f30565b34801561046457600080fd5b50610287610473366004612711565b610f5d565b60006104c67fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1207fffffffff000000000000000000000000000000000000000000000000000000008416610f88565b90505b919050565b60006104c682610fb5565b333014610531576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806131846027913960400191505060405180910390fd5b6105508173ffffffffffffffffffffffffffffffffffffffff16611012565b6105a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603981526020018061306a6039913960400191505060405180910390fd5b6105ae81611018565b6040805173ffffffffffffffffffffffffffffffffffffffff8316815290517f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca039181900360200190a150565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b600061066e6106328561101c565b84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061107c92505050565b1561069657507f1626ba7e000000000000000000000000000000000000000000000000000000005b9392505050565b60006104c682610478565b60006106d26106328686604051808383808284376040519201829003909120935061101c92505050565b156106fa57507f20c13b0b000000000000000000000000000000000000000000000000000000005b949350505050565b33301461075a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806131846027913960400191505060405180910390fd5b806107b0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526037815260200180612e916037913960400191505060405180910390fd5b6107da7fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf882611274565b6040805182815290517f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa9181900360200190a150565b333014610868576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806131846027913960400191505060405180910390fd5b600061087382610478565b73ffffffffffffffffffffffffffffffffffffffff1614156108e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180612ec8602b913960400191505060405180910390fd5b6108eb816000611278565b50565b60006109197fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf86112db565b905090565b333014610976576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806131846027913960400191505060405180910390fd5b60006109a78260405160200161098c9190612cf0565b6040516020818303038152906040528051906020012061101c565b90506109b381836112df565b5050565b6109c0826114ae565b60006109d8838560405160200161098c929190612d37565b90506109e4818361107c565b610a23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1a90612c93565b60405180910390fd5b610a2d81856112df565b50505050565b606060008267ffffffffffffffff81118015610a4e57600080fd5b50604051908082528060200260200182016040528015610a8857816020015b610a75612324565b815260200190600190039081610a6d5790505b50905060005b83811015610d63576000858583818110610aa457fe5b9050602002810190610ab69190612d5e565b610abf90612db5565b905080604001515a1015610aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1a90612c36565b6001838381518110610b0d57fe5b60209081029190910101519015159052805115610c105760005a9050816060015173ffffffffffffffffffffffffffffffffffffffff168260400151600014610b5a578260400151610b5c565b5a5b8360a00151604051610b6e9190612abd565b6000604051808303818686f4925050503d8060008114610baa576040519150601f19603f3d011682016040523d82523d6000602084013e610baf565b606091505b50858581518110610bbc57fe5b6020026020010151602001868681518110610bd357fe5b6020026020010151604001829052821515151581525050505a8103848481518110610bfa57fe5b6020026020010151606001818152505050610d00565b60005a9050816060015173ffffffffffffffffffffffffffffffffffffffff1682608001518360400151600014610c4b578360400151610c4d565b5a5b908460a00151604051610c609190612abd565b600060405180830381858888f193505050503d8060008114610c9e576040519150601f19603f3d011682016040523d82523d6000602084013e610ca3565b606091505b50858581518110610cb057fe5b6020026020010151602001868681518110610cc757fe5b6020026020010151604001829052821515151581525050505a8103848481518110610cee57fe5b60200260200101516060018181525050505b828281518110610d0c57fe5b602002602001015160200151158015610d4f5750858583818110610d2c57fe5b9050602002810190610d3e9190612d5e565b610d4f906040810190602001612864565b15610d5a5750610d63565b50600101610a8e565b509392505050565b60006104c67f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83610f88565b6000333014610df1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806131846027913960400191505060405180910390fd5b81516020830134f06040805173ffffffffffffffffffffffffffffffffffffffff8316815290519192507fa506ad4e7f05eceba62a023c3219e5bd98a615f4fa87e2afb08a2da5cf62bf0c919081900360200190a1919050565b60006109196000610d6b565b333014610eaf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806131846027913960400191505060405180910390fd5b6000610eba83610478565b73ffffffffffffffffffffffffffffffffffffffff1614610f26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180612fdc602c913960400191505060405180910390fd5b6109b38282611278565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b60408051602080820194909452808201929092528051808303820181526060909201905280519101205490565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f90042baf000000000000000000000000000000000000000000000000000000001415611009575060016104c9565b6104c68261155b565b3b151590565b3055565b604080517f19010000000000000000000000000000000000000000000000000000000000006020808301919091524660228301523060601b6042830152605680830194909452825180830390940184526076909101909152815191012090565b600080600061108a8461169c565b909250905061ffff821660005b855183101561125157600080806110ae898761170a565b975060ff918216945016915060018314156110d6576110cd898761178b565b965090506111fa565b826111025760606110e78a88611803565b975090506110f58b826118b4565b91508285019450506111fa565b60028314156111a957611115898761178b565b9650905060006111258a88611c3e565b975061ffff169050606061113a8b8984611caf565b985090506111498c8483611d9e565b61119e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180612faa6032913960400191505060405180910390fd5b5050928101926111fa565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180612e65602c913960400191505060405180910390fd5b848282604051602001808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019350505050604051602081830303815290604052805190602001209450505050611097565b8361ffff168110158015611269575061126982611fde565b979650505050505050565b9055565b6109b37fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1207fffffffff00000000000000000000000000000000000000000000000000000000841673ffffffffffffffffffffffffffffffffffffffff8416612024565b5490565b60005b81518110156114a95760008282815181106112f957fe5b602002602001015190506000606082604001515a1015611345576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1a90612c36565b8251156113dd57826060015173ffffffffffffffffffffffffffffffffffffffff16836040015160001461137d57836040015161137f565b5a5b8460a001516040516113919190612abd565b6000604051808303818686f4925050503d80600081146113cd576040519150601f19603f3d011682016040523d82523d6000602084013e6113d2565b606091505b509092509050611472565b826060015173ffffffffffffffffffffffffffffffffffffffff1683608001518460400151600014611413578460400151611415565b5a5b908560a001516040516114289190612abd565b600060405180830381858888f193505050503d8060008114611466576040519150601f19603f3d011682016040523d82523d6000602084013e61146b565b606091505b5090925090505b811561149357856040516114869190612bb0565b60405180910390a061149e565b61149e838783612052565b5050506001016112e2565b505050565b6000806114ba836120a2565b9150915060006114c983610d6b565b9050808214806114d7575060015b61150d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1a90612bff565b6001820161151b84826120bb565b7f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f881848260405161154c929190612d50565b60405180910390a15050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fec6aba500000000000000000000000000000000000000000000000000000000014806115ee57507fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e000000000000000000000000000000000000000000000000000000000145b8061163a57507fffffffff0000000000000000000000000000000000000000000000000000000082167f150b7a0200000000000000000000000000000000000000000000000000000000145b8061168657507fffffffff0000000000000000000000000000000000000000000000000000000082167fc0ee0b8a00000000000000000000000000000000000000000000000000000000145b15611693575060016104c9565b6104c6826120e6565b6020810151815160f09190911c90600290811115611705576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612f166027913960400191505060405180910390fd5b915091565b8082016020015160f881901c9060f01c60ff166002830183811161172a57fe5b8451811115611784576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806130df6026913960400191505060405180910390fd5b9250925092565b8082016020015160601c601482018281116117a257fe5b83518111156117fc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612ef36023913960400191505060405180910390fd5b9250929050565b60408051604280825260808201909252606091600091906020820181803683370190505091508284016020018051602084015260208101516040840152602281015160428401525060428301905082811161185a57fe5b83518111156117fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806130476023913960400191505060405180910390fd5b60008151604214611910576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180612e2b603a913960400191505060405180910390fd5b60008260018451038151811061192257fe5b602001015160f81c60f81b60f81c60ff16905060008360408151811061194457fe5b016020015160f81c9050600061195a8582612143565b90506000611969866020612143565b90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08111156119e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180612dee603d913960400191505060405180910390fd5b8260ff16601b141580156119fc57508260ff16601c14155b15611a52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180612f3d603d913960400191505060405180910390fd5b6001841415611ac65760018784848460405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611ab5573d6000803e3d6000fd5b505050602060405103519450611bc8565b6002841415611b775760018760405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012084848460405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611ab5573d6000803e3d6000fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c8152602001806130a3603c913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8516611c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180612f7a6030913960400191505060405180910390fd5b5050505092915050565b8082016020015160f01c60028201828111611c5557fe5b83518111156117fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806131266022913960400191505060405180910390fd5b606060008267ffffffffffffffff81118015611cca57600080fd5b506040519080825280601f01601f191660200182016040528015611cf5576020820181803683370190505b509150838501602001600060205b85811015611d1c57908201518482015260208101611d03565b8486016020018051939092015190850152525082820183811015611d3c57fe5b8451811115611d96576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806131056021913960400191505060405180910390fd5b935093915050565b60008082600184510381518110611db157fe5b016020015160f81c90506001811480611dca5750600281145b15611e0e578373ffffffffffffffffffffffffffffffffffffffff16611df086856118b4565b73ffffffffffffffffffffffffffffffffffffffff16149150610d63565b6003811415611f8d5782517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018452604080517f1626ba7e000000000000000000000000000000000000000000000000000000008152600481018881526024820192835286516044830152865173ffffffffffffffffffffffffffffffffffffffff891693631626ba7e938b938a9390929160640190602085019080838360005b83811015611ec8578181015183820152602001611eb0565b50505050905090810190601f168015611ef55780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b158015611f1357600080fd5b505afa158015611f27573d6000803e3d6000fd5b505050506040513d6020811015611f3d57600080fd5b50519084527fffffffff00000000000000000000000000000000000000000000000000000000167f1626ba7e00000000000000000000000000000000000000000000000000000000149150610d63565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180613008603f913960400191505060405180910390fd5b6000811580159061201657506120137fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf86112db565b82145b806104c65750600192915050565b6040805160208082019590955280820193909352805180840382018152606090930190528151919092012055565b82602001511561206457805160208201fd5b7f3dbd1590ea96dd3253a91f24e64e3a502e1225d602a5731357bc12643070ccd78282604051612095929190612bb9565b60405180910390a1505050565b606081901c916bffffffffffffffffffffffff90911690565b6109b37f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8383612024565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f025b22bc00000000000000000000000000000000000000000000000000000000141561213a575060016104c9565b6104c6826121ab565b600081602001835110156121a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180613148603c913960400191505060405180910390fd5b50016020015190565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f389901c70000000000000000000000000000000000000000000000000000000014156121ff575060016104c9565b6104c68260007fffffffff0000000000000000000000000000000000000000000000000000000082167f783649a6000000000000000000000000000000000000000000000000000000001415612257575060016104c9565b6104c68260007fffffffff00000000000000000000000000000000000000000000000000000000821615806122cd57507fffffffff0000000000000000000000000000000000000000000000000000000082167f36e7817500000000000000000000000000000000000000000000000000000000145b156122da575060016104c9565b7f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146104c6565b604051806080016040528060001515815260200160001515815260200160608152602001600081525090565b803573ffffffffffffffffffffffffffffffffffffffff811681146104c957600080fd5b60008083601f840112612385578182fd5b50813567ffffffffffffffff81111561239c578182fd5b60208301915083602080830285010111156117fc57600080fd5b600082601f8301126123c6578081fd5b8135602067ffffffffffffffff8211156123dc57fe5b6123e98182840201612d91565b82815281810190858301855b8581101561241e5761240c898684358b010161252e565b845292840192908401906001016123f5565b5090979650505050505050565b803580151581146104c957600080fd5b80357fffffffff00000000000000000000000000000000000000000000000000000000811681146104c957600080fd5b60008083601f84011261247c578182fd5b50813567ffffffffffffffff811115612493578182fd5b6020830191508360208285010111156117fc57600080fd5b600082601f8301126124bb578081fd5b813567ffffffffffffffff8111156124cf57fe5b61250060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612d91565b818152846020838601011115612514578283fd5b816020850160208301379081016020019190915292915050565b600060c0828403121561253f578081fd5b60405160c0810167ffffffffffffffff828210818311171561255d57fe5b8160405282935061256d8561242b565b835261257b6020860161242b565b60208401526040850135604084015261259660608601612350565b60608401526080850135608084015260a08501359150808211156125b957600080fd5b506125c6858286016124ab565b60a0830152505092915050565b6000602082840312156125e4578081fd5b61069682612350565b60008060008060008060008060a0898b031215612608578384fd5b61261189612350565b975061261f60208a01612350565b9650604089013567ffffffffffffffff8082111561263b578586fd5b6126478c838d01612374565b909850965060608b013591508082111561265f578586fd5b61266b8c838d01612374565b909650945060808b0135915080821115612683578384fd5b506126908b828c0161246b565b999c989b5096995094979396929594505050565b6000806000806000608086880312156126bb578081fd5b6126c486612350565b94506126d260208701612350565b935060408601359250606086013567ffffffffffffffff8111156126f4578182fd5b6127008882890161246b565b969995985093965092949392505050565b60008060008060008060a08789031215612729578182fd5b61273287612350565b955061274060208801612350565b94506040870135935060608701359250608087013567ffffffffffffffff811115612769578283fd5b61277589828a0161246b565b979a9699509497509295939492505050565b60008060208385031215612799578182fd5b823567ffffffffffffffff8111156127af578283fd5b6127bb85828601612374565b90969095509350505050565b6000602082840312156127d8578081fd5b813567ffffffffffffffff8111156127ee578182fd5b6106fa848285016123b6565b60008060006060848603121561280e578283fd5b833567ffffffffffffffff80821115612825578485fd5b612831878388016123b6565b945060208601359350604086013591508082111561284d578283fd5b5061285a868287016124ab565b9150509250925092565b600060208284031215612875578081fd5b6106968261242b565b60006020828403121561288f578081fd5b5035919050565b6000806000604084860312156128aa578081fd5b83359250602084013567ffffffffffffffff8111156128c7578182fd5b6128d38682870161246b565b9497909650939450505050565b6000602082840312156128f1578081fd5b6106968261243b565b6000806040838503121561290c578182fd5b6129158361243b565b915061292360208401612350565b90509250929050565b60008060008060408587031215612941578182fd5b843567ffffffffffffffff80821115612958578384fd5b6129648883890161246b565b9096509450602087013591508082111561297c578384fd5b506129898782880161246b565b95989497509550505050565b6000602082840312156129a6578081fd5b813567ffffffffffffffff8111156129bc578182fd5b6106fa848285016124ab565b6000815180845260208085018081965082840281019150828601855b85811015612a665782840389528151805115158552858101511515868601526040808201519086015260608082015173ffffffffffffffffffffffffffffffffffffffff16908601526080808201519086015260a09081015160c091860182905290612a5281870183612a73565b9a87019a95505050908401906001016129e4565b5091979650505050505050565b60008151808452612a8b816020860160208601612dc1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60008251612acf818460208701612dc1565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b60208082528251828201819052600091906040908185019080840286018301878501865b83811015612b97577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08984030185528151608081511515855288820151151589860152878201518189870152612b7682870182612a73565b60609384015196909301959095525094870194925090860190600101612b1e565b509098975050505050505050565b901515815260200190565b90815260200190565b6000838252604060208301526106fa6040830184612a73565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b6020808252601f908201527f4d61696e4d6f64756c65235f617574683a20494e56414c49445f4e4f4e434500604082015260600190565b60208082526024908201527f4d6f64756c6543616c6c73235f657865637574653a204e4f545f454e4f55474860408201527f5f47415300000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526026908201527f4d6f64756c6543616c6c7323657865637574653a20494e56414c49445f53494760408201527f4e41545552450000000000000000000000000000000000000000000000000000606082015260800190565b600060408252600560408301527f73656c663a00000000000000000000000000000000000000000000000000000060608301526080602083015261069660808301846129c8565b6000838252604060208301526106fa60408301846129c8565b918252602082015260400190565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112612acf578182fd5b60405181810167ffffffffffffffff81118282101715612dad57fe5b604052919050565b60006104c6368361252e565b60005b83811015612ddc578181015183820152602001612dc4565b83811115610a2d575050600091015256fe5369676e617475726556616c696461746f72237265636f7665725369676e65723a20696e76616c6964207369676e6174757265202773272076616c75655369676e617475726556616c696461746f72237265636f7665725369676e65723a20696e76616c6964207369676e6174757265206c656e6774684d6f64756c6541757468235f7369676e617475726556616c69646174696f6e20494e56414c49445f464c41474d6f64756c654175746855706772616461626c6523757064617465496d6167654861736820494e56414c49445f494d4147455f484153484d6f64756c65486f6f6b732372656d6f7665486f6f6b3a20484f4f4b5f4e4f545f524547495354455245444c696242797465732372656164416464726573733a204f55545f4f465f424f554e44534c696242797465732372656164466972737455696e7431363a204f55545f4f465f424f554e44535369676e617475726556616c696461746f72237265636f7665725369676e65723a20696e76616c6964207369676e6174757265202776272076616c75655369676e617475726556616c696461746f72237265636f7665725369676e65723a20494e56414c49445f5349474e45524d6f64756c6541757468235f7369676e617475726556616c69646174696f6e3a20494e56414c49445f5349474e41545552454d6f64756c65486f6f6b7323616464486f6f6b3a20484f4f4b5f414c52454144595f524547495354455245445369676e617475726556616c696461746f7223697356616c69645369676e61747572653a20554e535550504f525445445f5349474e41545552455f545950454c696242797465732372656164427974657336363a204f55545f4f465f424f554e44534d6f64756c6555706461746523757064617465496d706c656d656e746174696f6e3a20494e56414c49445f494d504c454d454e544154494f4e5369676e617475726556616c696461746f72237265636f7665725369676e65723a20554e535550504f525445445f5349474e41545552455f545950454c69624279746573237265616455696e743855696e74383a204f55545f4f465f424f554e44534c69624279746573237265616442797465733a204f55545f4f465f424f554e44534c69624279746573237265616455696e7431363a204f55545f4f465f424f554e44534c696242797465732372656164427974657333323a20475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f52455155495245444d6f64756c6553656c6641757468236f6e6c7953656c663a204e4f545f415554484f52495a4544a26469706673582212208fb03367e7ab274bfd5035dbc7aa67e35ad9393e96be242863a9f5ff42f8832464736f6c63430007060033" - // WalletGasEstimator is an auto generated Go binding around an Ethereum contract. type WalletGasEstimator struct { WalletGasEstimatorCaller // Read-only binding to the contract @@ -1384,3 +1381,6 @@ func (_WalletGasEstimator *WalletGasEstimatorFilterer) ParseTxFailed(log types.L event.Raw = log return event, nil } + +// WalletGasEstimatorDeployedBin is the resulting bytecode of the created contract +const WalletGasEstimatorDeployedBin = "0x60806040526004361061012d5760003560e01c806361c2926c116100a557806390042baf11610074578063b93ea7ad11610059578063b93ea7ad14610418578063bc197c8114610438578063f23a6e611461045857610134565b806390042baf146103f0578063affed0e01461040357610134565b806361c2926c146103635780637a9a16281461038357806384dc463c146103a35780638c3f5563146103d057610134565b80631a9b2337116100fc57806329561426116100e157806329561426146103015780634fcf3eca1461032157806351605d801461034157610134565b80631a9b2337146102b457806320c13b0b146102e157610134565b806301ffc9a71461020f578063025b22bc14610245578063150b7a02146102675780631626ba7e1461029457610134565b3661013457005b60006101636000357fffffffff0000000000000000000000000000000000000000000000000000000016610478565b905073ffffffffffffffffffffffffffffffffffffffff81161561020c576000808273ffffffffffffffffffffffffffffffffffffffff166000366040518083838082843760405192019450600093509091505080830381855af49150503d80600081146101ed576040519150601f19603f3d011682016040523d82523d6000602084013e6101f2565b606091505b50915091508161020457805160208201fd5b805160208201f35b50005b34801561021b57600080fd5b5061022f61022a3660046128e0565b6104ce565b60405161023c9190612ba5565b60405180910390f35b34801561025157600080fd5b506102656102603660046125d3565b6104d9565b005b34801561027357600080fd5b506102876102823660046126a4565b6105fa565b60405161023c9190612bd2565b3480156102a057600080fd5b506102876102af366004612896565b610624565b3480156102c057600080fd5b506102d46102cf3660046128e0565b61069d565b60405161023c9190612ad9565b3480156102ed57600080fd5b506102876102fc36600461292c565b6106a8565b34801561030d57600080fd5b5061026561031c36600461287e565b610702565b34801561032d57600080fd5b5061026561033c3660046128e0565b610810565b34801561034d57600080fd5b506103566108ee565b60405161023c9190612bb0565b34801561036f57600080fd5b5061026561037e3660046127c7565b61091e565b34801561038f57600080fd5b5061026561039e3660046127fa565b6109b7565b3480156103af57600080fd5b506103c36103be366004612787565b610a33565b60405161023c9190612afa565b3480156103dc57600080fd5b506103566103eb36600461287e565b610d6b565b6102d46103fe366004612995565b610d97565b34801561040f57600080fd5b50610356610e4b565b34801561042457600080fd5b506102656104333660046128fa565b610e57565b34801561044457600080fd5b506102876104533660046125ed565b610f30565b34801561046457600080fd5b50610287610473366004612711565b610f5d565b60006104c67fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1207fffffffff000000000000000000000000000000000000000000000000000000008416610f88565b90505b919050565b60006104c682610fb5565b333014610531576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806131846027913960400191505060405180910390fd5b6105508173ffffffffffffffffffffffffffffffffffffffff16611012565b6105a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603981526020018061306a6039913960400191505060405180910390fd5b6105ae81611018565b6040805173ffffffffffffffffffffffffffffffffffffffff8316815290517f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca039181900360200190a150565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b600061066e6106328561101c565b84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061107c92505050565b1561069657507f1626ba7e000000000000000000000000000000000000000000000000000000005b9392505050565b60006104c682610478565b60006106d26106328686604051808383808284376040519201829003909120935061101c92505050565b156106fa57507f20c13b0b000000000000000000000000000000000000000000000000000000005b949350505050565b33301461075a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806131846027913960400191505060405180910390fd5b806107b0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526037815260200180612e916037913960400191505060405180910390fd5b6107da7fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf882611274565b6040805182815290517f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa9181900360200190a150565b333014610868576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806131846027913960400191505060405180910390fd5b600061087382610478565b73ffffffffffffffffffffffffffffffffffffffff1614156108e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180612ec8602b913960400191505060405180910390fd5b6108eb816000611278565b50565b60006109197fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf86112db565b905090565b333014610976576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806131846027913960400191505060405180910390fd5b60006109a78260405160200161098c9190612cf0565b6040516020818303038152906040528051906020012061101c565b90506109b381836112df565b5050565b6109c0826114ae565b60006109d8838560405160200161098c929190612d37565b90506109e4818361107c565b610a23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1a90612c93565b60405180910390fd5b610a2d81856112df565b50505050565b606060008267ffffffffffffffff81118015610a4e57600080fd5b50604051908082528060200260200182016040528015610a8857816020015b610a75612324565b815260200190600190039081610a6d5790505b50905060005b83811015610d63576000858583818110610aa457fe5b9050602002810190610ab69190612d5e565b610abf90612db5565b905080604001515a1015610aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1a90612c36565b6001838381518110610b0d57fe5b60209081029190910101519015159052805115610c105760005a9050816060015173ffffffffffffffffffffffffffffffffffffffff168260400151600014610b5a578260400151610b5c565b5a5b8360a00151604051610b6e9190612abd565b6000604051808303818686f4925050503d8060008114610baa576040519150601f19603f3d011682016040523d82523d6000602084013e610baf565b606091505b50858581518110610bbc57fe5b6020026020010151602001868681518110610bd357fe5b6020026020010151604001829052821515151581525050505a8103848481518110610bfa57fe5b6020026020010151606001818152505050610d00565b60005a9050816060015173ffffffffffffffffffffffffffffffffffffffff1682608001518360400151600014610c4b578360400151610c4d565b5a5b908460a00151604051610c609190612abd565b600060405180830381858888f193505050503d8060008114610c9e576040519150601f19603f3d011682016040523d82523d6000602084013e610ca3565b606091505b50858581518110610cb057fe5b6020026020010151602001868681518110610cc757fe5b6020026020010151604001829052821515151581525050505a8103848481518110610cee57fe5b60200260200101516060018181525050505b828281518110610d0c57fe5b602002602001015160200151158015610d4f5750858583818110610d2c57fe5b9050602002810190610d3e9190612d5e565b610d4f906040810190602001612864565b15610d5a5750610d63565b50600101610a8e565b509392505050565b60006104c67f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83610f88565b6000333014610df1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806131846027913960400191505060405180910390fd5b81516020830134f06040805173ffffffffffffffffffffffffffffffffffffffff8316815290519192507fa506ad4e7f05eceba62a023c3219e5bd98a615f4fa87e2afb08a2da5cf62bf0c919081900360200190a1919050565b60006109196000610d6b565b333014610eaf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806131846027913960400191505060405180910390fd5b6000610eba83610478565b73ffffffffffffffffffffffffffffffffffffffff1614610f26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180612fdc602c913960400191505060405180910390fd5b6109b38282611278565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b60408051602080820194909452808201929092528051808303820181526060909201905280519101205490565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f90042baf000000000000000000000000000000000000000000000000000000001415611009575060016104c9565b6104c68261155b565b3b151590565b3055565b604080517f19010000000000000000000000000000000000000000000000000000000000006020808301919091524660228301523060601b6042830152605680830194909452825180830390940184526076909101909152815191012090565b600080600061108a8461169c565b909250905061ffff821660005b855183101561125157600080806110ae898761170a565b975060ff918216945016915060018314156110d6576110cd898761178b565b965090506111fa565b826111025760606110e78a88611803565b975090506110f58b826118b4565b91508285019450506111fa565b60028314156111a957611115898761178b565b9650905060006111258a88611c3e565b975061ffff169050606061113a8b8984611caf565b985090506111498c8483611d9e565b61119e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180612faa6032913960400191505060405180910390fd5b5050928101926111fa565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180612e65602c913960400191505060405180910390fd5b848282604051602001808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019350505050604051602081830303815290604052805190602001209450505050611097565b8361ffff168110158015611269575061126982611fde565b979650505050505050565b9055565b6109b37fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1207fffffffff00000000000000000000000000000000000000000000000000000000841673ffffffffffffffffffffffffffffffffffffffff8416612024565b5490565b60005b81518110156114a95760008282815181106112f957fe5b602002602001015190506000606082604001515a1015611345576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1a90612c36565b8251156113dd57826060015173ffffffffffffffffffffffffffffffffffffffff16836040015160001461137d57836040015161137f565b5a5b8460a001516040516113919190612abd565b6000604051808303818686f4925050503d80600081146113cd576040519150601f19603f3d011682016040523d82523d6000602084013e6113d2565b606091505b509092509050611472565b826060015173ffffffffffffffffffffffffffffffffffffffff1683608001518460400151600014611413578460400151611415565b5a5b908560a001516040516114289190612abd565b600060405180830381858888f193505050503d8060008114611466576040519150601f19603f3d011682016040523d82523d6000602084013e61146b565b606091505b5090925090505b811561149357856040516114869190612bb0565b60405180910390a061149e565b61149e838783612052565b5050506001016112e2565b505050565b6000806114ba836120a2565b9150915060006114c983610d6b565b9050808214806114d7575060015b61150d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1a90612bff565b6001820161151b84826120bb565b7f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f881848260405161154c929190612d50565b60405180910390a15050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fec6aba500000000000000000000000000000000000000000000000000000000014806115ee57507fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e000000000000000000000000000000000000000000000000000000000145b8061163a57507fffffffff0000000000000000000000000000000000000000000000000000000082167f150b7a0200000000000000000000000000000000000000000000000000000000145b8061168657507fffffffff0000000000000000000000000000000000000000000000000000000082167fc0ee0b8a00000000000000000000000000000000000000000000000000000000145b15611693575060016104c9565b6104c6826120e6565b6020810151815160f09190911c90600290811115611705576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612f166027913960400191505060405180910390fd5b915091565b8082016020015160f881901c9060f01c60ff166002830183811161172a57fe5b8451811115611784576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806130df6026913960400191505060405180910390fd5b9250925092565b8082016020015160601c601482018281116117a257fe5b83518111156117fc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612ef36023913960400191505060405180910390fd5b9250929050565b60408051604280825260808201909252606091600091906020820181803683370190505091508284016020018051602084015260208101516040840152602281015160428401525060428301905082811161185a57fe5b83518111156117fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806130476023913960400191505060405180910390fd5b60008151604214611910576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180612e2b603a913960400191505060405180910390fd5b60008260018451038151811061192257fe5b602001015160f81c60f81b60f81c60ff16905060008360408151811061194457fe5b016020015160f81c9050600061195a8582612143565b90506000611969866020612143565b90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08111156119e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180612dee603d913960400191505060405180910390fd5b8260ff16601b141580156119fc57508260ff16601c14155b15611a52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180612f3d603d913960400191505060405180910390fd5b6001841415611ac65760018784848460405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611ab5573d6000803e3d6000fd5b505050602060405103519450611bc8565b6002841415611b775760018760405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012084848460405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611ab5573d6000803e3d6000fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c8152602001806130a3603c913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8516611c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180612f7a6030913960400191505060405180910390fd5b5050505092915050565b8082016020015160f01c60028201828111611c5557fe5b83518111156117fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806131266022913960400191505060405180910390fd5b606060008267ffffffffffffffff81118015611cca57600080fd5b506040519080825280601f01601f191660200182016040528015611cf5576020820181803683370190505b509150838501602001600060205b85811015611d1c57908201518482015260208101611d03565b8486016020018051939092015190850152525082820183811015611d3c57fe5b8451811115611d96576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806131056021913960400191505060405180910390fd5b935093915050565b60008082600184510381518110611db157fe5b016020015160f81c90506001811480611dca5750600281145b15611e0e578373ffffffffffffffffffffffffffffffffffffffff16611df086856118b4565b73ffffffffffffffffffffffffffffffffffffffff16149150610d63565b6003811415611f8d5782517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81018452604080517f1626ba7e000000000000000000000000000000000000000000000000000000008152600481018881526024820192835286516044830152865173ffffffffffffffffffffffffffffffffffffffff891693631626ba7e938b938a9390929160640190602085019080838360005b83811015611ec8578181015183820152602001611eb0565b50505050905090810190601f168015611ef55780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b158015611f1357600080fd5b505afa158015611f27573d6000803e3d6000fd5b505050506040513d6020811015611f3d57600080fd5b50519084527fffffffff00000000000000000000000000000000000000000000000000000000167f1626ba7e00000000000000000000000000000000000000000000000000000000149150610d63565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180613008603f913960400191505060405180910390fd5b6000811580159061201657506120137fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf86112db565b82145b806104c65750600192915050565b6040805160208082019590955280820193909352805180840382018152606090930190528151919092012055565b82602001511561206457805160208201fd5b7f3dbd1590ea96dd3253a91f24e64e3a502e1225d602a5731357bc12643070ccd78282604051612095929190612bb9565b60405180910390a1505050565b606081901c916bffffffffffffffffffffffff90911690565b6109b37f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8383612024565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f025b22bc00000000000000000000000000000000000000000000000000000000141561213a575060016104c9565b6104c6826121ab565b600081602001835110156121a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180613148603c913960400191505060405180910390fd5b50016020015190565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f389901c70000000000000000000000000000000000000000000000000000000014156121ff575060016104c9565b6104c68260007fffffffff0000000000000000000000000000000000000000000000000000000082167f783649a6000000000000000000000000000000000000000000000000000000001415612257575060016104c9565b6104c68260007fffffffff00000000000000000000000000000000000000000000000000000000821615806122cd57507fffffffff0000000000000000000000000000000000000000000000000000000082167f36e7817500000000000000000000000000000000000000000000000000000000145b156122da575060016104c9565b7f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146104c6565b604051806080016040528060001515815260200160001515815260200160608152602001600081525090565b803573ffffffffffffffffffffffffffffffffffffffff811681146104c957600080fd5b60008083601f840112612385578182fd5b50813567ffffffffffffffff81111561239c578182fd5b60208301915083602080830285010111156117fc57600080fd5b600082601f8301126123c6578081fd5b8135602067ffffffffffffffff8211156123dc57fe5b6123e98182840201612d91565b82815281810190858301855b8581101561241e5761240c898684358b010161252e565b845292840192908401906001016123f5565b5090979650505050505050565b803580151581146104c957600080fd5b80357fffffffff00000000000000000000000000000000000000000000000000000000811681146104c957600080fd5b60008083601f84011261247c578182fd5b50813567ffffffffffffffff811115612493578182fd5b6020830191508360208285010111156117fc57600080fd5b600082601f8301126124bb578081fd5b813567ffffffffffffffff8111156124cf57fe5b61250060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612d91565b818152846020838601011115612514578283fd5b816020850160208301379081016020019190915292915050565b600060c0828403121561253f578081fd5b60405160c0810167ffffffffffffffff828210818311171561255d57fe5b8160405282935061256d8561242b565b835261257b6020860161242b565b60208401526040850135604084015261259660608601612350565b60608401526080850135608084015260a08501359150808211156125b957600080fd5b506125c6858286016124ab565b60a0830152505092915050565b6000602082840312156125e4578081fd5b61069682612350565b60008060008060008060008060a0898b031215612608578384fd5b61261189612350565b975061261f60208a01612350565b9650604089013567ffffffffffffffff8082111561263b578586fd5b6126478c838d01612374565b909850965060608b013591508082111561265f578586fd5b61266b8c838d01612374565b909650945060808b0135915080821115612683578384fd5b506126908b828c0161246b565b999c989b5096995094979396929594505050565b6000806000806000608086880312156126bb578081fd5b6126c486612350565b94506126d260208701612350565b935060408601359250606086013567ffffffffffffffff8111156126f4578182fd5b6127008882890161246b565b969995985093965092949392505050565b60008060008060008060a08789031215612729578182fd5b61273287612350565b955061274060208801612350565b94506040870135935060608701359250608087013567ffffffffffffffff811115612769578283fd5b61277589828a0161246b565b979a9699509497509295939492505050565b60008060208385031215612799578182fd5b823567ffffffffffffffff8111156127af578283fd5b6127bb85828601612374565b90969095509350505050565b6000602082840312156127d8578081fd5b813567ffffffffffffffff8111156127ee578182fd5b6106fa848285016123b6565b60008060006060848603121561280e578283fd5b833567ffffffffffffffff80821115612825578485fd5b612831878388016123b6565b945060208601359350604086013591508082111561284d578283fd5b5061285a868287016124ab565b9150509250925092565b600060208284031215612875578081fd5b6106968261242b565b60006020828403121561288f578081fd5b5035919050565b6000806000604084860312156128aa578081fd5b83359250602084013567ffffffffffffffff8111156128c7578182fd5b6128d38682870161246b565b9497909650939450505050565b6000602082840312156128f1578081fd5b6106968261243b565b6000806040838503121561290c578182fd5b6129158361243b565b915061292360208401612350565b90509250929050565b60008060008060408587031215612941578182fd5b843567ffffffffffffffff80821115612958578384fd5b6129648883890161246b565b9096509450602087013591508082111561297c578384fd5b506129898782880161246b565b95989497509550505050565b6000602082840312156129a6578081fd5b813567ffffffffffffffff8111156129bc578182fd5b6106fa848285016124ab565b6000815180845260208085018081965082840281019150828601855b85811015612a665782840389528151805115158552858101511515868601526040808201519086015260608082015173ffffffffffffffffffffffffffffffffffffffff16908601526080808201519086015260a09081015160c091860182905290612a5281870183612a73565b9a87019a95505050908401906001016129e4565b5091979650505050505050565b60008151808452612a8b816020860160208601612dc1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60008251612acf818460208701612dc1565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b60208082528251828201819052600091906040908185019080840286018301878501865b83811015612b97577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08984030185528151608081511515855288820151151589860152878201518189870152612b7682870182612a73565b60609384015196909301959095525094870194925090860190600101612b1e565b509098975050505050505050565b901515815260200190565b90815260200190565b6000838252604060208301526106fa6040830184612a73565b7fffffffff0000000000000000000000000000000000000000000000000000000091909116815260200190565b6020808252601f908201527f4d61696e4d6f64756c65235f617574683a20494e56414c49445f4e4f4e434500604082015260600190565b60208082526024908201527f4d6f64756c6543616c6c73235f657865637574653a204e4f545f454e4f55474860408201527f5f47415300000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526026908201527f4d6f64756c6543616c6c7323657865637574653a20494e56414c49445f53494760408201527f4e41545552450000000000000000000000000000000000000000000000000000606082015260800190565b600060408252600560408301527f73656c663a00000000000000000000000000000000000000000000000000000060608301526080602083015261069660808301846129c8565b6000838252604060208301526106fa60408301846129c8565b918252602082015260400190565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112612acf578182fd5b60405181810167ffffffffffffffff81118282101715612dad57fe5b604052919050565b60006104c6368361252e565b60005b83811015612ddc578181015183820152602001612dc4565b83811115610a2d575050600091015256fe5369676e617475726556616c696461746f72237265636f7665725369676e65723a20696e76616c6964207369676e6174757265202773272076616c75655369676e617475726556616c696461746f72237265636f7665725369676e65723a20696e76616c6964207369676e6174757265206c656e6774684d6f64756c6541757468235f7369676e617475726556616c69646174696f6e20494e56414c49445f464c41474d6f64756c654175746855706772616461626c6523757064617465496d6167654861736820494e56414c49445f494d4147455f484153484d6f64756c65486f6f6b732372656d6f7665486f6f6b3a20484f4f4b5f4e4f545f524547495354455245444c696242797465732372656164416464726573733a204f55545f4f465f424f554e44534c696242797465732372656164466972737455696e7431363a204f55545f4f465f424f554e44535369676e617475726556616c696461746f72237265636f7665725369676e65723a20696e76616c6964207369676e6174757265202776272076616c75655369676e617475726556616c696461746f72237265636f7665725369676e65723a20494e56414c49445f5349474e45524d6f64756c6541757468235f7369676e617475726556616c69646174696f6e3a20494e56414c49445f5349474e41545552454d6f64756c65486f6f6b7323616464486f6f6b3a20484f4f4b5f414c52454144595f524547495354455245445369676e617475726556616c696461746f7223697356616c69645369676e61747572653a20554e535550504f525445445f5349474e41545552455f545950454c696242797465732372656164427974657336363a204f55545f4f465f424f554e44534d6f64756c6555706461746523757064617465496d706c656d656e746174696f6e3a20494e56414c49445f494d504c454d454e544154494f4e5369676e617475726556616c696461746f72237265636f7665725369676e65723a20554e535550504f525445445f5349474e41545552455f545950454c69624279746573237265616455696e743855696e74383a204f55545f4f465f424f554e44534c69624279746573237265616442797465733a204f55545f4f465f424f554e44534c69624279746573237265616455696e7431363a204f55545f4f465f424f554e44534c696242797465732372656164427974657333323a20475245415445525f4f525f455155414c5f544f5f33325f4c454e4754485f52455155495245444d6f64756c6553656c6641757468236f6e6c7953656c663a204e4f545f415554484f52495a4544a26469706673582212208fb03367e7ab274bfd5035dbc7aa67e35ad9393e96be242863a9f5ff42f8832464736f6c63430007060033" diff --git a/contracts/gen/v2/walletgasestimator/wallet_gas_estimator.gen.go b/contracts/gen/v2/walletgasestimator/wallet_gas_estimator.gen.go index bb8726fd..b08c34eb 100644 --- a/contracts/gen/v2/walletgasestimator/wallet_gas_estimator.gen.go +++ b/contracts/gen/v2/walletgasestimator/wallet_gas_estimator.gen.go @@ -78,9 +78,6 @@ func DeployWalletGasEstimator(auth *bind.TransactOpts, backend bind.ContractBack return address, tx, &WalletGasEstimator{WalletGasEstimatorCaller: WalletGasEstimatorCaller{contract: contract}, WalletGasEstimatorTransactor: WalletGasEstimatorTransactor{contract: contract}, WalletGasEstimatorFilterer: WalletGasEstimatorFilterer{contract: contract}}, nil } -// WalletGasEstimatorDeployedBin is the resulting bytecode of the created contract -const WalletGasEstimatorDeployedBin = "0x6080604052600436106101635760003560e01c806361c2926c116100c057806390042baf11610074578063b93ea7ad11610059578063b93ea7ad1461052c578063bc197c811461054c578063f23a6e61146105945761016a565b806390042baf14610504578063affed0e0146105175761016a565b806384dc463c116100a557806384dc463c1461046f578063853c50681461049c5780638c3f5563146104e45761016a565b806361c2926c1461042f5780637a9a16281461044f5761016a565b806320c13b0b116101175780634fcf3eca116100fc5780634fcf3eca146103b857806351605d80146103d857806357c56d6b146103fb5761016a565b806320c13b0b1461037857806329561426146103985761016a565b8063150b7a0211610148578063150b7a021461029d5780631626ba7e146103135780631a9b2337146103335761016a565b806301ffc9a714610248578063025b22bc1461027d5761016a565b3661016a57005b600436106102465760006101a16000357fffffffff00000000000000000000000000000000000000000000000000000000166105da565b905073ffffffffffffffffffffffffffffffffffffffff811615610244576000808273ffffffffffffffffffffffffffffffffffffffff166000366040516101ea92919061287c565b600060405180830381855af49150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023c57805160208201fd5b805160208201f35b505b005b34801561025457600080fd5b506102686102633660046128ba565b61062e565b60405190151581526020015b60405180910390f35b34801561028957600080fd5b50610246610298366004612900565b610639565b3480156102a957600080fd5b506102e26102b8366004612964565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610274565b34801561031f57600080fd5b506102e261032e3660046129d3565b61068b565b34801561033f57600080fd5b5061035361034e3660046128ba565b6106d8565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610274565b34801561038457600080fd5b506102e2610393366004612a1f565b6106e3565b3480156103a457600080fd5b506102466103b3366004612a8b565b610748565b3480156103c457600080fd5b506102466103d33660046128ba565b610792565b3480156103e457600080fd5b506103ed61085a565b604051908152602001610274565b34801561040757600080fd5b506103ed7f8713a7c4465f6fbee2b6e9d6646d1d9f83fec929edfc4baf661f3c865bdd04d181565b34801561043b57600080fd5b5061024661044a366004612ae9565b610889565b34801561045b57600080fd5b5061024661046a366004612b2b565b61090f565b34801561047b57600080fd5b5061048f61048a366004612ae9565b610a14565b6040516102749190612bf8565b3480156104a857600080fd5b506104bc6104b73660046129d3565b610e62565b604080519586526020860194909452928401919091526060830152608082015260a001610274565b3480156104f057600080fd5b506103ed6104ff366004612a8b565b61102a565b610353610512366004612cd5565b611056565b34801561052357600080fd5b506103ed611140565b34801561053857600080fd5b50610246610547366004612da4565b61114c565b34801561055857600080fd5b506102e2610567366004612dd9565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b3480156105a057600080fd5b506102e26105af366004612e94565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b60006106287fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1207fffffffff000000000000000000000000000000000000000000000000000000008416611217565b92915050565b600061062882611275565b33301461067f576040517fe12588940000000000000000000000000000000000000000000000000000000081523360048201523060248201526044015b60405180910390fd5b610688816112d1565b50565b60008061069985858561138c565b50905080156106cb57507f1626ba7e0000000000000000000000000000000000000000000000000000000090506106d1565b50600090505b9392505050565b6000610628826105da565b60008061070886866040516106f992919061287c565b6040518091039020858561138c565b509050801561073a57507f20c13b0b000000000000000000000000000000000000000000000000000000009050610740565b50600090505b949350505050565b333014610789576040517fe1258894000000000000000000000000000000000000000000000000000000008152336004820152306024820152604401610676565b610688816113ca565b3330146107d3576040517fe1258894000000000000000000000000000000000000000000000000000000008152336004820152306024820152604401610676565b60006107de826105da565b73ffffffffffffffffffffffffffffffffffffffff160361084f576040517f1c3812cc0000000000000000000000000000000000000000000000000000000081527fffffffff0000000000000000000000000000000000000000000000000000000082166004820152602401610676565b61068881600061145a565b60006108847fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf85490565b905090565b3330146108ca576040517fe1258894000000000000000000000000000000000000000000000000000000008152336004820152306024820152604401610676565b60006108fd83836040516020016108e29291906130b4565b6040516020818303038152906040528051906020012061151a565b905061090a81848461159f565b505050565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016300361097e576040517f0a57d61d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61098783611727565b6000806109bf8588886040516020016109a2939291906130fc565b60405160208183030381529060405280519060200120858561138c565b9150915081610a00578084846040517f8f4a234f0000000000000000000000000000000000000000000000000000000081526004016106769392919061311f565b610a0b81888861159f565b50505050505050565b606060008267ffffffffffffffff811115610a3157610a31612ca6565b604051908082528060200260200182016040528015610a9157816020015b610a7e604051806080016040528060001515815260200160001515815260200160608152602001600081525090565b815260200190600190039081610a4f5790505b5090508260005b81811015610e585736868683818110610ab357610ab3613139565b9050602002810190610ac59190613168565b90506000816040013590506001858481518110610ae457610ae4613139565b60209081029190910101519015159052805a1015610be6576000858481518110610b1057610b10613139565b6020908102919091018101519115159101527f2bb3e3ba0000000000000000000000000000000000000000000000000000000083825a604051602481019390935260448301919091526064820152608401604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050858481518110610bd057610bd0613139565b6020026020010151604001819052505050610e58565b610bf360208301836131a6565b15610d005760005a9050610c0d6080840160608501612900565b73ffffffffffffffffffffffffffffffffffffffff168215610c2f5782610c31565b5a5b610c3e60a08601866131c1565b604051610c4c92919061287c565b6000604051808303818686f4925050503d8060008114610c88576040519150601f19603f3d011682016040523d82523d6000602084013e610c8d565b606091505b50878681518110610ca057610ca0613139565b6020026020010151602001888781518110610cbd57610cbd613139565b6020026020010151604001829052821515151581525050505a8103868581518110610cea57610cea613139565b6020026020010151606001818152505050610e0c565b60005a9050610d156080840160608501612900565b73ffffffffffffffffffffffffffffffffffffffff1660808401358315610d3c5783610d3e565b5a5b90610d4c60a08701876131c1565b604051610d5a92919061287c565b600060405180830381858888f193505050503d8060008114610d98576040519150601f19603f3d011682016040523d82523d6000602084013e610d9d565b606091505b50878681518110610db057610db0613139565b6020026020010151602001888781518110610dcd57610dcd613139565b6020026020010151604001829052821515151581525050505a8103868581518110610dfa57610dfa613139565b60200260200101516060018181525050505b848381518110610e1e57610e1e613139565b602002602001015160200151158015610e425750610e4260408301602084016131a6565b15610e4e575050610e58565b5050600101610a98565b5090949350505050565b60008060008060008087876000818110610e7e57610e7e613139565b909101357fff00000000000000000000000000000000000000000000000000000000000000169150819050610ed457610eb68961151a565b9250610ec3838989611830565b9298509096509450915061101f9050565b7fff0000000000000000000000000000000000000000000000000000000000000081811601610f1357610f068961151a565b9250610ec3838989611881565b7ffe000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821601610f6557610f06896118ad565b7ffd000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821601610fc957610fb989898961191a565b955095509550955095505061101f565b6040517f6085cd820000000000000000000000000000000000000000000000000000000081527fff0000000000000000000000000000000000000000000000000000000000000082166004820152602401610676565b939792965093509350565b60006106287f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83611217565b6000333014611099576040517fe1258894000000000000000000000000000000000000000000000000000000008152336004820152306024820152604401610676565b81516020830134f0905073ffffffffffffffffffffffffffffffffffffffff81166110f257816040517f0d2571910000000000000000000000000000000000000000000000000000000081526004016106769190613226565b60405173ffffffffffffffffffffffffffffffffffffffff821681527fa506ad4e7f05eceba62a023c3219e5bd98a615f4fa87e2afb08a2da5cf62bf0c9060200160405180910390a1919050565b6000610884600061102a565b33301461118d576040517fe1258894000000000000000000000000000000000000000000000000000000008152336004820152306024820152604401610676565b6000611198836105da565b73ffffffffffffffffffffffffffffffffffffffff1614611209576040517f5b4d6d6a0000000000000000000000000000000000000000000000000000000081527fffffffff0000000000000000000000000000000000000000000000000000000083166004820152602401610676565b611213828261145a565b5050565b6000808383604051602001611236929190918252602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012054949350505050565b60007f6ffbd451000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316016112c857506001919050565b61062882611a97565b73ffffffffffffffffffffffffffffffffffffffff81163b611337576040517f0c76093700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610676565b61133f813055565b60405173ffffffffffffffffffffffffffffffffffffffff821681527f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca03906020015b60405180910390a150565b600080600080600061139f888888610e62565b509650919450925090508282108015906113bd57506113bd81611bd8565b9450505050935093915050565b80611401576040517f4294d12700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61142a7fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8829055565b6040518181527f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa90602001611381565b604080517fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1206020808301919091527fffffffff000000000000000000000000000000000000000000000000000000008516828401819052835180840385018152606084018086528151919093012073ffffffffffffffffffffffffffffffffffffffff8616908190559152608082015290517f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19181900360a00190a15050565b6040517f190100000000000000000000000000000000000000000000000000000000000060208201524660228201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003060601b166042820152605681018290526000906076015b604051602081830303815290604052805190602001209050919050565b8060005b8181101561172057368484838181106115be576115be613139565b90506020028101906115d09190613168565b90506040810135805a10156116255782815a6040517f2bb3e3ba000000000000000000000000000000000000000000000000000000008152600481019390935260248301919091526044820152606401610676565b600061163460208401846131a6565b156116735761166c61164c6080850160608601612900565b8315611658578361165a565b5a5b61166760a08701876131c1565b611be3565b90506116ae565b6116ab6116866080850160608601612900565b608085013584156116975784611699565b5a5b6116a660a08801886131c1565b611bfe565b90505b80156116f357877f5c4eeb02dabf8976016ab414d617f9a162936dcace3cdef8c69ef6e262ad5ae7856040516116e691815260200190565b60405180910390a2611715565b61171561170660408501602086016131a6565b8986611710611c1b565b611c3a565b5050506001016115a3565b5050505050565b606081901c6bffffffffffffffffffffffff821660006117468361102a565b9050818114158015611756575060005b1561179e576040517f9b6514f4000000000000000000000000000000000000000000000000000000008152600481018490526024810183905260448101829052606401610676565b604080517f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e60208083019190915281830186905282518083038401815260609092019092528051910120600183019081905560408051858152602081018390527f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f881910160405180910390a15050505050565b600080808061184b87611846876006818b613239565b611c88565b6000908152873560f01c6020818152604080842084526002909a013560e01c908190529890912090999198509695509350505050565b600080808061189c87611897876001818b613239565b611830565b935093509350935093509350935093565b6040517f190100000000000000000000000000000000000000000000000000000000000060208201526000602282018190527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003060601b1660428301526056820183905290607601611582565b6000808080806004600188013560e81c826119358383613292565b90506119478b6104b783868d8f613239565b939b509199509750955093508787101561199f5761196781848b8d613239565b89896040517fb006aba000000000000000000000000000000000000000000000000000000000815260040161067694939291906132a5565b8092505b88831015611a895760038301928a013560e81c91506119c28383613292565b905060006119e46119d28861211e565b8c8c879086926104b793929190613239565b939c50919a5098509091505088881015611a3c57611a0482858c8e613239565b8a8a6040517fb006aba000000000000000000000000000000000000000000000000000000000815260040161067694939291906132a5565b848110611a7f576040517f37daf62b0000000000000000000000000000000000000000000000000000000081526004810182905260248101869052604401610676565b93509150816119a3565b505050939792965093509350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fec6aba50000000000000000000000000000000000000000000000000000000001480611b2a57507fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e000000000000000000000000000000000000000000000000000000000145b80611b7657507fffffffff0000000000000000000000000000000000000000000000000000000082167f150b7a0200000000000000000000000000000000000000000000000000000000145b80611bc257507fffffffff0000000000000000000000000000000000000000000000000000000082167fc0ee0b8a00000000000000000000000000000000000000000000000000000000145b15611bcf57506001919050565b61062882612152565b6000610628826121ae565b60006040518284823760008084838989f49695505050505050565b6000604051828482376000808483898b8af1979650505050505050565b60603d604051915060208201818101604052818352816000823e505090565b8315611c4857805160208201fd5b827fab46c69f7f32e1bf09b0725853da82a211e5402a0600296ab499a2fb5ea3b4198383604051611c7a9291906132cc565b60405180910390a250505050565b60008060005b8381101561211557600181019085013560f81c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101611d2f57601582019186013560f881901c9060581c73ffffffffffffffffffffffffffffffffffffffff81169074ff000000000000000000000000000000000000000016811785611d155780611d24565b60008681526020829052604090205b955050505050611c8e565b80611dc55760018201918681013560f81c906043016000611d5b8a611d5684888c8e613239565b6121c7565b60ff841697909701969194508491905060a083901b74ff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff82161786611daa5780611db9565b60008781526020829052604090205b96505050505050611c8e565b60028103611eed576000808784013560f881901c9060581c73ffffffffffffffffffffffffffffffffffffffff16601586019550909250905060008885013560e81c600386018162ffffff169150809650819250505060008186019050611e3e8b848c8c8a908692611e3993929190613239565b61248a565b611e86578a83611e5083898d8f613239565b6040517f9a94623200000000000000000000000000000000000000000000000000000000815260040161067694939291906132e5565b60ff8416979097019694508460a084901b74ff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161787611ed15780611ee0565b60008881526020829052604090205b9750505050505050611c8e565b60038103611f2057602082019186013583611f085780611f17565b60008481526020829052604090205b93505050611c8e565b60048103611f6c576003808301928781013560e81c9190820101600080611f4d8b61184685898d8f613239565b60009889526020526040909720969097019650909350611c8e92505050565b600681036120745760008287013560f81c60018401935060ff16905060008784013560f01c60028501945061ffff16905060008885013560e81c600386018162ffffff169150809650819250505060008186019050600080611fda8d8d8d8b90879261184693929190613239565b93985088939092509050848210611ff057988501985b604080517f53657175656e6365206e657374656420636f6e6669673a0a0000000000000000602080830191909152603882018490526058820188905260788083018a90528351808403909101815260989092019092528051910120896120565780612065565b60008a81526020829052604090205b99505050505050505050611c8e565b600581036120e05760208201918601358781036120af577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94505b60006120ba82612671565b9050846120c757806120d6565b60008581526020829052604090205b9450505050611c8e565b6040517fb2505f7c00000000000000000000000000000000000000000000000000000000815260048101829052602401610676565b50935093915050565b7f8713a7c4465f6fbee2b6e9d6646d1d9f83fec929edfc4baf661f3c865bdd04d16000908152602082905260408120610628565b60007ffda4dd44000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316016121a557506001919050565b610628826126ac565b60006121b982612708565b806106285750600192915050565b6000604282146122075782826040517f2ee17a3d000000000000000000000000000000000000000000000000000000008152600401610676929190613325565b6000612220612217600185613339565b85013560f81c90565b60ff169050604084013560f81c843560208601357f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0811115612294578686826040517fad4aac760000000000000000000000000000000000000000000000000000000081526004016106769392919061334c565b8260ff16601b141580156122ac57508260ff16601c14155b156122e9578686846040517fe578897e00000000000000000000000000000000000000000000000000000000815260040161067693929190613370565b60018403612356576040805160008152602081018083528a905260ff851691810191909152606081018390526080810182905260019060a0015b6020604051602081039080840390855afa158015612345573d6000803e3d6000fd5b50505060206040510351945061242e565b600284036123f3576040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101899052600190605c01604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600084529083018083525260ff861690820152606081018490526080810183905260a001612323565b86868560016040517f9dfba8520000000000000000000000000000000000000000000000000000000081526004016106769493929190613397565b73ffffffffffffffffffffffffffffffffffffffff851661247f5786866040517f6c1719d2000000000000000000000000000000000000000000000000000000008152600401610676929190613325565b505050509392505050565b60008181036124c5576040517fac241e1100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083836124d4600182613339565b8181106124e3576124e3613139565b919091013560f81c91505060018114806124fd5750600281145b15612542578473ffffffffffffffffffffffffffffffffffffffff166125248786866121c7565b73ffffffffffffffffffffffffffffffffffffffff16149150612668565b6003810361262d5773ffffffffffffffffffffffffffffffffffffffff8516631626ba7e8786600087612576600182613339565b9261258393929190613239565b6040518463ffffffff1660e01b81526004016125a19392919061311f565b602060405180830381865afa1580156125be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e291906133c3565b7fffffffff00000000000000000000000000000000000000000000000000000000167f1626ba7e00000000000000000000000000000000000000000000000000000000149150612668565b83838260006040517f9dfba8520000000000000000000000000000000000000000000000000000000081526004016106769493929190613397565b50949350505050565b6040517f53657175656e636520737461746963206469676573743a0a0000000000000000602082015260388101829052600090605801611582565b60007fe4a77bbc000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316016126ff57506001919050565b6106288261273b565b600081158015906106285750507fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8541490565b60007fae9fa280000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083160161278e57506001919050565b6106288260007fffffffff0000000000000000000000000000000000000000000000000000000082167fac6a444e00000000000000000000000000000000000000000000000000000000148061282557507fffffffff0000000000000000000000000000000000000000000000000000000082167f36e7817500000000000000000000000000000000000000000000000000000000145b1561283257506001919050565b7f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610628565b8183823760009101908152919050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461068857600080fd5b6000602082840312156128cc57600080fd5b81356106d18161288c565b803573ffffffffffffffffffffffffffffffffffffffff811681146128fb57600080fd5b919050565b60006020828403121561291257600080fd5b6106d1826128d7565b60008083601f84011261292d57600080fd5b50813567ffffffffffffffff81111561294557600080fd5b60208301915083602082850101111561295d57600080fd5b9250929050565b60008060008060006080868803121561297c57600080fd5b612985866128d7565b9450612993602087016128d7565b935060408601359250606086013567ffffffffffffffff8111156129b657600080fd5b6129c28882890161291b565b969995985093965092949392505050565b6000806000604084860312156129e857600080fd5b83359250602084013567ffffffffffffffff811115612a0657600080fd5b612a128682870161291b565b9497909650939450505050565b60008060008060408587031215612a3557600080fd5b843567ffffffffffffffff80821115612a4d57600080fd5b612a598883890161291b565b90965094506020870135915080821115612a7257600080fd5b50612a7f8782880161291b565b95989497509550505050565b600060208284031215612a9d57600080fd5b5035919050565b60008083601f840112612ab657600080fd5b50813567ffffffffffffffff811115612ace57600080fd5b6020830191508360208260051b850101111561295d57600080fd5b60008060208385031215612afc57600080fd5b823567ffffffffffffffff811115612b1357600080fd5b612b1f85828601612aa4565b90969095509350505050565b600080600080600060608688031215612b4357600080fd5b853567ffffffffffffffff80821115612b5b57600080fd5b612b6789838a01612aa4565b9097509550602088013594506040880135915080821115612b8757600080fd5b506129c28882890161291b565b6000815180845260005b81811015612bba57602081850181015186830182015201612b9e565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015612c98577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08984030185528151608081511515855288820151151589860152878201518189870152612c7782870182612b94565b60609384015196909301959095525094870194925090860190600101612c1f565b509098975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215612ce757600080fd5b813567ffffffffffffffff80821115612cff57600080fd5b818401915084601f830112612d1357600080fd5b813581811115612d2557612d25612ca6565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715612d6b57612d6b612ca6565b81604052828152876020848701011115612d8457600080fd5b826020860160208301376000928101602001929092525095945050505050565b60008060408385031215612db757600080fd5b8235612dc28161288c565b9150612dd0602084016128d7565b90509250929050565b60008060008060008060008060a0898b031215612df557600080fd5b612dfe896128d7565b9750612e0c60208a016128d7565b9650604089013567ffffffffffffffff80821115612e2957600080fd5b612e358c838d01612aa4565b909850965060608b0135915080821115612e4e57600080fd5b612e5a8c838d01612aa4565b909650945060808b0135915080821115612e7357600080fd5b50612e808b828c0161291b565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215612ead57600080fd5b612eb6876128d7565b9550612ec4602088016128d7565b94506040870135935060608701359250608087013567ffffffffffffffff811115612eee57600080fd5b612efa89828a0161291b565b979a9699509497509295939492505050565b803580151581146128fb57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b81835260006020808501808196508560051b810191508460005b878110156130a757828403895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41883603018112612fbe57600080fd5b870160c0612fcb82612f0c565b15158652612fda878301612f0c565b15158688015260408281013590870152606073ffffffffffffffffffffffffffffffffffffffff61300c8285016128d7565b16908701526080828101359087015260a080830135368490037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261305257600080fd5b90920187810192903567ffffffffffffffff81111561307057600080fd5b80360384131561307f57600080fd5b82828901526130918389018286612f1c565b9c89019c97505050928601925050600101612f7f565b5091979650505050505050565b60408152600560408201527f73656c663a0000000000000000000000000000000000000000000000000000006060820152608060208201526000610740608083018486612f65565b838152604060208201526000613116604083018486612f65565b95945050505050565b838152604060208201526000613116604083018486612f1c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4183360301811261319c57600080fd5b9190910192915050565b6000602082840312156131b857600080fd5b6106d182612f0c565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126131f657600080fd5b83018035915067ffffffffffffffff82111561321157600080fd5b60200191503681900382131561295d57600080fd5b6020815260006106d16020830184612b94565b6000808585111561324957600080fd5b8386111561325657600080fd5b5050820193919092039150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561062857610628613263565b6060815260006132b9606083018688612f1c565b6020830194909452506040015292915050565b8281526040602082015260006107406040830184612b94565b84815273ffffffffffffffffffffffffffffffffffffffff8416602082015260606040820152600061331b606083018486612f1c565b9695505050505050565b602081526000610740602083018486612f1c565b8181038181111561062857610628613263565b604081526000613360604083018587612f1c565b9050826020830152949350505050565b604081526000613384604083018587612f1c565b905060ff83166020830152949350505050565b6060815260006133ab606083018688612f1c565b60208301949094525090151560409091015292915050565b6000602082840312156133d557600080fd5b81516106d18161288c56fea2646970667358221220208dca6e3da934cffa05fe425bd9f9c5ea850f85d9181867d2f8c6b2c736fa6564736f6c63430008120033" - // WalletGasEstimator is an auto generated Go binding around an Ethereum contract. type WalletGasEstimator struct { WalletGasEstimatorCaller // Read-only binding to the contract @@ -1766,3 +1763,6 @@ func (_WalletGasEstimator *WalletGasEstimatorFilterer) ParseTxFailed(log types.L event.Raw = log return event, nil } + +// WalletGasEstimatorDeployedBin is the resulting bytecode of the created contract +const WalletGasEstimatorDeployedBin = "0x6080604052600436106101635760003560e01c806361c2926c116100c057806390042baf11610074578063b93ea7ad11610059578063b93ea7ad1461052c578063bc197c811461054c578063f23a6e61146105945761016a565b806390042baf14610504578063affed0e0146105175761016a565b806384dc463c116100a557806384dc463c1461046f578063853c50681461049c5780638c3f5563146104e45761016a565b806361c2926c1461042f5780637a9a16281461044f5761016a565b806320c13b0b116101175780634fcf3eca116100fc5780634fcf3eca146103b857806351605d80146103d857806357c56d6b146103fb5761016a565b806320c13b0b1461037857806329561426146103985761016a565b8063150b7a0211610148578063150b7a021461029d5780631626ba7e146103135780631a9b2337146103335761016a565b806301ffc9a714610248578063025b22bc1461027d5761016a565b3661016a57005b600436106102465760006101a16000357fffffffff00000000000000000000000000000000000000000000000000000000166105da565b905073ffffffffffffffffffffffffffffffffffffffff811615610244576000808273ffffffffffffffffffffffffffffffffffffffff166000366040516101ea92919061287c565b600060405180830381855af49150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023c57805160208201fd5b805160208201f35b505b005b34801561025457600080fd5b506102686102633660046128ba565b61062e565b60405190151581526020015b60405180910390f35b34801561028957600080fd5b50610246610298366004612900565b610639565b3480156102a957600080fd5b506102e26102b8366004612964565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610274565b34801561031f57600080fd5b506102e261032e3660046129d3565b61068b565b34801561033f57600080fd5b5061035361034e3660046128ba565b6106d8565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610274565b34801561038457600080fd5b506102e2610393366004612a1f565b6106e3565b3480156103a457600080fd5b506102466103b3366004612a8b565b610748565b3480156103c457600080fd5b506102466103d33660046128ba565b610792565b3480156103e457600080fd5b506103ed61085a565b604051908152602001610274565b34801561040757600080fd5b506103ed7f8713a7c4465f6fbee2b6e9d6646d1d9f83fec929edfc4baf661f3c865bdd04d181565b34801561043b57600080fd5b5061024661044a366004612ae9565b610889565b34801561045b57600080fd5b5061024661046a366004612b2b565b61090f565b34801561047b57600080fd5b5061048f61048a366004612ae9565b610a14565b6040516102749190612bf8565b3480156104a857600080fd5b506104bc6104b73660046129d3565b610e62565b604080519586526020860194909452928401919091526060830152608082015260a001610274565b3480156104f057600080fd5b506103ed6104ff366004612a8b565b61102a565b610353610512366004612cd5565b611056565b34801561052357600080fd5b506103ed611140565b34801561053857600080fd5b50610246610547366004612da4565b61114c565b34801561055857600080fd5b506102e2610567366004612dd9565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b3480156105a057600080fd5b506102e26105af366004612e94565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b60006106287fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1207fffffffff000000000000000000000000000000000000000000000000000000008416611217565b92915050565b600061062882611275565b33301461067f576040517fe12588940000000000000000000000000000000000000000000000000000000081523360048201523060248201526044015b60405180910390fd5b610688816112d1565b50565b60008061069985858561138c565b50905080156106cb57507f1626ba7e0000000000000000000000000000000000000000000000000000000090506106d1565b50600090505b9392505050565b6000610628826105da565b60008061070886866040516106f992919061287c565b6040518091039020858561138c565b509050801561073a57507f20c13b0b000000000000000000000000000000000000000000000000000000009050610740565b50600090505b949350505050565b333014610789576040517fe1258894000000000000000000000000000000000000000000000000000000008152336004820152306024820152604401610676565b610688816113ca565b3330146107d3576040517fe1258894000000000000000000000000000000000000000000000000000000008152336004820152306024820152604401610676565b60006107de826105da565b73ffffffffffffffffffffffffffffffffffffffff160361084f576040517f1c3812cc0000000000000000000000000000000000000000000000000000000081527fffffffff0000000000000000000000000000000000000000000000000000000082166004820152602401610676565b61068881600061145a565b60006108847fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf85490565b905090565b3330146108ca576040517fe1258894000000000000000000000000000000000000000000000000000000008152336004820152306024820152604401610676565b60006108fd83836040516020016108e29291906130b4565b6040516020818303038152906040528051906020012061151a565b905061090a81848461159f565b505050565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016300361097e576040517f0a57d61d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61098783611727565b6000806109bf8588886040516020016109a2939291906130fc565b60405160208183030381529060405280519060200120858561138c565b9150915081610a00578084846040517f8f4a234f0000000000000000000000000000000000000000000000000000000081526004016106769392919061311f565b610a0b81888861159f565b50505050505050565b606060008267ffffffffffffffff811115610a3157610a31612ca6565b604051908082528060200260200182016040528015610a9157816020015b610a7e604051806080016040528060001515815260200160001515815260200160608152602001600081525090565b815260200190600190039081610a4f5790505b5090508260005b81811015610e585736868683818110610ab357610ab3613139565b9050602002810190610ac59190613168565b90506000816040013590506001858481518110610ae457610ae4613139565b60209081029190910101519015159052805a1015610be6576000858481518110610b1057610b10613139565b6020908102919091018101519115159101527f2bb3e3ba0000000000000000000000000000000000000000000000000000000083825a604051602481019390935260448301919091526064820152608401604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050858481518110610bd057610bd0613139565b6020026020010151604001819052505050610e58565b610bf360208301836131a6565b15610d005760005a9050610c0d6080840160608501612900565b73ffffffffffffffffffffffffffffffffffffffff168215610c2f5782610c31565b5a5b610c3e60a08601866131c1565b604051610c4c92919061287c565b6000604051808303818686f4925050503d8060008114610c88576040519150601f19603f3d011682016040523d82523d6000602084013e610c8d565b606091505b50878681518110610ca057610ca0613139565b6020026020010151602001888781518110610cbd57610cbd613139565b6020026020010151604001829052821515151581525050505a8103868581518110610cea57610cea613139565b6020026020010151606001818152505050610e0c565b60005a9050610d156080840160608501612900565b73ffffffffffffffffffffffffffffffffffffffff1660808401358315610d3c5783610d3e565b5a5b90610d4c60a08701876131c1565b604051610d5a92919061287c565b600060405180830381858888f193505050503d8060008114610d98576040519150601f19603f3d011682016040523d82523d6000602084013e610d9d565b606091505b50878681518110610db057610db0613139565b6020026020010151602001888781518110610dcd57610dcd613139565b6020026020010151604001829052821515151581525050505a8103868581518110610dfa57610dfa613139565b60200260200101516060018181525050505b848381518110610e1e57610e1e613139565b602002602001015160200151158015610e425750610e4260408301602084016131a6565b15610e4e575050610e58565b5050600101610a98565b5090949350505050565b60008060008060008087876000818110610e7e57610e7e613139565b909101357fff00000000000000000000000000000000000000000000000000000000000000169150819050610ed457610eb68961151a565b9250610ec3838989611830565b9298509096509450915061101f9050565b7fff0000000000000000000000000000000000000000000000000000000000000081811601610f1357610f068961151a565b9250610ec3838989611881565b7ffe000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821601610f6557610f06896118ad565b7ffd000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821601610fc957610fb989898961191a565b955095509550955095505061101f565b6040517f6085cd820000000000000000000000000000000000000000000000000000000081527fff0000000000000000000000000000000000000000000000000000000000000082166004820152602401610676565b939792965093509350565b60006106287f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83611217565b6000333014611099576040517fe1258894000000000000000000000000000000000000000000000000000000008152336004820152306024820152604401610676565b81516020830134f0905073ffffffffffffffffffffffffffffffffffffffff81166110f257816040517f0d2571910000000000000000000000000000000000000000000000000000000081526004016106769190613226565b60405173ffffffffffffffffffffffffffffffffffffffff821681527fa506ad4e7f05eceba62a023c3219e5bd98a615f4fa87e2afb08a2da5cf62bf0c9060200160405180910390a1919050565b6000610884600061102a565b33301461118d576040517fe1258894000000000000000000000000000000000000000000000000000000008152336004820152306024820152604401610676565b6000611198836105da565b73ffffffffffffffffffffffffffffffffffffffff1614611209576040517f5b4d6d6a0000000000000000000000000000000000000000000000000000000081527fffffffff0000000000000000000000000000000000000000000000000000000083166004820152602401610676565b611213828261145a565b5050565b6000808383604051602001611236929190918252602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012054949350505050565b60007f6ffbd451000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316016112c857506001919050565b61062882611a97565b73ffffffffffffffffffffffffffffffffffffffff81163b611337576040517f0c76093700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610676565b61133f813055565b60405173ffffffffffffffffffffffffffffffffffffffff821681527f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca03906020015b60405180910390a150565b600080600080600061139f888888610e62565b509650919450925090508282108015906113bd57506113bd81611bd8565b9450505050935093915050565b80611401576040517f4294d12700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61142a7fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8829055565b6040518181527f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa90602001611381565b604080517fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1206020808301919091527fffffffff000000000000000000000000000000000000000000000000000000008516828401819052835180840385018152606084018086528151919093012073ffffffffffffffffffffffffffffffffffffffff8616908190559152608082015290517f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19181900360a00190a15050565b6040517f190100000000000000000000000000000000000000000000000000000000000060208201524660228201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003060601b166042820152605681018290526000906076015b604051602081830303815290604052805190602001209050919050565b8060005b8181101561172057368484838181106115be576115be613139565b90506020028101906115d09190613168565b90506040810135805a10156116255782815a6040517f2bb3e3ba000000000000000000000000000000000000000000000000000000008152600481019390935260248301919091526044820152606401610676565b600061163460208401846131a6565b156116735761166c61164c6080850160608601612900565b8315611658578361165a565b5a5b61166760a08701876131c1565b611be3565b90506116ae565b6116ab6116866080850160608601612900565b608085013584156116975784611699565b5a5b6116a660a08801886131c1565b611bfe565b90505b80156116f357877f5c4eeb02dabf8976016ab414d617f9a162936dcace3cdef8c69ef6e262ad5ae7856040516116e691815260200190565b60405180910390a2611715565b61171561170660408501602086016131a6565b8986611710611c1b565b611c3a565b5050506001016115a3565b5050505050565b606081901c6bffffffffffffffffffffffff821660006117468361102a565b9050818114158015611756575060005b1561179e576040517f9b6514f4000000000000000000000000000000000000000000000000000000008152600481018490526024810183905260448101829052606401610676565b604080517f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e60208083019190915281830186905282518083038401815260609092019092528051910120600183019081905560408051858152602081018390527f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f881910160405180910390a15050505050565b600080808061184b87611846876006818b613239565b611c88565b6000908152873560f01c6020818152604080842084526002909a013560e01c908190529890912090999198509695509350505050565b600080808061189c87611897876001818b613239565b611830565b935093509350935093509350935093565b6040517f190100000000000000000000000000000000000000000000000000000000000060208201526000602282018190527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003060601b1660428301526056820183905290607601611582565b6000808080806004600188013560e81c826119358383613292565b90506119478b6104b783868d8f613239565b939b509199509750955093508787101561199f5761196781848b8d613239565b89896040517fb006aba000000000000000000000000000000000000000000000000000000000815260040161067694939291906132a5565b8092505b88831015611a895760038301928a013560e81c91506119c28383613292565b905060006119e46119d28861211e565b8c8c879086926104b793929190613239565b939c50919a5098509091505088881015611a3c57611a0482858c8e613239565b8a8a6040517fb006aba000000000000000000000000000000000000000000000000000000000815260040161067694939291906132a5565b848110611a7f576040517f37daf62b0000000000000000000000000000000000000000000000000000000081526004810182905260248101869052604401610676565b93509150816119a3565b505050939792965093509350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fec6aba50000000000000000000000000000000000000000000000000000000001480611b2a57507fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e000000000000000000000000000000000000000000000000000000000145b80611b7657507fffffffff0000000000000000000000000000000000000000000000000000000082167f150b7a0200000000000000000000000000000000000000000000000000000000145b80611bc257507fffffffff0000000000000000000000000000000000000000000000000000000082167fc0ee0b8a00000000000000000000000000000000000000000000000000000000145b15611bcf57506001919050565b61062882612152565b6000610628826121ae565b60006040518284823760008084838989f49695505050505050565b6000604051828482376000808483898b8af1979650505050505050565b60603d604051915060208201818101604052818352816000823e505090565b8315611c4857805160208201fd5b827fab46c69f7f32e1bf09b0725853da82a211e5402a0600296ab499a2fb5ea3b4198383604051611c7a9291906132cc565b60405180910390a250505050565b60008060005b8381101561211557600181019085013560f81c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101611d2f57601582019186013560f881901c9060581c73ffffffffffffffffffffffffffffffffffffffff81169074ff000000000000000000000000000000000000000016811785611d155780611d24565b60008681526020829052604090205b955050505050611c8e565b80611dc55760018201918681013560f81c906043016000611d5b8a611d5684888c8e613239565b6121c7565b60ff841697909701969194508491905060a083901b74ff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff82161786611daa5780611db9565b60008781526020829052604090205b96505050505050611c8e565b60028103611eed576000808784013560f881901c9060581c73ffffffffffffffffffffffffffffffffffffffff16601586019550909250905060008885013560e81c600386018162ffffff169150809650819250505060008186019050611e3e8b848c8c8a908692611e3993929190613239565b61248a565b611e86578a83611e5083898d8f613239565b6040517f9a94623200000000000000000000000000000000000000000000000000000000815260040161067694939291906132e5565b60ff8416979097019694508460a084901b74ff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161787611ed15780611ee0565b60008881526020829052604090205b9750505050505050611c8e565b60038103611f2057602082019186013583611f085780611f17565b60008481526020829052604090205b93505050611c8e565b60048103611f6c576003808301928781013560e81c9190820101600080611f4d8b61184685898d8f613239565b60009889526020526040909720969097019650909350611c8e92505050565b600681036120745760008287013560f81c60018401935060ff16905060008784013560f01c60028501945061ffff16905060008885013560e81c600386018162ffffff169150809650819250505060008186019050600080611fda8d8d8d8b90879261184693929190613239565b93985088939092509050848210611ff057988501985b604080517f53657175656e6365206e657374656420636f6e6669673a0a0000000000000000602080830191909152603882018490526058820188905260788083018a90528351808403909101815260989092019092528051910120896120565780612065565b60008a81526020829052604090205b99505050505050505050611c8e565b600581036120e05760208201918601358781036120af577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94505b60006120ba82612671565b9050846120c757806120d6565b60008581526020829052604090205b9450505050611c8e565b6040517fb2505f7c00000000000000000000000000000000000000000000000000000000815260048101829052602401610676565b50935093915050565b7f8713a7c4465f6fbee2b6e9d6646d1d9f83fec929edfc4baf661f3c865bdd04d16000908152602082905260408120610628565b60007ffda4dd44000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316016121a557506001919050565b610628826126ac565b60006121b982612708565b806106285750600192915050565b6000604282146122075782826040517f2ee17a3d000000000000000000000000000000000000000000000000000000008152600401610676929190613325565b6000612220612217600185613339565b85013560f81c90565b60ff169050604084013560f81c843560208601357f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0811115612294578686826040517fad4aac760000000000000000000000000000000000000000000000000000000081526004016106769392919061334c565b8260ff16601b141580156122ac57508260ff16601c14155b156122e9578686846040517fe578897e00000000000000000000000000000000000000000000000000000000815260040161067693929190613370565b60018403612356576040805160008152602081018083528a905260ff851691810191909152606081018390526080810182905260019060a0015b6020604051602081039080840390855afa158015612345573d6000803e3d6000fd5b50505060206040510351945061242e565b600284036123f3576040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101899052600190605c01604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600084529083018083525260ff861690820152606081018490526080810183905260a001612323565b86868560016040517f9dfba8520000000000000000000000000000000000000000000000000000000081526004016106769493929190613397565b73ffffffffffffffffffffffffffffffffffffffff851661247f5786866040517f6c1719d2000000000000000000000000000000000000000000000000000000008152600401610676929190613325565b505050509392505050565b60008181036124c5576040517fac241e1100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083836124d4600182613339565b8181106124e3576124e3613139565b919091013560f81c91505060018114806124fd5750600281145b15612542578473ffffffffffffffffffffffffffffffffffffffff166125248786866121c7565b73ffffffffffffffffffffffffffffffffffffffff16149150612668565b6003810361262d5773ffffffffffffffffffffffffffffffffffffffff8516631626ba7e8786600087612576600182613339565b9261258393929190613239565b6040518463ffffffff1660e01b81526004016125a19392919061311f565b602060405180830381865afa1580156125be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e291906133c3565b7fffffffff00000000000000000000000000000000000000000000000000000000167f1626ba7e00000000000000000000000000000000000000000000000000000000149150612668565b83838260006040517f9dfba8520000000000000000000000000000000000000000000000000000000081526004016106769493929190613397565b50949350505050565b6040517f53657175656e636520737461746963206469676573743a0a0000000000000000602082015260388101829052600090605801611582565b60007fe4a77bbc000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316016126ff57506001919050565b6106288261273b565b600081158015906106285750507fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8541490565b60007fae9fa280000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083160161278e57506001919050565b6106288260007fffffffff0000000000000000000000000000000000000000000000000000000082167fac6a444e00000000000000000000000000000000000000000000000000000000148061282557507fffffffff0000000000000000000000000000000000000000000000000000000082167f36e7817500000000000000000000000000000000000000000000000000000000145b1561283257506001919050565b7f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610628565b8183823760009101908152919050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461068857600080fd5b6000602082840312156128cc57600080fd5b81356106d18161288c565b803573ffffffffffffffffffffffffffffffffffffffff811681146128fb57600080fd5b919050565b60006020828403121561291257600080fd5b6106d1826128d7565b60008083601f84011261292d57600080fd5b50813567ffffffffffffffff81111561294557600080fd5b60208301915083602082850101111561295d57600080fd5b9250929050565b60008060008060006080868803121561297c57600080fd5b612985866128d7565b9450612993602087016128d7565b935060408601359250606086013567ffffffffffffffff8111156129b657600080fd5b6129c28882890161291b565b969995985093965092949392505050565b6000806000604084860312156129e857600080fd5b83359250602084013567ffffffffffffffff811115612a0657600080fd5b612a128682870161291b565b9497909650939450505050565b60008060008060408587031215612a3557600080fd5b843567ffffffffffffffff80821115612a4d57600080fd5b612a598883890161291b565b90965094506020870135915080821115612a7257600080fd5b50612a7f8782880161291b565b95989497509550505050565b600060208284031215612a9d57600080fd5b5035919050565b60008083601f840112612ab657600080fd5b50813567ffffffffffffffff811115612ace57600080fd5b6020830191508360208260051b850101111561295d57600080fd5b60008060208385031215612afc57600080fd5b823567ffffffffffffffff811115612b1357600080fd5b612b1f85828601612aa4565b90969095509350505050565b600080600080600060608688031215612b4357600080fd5b853567ffffffffffffffff80821115612b5b57600080fd5b612b6789838a01612aa4565b9097509550602088013594506040880135915080821115612b8757600080fd5b506129c28882890161291b565b6000815180845260005b81811015612bba57602081850181015186830182015201612b9e565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015612c98577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08984030185528151608081511515855288820151151589860152878201518189870152612c7782870182612b94565b60609384015196909301959095525094870194925090860190600101612c1f565b509098975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215612ce757600080fd5b813567ffffffffffffffff80821115612cff57600080fd5b818401915084601f830112612d1357600080fd5b813581811115612d2557612d25612ca6565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715612d6b57612d6b612ca6565b81604052828152876020848701011115612d8457600080fd5b826020860160208301376000928101602001929092525095945050505050565b60008060408385031215612db757600080fd5b8235612dc28161288c565b9150612dd0602084016128d7565b90509250929050565b60008060008060008060008060a0898b031215612df557600080fd5b612dfe896128d7565b9750612e0c60208a016128d7565b9650604089013567ffffffffffffffff80821115612e2957600080fd5b612e358c838d01612aa4565b909850965060608b0135915080821115612e4e57600080fd5b612e5a8c838d01612aa4565b909650945060808b0135915080821115612e7357600080fd5b50612e808b828c0161291b565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215612ead57600080fd5b612eb6876128d7565b9550612ec4602088016128d7565b94506040870135935060608701359250608087013567ffffffffffffffff811115612eee57600080fd5b612efa89828a0161291b565b979a9699509497509295939492505050565b803580151581146128fb57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b81835260006020808501808196508560051b810191508460005b878110156130a757828403895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41883603018112612fbe57600080fd5b870160c0612fcb82612f0c565b15158652612fda878301612f0c565b15158688015260408281013590870152606073ffffffffffffffffffffffffffffffffffffffff61300c8285016128d7565b16908701526080828101359087015260a080830135368490037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe101811261305257600080fd5b90920187810192903567ffffffffffffffff81111561307057600080fd5b80360384131561307f57600080fd5b82828901526130918389018286612f1c565b9c89019c97505050928601925050600101612f7f565b5091979650505050505050565b60408152600560408201527f73656c663a0000000000000000000000000000000000000000000000000000006060820152608060208201526000610740608083018486612f65565b838152604060208201526000613116604083018486612f65565b95945050505050565b838152604060208201526000613116604083018486612f1c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4183360301811261319c57600080fd5b9190910192915050565b6000602082840312156131b857600080fd5b6106d182612f0c565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126131f657600080fd5b83018035915067ffffffffffffffff82111561321157600080fd5b60200191503681900382131561295d57600080fd5b6020815260006106d16020830184612b94565b6000808585111561324957600080fd5b8386111561325657600080fd5b5050820193919092039150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561062857610628613263565b6060815260006132b9606083018688612f1c565b6020830194909452506040015292915050565b8281526040602082015260006107406040830184612b94565b84815273ffffffffffffffffffffffffffffffffffffffff8416602082015260606040820152600061331b606083018486612f1c565b9695505050505050565b602081526000610740602083018486612f1c565b8181038181111561062857610628613263565b604081526000613360604083018587612f1c565b9050826020830152949350505050565b604081526000613384604083018587612f1c565b905060ff83166020830152949350505050565b6060815260006133ab606083018688612f1c565b60208301949094525090151560409091015292915050565b6000602082840312156133d557600080fd5b81516106d18161288c56fea2646970667358221220208dca6e3da934cffa05fe425bd9f9c5ea850f85d9181867d2f8c6b2c736fa6564736f6c63430008120033" diff --git a/contracts/gen/v3/passkeys/passkeys.gen.go b/contracts/gen/v3/passkeys/passkeys.gen.go new file mode 100644 index 00000000..cbf05c6b --- /dev/null +++ b/contracts/gen/v3/passkeys/passkeys.gen.go @@ -0,0 +1,234 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package passkeys + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/0xsequence/ethkit/go-ethereum" + "github.com/0xsequence/ethkit/go-ethereum/accounts/abi" + "github.com/0xsequence/ethkit/go-ethereum/accounts/abi/bind" + "github.com/0xsequence/ethkit/go-ethereum/common" + "github.com/0xsequence/ethkit/go-ethereum/core/types" + "github.com/0xsequence/ethkit/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// PasskeysMetaData contains all meta data concerning the Passkeys contract. +var PasskeysMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"function\",\"name\":\"recoverSapientSignatureCompact\",\"inputs\":[{\"name\":\"_digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"error\",\"name\":\"InvalidPasskeySignature\",\"inputs\":[{\"name\":\"_webAuthnAuth\",\"type\":\"tuple\",\"internalType\":\"structWebAuthn.WebAuthnAuth\",\"components\":[{\"name\":\"authenticatorData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"clientDataJSON\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"challengeIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"typeIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"r\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"s\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_requireUserVerification\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"_x\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_y\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}]", + Bin: "0x60808060405234601557610b7d908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c63898bd9211461002757600080fd5b346100bb5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100bb5760043560243567ffffffffffffffff81116100bb57366023820112156100bb57806004013567ffffffffffffffff81116100bb5736602482840101116100bb576100b79260246100a793019061022c565b6040519081529081906020820190565b0390f35b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761013057604052565b6100c0565b919082519283825260005b84811061017f5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201610140565b90926102236060939695946080845260a06101f26101bf835160c06080890152610140880190610135565b60208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808883030184890152610135565b604083015160c08701528683015160e087015260808301516101008701529101516101208501529615156020840152565b60408201520152565b9092919261023861063d565b60009161026e6102488783610681565b357fff000000000000000000000000000000000000000000000000000000000000001690565b957f200000000000000000000000000000000000000000000000000000000000000087166105ed577f01000000000000000000000000000000000000000000000000000000000000008716151596879160f882901c906102e26102dc60f985901c6001165b60010160ff1690565b60ff1690565b6102f56102dc6001600286901c166102d3565b9061031b6102dc6102d3601061031083600160038b901c1684565b971660041c600f1690565b947f4000000000000000000000000000000000000000000000000000000000000000600191166105bd575b6104f06104db6104c66104b1610547996105429e9f9961046c906104fe9f9e9a8f9a61054b9f9a8d61041d610428938f6103d5906105169f6103c86103d5976103dc9288929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9390840180948b896106f4565b369161070c565b905283929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9081019485926106f4565b60208c01528b929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9060408a015289929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b90606088015287602090929192830135920190565b90608087015286602090929192830135920190565b9060a086015285602090929192830135920190565b90998a958201359160200190565b50998a955b6040519283916020830160209181520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826100ef565b610857565b1590565b610581575061057e9394929190600052602052604060002091600052602052604060002090600052602052604060002090565b90565b6105b98387936040519485947f12a693e600000000000000000000000000000000000000000000000000000000865260048601610194565b0390fd5b50989296959397508391948691826105d9856001013590602190565b9c909b975092979498505091979399610346565b610516965061054b949350610547925061060e8161061692610542946106b9565b810190610799565b97939592909687929687929b8c91978893610503565b6040519061063b60c0836100ef565b565b6040519060c0820182811067ffffffffffffffff82111761013057604052600060a08360608152606060208201528260408201528260608201528260808201520152565b901561068a5790565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90929192836001116100bb5783116100bb57600101917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b909392938483116100bb5784116100bb578101920390565b92919267ffffffffffffffff82116101305760405191610754601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016602001846100ef565b8294818452818301116100bb578281602093846000960137010152565b9080601f830112156100bb5781602061057e9335910161070c565b359081151582036100bb57565b9060a0828203126100bb57813567ffffffffffffffff81116100bb5782019060c0828203126100bb576107ca61062c565b91803567ffffffffffffffff81116100bb57826107e8918301610771565b8352602081013567ffffffffffffffff81116100bb5760a09261080c918301610771565b6020840152604081013560408401526060810135606084015260808101356080840152013560a0820152916108436020830161078c565b916040810135916080606083013592013590565b90949392916108676000926109a2565b9560208201519081519060408401516060850151908a51918b600d84017f226368616c6c656e6765223a220000000000000000000000000000000000000060981c82528388019060208160138a600d898b0101106022602d8b8801015160001a141695012092012014169185826014011090821760801c109060207f2274797065223a22776562617574686e2e67657422000000000000000000000060581c918801015160581c1416169952835198895191151560021b6001178060218c015116149060208311161698899384610968575b50505050610948575b50505050565b61095e94955060a0608082015191015191610aaf565b9038808080610942565b60208080959850846001959750840101809882808084519a019601940160025afa831b5afa5192523d156109a0578538808080610939565bfe5b805160609291816109b1575050565b9092506003600284010460021b604051937f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566601f527f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f603f5260208501928286019160208301946020828401019060046003835195600085525b0191603f8351818160121c16516000538181600c1c1651600153818160061c165160025316516003536000518152019087821015610a6e57600490600390610a2b565b5095506000936003936040925201604052066002048093037f3d3d000000000000000000000000000000000000000000000000000000000000815252038252565b9290939193604051938452602084015283604084015260608301526080820152600080526020600060a0836101005afa503d15610b15575b507f7fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a860005160011491111090565b60209060a03d916dd01ea45f9efd5c54f037fa57ea1a5afa503d15610b3a5738610ae7565b63d0d5039b3d526004601cfdfea26469706673582212204d59347ccec10515d14a3270c49d67ccf80be12c8a5f22f758845faf488b169b64736f6c634300081c0033", +} + +// PasskeysABI is the input ABI used to generate the binding from. +// Deprecated: Use PasskeysMetaData.ABI instead. +var PasskeysABI = PasskeysMetaData.ABI + +// PasskeysBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use PasskeysMetaData.Bin instead. +var PasskeysBin = PasskeysMetaData.Bin + +// DeployPasskeys deploys a new Ethereum contract, binding an instance of Passkeys to it. +func DeployPasskeys(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *Passkeys, error) { + parsed, err := PasskeysMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(PasskeysBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &Passkeys{PasskeysCaller: PasskeysCaller{contract: contract}, PasskeysTransactor: PasskeysTransactor{contract: contract}, PasskeysFilterer: PasskeysFilterer{contract: contract}}, nil +} + +// Passkeys is an auto generated Go binding around an Ethereum contract. +type Passkeys struct { + PasskeysCaller // Read-only binding to the contract + PasskeysTransactor // Write-only binding to the contract + PasskeysFilterer // Log filterer for contract events +} + +// PasskeysCaller is an auto generated read-only Go binding around an Ethereum contract. +type PasskeysCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// PasskeysTransactor is an auto generated write-only Go binding around an Ethereum contract. +type PasskeysTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// PasskeysFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type PasskeysFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// PasskeysSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type PasskeysSession struct { + Contract *Passkeys // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// PasskeysCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type PasskeysCallerSession struct { + Contract *PasskeysCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// PasskeysTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type PasskeysTransactorSession struct { + Contract *PasskeysTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// PasskeysRaw is an auto generated low-level Go binding around an Ethereum contract. +type PasskeysRaw struct { + Contract *Passkeys // Generic contract binding to access the raw methods on +} + +// PasskeysCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type PasskeysCallerRaw struct { + Contract *PasskeysCaller // Generic read-only contract binding to access the raw methods on +} + +// PasskeysTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type PasskeysTransactorRaw struct { + Contract *PasskeysTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewPasskeys creates a new instance of Passkeys, bound to a specific deployed contract. +func NewPasskeys(address common.Address, backend bind.ContractBackend) (*Passkeys, error) { + contract, err := bindPasskeys(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &Passkeys{PasskeysCaller: PasskeysCaller{contract: contract}, PasskeysTransactor: PasskeysTransactor{contract: contract}, PasskeysFilterer: PasskeysFilterer{contract: contract}}, nil +} + +// NewPasskeysCaller creates a new read-only instance of Passkeys, bound to a specific deployed contract. +func NewPasskeysCaller(address common.Address, caller bind.ContractCaller) (*PasskeysCaller, error) { + contract, err := bindPasskeys(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &PasskeysCaller{contract: contract}, nil +} + +// NewPasskeysTransactor creates a new write-only instance of Passkeys, bound to a specific deployed contract. +func NewPasskeysTransactor(address common.Address, transactor bind.ContractTransactor) (*PasskeysTransactor, error) { + contract, err := bindPasskeys(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &PasskeysTransactor{contract: contract}, nil +} + +// NewPasskeysFilterer creates a new log filterer instance of Passkeys, bound to a specific deployed contract. +func NewPasskeysFilterer(address common.Address, filterer bind.ContractFilterer) (*PasskeysFilterer, error) { + contract, err := bindPasskeys(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &PasskeysFilterer{contract: contract}, nil +} + +// bindPasskeys binds a generic wrapper to an already deployed contract. +func bindPasskeys(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := PasskeysMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_Passkeys *PasskeysRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _Passkeys.Contract.PasskeysCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_Passkeys *PasskeysRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Passkeys.Contract.PasskeysTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_Passkeys *PasskeysRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Passkeys.Contract.PasskeysTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_Passkeys *PasskeysCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _Passkeys.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_Passkeys *PasskeysTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Passkeys.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_Passkeys *PasskeysTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Passkeys.Contract.contract.Transact(opts, method, params...) +} + +// RecoverSapientSignatureCompact is a free data retrieval call binding the contract method 0x898bd921. +// +// Solidity: function recoverSapientSignatureCompact(bytes32 _digest, bytes _signature) view returns(bytes32) +func (_Passkeys *PasskeysCaller) RecoverSapientSignatureCompact(opts *bind.CallOpts, _digest [32]byte, _signature []byte) ([32]byte, error) { + var out []interface{} + err := _Passkeys.contract.Call(opts, &out, "recoverSapientSignatureCompact", _digest, _signature) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// RecoverSapientSignatureCompact is a free data retrieval call binding the contract method 0x898bd921. +// +// Solidity: function recoverSapientSignatureCompact(bytes32 _digest, bytes _signature) view returns(bytes32) +func (_Passkeys *PasskeysSession) RecoverSapientSignatureCompact(_digest [32]byte, _signature []byte) ([32]byte, error) { + return _Passkeys.Contract.RecoverSapientSignatureCompact(&_Passkeys.CallOpts, _digest, _signature) +} + +// RecoverSapientSignatureCompact is a free data retrieval call binding the contract method 0x898bd921. +// +// Solidity: function recoverSapientSignatureCompact(bytes32 _digest, bytes _signature) view returns(bytes32) +func (_Passkeys *PasskeysCallerSession) RecoverSapientSignatureCompact(_digest [32]byte, _signature []byte) ([32]byte, error) { + return _Passkeys.Contract.RecoverSapientSignatureCompact(&_Passkeys.CallOpts, _digest, _signature) +} diff --git a/contracts/gen/v3/walletestimator/wallet_estimator.gen.go b/contracts/gen/v3/walletestimator/wallet_estimator.gen.go new file mode 100644 index 00000000..67c7a2e5 --- /dev/null +++ b/contracts/gen/v3/walletestimator/wallet_estimator.gen.go @@ -0,0 +1,2170 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package walletestimator + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/0xsequence/ethkit/go-ethereum" + "github.com/0xsequence/ethkit/go-ethereum/accounts/abi" + "github.com/0xsequence/ethkit/go-ethereum/accounts/abi/bind" + "github.com/0xsequence/ethkit/go-ethereum/common" + "github.com/0xsequence/ethkit/go-ethereum/core/types" + "github.com/0xsequence/ethkit/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// PackedUserOperation is an auto generated low-level Go binding around an user-defined struct. +type PackedUserOperation struct { + Sender common.Address + Nonce *big.Int + InitCode []byte + CallData []byte + AccountGasLimits [32]byte + PreVerificationGas *big.Int + GasFees [32]byte + PaymasterAndData []byte + Signature []byte +} + +// PayloadCall is an auto generated low-level Go binding around an user-defined struct. +type PayloadCall struct { + To common.Address + Value *big.Int + Data []byte + GasLimit *big.Int + DelegateCall bool + OnlyFallback bool + BehaviorOnError *big.Int +} + +// PayloadDecoded is an auto generated low-level Go binding around an user-defined struct. +type PayloadDecoded struct { + Kind uint8 + NoChainId bool + Calls []PayloadCall + Space *big.Int + Nonce *big.Int + Message []byte + ImageHash [32]byte + Digest [32]byte + ParentWallets []common.Address +} + +// WalletEstimatorMetaData contains all meta data concerning the WalletEstimator contract. +var WalletEstimatorMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_entryPoint\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"fallback\",\"stateMutability\":\"payable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"addHook\",\"inputs\":[{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"},{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"entrypoint\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"estimate\",\"inputs\":[{\"name\":\"_payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"gasUsed\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"_payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeUserOp\",\"inputs\":[{\"name\":\"_payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getImplementation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStaticSignature\",\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"imageHash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isValidSignature\",\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"onERC1155BatchReceived\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"onERC1155Received\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"onERC721Received\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"readHook\",\"inputs\":[{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"readNonce\",\"inputs\":[{\"name\":\"_space\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"recoverPartialSignature\",\"inputs\":[{\"name\":\"_payload\",\"type\":\"tuple\",\"internalType\":\"structPayload.Decoded\",\"components\":[{\"name\":\"kind\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"noChainId\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"calls\",\"type\":\"tuple[]\",\"internalType\":\"structPayload.Call[]\",\"components\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"delegateCall\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"onlyFallback\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"behaviorOnError\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"space\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"imageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"parentWallets\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]},{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"threshold\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"weight\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"isValidImage\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"imageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"checkpoint\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"opHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"recoverSapientSignature\",\"inputs\":[{\"name\":\"_payload\",\"type\":\"tuple\",\"internalType\":\"structPayload.Decoded\",\"components\":[{\"name\":\"kind\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"noChainId\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"calls\",\"type\":\"tuple[]\",\"internalType\":\"structPayload.Call[]\",\"components\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"delegateCall\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"onlyFallback\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"behaviorOnError\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"space\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"imageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"parentWallets\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]},{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeHook\",\"inputs\":[{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"selfExecute\",\"inputs\":[{\"name\":\"_payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"setStaticSignature\",\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_address\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_timestamp\",\"type\":\"uint96\",\"internalType\":\"uint96\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"tokenReceived\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"tokensReceived\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operatorData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateImageHash\",\"inputs\":[{\"name\":\"_imageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateImplementation\",\"inputs\":[{\"name\":\"_implementation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"validateUserOp\",\"inputs\":[{\"name\":\"userOp\",\"type\":\"tuple\",\"internalType\":\"structPackedUserOperation\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"initCode\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"callData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"accountGasLimits\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"preVerificationGas\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasFees\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"paymasterAndData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"userOpHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"missingAccountFunds\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"validationData\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"CallAborted\",\"inputs\":[{\"name\":\"_opHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"_index\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"_returnData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CallFailed\",\"inputs\":[{\"name\":\"_opHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"_index\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"_returnData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CallSkipped\",\"inputs\":[{\"name\":\"_opHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"_index\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CallSucceeded\",\"inputs\":[{\"name\":\"_opHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"_index\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DefinedHook\",\"inputs\":[{\"name\":\"selector\",\"type\":\"bytes4\",\"indexed\":false,\"internalType\":\"bytes4\"},{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ImageHashUpdated\",\"inputs\":[{\"name\":\"newImageHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ImplementationUpdated\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NonceChange\",\"inputs\":[{\"name\":\"_space\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"_newNonce\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StaticSignatureSet\",\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"_address\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"_timestamp\",\"type\":\"uint96\",\"indexed\":false,\"internalType\":\"uint96\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BadNonce\",\"inputs\":[{\"name\":\"_space\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_provided\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_current\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"ERC4337Disabled\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"HookAlreadyExists\",\"inputs\":[{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}]},{\"type\":\"error\",\"name\":\"HookDoesNotExist\",\"inputs\":[{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}]},{\"type\":\"error\",\"name\":\"ImageHashIsZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidERC1271Signature\",\"inputs\":[{\"name\":\"_opHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_signer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidEntryPoint\",\"inputs\":[{\"name\":\"_entrypoint\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"InvalidKind\",\"inputs\":[{\"name\":\"kind\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"type\":\"error\",\"name\":\"InvalidSapientSignature\",\"inputs\":[{\"name\":\"_payload\",\"type\":\"tuple\",\"internalType\":\"structPayload.Decoded\",\"components\":[{\"name\":\"kind\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"noChainId\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"calls\",\"type\":\"tuple[]\",\"internalType\":\"structPayload.Call[]\",\"components\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"delegateCall\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"onlyFallback\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"behaviorOnError\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"space\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"imageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"parentWallets\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]},{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidSignature\",\"inputs\":[{\"name\":\"_payload\",\"type\":\"tuple\",\"internalType\":\"structPayload.Decoded\",\"components\":[{\"name\":\"kind\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"noChainId\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"calls\",\"type\":\"tuple[]\",\"internalType\":\"structPayload.Call[]\",\"components\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"delegateCall\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"onlyFallback\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"behaviorOnError\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"space\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"imageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"parentWallets\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]},{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidSignatureFlag\",\"inputs\":[{\"name\":\"_flag\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidSignatureWeight\",\"inputs\":[{\"name\":\"_threshold\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_weight\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidStaticSignatureExpired\",\"inputs\":[{\"name\":\"_opHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_expires\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidStaticSignatureWrongCaller\",\"inputs\":[{\"name\":\"_opHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_caller\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_expectedCaller\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"LowWeightChainedSignature\",\"inputs\":[{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_threshold\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_weight\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"NotEnoughGas\",\"inputs\":[{\"name\":\"_payload\",\"type\":\"tuple\",\"internalType\":\"structPayload.Decoded\",\"components\":[{\"name\":\"kind\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"noChainId\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"calls\",\"type\":\"tuple[]\",\"internalType\":\"structPayload.Call[]\",\"components\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"delegateCall\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"onlyFallback\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"behaviorOnError\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"space\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"imageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"parentWallets\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]},{\"name\":\"_index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_gasLeft\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"OnlySelf\",\"inputs\":[{\"name\":\"_sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"_payload\",\"type\":\"tuple\",\"internalType\":\"structPayload.Decoded\",\"components\":[{\"name\":\"kind\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"noChainId\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"calls\",\"type\":\"tuple[]\",\"internalType\":\"structPayload.Call[]\",\"components\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"delegateCall\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"onlyFallback\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"behaviorOnError\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"space\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"imageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"parentWallets\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]},{\"name\":\"_index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_returnData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"UnusedSnapshot\",\"inputs\":[{\"name\":\"_snapshot\",\"type\":\"tuple\",\"internalType\":\"structSnapshot\",\"components\":[{\"name\":\"imageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"checkpoint\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]},{\"type\":\"error\",\"name\":\"WrongChainedCheckpointOrder\",\"inputs\":[{\"name\":\"_nextCheckpoint\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_checkpoint\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]", + Bin: "0x60a034607457601f613e6d38819003918201601f19168301916001600160401b03831184841017607957808492602094604052833981010312607457516001600160a01b0381168103607457608052604051613ddd908161009082396080518181816110a3015281816111e00152611a660152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6080604052600436101561001e575b361561001c5761001c611c2e565b005b60003560e01c806223de291461019d578063025b22bc1461019857806313792a4a14610193578063150b7a021461018e5780631626ba7e1461018957806319822f7c146101845780631a9b23371461017f5780631f6a1eb91461017a57806329561426146101755780634fcf3eca1461017057806351605d801461016b5780636ea44577146101665780638943ec02146101615780638c3f55631461015c57806392dcb3fc14610157578063975befdb146101525780639c145aed1461014d578063a65d69d414610148578063aaf10f4214610143578063ad55366b1461013e578063b93ea7ad14610139578063bc197c8114610134578063f23a6e611461012f5763f727ef1c0361000e57611556565b6114c9565b6113f7565b611298565b611255565b611204565b611195565b61107d565b610fde565b610f80565b610f44565b610ec0565b610e91565b610ded565b610cd1565b610c18565b610b98565b610ac9565b610a14565b61098c565b6108ff565b610802565b6102eb565b61025f565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101c557565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101c557565b6044359073ffffffffffffffffffffffffffffffffffffffff821682036101c557565b359073ffffffffffffffffffffffffffffffffffffffff821682036101c557565b9181601f840112156101c55782359167ffffffffffffffff83116101c557602083818601950101116101c557565b346101c55760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576102966101a2565b5061029f6101ca565b506102a86101ed565b5060843567ffffffffffffffff81116101c5576102c9903690600401610231565b505060a43567ffffffffffffffff81116101c55761001c903690600401610231565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55761031d6101a2565b30330361036a576020817f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca0392305573ffffffffffffffffffffffffffffffffffffffff60405191168152a1005b7fa19dbf00000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff8211176103e357604052565b610398565b6040810190811067ffffffffffffffff8211176103e357604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176103e357604052565b6040519061045460e083610404565b565b6040519061045461012083610404565b359060ff821682036101c557565b359081151582036101c557565b67ffffffffffffffff81116103e35760051b60200190565b67ffffffffffffffff81116103e357601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926104df82610499565b916104ed6040519384610404565b8294818452818301116101c5578281602093846000960137010152565b9080601f830112156101c557816020610525933591016104d3565b90565b81601f820112156101c55780359061053f82610481565b9261054d6040519485610404565b82845260208085019360051b830101918183116101c55760208101935b83851061057957505050505090565b843567ffffffffffffffff81116101c557820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082860301126101c5576105c0610445565b916105cd60208301610210565b83526040820135602084015260608201359267ffffffffffffffff84116101c55760e08361060288602080988198010161050a565b60408401526080810135606084015261061d60a08201610474565b608084015261062e60c08201610474565b60a0840152013560c082015281520194019361056a565b9080601f830112156101c557813561065c81610481565b9261066a6040519485610404565b81845260208085019260051b8201019283116101c557602001905b8282106106925750505090565b6020809161069f84610210565b815201910190610685565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126101c55760043567ffffffffffffffff81116101c5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82850301126101c55761071c610456565b9061072981600401610466565b825261073760248201610474565b6020830152604481013567ffffffffffffffff81116101c55784600461075f92840101610528565b6040830152606481013560608301526084810135608083015260a481013567ffffffffffffffff81116101c55784600461079b9284010161050a565b60a083015260c481013560c083015260e481013560e083015261010481013567ffffffffffffffff81116101c557600485916107d8930101610645565b610100820152916024359067ffffffffffffffff82116101c5576107fe91600401610231565b9091565b346101c557610810366106aa565b909161010081019261082b61082685515161165e565b611679565b9160005b85518051821015610892579061088c61086761084d836001956116f7565b5173ffffffffffffffffffffffffffffffffffffffff1690565b61087183886116f7565b9073ffffffffffffffffffffffffffffffffffffffff169052565b0161082f565b50508383866108a733610871835151856116f7565b526108b3818484611d00565b50156108c55760405160018152602090f35b6108fb906040519384937ff58cc8b500000000000000000000000000000000000000000000000000000000855260048501611952565b0390fd5b346101c55760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576109366101a2565b5061093f6101ca565b5060643567ffffffffffffffff81116101c557610960903690600401610231565b505060206040517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b346101c55760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760043560243567ffffffffffffffff81116101c5576020916109e46109ea923690600401610231565b91611977565b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b346101c55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760043567ffffffffffffffff81116101c5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126101c557610a9760209160243560443591600401611a4c565b604051908152f35b7fffffffff000000000000000000000000000000000000000000000000000000008116036101c557565b346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576020610b0e600435610b0981610a9f565b611edc565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101c55760043567ffffffffffffffff81116101c55781610b7591600401610231565b929092916024359067ffffffffffffffff82116101c5576107fe91600401610231565b610baf610ba436610b2c565b919390935a93612011565b91610bc360608401516080850151906122d5565b610bce828585611d00565b929015610be0575061001c935061242e565b836108fb86926040519384937fa2b6d61b00000000000000000000000000000000000000000000000000000000855260048501611952565b346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760043530330361036a578015610ca7576020817f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf855604051908152a1005b7f4294d1270000000000000000000000000000000000000000000000000000000060005260046000fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c557600435610d0781610a9f565b30330361036a5773ffffffffffffffffffffffffffffffffffffffff610d2c82611edc565b1615610d925760407fffffffff000000000000000000000000000000000000000000000000000000007f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19216610d83600082612c86565b815190815260006020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f1c3812cc000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b60009103126101c557565b346101c55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760207fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf854604051908152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101c5576004359067ffffffffffffffff82116101c5576107fe91600401610231565b610e9a36610e48565b9030330361036a57610eb061001c925a92612011565b90610eba82612752565b9061242e565b346101c55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c557610ef76101a2565b5060443567ffffffffffffffff81116101c557610f18903690600401610231565b505060206040517f8943ec02000000000000000000000000000000000000000000000000000000008152f35b346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576020610a976004356127e6565b346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576040610fbc60043561282c565b73ffffffffffffffffffffffffffffffffffffffff8351921682526020820152f35b610ff6610fea36610b2c565b91939092935a94612011565b9161100e6060840151611008816127e6565b906122d5565b611019828285611d00565b929015611046578461102c85858361242e565b5a810390811161104157602090604051908152f35b61162f565b6108fb84916040519384937fa2b6d61b00000000000000000000000000000000000000000000000000000000855260048501611952565b346101c55761108b36610e48565b9073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016801561116b57330361113d57303b156101c5576111119160009160405193849283927f6ea4457700000000000000000000000000000000000000000000000000000000845260048401611bed565b038183305af180156111385761112357005b80611132600061001c93610404565b80610de2565b6119c3565b7f1d6ddbf4000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7fd13d78350000000000000000000000000000000000000000000000000000000060005260046000fd5b346101c55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101c55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576020305473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346101c55760c061127160008061126b366106aa565b916128f4565b926040929192519485526020850152600160408501526060840152608083015260a0820152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576004356112ce81610a9f565b6112d66101ca565b9030330361036a5773ffffffffffffffffffffffffffffffffffffffff6112fc82611edc565b16611376577f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19173ffffffffffffffffffffffffffffffffffffffff7fffffffff000000000000000000000000000000000000000000000000000000006040931691166113698183612c86565b82519182526020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f5b4d6d6a000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b9181601f840112156101c55782359167ffffffffffffffff83116101c5576020808501948460051b0101116101c557565b346101c55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55761142e6101a2565b506114376101ca565b5060443567ffffffffffffffff81116101c5576114589036906004016113c6565b505060643567ffffffffffffffff81116101c55761147a9036906004016113c6565b505060843567ffffffffffffffff81116101c55761149c903690600401610231565b50506040517fbc197c81000000000000000000000000000000000000000000000000000000008152602090f35b346101c55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576115006101a2565b506115096101ca565b5060843567ffffffffffffffff81116101c55761152a903690600401610231565b505060206040517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b346101c55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576004356115906101ca565b604435916bffffffffffffffffffffffff83168093036101c55730330361036a578273ffffffffffffffffffffffffffffffffffffffff8361161b7febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1967fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606097881b161785612c41565b6040519384521660208301526040820152a1005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b906001820180921161104157565b9190820180921161104157565b9061168382610481565b6116906040519182610404565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06116be8294610481565b0190602036910137565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805182101561170b5760209160051b010190565b6116c8565b919082519283825260005b84811061175a5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b8060208092840101518282860101520161171b565b9080602083519182815201916020808360051b8301019401926000915b83831061179b57505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c08061180e604085015160e0604086015260e0850190611710565b936060810151606085015260808101511515608085015260a0810151151560a085015201519101529701930193019193929061178c565b906020808351928381520192019060005b8181106118635750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101611856565b805160ff168252610525916020828101511515908201526101006118ed6118c76040850151610120604086015261012085019061176f565b606085015160608501526080850151608085015260a085015184820360a0860152611710565b9260c081015160c084015260e081015160e0840152015190610100818403910152611845565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b91611969610525949260408552604085019061188f565b926020818503910152611913565b906119949291611985611e81565b906003825260e0820152611d00565b50156119be577f1626ba7e0000000000000000000000000000000000000000000000000000000090565b600090565b6040513d6000823e3d90fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101c5570180359067ffffffffffffffff82116101c5576020019181360383136101c557565b908160209103126101c5575161052581610a9f565b604090610525949281528160208201520191611913565b91909173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691821561116b5782330361113d5780611b7e575b506020915080610100611aae9201906119cf565b92611ae660405194859384937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611a35565b0381305afa908115611138577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091611b4f575b501603611b4a57600090565b600190565b611b71915060203d602011611b77575b611b698183610404565b810190611a20565b38611b3e565b503d611b5f565b823b156101c5576040517fb760faf900000000000000000000000000000000000000000000000000000000815230600482015292600091849160249183915af190811561113857602092611aae92611bd8575b5090611a9a565b806111326000611be793610404565b38611bd1565b916020610525938181520191611913565b3d15611c29573d90611c0f82610499565b91611c1d6040519384610404565b82523d6000602084013e565b606090565b600436108015611c3b5750565b611c71906000357fffffffff00000000000000000000000000000000000000000000000000000000811691611cc3575b50611edc565b73ffffffffffffffffffffffffffffffffffffffff8116611c8f5750565b60008091604051368382378036810184815203915af4611cad611bfe565b9015611cbb57602081519101f35b602081519101fd5b7fffffffff000000000000000000000000000000000000000000000000000000008092503660040360031b1b161638611c6b565b901561170b5790565b91907f800000000000000000000000000000000000000000000000000000000000000080611d57611d318585611cf7565b357fff000000000000000000000000000000000000000000000000000000000000001690565b1614611dad576000918291611d6b946128f4565b91505091808210611d7d575050600191565b7ffd41fcba0000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b5050611db890612752565b90611dc28261282c565b42811115611e4f575073ffffffffffffffffffffffffffffffffffffffff81168015159081611e44575b50611df8575060019190565b7f8945c3130000000000000000000000000000000000000000000000000000000060005260048390523360245273ffffffffffffffffffffffffffffffffffffffff1660445260646000fd5b905033141538611dec565b7ff95b6ab700000000000000000000000000000000000000000000000000000000600052600484905260245260446000fd5b60405190610120820182811067ffffffffffffffff8211176103e3576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b73ffffffffffffffffffffffffffffffffffffffff906040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a120845216604082015260408152611f53606082610404565b519020541690565b90611f6582610481565b611f726040519182610404565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611fa08294610481565b019060005b828110611fb157505050565b602090604051611fc0816103c7565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c082015282828501015201611fa5565b909392938483116101c55784116101c5578101920390565b91909161201c611e81565b6000815292600190823560f81c827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818316016122be5750600060608701525b600761206b60ff831660011c90565b168061226d575b5060108181160361223857506001925b61208b84611f5b565b92604087019384526000905b8582106120a657505050505050565b8281013560f81c9060010190918160018085160361221657506120ea306120ce8389516116f7565b519073ffffffffffffffffffffffffffffffffffffffff169052565b6002808416146121f6575b6004808416146121a8575b600880841614612175575b61215e61215860c0856121378a608061212e8860108060019c9d161493516116f7565b51019015159052565b61214e8a60a061212e8860208087161493516116f7565b1660061c60031690565b60ff1690565b60c061216b8389516116f7565b5101520190612097565b60019161215e906121589060c09087810135906020019690606061219a878d516116f7565b51015295945050505061210b565b906121f0908481013560e81c906003016121e96121d06121c8848461166c565b838a8a611ff9565b919060406121df888d516116f7565b51019236916104d3565b905261166c565b90612100565b9083810135906020019190602061220e8389516116f7565b5101526120f5565b61223392508481013560601c9060140192906120ce8389516116f7565b6120ea565b60209081160361225a5761ffff918381013560f01c906002015b921692612082565b60ff918381013560f81c90600101612252565b6122b1919385929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290608087015238612072565b80850135606090811c90880152601401925061205c565b906122df826127e6565b81810361236557509060017f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f8819201908160405160208101907f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e82528360408201526040815261234f606082610404565b51902055604080519182526020820192909252a1565b917f9b6514f40000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b6123b16040929594939560608352606083019061188f565b9460208201520152565b9261052596959260c09592855260208501526040840152606083015260808201528160a08201520190611710565b6105259392606092825260208201528160408201520190611710565b61241b610525949260608352606083019061188f565b9260208201526040818403910152611710565b916000604082019384515190825b82811061244d575b50505050505050565b6124588188516116f7565b519361246760a0860151151590565b8061274a575b61270a575060009360608101518015801580612701575b6126c95784906124976080850151151590565b1561268357612542926124be855173ffffffffffffffffffffffffffffffffffffffff1690565b911561267d57505a905b61253d8b61251160608d01516040890151908c8b604051998a967f4c4e814c000000000000000000000000000000000000000000000000000000006020890152602488016123bb565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101855284610404565b612c14565b15612585575b506040805187815260208101839052600192917f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a91a15b0161243c565b60c0018051156126345760018151146125f557516002146125a65738612548565b9493505050507fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b92506125e66125da612c26565b604051938493846123e9565b0390a138808080808080612444565b50846108fb612602612c26565b6040519384937f7f6b0bb100000000000000000000000000000000000000000000000000000000855260048501612405565b509250600180937f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d612675612667612c26565b604051918291858c846123e9565b0390a161257f565b906124c8565b83516126be93925073ffffffffffffffffffffffffffffffffffffffff16916020850151916000146126c357505a905b604085015192612c02565b612542565b906126b3565b83886108fb5a6040519384937f2139527400000000000000000000000000000000000000000000000000000000855260048501612399565b50815a10612484565b6040805188815260208101849052919550600192917f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b9181908101612675565b50801561246d565b6127b46127e061277261276c602085015115153090612cc5565b93612dc0565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610404565b51902090565b60405160208101917f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8352604082015260408152612825606082610404565b5190205490565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e86835260408201526040815261286b606082610404565b51902054906bffffffffffffffffffffffff8260601c921690565b60405190612893826103e8565b60006020838281520152565b908160409103126101c5576020604051916128b9836103e8565b805183520151602082015290565b60409073ffffffffffffffffffffffffffffffffffffffff61052594931681528160208201520190611710565b909491939291853560f81c6001909381908761290e612886565b9360408089161480612be4575b612ae7575b505050600180861614612ac15760028581161460208501526007600286901c1688820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691019080969181966020166129909060051c90565b6129999061165e565b8a820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101959098899a816129e584612752565b9889936129f193611ff9565b916129fb936131d7565b9098612a0f91600052602052604060002090565b90612a2291600052602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff16612a4b91600052602052604060002090565b94815190868215159283612ab6575b505081612aa7575b50612a6a5750565b6040517fccbb534f000000000000000000000000000000000000000000000000000000008152815160048201526020909101516024820152604490fd5b90506020820151101538612a62565b141591508638612a5a565b86612adc9792949550612ad49398611ff9565b939092612fb5565b919394909293929190565b8a81013560601c985060140192509087908a90849015612b0b575b50829150612920565b60038101955073ffffffffffffffffffffffffffffffffffffffff945081013560e81c92604092612b8e929091612b5991612b52918990612b4c898361166c565b92611ff9565b36916104d3565b83519586809481937fccce3bc800000000000000000000000000000000000000000000000000000000835230600484016128c7565b0392165afa801561113857612bac92600091612bb5575b509261166c565b86388981612b02565b612bd7915060403d604011612bdd575b612bcf8183610404565b81019061289f565b38612ba5565b503d612bc5565b5073ffffffffffffffffffffffffffffffffffffffff89161561291b565b9160009391849360208451940192f190565b9160009291839260208351930191f490565b3d90604051916020818401016040528083526000602084013e565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e868352604082015260408152612c80606082610404565b51902055565b60405160208101917fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1208352604082015260408152612c80606082610404565b15612d75576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a081526127e060c082610404565b4690612cce565b805160209091019060005b818110612d945750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101612d87565b610100810151604051612ddb816127b4602082018095612d7c565b51902090612dea815160ff1690565b60ff811680612e63575050906127e0612e066040840151613a6b565b926127b460806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b60018103612ec157505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d466938101938452908101919091526060810192909252906127e081608081016127b4565b60028103612f1757505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e4602082019081529181019290925260608201929092526127e081608081016127b4565b600303612f6b575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d466602082019081529181019290925260608201929092526127e081608081016127b4565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b906123b19060409396959496606084526060840191611913565b9194929092600095600095600095600095600095612fd1611e81565b60028152937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9460005b8281106130285750505050505050805115158061301a575b612a6a5750565b506020810151841115613013565b600381019d50959b509399509197509290919061304c908b9085013560e81c61166c565b958a6000848903613190575089915b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c0361316057509060016130958961309c948789611ff9565b908b6128f4565b9c939c9b929b9a919a99909a9b9d8e9d9e8f905b1061311a5750928b885114613111575b808b10156130df57508a60c08501528992959295949194939093612ffb565b7f37daf62b0000000000000000000000000000000000000000000000000000000060005260048b905260245260446000fd5b600088526130c0565b8d8f6108fb61312b85858c8e611ff9565b9390926040519485947fb006aba000000000000000000000000000000000000000000000000000000000865260048601612f9b565b9798999a9160016131768b61317d94888a611ff9565b90866128f4565b50929d919c909b929a9092918e8e6130b0565b9161305b565b73ffffffffffffffffffffffffffffffffffffffff610525959360609383521660208201528160408201520191611913565b908160209103126101c5575190565b9391909360009460009460005b8181106131f2575050505050565b8481013560f881901c9860019092019788979692909160fc1c9889156139d657506001891461399657600289146137d957600389146137aa57600489146137295760068914613689576005891461363b5760078914613574576008891461351e57600989146133f557600a8914613292577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b909192939495969750600389169788156133e4575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101908101908161330a918787611ff9565b6040517f898bd92100000000000000000000000000000000000000000000000000000000815293918491613342918a60048501611a35565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa91821561113857613385936000936133b1575b5060ff909a168091019a613d37565b9080156133ab579061339f91600052602052604060002090565b955b93929190936131e4565b5061339f565b60ff9193506133d69060203d81116133dd575b6133ce8183610404565b8101906131c8565b9290613376565b503d6133c4565b8084013560f81c98506001016132a7565b9091929394959697506003891697881561350d575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101908101908161346d918787611ff9565b6040517f13792a4a000000000000000000000000000000000000000000000000000000008152939184916134a5918b60048501611952565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa918215611138576134e7936000936133b1575060ff909a168091019a613d37565b908015613507579061350191600052602052604060002090565b956133a1565b50613501565b8084013560f81c985060010161340a565b98506020870197509495939492939192909182013561353c86613cde565b811461354c575b6134e790613cf8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9850613543565b975090919293949597600f16968715613629575b6020600061359a6136079a9b86613ba6565b9c9092918a6040516135dd816127b48a82019485603c917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008252601c8201520190565b51902092604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa15611138576134e79060ff6000519a1680910199613be9565b600189019883013560f81c9750613588565b985060208701975094959394929391929091820135808514613661575b6134e790613c9f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9850613658565b989091929394959662ffffff98506136ab612158600c8416603f9060021c1690565b918215613715575b6003168015613704575b9081906136e8906136e0908781013560e81c906003019c168c01809c8989611ff9565b90898b6131d7565b9111156136fb575b906134e79291613c54565b998201996136f0565b50600281019084013560f01c6136bd565b8482013560f81c92506001909101906136b3565b97509761377f61378c929394959697600f61379493169085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290830180938686611ff9565b9086886131d7565b9061350192980198600052602052604060002090565b985096509394929391929091908082013590602001968015613507579061350191600052602052604060002090565b90919293949596975060038916978815613985575b8084013560601c9961384d916014019061380d9060021c600316612158565b9085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b908101906138b160208c61386385858b8b611ff9565b919073ffffffffffffffffffffffffffffffffffffffff8c604051968795869485937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611a35565b0392165afa908115611138577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091613967575b50160361392357509060ff6134e792991680910199613be9565b6108fb6139348c9389938989611ff9565b906040519485947fb2fed7ae00000000000000000000000000000000000000000000000000000000865260048601613196565b61397f915060203d8111611b7757611b698183610404565b38613909565b8381013560f81c98506001016137ee565b98600f919293949596979850169687156139c5575b60148101976134e79160ff9091169084013560601c613be9565b8281013560f81c97506001016139ab565b98509091929394959698600f16978815613a28575b50602060006139fe6136079a9b86613ba6565b9c90916040519384938c859094939260ff6060936080840197845216602083015260408201520152565b60018101995083013560f81c975060206139eb565b805160209091019060005b818110613a555750505090565b8251845260209384019390920191600101613a48565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0613ab1613a9b83610481565b92613aa96040519485610404565b808452610481565b0136602083013760005b8351811015613b8d5780613ad1600192866116f7565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152613b7961012082610404565b519020613b8682856116f7565b5201613abb565b509091506040516127e0816127b4602082018095613a3d565b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff81116110415791565b90604051907fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208301937f53657175656e6365207369676e65723a0a000000000000000000000000000000855260601b1660318301526045820152604581526127e0606582610404565b916040519160208301937f53657175656e6365206e657374656420636f6e6669673a0a00000000000000008552603884015260588301526078820152607881526127e0609882610404565b60405160208101917f53657175656e636520737461746963206469676573743a0a000000000000000083526038820152603881526127e0605882610404565b6127b46127e061277261276c600060208601511515612cc5565b60405160208101917f53657175656e636520616e792061646472657373207375626469676573743a0a83526040820152604081526127e0606082610404565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e63652073617069656e7420636f6e6669673a0a00000000000000865260601b166039840152604d830152606d820152606d81526127e0608d8261040456fea2646970667358221220fd510fff57502b123cb8cca23f77a513f5d8001f96adc68f13bd2a44f529e4ad64736f6c634300081c0033", +} + +// WalletEstimatorABI is the input ABI used to generate the binding from. +// Deprecated: Use WalletEstimatorMetaData.ABI instead. +var WalletEstimatorABI = WalletEstimatorMetaData.ABI + +// WalletEstimatorBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use WalletEstimatorMetaData.Bin instead. +var WalletEstimatorBin = WalletEstimatorMetaData.Bin + +// DeployWalletEstimator deploys a new Ethereum contract, binding an instance of WalletEstimator to it. +func DeployWalletEstimator(auth *bind.TransactOpts, backend bind.ContractBackend, _entryPoint common.Address) (common.Address, *types.Transaction, *WalletEstimator, error) { + parsed, err := WalletEstimatorMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(WalletEstimatorBin), backend, _entryPoint) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &WalletEstimator{WalletEstimatorCaller: WalletEstimatorCaller{contract: contract}, WalletEstimatorTransactor: WalletEstimatorTransactor{contract: contract}, WalletEstimatorFilterer: WalletEstimatorFilterer{contract: contract}}, nil +} + +// WalletEstimator is an auto generated Go binding around an Ethereum contract. +type WalletEstimator struct { + WalletEstimatorCaller // Read-only binding to the contract + WalletEstimatorTransactor // Write-only binding to the contract + WalletEstimatorFilterer // Log filterer for contract events +} + +// WalletEstimatorCaller is an auto generated read-only Go binding around an Ethereum contract. +type WalletEstimatorCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// WalletEstimatorTransactor is an auto generated write-only Go binding around an Ethereum contract. +type WalletEstimatorTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// WalletEstimatorFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type WalletEstimatorFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// WalletEstimatorSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type WalletEstimatorSession struct { + Contract *WalletEstimator // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// WalletEstimatorCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type WalletEstimatorCallerSession struct { + Contract *WalletEstimatorCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// WalletEstimatorTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type WalletEstimatorTransactorSession struct { + Contract *WalletEstimatorTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// WalletEstimatorRaw is an auto generated low-level Go binding around an Ethereum contract. +type WalletEstimatorRaw struct { + Contract *WalletEstimator // Generic contract binding to access the raw methods on +} + +// WalletEstimatorCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type WalletEstimatorCallerRaw struct { + Contract *WalletEstimatorCaller // Generic read-only contract binding to access the raw methods on +} + +// WalletEstimatorTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type WalletEstimatorTransactorRaw struct { + Contract *WalletEstimatorTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewWalletEstimator creates a new instance of WalletEstimator, bound to a specific deployed contract. +func NewWalletEstimator(address common.Address, backend bind.ContractBackend) (*WalletEstimator, error) { + contract, err := bindWalletEstimator(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &WalletEstimator{WalletEstimatorCaller: WalletEstimatorCaller{contract: contract}, WalletEstimatorTransactor: WalletEstimatorTransactor{contract: contract}, WalletEstimatorFilterer: WalletEstimatorFilterer{contract: contract}}, nil +} + +// NewWalletEstimatorCaller creates a new read-only instance of WalletEstimator, bound to a specific deployed contract. +func NewWalletEstimatorCaller(address common.Address, caller bind.ContractCaller) (*WalletEstimatorCaller, error) { + contract, err := bindWalletEstimator(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &WalletEstimatorCaller{contract: contract}, nil +} + +// NewWalletEstimatorTransactor creates a new write-only instance of WalletEstimator, bound to a specific deployed contract. +func NewWalletEstimatorTransactor(address common.Address, transactor bind.ContractTransactor) (*WalletEstimatorTransactor, error) { + contract, err := bindWalletEstimator(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &WalletEstimatorTransactor{contract: contract}, nil +} + +// NewWalletEstimatorFilterer creates a new log filterer instance of WalletEstimator, bound to a specific deployed contract. +func NewWalletEstimatorFilterer(address common.Address, filterer bind.ContractFilterer) (*WalletEstimatorFilterer, error) { + contract, err := bindWalletEstimator(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &WalletEstimatorFilterer{contract: contract}, nil +} + +// bindWalletEstimator binds a generic wrapper to an already deployed contract. +func bindWalletEstimator(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := WalletEstimatorMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_WalletEstimator *WalletEstimatorRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _WalletEstimator.Contract.WalletEstimatorCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_WalletEstimator *WalletEstimatorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _WalletEstimator.Contract.WalletEstimatorTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_WalletEstimator *WalletEstimatorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _WalletEstimator.Contract.WalletEstimatorTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_WalletEstimator *WalletEstimatorCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _WalletEstimator.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_WalletEstimator *WalletEstimatorTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _WalletEstimator.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_WalletEstimator *WalletEstimatorTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _WalletEstimator.Contract.contract.Transact(opts, method, params...) +} + +// Entrypoint is a free data retrieval call binding the contract method 0xa65d69d4. +// +// Solidity: function entrypoint() view returns(address) +func (_WalletEstimator *WalletEstimatorCaller) Entrypoint(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _WalletEstimator.contract.Call(opts, &out, "entrypoint") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Entrypoint is a free data retrieval call binding the contract method 0xa65d69d4. +// +// Solidity: function entrypoint() view returns(address) +func (_WalletEstimator *WalletEstimatorSession) Entrypoint() (common.Address, error) { + return _WalletEstimator.Contract.Entrypoint(&_WalletEstimator.CallOpts) +} + +// Entrypoint is a free data retrieval call binding the contract method 0xa65d69d4. +// +// Solidity: function entrypoint() view returns(address) +func (_WalletEstimator *WalletEstimatorCallerSession) Entrypoint() (common.Address, error) { + return _WalletEstimator.Contract.Entrypoint(&_WalletEstimator.CallOpts) +} + +// GetImplementation is a free data retrieval call binding the contract method 0xaaf10f42. +// +// Solidity: function getImplementation() view returns(address) +func (_WalletEstimator *WalletEstimatorCaller) GetImplementation(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _WalletEstimator.contract.Call(opts, &out, "getImplementation") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetImplementation is a free data retrieval call binding the contract method 0xaaf10f42. +// +// Solidity: function getImplementation() view returns(address) +func (_WalletEstimator *WalletEstimatorSession) GetImplementation() (common.Address, error) { + return _WalletEstimator.Contract.GetImplementation(&_WalletEstimator.CallOpts) +} + +// GetImplementation is a free data retrieval call binding the contract method 0xaaf10f42. +// +// Solidity: function getImplementation() view returns(address) +func (_WalletEstimator *WalletEstimatorCallerSession) GetImplementation() (common.Address, error) { + return _WalletEstimator.Contract.GetImplementation(&_WalletEstimator.CallOpts) +} + +// GetStaticSignature is a free data retrieval call binding the contract method 0x92dcb3fc. +// +// Solidity: function getStaticSignature(bytes32 _hash) view returns(address, uint256) +func (_WalletEstimator *WalletEstimatorCaller) GetStaticSignature(opts *bind.CallOpts, _hash [32]byte) (common.Address, *big.Int, error) { + var out []interface{} + err := _WalletEstimator.contract.Call(opts, &out, "getStaticSignature", _hash) + + if err != nil { + return *new(common.Address), *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out1 := *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + + return out0, out1, err + +} + +// GetStaticSignature is a free data retrieval call binding the contract method 0x92dcb3fc. +// +// Solidity: function getStaticSignature(bytes32 _hash) view returns(address, uint256) +func (_WalletEstimator *WalletEstimatorSession) GetStaticSignature(_hash [32]byte) (common.Address, *big.Int, error) { + return _WalletEstimator.Contract.GetStaticSignature(&_WalletEstimator.CallOpts, _hash) +} + +// GetStaticSignature is a free data retrieval call binding the contract method 0x92dcb3fc. +// +// Solidity: function getStaticSignature(bytes32 _hash) view returns(address, uint256) +func (_WalletEstimator *WalletEstimatorCallerSession) GetStaticSignature(_hash [32]byte) (common.Address, *big.Int, error) { + return _WalletEstimator.Contract.GetStaticSignature(&_WalletEstimator.CallOpts, _hash) +} + +// ImageHash is a free data retrieval call binding the contract method 0x51605d80. +// +// Solidity: function imageHash() view returns(bytes32) +func (_WalletEstimator *WalletEstimatorCaller) ImageHash(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _WalletEstimator.contract.Call(opts, &out, "imageHash") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ImageHash is a free data retrieval call binding the contract method 0x51605d80. +// +// Solidity: function imageHash() view returns(bytes32) +func (_WalletEstimator *WalletEstimatorSession) ImageHash() ([32]byte, error) { + return _WalletEstimator.Contract.ImageHash(&_WalletEstimator.CallOpts) +} + +// ImageHash is a free data retrieval call binding the contract method 0x51605d80. +// +// Solidity: function imageHash() view returns(bytes32) +func (_WalletEstimator *WalletEstimatorCallerSession) ImageHash() ([32]byte, error) { + return _WalletEstimator.Contract.ImageHash(&_WalletEstimator.CallOpts) +} + +// IsValidSignature is a free data retrieval call binding the contract method 0x1626ba7e. +// +// Solidity: function isValidSignature(bytes32 _hash, bytes _signature) view returns(bytes4) +func (_WalletEstimator *WalletEstimatorCaller) IsValidSignature(opts *bind.CallOpts, _hash [32]byte, _signature []byte) ([4]byte, error) { + var out []interface{} + err := _WalletEstimator.contract.Call(opts, &out, "isValidSignature", _hash, _signature) + + if err != nil { + return *new([4]byte), err + } + + out0 := *abi.ConvertType(out[0], new([4]byte)).(*[4]byte) + + return out0, err + +} + +// IsValidSignature is a free data retrieval call binding the contract method 0x1626ba7e. +// +// Solidity: function isValidSignature(bytes32 _hash, bytes _signature) view returns(bytes4) +func (_WalletEstimator *WalletEstimatorSession) IsValidSignature(_hash [32]byte, _signature []byte) ([4]byte, error) { + return _WalletEstimator.Contract.IsValidSignature(&_WalletEstimator.CallOpts, _hash, _signature) +} + +// IsValidSignature is a free data retrieval call binding the contract method 0x1626ba7e. +// +// Solidity: function isValidSignature(bytes32 _hash, bytes _signature) view returns(bytes4) +func (_WalletEstimator *WalletEstimatorCallerSession) IsValidSignature(_hash [32]byte, _signature []byte) ([4]byte, error) { + return _WalletEstimator.Contract.IsValidSignature(&_WalletEstimator.CallOpts, _hash, _signature) +} + +// OnERC1155BatchReceived is a free data retrieval call binding the contract method 0xbc197c81. +// +// Solidity: function onERC1155BatchReceived(address , address , uint256[] , uint256[] , bytes ) pure returns(bytes4) +func (_WalletEstimator *WalletEstimatorCaller) OnERC1155BatchReceived(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address, arg2 []*big.Int, arg3 []*big.Int, arg4 []byte) ([4]byte, error) { + var out []interface{} + err := _WalletEstimator.contract.Call(opts, &out, "onERC1155BatchReceived", arg0, arg1, arg2, arg3, arg4) + + if err != nil { + return *new([4]byte), err + } + + out0 := *abi.ConvertType(out[0], new([4]byte)).(*[4]byte) + + return out0, err + +} + +// OnERC1155BatchReceived is a free data retrieval call binding the contract method 0xbc197c81. +// +// Solidity: function onERC1155BatchReceived(address , address , uint256[] , uint256[] , bytes ) pure returns(bytes4) +func (_WalletEstimator *WalletEstimatorSession) OnERC1155BatchReceived(arg0 common.Address, arg1 common.Address, arg2 []*big.Int, arg3 []*big.Int, arg4 []byte) ([4]byte, error) { + return _WalletEstimator.Contract.OnERC1155BatchReceived(&_WalletEstimator.CallOpts, arg0, arg1, arg2, arg3, arg4) +} + +// OnERC1155BatchReceived is a free data retrieval call binding the contract method 0xbc197c81. +// +// Solidity: function onERC1155BatchReceived(address , address , uint256[] , uint256[] , bytes ) pure returns(bytes4) +func (_WalletEstimator *WalletEstimatorCallerSession) OnERC1155BatchReceived(arg0 common.Address, arg1 common.Address, arg2 []*big.Int, arg3 []*big.Int, arg4 []byte) ([4]byte, error) { + return _WalletEstimator.Contract.OnERC1155BatchReceived(&_WalletEstimator.CallOpts, arg0, arg1, arg2, arg3, arg4) +} + +// OnERC1155Received is a free data retrieval call binding the contract method 0xf23a6e61. +// +// Solidity: function onERC1155Received(address , address , uint256 , uint256 , bytes ) pure returns(bytes4) +func (_WalletEstimator *WalletEstimatorCaller) OnERC1155Received(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address, arg2 *big.Int, arg3 *big.Int, arg4 []byte) ([4]byte, error) { + var out []interface{} + err := _WalletEstimator.contract.Call(opts, &out, "onERC1155Received", arg0, arg1, arg2, arg3, arg4) + + if err != nil { + return *new([4]byte), err + } + + out0 := *abi.ConvertType(out[0], new([4]byte)).(*[4]byte) + + return out0, err + +} + +// OnERC1155Received is a free data retrieval call binding the contract method 0xf23a6e61. +// +// Solidity: function onERC1155Received(address , address , uint256 , uint256 , bytes ) pure returns(bytes4) +func (_WalletEstimator *WalletEstimatorSession) OnERC1155Received(arg0 common.Address, arg1 common.Address, arg2 *big.Int, arg3 *big.Int, arg4 []byte) ([4]byte, error) { + return _WalletEstimator.Contract.OnERC1155Received(&_WalletEstimator.CallOpts, arg0, arg1, arg2, arg3, arg4) +} + +// OnERC1155Received is a free data retrieval call binding the contract method 0xf23a6e61. +// +// Solidity: function onERC1155Received(address , address , uint256 , uint256 , bytes ) pure returns(bytes4) +func (_WalletEstimator *WalletEstimatorCallerSession) OnERC1155Received(arg0 common.Address, arg1 common.Address, arg2 *big.Int, arg3 *big.Int, arg4 []byte) ([4]byte, error) { + return _WalletEstimator.Contract.OnERC1155Received(&_WalletEstimator.CallOpts, arg0, arg1, arg2, arg3, arg4) +} + +// OnERC721Received is a free data retrieval call binding the contract method 0x150b7a02. +// +// Solidity: function onERC721Received(address , address , uint256 , bytes ) pure returns(bytes4) +func (_WalletEstimator *WalletEstimatorCaller) OnERC721Received(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address, arg2 *big.Int, arg3 []byte) ([4]byte, error) { + var out []interface{} + err := _WalletEstimator.contract.Call(opts, &out, "onERC721Received", arg0, arg1, arg2, arg3) + + if err != nil { + return *new([4]byte), err + } + + out0 := *abi.ConvertType(out[0], new([4]byte)).(*[4]byte) + + return out0, err + +} + +// OnERC721Received is a free data retrieval call binding the contract method 0x150b7a02. +// +// Solidity: function onERC721Received(address , address , uint256 , bytes ) pure returns(bytes4) +func (_WalletEstimator *WalletEstimatorSession) OnERC721Received(arg0 common.Address, arg1 common.Address, arg2 *big.Int, arg3 []byte) ([4]byte, error) { + return _WalletEstimator.Contract.OnERC721Received(&_WalletEstimator.CallOpts, arg0, arg1, arg2, arg3) +} + +// OnERC721Received is a free data retrieval call binding the contract method 0x150b7a02. +// +// Solidity: function onERC721Received(address , address , uint256 , bytes ) pure returns(bytes4) +func (_WalletEstimator *WalletEstimatorCallerSession) OnERC721Received(arg0 common.Address, arg1 common.Address, arg2 *big.Int, arg3 []byte) ([4]byte, error) { + return _WalletEstimator.Contract.OnERC721Received(&_WalletEstimator.CallOpts, arg0, arg1, arg2, arg3) +} + +// ReadHook is a free data retrieval call binding the contract method 0x1a9b2337. +// +// Solidity: function readHook(bytes4 selector) view returns(address) +func (_WalletEstimator *WalletEstimatorCaller) ReadHook(opts *bind.CallOpts, selector [4]byte) (common.Address, error) { + var out []interface{} + err := _WalletEstimator.contract.Call(opts, &out, "readHook", selector) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// ReadHook is a free data retrieval call binding the contract method 0x1a9b2337. +// +// Solidity: function readHook(bytes4 selector) view returns(address) +func (_WalletEstimator *WalletEstimatorSession) ReadHook(selector [4]byte) (common.Address, error) { + return _WalletEstimator.Contract.ReadHook(&_WalletEstimator.CallOpts, selector) +} + +// ReadHook is a free data retrieval call binding the contract method 0x1a9b2337. +// +// Solidity: function readHook(bytes4 selector) view returns(address) +func (_WalletEstimator *WalletEstimatorCallerSession) ReadHook(selector [4]byte) (common.Address, error) { + return _WalletEstimator.Contract.ReadHook(&_WalletEstimator.CallOpts, selector) +} + +// ReadNonce is a free data retrieval call binding the contract method 0x8c3f5563. +// +// Solidity: function readNonce(uint256 _space) view returns(uint256) +func (_WalletEstimator *WalletEstimatorCaller) ReadNonce(opts *bind.CallOpts, _space *big.Int) (*big.Int, error) { + var out []interface{} + err := _WalletEstimator.contract.Call(opts, &out, "readNonce", _space) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// ReadNonce is a free data retrieval call binding the contract method 0x8c3f5563. +// +// Solidity: function readNonce(uint256 _space) view returns(uint256) +func (_WalletEstimator *WalletEstimatorSession) ReadNonce(_space *big.Int) (*big.Int, error) { + return _WalletEstimator.Contract.ReadNonce(&_WalletEstimator.CallOpts, _space) +} + +// ReadNonce is a free data retrieval call binding the contract method 0x8c3f5563. +// +// Solidity: function readNonce(uint256 _space) view returns(uint256) +func (_WalletEstimator *WalletEstimatorCallerSession) ReadNonce(_space *big.Int) (*big.Int, error) { + return _WalletEstimator.Contract.ReadNonce(&_WalletEstimator.CallOpts, _space) +} + +// RecoverPartialSignature is a free data retrieval call binding the contract method 0xad55366b. +// +// Solidity: function recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]) _payload, bytes _signature) view returns(uint256 threshold, uint256 weight, bool isValidImage, bytes32 imageHash, uint256 checkpoint, bytes32 opHash) +func (_WalletEstimator *WalletEstimatorCaller) RecoverPartialSignature(opts *bind.CallOpts, _payload PayloadDecoded, _signature []byte) (struct { + Threshold *big.Int + Weight *big.Int + IsValidImage bool + ImageHash [32]byte + Checkpoint *big.Int + OpHash [32]byte +}, error) { + var out []interface{} + err := _WalletEstimator.contract.Call(opts, &out, "recoverPartialSignature", _payload, _signature) + + outstruct := new(struct { + Threshold *big.Int + Weight *big.Int + IsValidImage bool + ImageHash [32]byte + Checkpoint *big.Int + OpHash [32]byte + }) + if err != nil { + return *outstruct, err + } + + outstruct.Threshold = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.Weight = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + outstruct.IsValidImage = *abi.ConvertType(out[2], new(bool)).(*bool) + outstruct.ImageHash = *abi.ConvertType(out[3], new([32]byte)).(*[32]byte) + outstruct.Checkpoint = *abi.ConvertType(out[4], new(*big.Int)).(**big.Int) + outstruct.OpHash = *abi.ConvertType(out[5], new([32]byte)).(*[32]byte) + + return *outstruct, err + +} + +// RecoverPartialSignature is a free data retrieval call binding the contract method 0xad55366b. +// +// Solidity: function recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]) _payload, bytes _signature) view returns(uint256 threshold, uint256 weight, bool isValidImage, bytes32 imageHash, uint256 checkpoint, bytes32 opHash) +func (_WalletEstimator *WalletEstimatorSession) RecoverPartialSignature(_payload PayloadDecoded, _signature []byte) (struct { + Threshold *big.Int + Weight *big.Int + IsValidImage bool + ImageHash [32]byte + Checkpoint *big.Int + OpHash [32]byte +}, error) { + return _WalletEstimator.Contract.RecoverPartialSignature(&_WalletEstimator.CallOpts, _payload, _signature) +} + +// RecoverPartialSignature is a free data retrieval call binding the contract method 0xad55366b. +// +// Solidity: function recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]) _payload, bytes _signature) view returns(uint256 threshold, uint256 weight, bool isValidImage, bytes32 imageHash, uint256 checkpoint, bytes32 opHash) +func (_WalletEstimator *WalletEstimatorCallerSession) RecoverPartialSignature(_payload PayloadDecoded, _signature []byte) (struct { + Threshold *big.Int + Weight *big.Int + IsValidImage bool + ImageHash [32]byte + Checkpoint *big.Int + OpHash [32]byte +}, error) { + return _WalletEstimator.Contract.RecoverPartialSignature(&_WalletEstimator.CallOpts, _payload, _signature) +} + +// RecoverSapientSignature is a free data retrieval call binding the contract method 0x13792a4a. +// +// Solidity: function recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]) _payload, bytes _signature) view returns(bytes32) +func (_WalletEstimator *WalletEstimatorCaller) RecoverSapientSignature(opts *bind.CallOpts, _payload PayloadDecoded, _signature []byte) ([32]byte, error) { + var out []interface{} + err := _WalletEstimator.contract.Call(opts, &out, "recoverSapientSignature", _payload, _signature) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// RecoverSapientSignature is a free data retrieval call binding the contract method 0x13792a4a. +// +// Solidity: function recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]) _payload, bytes _signature) view returns(bytes32) +func (_WalletEstimator *WalletEstimatorSession) RecoverSapientSignature(_payload PayloadDecoded, _signature []byte) ([32]byte, error) { + return _WalletEstimator.Contract.RecoverSapientSignature(&_WalletEstimator.CallOpts, _payload, _signature) +} + +// RecoverSapientSignature is a free data retrieval call binding the contract method 0x13792a4a. +// +// Solidity: function recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]) _payload, bytes _signature) view returns(bytes32) +func (_WalletEstimator *WalletEstimatorCallerSession) RecoverSapientSignature(_payload PayloadDecoded, _signature []byte) ([32]byte, error) { + return _WalletEstimator.Contract.RecoverSapientSignature(&_WalletEstimator.CallOpts, _payload, _signature) +} + +// TokenReceived is a free data retrieval call binding the contract method 0x8943ec02. +// +// Solidity: function tokenReceived(address , uint256 , bytes ) pure returns(bytes4) +func (_WalletEstimator *WalletEstimatorCaller) TokenReceived(opts *bind.CallOpts, arg0 common.Address, arg1 *big.Int, arg2 []byte) ([4]byte, error) { + var out []interface{} + err := _WalletEstimator.contract.Call(opts, &out, "tokenReceived", arg0, arg1, arg2) + + if err != nil { + return *new([4]byte), err + } + + out0 := *abi.ConvertType(out[0], new([4]byte)).(*[4]byte) + + return out0, err + +} + +// TokenReceived is a free data retrieval call binding the contract method 0x8943ec02. +// +// Solidity: function tokenReceived(address , uint256 , bytes ) pure returns(bytes4) +func (_WalletEstimator *WalletEstimatorSession) TokenReceived(arg0 common.Address, arg1 *big.Int, arg2 []byte) ([4]byte, error) { + return _WalletEstimator.Contract.TokenReceived(&_WalletEstimator.CallOpts, arg0, arg1, arg2) +} + +// TokenReceived is a free data retrieval call binding the contract method 0x8943ec02. +// +// Solidity: function tokenReceived(address , uint256 , bytes ) pure returns(bytes4) +func (_WalletEstimator *WalletEstimatorCallerSession) TokenReceived(arg0 common.Address, arg1 *big.Int, arg2 []byte) ([4]byte, error) { + return _WalletEstimator.Contract.TokenReceived(&_WalletEstimator.CallOpts, arg0, arg1, arg2) +} + +// AddHook is a paid mutator transaction binding the contract method 0xb93ea7ad. +// +// Solidity: function addHook(bytes4 selector, address implementation) payable returns() +func (_WalletEstimator *WalletEstimatorTransactor) AddHook(opts *bind.TransactOpts, selector [4]byte, implementation common.Address) (*types.Transaction, error) { + return _WalletEstimator.contract.Transact(opts, "addHook", selector, implementation) +} + +// AddHook is a paid mutator transaction binding the contract method 0xb93ea7ad. +// +// Solidity: function addHook(bytes4 selector, address implementation) payable returns() +func (_WalletEstimator *WalletEstimatorSession) AddHook(selector [4]byte, implementation common.Address) (*types.Transaction, error) { + return _WalletEstimator.Contract.AddHook(&_WalletEstimator.TransactOpts, selector, implementation) +} + +// AddHook is a paid mutator transaction binding the contract method 0xb93ea7ad. +// +// Solidity: function addHook(bytes4 selector, address implementation) payable returns() +func (_WalletEstimator *WalletEstimatorTransactorSession) AddHook(selector [4]byte, implementation common.Address) (*types.Transaction, error) { + return _WalletEstimator.Contract.AddHook(&_WalletEstimator.TransactOpts, selector, implementation) +} + +// Estimate is a paid mutator transaction binding the contract method 0x975befdb. +// +// Solidity: function estimate(bytes _payload, bytes _signature) payable returns(uint256 gasUsed) +func (_WalletEstimator *WalletEstimatorTransactor) Estimate(opts *bind.TransactOpts, _payload []byte, _signature []byte) (*types.Transaction, error) { + return _WalletEstimator.contract.Transact(opts, "estimate", _payload, _signature) +} + +// Estimate is a paid mutator transaction binding the contract method 0x975befdb. +// +// Solidity: function estimate(bytes _payload, bytes _signature) payable returns(uint256 gasUsed) +func (_WalletEstimator *WalletEstimatorSession) Estimate(_payload []byte, _signature []byte) (*types.Transaction, error) { + return _WalletEstimator.Contract.Estimate(&_WalletEstimator.TransactOpts, _payload, _signature) +} + +// Estimate is a paid mutator transaction binding the contract method 0x975befdb. +// +// Solidity: function estimate(bytes _payload, bytes _signature) payable returns(uint256 gasUsed) +func (_WalletEstimator *WalletEstimatorTransactorSession) Estimate(_payload []byte, _signature []byte) (*types.Transaction, error) { + return _WalletEstimator.Contract.Estimate(&_WalletEstimator.TransactOpts, _payload, _signature) +} + +// Execute is a paid mutator transaction binding the contract method 0x1f6a1eb9. +// +// Solidity: function execute(bytes _payload, bytes _signature) payable returns() +func (_WalletEstimator *WalletEstimatorTransactor) Execute(opts *bind.TransactOpts, _payload []byte, _signature []byte) (*types.Transaction, error) { + return _WalletEstimator.contract.Transact(opts, "execute", _payload, _signature) +} + +// Execute is a paid mutator transaction binding the contract method 0x1f6a1eb9. +// +// Solidity: function execute(bytes _payload, bytes _signature) payable returns() +func (_WalletEstimator *WalletEstimatorSession) Execute(_payload []byte, _signature []byte) (*types.Transaction, error) { + return _WalletEstimator.Contract.Execute(&_WalletEstimator.TransactOpts, _payload, _signature) +} + +// Execute is a paid mutator transaction binding the contract method 0x1f6a1eb9. +// +// Solidity: function execute(bytes _payload, bytes _signature) payable returns() +func (_WalletEstimator *WalletEstimatorTransactorSession) Execute(_payload []byte, _signature []byte) (*types.Transaction, error) { + return _WalletEstimator.Contract.Execute(&_WalletEstimator.TransactOpts, _payload, _signature) +} + +// ExecuteUserOp is a paid mutator transaction binding the contract method 0x9c145aed. +// +// Solidity: function executeUserOp(bytes _payload) returns() +func (_WalletEstimator *WalletEstimatorTransactor) ExecuteUserOp(opts *bind.TransactOpts, _payload []byte) (*types.Transaction, error) { + return _WalletEstimator.contract.Transact(opts, "executeUserOp", _payload) +} + +// ExecuteUserOp is a paid mutator transaction binding the contract method 0x9c145aed. +// +// Solidity: function executeUserOp(bytes _payload) returns() +func (_WalletEstimator *WalletEstimatorSession) ExecuteUserOp(_payload []byte) (*types.Transaction, error) { + return _WalletEstimator.Contract.ExecuteUserOp(&_WalletEstimator.TransactOpts, _payload) +} + +// ExecuteUserOp is a paid mutator transaction binding the contract method 0x9c145aed. +// +// Solidity: function executeUserOp(bytes _payload) returns() +func (_WalletEstimator *WalletEstimatorTransactorSession) ExecuteUserOp(_payload []byte) (*types.Transaction, error) { + return _WalletEstimator.Contract.ExecuteUserOp(&_WalletEstimator.TransactOpts, _payload) +} + +// RemoveHook is a paid mutator transaction binding the contract method 0x4fcf3eca. +// +// Solidity: function removeHook(bytes4 selector) payable returns() +func (_WalletEstimator *WalletEstimatorTransactor) RemoveHook(opts *bind.TransactOpts, selector [4]byte) (*types.Transaction, error) { + return _WalletEstimator.contract.Transact(opts, "removeHook", selector) +} + +// RemoveHook is a paid mutator transaction binding the contract method 0x4fcf3eca. +// +// Solidity: function removeHook(bytes4 selector) payable returns() +func (_WalletEstimator *WalletEstimatorSession) RemoveHook(selector [4]byte) (*types.Transaction, error) { + return _WalletEstimator.Contract.RemoveHook(&_WalletEstimator.TransactOpts, selector) +} + +// RemoveHook is a paid mutator transaction binding the contract method 0x4fcf3eca. +// +// Solidity: function removeHook(bytes4 selector) payable returns() +func (_WalletEstimator *WalletEstimatorTransactorSession) RemoveHook(selector [4]byte) (*types.Transaction, error) { + return _WalletEstimator.Contract.RemoveHook(&_WalletEstimator.TransactOpts, selector) +} + +// SelfExecute is a paid mutator transaction binding the contract method 0x6ea44577. +// +// Solidity: function selfExecute(bytes _payload) payable returns() +func (_WalletEstimator *WalletEstimatorTransactor) SelfExecute(opts *bind.TransactOpts, _payload []byte) (*types.Transaction, error) { + return _WalletEstimator.contract.Transact(opts, "selfExecute", _payload) +} + +// SelfExecute is a paid mutator transaction binding the contract method 0x6ea44577. +// +// Solidity: function selfExecute(bytes _payload) payable returns() +func (_WalletEstimator *WalletEstimatorSession) SelfExecute(_payload []byte) (*types.Transaction, error) { + return _WalletEstimator.Contract.SelfExecute(&_WalletEstimator.TransactOpts, _payload) +} + +// SelfExecute is a paid mutator transaction binding the contract method 0x6ea44577. +// +// Solidity: function selfExecute(bytes _payload) payable returns() +func (_WalletEstimator *WalletEstimatorTransactorSession) SelfExecute(_payload []byte) (*types.Transaction, error) { + return _WalletEstimator.Contract.SelfExecute(&_WalletEstimator.TransactOpts, _payload) +} + +// SetStaticSignature is a paid mutator transaction binding the contract method 0xf727ef1c. +// +// Solidity: function setStaticSignature(bytes32 _hash, address _address, uint96 _timestamp) returns() +func (_WalletEstimator *WalletEstimatorTransactor) SetStaticSignature(opts *bind.TransactOpts, _hash [32]byte, _address common.Address, _timestamp *big.Int) (*types.Transaction, error) { + return _WalletEstimator.contract.Transact(opts, "setStaticSignature", _hash, _address, _timestamp) +} + +// SetStaticSignature is a paid mutator transaction binding the contract method 0xf727ef1c. +// +// Solidity: function setStaticSignature(bytes32 _hash, address _address, uint96 _timestamp) returns() +func (_WalletEstimator *WalletEstimatorSession) SetStaticSignature(_hash [32]byte, _address common.Address, _timestamp *big.Int) (*types.Transaction, error) { + return _WalletEstimator.Contract.SetStaticSignature(&_WalletEstimator.TransactOpts, _hash, _address, _timestamp) +} + +// SetStaticSignature is a paid mutator transaction binding the contract method 0xf727ef1c. +// +// Solidity: function setStaticSignature(bytes32 _hash, address _address, uint96 _timestamp) returns() +func (_WalletEstimator *WalletEstimatorTransactorSession) SetStaticSignature(_hash [32]byte, _address common.Address, _timestamp *big.Int) (*types.Transaction, error) { + return _WalletEstimator.Contract.SetStaticSignature(&_WalletEstimator.TransactOpts, _hash, _address, _timestamp) +} + +// TokensReceived is a paid mutator transaction binding the contract method 0x0023de29. +// +// Solidity: function tokensReceived(address operator, address from, address to, uint256 amount, bytes data, bytes operatorData) returns() +func (_WalletEstimator *WalletEstimatorTransactor) TokensReceived(opts *bind.TransactOpts, operator common.Address, from common.Address, to common.Address, amount *big.Int, data []byte, operatorData []byte) (*types.Transaction, error) { + return _WalletEstimator.contract.Transact(opts, "tokensReceived", operator, from, to, amount, data, operatorData) +} + +// TokensReceived is a paid mutator transaction binding the contract method 0x0023de29. +// +// Solidity: function tokensReceived(address operator, address from, address to, uint256 amount, bytes data, bytes operatorData) returns() +func (_WalletEstimator *WalletEstimatorSession) TokensReceived(operator common.Address, from common.Address, to common.Address, amount *big.Int, data []byte, operatorData []byte) (*types.Transaction, error) { + return _WalletEstimator.Contract.TokensReceived(&_WalletEstimator.TransactOpts, operator, from, to, amount, data, operatorData) +} + +// TokensReceived is a paid mutator transaction binding the contract method 0x0023de29. +// +// Solidity: function tokensReceived(address operator, address from, address to, uint256 amount, bytes data, bytes operatorData) returns() +func (_WalletEstimator *WalletEstimatorTransactorSession) TokensReceived(operator common.Address, from common.Address, to common.Address, amount *big.Int, data []byte, operatorData []byte) (*types.Transaction, error) { + return _WalletEstimator.Contract.TokensReceived(&_WalletEstimator.TransactOpts, operator, from, to, amount, data, operatorData) +} + +// UpdateImageHash is a paid mutator transaction binding the contract method 0x29561426. +// +// Solidity: function updateImageHash(bytes32 _imageHash) returns() +func (_WalletEstimator *WalletEstimatorTransactor) UpdateImageHash(opts *bind.TransactOpts, _imageHash [32]byte) (*types.Transaction, error) { + return _WalletEstimator.contract.Transact(opts, "updateImageHash", _imageHash) +} + +// UpdateImageHash is a paid mutator transaction binding the contract method 0x29561426. +// +// Solidity: function updateImageHash(bytes32 _imageHash) returns() +func (_WalletEstimator *WalletEstimatorSession) UpdateImageHash(_imageHash [32]byte) (*types.Transaction, error) { + return _WalletEstimator.Contract.UpdateImageHash(&_WalletEstimator.TransactOpts, _imageHash) +} + +// UpdateImageHash is a paid mutator transaction binding the contract method 0x29561426. +// +// Solidity: function updateImageHash(bytes32 _imageHash) returns() +func (_WalletEstimator *WalletEstimatorTransactorSession) UpdateImageHash(_imageHash [32]byte) (*types.Transaction, error) { + return _WalletEstimator.Contract.UpdateImageHash(&_WalletEstimator.TransactOpts, _imageHash) +} + +// UpdateImplementation is a paid mutator transaction binding the contract method 0x025b22bc. +// +// Solidity: function updateImplementation(address _implementation) payable returns() +func (_WalletEstimator *WalletEstimatorTransactor) UpdateImplementation(opts *bind.TransactOpts, _implementation common.Address) (*types.Transaction, error) { + return _WalletEstimator.contract.Transact(opts, "updateImplementation", _implementation) +} + +// UpdateImplementation is a paid mutator transaction binding the contract method 0x025b22bc. +// +// Solidity: function updateImplementation(address _implementation) payable returns() +func (_WalletEstimator *WalletEstimatorSession) UpdateImplementation(_implementation common.Address) (*types.Transaction, error) { + return _WalletEstimator.Contract.UpdateImplementation(&_WalletEstimator.TransactOpts, _implementation) +} + +// UpdateImplementation is a paid mutator transaction binding the contract method 0x025b22bc. +// +// Solidity: function updateImplementation(address _implementation) payable returns() +func (_WalletEstimator *WalletEstimatorTransactorSession) UpdateImplementation(_implementation common.Address) (*types.Transaction, error) { + return _WalletEstimator.Contract.UpdateImplementation(&_WalletEstimator.TransactOpts, _implementation) +} + +// ValidateUserOp is a paid mutator transaction binding the contract method 0x19822f7c. +// +// Solidity: function validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes) userOp, bytes32 userOpHash, uint256 missingAccountFunds) returns(uint256 validationData) +func (_WalletEstimator *WalletEstimatorTransactor) ValidateUserOp(opts *bind.TransactOpts, userOp PackedUserOperation, userOpHash [32]byte, missingAccountFunds *big.Int) (*types.Transaction, error) { + return _WalletEstimator.contract.Transact(opts, "validateUserOp", userOp, userOpHash, missingAccountFunds) +} + +// ValidateUserOp is a paid mutator transaction binding the contract method 0x19822f7c. +// +// Solidity: function validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes) userOp, bytes32 userOpHash, uint256 missingAccountFunds) returns(uint256 validationData) +func (_WalletEstimator *WalletEstimatorSession) ValidateUserOp(userOp PackedUserOperation, userOpHash [32]byte, missingAccountFunds *big.Int) (*types.Transaction, error) { + return _WalletEstimator.Contract.ValidateUserOp(&_WalletEstimator.TransactOpts, userOp, userOpHash, missingAccountFunds) +} + +// ValidateUserOp is a paid mutator transaction binding the contract method 0x19822f7c. +// +// Solidity: function validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes) userOp, bytes32 userOpHash, uint256 missingAccountFunds) returns(uint256 validationData) +func (_WalletEstimator *WalletEstimatorTransactorSession) ValidateUserOp(userOp PackedUserOperation, userOpHash [32]byte, missingAccountFunds *big.Int) (*types.Transaction, error) { + return _WalletEstimator.Contract.ValidateUserOp(&_WalletEstimator.TransactOpts, userOp, userOpHash, missingAccountFunds) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_WalletEstimator *WalletEstimatorTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) { + return _WalletEstimator.contract.RawTransact(opts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_WalletEstimator *WalletEstimatorSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _WalletEstimator.Contract.Fallback(&_WalletEstimator.TransactOpts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_WalletEstimator *WalletEstimatorTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _WalletEstimator.Contract.Fallback(&_WalletEstimator.TransactOpts, calldata) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_WalletEstimator *WalletEstimatorTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _WalletEstimator.contract.RawTransact(opts, nil) // calldata is disallowed for receive function +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_WalletEstimator *WalletEstimatorSession) Receive() (*types.Transaction, error) { + return _WalletEstimator.Contract.Receive(&_WalletEstimator.TransactOpts) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_WalletEstimator *WalletEstimatorTransactorSession) Receive() (*types.Transaction, error) { + return _WalletEstimator.Contract.Receive(&_WalletEstimator.TransactOpts) +} + +// WalletEstimatorCallAbortedIterator is returned from FilterCallAborted and is used to iterate over the raw logs and unpacked data for CallAborted events raised by the WalletEstimator contract. +type WalletEstimatorCallAbortedIterator struct { + Event *WalletEstimatorCallAborted // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WalletEstimatorCallAbortedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WalletEstimatorCallAborted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WalletEstimatorCallAborted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WalletEstimatorCallAbortedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WalletEstimatorCallAbortedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WalletEstimatorCallAborted represents a CallAborted event raised by the WalletEstimator contract. +type WalletEstimatorCallAborted struct { + OpHash [32]byte + Index *big.Int + ReturnData []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterCallAborted is a free log retrieval operation binding the contract event 0xc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b. +// +// Solidity: event CallAborted(bytes32 _opHash, uint256 _index, bytes _returnData) +func (_WalletEstimator *WalletEstimatorFilterer) FilterCallAborted(opts *bind.FilterOpts) (*WalletEstimatorCallAbortedIterator, error) { + + logs, sub, err := _WalletEstimator.contract.FilterLogs(opts, "CallAborted") + if err != nil { + return nil, err + } + return &WalletEstimatorCallAbortedIterator{contract: _WalletEstimator.contract, event: "CallAborted", logs: logs, sub: sub}, nil +} + +// WatchCallAborted is a free log subscription operation binding the contract event 0xc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b. +// +// Solidity: event CallAborted(bytes32 _opHash, uint256 _index, bytes _returnData) +func (_WalletEstimator *WalletEstimatorFilterer) WatchCallAborted(opts *bind.WatchOpts, sink chan<- *WalletEstimatorCallAborted) (event.Subscription, error) { + + logs, sub, err := _WalletEstimator.contract.WatchLogs(opts, "CallAborted") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WalletEstimatorCallAborted) + if err := _WalletEstimator.contract.UnpackLog(event, "CallAborted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseCallAborted is a log parse operation binding the contract event 0xc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b. +// +// Solidity: event CallAborted(bytes32 _opHash, uint256 _index, bytes _returnData) +func (_WalletEstimator *WalletEstimatorFilterer) ParseCallAborted(log types.Log) (*WalletEstimatorCallAborted, error) { + event := new(WalletEstimatorCallAborted) + if err := _WalletEstimator.contract.UnpackLog(event, "CallAborted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WalletEstimatorCallFailedIterator is returned from FilterCallFailed and is used to iterate over the raw logs and unpacked data for CallFailed events raised by the WalletEstimator contract. +type WalletEstimatorCallFailedIterator struct { + Event *WalletEstimatorCallFailed // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WalletEstimatorCallFailedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WalletEstimatorCallFailed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WalletEstimatorCallFailed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WalletEstimatorCallFailedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WalletEstimatorCallFailedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WalletEstimatorCallFailed represents a CallFailed event raised by the WalletEstimator contract. +type WalletEstimatorCallFailed struct { + OpHash [32]byte + Index *big.Int + ReturnData []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterCallFailed is a free log retrieval operation binding the contract event 0x115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d. +// +// Solidity: event CallFailed(bytes32 _opHash, uint256 _index, bytes _returnData) +func (_WalletEstimator *WalletEstimatorFilterer) FilterCallFailed(opts *bind.FilterOpts) (*WalletEstimatorCallFailedIterator, error) { + + logs, sub, err := _WalletEstimator.contract.FilterLogs(opts, "CallFailed") + if err != nil { + return nil, err + } + return &WalletEstimatorCallFailedIterator{contract: _WalletEstimator.contract, event: "CallFailed", logs: logs, sub: sub}, nil +} + +// WatchCallFailed is a free log subscription operation binding the contract event 0x115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d. +// +// Solidity: event CallFailed(bytes32 _opHash, uint256 _index, bytes _returnData) +func (_WalletEstimator *WalletEstimatorFilterer) WatchCallFailed(opts *bind.WatchOpts, sink chan<- *WalletEstimatorCallFailed) (event.Subscription, error) { + + logs, sub, err := _WalletEstimator.contract.WatchLogs(opts, "CallFailed") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WalletEstimatorCallFailed) + if err := _WalletEstimator.contract.UnpackLog(event, "CallFailed", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseCallFailed is a log parse operation binding the contract event 0x115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d. +// +// Solidity: event CallFailed(bytes32 _opHash, uint256 _index, bytes _returnData) +func (_WalletEstimator *WalletEstimatorFilterer) ParseCallFailed(log types.Log) (*WalletEstimatorCallFailed, error) { + event := new(WalletEstimatorCallFailed) + if err := _WalletEstimator.contract.UnpackLog(event, "CallFailed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WalletEstimatorCallSkippedIterator is returned from FilterCallSkipped and is used to iterate over the raw logs and unpacked data for CallSkipped events raised by the WalletEstimator contract. +type WalletEstimatorCallSkippedIterator struct { + Event *WalletEstimatorCallSkipped // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WalletEstimatorCallSkippedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WalletEstimatorCallSkipped) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WalletEstimatorCallSkipped) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WalletEstimatorCallSkippedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WalletEstimatorCallSkippedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WalletEstimatorCallSkipped represents a CallSkipped event raised by the WalletEstimator contract. +type WalletEstimatorCallSkipped struct { + OpHash [32]byte + Index *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterCallSkipped is a free log retrieval operation binding the contract event 0x9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b. +// +// Solidity: event CallSkipped(bytes32 _opHash, uint256 _index) +func (_WalletEstimator *WalletEstimatorFilterer) FilterCallSkipped(opts *bind.FilterOpts) (*WalletEstimatorCallSkippedIterator, error) { + + logs, sub, err := _WalletEstimator.contract.FilterLogs(opts, "CallSkipped") + if err != nil { + return nil, err + } + return &WalletEstimatorCallSkippedIterator{contract: _WalletEstimator.contract, event: "CallSkipped", logs: logs, sub: sub}, nil +} + +// WatchCallSkipped is a free log subscription operation binding the contract event 0x9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b. +// +// Solidity: event CallSkipped(bytes32 _opHash, uint256 _index) +func (_WalletEstimator *WalletEstimatorFilterer) WatchCallSkipped(opts *bind.WatchOpts, sink chan<- *WalletEstimatorCallSkipped) (event.Subscription, error) { + + logs, sub, err := _WalletEstimator.contract.WatchLogs(opts, "CallSkipped") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WalletEstimatorCallSkipped) + if err := _WalletEstimator.contract.UnpackLog(event, "CallSkipped", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseCallSkipped is a log parse operation binding the contract event 0x9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b. +// +// Solidity: event CallSkipped(bytes32 _opHash, uint256 _index) +func (_WalletEstimator *WalletEstimatorFilterer) ParseCallSkipped(log types.Log) (*WalletEstimatorCallSkipped, error) { + event := new(WalletEstimatorCallSkipped) + if err := _WalletEstimator.contract.UnpackLog(event, "CallSkipped", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WalletEstimatorCallSucceededIterator is returned from FilterCallSucceeded and is used to iterate over the raw logs and unpacked data for CallSucceeded events raised by the WalletEstimator contract. +type WalletEstimatorCallSucceededIterator struct { + Event *WalletEstimatorCallSucceeded // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WalletEstimatorCallSucceededIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WalletEstimatorCallSucceeded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WalletEstimatorCallSucceeded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WalletEstimatorCallSucceededIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WalletEstimatorCallSucceededIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WalletEstimatorCallSucceeded represents a CallSucceeded event raised by the WalletEstimator contract. +type WalletEstimatorCallSucceeded struct { + OpHash [32]byte + Index *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterCallSucceeded is a free log retrieval operation binding the contract event 0x5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a. +// +// Solidity: event CallSucceeded(bytes32 _opHash, uint256 _index) +func (_WalletEstimator *WalletEstimatorFilterer) FilterCallSucceeded(opts *bind.FilterOpts) (*WalletEstimatorCallSucceededIterator, error) { + + logs, sub, err := _WalletEstimator.contract.FilterLogs(opts, "CallSucceeded") + if err != nil { + return nil, err + } + return &WalletEstimatorCallSucceededIterator{contract: _WalletEstimator.contract, event: "CallSucceeded", logs: logs, sub: sub}, nil +} + +// WatchCallSucceeded is a free log subscription operation binding the contract event 0x5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a. +// +// Solidity: event CallSucceeded(bytes32 _opHash, uint256 _index) +func (_WalletEstimator *WalletEstimatorFilterer) WatchCallSucceeded(opts *bind.WatchOpts, sink chan<- *WalletEstimatorCallSucceeded) (event.Subscription, error) { + + logs, sub, err := _WalletEstimator.contract.WatchLogs(opts, "CallSucceeded") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WalletEstimatorCallSucceeded) + if err := _WalletEstimator.contract.UnpackLog(event, "CallSucceeded", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseCallSucceeded is a log parse operation binding the contract event 0x5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a. +// +// Solidity: event CallSucceeded(bytes32 _opHash, uint256 _index) +func (_WalletEstimator *WalletEstimatorFilterer) ParseCallSucceeded(log types.Log) (*WalletEstimatorCallSucceeded, error) { + event := new(WalletEstimatorCallSucceeded) + if err := _WalletEstimator.contract.UnpackLog(event, "CallSucceeded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WalletEstimatorDefinedHookIterator is returned from FilterDefinedHook and is used to iterate over the raw logs and unpacked data for DefinedHook events raised by the WalletEstimator contract. +type WalletEstimatorDefinedHookIterator struct { + Event *WalletEstimatorDefinedHook // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WalletEstimatorDefinedHookIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WalletEstimatorDefinedHook) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WalletEstimatorDefinedHook) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WalletEstimatorDefinedHookIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WalletEstimatorDefinedHookIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WalletEstimatorDefinedHook represents a DefinedHook event raised by the WalletEstimator contract. +type WalletEstimatorDefinedHook struct { + Selector [4]byte + Implementation common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDefinedHook is a free log retrieval operation binding the contract event 0x0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed1. +// +// Solidity: event DefinedHook(bytes4 selector, address implementation) +func (_WalletEstimator *WalletEstimatorFilterer) FilterDefinedHook(opts *bind.FilterOpts) (*WalletEstimatorDefinedHookIterator, error) { + + logs, sub, err := _WalletEstimator.contract.FilterLogs(opts, "DefinedHook") + if err != nil { + return nil, err + } + return &WalletEstimatorDefinedHookIterator{contract: _WalletEstimator.contract, event: "DefinedHook", logs: logs, sub: sub}, nil +} + +// WatchDefinedHook is a free log subscription operation binding the contract event 0x0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed1. +// +// Solidity: event DefinedHook(bytes4 selector, address implementation) +func (_WalletEstimator *WalletEstimatorFilterer) WatchDefinedHook(opts *bind.WatchOpts, sink chan<- *WalletEstimatorDefinedHook) (event.Subscription, error) { + + logs, sub, err := _WalletEstimator.contract.WatchLogs(opts, "DefinedHook") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WalletEstimatorDefinedHook) + if err := _WalletEstimator.contract.UnpackLog(event, "DefinedHook", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseDefinedHook is a log parse operation binding the contract event 0x0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed1. +// +// Solidity: event DefinedHook(bytes4 selector, address implementation) +func (_WalletEstimator *WalletEstimatorFilterer) ParseDefinedHook(log types.Log) (*WalletEstimatorDefinedHook, error) { + event := new(WalletEstimatorDefinedHook) + if err := _WalletEstimator.contract.UnpackLog(event, "DefinedHook", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WalletEstimatorImageHashUpdatedIterator is returned from FilterImageHashUpdated and is used to iterate over the raw logs and unpacked data for ImageHashUpdated events raised by the WalletEstimator contract. +type WalletEstimatorImageHashUpdatedIterator struct { + Event *WalletEstimatorImageHashUpdated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WalletEstimatorImageHashUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WalletEstimatorImageHashUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WalletEstimatorImageHashUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WalletEstimatorImageHashUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WalletEstimatorImageHashUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WalletEstimatorImageHashUpdated represents a ImageHashUpdated event raised by the WalletEstimator contract. +type WalletEstimatorImageHashUpdated struct { + NewImageHash [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterImageHashUpdated is a free log retrieval operation binding the contract event 0x307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa. +// +// Solidity: event ImageHashUpdated(bytes32 newImageHash) +func (_WalletEstimator *WalletEstimatorFilterer) FilterImageHashUpdated(opts *bind.FilterOpts) (*WalletEstimatorImageHashUpdatedIterator, error) { + + logs, sub, err := _WalletEstimator.contract.FilterLogs(opts, "ImageHashUpdated") + if err != nil { + return nil, err + } + return &WalletEstimatorImageHashUpdatedIterator{contract: _WalletEstimator.contract, event: "ImageHashUpdated", logs: logs, sub: sub}, nil +} + +// WatchImageHashUpdated is a free log subscription operation binding the contract event 0x307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa. +// +// Solidity: event ImageHashUpdated(bytes32 newImageHash) +func (_WalletEstimator *WalletEstimatorFilterer) WatchImageHashUpdated(opts *bind.WatchOpts, sink chan<- *WalletEstimatorImageHashUpdated) (event.Subscription, error) { + + logs, sub, err := _WalletEstimator.contract.WatchLogs(opts, "ImageHashUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WalletEstimatorImageHashUpdated) + if err := _WalletEstimator.contract.UnpackLog(event, "ImageHashUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseImageHashUpdated is a log parse operation binding the contract event 0x307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa. +// +// Solidity: event ImageHashUpdated(bytes32 newImageHash) +func (_WalletEstimator *WalletEstimatorFilterer) ParseImageHashUpdated(log types.Log) (*WalletEstimatorImageHashUpdated, error) { + event := new(WalletEstimatorImageHashUpdated) + if err := _WalletEstimator.contract.UnpackLog(event, "ImageHashUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WalletEstimatorImplementationUpdatedIterator is returned from FilterImplementationUpdated and is used to iterate over the raw logs and unpacked data for ImplementationUpdated events raised by the WalletEstimator contract. +type WalletEstimatorImplementationUpdatedIterator struct { + Event *WalletEstimatorImplementationUpdated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WalletEstimatorImplementationUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WalletEstimatorImplementationUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WalletEstimatorImplementationUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WalletEstimatorImplementationUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WalletEstimatorImplementationUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WalletEstimatorImplementationUpdated represents a ImplementationUpdated event raised by the WalletEstimator contract. +type WalletEstimatorImplementationUpdated struct { + NewImplementation common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterImplementationUpdated is a free log retrieval operation binding the contract event 0x310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca03. +// +// Solidity: event ImplementationUpdated(address newImplementation) +func (_WalletEstimator *WalletEstimatorFilterer) FilterImplementationUpdated(opts *bind.FilterOpts) (*WalletEstimatorImplementationUpdatedIterator, error) { + + logs, sub, err := _WalletEstimator.contract.FilterLogs(opts, "ImplementationUpdated") + if err != nil { + return nil, err + } + return &WalletEstimatorImplementationUpdatedIterator{contract: _WalletEstimator.contract, event: "ImplementationUpdated", logs: logs, sub: sub}, nil +} + +// WatchImplementationUpdated is a free log subscription operation binding the contract event 0x310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca03. +// +// Solidity: event ImplementationUpdated(address newImplementation) +func (_WalletEstimator *WalletEstimatorFilterer) WatchImplementationUpdated(opts *bind.WatchOpts, sink chan<- *WalletEstimatorImplementationUpdated) (event.Subscription, error) { + + logs, sub, err := _WalletEstimator.contract.WatchLogs(opts, "ImplementationUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WalletEstimatorImplementationUpdated) + if err := _WalletEstimator.contract.UnpackLog(event, "ImplementationUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseImplementationUpdated is a log parse operation binding the contract event 0x310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca03. +// +// Solidity: event ImplementationUpdated(address newImplementation) +func (_WalletEstimator *WalletEstimatorFilterer) ParseImplementationUpdated(log types.Log) (*WalletEstimatorImplementationUpdated, error) { + event := new(WalletEstimatorImplementationUpdated) + if err := _WalletEstimator.contract.UnpackLog(event, "ImplementationUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WalletEstimatorNonceChangeIterator is returned from FilterNonceChange and is used to iterate over the raw logs and unpacked data for NonceChange events raised by the WalletEstimator contract. +type WalletEstimatorNonceChangeIterator struct { + Event *WalletEstimatorNonceChange // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WalletEstimatorNonceChangeIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WalletEstimatorNonceChange) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WalletEstimatorNonceChange) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WalletEstimatorNonceChangeIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WalletEstimatorNonceChangeIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WalletEstimatorNonceChange represents a NonceChange event raised by the WalletEstimator contract. +type WalletEstimatorNonceChange struct { + Space *big.Int + NewNonce *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterNonceChange is a free log retrieval operation binding the contract event 0x1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f881. +// +// Solidity: event NonceChange(uint256 _space, uint256 _newNonce) +func (_WalletEstimator *WalletEstimatorFilterer) FilterNonceChange(opts *bind.FilterOpts) (*WalletEstimatorNonceChangeIterator, error) { + + logs, sub, err := _WalletEstimator.contract.FilterLogs(opts, "NonceChange") + if err != nil { + return nil, err + } + return &WalletEstimatorNonceChangeIterator{contract: _WalletEstimator.contract, event: "NonceChange", logs: logs, sub: sub}, nil +} + +// WatchNonceChange is a free log subscription operation binding the contract event 0x1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f881. +// +// Solidity: event NonceChange(uint256 _space, uint256 _newNonce) +func (_WalletEstimator *WalletEstimatorFilterer) WatchNonceChange(opts *bind.WatchOpts, sink chan<- *WalletEstimatorNonceChange) (event.Subscription, error) { + + logs, sub, err := _WalletEstimator.contract.WatchLogs(opts, "NonceChange") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WalletEstimatorNonceChange) + if err := _WalletEstimator.contract.UnpackLog(event, "NonceChange", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseNonceChange is a log parse operation binding the contract event 0x1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f881. +// +// Solidity: event NonceChange(uint256 _space, uint256 _newNonce) +func (_WalletEstimator *WalletEstimatorFilterer) ParseNonceChange(log types.Log) (*WalletEstimatorNonceChange, error) { + event := new(WalletEstimatorNonceChange) + if err := _WalletEstimator.contract.UnpackLog(event, "NonceChange", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WalletEstimatorStaticSignatureSetIterator is returned from FilterStaticSignatureSet and is used to iterate over the raw logs and unpacked data for StaticSignatureSet events raised by the WalletEstimator contract. +type WalletEstimatorStaticSignatureSetIterator struct { + Event *WalletEstimatorStaticSignatureSet // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WalletEstimatorStaticSignatureSetIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WalletEstimatorStaticSignatureSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WalletEstimatorStaticSignatureSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WalletEstimatorStaticSignatureSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WalletEstimatorStaticSignatureSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WalletEstimatorStaticSignatureSet represents a StaticSignatureSet event raised by the WalletEstimator contract. +type WalletEstimatorStaticSignatureSet struct { + Hash [32]byte + Address common.Address + Timestamp *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterStaticSignatureSet is a free log retrieval operation binding the contract event 0xebf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1. +// +// Solidity: event StaticSignatureSet(bytes32 _hash, address _address, uint96 _timestamp) +func (_WalletEstimator *WalletEstimatorFilterer) FilterStaticSignatureSet(opts *bind.FilterOpts) (*WalletEstimatorStaticSignatureSetIterator, error) { + + logs, sub, err := _WalletEstimator.contract.FilterLogs(opts, "StaticSignatureSet") + if err != nil { + return nil, err + } + return &WalletEstimatorStaticSignatureSetIterator{contract: _WalletEstimator.contract, event: "StaticSignatureSet", logs: logs, sub: sub}, nil +} + +// WatchStaticSignatureSet is a free log subscription operation binding the contract event 0xebf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1. +// +// Solidity: event StaticSignatureSet(bytes32 _hash, address _address, uint96 _timestamp) +func (_WalletEstimator *WalletEstimatorFilterer) WatchStaticSignatureSet(opts *bind.WatchOpts, sink chan<- *WalletEstimatorStaticSignatureSet) (event.Subscription, error) { + + logs, sub, err := _WalletEstimator.contract.WatchLogs(opts, "StaticSignatureSet") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WalletEstimatorStaticSignatureSet) + if err := _WalletEstimator.contract.UnpackLog(event, "StaticSignatureSet", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseStaticSignatureSet is a log parse operation binding the contract event 0xebf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1. +// +// Solidity: event StaticSignatureSet(bytes32 _hash, address _address, uint96 _timestamp) +func (_WalletEstimator *WalletEstimatorFilterer) ParseStaticSignatureSet(log types.Log) (*WalletEstimatorStaticSignatureSet, error) { + event := new(WalletEstimatorStaticSignatureSet) + if err := _WalletEstimator.contract.UnpackLog(event, "StaticSignatureSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WalletEstimatorDeployedBin is the resulting bytecode of the created contract +const WalletEstimatorDeployedBin = "0x6080604052600436101561001e575b361561001c5761001c611c2e565b005b60003560e01c806223de291461019d578063025b22bc1461019857806313792a4a14610193578063150b7a021461018e5780631626ba7e1461018957806319822f7c146101845780631a9b23371461017f5780631f6a1eb91461017a57806329561426146101755780634fcf3eca1461017057806351605d801461016b5780636ea44577146101665780638943ec02146101615780638c3f55631461015c57806392dcb3fc14610157578063975befdb146101525780639c145aed1461014d578063a65d69d414610148578063aaf10f4214610143578063ad55366b1461013e578063b93ea7ad14610139578063bc197c8114610134578063f23a6e611461012f5763f727ef1c0361000e57611556565b6114c9565b6113f7565b611298565b611255565b611204565b611195565b61107d565b610fde565b610f80565b610f44565b610ec0565b610e91565b610ded565b610cd1565b610c18565b610b98565b610ac9565b610a14565b61098c565b6108ff565b610802565b6102eb565b61025f565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101c557565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101c557565b6044359073ffffffffffffffffffffffffffffffffffffffff821682036101c557565b359073ffffffffffffffffffffffffffffffffffffffff821682036101c557565b9181601f840112156101c55782359167ffffffffffffffff83116101c557602083818601950101116101c557565b346101c55760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576102966101a2565b5061029f6101ca565b506102a86101ed565b5060843567ffffffffffffffff81116101c5576102c9903690600401610231565b505060a43567ffffffffffffffff81116101c55761001c903690600401610231565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55761031d6101a2565b30330361036a576020817f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca0392305573ffffffffffffffffffffffffffffffffffffffff60405191168152a1005b7fa19dbf00000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff8211176103e357604052565b610398565b6040810190811067ffffffffffffffff8211176103e357604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176103e357604052565b6040519061045460e083610404565b565b6040519061045461012083610404565b359060ff821682036101c557565b359081151582036101c557565b67ffffffffffffffff81116103e35760051b60200190565b67ffffffffffffffff81116103e357601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926104df82610499565b916104ed6040519384610404565b8294818452818301116101c5578281602093846000960137010152565b9080601f830112156101c557816020610525933591016104d3565b90565b81601f820112156101c55780359061053f82610481565b9261054d6040519485610404565b82845260208085019360051b830101918183116101c55760208101935b83851061057957505050505090565b843567ffffffffffffffff81116101c557820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082860301126101c5576105c0610445565b916105cd60208301610210565b83526040820135602084015260608201359267ffffffffffffffff84116101c55760e08361060288602080988198010161050a565b60408401526080810135606084015261061d60a08201610474565b608084015261062e60c08201610474565b60a0840152013560c082015281520194019361056a565b9080601f830112156101c557813561065c81610481565b9261066a6040519485610404565b81845260208085019260051b8201019283116101c557602001905b8282106106925750505090565b6020809161069f84610210565b815201910190610685565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126101c55760043567ffffffffffffffff81116101c5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82850301126101c55761071c610456565b9061072981600401610466565b825261073760248201610474565b6020830152604481013567ffffffffffffffff81116101c55784600461075f92840101610528565b6040830152606481013560608301526084810135608083015260a481013567ffffffffffffffff81116101c55784600461079b9284010161050a565b60a083015260c481013560c083015260e481013560e083015261010481013567ffffffffffffffff81116101c557600485916107d8930101610645565b610100820152916024359067ffffffffffffffff82116101c5576107fe91600401610231565b9091565b346101c557610810366106aa565b909161010081019261082b61082685515161165e565b611679565b9160005b85518051821015610892579061088c61086761084d836001956116f7565b5173ffffffffffffffffffffffffffffffffffffffff1690565b61087183886116f7565b9073ffffffffffffffffffffffffffffffffffffffff169052565b0161082f565b50508383866108a733610871835151856116f7565b526108b3818484611d00565b50156108c55760405160018152602090f35b6108fb906040519384937ff58cc8b500000000000000000000000000000000000000000000000000000000855260048501611952565b0390fd5b346101c55760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576109366101a2565b5061093f6101ca565b5060643567ffffffffffffffff81116101c557610960903690600401610231565b505060206040517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b346101c55760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760043560243567ffffffffffffffff81116101c5576020916109e46109ea923690600401610231565b91611977565b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b346101c55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760043567ffffffffffffffff81116101c5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126101c557610a9760209160243560443591600401611a4c565b604051908152f35b7fffffffff000000000000000000000000000000000000000000000000000000008116036101c557565b346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576020610b0e600435610b0981610a9f565b611edc565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101c55760043567ffffffffffffffff81116101c55781610b7591600401610231565b929092916024359067ffffffffffffffff82116101c5576107fe91600401610231565b610baf610ba436610b2c565b919390935a93612011565b91610bc360608401516080850151906122d5565b610bce828585611d00565b929015610be0575061001c935061242e565b836108fb86926040519384937fa2b6d61b00000000000000000000000000000000000000000000000000000000855260048501611952565b346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760043530330361036a578015610ca7576020817f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf855604051908152a1005b7f4294d1270000000000000000000000000000000000000000000000000000000060005260046000fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c557600435610d0781610a9f565b30330361036a5773ffffffffffffffffffffffffffffffffffffffff610d2c82611edc565b1615610d925760407fffffffff000000000000000000000000000000000000000000000000000000007f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19216610d83600082612c86565b815190815260006020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f1c3812cc000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b60009103126101c557565b346101c55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760207fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf854604051908152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101c5576004359067ffffffffffffffff82116101c5576107fe91600401610231565b610e9a36610e48565b9030330361036a57610eb061001c925a92612011565b90610eba82612752565b9061242e565b346101c55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c557610ef76101a2565b5060443567ffffffffffffffff81116101c557610f18903690600401610231565b505060206040517f8943ec02000000000000000000000000000000000000000000000000000000008152f35b346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576020610a976004356127e6565b346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576040610fbc60043561282c565b73ffffffffffffffffffffffffffffffffffffffff8351921682526020820152f35b610ff6610fea36610b2c565b91939092935a94612011565b9161100e6060840151611008816127e6565b906122d5565b611019828285611d00565b929015611046578461102c85858361242e565b5a810390811161104157602090604051908152f35b61162f565b6108fb84916040519384937fa2b6d61b00000000000000000000000000000000000000000000000000000000855260048501611952565b346101c55761108b36610e48565b9073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016801561116b57330361113d57303b156101c5576111119160009160405193849283927f6ea4457700000000000000000000000000000000000000000000000000000000845260048401611bed565b038183305af180156111385761112357005b80611132600061001c93610404565b80610de2565b6119c3565b7f1d6ddbf4000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7fd13d78350000000000000000000000000000000000000000000000000000000060005260046000fd5b346101c55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101c55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576020305473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346101c55760c061127160008061126b366106aa565b916128f4565b926040929192519485526020850152600160408501526060840152608083015260a0820152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576004356112ce81610a9f565b6112d66101ca565b9030330361036a5773ffffffffffffffffffffffffffffffffffffffff6112fc82611edc565b16611376577f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19173ffffffffffffffffffffffffffffffffffffffff7fffffffff000000000000000000000000000000000000000000000000000000006040931691166113698183612c86565b82519182526020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f5b4d6d6a000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b9181601f840112156101c55782359167ffffffffffffffff83116101c5576020808501948460051b0101116101c557565b346101c55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55761142e6101a2565b506114376101ca565b5060443567ffffffffffffffff81116101c5576114589036906004016113c6565b505060643567ffffffffffffffff81116101c55761147a9036906004016113c6565b505060843567ffffffffffffffff81116101c55761149c903690600401610231565b50506040517fbc197c81000000000000000000000000000000000000000000000000000000008152602090f35b346101c55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576115006101a2565b506115096101ca565b5060843567ffffffffffffffff81116101c55761152a903690600401610231565b505060206040517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b346101c55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576004356115906101ca565b604435916bffffffffffffffffffffffff83168093036101c55730330361036a578273ffffffffffffffffffffffffffffffffffffffff8361161b7febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1967fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606097881b161785612c41565b6040519384521660208301526040820152a1005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b906001820180921161104157565b9190820180921161104157565b9061168382610481565b6116906040519182610404565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06116be8294610481565b0190602036910137565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805182101561170b5760209160051b010190565b6116c8565b919082519283825260005b84811061175a5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b8060208092840101518282860101520161171b565b9080602083519182815201916020808360051b8301019401926000915b83831061179b57505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c08061180e604085015160e0604086015260e0850190611710565b936060810151606085015260808101511515608085015260a0810151151560a085015201519101529701930193019193929061178c565b906020808351928381520192019060005b8181106118635750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101611856565b805160ff168252610525916020828101511515908201526101006118ed6118c76040850151610120604086015261012085019061176f565b606085015160608501526080850151608085015260a085015184820360a0860152611710565b9260c081015160c084015260e081015160e0840152015190610100818403910152611845565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b91611969610525949260408552604085019061188f565b926020818503910152611913565b906119949291611985611e81565b906003825260e0820152611d00565b50156119be577f1626ba7e0000000000000000000000000000000000000000000000000000000090565b600090565b6040513d6000823e3d90fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101c5570180359067ffffffffffffffff82116101c5576020019181360383136101c557565b908160209103126101c5575161052581610a9f565b604090610525949281528160208201520191611913565b91909173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691821561116b5782330361113d5780611b7e575b506020915080610100611aae9201906119cf565b92611ae660405194859384937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611a35565b0381305afa908115611138577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091611b4f575b501603611b4a57600090565b600190565b611b71915060203d602011611b77575b611b698183610404565b810190611a20565b38611b3e565b503d611b5f565b823b156101c5576040517fb760faf900000000000000000000000000000000000000000000000000000000815230600482015292600091849160249183915af190811561113857602092611aae92611bd8575b5090611a9a565b806111326000611be793610404565b38611bd1565b916020610525938181520191611913565b3d15611c29573d90611c0f82610499565b91611c1d6040519384610404565b82523d6000602084013e565b606090565b600436108015611c3b5750565b611c71906000357fffffffff00000000000000000000000000000000000000000000000000000000811691611cc3575b50611edc565b73ffffffffffffffffffffffffffffffffffffffff8116611c8f5750565b60008091604051368382378036810184815203915af4611cad611bfe565b9015611cbb57602081519101f35b602081519101fd5b7fffffffff000000000000000000000000000000000000000000000000000000008092503660040360031b1b161638611c6b565b901561170b5790565b91907f800000000000000000000000000000000000000000000000000000000000000080611d57611d318585611cf7565b357fff000000000000000000000000000000000000000000000000000000000000001690565b1614611dad576000918291611d6b946128f4565b91505091808210611d7d575050600191565b7ffd41fcba0000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b5050611db890612752565b90611dc28261282c565b42811115611e4f575073ffffffffffffffffffffffffffffffffffffffff81168015159081611e44575b50611df8575060019190565b7f8945c3130000000000000000000000000000000000000000000000000000000060005260048390523360245273ffffffffffffffffffffffffffffffffffffffff1660445260646000fd5b905033141538611dec565b7ff95b6ab700000000000000000000000000000000000000000000000000000000600052600484905260245260446000fd5b60405190610120820182811067ffffffffffffffff8211176103e3576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b73ffffffffffffffffffffffffffffffffffffffff906040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a120845216604082015260408152611f53606082610404565b519020541690565b90611f6582610481565b611f726040519182610404565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611fa08294610481565b019060005b828110611fb157505050565b602090604051611fc0816103c7565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c082015282828501015201611fa5565b909392938483116101c55784116101c5578101920390565b91909161201c611e81565b6000815292600190823560f81c827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818316016122be5750600060608701525b600761206b60ff831660011c90565b168061226d575b5060108181160361223857506001925b61208b84611f5b565b92604087019384526000905b8582106120a657505050505050565b8281013560f81c9060010190918160018085160361221657506120ea306120ce8389516116f7565b519073ffffffffffffffffffffffffffffffffffffffff169052565b6002808416146121f6575b6004808416146121a8575b600880841614612175575b61215e61215860c0856121378a608061212e8860108060019c9d161493516116f7565b51019015159052565b61214e8a60a061212e8860208087161493516116f7565b1660061c60031690565b60ff1690565b60c061216b8389516116f7565b5101520190612097565b60019161215e906121589060c09087810135906020019690606061219a878d516116f7565b51015295945050505061210b565b906121f0908481013560e81c906003016121e96121d06121c8848461166c565b838a8a611ff9565b919060406121df888d516116f7565b51019236916104d3565b905261166c565b90612100565b9083810135906020019190602061220e8389516116f7565b5101526120f5565b61223392508481013560601c9060140192906120ce8389516116f7565b6120ea565b60209081160361225a5761ffff918381013560f01c906002015b921692612082565b60ff918381013560f81c90600101612252565b6122b1919385929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290608087015238612072565b80850135606090811c90880152601401925061205c565b906122df826127e6565b81810361236557509060017f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f8819201908160405160208101907f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e82528360408201526040815261234f606082610404565b51902055604080519182526020820192909252a1565b917f9b6514f40000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b6123b16040929594939560608352606083019061188f565b9460208201520152565b9261052596959260c09592855260208501526040840152606083015260808201528160a08201520190611710565b6105259392606092825260208201528160408201520190611710565b61241b610525949260608352606083019061188f565b9260208201526040818403910152611710565b916000604082019384515190825b82811061244d575b50505050505050565b6124588188516116f7565b519361246760a0860151151590565b8061274a575b61270a575060009360608101518015801580612701575b6126c95784906124976080850151151590565b1561268357612542926124be855173ffffffffffffffffffffffffffffffffffffffff1690565b911561267d57505a905b61253d8b61251160608d01516040890151908c8b604051998a967f4c4e814c000000000000000000000000000000000000000000000000000000006020890152602488016123bb565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101855284610404565b612c14565b15612585575b506040805187815260208101839052600192917f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a91a15b0161243c565b60c0018051156126345760018151146125f557516002146125a65738612548565b9493505050507fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b92506125e66125da612c26565b604051938493846123e9565b0390a138808080808080612444565b50846108fb612602612c26565b6040519384937f7f6b0bb100000000000000000000000000000000000000000000000000000000855260048501612405565b509250600180937f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d612675612667612c26565b604051918291858c846123e9565b0390a161257f565b906124c8565b83516126be93925073ffffffffffffffffffffffffffffffffffffffff16916020850151916000146126c357505a905b604085015192612c02565b612542565b906126b3565b83886108fb5a6040519384937f2139527400000000000000000000000000000000000000000000000000000000855260048501612399565b50815a10612484565b6040805188815260208101849052919550600192917f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b9181908101612675565b50801561246d565b6127b46127e061277261276c602085015115153090612cc5565b93612dc0565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610404565b51902090565b60405160208101917f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8352604082015260408152612825606082610404565b5190205490565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e86835260408201526040815261286b606082610404565b51902054906bffffffffffffffffffffffff8260601c921690565b60405190612893826103e8565b60006020838281520152565b908160409103126101c5576020604051916128b9836103e8565b805183520151602082015290565b60409073ffffffffffffffffffffffffffffffffffffffff61052594931681528160208201520190611710565b909491939291853560f81c6001909381908761290e612886565b9360408089161480612be4575b612ae7575b505050600180861614612ac15760028581161460208501526007600286901c1688820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691019080969181966020166129909060051c90565b6129999061165e565b8a820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101959098899a816129e584612752565b9889936129f193611ff9565b916129fb936131d7565b9098612a0f91600052602052604060002090565b90612a2291600052602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff16612a4b91600052602052604060002090565b94815190868215159283612ab6575b505081612aa7575b50612a6a5750565b6040517fccbb534f000000000000000000000000000000000000000000000000000000008152815160048201526020909101516024820152604490fd5b90506020820151101538612a62565b141591508638612a5a565b86612adc9792949550612ad49398611ff9565b939092612fb5565b919394909293929190565b8a81013560601c985060140192509087908a90849015612b0b575b50829150612920565b60038101955073ffffffffffffffffffffffffffffffffffffffff945081013560e81c92604092612b8e929091612b5991612b52918990612b4c898361166c565b92611ff9565b36916104d3565b83519586809481937fccce3bc800000000000000000000000000000000000000000000000000000000835230600484016128c7565b0392165afa801561113857612bac92600091612bb5575b509261166c565b86388981612b02565b612bd7915060403d604011612bdd575b612bcf8183610404565b81019061289f565b38612ba5565b503d612bc5565b5073ffffffffffffffffffffffffffffffffffffffff89161561291b565b9160009391849360208451940192f190565b9160009291839260208351930191f490565b3d90604051916020818401016040528083526000602084013e565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e868352604082015260408152612c80606082610404565b51902055565b60405160208101917fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1208352604082015260408152612c80606082610404565b15612d75576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a081526127e060c082610404565b4690612cce565b805160209091019060005b818110612d945750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101612d87565b610100810151604051612ddb816127b4602082018095612d7c565b51902090612dea815160ff1690565b60ff811680612e63575050906127e0612e066040840151613a6b565b926127b460806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b60018103612ec157505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d466938101938452908101919091526060810192909252906127e081608081016127b4565b60028103612f1757505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e4602082019081529181019290925260608201929092526127e081608081016127b4565b600303612f6b575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d466602082019081529181019290925260608201929092526127e081608081016127b4565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b906123b19060409396959496606084526060840191611913565b9194929092600095600095600095600095600095612fd1611e81565b60028152937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9460005b8281106130285750505050505050805115158061301a575b612a6a5750565b506020810151841115613013565b600381019d50959b509399509197509290919061304c908b9085013560e81c61166c565b958a6000848903613190575089915b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c0361316057509060016130958961309c948789611ff9565b908b6128f4565b9c939c9b929b9a919a99909a9b9d8e9d9e8f905b1061311a5750928b885114613111575b808b10156130df57508a60c08501528992959295949194939093612ffb565b7f37daf62b0000000000000000000000000000000000000000000000000000000060005260048b905260245260446000fd5b600088526130c0565b8d8f6108fb61312b85858c8e611ff9565b9390926040519485947fb006aba000000000000000000000000000000000000000000000000000000000865260048601612f9b565b9798999a9160016131768b61317d94888a611ff9565b90866128f4565b50929d919c909b929a9092918e8e6130b0565b9161305b565b73ffffffffffffffffffffffffffffffffffffffff610525959360609383521660208201528160408201520191611913565b908160209103126101c5575190565b9391909360009460009460005b8181106131f2575050505050565b8481013560f881901c9860019092019788979692909160fc1c9889156139d657506001891461399657600289146137d957600389146137aa57600489146137295760068914613689576005891461363b5760078914613574576008891461351e57600989146133f557600a8914613292577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b909192939495969750600389169788156133e4575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101908101908161330a918787611ff9565b6040517f898bd92100000000000000000000000000000000000000000000000000000000815293918491613342918a60048501611a35565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa91821561113857613385936000936133b1575b5060ff909a168091019a613d37565b9080156133ab579061339f91600052602052604060002090565b955b93929190936131e4565b5061339f565b60ff9193506133d69060203d81116133dd575b6133ce8183610404565b8101906131c8565b9290613376565b503d6133c4565b8084013560f81c98506001016132a7565b9091929394959697506003891697881561350d575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101908101908161346d918787611ff9565b6040517f13792a4a000000000000000000000000000000000000000000000000000000008152939184916134a5918b60048501611952565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa918215611138576134e7936000936133b1575060ff909a168091019a613d37565b908015613507579061350191600052602052604060002090565b956133a1565b50613501565b8084013560f81c985060010161340a565b98506020870197509495939492939192909182013561353c86613cde565b811461354c575b6134e790613cf8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9850613543565b975090919293949597600f16968715613629575b6020600061359a6136079a9b86613ba6565b9c9092918a6040516135dd816127b48a82019485603c917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008252601c8201520190565b51902092604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa15611138576134e79060ff6000519a1680910199613be9565b600189019883013560f81c9750613588565b985060208701975094959394929391929091820135808514613661575b6134e790613c9f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9850613658565b989091929394959662ffffff98506136ab612158600c8416603f9060021c1690565b918215613715575b6003168015613704575b9081906136e8906136e0908781013560e81c906003019c168c01809c8989611ff9565b90898b6131d7565b9111156136fb575b906134e79291613c54565b998201996136f0565b50600281019084013560f01c6136bd565b8482013560f81c92506001909101906136b3565b97509761377f61378c929394959697600f61379493169085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290830180938686611ff9565b9086886131d7565b9061350192980198600052602052604060002090565b985096509394929391929091908082013590602001968015613507579061350191600052602052604060002090565b90919293949596975060038916978815613985575b8084013560601c9961384d916014019061380d9060021c600316612158565b9085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b908101906138b160208c61386385858b8b611ff9565b919073ffffffffffffffffffffffffffffffffffffffff8c604051968795869485937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611a35565b0392165afa908115611138577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091613967575b50160361392357509060ff6134e792991680910199613be9565b6108fb6139348c9389938989611ff9565b906040519485947fb2fed7ae00000000000000000000000000000000000000000000000000000000865260048601613196565b61397f915060203d8111611b7757611b698183610404565b38613909565b8381013560f81c98506001016137ee565b98600f919293949596979850169687156139c5575b60148101976134e79160ff9091169084013560601c613be9565b8281013560f81c97506001016139ab565b98509091929394959698600f16978815613a28575b50602060006139fe6136079a9b86613ba6565b9c90916040519384938c859094939260ff6060936080840197845216602083015260408201520152565b60018101995083013560f81c975060206139eb565b805160209091019060005b818110613a555750505090565b8251845260209384019390920191600101613a48565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0613ab1613a9b83610481565b92613aa96040519485610404565b808452610481565b0136602083013760005b8351811015613b8d5780613ad1600192866116f7565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152613b7961012082610404565b519020613b8682856116f7565b5201613abb565b509091506040516127e0816127b4602082018095613a3d565b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff81116110415791565b90604051907fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208301937f53657175656e6365207369676e65723a0a000000000000000000000000000000855260601b1660318301526045820152604581526127e0606582610404565b916040519160208301937f53657175656e6365206e657374656420636f6e6669673a0a00000000000000008552603884015260588301526078820152607881526127e0609882610404565b60405160208101917f53657175656e636520737461746963206469676573743a0a000000000000000083526038820152603881526127e0605882610404565b6127b46127e061277261276c600060208601511515612cc5565b60405160208101917f53657175656e636520616e792061646472657373207375626469676573743a0a83526040820152604081526127e0606082610404565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e63652073617069656e7420636f6e6669673a0a00000000000000865260601b166039840152604d830152606d820152606d81526127e0608d8261040456fea2646970667358221220fd510fff57502b123cb8cca23f77a513f5d8001f96adc68f13bd2a44f529e4ad64736f6c634300081c0033" diff --git a/contracts/gen/v3/walletfactory/wallet_factory.gen.go b/contracts/gen/v3/walletfactory/wallet_factory.gen.go new file mode 100644 index 00000000..3f3b65b9 --- /dev/null +++ b/contracts/gen/v3/walletfactory/wallet_factory.gen.go @@ -0,0 +1,224 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package walletfactory + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/0xsequence/ethkit/go-ethereum" + "github.com/0xsequence/ethkit/go-ethereum/accounts/abi" + "github.com/0xsequence/ethkit/go-ethereum/accounts/abi/bind" + "github.com/0xsequence/ethkit/go-ethereum/common" + "github.com/0xsequence/ethkit/go-ethereum/core/types" + "github.com/0xsequence/ethkit/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// WalletFactoryMetaData contains all meta data concerning the WalletFactory contract. +var WalletFactoryMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"function\",\"name\":\"deploy\",\"inputs\":[{\"name\":\"_mainModule\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"_contract\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"payable\"},{\"type\":\"error\",\"name\":\"DeployFailed\",\"inputs\":[{\"name\":\"_mainModule\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}]", + Bin: "0x6080806040523460155761029b908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c6332c02a141461002757600080fd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019f5760043573ffffffffffffffffffffffffffffffffffffffff811680820361019f5760243580916100eb6101176040519261008a846101d3565b602f84527f6041600e3d396021805130553df33d3d36153402601f57363d3d373d363d305460208501527f5af43d82803e903d91601f57fd5bf300000000000000000000000000000000006040850152604051928391602083019586610235565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826101f4565b519034f59173ffffffffffffffffffffffffffffffffffffffff8316156101595760405173ffffffffffffffffffffffffffffffffffffffff84168152602090f35b7f8caac8050000000000000000000000000000000000000000000000000000000060005273ffffffffffffffffffffffffffffffffffffffff1660045260245260446000fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6060810190811067ffffffffffffffff8211176101ef57604052565b6101a4565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176101ef57604052565b9291909283519060005b8281106102525750019081526020019150565b806020809288010151818401520161023f56fea2646970667358221220be04d6b1fea99f8da63c42ae89d7f45bd43865e722cddb9cb70f1713011e9fe264736f6c634300081c0033", +} + +// WalletFactoryABI is the input ABI used to generate the binding from. +// Deprecated: Use WalletFactoryMetaData.ABI instead. +var WalletFactoryABI = WalletFactoryMetaData.ABI + +// WalletFactoryBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use WalletFactoryMetaData.Bin instead. +var WalletFactoryBin = WalletFactoryMetaData.Bin + +// DeployWalletFactory deploys a new Ethereum contract, binding an instance of WalletFactory to it. +func DeployWalletFactory(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *WalletFactory, error) { + parsed, err := WalletFactoryMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(WalletFactoryBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &WalletFactory{WalletFactoryCaller: WalletFactoryCaller{contract: contract}, WalletFactoryTransactor: WalletFactoryTransactor{contract: contract}, WalletFactoryFilterer: WalletFactoryFilterer{contract: contract}}, nil +} + +// WalletFactory is an auto generated Go binding around an Ethereum contract. +type WalletFactory struct { + WalletFactoryCaller // Read-only binding to the contract + WalletFactoryTransactor // Write-only binding to the contract + WalletFactoryFilterer // Log filterer for contract events +} + +// WalletFactoryCaller is an auto generated read-only Go binding around an Ethereum contract. +type WalletFactoryCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// WalletFactoryTransactor is an auto generated write-only Go binding around an Ethereum contract. +type WalletFactoryTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// WalletFactoryFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type WalletFactoryFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// WalletFactorySession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type WalletFactorySession struct { + Contract *WalletFactory // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// WalletFactoryCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type WalletFactoryCallerSession struct { + Contract *WalletFactoryCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// WalletFactoryTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type WalletFactoryTransactorSession struct { + Contract *WalletFactoryTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// WalletFactoryRaw is an auto generated low-level Go binding around an Ethereum contract. +type WalletFactoryRaw struct { + Contract *WalletFactory // Generic contract binding to access the raw methods on +} + +// WalletFactoryCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type WalletFactoryCallerRaw struct { + Contract *WalletFactoryCaller // Generic read-only contract binding to access the raw methods on +} + +// WalletFactoryTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type WalletFactoryTransactorRaw struct { + Contract *WalletFactoryTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewWalletFactory creates a new instance of WalletFactory, bound to a specific deployed contract. +func NewWalletFactory(address common.Address, backend bind.ContractBackend) (*WalletFactory, error) { + contract, err := bindWalletFactory(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &WalletFactory{WalletFactoryCaller: WalletFactoryCaller{contract: contract}, WalletFactoryTransactor: WalletFactoryTransactor{contract: contract}, WalletFactoryFilterer: WalletFactoryFilterer{contract: contract}}, nil +} + +// NewWalletFactoryCaller creates a new read-only instance of WalletFactory, bound to a specific deployed contract. +func NewWalletFactoryCaller(address common.Address, caller bind.ContractCaller) (*WalletFactoryCaller, error) { + contract, err := bindWalletFactory(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &WalletFactoryCaller{contract: contract}, nil +} + +// NewWalletFactoryTransactor creates a new write-only instance of WalletFactory, bound to a specific deployed contract. +func NewWalletFactoryTransactor(address common.Address, transactor bind.ContractTransactor) (*WalletFactoryTransactor, error) { + contract, err := bindWalletFactory(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &WalletFactoryTransactor{contract: contract}, nil +} + +// NewWalletFactoryFilterer creates a new log filterer instance of WalletFactory, bound to a specific deployed contract. +func NewWalletFactoryFilterer(address common.Address, filterer bind.ContractFilterer) (*WalletFactoryFilterer, error) { + contract, err := bindWalletFactory(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &WalletFactoryFilterer{contract: contract}, nil +} + +// bindWalletFactory binds a generic wrapper to an already deployed contract. +func bindWalletFactory(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := WalletFactoryMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_WalletFactory *WalletFactoryRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _WalletFactory.Contract.WalletFactoryCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_WalletFactory *WalletFactoryRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _WalletFactory.Contract.WalletFactoryTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_WalletFactory *WalletFactoryRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _WalletFactory.Contract.WalletFactoryTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_WalletFactory *WalletFactoryCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _WalletFactory.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_WalletFactory *WalletFactoryTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _WalletFactory.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_WalletFactory *WalletFactoryTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _WalletFactory.Contract.contract.Transact(opts, method, params...) +} + +// Deploy is a paid mutator transaction binding the contract method 0x32c02a14. +// +// Solidity: function deploy(address _mainModule, bytes32 _salt) payable returns(address _contract) +func (_WalletFactory *WalletFactoryTransactor) Deploy(opts *bind.TransactOpts, _mainModule common.Address, _salt [32]byte) (*types.Transaction, error) { + return _WalletFactory.contract.Transact(opts, "deploy", _mainModule, _salt) +} + +// Deploy is a paid mutator transaction binding the contract method 0x32c02a14. +// +// Solidity: function deploy(address _mainModule, bytes32 _salt) payable returns(address _contract) +func (_WalletFactory *WalletFactorySession) Deploy(_mainModule common.Address, _salt [32]byte) (*types.Transaction, error) { + return _WalletFactory.Contract.Deploy(&_WalletFactory.TransactOpts, _mainModule, _salt) +} + +// Deploy is a paid mutator transaction binding the contract method 0x32c02a14. +// +// Solidity: function deploy(address _mainModule, bytes32 _salt) payable returns(address _contract) +func (_WalletFactory *WalletFactoryTransactorSession) Deploy(_mainModule common.Address, _salt [32]byte) (*types.Transaction, error) { + return _WalletFactory.Contract.Deploy(&_WalletFactory.TransactOpts, _mainModule, _salt) +} diff --git a/contracts/gen/v3/walletguest/wallet_guest.gen.go b/contracts/gen/v3/walletguest/wallet_guest.gen.go new file mode 100644 index 00000000..d2c5e21e --- /dev/null +++ b/contracts/gen/v3/walletguest/wallet_guest.gen.go @@ -0,0 +1,766 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package walletguest + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/0xsequence/ethkit/go-ethereum" + "github.com/0xsequence/ethkit/go-ethereum/accounts/abi" + "github.com/0xsequence/ethkit/go-ethereum/accounts/abi/bind" + "github.com/0xsequence/ethkit/go-ethereum/common" + "github.com/0xsequence/ethkit/go-ethereum/core/types" + "github.com/0xsequence/ethkit/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// WalletGuestMetaData contains all meta data concerning the WalletGuest contract. +var WalletGuestMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"fallback\",\"stateMutability\":\"payable\"},{\"type\":\"event\",\"name\":\"CallAborted\",\"inputs\":[{\"name\":\"_opHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"_index\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"_returnData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CallFailed\",\"inputs\":[{\"name\":\"_opHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"_index\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"_returnData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CallSkipped\",\"inputs\":[{\"name\":\"_opHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"_index\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CallSucceeded\",\"inputs\":[{\"name\":\"_opHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"_index\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"DelegateCallNotAllowed\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidKind\",\"inputs\":[{\"name\":\"kind\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"type\":\"error\",\"name\":\"NotEnoughGas\",\"inputs\":[{\"name\":\"_payload\",\"type\":\"tuple\",\"internalType\":\"structPayload.Decoded\",\"components\":[{\"name\":\"kind\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"noChainId\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"calls\",\"type\":\"tuple[]\",\"internalType\":\"structPayload.Call[]\",\"components\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"delegateCall\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"onlyFallback\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"behaviorOnError\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"space\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"imageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"parentWallets\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]},{\"name\":\"_index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_gasLeft\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"_payload\",\"type\":\"tuple\",\"internalType\":\"structPayload.Decoded\",\"components\":[{\"name\":\"kind\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"noChainId\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"calls\",\"type\":\"tuple[]\",\"internalType\":\"structPayload.Call[]\",\"components\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"delegateCall\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"onlyFallback\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"behaviorOnError\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"space\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"imageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"parentWallets\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]},{\"name\":\"_index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_returnData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}]", + Bin: "0x60808060405234601557610f6d908161001b8239f35b600080fdfe608060405261000c610330565b60008082523560f81c6001908160018083160361028a5750600060608401525b600761003b60ff831660011c90565b168061023d575b5060108181160361020c57506001905b61005b826103a3565b90604084019182526000905b838210610083576100818561007b81610540565b906108e0565b005b803560f81c906001019091816001808516036101ec57506100c5306100a9838751610441565b519073ffffffffffffffffffffffffffffffffffffffff169052565b6002808416146101ce575b600480841614610183575b60088084161461014e575b61013761013160c0856101116010806001989916146080610108888c51610441565b51019015159052565b61012760208083161460a0610108888c51610441565b1660061c60031690565b60ff1690565b60c0610144838751610441565b5101520190610067565b61013761013160c06101666001959060208235920190565b96906060610175878b51610441565b5101529594505050506100e6565b906101c890803560e81c906003016101c16101a86101a18484610484565b83366104c0565b919060406101b7888b51610441565b51019236916104db565b9052610484565b906100db565b90803590602001919060206101e4838751610441565b5101526100d0565b6102079250803560601c9060140192906100a9838751610441565b6100c5565b60209081160361022c5761ffff90803560f01c906002015b911690610052565b60ff90803560f81c90600101610224565b61027d919291908060031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b0190843590610100031c16920190565b9190608084015238610042565b8035606090811c90850152601401915061002c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff8211176102ea57604052565b61029f565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176102ea57604052565b60405190610120820182811067ffffffffffffffff8211176102ea576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b67ffffffffffffffff81116102ea5760051b60200190565b906103ad8261038b565b6103ba60405191826102ef565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06103e8829461038b565b019060005b8281106103f957505050565b602090604051610408816102ce565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c0820152828285010152016103ed565b80518210156104555760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9190820180921161049157565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b9291928382116104d65783116104d65780920390565b600080fd5b92919267ffffffffffffffff82116102ea576040519161052360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601846102ef565b8294818452818301116104d6578281602093846000960137010152565b6020810151156106645761063261065e6105f060005b60405160208101917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408301527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606083015260808201523060a082015260a081526105e760c0826102ef565b51902093610bc6565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826102ef565b51902090565b61063261065e6105f046610556565b919082519283825260005b8481106106bd5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b8060208092840101518282860101520161067e565b9080602083519182815201916020808360051b8301019401926000915b8383106106fe57505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080610771604085015160e0604086015260e0850190610673565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152970193019301919392906106ef565b906020808351928381520192019060005b8181106107c65750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016107b9565b805160ff1682526108769160208281015115159082015261010061085061082a604085015161012060408601526101208501906106d2565b606085015160608501526080850151608085015260a085015184820360a0860152610673565b9260c081015160c084015260e081015160e08401520151906101008184039101526107a8565b90565b610891604092959493956060835260608301906107f2565b9460208201520152565b6108769392606092825260208201528160408201520190610673565b6108cd61087694926060835260608301906107f2565b9260208201526040818403910152610673565b90600091604081019283515193815b8581106108ff575b505050505050565b61090a818351610441565b519261091960a0850151151590565b80610b7a575b610b3a575060009260608101518015801580610b31575b610af9576080830151610acc5761098a9161098691610969855173ffffffffffffffffffffffffffffffffffffffff1690565b91602086015191600014610ac657505a905b604086015192610da1565b1590565b6109cc575b506040805186815260208101839052600192917f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a91a15b016108ef565b60c001805115610a7d576001815114610a3a57516002146109ed573861098f565b93925050507fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b9250610a2c610a20610db3565b6040519384938461089b565b0390a13880808080806108f7565b5083610a79610a47610db3565b6040519384937f7f6b0bb1000000000000000000000000000000000000000000000000000000008552600485016108b7565b0390fd5b509150600180927f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d610abe610ab0610db3565b604051918291858b8461089b565b0390a16109c6565b9061097b565b7f230d1ccc0000000000000000000000000000000000000000000000000000000086526004849052602486fd5b8387610a795a6040519384937f2139527400000000000000000000000000000000000000000000000000000000855260048501610879565b50815a10610936565b6040805187815260208101849052919450600192917f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b9181908101610abe565b50801561091f565b805160209091019060005b818110610b9a5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101610b8d565b610100810151604051610be181610632602082018095610b82565b51902090610bf0815160ff1690565b60ff811680610c695750509061065e610c0c6040840151610dfc565b9261063260806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b60018103610cc757505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4669381019384529081019190915260608101929092529061065e8160808101610632565b60028103610d1d57505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e46020820190815291810192909252606082019290925261065e8160808101610632565b600303610d71575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4666020820190815291810192909252606082019290925261065e8160808101610632565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b9160009391849360208451940192f190565b3d90604051916020818401016040528083526000602084013e565b805160209091019060005b818110610de65750505090565b8251845260209384019390920191600101610dd9565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610e42610e2c8361038b565b92610e3a60405194856102ef565b80845261038b565b0136602083013760005b8351811015610f1e5780610e6260019286610441565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152610f0a610120826102ef565b519020610f178285610441565b5201610e4c565b5090915060405161065e81610632602082018095610dce56fea2646970667358221220baf48a03c446c575132553e62013c6320b5d90a1ba275593a31ee1589046bd1464736f6c634300081c0033", +} + +// WalletGuestABI is the input ABI used to generate the binding from. +// Deprecated: Use WalletGuestMetaData.ABI instead. +var WalletGuestABI = WalletGuestMetaData.ABI + +// WalletGuestBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use WalletGuestMetaData.Bin instead. +var WalletGuestBin = WalletGuestMetaData.Bin + +// DeployWalletGuest deploys a new Ethereum contract, binding an instance of WalletGuest to it. +func DeployWalletGuest(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *WalletGuest, error) { + parsed, err := WalletGuestMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(WalletGuestBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &WalletGuest{WalletGuestCaller: WalletGuestCaller{contract: contract}, WalletGuestTransactor: WalletGuestTransactor{contract: contract}, WalletGuestFilterer: WalletGuestFilterer{contract: contract}}, nil +} + +// WalletGuest is an auto generated Go binding around an Ethereum contract. +type WalletGuest struct { + WalletGuestCaller // Read-only binding to the contract + WalletGuestTransactor // Write-only binding to the contract + WalletGuestFilterer // Log filterer for contract events +} + +// WalletGuestCaller is an auto generated read-only Go binding around an Ethereum contract. +type WalletGuestCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// WalletGuestTransactor is an auto generated write-only Go binding around an Ethereum contract. +type WalletGuestTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// WalletGuestFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type WalletGuestFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// WalletGuestSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type WalletGuestSession struct { + Contract *WalletGuest // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// WalletGuestCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type WalletGuestCallerSession struct { + Contract *WalletGuestCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// WalletGuestTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type WalletGuestTransactorSession struct { + Contract *WalletGuestTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// WalletGuestRaw is an auto generated low-level Go binding around an Ethereum contract. +type WalletGuestRaw struct { + Contract *WalletGuest // Generic contract binding to access the raw methods on +} + +// WalletGuestCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type WalletGuestCallerRaw struct { + Contract *WalletGuestCaller // Generic read-only contract binding to access the raw methods on +} + +// WalletGuestTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type WalletGuestTransactorRaw struct { + Contract *WalletGuestTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewWalletGuest creates a new instance of WalletGuest, bound to a specific deployed contract. +func NewWalletGuest(address common.Address, backend bind.ContractBackend) (*WalletGuest, error) { + contract, err := bindWalletGuest(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &WalletGuest{WalletGuestCaller: WalletGuestCaller{contract: contract}, WalletGuestTransactor: WalletGuestTransactor{contract: contract}, WalletGuestFilterer: WalletGuestFilterer{contract: contract}}, nil +} + +// NewWalletGuestCaller creates a new read-only instance of WalletGuest, bound to a specific deployed contract. +func NewWalletGuestCaller(address common.Address, caller bind.ContractCaller) (*WalletGuestCaller, error) { + contract, err := bindWalletGuest(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &WalletGuestCaller{contract: contract}, nil +} + +// NewWalletGuestTransactor creates a new write-only instance of WalletGuest, bound to a specific deployed contract. +func NewWalletGuestTransactor(address common.Address, transactor bind.ContractTransactor) (*WalletGuestTransactor, error) { + contract, err := bindWalletGuest(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &WalletGuestTransactor{contract: contract}, nil +} + +// NewWalletGuestFilterer creates a new log filterer instance of WalletGuest, bound to a specific deployed contract. +func NewWalletGuestFilterer(address common.Address, filterer bind.ContractFilterer) (*WalletGuestFilterer, error) { + contract, err := bindWalletGuest(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &WalletGuestFilterer{contract: contract}, nil +} + +// bindWalletGuest binds a generic wrapper to an already deployed contract. +func bindWalletGuest(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := WalletGuestMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_WalletGuest *WalletGuestRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _WalletGuest.Contract.WalletGuestCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_WalletGuest *WalletGuestRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _WalletGuest.Contract.WalletGuestTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_WalletGuest *WalletGuestRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _WalletGuest.Contract.WalletGuestTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_WalletGuest *WalletGuestCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _WalletGuest.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_WalletGuest *WalletGuestTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _WalletGuest.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_WalletGuest *WalletGuestTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _WalletGuest.Contract.contract.Transact(opts, method, params...) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_WalletGuest *WalletGuestTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) { + return _WalletGuest.contract.RawTransact(opts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_WalletGuest *WalletGuestSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _WalletGuest.Contract.Fallback(&_WalletGuest.TransactOpts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_WalletGuest *WalletGuestTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _WalletGuest.Contract.Fallback(&_WalletGuest.TransactOpts, calldata) +} + +// WalletGuestCallAbortedIterator is returned from FilterCallAborted and is used to iterate over the raw logs and unpacked data for CallAborted events raised by the WalletGuest contract. +type WalletGuestCallAbortedIterator struct { + Event *WalletGuestCallAborted // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WalletGuestCallAbortedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WalletGuestCallAborted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WalletGuestCallAborted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WalletGuestCallAbortedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WalletGuestCallAbortedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WalletGuestCallAborted represents a CallAborted event raised by the WalletGuest contract. +type WalletGuestCallAborted struct { + OpHash [32]byte + Index *big.Int + ReturnData []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterCallAborted is a free log retrieval operation binding the contract event 0xc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b. +// +// Solidity: event CallAborted(bytes32 _opHash, uint256 _index, bytes _returnData) +func (_WalletGuest *WalletGuestFilterer) FilterCallAborted(opts *bind.FilterOpts) (*WalletGuestCallAbortedIterator, error) { + + logs, sub, err := _WalletGuest.contract.FilterLogs(opts, "CallAborted") + if err != nil { + return nil, err + } + return &WalletGuestCallAbortedIterator{contract: _WalletGuest.contract, event: "CallAborted", logs: logs, sub: sub}, nil +} + +// WatchCallAborted is a free log subscription operation binding the contract event 0xc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b. +// +// Solidity: event CallAborted(bytes32 _opHash, uint256 _index, bytes _returnData) +func (_WalletGuest *WalletGuestFilterer) WatchCallAborted(opts *bind.WatchOpts, sink chan<- *WalletGuestCallAborted) (event.Subscription, error) { + + logs, sub, err := _WalletGuest.contract.WatchLogs(opts, "CallAborted") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WalletGuestCallAborted) + if err := _WalletGuest.contract.UnpackLog(event, "CallAborted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseCallAborted is a log parse operation binding the contract event 0xc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b. +// +// Solidity: event CallAborted(bytes32 _opHash, uint256 _index, bytes _returnData) +func (_WalletGuest *WalletGuestFilterer) ParseCallAborted(log types.Log) (*WalletGuestCallAborted, error) { + event := new(WalletGuestCallAborted) + if err := _WalletGuest.contract.UnpackLog(event, "CallAborted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WalletGuestCallFailedIterator is returned from FilterCallFailed and is used to iterate over the raw logs and unpacked data for CallFailed events raised by the WalletGuest contract. +type WalletGuestCallFailedIterator struct { + Event *WalletGuestCallFailed // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WalletGuestCallFailedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WalletGuestCallFailed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WalletGuestCallFailed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WalletGuestCallFailedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WalletGuestCallFailedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WalletGuestCallFailed represents a CallFailed event raised by the WalletGuest contract. +type WalletGuestCallFailed struct { + OpHash [32]byte + Index *big.Int + ReturnData []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterCallFailed is a free log retrieval operation binding the contract event 0x115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d. +// +// Solidity: event CallFailed(bytes32 _opHash, uint256 _index, bytes _returnData) +func (_WalletGuest *WalletGuestFilterer) FilterCallFailed(opts *bind.FilterOpts) (*WalletGuestCallFailedIterator, error) { + + logs, sub, err := _WalletGuest.contract.FilterLogs(opts, "CallFailed") + if err != nil { + return nil, err + } + return &WalletGuestCallFailedIterator{contract: _WalletGuest.contract, event: "CallFailed", logs: logs, sub: sub}, nil +} + +// WatchCallFailed is a free log subscription operation binding the contract event 0x115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d. +// +// Solidity: event CallFailed(bytes32 _opHash, uint256 _index, bytes _returnData) +func (_WalletGuest *WalletGuestFilterer) WatchCallFailed(opts *bind.WatchOpts, sink chan<- *WalletGuestCallFailed) (event.Subscription, error) { + + logs, sub, err := _WalletGuest.contract.WatchLogs(opts, "CallFailed") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WalletGuestCallFailed) + if err := _WalletGuest.contract.UnpackLog(event, "CallFailed", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseCallFailed is a log parse operation binding the contract event 0x115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d. +// +// Solidity: event CallFailed(bytes32 _opHash, uint256 _index, bytes _returnData) +func (_WalletGuest *WalletGuestFilterer) ParseCallFailed(log types.Log) (*WalletGuestCallFailed, error) { + event := new(WalletGuestCallFailed) + if err := _WalletGuest.contract.UnpackLog(event, "CallFailed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WalletGuestCallSkippedIterator is returned from FilterCallSkipped and is used to iterate over the raw logs and unpacked data for CallSkipped events raised by the WalletGuest contract. +type WalletGuestCallSkippedIterator struct { + Event *WalletGuestCallSkipped // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WalletGuestCallSkippedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WalletGuestCallSkipped) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WalletGuestCallSkipped) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WalletGuestCallSkippedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WalletGuestCallSkippedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WalletGuestCallSkipped represents a CallSkipped event raised by the WalletGuest contract. +type WalletGuestCallSkipped struct { + OpHash [32]byte + Index *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterCallSkipped is a free log retrieval operation binding the contract event 0x9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b. +// +// Solidity: event CallSkipped(bytes32 _opHash, uint256 _index) +func (_WalletGuest *WalletGuestFilterer) FilterCallSkipped(opts *bind.FilterOpts) (*WalletGuestCallSkippedIterator, error) { + + logs, sub, err := _WalletGuest.contract.FilterLogs(opts, "CallSkipped") + if err != nil { + return nil, err + } + return &WalletGuestCallSkippedIterator{contract: _WalletGuest.contract, event: "CallSkipped", logs: logs, sub: sub}, nil +} + +// WatchCallSkipped is a free log subscription operation binding the contract event 0x9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b. +// +// Solidity: event CallSkipped(bytes32 _opHash, uint256 _index) +func (_WalletGuest *WalletGuestFilterer) WatchCallSkipped(opts *bind.WatchOpts, sink chan<- *WalletGuestCallSkipped) (event.Subscription, error) { + + logs, sub, err := _WalletGuest.contract.WatchLogs(opts, "CallSkipped") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WalletGuestCallSkipped) + if err := _WalletGuest.contract.UnpackLog(event, "CallSkipped", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseCallSkipped is a log parse operation binding the contract event 0x9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b. +// +// Solidity: event CallSkipped(bytes32 _opHash, uint256 _index) +func (_WalletGuest *WalletGuestFilterer) ParseCallSkipped(log types.Log) (*WalletGuestCallSkipped, error) { + event := new(WalletGuestCallSkipped) + if err := _WalletGuest.contract.UnpackLog(event, "CallSkipped", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WalletGuestCallSucceededIterator is returned from FilterCallSucceeded and is used to iterate over the raw logs and unpacked data for CallSucceeded events raised by the WalletGuest contract. +type WalletGuestCallSucceededIterator struct { + Event *WalletGuestCallSucceeded // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WalletGuestCallSucceededIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WalletGuestCallSucceeded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WalletGuestCallSucceeded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WalletGuestCallSucceededIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WalletGuestCallSucceededIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WalletGuestCallSucceeded represents a CallSucceeded event raised by the WalletGuest contract. +type WalletGuestCallSucceeded struct { + OpHash [32]byte + Index *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterCallSucceeded is a free log retrieval operation binding the contract event 0x5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a. +// +// Solidity: event CallSucceeded(bytes32 _opHash, uint256 _index) +func (_WalletGuest *WalletGuestFilterer) FilterCallSucceeded(opts *bind.FilterOpts) (*WalletGuestCallSucceededIterator, error) { + + logs, sub, err := _WalletGuest.contract.FilterLogs(opts, "CallSucceeded") + if err != nil { + return nil, err + } + return &WalletGuestCallSucceededIterator{contract: _WalletGuest.contract, event: "CallSucceeded", logs: logs, sub: sub}, nil +} + +// WatchCallSucceeded is a free log subscription operation binding the contract event 0x5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a. +// +// Solidity: event CallSucceeded(bytes32 _opHash, uint256 _index) +func (_WalletGuest *WalletGuestFilterer) WatchCallSucceeded(opts *bind.WatchOpts, sink chan<- *WalletGuestCallSucceeded) (event.Subscription, error) { + + logs, sub, err := _WalletGuest.contract.WatchLogs(opts, "CallSucceeded") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WalletGuestCallSucceeded) + if err := _WalletGuest.contract.UnpackLog(event, "CallSucceeded", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseCallSucceeded is a log parse operation binding the contract event 0x5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a. +// +// Solidity: event CallSucceeded(bytes32 _opHash, uint256 _index) +func (_WalletGuest *WalletGuestFilterer) ParseCallSucceeded(log types.Log) (*WalletGuestCallSucceeded, error) { + event := new(WalletGuestCallSucceeded) + if err := _WalletGuest.contract.UnpackLog(event, "CallSucceeded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/contracts/gen/v3/walletsimulator/wallet_simulator.gen.go b/contracts/gen/v3/walletsimulator/wallet_simulator.gen.go new file mode 100644 index 00000000..4569a10b --- /dev/null +++ b/contracts/gen/v3/walletsimulator/wallet_simulator.gen.go @@ -0,0 +1,2177 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package walletsimulator + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/0xsequence/ethkit/go-ethereum" + "github.com/0xsequence/ethkit/go-ethereum/accounts/abi" + "github.com/0xsequence/ethkit/go-ethereum/accounts/abi/bind" + "github.com/0xsequence/ethkit/go-ethereum/common" + "github.com/0xsequence/ethkit/go-ethereum/core/types" + "github.com/0xsequence/ethkit/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// PackedUserOperation is an auto generated low-level Go binding around an user-defined struct. +type PackedUserOperation struct { + Sender common.Address + Nonce *big.Int + InitCode []byte + CallData []byte + AccountGasLimits [32]byte + PreVerificationGas *big.Int + GasFees [32]byte + PaymasterAndData []byte + Signature []byte +} + +// PayloadCall is an auto generated low-level Go binding around an user-defined struct. +type PayloadCall struct { + To common.Address + Value *big.Int + Data []byte + GasLimit *big.Int + DelegateCall bool + OnlyFallback bool + BehaviorOnError *big.Int +} + +// PayloadDecoded is an auto generated low-level Go binding around an user-defined struct. +type PayloadDecoded struct { + Kind uint8 + NoChainId bool + Calls []PayloadCall + Space *big.Int + Nonce *big.Int + Message []byte + ImageHash [32]byte + Digest [32]byte + ParentWallets []common.Address +} + +// SimulatorResult is an auto generated low-level Go binding around an user-defined struct. +type SimulatorResult struct { + Status uint8 + Result []byte + GasUsed *big.Int +} + +// WalletSimulatorMetaData contains all meta data concerning the WalletSimulator contract. +var WalletSimulatorMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_entryPoint\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"fallback\",\"stateMutability\":\"payable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"addHook\",\"inputs\":[{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"},{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"entrypoint\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"_payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeUserOp\",\"inputs\":[{\"name\":\"_payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getImplementation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStaticSignature\",\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"imageHash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isValidSignature\",\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"onERC1155BatchReceived\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"onERC1155Received\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"onERC721Received\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"readHook\",\"inputs\":[{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"readNonce\",\"inputs\":[{\"name\":\"_space\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"recoverPartialSignature\",\"inputs\":[{\"name\":\"_payload\",\"type\":\"tuple\",\"internalType\":\"structPayload.Decoded\",\"components\":[{\"name\":\"kind\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"noChainId\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"calls\",\"type\":\"tuple[]\",\"internalType\":\"structPayload.Call[]\",\"components\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"delegateCall\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"onlyFallback\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"behaviorOnError\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"space\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"imageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"parentWallets\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]},{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"threshold\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"weight\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"isValidImage\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"imageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"checkpoint\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"opHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"recoverSapientSignature\",\"inputs\":[{\"name\":\"_payload\",\"type\":\"tuple\",\"internalType\":\"structPayload.Decoded\",\"components\":[{\"name\":\"kind\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"noChainId\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"calls\",\"type\":\"tuple[]\",\"internalType\":\"structPayload.Call[]\",\"components\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"delegateCall\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"onlyFallback\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"behaviorOnError\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"space\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"imageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"parentWallets\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]},{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeHook\",\"inputs\":[{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"selfExecute\",\"inputs\":[{\"name\":\"_payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"setStaticSignature\",\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_address\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_timestamp\",\"type\":\"uint96\",\"internalType\":\"uint96\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"simulate\",\"inputs\":[{\"name\":\"_calls\",\"type\":\"tuple[]\",\"internalType\":\"structPayload.Call[]\",\"components\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"delegateCall\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"onlyFallback\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"behaviorOnError\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[{\"name\":\"results\",\"type\":\"tuple[]\",\"internalType\":\"structSimulator.Result[]\",\"components\":[{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumSimulator.Status\"},{\"name\":\"result\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasUsed\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"tokenReceived\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"tokensReceived\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operatorData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateImageHash\",\"inputs\":[{\"name\":\"_imageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateImplementation\",\"inputs\":[{\"name\":\"_implementation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"validateUserOp\",\"inputs\":[{\"name\":\"userOp\",\"type\":\"tuple\",\"internalType\":\"structPackedUserOperation\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"initCode\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"callData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"accountGasLimits\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"preVerificationGas\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasFees\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"paymasterAndData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"userOpHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"missingAccountFunds\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"validationData\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"CallAborted\",\"inputs\":[{\"name\":\"_opHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"_index\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"_returnData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CallFailed\",\"inputs\":[{\"name\":\"_opHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"_index\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"_returnData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CallSkipped\",\"inputs\":[{\"name\":\"_opHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"_index\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CallSucceeded\",\"inputs\":[{\"name\":\"_opHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"_index\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DefinedHook\",\"inputs\":[{\"name\":\"selector\",\"type\":\"bytes4\",\"indexed\":false,\"internalType\":\"bytes4\"},{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ImageHashUpdated\",\"inputs\":[{\"name\":\"newImageHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ImplementationUpdated\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NonceChange\",\"inputs\":[{\"name\":\"_space\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"_newNonce\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StaticSignatureSet\",\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"_address\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"_timestamp\",\"type\":\"uint96\",\"indexed\":false,\"internalType\":\"uint96\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BadNonce\",\"inputs\":[{\"name\":\"_space\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_provided\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_current\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"ERC4337Disabled\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"HookAlreadyExists\",\"inputs\":[{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}]},{\"type\":\"error\",\"name\":\"HookDoesNotExist\",\"inputs\":[{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}]},{\"type\":\"error\",\"name\":\"ImageHashIsZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidERC1271Signature\",\"inputs\":[{\"name\":\"_opHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_signer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidEntryPoint\",\"inputs\":[{\"name\":\"_entrypoint\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"InvalidKind\",\"inputs\":[{\"name\":\"kind\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"type\":\"error\",\"name\":\"InvalidSapientSignature\",\"inputs\":[{\"name\":\"_payload\",\"type\":\"tuple\",\"internalType\":\"structPayload.Decoded\",\"components\":[{\"name\":\"kind\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"noChainId\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"calls\",\"type\":\"tuple[]\",\"internalType\":\"structPayload.Call[]\",\"components\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"delegateCall\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"onlyFallback\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"behaviorOnError\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"space\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"imageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"parentWallets\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]},{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidSignature\",\"inputs\":[{\"name\":\"_payload\",\"type\":\"tuple\",\"internalType\":\"structPayload.Decoded\",\"components\":[{\"name\":\"kind\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"noChainId\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"calls\",\"type\":\"tuple[]\",\"internalType\":\"structPayload.Call[]\",\"components\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"delegateCall\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"onlyFallback\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"behaviorOnError\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"space\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"imageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"parentWallets\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]},{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidSignatureFlag\",\"inputs\":[{\"name\":\"_flag\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidSignatureWeight\",\"inputs\":[{\"name\":\"_threshold\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_weight\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidStaticSignatureExpired\",\"inputs\":[{\"name\":\"_opHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_expires\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidStaticSignatureWrongCaller\",\"inputs\":[{\"name\":\"_opHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_caller\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_expectedCaller\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"LowWeightChainedSignature\",\"inputs\":[{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_threshold\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_weight\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"NotEnoughGas\",\"inputs\":[{\"name\":\"_payload\",\"type\":\"tuple\",\"internalType\":\"structPayload.Decoded\",\"components\":[{\"name\":\"kind\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"noChainId\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"calls\",\"type\":\"tuple[]\",\"internalType\":\"structPayload.Call[]\",\"components\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"delegateCall\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"onlyFallback\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"behaviorOnError\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"space\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"imageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"parentWallets\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]},{\"name\":\"_index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_gasLeft\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"OnlySelf\",\"inputs\":[{\"name\":\"_sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"_payload\",\"type\":\"tuple\",\"internalType\":\"structPayload.Decoded\",\"components\":[{\"name\":\"kind\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"noChainId\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"calls\",\"type\":\"tuple[]\",\"internalType\":\"structPayload.Call[]\",\"components\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"delegateCall\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"onlyFallback\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"behaviorOnError\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"space\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"imageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"parentWallets\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]},{\"name\":\"_index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_returnData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"UnusedSnapshot\",\"inputs\":[{\"name\":\"_snapshot\",\"type\":\"tuple\",\"internalType\":\"structSnapshot\",\"components\":[{\"name\":\"imageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"checkpoint\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]},{\"type\":\"error\",\"name\":\"WrongChainedCheckpointOrder\",\"inputs\":[{\"name\":\"_nextCheckpoint\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_checkpoint\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]", + Bin: "0x60a034607457601f61434038819003918201601f19168301916001600160401b03831184841017607957808492602094604052833981010312607457516001600160a01b03811681036074576080526040516142b090816100908239608051818181610fe1015281816112db0152611adf0152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6080604052600436101561001e575b361561001c5761001c6120f4565b005b60003560e01c806223de291461019d578063025b22bc1461019857806313792a4a14610193578063150b7a021461018e5780631626ba7e1461018957806319822f7c146101845780631a9b23371461017f5780631f6a1eb91461017a57806329561426146101755780634fcf3eca1461017057806351605d801461016b5780636ea44577146101665780638943ec02146101615780638c3f55631461015c57806392dcb3fc146101575780639c145aed14610152578063a27c39221461014d578063a65d69d414610148578063aaf10f4214610143578063ad55366b1461013e578063b93ea7ad14610139578063bc197c8114610134578063f23a6e611461012f5763f727ef1c0361000e57611629565b61159c565b6114ca565b61139c565b611350565b6112ff565b611290565b611163565b610fbb565b610f5d565b610f21565b610e9d565b610e6e565b610dca565b610cae565b610bf5565b610b14565b610ab1565b6109fc565b610974565b6108e7565b6107ea565b6102eb565b61025f565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101c557565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101c557565b6044359073ffffffffffffffffffffffffffffffffffffffff821682036101c557565b359073ffffffffffffffffffffffffffffffffffffffff821682036101c557565b9181601f840112156101c55782359167ffffffffffffffff83116101c557602083818601950101116101c557565b346101c55760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576102966101a2565b5061029f6101ca565b506102a86101ed565b5060843567ffffffffffffffff81116101c5576102c9903690600401610231565b505060a43567ffffffffffffffff81116101c55761001c903690600401610231565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55761031d6101a2565b30330361036a576020817f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca0392305573ffffffffffffffffffffffffffffffffffffffff60405191168152a1005b7fa19dbf00000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff8211176103e357604052565b610398565b6040810190811067ffffffffffffffff8211176103e357604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176103e357604052565b6040519061045460e083610404565b565b6040519061045461012083610404565b359060ff821682036101c557565b359081151582036101c557565b67ffffffffffffffff81116103e35760051b60200190565b67ffffffffffffffff81116103e357601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926104df82610499565b916104ed6040519384610404565b8294818452818301116101c5578281602093846000960137010152565b9080601f830112156101c557816020610525933591016104d3565b90565b919060e0838203126101c55761053c610445565b9261054681610210565b845260208101356020850152604081013567ffffffffffffffff81116101c55760c09261057491830161050a565b60408501526060810135606085015261058f60808201610474565b60808501526105a060a08201610474565b60a0850152013560c0830152565b9080601f830112156101c55781356105c581610481565b926105d36040519485610404565b81845260208085019260051b820101918383116101c55760208201905b8382106105ff57505050505090565b813567ffffffffffffffff81116101c55760209161062287848094880101610528565b8152019101906105f0565b9080601f830112156101c557813561064481610481565b926106526040519485610404565b81845260208085019260051b8201019283116101c557602001905b82821061067a5750505090565b6020809161068784610210565b81520191019061066d565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126101c55760043567ffffffffffffffff81116101c5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82850301126101c557610704610456565b9061071181600401610466565b825261071f60248201610474565b6020830152604481013567ffffffffffffffff81116101c557846004610747928401016105ae565b6040830152606481013560608301526084810135608083015260a481013567ffffffffffffffff81116101c5578460046107839284010161050a565b60a083015260c481013560c083015260e481013560e083015261010481013567ffffffffffffffff81116101c557600485916107c093010161062d565b610100820152916024359067ffffffffffffffff82116101c5576107e691600401610231565b9091565b346101c5576107f836610692565b909161010081019261081361080e855151611731565b611751565b9160005b8551805182101561087a579061087461084f610835836001956117cf565b5173ffffffffffffffffffffffffffffffffffffffff1690565b61085983886117cf565b9073ffffffffffffffffffffffffffffffffffffffff169052565b01610817565b505083838661088f33610859835151856117cf565b5261089b8184846121c6565b50156108ad5760405160018152602090f35b6108e3906040519384937ff58cc8b5000000000000000000000000000000000000000000000000000000008552600485016119cb565b0390fd5b346101c55760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55761091e6101a2565b506109276101ca565b5060643567ffffffffffffffff81116101c557610948903690600401610231565b505060206040517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b346101c55760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760043560243567ffffffffffffffff81116101c5576020916109cc6109d2923690600401610231565b916119f0565b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b346101c55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760043567ffffffffffffffff81116101c5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126101c557610a7f60209160243560443591600401611ac5565b604051908152f35b7fffffffff000000000000000000000000000000000000000000000000000000008116036101c557565b346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576020610af6600435610af181610a87565b6123ab565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760043567ffffffffffffffff81116101c557610b5e903690600401610231565b9060243567ffffffffffffffff81116101c557610b82610b8c913690600401610231565b9190935a936124e0565b91610ba060608401516080850151906127a4565b610bab8285856121c6565b929015610bbd575061001c93506128fd565b836108e386926040519384937fa2b6d61b000000000000000000000000000000000000000000000000000000008552600485016119cb565b346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760043530330361036a578015610c84576020817f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf855604051908152a1005b7f4294d1270000000000000000000000000000000000000000000000000000000060005260046000fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c557600435610ce481610a87565b30330361036a5773ffffffffffffffffffffffffffffffffffffffff610d09826123ab565b1615610d6f5760407fffffffff000000000000000000000000000000000000000000000000000000007f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19216610d60600082613124565b815190815260006020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f1c3812cc000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b60009103126101c557565b346101c55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760207fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf854604051908152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101c5576004359067ffffffffffffffff82116101c5576107e691600401610231565b610e7736610e25565b9030330361036a57610e8d61001c925a926124e0565b90610e9782612bf0565b906128fd565b346101c55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c557610ed46101a2565b5060443567ffffffffffffffff81116101c557610ef5903690600401610231565b505060206040517f8943ec02000000000000000000000000000000000000000000000000000000008152f35b346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576020610a7f600435612c84565b346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576040610f99600435612cca565b73ffffffffffffffffffffffffffffffffffffffff8351921682526020820152f35b346101c557610fc936610e25565b9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001680156110a957330361107b57303b156101c55761104f9160009160405193849283927f6ea4457700000000000000000000000000000000000000000000000000000000845260048401611c66565b038183305af180156110765761106157005b80611070600061001c93610404565b80610dbf565b611a3c565b7f1d6ddbf4000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7fd13d78350000000000000000000000000000000000000000000000000000000060005260046000fd5b9181601f840112156101c55782359167ffffffffffffffff83116101c5576020808501948460051b0101116101c557565b919082519283825260005b84811061114e5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b8060208092840101518282860101520161110f565b346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760043567ffffffffffffffff81116101c5576111b56111bb9136906004016110d3565b90611d94565b60405160208101916020825280518093526040820192602060408260051b85010192019060005b8181106111ef5784840385f35b9091927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08582030186528351908151600681101561126157600192826020939284935260408061124c858501516060878601526060850190611104565b930151910152950196019101949190946111e2565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b346101c55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101c55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576020305473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346101c55760c061136c60008061136636610692565b91612dd1565b92611378839293613edb565b906040519586526020860152151560408501526060840152608083015260a0820152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576004356113d281610a87565b6113da6101ca565b9030330361036a5773ffffffffffffffffffffffffffffffffffffffff611400826123ab565b1661147a577f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19173ffffffffffffffffffffffffffffffffffffffff7fffffffff0000000000000000000000000000000000000000000000000000000060409316911661146d8183613124565b82519182526020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f5b4d6d6a000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b346101c55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576115016101a2565b5061150a6101ca565b5060443567ffffffffffffffff81116101c55761152b9036906004016110d3565b505060643567ffffffffffffffff81116101c55761154d9036906004016110d3565b505060843567ffffffffffffffff81116101c55761156f903690600401610231565b50506040517fbc197c81000000000000000000000000000000000000000000000000000000008152602090f35b346101c55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576115d36101a2565b506115dc6101ca565b5060843567ffffffffffffffff81116101c5576115fd903690600401610231565b505060206040517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b346101c55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576004356116636101ca565b604435916bffffffffffffffffffffffff83168093036101c55730330361036a578273ffffffffffffffffffffffffffffffffffffffff836116ee7febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1967fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606097881b1617856130df565b6040519384521660208301526040820152a1005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b906001820180921161173f57565b611702565b9190820180921161173f57565b9061175b82610481565b6117686040519182610404565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06117968294610481565b0190602036910137565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518210156117e35760209160051b010190565b6117a0565b9080602083519182815201916020808360051b8301019401926000915b83831061181457505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080611887604085015160e0604086015260e0850190611104565b936060810151606085015260808101511515608085015260a0810151151560a0850152015191015297019301930191939290611805565b906020808351928381520192019060005b8181106118dc5750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016118cf565b805160ff16825261052591602082810151151590820152610100611966611940604085015161012060408601526101208501906117e8565b606085015160608501526080850151608085015260a085015184820360a0860152611104565b9260c081015160c084015260e081015160e08401520151906101008184039101526118be565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b916119e26105259492604085526040850190611908565b92602081850391015261198c565b90611a0d92916119fe612350565b906003825260e08201526121c6565b5015611a37577f1626ba7e0000000000000000000000000000000000000000000000000000000090565b600090565b6040513d6000823e3d90fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101c5570180359067ffffffffffffffff82116101c5576020019181360383136101c557565b908160209103126101c5575161052581610a87565b60409061052594928152816020820152019161198c565b91909173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169182156110a95782330361107b5780611bf7575b506020915080610100611b27920190611a48565b92611b5f60405194859384937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611aae565b0381305afa908115611076577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091611bc8575b501603611bc357600090565b600190565b611bea915060203d602011611bf0575b611be28183610404565b810190611a99565b38611bb7565b503d611bd8565b823b156101c5576040517fb760faf900000000000000000000000000000000000000000000000000000000815230600482015292600091849160249183915af190811561107657602092611b2792611c51575b5090611b13565b806110706000611c6093610404565b38611c4a565b91602061052593818152019161198c565b90611c8182610481565b611c8e6040519182610404565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611cbc8294610481565b0160005b818110611ccc57505050565b60405190606082019180831067ffffffffffffffff8411176103e357602092604052600081526060838201526000604082015282828601015201611cc0565b91908110156117e35760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21813603018212156101c5570190565b610525903690610528565b9190820391821161173f57565b909260c092610525959460008452602084015260408301526060820152600060808201528160a08201520190611104565b90915a92600090611da481611c77565b94825b828110611db7575b505050509050565b611dca611dc5828589611d0b565b611d4b565b93611dd860a0860151151590565b806120bc575b6120b2575060009360608101518015908115806120a9575b6120385783611e086080850151151590565b15611fd957611eb390611ebb92935a94611e36875173ffffffffffffffffffffffffffffffffffffffff1690565b9115611fd357505a905b611eae89611e8260408a01518d6040519788947f4c4e814c00000000000000000000000000000000000000000000000000000000602087015260248601611d63565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101855284610404565b612d36565b915a90611d56565b6040611ec7858c6117cf565b5101525b15611f07575b5080611ee9611ee26001938a6117cf565b5160019052565b611ef1612d48565b6020611efd838b6117cf565b5101525b01611da7565b60c001805115611f9c576001815114611f635751600214611f285738611ed1565b939450505050611f42611f3b82856117cf565b5160039052565b6020611f56611f4f612d48565b92856117cf565b5101528038808080611daf565b509395809550611f829350611f7b92508491506117cf565b5160049052565b6020611f96611f8f612d48565b92846117cf565b51015290565b50925060018093611fb7611fb0828a6117cf565b5160029052565b611fbf612d48565b6020611fcb838b6117cf565b510152611f01565b90611e40565b50611eb361201e915a93612001865173ffffffffffffffffffffffffffffffffffffffff1690565b9160208701519160001461203257505a905b604087015192612d24565b604061202a858c6117cf565b510152611ecb565b90612013565b505050905085945060209250611f96915061206161205a8261207796986117cf565b5160059052565b6120a35a60405185810191825295869160200190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101865285610404565b846117cf565b50805a10611df6565b9350600190611f01565b508015611dde565b3d156120ef573d906120d582610499565b916120e36040519384610404565b82523d6000602084013e565b606090565b6004361080156121015750565b612137906000357fffffffff00000000000000000000000000000000000000000000000000000000811691612189575b506123ab565b73ffffffffffffffffffffffffffffffffffffffff81166121555750565b60008091604051368382378036810184815203915af46121736120c4565b901561218157602081519101f35b602081519101fd5b7fffffffff000000000000000000000000000000000000000000000000000000008092503660040360031b1b161638612131565b90156117e35790565b91907f80000000000000000000000000000000000000000000000000000000000000008061221d6121f785856121bd565b357fff000000000000000000000000000000000000000000000000000000000000001690565b161461227c57600091829161223194612dd1565b90509190919280821061224c57505061224990613edb565b91565b7ffd41fcba0000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b505061228790612bf0565b9061229182612cca565b4281111561231e575073ffffffffffffffffffffffffffffffffffffffff81168015159081612313575b506122c7575060019190565b7f8945c3130000000000000000000000000000000000000000000000000000000060005260048390523360245273ffffffffffffffffffffffffffffffffffffffff1660445260646000fd5b9050331415386122bb565b7ff95b6ab700000000000000000000000000000000000000000000000000000000600052600484905260245260446000fd5b60405190610120820182811067ffffffffffffffff8211176103e3576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b73ffffffffffffffffffffffffffffffffffffffff906040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a120845216604082015260408152612422606082610404565b519020541690565b9061243482610481565b6124416040519182610404565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061246f8294610481565b019060005b82811061248057505050565b60209060405161248f816103c7565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c082015282828501015201612474565b909392938483116101c55784116101c5578101920390565b9190916124eb612350565b6000815292600190823560f81c827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8183160161278d5750600060608701525b600761253a60ff831660011c90565b168061273c575b5060108181160361270757506001925b61255a8461242a565b92604087019384526000905b85821061257557505050505050565b8281013560f81c906001019091816001808516036126e557506125b93061259d8389516117cf565b519073ffffffffffffffffffffffffffffffffffffffff169052565b6002808416146126c5575b600480841614612677575b600880841614612644575b61262d61262760c0856126068a60806125fd8860108060019c9d161493516117cf565b51019015159052565b61261d8a60a06125fd8860208087161493516117cf565b1660061c60031690565b60ff1690565b60c061263a8389516117cf565b5101520190612566565b60019161262d906126279060c090878101359060200196906060612669878d516117cf565b5101529594505050506125da565b906126bf908481013560e81c906003016126b861269f6126978484611744565b838a8a6124c8565b919060406126ae888d516117cf565b51019236916104d3565b9052611744565b906125cf565b908381013590602001919060206126dd8389516117cf565b5101526125c4565b61270292508481013560601c90601401929061259d8389516117cf565b6125b9565b6020908116036127295761ffff918381013560f01c906002015b921692612551565b60ff918381013560f81c90600101612721565b612780919385929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290608087015238612541565b80850135606090811c90880152601401925061252b565b906127ae82612c84565b81810361283457509060017f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f8819201908160405160208101907f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e82528360408201526040815261281e606082610404565b51902055604080519182526020820192909252a1565b917f9b6514f40000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b61288060409295949395606083526060830190611908565b9460208201520152565b9261052596959260c09592855260208501526040840152606083015260808201528160a08201520190611104565b6105259392606092825260208201528160408201520190611104565b6128ea6105259492606083526060830190611908565b9260208201526040818403910152611104565b916000604082019384515190825b82811061291c575b50505050505050565b6129278188516117cf565b519361293660a0860151151590565b80612be8575b612ba8575060009360608101518015801580612b9f575b612b675784906129666080850151151590565b15612b21576129e09261298d855173ffffffffffffffffffffffffffffffffffffffff1690565b9115612b1b57505a905b611eae8b611e8260608d01516040890151908c8b604051998a967f4c4e814c0000000000000000000000000000000000000000000000000000000060208901526024880161288a565b15612a23575b506040805187815260208101839052600192917f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a91a15b0161290b565b60c001805115612ad2576001815114612a935751600214612a4457386129e6565b9493505050507fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b9250612a84612a78612d48565b604051938493846128b8565b0390a138808080808080612913565b50846108e3612aa0612d48565b6040519384937f7f6b0bb1000000000000000000000000000000000000000000000000000000008552600485016128d4565b509250600180937f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d612b13612b05612d48565b604051918291858c846128b8565b0390a1612a1d565b90612997565b8351612b5c93925073ffffffffffffffffffffffffffffffffffffffff1691602085015191600014612b6157505a905b604085015192612d24565b6129e0565b90612b51565b83886108e35a6040519384937f2139527400000000000000000000000000000000000000000000000000000000855260048501612868565b50815a10612953565b6040805188815260208101849052919550600192917f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b9181908101612b13565b50801561293c565b612c52612c7e612c10612c0a602085015115153090613163565b9361325e565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610404565b51902090565b60405160208101917f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8352604082015260408152612cc3606082610404565b5190205490565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e868352604082015260408152612d09606082610404565b51902054906bffffffffffffffffffffffff8260601c921690565b9160009391849360208451940192f190565b9160009291839260208351930191f490565b3d90604051916020818401016040528083526000602084013e565b60405190612d70826103e8565b60006020838281520152565b908160409103126101c557602060405191612d96836103e8565b805183520151602082015290565b60409073ffffffffffffffffffffffffffffffffffffffff61052594931681528160208201520190611104565b909491939291853560f81c60019093819087612deb612d63565b93604080891614806130c1575b612fc4575b505050600180861614612f9e5760028581161460208501526007600286901c1688820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101908096918196602016612e6d9060051c90565b612e7690611731565b8a820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101959098899a81612ec284612bf0565b988993612ece936124c8565b91612ed893613675565b9098612eec91600052602052604060002090565b90612eff91600052602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff16612f2891600052602052604060002090565b94815190868215159283612f93575b505081612f84575b50612f475750565b6040517fccbb534f000000000000000000000000000000000000000000000000000000008152815160048201526020909101516024820152604490fd5b90506020820151101538612f3f565b141591508638612f37565b86612fb99792949550612fb193986124c8565b939092613453565b919394909293929190565b8a81013560601c985060140192509087908a90849015612fe8575b50829150612dfd565b60038101955073ffffffffffffffffffffffffffffffffffffffff945081013560e81c9260409261306b9290916130369161302f9189906130298983611744565b926124c8565b36916104d3565b83519586809481937fccce3bc80000000000000000000000000000000000000000000000000000000083523060048401612da4565b0392165afa80156110765761308992600091613092575b5092611744565b86388981612fdf565b6130b4915060403d6040116130ba575b6130ac8183610404565b810190612d7c565b38613082565b503d6130a2565b5073ffffffffffffffffffffffffffffffffffffffff891615612df8565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e86835260408201526040815261311e606082610404565b51902055565b60405160208101917fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a120835260408201526040815261311e606082610404565b15613213576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a08152612c7e60c082610404565b469061316c565b805160209091019060005b8181106132325750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101613225565b61010081015160405161327981612c5260208201809561321a565b51902090613288815160ff1690565b60ff81168061330157505090612c7e6132a46040840151613f3e565b92612c5260806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b6001810361335f57505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46693810193845290810191909152606081019290925290612c7e8160808101612c52565b600281036133b557505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e460208201908152918101929092526060820192909252612c7e8160808101612c52565b600303613409575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46660208201908152918101929092526060820192909252612c7e8160808101612c52565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b90612880906040939695949660608452606084019161198c565b919492909260009560009560009560009560009561346f612350565b60028152937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9460005b8281106134c6575050505050505080511515806134b8575b612f475750565b5060208101518411156134b1565b600381019d50959b50939950919750929091906134ea908b9085013560e81c611744565b958a600084890361362e575089915b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c036135fe57509060016135338961353a9487896124c8565b908b612dd1565b9c939c9b929b9a919a99909a9b9d8e9d9e8f905b106135b85750928b8851146135af575b808b101561357d57508a60c08501528992959295949194939093613499565b7f37daf62b0000000000000000000000000000000000000000000000000000000060005260048b905260245260446000fd5b6000885261355e565b8d8f6108e36135c985858c8e6124c8565b9390926040519485947fb006aba000000000000000000000000000000000000000000000000000000000865260048601613439565b9798999a9160016136148b61361b94888a6124c8565b9086612dd1565b50929d919c909b929a9092918e8e61354e565b916134f9565b73ffffffffffffffffffffffffffffffffffffffff61052595936060938352166020820152816040820152019161198c565b908160209103126101c5575190565b9391909360009460009460005b818110613690575050505050565b8481013560f881901c9860019092019788979692909160fc1c988915613e74575060018914613e345760028914613c775760038914613c485760048914613bc75760068914613b275760058914613ad95760078914613a1257600889146139bc576009891461389357600a8914613730577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b90919293949596975060038916978815613882575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190810190816137a89187876124c8565b6040517f898bd921000000000000000000000000000000000000000000000000000000008152939184916137e0918a60048501611aae565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa918215611076576138239360009361384f575b5060ff909a168091019a61420a565b908015613849579061383d91600052602052604060002090565b955b9392919093613682565b5061383d565b60ff9193506138749060203d811161387b575b61386c8183610404565b810190613666565b9290613814565b503d613862565b8084013560f81c9850600101613745565b909192939495969750600389169788156139ab575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101908101908161390b9187876124c8565b6040517f13792a4a00000000000000000000000000000000000000000000000000000000815293918491613943918b600485016119cb565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa918215611076576139859360009361384f575060ff909a168091019a61420a565b9080156139a5579061399f91600052602052604060002090565b9561383f565b5061399f565b8084013560f81c98506001016138a8565b9850602087019750949593949293919290918201356139da866141b1565b81146139ea575b613985906141cb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506139e1565b975090919293949597600f16968715613ac7575b60206000613a38613aa59a9b86614079565b9c9092918a604051613a7b81612c528a82019485603c917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008252601c8201520190565b51902092604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa15611076576139859060ff6000519a16809101996140bc565b600189019883013560f81c9750613a26565b985060208701975094959394929391929091820135808514613aff575b61398590614172565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9850613af6565b989091929394959662ffffff9850613b49612627600c8416603f9060021c1690565b918215613bb3575b6003168015613ba2575b908190613b8690613b7e908781013560e81c906003019c168c01809c89896124c8565b90898b613675565b911115613b99575b906139859291614127565b99820199613b8e565b50600281019084013560f01c613b5b565b8482013560f81c9250600190910190613b51565b975097613c1d613c2a929394959697600f613c3293169085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b92908301809386866124c8565b908688613675565b9061399f92980198600052602052604060002090565b9850965093949293919290919080820135906020019680156139a5579061399f91600052602052604060002090565b90919293949596975060038916978815613e23575b8084013560601c99613ceb9160140190613cab9060021c600316612627565b9085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b90810190613d4f60208c613d0185858b8b6124c8565b919073ffffffffffffffffffffffffffffffffffffffff8c604051968795869485937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611aae565b0392165afa908115611076577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091613e05575b501603613dc157509060ff613985929916809101996140bc565b6108e3613dd28c93899389896124c8565b906040519485947fb2fed7ae00000000000000000000000000000000000000000000000000000000865260048601613634565b613e1d915060203d8111611bf057611be28183610404565b38613da7565b8381013560f81c9850600101613c8c565b98600f91929394959697985016968715613e63575b60148101976139859160ff9091169084013560601c6140bc565b8281013560f81c9750600101613e49565b98509091929394959698600f16978815613ec6575b5060206000613e9c613aa59a9b86614079565b9c90916040519384938c859094939260ff6060936080840197845216602083015260408201520152565b60018101995083013560f81c97506020613e89565b8015159081613ee8575090565b90507fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8541490565b805160209091019060005b818110613f285750505090565b8251845260209384019390920191600101613f1b565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0613f84613f6e83610481565b92613f7c6040519485610404565b808452610481565b0136602083013760005b83518110156140605780613fa4600192866117cf565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e0830152610100820152610100815261404c61012082610404565b51902061405982856117cf565b5201613f8e565b50909150604051612c7e81612c52602082018095613f10565b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff811161173f5791565b90604051907fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208301937f53657175656e6365207369676e65723a0a000000000000000000000000000000855260601b166031830152604582015260458152612c7e606582610404565b916040519160208301937f53657175656e6365206e657374656420636f6e6669673a0a0000000000000000855260388401526058830152607882015260788152612c7e609882610404565b60405160208101917f53657175656e636520737461746963206469676573743a0a00000000000000008352603882015260388152612c7e605882610404565b612c52612c7e612c10612c0a600060208601511515613163565b60405160208101917f53657175656e636520616e792061646472657373207375626469676573743a0a8352604082015260408152612c7e606082610404565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e63652073617069656e7420636f6e6669673a0a00000000000000865260601b166039840152604d830152606d820152606d8152612c7e608d8261040456fea2646970667358221220663e0e19a1f44876322f0807bffe0131225f2bf0bc3ca63984e33df77f73e01664736f6c634300081c0033", +} + +// WalletSimulatorABI is the input ABI used to generate the binding from. +// Deprecated: Use WalletSimulatorMetaData.ABI instead. +var WalletSimulatorABI = WalletSimulatorMetaData.ABI + +// WalletSimulatorBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use WalletSimulatorMetaData.Bin instead. +var WalletSimulatorBin = WalletSimulatorMetaData.Bin + +// DeployWalletSimulator deploys a new Ethereum contract, binding an instance of WalletSimulator to it. +func DeployWalletSimulator(auth *bind.TransactOpts, backend bind.ContractBackend, _entryPoint common.Address) (common.Address, *types.Transaction, *WalletSimulator, error) { + parsed, err := WalletSimulatorMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(WalletSimulatorBin), backend, _entryPoint) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &WalletSimulator{WalletSimulatorCaller: WalletSimulatorCaller{contract: contract}, WalletSimulatorTransactor: WalletSimulatorTransactor{contract: contract}, WalletSimulatorFilterer: WalletSimulatorFilterer{contract: contract}}, nil +} + +// WalletSimulator is an auto generated Go binding around an Ethereum contract. +type WalletSimulator struct { + WalletSimulatorCaller // Read-only binding to the contract + WalletSimulatorTransactor // Write-only binding to the contract + WalletSimulatorFilterer // Log filterer for contract events +} + +// WalletSimulatorCaller is an auto generated read-only Go binding around an Ethereum contract. +type WalletSimulatorCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// WalletSimulatorTransactor is an auto generated write-only Go binding around an Ethereum contract. +type WalletSimulatorTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// WalletSimulatorFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type WalletSimulatorFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// WalletSimulatorSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type WalletSimulatorSession struct { + Contract *WalletSimulator // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// WalletSimulatorCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type WalletSimulatorCallerSession struct { + Contract *WalletSimulatorCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// WalletSimulatorTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type WalletSimulatorTransactorSession struct { + Contract *WalletSimulatorTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// WalletSimulatorRaw is an auto generated low-level Go binding around an Ethereum contract. +type WalletSimulatorRaw struct { + Contract *WalletSimulator // Generic contract binding to access the raw methods on +} + +// WalletSimulatorCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type WalletSimulatorCallerRaw struct { + Contract *WalletSimulatorCaller // Generic read-only contract binding to access the raw methods on +} + +// WalletSimulatorTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type WalletSimulatorTransactorRaw struct { + Contract *WalletSimulatorTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewWalletSimulator creates a new instance of WalletSimulator, bound to a specific deployed contract. +func NewWalletSimulator(address common.Address, backend bind.ContractBackend) (*WalletSimulator, error) { + contract, err := bindWalletSimulator(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &WalletSimulator{WalletSimulatorCaller: WalletSimulatorCaller{contract: contract}, WalletSimulatorTransactor: WalletSimulatorTransactor{contract: contract}, WalletSimulatorFilterer: WalletSimulatorFilterer{contract: contract}}, nil +} + +// NewWalletSimulatorCaller creates a new read-only instance of WalletSimulator, bound to a specific deployed contract. +func NewWalletSimulatorCaller(address common.Address, caller bind.ContractCaller) (*WalletSimulatorCaller, error) { + contract, err := bindWalletSimulator(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &WalletSimulatorCaller{contract: contract}, nil +} + +// NewWalletSimulatorTransactor creates a new write-only instance of WalletSimulator, bound to a specific deployed contract. +func NewWalletSimulatorTransactor(address common.Address, transactor bind.ContractTransactor) (*WalletSimulatorTransactor, error) { + contract, err := bindWalletSimulator(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &WalletSimulatorTransactor{contract: contract}, nil +} + +// NewWalletSimulatorFilterer creates a new log filterer instance of WalletSimulator, bound to a specific deployed contract. +func NewWalletSimulatorFilterer(address common.Address, filterer bind.ContractFilterer) (*WalletSimulatorFilterer, error) { + contract, err := bindWalletSimulator(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &WalletSimulatorFilterer{contract: contract}, nil +} + +// bindWalletSimulator binds a generic wrapper to an already deployed contract. +func bindWalletSimulator(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := WalletSimulatorMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_WalletSimulator *WalletSimulatorRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _WalletSimulator.Contract.WalletSimulatorCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_WalletSimulator *WalletSimulatorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _WalletSimulator.Contract.WalletSimulatorTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_WalletSimulator *WalletSimulatorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _WalletSimulator.Contract.WalletSimulatorTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_WalletSimulator *WalletSimulatorCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _WalletSimulator.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_WalletSimulator *WalletSimulatorTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _WalletSimulator.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_WalletSimulator *WalletSimulatorTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _WalletSimulator.Contract.contract.Transact(opts, method, params...) +} + +// Entrypoint is a free data retrieval call binding the contract method 0xa65d69d4. +// +// Solidity: function entrypoint() view returns(address) +func (_WalletSimulator *WalletSimulatorCaller) Entrypoint(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _WalletSimulator.contract.Call(opts, &out, "entrypoint") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Entrypoint is a free data retrieval call binding the contract method 0xa65d69d4. +// +// Solidity: function entrypoint() view returns(address) +func (_WalletSimulator *WalletSimulatorSession) Entrypoint() (common.Address, error) { + return _WalletSimulator.Contract.Entrypoint(&_WalletSimulator.CallOpts) +} + +// Entrypoint is a free data retrieval call binding the contract method 0xa65d69d4. +// +// Solidity: function entrypoint() view returns(address) +func (_WalletSimulator *WalletSimulatorCallerSession) Entrypoint() (common.Address, error) { + return _WalletSimulator.Contract.Entrypoint(&_WalletSimulator.CallOpts) +} + +// GetImplementation is a free data retrieval call binding the contract method 0xaaf10f42. +// +// Solidity: function getImplementation() view returns(address) +func (_WalletSimulator *WalletSimulatorCaller) GetImplementation(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _WalletSimulator.contract.Call(opts, &out, "getImplementation") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetImplementation is a free data retrieval call binding the contract method 0xaaf10f42. +// +// Solidity: function getImplementation() view returns(address) +func (_WalletSimulator *WalletSimulatorSession) GetImplementation() (common.Address, error) { + return _WalletSimulator.Contract.GetImplementation(&_WalletSimulator.CallOpts) +} + +// GetImplementation is a free data retrieval call binding the contract method 0xaaf10f42. +// +// Solidity: function getImplementation() view returns(address) +func (_WalletSimulator *WalletSimulatorCallerSession) GetImplementation() (common.Address, error) { + return _WalletSimulator.Contract.GetImplementation(&_WalletSimulator.CallOpts) +} + +// GetStaticSignature is a free data retrieval call binding the contract method 0x92dcb3fc. +// +// Solidity: function getStaticSignature(bytes32 _hash) view returns(address, uint256) +func (_WalletSimulator *WalletSimulatorCaller) GetStaticSignature(opts *bind.CallOpts, _hash [32]byte) (common.Address, *big.Int, error) { + var out []interface{} + err := _WalletSimulator.contract.Call(opts, &out, "getStaticSignature", _hash) + + if err != nil { + return *new(common.Address), *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out1 := *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + + return out0, out1, err + +} + +// GetStaticSignature is a free data retrieval call binding the contract method 0x92dcb3fc. +// +// Solidity: function getStaticSignature(bytes32 _hash) view returns(address, uint256) +func (_WalletSimulator *WalletSimulatorSession) GetStaticSignature(_hash [32]byte) (common.Address, *big.Int, error) { + return _WalletSimulator.Contract.GetStaticSignature(&_WalletSimulator.CallOpts, _hash) +} + +// GetStaticSignature is a free data retrieval call binding the contract method 0x92dcb3fc. +// +// Solidity: function getStaticSignature(bytes32 _hash) view returns(address, uint256) +func (_WalletSimulator *WalletSimulatorCallerSession) GetStaticSignature(_hash [32]byte) (common.Address, *big.Int, error) { + return _WalletSimulator.Contract.GetStaticSignature(&_WalletSimulator.CallOpts, _hash) +} + +// ImageHash is a free data retrieval call binding the contract method 0x51605d80. +// +// Solidity: function imageHash() view returns(bytes32) +func (_WalletSimulator *WalletSimulatorCaller) ImageHash(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _WalletSimulator.contract.Call(opts, &out, "imageHash") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ImageHash is a free data retrieval call binding the contract method 0x51605d80. +// +// Solidity: function imageHash() view returns(bytes32) +func (_WalletSimulator *WalletSimulatorSession) ImageHash() ([32]byte, error) { + return _WalletSimulator.Contract.ImageHash(&_WalletSimulator.CallOpts) +} + +// ImageHash is a free data retrieval call binding the contract method 0x51605d80. +// +// Solidity: function imageHash() view returns(bytes32) +func (_WalletSimulator *WalletSimulatorCallerSession) ImageHash() ([32]byte, error) { + return _WalletSimulator.Contract.ImageHash(&_WalletSimulator.CallOpts) +} + +// IsValidSignature is a free data retrieval call binding the contract method 0x1626ba7e. +// +// Solidity: function isValidSignature(bytes32 _hash, bytes _signature) view returns(bytes4) +func (_WalletSimulator *WalletSimulatorCaller) IsValidSignature(opts *bind.CallOpts, _hash [32]byte, _signature []byte) ([4]byte, error) { + var out []interface{} + err := _WalletSimulator.contract.Call(opts, &out, "isValidSignature", _hash, _signature) + + if err != nil { + return *new([4]byte), err + } + + out0 := *abi.ConvertType(out[0], new([4]byte)).(*[4]byte) + + return out0, err + +} + +// IsValidSignature is a free data retrieval call binding the contract method 0x1626ba7e. +// +// Solidity: function isValidSignature(bytes32 _hash, bytes _signature) view returns(bytes4) +func (_WalletSimulator *WalletSimulatorSession) IsValidSignature(_hash [32]byte, _signature []byte) ([4]byte, error) { + return _WalletSimulator.Contract.IsValidSignature(&_WalletSimulator.CallOpts, _hash, _signature) +} + +// IsValidSignature is a free data retrieval call binding the contract method 0x1626ba7e. +// +// Solidity: function isValidSignature(bytes32 _hash, bytes _signature) view returns(bytes4) +func (_WalletSimulator *WalletSimulatorCallerSession) IsValidSignature(_hash [32]byte, _signature []byte) ([4]byte, error) { + return _WalletSimulator.Contract.IsValidSignature(&_WalletSimulator.CallOpts, _hash, _signature) +} + +// OnERC1155BatchReceived is a free data retrieval call binding the contract method 0xbc197c81. +// +// Solidity: function onERC1155BatchReceived(address , address , uint256[] , uint256[] , bytes ) pure returns(bytes4) +func (_WalletSimulator *WalletSimulatorCaller) OnERC1155BatchReceived(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address, arg2 []*big.Int, arg3 []*big.Int, arg4 []byte) ([4]byte, error) { + var out []interface{} + err := _WalletSimulator.contract.Call(opts, &out, "onERC1155BatchReceived", arg0, arg1, arg2, arg3, arg4) + + if err != nil { + return *new([4]byte), err + } + + out0 := *abi.ConvertType(out[0], new([4]byte)).(*[4]byte) + + return out0, err + +} + +// OnERC1155BatchReceived is a free data retrieval call binding the contract method 0xbc197c81. +// +// Solidity: function onERC1155BatchReceived(address , address , uint256[] , uint256[] , bytes ) pure returns(bytes4) +func (_WalletSimulator *WalletSimulatorSession) OnERC1155BatchReceived(arg0 common.Address, arg1 common.Address, arg2 []*big.Int, arg3 []*big.Int, arg4 []byte) ([4]byte, error) { + return _WalletSimulator.Contract.OnERC1155BatchReceived(&_WalletSimulator.CallOpts, arg0, arg1, arg2, arg3, arg4) +} + +// OnERC1155BatchReceived is a free data retrieval call binding the contract method 0xbc197c81. +// +// Solidity: function onERC1155BatchReceived(address , address , uint256[] , uint256[] , bytes ) pure returns(bytes4) +func (_WalletSimulator *WalletSimulatorCallerSession) OnERC1155BatchReceived(arg0 common.Address, arg1 common.Address, arg2 []*big.Int, arg3 []*big.Int, arg4 []byte) ([4]byte, error) { + return _WalletSimulator.Contract.OnERC1155BatchReceived(&_WalletSimulator.CallOpts, arg0, arg1, arg2, arg3, arg4) +} + +// OnERC1155Received is a free data retrieval call binding the contract method 0xf23a6e61. +// +// Solidity: function onERC1155Received(address , address , uint256 , uint256 , bytes ) pure returns(bytes4) +func (_WalletSimulator *WalletSimulatorCaller) OnERC1155Received(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address, arg2 *big.Int, arg3 *big.Int, arg4 []byte) ([4]byte, error) { + var out []interface{} + err := _WalletSimulator.contract.Call(opts, &out, "onERC1155Received", arg0, arg1, arg2, arg3, arg4) + + if err != nil { + return *new([4]byte), err + } + + out0 := *abi.ConvertType(out[0], new([4]byte)).(*[4]byte) + + return out0, err + +} + +// OnERC1155Received is a free data retrieval call binding the contract method 0xf23a6e61. +// +// Solidity: function onERC1155Received(address , address , uint256 , uint256 , bytes ) pure returns(bytes4) +func (_WalletSimulator *WalletSimulatorSession) OnERC1155Received(arg0 common.Address, arg1 common.Address, arg2 *big.Int, arg3 *big.Int, arg4 []byte) ([4]byte, error) { + return _WalletSimulator.Contract.OnERC1155Received(&_WalletSimulator.CallOpts, arg0, arg1, arg2, arg3, arg4) +} + +// OnERC1155Received is a free data retrieval call binding the contract method 0xf23a6e61. +// +// Solidity: function onERC1155Received(address , address , uint256 , uint256 , bytes ) pure returns(bytes4) +func (_WalletSimulator *WalletSimulatorCallerSession) OnERC1155Received(arg0 common.Address, arg1 common.Address, arg2 *big.Int, arg3 *big.Int, arg4 []byte) ([4]byte, error) { + return _WalletSimulator.Contract.OnERC1155Received(&_WalletSimulator.CallOpts, arg0, arg1, arg2, arg3, arg4) +} + +// OnERC721Received is a free data retrieval call binding the contract method 0x150b7a02. +// +// Solidity: function onERC721Received(address , address , uint256 , bytes ) pure returns(bytes4) +func (_WalletSimulator *WalletSimulatorCaller) OnERC721Received(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address, arg2 *big.Int, arg3 []byte) ([4]byte, error) { + var out []interface{} + err := _WalletSimulator.contract.Call(opts, &out, "onERC721Received", arg0, arg1, arg2, arg3) + + if err != nil { + return *new([4]byte), err + } + + out0 := *abi.ConvertType(out[0], new([4]byte)).(*[4]byte) + + return out0, err + +} + +// OnERC721Received is a free data retrieval call binding the contract method 0x150b7a02. +// +// Solidity: function onERC721Received(address , address , uint256 , bytes ) pure returns(bytes4) +func (_WalletSimulator *WalletSimulatorSession) OnERC721Received(arg0 common.Address, arg1 common.Address, arg2 *big.Int, arg3 []byte) ([4]byte, error) { + return _WalletSimulator.Contract.OnERC721Received(&_WalletSimulator.CallOpts, arg0, arg1, arg2, arg3) +} + +// OnERC721Received is a free data retrieval call binding the contract method 0x150b7a02. +// +// Solidity: function onERC721Received(address , address , uint256 , bytes ) pure returns(bytes4) +func (_WalletSimulator *WalletSimulatorCallerSession) OnERC721Received(arg0 common.Address, arg1 common.Address, arg2 *big.Int, arg3 []byte) ([4]byte, error) { + return _WalletSimulator.Contract.OnERC721Received(&_WalletSimulator.CallOpts, arg0, arg1, arg2, arg3) +} + +// ReadHook is a free data retrieval call binding the contract method 0x1a9b2337. +// +// Solidity: function readHook(bytes4 selector) view returns(address) +func (_WalletSimulator *WalletSimulatorCaller) ReadHook(opts *bind.CallOpts, selector [4]byte) (common.Address, error) { + var out []interface{} + err := _WalletSimulator.contract.Call(opts, &out, "readHook", selector) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// ReadHook is a free data retrieval call binding the contract method 0x1a9b2337. +// +// Solidity: function readHook(bytes4 selector) view returns(address) +func (_WalletSimulator *WalletSimulatorSession) ReadHook(selector [4]byte) (common.Address, error) { + return _WalletSimulator.Contract.ReadHook(&_WalletSimulator.CallOpts, selector) +} + +// ReadHook is a free data retrieval call binding the contract method 0x1a9b2337. +// +// Solidity: function readHook(bytes4 selector) view returns(address) +func (_WalletSimulator *WalletSimulatorCallerSession) ReadHook(selector [4]byte) (common.Address, error) { + return _WalletSimulator.Contract.ReadHook(&_WalletSimulator.CallOpts, selector) +} + +// ReadNonce is a free data retrieval call binding the contract method 0x8c3f5563. +// +// Solidity: function readNonce(uint256 _space) view returns(uint256) +func (_WalletSimulator *WalletSimulatorCaller) ReadNonce(opts *bind.CallOpts, _space *big.Int) (*big.Int, error) { + var out []interface{} + err := _WalletSimulator.contract.Call(opts, &out, "readNonce", _space) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// ReadNonce is a free data retrieval call binding the contract method 0x8c3f5563. +// +// Solidity: function readNonce(uint256 _space) view returns(uint256) +func (_WalletSimulator *WalletSimulatorSession) ReadNonce(_space *big.Int) (*big.Int, error) { + return _WalletSimulator.Contract.ReadNonce(&_WalletSimulator.CallOpts, _space) +} + +// ReadNonce is a free data retrieval call binding the contract method 0x8c3f5563. +// +// Solidity: function readNonce(uint256 _space) view returns(uint256) +func (_WalletSimulator *WalletSimulatorCallerSession) ReadNonce(_space *big.Int) (*big.Int, error) { + return _WalletSimulator.Contract.ReadNonce(&_WalletSimulator.CallOpts, _space) +} + +// RecoverPartialSignature is a free data retrieval call binding the contract method 0xad55366b. +// +// Solidity: function recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]) _payload, bytes _signature) view returns(uint256 threshold, uint256 weight, bool isValidImage, bytes32 imageHash, uint256 checkpoint, bytes32 opHash) +func (_WalletSimulator *WalletSimulatorCaller) RecoverPartialSignature(opts *bind.CallOpts, _payload PayloadDecoded, _signature []byte) (struct { + Threshold *big.Int + Weight *big.Int + IsValidImage bool + ImageHash [32]byte + Checkpoint *big.Int + OpHash [32]byte +}, error) { + var out []interface{} + err := _WalletSimulator.contract.Call(opts, &out, "recoverPartialSignature", _payload, _signature) + + outstruct := new(struct { + Threshold *big.Int + Weight *big.Int + IsValidImage bool + ImageHash [32]byte + Checkpoint *big.Int + OpHash [32]byte + }) + if err != nil { + return *outstruct, err + } + + outstruct.Threshold = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.Weight = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + outstruct.IsValidImage = *abi.ConvertType(out[2], new(bool)).(*bool) + outstruct.ImageHash = *abi.ConvertType(out[3], new([32]byte)).(*[32]byte) + outstruct.Checkpoint = *abi.ConvertType(out[4], new(*big.Int)).(**big.Int) + outstruct.OpHash = *abi.ConvertType(out[5], new([32]byte)).(*[32]byte) + + return *outstruct, err + +} + +// RecoverPartialSignature is a free data retrieval call binding the contract method 0xad55366b. +// +// Solidity: function recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]) _payload, bytes _signature) view returns(uint256 threshold, uint256 weight, bool isValidImage, bytes32 imageHash, uint256 checkpoint, bytes32 opHash) +func (_WalletSimulator *WalletSimulatorSession) RecoverPartialSignature(_payload PayloadDecoded, _signature []byte) (struct { + Threshold *big.Int + Weight *big.Int + IsValidImage bool + ImageHash [32]byte + Checkpoint *big.Int + OpHash [32]byte +}, error) { + return _WalletSimulator.Contract.RecoverPartialSignature(&_WalletSimulator.CallOpts, _payload, _signature) +} + +// RecoverPartialSignature is a free data retrieval call binding the contract method 0xad55366b. +// +// Solidity: function recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]) _payload, bytes _signature) view returns(uint256 threshold, uint256 weight, bool isValidImage, bytes32 imageHash, uint256 checkpoint, bytes32 opHash) +func (_WalletSimulator *WalletSimulatorCallerSession) RecoverPartialSignature(_payload PayloadDecoded, _signature []byte) (struct { + Threshold *big.Int + Weight *big.Int + IsValidImage bool + ImageHash [32]byte + Checkpoint *big.Int + OpHash [32]byte +}, error) { + return _WalletSimulator.Contract.RecoverPartialSignature(&_WalletSimulator.CallOpts, _payload, _signature) +} + +// RecoverSapientSignature is a free data retrieval call binding the contract method 0x13792a4a. +// +// Solidity: function recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]) _payload, bytes _signature) view returns(bytes32) +func (_WalletSimulator *WalletSimulatorCaller) RecoverSapientSignature(opts *bind.CallOpts, _payload PayloadDecoded, _signature []byte) ([32]byte, error) { + var out []interface{} + err := _WalletSimulator.contract.Call(opts, &out, "recoverSapientSignature", _payload, _signature) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// RecoverSapientSignature is a free data retrieval call binding the contract method 0x13792a4a. +// +// Solidity: function recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]) _payload, bytes _signature) view returns(bytes32) +func (_WalletSimulator *WalletSimulatorSession) RecoverSapientSignature(_payload PayloadDecoded, _signature []byte) ([32]byte, error) { + return _WalletSimulator.Contract.RecoverSapientSignature(&_WalletSimulator.CallOpts, _payload, _signature) +} + +// RecoverSapientSignature is a free data retrieval call binding the contract method 0x13792a4a. +// +// Solidity: function recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]) _payload, bytes _signature) view returns(bytes32) +func (_WalletSimulator *WalletSimulatorCallerSession) RecoverSapientSignature(_payload PayloadDecoded, _signature []byte) ([32]byte, error) { + return _WalletSimulator.Contract.RecoverSapientSignature(&_WalletSimulator.CallOpts, _payload, _signature) +} + +// TokenReceived is a free data retrieval call binding the contract method 0x8943ec02. +// +// Solidity: function tokenReceived(address , uint256 , bytes ) pure returns(bytes4) +func (_WalletSimulator *WalletSimulatorCaller) TokenReceived(opts *bind.CallOpts, arg0 common.Address, arg1 *big.Int, arg2 []byte) ([4]byte, error) { + var out []interface{} + err := _WalletSimulator.contract.Call(opts, &out, "tokenReceived", arg0, arg1, arg2) + + if err != nil { + return *new([4]byte), err + } + + out0 := *abi.ConvertType(out[0], new([4]byte)).(*[4]byte) + + return out0, err + +} + +// TokenReceived is a free data retrieval call binding the contract method 0x8943ec02. +// +// Solidity: function tokenReceived(address , uint256 , bytes ) pure returns(bytes4) +func (_WalletSimulator *WalletSimulatorSession) TokenReceived(arg0 common.Address, arg1 *big.Int, arg2 []byte) ([4]byte, error) { + return _WalletSimulator.Contract.TokenReceived(&_WalletSimulator.CallOpts, arg0, arg1, arg2) +} + +// TokenReceived is a free data retrieval call binding the contract method 0x8943ec02. +// +// Solidity: function tokenReceived(address , uint256 , bytes ) pure returns(bytes4) +func (_WalletSimulator *WalletSimulatorCallerSession) TokenReceived(arg0 common.Address, arg1 *big.Int, arg2 []byte) ([4]byte, error) { + return _WalletSimulator.Contract.TokenReceived(&_WalletSimulator.CallOpts, arg0, arg1, arg2) +} + +// AddHook is a paid mutator transaction binding the contract method 0xb93ea7ad. +// +// Solidity: function addHook(bytes4 selector, address implementation) payable returns() +func (_WalletSimulator *WalletSimulatorTransactor) AddHook(opts *bind.TransactOpts, selector [4]byte, implementation common.Address) (*types.Transaction, error) { + return _WalletSimulator.contract.Transact(opts, "addHook", selector, implementation) +} + +// AddHook is a paid mutator transaction binding the contract method 0xb93ea7ad. +// +// Solidity: function addHook(bytes4 selector, address implementation) payable returns() +func (_WalletSimulator *WalletSimulatorSession) AddHook(selector [4]byte, implementation common.Address) (*types.Transaction, error) { + return _WalletSimulator.Contract.AddHook(&_WalletSimulator.TransactOpts, selector, implementation) +} + +// AddHook is a paid mutator transaction binding the contract method 0xb93ea7ad. +// +// Solidity: function addHook(bytes4 selector, address implementation) payable returns() +func (_WalletSimulator *WalletSimulatorTransactorSession) AddHook(selector [4]byte, implementation common.Address) (*types.Transaction, error) { + return _WalletSimulator.Contract.AddHook(&_WalletSimulator.TransactOpts, selector, implementation) +} + +// Execute is a paid mutator transaction binding the contract method 0x1f6a1eb9. +// +// Solidity: function execute(bytes _payload, bytes _signature) payable returns() +func (_WalletSimulator *WalletSimulatorTransactor) Execute(opts *bind.TransactOpts, _payload []byte, _signature []byte) (*types.Transaction, error) { + return _WalletSimulator.contract.Transact(opts, "execute", _payload, _signature) +} + +// Execute is a paid mutator transaction binding the contract method 0x1f6a1eb9. +// +// Solidity: function execute(bytes _payload, bytes _signature) payable returns() +func (_WalletSimulator *WalletSimulatorSession) Execute(_payload []byte, _signature []byte) (*types.Transaction, error) { + return _WalletSimulator.Contract.Execute(&_WalletSimulator.TransactOpts, _payload, _signature) +} + +// Execute is a paid mutator transaction binding the contract method 0x1f6a1eb9. +// +// Solidity: function execute(bytes _payload, bytes _signature) payable returns() +func (_WalletSimulator *WalletSimulatorTransactorSession) Execute(_payload []byte, _signature []byte) (*types.Transaction, error) { + return _WalletSimulator.Contract.Execute(&_WalletSimulator.TransactOpts, _payload, _signature) +} + +// ExecuteUserOp is a paid mutator transaction binding the contract method 0x9c145aed. +// +// Solidity: function executeUserOp(bytes _payload) returns() +func (_WalletSimulator *WalletSimulatorTransactor) ExecuteUserOp(opts *bind.TransactOpts, _payload []byte) (*types.Transaction, error) { + return _WalletSimulator.contract.Transact(opts, "executeUserOp", _payload) +} + +// ExecuteUserOp is a paid mutator transaction binding the contract method 0x9c145aed. +// +// Solidity: function executeUserOp(bytes _payload) returns() +func (_WalletSimulator *WalletSimulatorSession) ExecuteUserOp(_payload []byte) (*types.Transaction, error) { + return _WalletSimulator.Contract.ExecuteUserOp(&_WalletSimulator.TransactOpts, _payload) +} + +// ExecuteUserOp is a paid mutator transaction binding the contract method 0x9c145aed. +// +// Solidity: function executeUserOp(bytes _payload) returns() +func (_WalletSimulator *WalletSimulatorTransactorSession) ExecuteUserOp(_payload []byte) (*types.Transaction, error) { + return _WalletSimulator.Contract.ExecuteUserOp(&_WalletSimulator.TransactOpts, _payload) +} + +// RemoveHook is a paid mutator transaction binding the contract method 0x4fcf3eca. +// +// Solidity: function removeHook(bytes4 selector) payable returns() +func (_WalletSimulator *WalletSimulatorTransactor) RemoveHook(opts *bind.TransactOpts, selector [4]byte) (*types.Transaction, error) { + return _WalletSimulator.contract.Transact(opts, "removeHook", selector) +} + +// RemoveHook is a paid mutator transaction binding the contract method 0x4fcf3eca. +// +// Solidity: function removeHook(bytes4 selector) payable returns() +func (_WalletSimulator *WalletSimulatorSession) RemoveHook(selector [4]byte) (*types.Transaction, error) { + return _WalletSimulator.Contract.RemoveHook(&_WalletSimulator.TransactOpts, selector) +} + +// RemoveHook is a paid mutator transaction binding the contract method 0x4fcf3eca. +// +// Solidity: function removeHook(bytes4 selector) payable returns() +func (_WalletSimulator *WalletSimulatorTransactorSession) RemoveHook(selector [4]byte) (*types.Transaction, error) { + return _WalletSimulator.Contract.RemoveHook(&_WalletSimulator.TransactOpts, selector) +} + +// SelfExecute is a paid mutator transaction binding the contract method 0x6ea44577. +// +// Solidity: function selfExecute(bytes _payload) payable returns() +func (_WalletSimulator *WalletSimulatorTransactor) SelfExecute(opts *bind.TransactOpts, _payload []byte) (*types.Transaction, error) { + return _WalletSimulator.contract.Transact(opts, "selfExecute", _payload) +} + +// SelfExecute is a paid mutator transaction binding the contract method 0x6ea44577. +// +// Solidity: function selfExecute(bytes _payload) payable returns() +func (_WalletSimulator *WalletSimulatorSession) SelfExecute(_payload []byte) (*types.Transaction, error) { + return _WalletSimulator.Contract.SelfExecute(&_WalletSimulator.TransactOpts, _payload) +} + +// SelfExecute is a paid mutator transaction binding the contract method 0x6ea44577. +// +// Solidity: function selfExecute(bytes _payload) payable returns() +func (_WalletSimulator *WalletSimulatorTransactorSession) SelfExecute(_payload []byte) (*types.Transaction, error) { + return _WalletSimulator.Contract.SelfExecute(&_WalletSimulator.TransactOpts, _payload) +} + +// SetStaticSignature is a paid mutator transaction binding the contract method 0xf727ef1c. +// +// Solidity: function setStaticSignature(bytes32 _hash, address _address, uint96 _timestamp) returns() +func (_WalletSimulator *WalletSimulatorTransactor) SetStaticSignature(opts *bind.TransactOpts, _hash [32]byte, _address common.Address, _timestamp *big.Int) (*types.Transaction, error) { + return _WalletSimulator.contract.Transact(opts, "setStaticSignature", _hash, _address, _timestamp) +} + +// SetStaticSignature is a paid mutator transaction binding the contract method 0xf727ef1c. +// +// Solidity: function setStaticSignature(bytes32 _hash, address _address, uint96 _timestamp) returns() +func (_WalletSimulator *WalletSimulatorSession) SetStaticSignature(_hash [32]byte, _address common.Address, _timestamp *big.Int) (*types.Transaction, error) { + return _WalletSimulator.Contract.SetStaticSignature(&_WalletSimulator.TransactOpts, _hash, _address, _timestamp) +} + +// SetStaticSignature is a paid mutator transaction binding the contract method 0xf727ef1c. +// +// Solidity: function setStaticSignature(bytes32 _hash, address _address, uint96 _timestamp) returns() +func (_WalletSimulator *WalletSimulatorTransactorSession) SetStaticSignature(_hash [32]byte, _address common.Address, _timestamp *big.Int) (*types.Transaction, error) { + return _WalletSimulator.Contract.SetStaticSignature(&_WalletSimulator.TransactOpts, _hash, _address, _timestamp) +} + +// Simulate is a paid mutator transaction binding the contract method 0xa27c3922. +// +// Solidity: function simulate((address,uint256,bytes,uint256,bool,bool,uint256)[] _calls) returns((uint8,bytes,uint256)[] results) +func (_WalletSimulator *WalletSimulatorTransactor) Simulate(opts *bind.TransactOpts, _calls []PayloadCall) (*types.Transaction, error) { + return _WalletSimulator.contract.Transact(opts, "simulate", _calls) +} + +// Simulate is a paid mutator transaction binding the contract method 0xa27c3922. +// +// Solidity: function simulate((address,uint256,bytes,uint256,bool,bool,uint256)[] _calls) returns((uint8,bytes,uint256)[] results) +func (_WalletSimulator *WalletSimulatorSession) Simulate(_calls []PayloadCall) (*types.Transaction, error) { + return _WalletSimulator.Contract.Simulate(&_WalletSimulator.TransactOpts, _calls) +} + +// Simulate is a paid mutator transaction binding the contract method 0xa27c3922. +// +// Solidity: function simulate((address,uint256,bytes,uint256,bool,bool,uint256)[] _calls) returns((uint8,bytes,uint256)[] results) +func (_WalletSimulator *WalletSimulatorTransactorSession) Simulate(_calls []PayloadCall) (*types.Transaction, error) { + return _WalletSimulator.Contract.Simulate(&_WalletSimulator.TransactOpts, _calls) +} + +// TokensReceived is a paid mutator transaction binding the contract method 0x0023de29. +// +// Solidity: function tokensReceived(address operator, address from, address to, uint256 amount, bytes data, bytes operatorData) returns() +func (_WalletSimulator *WalletSimulatorTransactor) TokensReceived(opts *bind.TransactOpts, operator common.Address, from common.Address, to common.Address, amount *big.Int, data []byte, operatorData []byte) (*types.Transaction, error) { + return _WalletSimulator.contract.Transact(opts, "tokensReceived", operator, from, to, amount, data, operatorData) +} + +// TokensReceived is a paid mutator transaction binding the contract method 0x0023de29. +// +// Solidity: function tokensReceived(address operator, address from, address to, uint256 amount, bytes data, bytes operatorData) returns() +func (_WalletSimulator *WalletSimulatorSession) TokensReceived(operator common.Address, from common.Address, to common.Address, amount *big.Int, data []byte, operatorData []byte) (*types.Transaction, error) { + return _WalletSimulator.Contract.TokensReceived(&_WalletSimulator.TransactOpts, operator, from, to, amount, data, operatorData) +} + +// TokensReceived is a paid mutator transaction binding the contract method 0x0023de29. +// +// Solidity: function tokensReceived(address operator, address from, address to, uint256 amount, bytes data, bytes operatorData) returns() +func (_WalletSimulator *WalletSimulatorTransactorSession) TokensReceived(operator common.Address, from common.Address, to common.Address, amount *big.Int, data []byte, operatorData []byte) (*types.Transaction, error) { + return _WalletSimulator.Contract.TokensReceived(&_WalletSimulator.TransactOpts, operator, from, to, amount, data, operatorData) +} + +// UpdateImageHash is a paid mutator transaction binding the contract method 0x29561426. +// +// Solidity: function updateImageHash(bytes32 _imageHash) returns() +func (_WalletSimulator *WalletSimulatorTransactor) UpdateImageHash(opts *bind.TransactOpts, _imageHash [32]byte) (*types.Transaction, error) { + return _WalletSimulator.contract.Transact(opts, "updateImageHash", _imageHash) +} + +// UpdateImageHash is a paid mutator transaction binding the contract method 0x29561426. +// +// Solidity: function updateImageHash(bytes32 _imageHash) returns() +func (_WalletSimulator *WalletSimulatorSession) UpdateImageHash(_imageHash [32]byte) (*types.Transaction, error) { + return _WalletSimulator.Contract.UpdateImageHash(&_WalletSimulator.TransactOpts, _imageHash) +} + +// UpdateImageHash is a paid mutator transaction binding the contract method 0x29561426. +// +// Solidity: function updateImageHash(bytes32 _imageHash) returns() +func (_WalletSimulator *WalletSimulatorTransactorSession) UpdateImageHash(_imageHash [32]byte) (*types.Transaction, error) { + return _WalletSimulator.Contract.UpdateImageHash(&_WalletSimulator.TransactOpts, _imageHash) +} + +// UpdateImplementation is a paid mutator transaction binding the contract method 0x025b22bc. +// +// Solidity: function updateImplementation(address _implementation) payable returns() +func (_WalletSimulator *WalletSimulatorTransactor) UpdateImplementation(opts *bind.TransactOpts, _implementation common.Address) (*types.Transaction, error) { + return _WalletSimulator.contract.Transact(opts, "updateImplementation", _implementation) +} + +// UpdateImplementation is a paid mutator transaction binding the contract method 0x025b22bc. +// +// Solidity: function updateImplementation(address _implementation) payable returns() +func (_WalletSimulator *WalletSimulatorSession) UpdateImplementation(_implementation common.Address) (*types.Transaction, error) { + return _WalletSimulator.Contract.UpdateImplementation(&_WalletSimulator.TransactOpts, _implementation) +} + +// UpdateImplementation is a paid mutator transaction binding the contract method 0x025b22bc. +// +// Solidity: function updateImplementation(address _implementation) payable returns() +func (_WalletSimulator *WalletSimulatorTransactorSession) UpdateImplementation(_implementation common.Address) (*types.Transaction, error) { + return _WalletSimulator.Contract.UpdateImplementation(&_WalletSimulator.TransactOpts, _implementation) +} + +// ValidateUserOp is a paid mutator transaction binding the contract method 0x19822f7c. +// +// Solidity: function validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes) userOp, bytes32 userOpHash, uint256 missingAccountFunds) returns(uint256 validationData) +func (_WalletSimulator *WalletSimulatorTransactor) ValidateUserOp(opts *bind.TransactOpts, userOp PackedUserOperation, userOpHash [32]byte, missingAccountFunds *big.Int) (*types.Transaction, error) { + return _WalletSimulator.contract.Transact(opts, "validateUserOp", userOp, userOpHash, missingAccountFunds) +} + +// ValidateUserOp is a paid mutator transaction binding the contract method 0x19822f7c. +// +// Solidity: function validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes) userOp, bytes32 userOpHash, uint256 missingAccountFunds) returns(uint256 validationData) +func (_WalletSimulator *WalletSimulatorSession) ValidateUserOp(userOp PackedUserOperation, userOpHash [32]byte, missingAccountFunds *big.Int) (*types.Transaction, error) { + return _WalletSimulator.Contract.ValidateUserOp(&_WalletSimulator.TransactOpts, userOp, userOpHash, missingAccountFunds) +} + +// ValidateUserOp is a paid mutator transaction binding the contract method 0x19822f7c. +// +// Solidity: function validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes) userOp, bytes32 userOpHash, uint256 missingAccountFunds) returns(uint256 validationData) +func (_WalletSimulator *WalletSimulatorTransactorSession) ValidateUserOp(userOp PackedUserOperation, userOpHash [32]byte, missingAccountFunds *big.Int) (*types.Transaction, error) { + return _WalletSimulator.Contract.ValidateUserOp(&_WalletSimulator.TransactOpts, userOp, userOpHash, missingAccountFunds) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_WalletSimulator *WalletSimulatorTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) { + return _WalletSimulator.contract.RawTransact(opts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_WalletSimulator *WalletSimulatorSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _WalletSimulator.Contract.Fallback(&_WalletSimulator.TransactOpts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_WalletSimulator *WalletSimulatorTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _WalletSimulator.Contract.Fallback(&_WalletSimulator.TransactOpts, calldata) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_WalletSimulator *WalletSimulatorTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _WalletSimulator.contract.RawTransact(opts, nil) // calldata is disallowed for receive function +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_WalletSimulator *WalletSimulatorSession) Receive() (*types.Transaction, error) { + return _WalletSimulator.Contract.Receive(&_WalletSimulator.TransactOpts) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_WalletSimulator *WalletSimulatorTransactorSession) Receive() (*types.Transaction, error) { + return _WalletSimulator.Contract.Receive(&_WalletSimulator.TransactOpts) +} + +// WalletSimulatorCallAbortedIterator is returned from FilterCallAborted and is used to iterate over the raw logs and unpacked data for CallAborted events raised by the WalletSimulator contract. +type WalletSimulatorCallAbortedIterator struct { + Event *WalletSimulatorCallAborted // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WalletSimulatorCallAbortedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WalletSimulatorCallAborted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WalletSimulatorCallAborted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WalletSimulatorCallAbortedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WalletSimulatorCallAbortedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WalletSimulatorCallAborted represents a CallAborted event raised by the WalletSimulator contract. +type WalletSimulatorCallAborted struct { + OpHash [32]byte + Index *big.Int + ReturnData []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterCallAborted is a free log retrieval operation binding the contract event 0xc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b. +// +// Solidity: event CallAborted(bytes32 _opHash, uint256 _index, bytes _returnData) +func (_WalletSimulator *WalletSimulatorFilterer) FilterCallAborted(opts *bind.FilterOpts) (*WalletSimulatorCallAbortedIterator, error) { + + logs, sub, err := _WalletSimulator.contract.FilterLogs(opts, "CallAborted") + if err != nil { + return nil, err + } + return &WalletSimulatorCallAbortedIterator{contract: _WalletSimulator.contract, event: "CallAborted", logs: logs, sub: sub}, nil +} + +// WatchCallAborted is a free log subscription operation binding the contract event 0xc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b. +// +// Solidity: event CallAborted(bytes32 _opHash, uint256 _index, bytes _returnData) +func (_WalletSimulator *WalletSimulatorFilterer) WatchCallAborted(opts *bind.WatchOpts, sink chan<- *WalletSimulatorCallAborted) (event.Subscription, error) { + + logs, sub, err := _WalletSimulator.contract.WatchLogs(opts, "CallAborted") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WalletSimulatorCallAborted) + if err := _WalletSimulator.contract.UnpackLog(event, "CallAborted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseCallAborted is a log parse operation binding the contract event 0xc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b. +// +// Solidity: event CallAborted(bytes32 _opHash, uint256 _index, bytes _returnData) +func (_WalletSimulator *WalletSimulatorFilterer) ParseCallAborted(log types.Log) (*WalletSimulatorCallAborted, error) { + event := new(WalletSimulatorCallAborted) + if err := _WalletSimulator.contract.UnpackLog(event, "CallAborted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WalletSimulatorCallFailedIterator is returned from FilterCallFailed and is used to iterate over the raw logs and unpacked data for CallFailed events raised by the WalletSimulator contract. +type WalletSimulatorCallFailedIterator struct { + Event *WalletSimulatorCallFailed // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WalletSimulatorCallFailedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WalletSimulatorCallFailed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WalletSimulatorCallFailed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WalletSimulatorCallFailedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WalletSimulatorCallFailedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WalletSimulatorCallFailed represents a CallFailed event raised by the WalletSimulator contract. +type WalletSimulatorCallFailed struct { + OpHash [32]byte + Index *big.Int + ReturnData []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterCallFailed is a free log retrieval operation binding the contract event 0x115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d. +// +// Solidity: event CallFailed(bytes32 _opHash, uint256 _index, bytes _returnData) +func (_WalletSimulator *WalletSimulatorFilterer) FilterCallFailed(opts *bind.FilterOpts) (*WalletSimulatorCallFailedIterator, error) { + + logs, sub, err := _WalletSimulator.contract.FilterLogs(opts, "CallFailed") + if err != nil { + return nil, err + } + return &WalletSimulatorCallFailedIterator{contract: _WalletSimulator.contract, event: "CallFailed", logs: logs, sub: sub}, nil +} + +// WatchCallFailed is a free log subscription operation binding the contract event 0x115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d. +// +// Solidity: event CallFailed(bytes32 _opHash, uint256 _index, bytes _returnData) +func (_WalletSimulator *WalletSimulatorFilterer) WatchCallFailed(opts *bind.WatchOpts, sink chan<- *WalletSimulatorCallFailed) (event.Subscription, error) { + + logs, sub, err := _WalletSimulator.contract.WatchLogs(opts, "CallFailed") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WalletSimulatorCallFailed) + if err := _WalletSimulator.contract.UnpackLog(event, "CallFailed", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseCallFailed is a log parse operation binding the contract event 0x115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d. +// +// Solidity: event CallFailed(bytes32 _opHash, uint256 _index, bytes _returnData) +func (_WalletSimulator *WalletSimulatorFilterer) ParseCallFailed(log types.Log) (*WalletSimulatorCallFailed, error) { + event := new(WalletSimulatorCallFailed) + if err := _WalletSimulator.contract.UnpackLog(event, "CallFailed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WalletSimulatorCallSkippedIterator is returned from FilterCallSkipped and is used to iterate over the raw logs and unpacked data for CallSkipped events raised by the WalletSimulator contract. +type WalletSimulatorCallSkippedIterator struct { + Event *WalletSimulatorCallSkipped // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WalletSimulatorCallSkippedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WalletSimulatorCallSkipped) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WalletSimulatorCallSkipped) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WalletSimulatorCallSkippedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WalletSimulatorCallSkippedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WalletSimulatorCallSkipped represents a CallSkipped event raised by the WalletSimulator contract. +type WalletSimulatorCallSkipped struct { + OpHash [32]byte + Index *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterCallSkipped is a free log retrieval operation binding the contract event 0x9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b. +// +// Solidity: event CallSkipped(bytes32 _opHash, uint256 _index) +func (_WalletSimulator *WalletSimulatorFilterer) FilterCallSkipped(opts *bind.FilterOpts) (*WalletSimulatorCallSkippedIterator, error) { + + logs, sub, err := _WalletSimulator.contract.FilterLogs(opts, "CallSkipped") + if err != nil { + return nil, err + } + return &WalletSimulatorCallSkippedIterator{contract: _WalletSimulator.contract, event: "CallSkipped", logs: logs, sub: sub}, nil +} + +// WatchCallSkipped is a free log subscription operation binding the contract event 0x9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b. +// +// Solidity: event CallSkipped(bytes32 _opHash, uint256 _index) +func (_WalletSimulator *WalletSimulatorFilterer) WatchCallSkipped(opts *bind.WatchOpts, sink chan<- *WalletSimulatorCallSkipped) (event.Subscription, error) { + + logs, sub, err := _WalletSimulator.contract.WatchLogs(opts, "CallSkipped") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WalletSimulatorCallSkipped) + if err := _WalletSimulator.contract.UnpackLog(event, "CallSkipped", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseCallSkipped is a log parse operation binding the contract event 0x9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b. +// +// Solidity: event CallSkipped(bytes32 _opHash, uint256 _index) +func (_WalletSimulator *WalletSimulatorFilterer) ParseCallSkipped(log types.Log) (*WalletSimulatorCallSkipped, error) { + event := new(WalletSimulatorCallSkipped) + if err := _WalletSimulator.contract.UnpackLog(event, "CallSkipped", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WalletSimulatorCallSucceededIterator is returned from FilterCallSucceeded and is used to iterate over the raw logs and unpacked data for CallSucceeded events raised by the WalletSimulator contract. +type WalletSimulatorCallSucceededIterator struct { + Event *WalletSimulatorCallSucceeded // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WalletSimulatorCallSucceededIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WalletSimulatorCallSucceeded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WalletSimulatorCallSucceeded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WalletSimulatorCallSucceededIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WalletSimulatorCallSucceededIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WalletSimulatorCallSucceeded represents a CallSucceeded event raised by the WalletSimulator contract. +type WalletSimulatorCallSucceeded struct { + OpHash [32]byte + Index *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterCallSucceeded is a free log retrieval operation binding the contract event 0x5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a. +// +// Solidity: event CallSucceeded(bytes32 _opHash, uint256 _index) +func (_WalletSimulator *WalletSimulatorFilterer) FilterCallSucceeded(opts *bind.FilterOpts) (*WalletSimulatorCallSucceededIterator, error) { + + logs, sub, err := _WalletSimulator.contract.FilterLogs(opts, "CallSucceeded") + if err != nil { + return nil, err + } + return &WalletSimulatorCallSucceededIterator{contract: _WalletSimulator.contract, event: "CallSucceeded", logs: logs, sub: sub}, nil +} + +// WatchCallSucceeded is a free log subscription operation binding the contract event 0x5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a. +// +// Solidity: event CallSucceeded(bytes32 _opHash, uint256 _index) +func (_WalletSimulator *WalletSimulatorFilterer) WatchCallSucceeded(opts *bind.WatchOpts, sink chan<- *WalletSimulatorCallSucceeded) (event.Subscription, error) { + + logs, sub, err := _WalletSimulator.contract.WatchLogs(opts, "CallSucceeded") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WalletSimulatorCallSucceeded) + if err := _WalletSimulator.contract.UnpackLog(event, "CallSucceeded", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseCallSucceeded is a log parse operation binding the contract event 0x5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a. +// +// Solidity: event CallSucceeded(bytes32 _opHash, uint256 _index) +func (_WalletSimulator *WalletSimulatorFilterer) ParseCallSucceeded(log types.Log) (*WalletSimulatorCallSucceeded, error) { + event := new(WalletSimulatorCallSucceeded) + if err := _WalletSimulator.contract.UnpackLog(event, "CallSucceeded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WalletSimulatorDefinedHookIterator is returned from FilterDefinedHook and is used to iterate over the raw logs and unpacked data for DefinedHook events raised by the WalletSimulator contract. +type WalletSimulatorDefinedHookIterator struct { + Event *WalletSimulatorDefinedHook // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WalletSimulatorDefinedHookIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WalletSimulatorDefinedHook) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WalletSimulatorDefinedHook) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WalletSimulatorDefinedHookIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WalletSimulatorDefinedHookIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WalletSimulatorDefinedHook represents a DefinedHook event raised by the WalletSimulator contract. +type WalletSimulatorDefinedHook struct { + Selector [4]byte + Implementation common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDefinedHook is a free log retrieval operation binding the contract event 0x0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed1. +// +// Solidity: event DefinedHook(bytes4 selector, address implementation) +func (_WalletSimulator *WalletSimulatorFilterer) FilterDefinedHook(opts *bind.FilterOpts) (*WalletSimulatorDefinedHookIterator, error) { + + logs, sub, err := _WalletSimulator.contract.FilterLogs(opts, "DefinedHook") + if err != nil { + return nil, err + } + return &WalletSimulatorDefinedHookIterator{contract: _WalletSimulator.contract, event: "DefinedHook", logs: logs, sub: sub}, nil +} + +// WatchDefinedHook is a free log subscription operation binding the contract event 0x0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed1. +// +// Solidity: event DefinedHook(bytes4 selector, address implementation) +func (_WalletSimulator *WalletSimulatorFilterer) WatchDefinedHook(opts *bind.WatchOpts, sink chan<- *WalletSimulatorDefinedHook) (event.Subscription, error) { + + logs, sub, err := _WalletSimulator.contract.WatchLogs(opts, "DefinedHook") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WalletSimulatorDefinedHook) + if err := _WalletSimulator.contract.UnpackLog(event, "DefinedHook", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseDefinedHook is a log parse operation binding the contract event 0x0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed1. +// +// Solidity: event DefinedHook(bytes4 selector, address implementation) +func (_WalletSimulator *WalletSimulatorFilterer) ParseDefinedHook(log types.Log) (*WalletSimulatorDefinedHook, error) { + event := new(WalletSimulatorDefinedHook) + if err := _WalletSimulator.contract.UnpackLog(event, "DefinedHook", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WalletSimulatorImageHashUpdatedIterator is returned from FilterImageHashUpdated and is used to iterate over the raw logs and unpacked data for ImageHashUpdated events raised by the WalletSimulator contract. +type WalletSimulatorImageHashUpdatedIterator struct { + Event *WalletSimulatorImageHashUpdated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WalletSimulatorImageHashUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WalletSimulatorImageHashUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WalletSimulatorImageHashUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WalletSimulatorImageHashUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WalletSimulatorImageHashUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WalletSimulatorImageHashUpdated represents a ImageHashUpdated event raised by the WalletSimulator contract. +type WalletSimulatorImageHashUpdated struct { + NewImageHash [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterImageHashUpdated is a free log retrieval operation binding the contract event 0x307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa. +// +// Solidity: event ImageHashUpdated(bytes32 newImageHash) +func (_WalletSimulator *WalletSimulatorFilterer) FilterImageHashUpdated(opts *bind.FilterOpts) (*WalletSimulatorImageHashUpdatedIterator, error) { + + logs, sub, err := _WalletSimulator.contract.FilterLogs(opts, "ImageHashUpdated") + if err != nil { + return nil, err + } + return &WalletSimulatorImageHashUpdatedIterator{contract: _WalletSimulator.contract, event: "ImageHashUpdated", logs: logs, sub: sub}, nil +} + +// WatchImageHashUpdated is a free log subscription operation binding the contract event 0x307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa. +// +// Solidity: event ImageHashUpdated(bytes32 newImageHash) +func (_WalletSimulator *WalletSimulatorFilterer) WatchImageHashUpdated(opts *bind.WatchOpts, sink chan<- *WalletSimulatorImageHashUpdated) (event.Subscription, error) { + + logs, sub, err := _WalletSimulator.contract.WatchLogs(opts, "ImageHashUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WalletSimulatorImageHashUpdated) + if err := _WalletSimulator.contract.UnpackLog(event, "ImageHashUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseImageHashUpdated is a log parse operation binding the contract event 0x307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa. +// +// Solidity: event ImageHashUpdated(bytes32 newImageHash) +func (_WalletSimulator *WalletSimulatorFilterer) ParseImageHashUpdated(log types.Log) (*WalletSimulatorImageHashUpdated, error) { + event := new(WalletSimulatorImageHashUpdated) + if err := _WalletSimulator.contract.UnpackLog(event, "ImageHashUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WalletSimulatorImplementationUpdatedIterator is returned from FilterImplementationUpdated and is used to iterate over the raw logs and unpacked data for ImplementationUpdated events raised by the WalletSimulator contract. +type WalletSimulatorImplementationUpdatedIterator struct { + Event *WalletSimulatorImplementationUpdated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WalletSimulatorImplementationUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WalletSimulatorImplementationUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WalletSimulatorImplementationUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WalletSimulatorImplementationUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WalletSimulatorImplementationUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WalletSimulatorImplementationUpdated represents a ImplementationUpdated event raised by the WalletSimulator contract. +type WalletSimulatorImplementationUpdated struct { + NewImplementation common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterImplementationUpdated is a free log retrieval operation binding the contract event 0x310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca03. +// +// Solidity: event ImplementationUpdated(address newImplementation) +func (_WalletSimulator *WalletSimulatorFilterer) FilterImplementationUpdated(opts *bind.FilterOpts) (*WalletSimulatorImplementationUpdatedIterator, error) { + + logs, sub, err := _WalletSimulator.contract.FilterLogs(opts, "ImplementationUpdated") + if err != nil { + return nil, err + } + return &WalletSimulatorImplementationUpdatedIterator{contract: _WalletSimulator.contract, event: "ImplementationUpdated", logs: logs, sub: sub}, nil +} + +// WatchImplementationUpdated is a free log subscription operation binding the contract event 0x310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca03. +// +// Solidity: event ImplementationUpdated(address newImplementation) +func (_WalletSimulator *WalletSimulatorFilterer) WatchImplementationUpdated(opts *bind.WatchOpts, sink chan<- *WalletSimulatorImplementationUpdated) (event.Subscription, error) { + + logs, sub, err := _WalletSimulator.contract.WatchLogs(opts, "ImplementationUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WalletSimulatorImplementationUpdated) + if err := _WalletSimulator.contract.UnpackLog(event, "ImplementationUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseImplementationUpdated is a log parse operation binding the contract event 0x310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca03. +// +// Solidity: event ImplementationUpdated(address newImplementation) +func (_WalletSimulator *WalletSimulatorFilterer) ParseImplementationUpdated(log types.Log) (*WalletSimulatorImplementationUpdated, error) { + event := new(WalletSimulatorImplementationUpdated) + if err := _WalletSimulator.contract.UnpackLog(event, "ImplementationUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WalletSimulatorNonceChangeIterator is returned from FilterNonceChange and is used to iterate over the raw logs and unpacked data for NonceChange events raised by the WalletSimulator contract. +type WalletSimulatorNonceChangeIterator struct { + Event *WalletSimulatorNonceChange // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WalletSimulatorNonceChangeIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WalletSimulatorNonceChange) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WalletSimulatorNonceChange) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WalletSimulatorNonceChangeIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WalletSimulatorNonceChangeIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WalletSimulatorNonceChange represents a NonceChange event raised by the WalletSimulator contract. +type WalletSimulatorNonceChange struct { + Space *big.Int + NewNonce *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterNonceChange is a free log retrieval operation binding the contract event 0x1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f881. +// +// Solidity: event NonceChange(uint256 _space, uint256 _newNonce) +func (_WalletSimulator *WalletSimulatorFilterer) FilterNonceChange(opts *bind.FilterOpts) (*WalletSimulatorNonceChangeIterator, error) { + + logs, sub, err := _WalletSimulator.contract.FilterLogs(opts, "NonceChange") + if err != nil { + return nil, err + } + return &WalletSimulatorNonceChangeIterator{contract: _WalletSimulator.contract, event: "NonceChange", logs: logs, sub: sub}, nil +} + +// WatchNonceChange is a free log subscription operation binding the contract event 0x1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f881. +// +// Solidity: event NonceChange(uint256 _space, uint256 _newNonce) +func (_WalletSimulator *WalletSimulatorFilterer) WatchNonceChange(opts *bind.WatchOpts, sink chan<- *WalletSimulatorNonceChange) (event.Subscription, error) { + + logs, sub, err := _WalletSimulator.contract.WatchLogs(opts, "NonceChange") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WalletSimulatorNonceChange) + if err := _WalletSimulator.contract.UnpackLog(event, "NonceChange", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseNonceChange is a log parse operation binding the contract event 0x1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f881. +// +// Solidity: event NonceChange(uint256 _space, uint256 _newNonce) +func (_WalletSimulator *WalletSimulatorFilterer) ParseNonceChange(log types.Log) (*WalletSimulatorNonceChange, error) { + event := new(WalletSimulatorNonceChange) + if err := _WalletSimulator.contract.UnpackLog(event, "NonceChange", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WalletSimulatorStaticSignatureSetIterator is returned from FilterStaticSignatureSet and is used to iterate over the raw logs and unpacked data for StaticSignatureSet events raised by the WalletSimulator contract. +type WalletSimulatorStaticSignatureSetIterator struct { + Event *WalletSimulatorStaticSignatureSet // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WalletSimulatorStaticSignatureSetIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WalletSimulatorStaticSignatureSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WalletSimulatorStaticSignatureSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WalletSimulatorStaticSignatureSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WalletSimulatorStaticSignatureSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WalletSimulatorStaticSignatureSet represents a StaticSignatureSet event raised by the WalletSimulator contract. +type WalletSimulatorStaticSignatureSet struct { + Hash [32]byte + Address common.Address + Timestamp *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterStaticSignatureSet is a free log retrieval operation binding the contract event 0xebf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1. +// +// Solidity: event StaticSignatureSet(bytes32 _hash, address _address, uint96 _timestamp) +func (_WalletSimulator *WalletSimulatorFilterer) FilterStaticSignatureSet(opts *bind.FilterOpts) (*WalletSimulatorStaticSignatureSetIterator, error) { + + logs, sub, err := _WalletSimulator.contract.FilterLogs(opts, "StaticSignatureSet") + if err != nil { + return nil, err + } + return &WalletSimulatorStaticSignatureSetIterator{contract: _WalletSimulator.contract, event: "StaticSignatureSet", logs: logs, sub: sub}, nil +} + +// WatchStaticSignatureSet is a free log subscription operation binding the contract event 0xebf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1. +// +// Solidity: event StaticSignatureSet(bytes32 _hash, address _address, uint96 _timestamp) +func (_WalletSimulator *WalletSimulatorFilterer) WatchStaticSignatureSet(opts *bind.WatchOpts, sink chan<- *WalletSimulatorStaticSignatureSet) (event.Subscription, error) { + + logs, sub, err := _WalletSimulator.contract.WatchLogs(opts, "StaticSignatureSet") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WalletSimulatorStaticSignatureSet) + if err := _WalletSimulator.contract.UnpackLog(event, "StaticSignatureSet", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseStaticSignatureSet is a log parse operation binding the contract event 0xebf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1. +// +// Solidity: event StaticSignatureSet(bytes32 _hash, address _address, uint96 _timestamp) +func (_WalletSimulator *WalletSimulatorFilterer) ParseStaticSignatureSet(log types.Log) (*WalletSimulatorStaticSignatureSet, error) { + event := new(WalletSimulatorStaticSignatureSet) + if err := _WalletSimulator.contract.UnpackLog(event, "StaticSignatureSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WalletSimulatorDeployedBin is the resulting bytecode of the created contract +const WalletSimulatorDeployedBin = "0x6080604052600436101561001e575b361561001c5761001c6120f4565b005b60003560e01c806223de291461019d578063025b22bc1461019857806313792a4a14610193578063150b7a021461018e5780631626ba7e1461018957806319822f7c146101845780631a9b23371461017f5780631f6a1eb91461017a57806329561426146101755780634fcf3eca1461017057806351605d801461016b5780636ea44577146101665780638943ec02146101615780638c3f55631461015c57806392dcb3fc146101575780639c145aed14610152578063a27c39221461014d578063a65d69d414610148578063aaf10f4214610143578063ad55366b1461013e578063b93ea7ad14610139578063bc197c8114610134578063f23a6e611461012f5763f727ef1c0361000e57611629565b61159c565b6114ca565b61139c565b611350565b6112ff565b611290565b611163565b610fbb565b610f5d565b610f21565b610e9d565b610e6e565b610dca565b610cae565b610bf5565b610b14565b610ab1565b6109fc565b610974565b6108e7565b6107ea565b6102eb565b61025f565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101c557565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101c557565b6044359073ffffffffffffffffffffffffffffffffffffffff821682036101c557565b359073ffffffffffffffffffffffffffffffffffffffff821682036101c557565b9181601f840112156101c55782359167ffffffffffffffff83116101c557602083818601950101116101c557565b346101c55760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576102966101a2565b5061029f6101ca565b506102a86101ed565b5060843567ffffffffffffffff81116101c5576102c9903690600401610231565b505060a43567ffffffffffffffff81116101c55761001c903690600401610231565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55761031d6101a2565b30330361036a576020817f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca0392305573ffffffffffffffffffffffffffffffffffffffff60405191168152a1005b7fa19dbf00000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff8211176103e357604052565b610398565b6040810190811067ffffffffffffffff8211176103e357604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176103e357604052565b6040519061045460e083610404565b565b6040519061045461012083610404565b359060ff821682036101c557565b359081151582036101c557565b67ffffffffffffffff81116103e35760051b60200190565b67ffffffffffffffff81116103e357601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926104df82610499565b916104ed6040519384610404565b8294818452818301116101c5578281602093846000960137010152565b9080601f830112156101c557816020610525933591016104d3565b90565b919060e0838203126101c55761053c610445565b9261054681610210565b845260208101356020850152604081013567ffffffffffffffff81116101c55760c09261057491830161050a565b60408501526060810135606085015261058f60808201610474565b60808501526105a060a08201610474565b60a0850152013560c0830152565b9080601f830112156101c55781356105c581610481565b926105d36040519485610404565b81845260208085019260051b820101918383116101c55760208201905b8382106105ff57505050505090565b813567ffffffffffffffff81116101c55760209161062287848094880101610528565b8152019101906105f0565b9080601f830112156101c557813561064481610481565b926106526040519485610404565b81845260208085019260051b8201019283116101c557602001905b82821061067a5750505090565b6020809161068784610210565b81520191019061066d565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126101c55760043567ffffffffffffffff81116101c5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82850301126101c557610704610456565b9061071181600401610466565b825261071f60248201610474565b6020830152604481013567ffffffffffffffff81116101c557846004610747928401016105ae565b6040830152606481013560608301526084810135608083015260a481013567ffffffffffffffff81116101c5578460046107839284010161050a565b60a083015260c481013560c083015260e481013560e083015261010481013567ffffffffffffffff81116101c557600485916107c093010161062d565b610100820152916024359067ffffffffffffffff82116101c5576107e691600401610231565b9091565b346101c5576107f836610692565b909161010081019261081361080e855151611731565b611751565b9160005b8551805182101561087a579061087461084f610835836001956117cf565b5173ffffffffffffffffffffffffffffffffffffffff1690565b61085983886117cf565b9073ffffffffffffffffffffffffffffffffffffffff169052565b01610817565b505083838661088f33610859835151856117cf565b5261089b8184846121c6565b50156108ad5760405160018152602090f35b6108e3906040519384937ff58cc8b5000000000000000000000000000000000000000000000000000000008552600485016119cb565b0390fd5b346101c55760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55761091e6101a2565b506109276101ca565b5060643567ffffffffffffffff81116101c557610948903690600401610231565b505060206040517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b346101c55760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760043560243567ffffffffffffffff81116101c5576020916109cc6109d2923690600401610231565b916119f0565b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b346101c55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760043567ffffffffffffffff81116101c5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126101c557610a7f60209160243560443591600401611ac5565b604051908152f35b7fffffffff000000000000000000000000000000000000000000000000000000008116036101c557565b346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576020610af6600435610af181610a87565b6123ab565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760043567ffffffffffffffff81116101c557610b5e903690600401610231565b9060243567ffffffffffffffff81116101c557610b82610b8c913690600401610231565b9190935a936124e0565b91610ba060608401516080850151906127a4565b610bab8285856121c6565b929015610bbd575061001c93506128fd565b836108e386926040519384937fa2b6d61b000000000000000000000000000000000000000000000000000000008552600485016119cb565b346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760043530330361036a578015610c84576020817f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf855604051908152a1005b7f4294d1270000000000000000000000000000000000000000000000000000000060005260046000fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c557600435610ce481610a87565b30330361036a5773ffffffffffffffffffffffffffffffffffffffff610d09826123ab565b1615610d6f5760407fffffffff000000000000000000000000000000000000000000000000000000007f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19216610d60600082613124565b815190815260006020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f1c3812cc000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b60009103126101c557565b346101c55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760207fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf854604051908152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101c5576004359067ffffffffffffffff82116101c5576107e691600401610231565b610e7736610e25565b9030330361036a57610e8d61001c925a926124e0565b90610e9782612bf0565b906128fd565b346101c55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c557610ed46101a2565b5060443567ffffffffffffffff81116101c557610ef5903690600401610231565b505060206040517f8943ec02000000000000000000000000000000000000000000000000000000008152f35b346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576020610a7f600435612c84565b346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576040610f99600435612cca565b73ffffffffffffffffffffffffffffffffffffffff8351921682526020820152f35b346101c557610fc936610e25565b9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001680156110a957330361107b57303b156101c55761104f9160009160405193849283927f6ea4457700000000000000000000000000000000000000000000000000000000845260048401611c66565b038183305af180156110765761106157005b80611070600061001c93610404565b80610dbf565b611a3c565b7f1d6ddbf4000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7fd13d78350000000000000000000000000000000000000000000000000000000060005260046000fd5b9181601f840112156101c55782359167ffffffffffffffff83116101c5576020808501948460051b0101116101c557565b919082519283825260005b84811061114e5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b8060208092840101518282860101520161110f565b346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760043567ffffffffffffffff81116101c5576111b56111bb9136906004016110d3565b90611d94565b60405160208101916020825280518093526040820192602060408260051b85010192019060005b8181106111ef5784840385f35b9091927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08582030186528351908151600681101561126157600192826020939284935260408061124c858501516060878601526060850190611104565b930151910152950196019101949190946111e2565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b346101c55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101c55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576020305473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346101c55760c061136c60008061136636610692565b91612dd1565b92611378839293613edb565b906040519586526020860152151560408501526060840152608083015260a0820152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576004356113d281610a87565b6113da6101ca565b9030330361036a5773ffffffffffffffffffffffffffffffffffffffff611400826123ab565b1661147a577f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19173ffffffffffffffffffffffffffffffffffffffff7fffffffff0000000000000000000000000000000000000000000000000000000060409316911661146d8183613124565b82519182526020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f5b4d6d6a000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b346101c55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576115016101a2565b5061150a6101ca565b5060443567ffffffffffffffff81116101c55761152b9036906004016110d3565b505060643567ffffffffffffffff81116101c55761154d9036906004016110d3565b505060843567ffffffffffffffff81116101c55761156f903690600401610231565b50506040517fbc197c81000000000000000000000000000000000000000000000000000000008152602090f35b346101c55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576115d36101a2565b506115dc6101ca565b5060843567ffffffffffffffff81116101c5576115fd903690600401610231565b505060206040517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b346101c55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576004356116636101ca565b604435916bffffffffffffffffffffffff83168093036101c55730330361036a578273ffffffffffffffffffffffffffffffffffffffff836116ee7febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1967fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606097881b1617856130df565b6040519384521660208301526040820152a1005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b906001820180921161173f57565b611702565b9190820180921161173f57565b9061175b82610481565b6117686040519182610404565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06117968294610481565b0190602036910137565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518210156117e35760209160051b010190565b6117a0565b9080602083519182815201916020808360051b8301019401926000915b83831061181457505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080611887604085015160e0604086015260e0850190611104565b936060810151606085015260808101511515608085015260a0810151151560a0850152015191015297019301930191939290611805565b906020808351928381520192019060005b8181106118dc5750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016118cf565b805160ff16825261052591602082810151151590820152610100611966611940604085015161012060408601526101208501906117e8565b606085015160608501526080850151608085015260a085015184820360a0860152611104565b9260c081015160c084015260e081015160e08401520151906101008184039101526118be565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b916119e26105259492604085526040850190611908565b92602081850391015261198c565b90611a0d92916119fe612350565b906003825260e08201526121c6565b5015611a37577f1626ba7e0000000000000000000000000000000000000000000000000000000090565b600090565b6040513d6000823e3d90fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101c5570180359067ffffffffffffffff82116101c5576020019181360383136101c557565b908160209103126101c5575161052581610a87565b60409061052594928152816020820152019161198c565b91909173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169182156110a95782330361107b5780611bf7575b506020915080610100611b27920190611a48565b92611b5f60405194859384937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611aae565b0381305afa908115611076577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091611bc8575b501603611bc357600090565b600190565b611bea915060203d602011611bf0575b611be28183610404565b810190611a99565b38611bb7565b503d611bd8565b823b156101c5576040517fb760faf900000000000000000000000000000000000000000000000000000000815230600482015292600091849160249183915af190811561107657602092611b2792611c51575b5090611b13565b806110706000611c6093610404565b38611c4a565b91602061052593818152019161198c565b90611c8182610481565b611c8e6040519182610404565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611cbc8294610481565b0160005b818110611ccc57505050565b60405190606082019180831067ffffffffffffffff8411176103e357602092604052600081526060838201526000604082015282828601015201611cc0565b91908110156117e35760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21813603018212156101c5570190565b610525903690610528565b9190820391821161173f57565b909260c092610525959460008452602084015260408301526060820152600060808201528160a08201520190611104565b90915a92600090611da481611c77565b94825b828110611db7575b505050509050565b611dca611dc5828589611d0b565b611d4b565b93611dd860a0860151151590565b806120bc575b6120b2575060009360608101518015908115806120a9575b6120385783611e086080850151151590565b15611fd957611eb390611ebb92935a94611e36875173ffffffffffffffffffffffffffffffffffffffff1690565b9115611fd357505a905b611eae89611e8260408a01518d6040519788947f4c4e814c00000000000000000000000000000000000000000000000000000000602087015260248601611d63565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101855284610404565b612d36565b915a90611d56565b6040611ec7858c6117cf565b5101525b15611f07575b5080611ee9611ee26001938a6117cf565b5160019052565b611ef1612d48565b6020611efd838b6117cf565b5101525b01611da7565b60c001805115611f9c576001815114611f635751600214611f285738611ed1565b939450505050611f42611f3b82856117cf565b5160039052565b6020611f56611f4f612d48565b92856117cf565b5101528038808080611daf565b509395809550611f829350611f7b92508491506117cf565b5160049052565b6020611f96611f8f612d48565b92846117cf565b51015290565b50925060018093611fb7611fb0828a6117cf565b5160029052565b611fbf612d48565b6020611fcb838b6117cf565b510152611f01565b90611e40565b50611eb361201e915a93612001865173ffffffffffffffffffffffffffffffffffffffff1690565b9160208701519160001461203257505a905b604087015192612d24565b604061202a858c6117cf565b510152611ecb565b90612013565b505050905085945060209250611f96915061206161205a8261207796986117cf565b5160059052565b6120a35a60405185810191825295869160200190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101865285610404565b846117cf565b50805a10611df6565b9350600190611f01565b508015611dde565b3d156120ef573d906120d582610499565b916120e36040519384610404565b82523d6000602084013e565b606090565b6004361080156121015750565b612137906000357fffffffff00000000000000000000000000000000000000000000000000000000811691612189575b506123ab565b73ffffffffffffffffffffffffffffffffffffffff81166121555750565b60008091604051368382378036810184815203915af46121736120c4565b901561218157602081519101f35b602081519101fd5b7fffffffff000000000000000000000000000000000000000000000000000000008092503660040360031b1b161638612131565b90156117e35790565b91907f80000000000000000000000000000000000000000000000000000000000000008061221d6121f785856121bd565b357fff000000000000000000000000000000000000000000000000000000000000001690565b161461227c57600091829161223194612dd1565b90509190919280821061224c57505061224990613edb565b91565b7ffd41fcba0000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b505061228790612bf0565b9061229182612cca565b4281111561231e575073ffffffffffffffffffffffffffffffffffffffff81168015159081612313575b506122c7575060019190565b7f8945c3130000000000000000000000000000000000000000000000000000000060005260048390523360245273ffffffffffffffffffffffffffffffffffffffff1660445260646000fd5b9050331415386122bb565b7ff95b6ab700000000000000000000000000000000000000000000000000000000600052600484905260245260446000fd5b60405190610120820182811067ffffffffffffffff8211176103e3576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b73ffffffffffffffffffffffffffffffffffffffff906040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a120845216604082015260408152612422606082610404565b519020541690565b9061243482610481565b6124416040519182610404565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061246f8294610481565b019060005b82811061248057505050565b60209060405161248f816103c7565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c082015282828501015201612474565b909392938483116101c55784116101c5578101920390565b9190916124eb612350565b6000815292600190823560f81c827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8183160161278d5750600060608701525b600761253a60ff831660011c90565b168061273c575b5060108181160361270757506001925b61255a8461242a565b92604087019384526000905b85821061257557505050505050565b8281013560f81c906001019091816001808516036126e557506125b93061259d8389516117cf565b519073ffffffffffffffffffffffffffffffffffffffff169052565b6002808416146126c5575b600480841614612677575b600880841614612644575b61262d61262760c0856126068a60806125fd8860108060019c9d161493516117cf565b51019015159052565b61261d8a60a06125fd8860208087161493516117cf565b1660061c60031690565b60ff1690565b60c061263a8389516117cf565b5101520190612566565b60019161262d906126279060c090878101359060200196906060612669878d516117cf565b5101529594505050506125da565b906126bf908481013560e81c906003016126b861269f6126978484611744565b838a8a6124c8565b919060406126ae888d516117cf565b51019236916104d3565b9052611744565b906125cf565b908381013590602001919060206126dd8389516117cf565b5101526125c4565b61270292508481013560601c90601401929061259d8389516117cf565b6125b9565b6020908116036127295761ffff918381013560f01c906002015b921692612551565b60ff918381013560f81c90600101612721565b612780919385929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290608087015238612541565b80850135606090811c90880152601401925061252b565b906127ae82612c84565b81810361283457509060017f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f8819201908160405160208101907f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e82528360408201526040815261281e606082610404565b51902055604080519182526020820192909252a1565b917f9b6514f40000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b61288060409295949395606083526060830190611908565b9460208201520152565b9261052596959260c09592855260208501526040840152606083015260808201528160a08201520190611104565b6105259392606092825260208201528160408201520190611104565b6128ea6105259492606083526060830190611908565b9260208201526040818403910152611104565b916000604082019384515190825b82811061291c575b50505050505050565b6129278188516117cf565b519361293660a0860151151590565b80612be8575b612ba8575060009360608101518015801580612b9f575b612b675784906129666080850151151590565b15612b21576129e09261298d855173ffffffffffffffffffffffffffffffffffffffff1690565b9115612b1b57505a905b611eae8b611e8260608d01516040890151908c8b604051998a967f4c4e814c0000000000000000000000000000000000000000000000000000000060208901526024880161288a565b15612a23575b506040805187815260208101839052600192917f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a91a15b0161290b565b60c001805115612ad2576001815114612a935751600214612a4457386129e6565b9493505050507fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b9250612a84612a78612d48565b604051938493846128b8565b0390a138808080808080612913565b50846108e3612aa0612d48565b6040519384937f7f6b0bb1000000000000000000000000000000000000000000000000000000008552600485016128d4565b509250600180937f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d612b13612b05612d48565b604051918291858c846128b8565b0390a1612a1d565b90612997565b8351612b5c93925073ffffffffffffffffffffffffffffffffffffffff1691602085015191600014612b6157505a905b604085015192612d24565b6129e0565b90612b51565b83886108e35a6040519384937f2139527400000000000000000000000000000000000000000000000000000000855260048501612868565b50815a10612953565b6040805188815260208101849052919550600192917f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b9181908101612b13565b50801561293c565b612c52612c7e612c10612c0a602085015115153090613163565b9361325e565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610404565b51902090565b60405160208101917f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8352604082015260408152612cc3606082610404565b5190205490565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e868352604082015260408152612d09606082610404565b51902054906bffffffffffffffffffffffff8260601c921690565b9160009391849360208451940192f190565b9160009291839260208351930191f490565b3d90604051916020818401016040528083526000602084013e565b60405190612d70826103e8565b60006020838281520152565b908160409103126101c557602060405191612d96836103e8565b805183520151602082015290565b60409073ffffffffffffffffffffffffffffffffffffffff61052594931681528160208201520190611104565b909491939291853560f81c60019093819087612deb612d63565b93604080891614806130c1575b612fc4575b505050600180861614612f9e5760028581161460208501526007600286901c1688820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101908096918196602016612e6d9060051c90565b612e7690611731565b8a820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101959098899a81612ec284612bf0565b988993612ece936124c8565b91612ed893613675565b9098612eec91600052602052604060002090565b90612eff91600052602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff16612f2891600052602052604060002090565b94815190868215159283612f93575b505081612f84575b50612f475750565b6040517fccbb534f000000000000000000000000000000000000000000000000000000008152815160048201526020909101516024820152604490fd5b90506020820151101538612f3f565b141591508638612f37565b86612fb99792949550612fb193986124c8565b939092613453565b919394909293929190565b8a81013560601c985060140192509087908a90849015612fe8575b50829150612dfd565b60038101955073ffffffffffffffffffffffffffffffffffffffff945081013560e81c9260409261306b9290916130369161302f9189906130298983611744565b926124c8565b36916104d3565b83519586809481937fccce3bc80000000000000000000000000000000000000000000000000000000083523060048401612da4565b0392165afa80156110765761308992600091613092575b5092611744565b86388981612fdf565b6130b4915060403d6040116130ba575b6130ac8183610404565b810190612d7c565b38613082565b503d6130a2565b5073ffffffffffffffffffffffffffffffffffffffff891615612df8565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e86835260408201526040815261311e606082610404565b51902055565b60405160208101917fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a120835260408201526040815261311e606082610404565b15613213576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a08152612c7e60c082610404565b469061316c565b805160209091019060005b8181106132325750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101613225565b61010081015160405161327981612c5260208201809561321a565b51902090613288815160ff1690565b60ff81168061330157505090612c7e6132a46040840151613f3e565b92612c5260806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b6001810361335f57505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46693810193845290810191909152606081019290925290612c7e8160808101612c52565b600281036133b557505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e460208201908152918101929092526060820192909252612c7e8160808101612c52565b600303613409575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46660208201908152918101929092526060820192909252612c7e8160808101612c52565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b90612880906040939695949660608452606084019161198c565b919492909260009560009560009560009560009561346f612350565b60028152937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9460005b8281106134c6575050505050505080511515806134b8575b612f475750565b5060208101518411156134b1565b600381019d50959b50939950919750929091906134ea908b9085013560e81c611744565b958a600084890361362e575089915b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c036135fe57509060016135338961353a9487896124c8565b908b612dd1565b9c939c9b929b9a919a99909a9b9d8e9d9e8f905b106135b85750928b8851146135af575b808b101561357d57508a60c08501528992959295949194939093613499565b7f37daf62b0000000000000000000000000000000000000000000000000000000060005260048b905260245260446000fd5b6000885261355e565b8d8f6108e36135c985858c8e6124c8565b9390926040519485947fb006aba000000000000000000000000000000000000000000000000000000000865260048601613439565b9798999a9160016136148b61361b94888a6124c8565b9086612dd1565b50929d919c909b929a9092918e8e61354e565b916134f9565b73ffffffffffffffffffffffffffffffffffffffff61052595936060938352166020820152816040820152019161198c565b908160209103126101c5575190565b9391909360009460009460005b818110613690575050505050565b8481013560f881901c9860019092019788979692909160fc1c988915613e74575060018914613e345760028914613c775760038914613c485760048914613bc75760068914613b275760058914613ad95760078914613a1257600889146139bc576009891461389357600a8914613730577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b90919293949596975060038916978815613882575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190810190816137a89187876124c8565b6040517f898bd921000000000000000000000000000000000000000000000000000000008152939184916137e0918a60048501611aae565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa918215611076576138239360009361384f575b5060ff909a168091019a61420a565b908015613849579061383d91600052602052604060002090565b955b9392919093613682565b5061383d565b60ff9193506138749060203d811161387b575b61386c8183610404565b810190613666565b9290613814565b503d613862565b8084013560f81c9850600101613745565b909192939495969750600389169788156139ab575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101908101908161390b9187876124c8565b6040517f13792a4a00000000000000000000000000000000000000000000000000000000815293918491613943918b600485016119cb565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa918215611076576139859360009361384f575060ff909a168091019a61420a565b9080156139a5579061399f91600052602052604060002090565b9561383f565b5061399f565b8084013560f81c98506001016138a8565b9850602087019750949593949293919290918201356139da866141b1565b81146139ea575b613985906141cb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506139e1565b975090919293949597600f16968715613ac7575b60206000613a38613aa59a9b86614079565b9c9092918a604051613a7b81612c528a82019485603c917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008252601c8201520190565b51902092604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa15611076576139859060ff6000519a16809101996140bc565b600189019883013560f81c9750613a26565b985060208701975094959394929391929091820135808514613aff575b61398590614172565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9850613af6565b989091929394959662ffffff9850613b49612627600c8416603f9060021c1690565b918215613bb3575b6003168015613ba2575b908190613b8690613b7e908781013560e81c906003019c168c01809c89896124c8565b90898b613675565b911115613b99575b906139859291614127565b99820199613b8e565b50600281019084013560f01c613b5b565b8482013560f81c9250600190910190613b51565b975097613c1d613c2a929394959697600f613c3293169085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b92908301809386866124c8565b908688613675565b9061399f92980198600052602052604060002090565b9850965093949293919290919080820135906020019680156139a5579061399f91600052602052604060002090565b90919293949596975060038916978815613e23575b8084013560601c99613ceb9160140190613cab9060021c600316612627565b9085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b90810190613d4f60208c613d0185858b8b6124c8565b919073ffffffffffffffffffffffffffffffffffffffff8c604051968795869485937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611aae565b0392165afa908115611076577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091613e05575b501603613dc157509060ff613985929916809101996140bc565b6108e3613dd28c93899389896124c8565b906040519485947fb2fed7ae00000000000000000000000000000000000000000000000000000000865260048601613634565b613e1d915060203d8111611bf057611be28183610404565b38613da7565b8381013560f81c9850600101613c8c565b98600f91929394959697985016968715613e63575b60148101976139859160ff9091169084013560601c6140bc565b8281013560f81c9750600101613e49565b98509091929394959698600f16978815613ec6575b5060206000613e9c613aa59a9b86614079565b9c90916040519384938c859094939260ff6060936080840197845216602083015260408201520152565b60018101995083013560f81c97506020613e89565b8015159081613ee8575090565b90507fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8541490565b805160209091019060005b818110613f285750505090565b8251845260209384019390920191600101613f1b565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0613f84613f6e83610481565b92613f7c6040519485610404565b808452610481565b0136602083013760005b83518110156140605780613fa4600192866117cf565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e0830152610100820152610100815261404c61012082610404565b51902061405982856117cf565b5201613f8e565b50909150604051612c7e81612c52602082018095613f10565b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff811161173f5791565b90604051907fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208301937f53657175656e6365207369676e65723a0a000000000000000000000000000000855260601b166031830152604582015260458152612c7e606582610404565b916040519160208301937f53657175656e6365206e657374656420636f6e6669673a0a0000000000000000855260388401526058830152607882015260788152612c7e609882610404565b60405160208101917f53657175656e636520737461746963206469676573743a0a00000000000000008352603882015260388152612c7e605882610404565b612c52612c7e612c10612c0a600060208601511515613163565b60405160208101917f53657175656e636520616e792061646472657373207375626469676573743a0a8352604082015260408152612c7e606082610404565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e63652073617069656e7420636f6e6669673a0a00000000000000865260601b166039840152604d830152606d820152606d8152612c7e608d8261040456fea2646970667358221220663e0e19a1f44876322f0807bffe0131225f2bf0bc3ca63984e33df77f73e01664736f6c634300081c0033" diff --git a/contracts/gen/v3/walletstage1/wallet_stage1.gen.go b/contracts/gen/v3/walletstage1/wallet_stage1.gen.go new file mode 100644 index 00000000..0392e6d6 --- /dev/null +++ b/contracts/gen/v3/walletstage1/wallet_stage1.gen.go @@ -0,0 +1,2208 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package walletstage1 + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/0xsequence/ethkit/go-ethereum" + "github.com/0xsequence/ethkit/go-ethereum/accounts/abi" + "github.com/0xsequence/ethkit/go-ethereum/accounts/abi/bind" + "github.com/0xsequence/ethkit/go-ethereum/common" + "github.com/0xsequence/ethkit/go-ethereum/core/types" + "github.com/0xsequence/ethkit/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// PackedUserOperation is an auto generated low-level Go binding around an user-defined struct. +type PackedUserOperation struct { + Sender common.Address + Nonce *big.Int + InitCode []byte + CallData []byte + AccountGasLimits [32]byte + PreVerificationGas *big.Int + GasFees [32]byte + PaymasterAndData []byte + Signature []byte +} + +// PayloadCall is an auto generated low-level Go binding around an user-defined struct. +type PayloadCall struct { + To common.Address + Value *big.Int + Data []byte + GasLimit *big.Int + DelegateCall bool + OnlyFallback bool + BehaviorOnError *big.Int +} + +// PayloadDecoded is an auto generated low-level Go binding around an user-defined struct. +type PayloadDecoded struct { + Kind uint8 + NoChainId bool + Calls []PayloadCall + Space *big.Int + Nonce *big.Int + Message []byte + ImageHash [32]byte + Digest [32]byte + ParentWallets []common.Address +} + +// WalletStage1MetaData contains all meta data concerning the WalletStage1 contract. +var WalletStage1MetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_factory\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_entryPoint\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"fallback\",\"stateMutability\":\"payable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"FACTORY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"INIT_CODE_HASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"STAGE_2_IMPLEMENTATION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addHook\",\"inputs\":[{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"},{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"entrypoint\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"_payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeUserOp\",\"inputs\":[{\"name\":\"_payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getImplementation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStaticSignature\",\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isValidSignature\",\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"onERC1155BatchReceived\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"onERC1155Received\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"onERC721Received\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"readHook\",\"inputs\":[{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"readNonce\",\"inputs\":[{\"name\":\"_space\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"recoverPartialSignature\",\"inputs\":[{\"name\":\"_payload\",\"type\":\"tuple\",\"internalType\":\"structPayload.Decoded\",\"components\":[{\"name\":\"kind\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"noChainId\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"calls\",\"type\":\"tuple[]\",\"internalType\":\"structPayload.Call[]\",\"components\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"delegateCall\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"onlyFallback\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"behaviorOnError\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"space\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"imageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"parentWallets\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]},{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"threshold\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"weight\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"isValidImage\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"imageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"checkpoint\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"opHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"recoverSapientSignature\",\"inputs\":[{\"name\":\"_payload\",\"type\":\"tuple\",\"internalType\":\"structPayload.Decoded\",\"components\":[{\"name\":\"kind\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"noChainId\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"calls\",\"type\":\"tuple[]\",\"internalType\":\"structPayload.Call[]\",\"components\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"delegateCall\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"onlyFallback\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"behaviorOnError\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"space\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"imageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"parentWallets\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]},{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeHook\",\"inputs\":[{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"selfExecute\",\"inputs\":[{\"name\":\"_payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"setStaticSignature\",\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_address\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_timestamp\",\"type\":\"uint96\",\"internalType\":\"uint96\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"tokenReceived\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"tokensReceived\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operatorData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateImageHash\",\"inputs\":[{\"name\":\"_imageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateImplementation\",\"inputs\":[{\"name\":\"_implementation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"validateUserOp\",\"inputs\":[{\"name\":\"userOp\",\"type\":\"tuple\",\"internalType\":\"structPackedUserOperation\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"initCode\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"callData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"accountGasLimits\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"preVerificationGas\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasFees\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"paymasterAndData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"userOpHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"missingAccountFunds\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"validationData\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"CallAborted\",\"inputs\":[{\"name\":\"_opHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"_index\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"_returnData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CallFailed\",\"inputs\":[{\"name\":\"_opHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"_index\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"_returnData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CallSkipped\",\"inputs\":[{\"name\":\"_opHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"_index\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CallSucceeded\",\"inputs\":[{\"name\":\"_opHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"_index\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DefinedHook\",\"inputs\":[{\"name\":\"selector\",\"type\":\"bytes4\",\"indexed\":false,\"internalType\":\"bytes4\"},{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ImageHashUpdated\",\"inputs\":[{\"name\":\"newImageHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ImplementationUpdated\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NonceChange\",\"inputs\":[{\"name\":\"_space\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"_newNonce\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StaticSignatureSet\",\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"_address\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"_timestamp\",\"type\":\"uint96\",\"indexed\":false,\"internalType\":\"uint96\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BadNonce\",\"inputs\":[{\"name\":\"_space\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_provided\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_current\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"ERC4337Disabled\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"HookAlreadyExists\",\"inputs\":[{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}]},{\"type\":\"error\",\"name\":\"HookDoesNotExist\",\"inputs\":[{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}]},{\"type\":\"error\",\"name\":\"ImageHashIsZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidERC1271Signature\",\"inputs\":[{\"name\":\"_opHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_signer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidEntryPoint\",\"inputs\":[{\"name\":\"_entrypoint\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"InvalidKind\",\"inputs\":[{\"name\":\"kind\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"type\":\"error\",\"name\":\"InvalidSapientSignature\",\"inputs\":[{\"name\":\"_payload\",\"type\":\"tuple\",\"internalType\":\"structPayload.Decoded\",\"components\":[{\"name\":\"kind\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"noChainId\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"calls\",\"type\":\"tuple[]\",\"internalType\":\"structPayload.Call[]\",\"components\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"delegateCall\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"onlyFallback\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"behaviorOnError\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"space\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"imageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"parentWallets\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]},{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidSignature\",\"inputs\":[{\"name\":\"_payload\",\"type\":\"tuple\",\"internalType\":\"structPayload.Decoded\",\"components\":[{\"name\":\"kind\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"noChainId\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"calls\",\"type\":\"tuple[]\",\"internalType\":\"structPayload.Call[]\",\"components\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"delegateCall\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"onlyFallback\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"behaviorOnError\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"space\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"imageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"parentWallets\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]},{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidSignatureFlag\",\"inputs\":[{\"name\":\"_flag\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidSignatureType\",\"inputs\":[{\"name\":\"_type\",\"type\":\"bytes1\",\"internalType\":\"bytes1\"}]},{\"type\":\"error\",\"name\":\"InvalidSignatureWeight\",\"inputs\":[{\"name\":\"_threshold\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_weight\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidStaticSignatureExpired\",\"inputs\":[{\"name\":\"_opHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_expires\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidStaticSignatureWrongCaller\",\"inputs\":[{\"name\":\"_opHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_caller\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_expectedCaller\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"LowWeightChainedSignature\",\"inputs\":[{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_threshold\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_weight\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"NotEnoughGas\",\"inputs\":[{\"name\":\"_payload\",\"type\":\"tuple\",\"internalType\":\"structPayload.Decoded\",\"components\":[{\"name\":\"kind\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"noChainId\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"calls\",\"type\":\"tuple[]\",\"internalType\":\"structPayload.Call[]\",\"components\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"delegateCall\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"onlyFallback\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"behaviorOnError\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"space\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"imageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"parentWallets\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]},{\"name\":\"_index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_gasLeft\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"OnlySelf\",\"inputs\":[{\"name\":\"_sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"_payload\",\"type\":\"tuple\",\"internalType\":\"structPayload.Decoded\",\"components\":[{\"name\":\"kind\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"noChainId\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"calls\",\"type\":\"tuple[]\",\"internalType\":\"structPayload.Call[]\",\"components\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"delegateCall\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"onlyFallback\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"behaviorOnError\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"space\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"imageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"parentWallets\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]},{\"name\":\"_index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_returnData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"UnusedSnapshot\",\"inputs\":[{\"name\":\"_snapshot\",\"type\":\"tuple\",\"internalType\":\"structSnapshot\",\"components\":[{\"name\":\"imageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"checkpoint\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]},{\"type\":\"error\",\"name\":\"WrongChainedCheckpointOrder\",\"inputs\":[{\"name\":\"_nextCheckpoint\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_checkpoint\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]", + Bin: "0x61010080604052346101ae57604081617f1f803803809161002082856101b3565b8339810103126101ae5761003f6020610038836101d6565b92016101d6565b604051909190613dff808201906001600160401b0382118383101761018c57602091839161412083396001600160a01b03861681520301906000f09081156101a257604051606081016001600160401b0381118282101761018c576040908152602f82527f6041600e3d396021805130553df33d3d36153402601f57363d3d373d363d305460208301526e5af43d82803e903d91601f57fd5bf360881b82820152519060005b602f811061017757505030604f820152604f8152610104606f826101b3565b805160209091012060805260a0526001600160a01b031660c05260e052604051613f3590816101eb8239608051818181610c210152613b59015260a051818181610d6f0152613b2a015260c051818181610cd6015261119d015260e0518181816110600152818161120c0152611aa00152f35b806020809284010151828286010152016100e5565b634e487b7160e01b600052604160045260246000fd5b6040513d6000823e3d90fd5b600080fd5b601f909101601f19168101906001600160401b0382119082101761018c57604052565b51906001600160a01b03821682036101ae5756fe6080604052600436101561001e575b361561001c5761001c611c68565b005b60003560e01c806223de29146101ad578063025b22bc146101a857806313792a4a146101a3578063150b7a021461019e5780631626ba7e1461019957806319822f7c146101945780631a9b23371461018f5780631f6a1eb91461018a578063257671f51461018557806329561426146101805780632dd310001461017b5780634fcf3eca146101765780636ea44577146101715780638943ec021461016c5780638c3f55631461016757806392dcb3fc146101625780639c145aed1461015d5780639f69ef5414610158578063a65d69d414610153578063aaf10f421461014e578063ad55366b14610149578063b93ea7ad14610144578063bc197c811461013f578063f23a6e611461013a5763f727ef1c0361000e5761158b565b6114fe565b61142c565b6112cd565b611281565b611230565b6111c1565b611152565b61103a565b610fdc565b610fa0565b610f1c565b610eed565b610d93565b610d24565b610c44565b610beb565b610aff565b610a9c565b6109e7565b61095f565b6108d2565b6107d5565b6102fb565b61026f565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101d557565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101d557565b6044359073ffffffffffffffffffffffffffffffffffffffff821682036101d557565b359073ffffffffffffffffffffffffffffffffffffffff821682036101d557565b9181601f840112156101d55782359167ffffffffffffffff83116101d557602083818601950101116101d557565b346101d55760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576102a66101b2565b506102af6101da565b506102b86101fd565b5060843567ffffffffffffffff81116101d5576102d9903690600401610241565b505060a43567ffffffffffffffff81116101d55761001c903690600401610241565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55761032d6101b2565b30330361033d5761001c90611d31565b7fa19dbf00000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff8211176103b657604052565b61036b565b6040810190811067ffffffffffffffff8211176103b657604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176103b657604052565b6040519061042760e0836103d7565b565b60405190610427610120836103d7565b359060ff821682036101d557565b359081151582036101d557565b67ffffffffffffffff81116103b65760051b60200190565b67ffffffffffffffff81116103b657601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926104b28261046c565b916104c060405193846103d7565b8294818452818301116101d5578281602093846000960137010152565b9080601f830112156101d5578160206104f8933591016104a6565b90565b81601f820112156101d55780359061051282610454565b9261052060405194856103d7565b82845260208085019360051b830101918183116101d55760208101935b83851061054c57505050505090565b843567ffffffffffffffff81116101d557820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082860301126101d557610593610418565b916105a060208301610220565b83526040820135602084015260608201359267ffffffffffffffff84116101d55760e0836105d58860208098819801016104dd565b6040840152608081013560608401526105f060a08201610447565b608084015261060160c08201610447565b60a0840152013560c082015281520194019361053d565b9080601f830112156101d557813561062f81610454565b9261063d60405194856103d7565b81845260208085019260051b8201019283116101d557602001905b8282106106655750505090565b6020809161067284610220565b815201910190610658565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126101d55760043567ffffffffffffffff81116101d5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82850301126101d5576106ef610429565b906106fc81600401610439565b825261070a60248201610447565b6020830152604481013567ffffffffffffffff81116101d557846004610732928401016104fb565b6040830152606481013560608301526084810135608083015260a481013567ffffffffffffffff81116101d55784600461076e928401016104dd565b60a083015260c481013560c083015260e481013560e083015261010481013567ffffffffffffffff81116101d557600485916107ab930101610618565b610100820152916024359067ffffffffffffffff82116101d5576107d191600401610241565b9091565b346101d5576107e33661067d565b90916101008101926107fe6107f9855151611693565b6116b3565b9160005b85518051821015610865579061085f61083a61082083600195611731565b5173ffffffffffffffffffffffffffffffffffffffff1690565b6108448388611731565b9073ffffffffffffffffffffffffffffffffffffffff169052565b01610802565b505083838661087a3361084483515185611731565b52610886818484611d80565b50156108985760405160018152602090f35b6108ce906040519384937ff58cc8b50000000000000000000000000000000000000000000000000000000085526004850161198c565b0390fd5b346101d55760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576109096101b2565b506109126101da565b5060643567ffffffffffffffff81116101d557610933903690600401610241565b505060206040517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b346101d55760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760043560243567ffffffffffffffff81116101d5576020916109b76109bd923690600401610241565b916119b1565b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b346101d55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760043567ffffffffffffffff81116101d5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126101d557610a6a60209160243560443591600401611a86565b604051908152f35b7fffffffff000000000000000000000000000000000000000000000000000000008116036101d557565b346101d55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576020610ae1600435610adc81610a72565b611f65565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760043567ffffffffffffffff81116101d557610b49903690600401610241565b9060243567ffffffffffffffff81116101d557610b6d610b77913690600401610241565b9190935a9361209a565b91610b8b606084015160808501519061235e565b610b96828585611d80565b929015610ba8575061001c93506124b7565b836108ce86926040519384937fa2b6d61b0000000000000000000000000000000000000000000000000000000085526004850161198c565b60009103126101d557565b346101d55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346101d55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760043530330361033d578015610cfa576020817f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf855604051908152a161001c7f0000000000000000000000000000000000000000000000000000000000000000611d31565b7f4294d1270000000000000000000000000000000000000000000000000000000060005260046000fd5b346101d55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d557600435610dc981610a72565b30330361033d5773ffffffffffffffffffffffffffffffffffffffff610dee82611f65565b1615610e545760407fffffffff000000000000000000000000000000000000000000000000000000007f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19216610e45600082612d0f565b815190815260006020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f1c3812cc000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101d5576004359067ffffffffffffffff82116101d5576107d191600401610241565b610ef636610ea4565b9030330361033d57610f0c61001c925a9261209a565b90610f16826127db565b906124b7565b346101d55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d557610f536101b2565b5060443567ffffffffffffffff81116101d557610f74903690600401610241565b505060206040517f8943ec02000000000000000000000000000000000000000000000000000000008152f35b346101d55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576020610a6a60043561286f565b346101d55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760406110186004356128b5565b73ffffffffffffffffffffffffffffffffffffffff8351921682526020820152f35b346101d55761104836610ea4565b9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001680156111285733036110fa57303b156101d5576110ce9160009160405193849283927f6ea4457700000000000000000000000000000000000000000000000000000000845260048401611c27565b038183305af180156110f5576110e057005b806110ef600061001c936103d7565b80610be0565b6119fd565b7f1d6ddbf4000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7fd13d78350000000000000000000000000000000000000000000000000000000060005260046000fd5b346101d55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101d55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101d55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576020305473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346101d55760c061129d6000806112973661067d565b9161297d565b926112a9839293613ac6565b906040519586526020860152151560408501526060840152608083015260a0820152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d55760043561130381610a72565b61130b6101da565b9030330361033d5773ffffffffffffffffffffffffffffffffffffffff61133182611f65565b166113ab577f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19173ffffffffffffffffffffffffffffffffffffffff7fffffffff0000000000000000000000000000000000000000000000000000000060409316911661139e8183612d0f565b82519182526020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f5b4d6d6a000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b9181601f840112156101d55782359167ffffffffffffffff83116101d5576020808501948460051b0101116101d557565b346101d55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576114636101b2565b5061146c6101da565b5060443567ffffffffffffffff81116101d55761148d9036906004016113fb565b505060643567ffffffffffffffff81116101d5576114af9036906004016113fb565b505060843567ffffffffffffffff81116101d5576114d1903690600401610241565b50506040517fbc197c81000000000000000000000000000000000000000000000000000000008152602090f35b346101d55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576115356101b2565b5061153e6101da565b5060843567ffffffffffffffff81116101d55761155f903690600401610241565b505060206040517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b346101d55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101d5576004356115c56101da565b604435916bffffffffffffffffffffffff83168093036101d55730330361033d578273ffffffffffffffffffffffffffffffffffffffff836116507febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1967fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606097881b161785612cca565b6040519384521660208301526040820152a1005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90600182018092116116a157565b611664565b919082018092116116a157565b906116bd82610454565b6116ca60405191826103d7565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06116f88294610454565b0190602036910137565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80518210156117455760209160051b010190565b611702565b919082519283825260005b8481106117945750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b80602080928401015182828601015201611755565b9080602083519182815201916020808360051b8301019401926000915b8383106117d557505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080611848604085015160e0604086015260e085019061174a565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152970193019301919392906117c6565b906020808351928381520192019060005b81811061189d5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101611890565b805160ff1682526104f891602082810151151590820152610100611927611901604085015161012060408601526101208501906117a9565b606085015160608501526080850151608085015260a085015184820360a086015261174a565b9260c081015160c084015260e081015160e084015201519061010081840391015261187f565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b916119a36104f894926040855260408501906118c9565b92602081850391015261194d565b906119ce92916119bf611f0a565b906003825260e0820152611d80565b50156119f8577f1626ba7e0000000000000000000000000000000000000000000000000000000090565b600090565b6040513d6000823e3d90fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101d5570180359067ffffffffffffffff82116101d5576020019181360383136101d557565b908160209103126101d557516104f881610a72565b6040906104f894928152816020820152019161194d565b91909173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016918215611128578233036110fa5780611bb8575b506020915080610100611ae8920190611a09565b92611b2060405194859384937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611a6f565b0381305afa9081156110f5577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091611b89575b501603611b8457600090565b600190565b611bab915060203d602011611bb1575b611ba381836103d7565b810190611a5a565b38611b78565b503d611b99565b823b156101d5576040517fb760faf900000000000000000000000000000000000000000000000000000000815230600482015292600091849160249183915af19081156110f557602092611ae892611c12575b5090611ad4565b806110ef6000611c21936103d7565b38611c0b565b9160206104f893818152019161194d565b3d15611c63573d90611c498261046c565b91611c5760405193846103d7565b82523d6000602084013e565b606090565b600436108015611c755750565b611cab906000357fffffffff00000000000000000000000000000000000000000000000000000000811691611cfd575b50611f65565b73ffffffffffffffffffffffffffffffffffffffff8116611cc95750565b60008091604051368382378036810184815203915af4611ce7611c38565b9015611cf557602081519101f35b602081519101fd5b7fffffffff000000000000000000000000000000000000000000000000000000008092503660040360031b1b161638611ca5565b60207f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca039180305573ffffffffffffffffffffffffffffffffffffffff60405191168152a1565b90156117455790565b91907f800000000000000000000000000000000000000000000000000000000000000080611dd7611db18585611d77565b357fff000000000000000000000000000000000000000000000000000000000000001690565b1614611e36576000918291611deb9461297d565b905091909192808210611e06575050611e0390613ac6565b91565b7ffd41fcba0000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b5050611e41906127db565b90611e4b826128b5565b42811115611ed8575073ffffffffffffffffffffffffffffffffffffffff81168015159081611ecd575b50611e81575060019190565b7f8945c3130000000000000000000000000000000000000000000000000000000060005260048390523360245273ffffffffffffffffffffffffffffffffffffffff1660445260646000fd5b905033141538611e75565b7ff95b6ab700000000000000000000000000000000000000000000000000000000600052600484905260245260446000fd5b60405190610120820182811067ffffffffffffffff8211176103b6576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b73ffffffffffffffffffffffffffffffffffffffff906040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a120845216604082015260408152611fdc6060826103d7565b519020541690565b90611fee82610454565b611ffb60405191826103d7565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06120298294610454565b019060005b82811061203a57505050565b6020906040516120498161039a565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c08201528282850101520161202e565b909392938483116101d55784116101d5578101920390565b9190916120a5611f0a565b6000815292600190823560f81c827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818316016123475750600060608701525b60076120f460ff831660011c90565b16806122f6575b506010818116036122c157506001925b61211484611fe4565b92604087019384526000905b85821061212f57505050505050565b8281013560f81c9060010190918160018085160361229f575061217330612157838951611731565b519073ffffffffffffffffffffffffffffffffffffffff169052565b60028084161461227f575b600480841614612231575b6008808416146121fe575b6121e76121e160c0856121c08a60806121b78860108060019c9d16149351611731565b51019015159052565b6121d78a60a06121b7886020808716149351611731565b1660061c60031690565b60ff1690565b60c06121f4838951611731565b5101520190612120565b6001916121e7906121e19060c090878101359060200196906060612223878d51611731565b510152959450505050612194565b90612279908481013560e81c9060030161227261225961225184846116a6565b838a8a612082565b91906040612268888d51611731565b51019236916104a6565b90526116a6565b90612189565b90838101359060200191906020612297838951611731565b51015261217e565b6122bc92508481013560601c906014019290612157838951611731565b612173565b6020908116036122e35761ffff918381013560f01c906002015b92169261210b565b60ff918381013560f81c906001016122db565b61233a919385929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b92906080870152386120fb565b80850135606090811c9088015260140192506120e5565b906123688261286f565b8181036123ee57509060017f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f8819201908160405160208101907f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8252836040820152604081526123d86060826103d7565b51902055604080519182526020820192909252a1565b917f9b6514f40000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b61243a604092959493956060835260608301906118c9565b9460208201520152565b926104f896959260c09592855260208501526040840152606083015260808201528160a0820152019061174a565b6104f8939260609282526020820152816040820152019061174a565b6124a46104f894926060835260608301906118c9565b926020820152604081840391015261174a565b916000604082019384515190825b8281106124d6575b50505050505050565b6124e1818851611731565b51936124f060a0860151151590565b806127d3575b61279357506000936060810151801580158061278a575b6127525784906125206080850151151590565b1561270c576125cb92612547855173ffffffffffffffffffffffffffffffffffffffff1690565b911561270657505a905b6125c68b61259a60608d01516040890151908c8b604051998a967f4c4e814c00000000000000000000000000000000000000000000000000000000602089015260248801612444565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018552846103d7565b612c9d565b1561260e575b506040805187815260208101839052600192917f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a91a15b016124c5565b60c0018051156126bd57600181511461267e575160021461262f57386125d1565b9493505050507fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b925061266f612663612caf565b60405193849384612472565b0390a1388080808080806124cd565b50846108ce61268b612caf565b6040519384937f7f6b0bb10000000000000000000000000000000000000000000000000000000085526004850161248e565b509250600180937f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d6126fe6126f0612caf565b604051918291858c84612472565b0390a1612608565b90612551565b835161274793925073ffffffffffffffffffffffffffffffffffffffff169160208501519160001461274c57505a905b604085015192612c8b565b6125cb565b9061273c565b83886108ce5a6040519384937f2139527400000000000000000000000000000000000000000000000000000000855260048501612422565b50815a1061250d565b6040805188815260208101849052919550600192917f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b91819081016126fe565b5080156124f6565b61283d6128696127fb6127f5602085015115153090612d4e565b93612e49565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826103d7565b51902090565b60405160208101917f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83526040820152604081526128ae6060826103d7565b5190205490565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e8683526040820152604081526128f46060826103d7565b51902054906bffffffffffffffffffffffff8260601c921690565b6040519061291c826103bb565b60006020838281520152565b908160409103126101d557602060405191612942836103bb565b805183520151602082015290565b60409073ffffffffffffffffffffffffffffffffffffffff6104f89493168152816020820152019061174a565b909491939291853560f81c6001909381908761299761290f565b9360408089161480612c6d575b612b70575b505050600180861614612b4a5760028581161460208501526007600286901c1688820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101908096918196602016612a199060051c90565b612a2290611693565b8a820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101959098899a81612a6e846127db565b988993612a7a93612082565b91612a8493613260565b9098612a9891600052602052604060002090565b90612aab91600052602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff16612ad491600052602052604060002090565b94815190868215159283612b3f575b505081612b30575b50612af35750565b6040517fccbb534f000000000000000000000000000000000000000000000000000000008152815160048201526020909101516024820152604490fd5b90506020820151101538612aeb565b141591508638612ae3565b86612b659792949550612b5d9398612082565b93909261303e565b919394909293929190565b8a81013560601c985060140192509087908a90849015612b94575b508291506129a9565b60038101955073ffffffffffffffffffffffffffffffffffffffff945081013560e81c92604092612c17929091612be291612bdb918990612bd589836116a6565b92612082565b36916104a6565b83519586809481937fccce3bc80000000000000000000000000000000000000000000000000000000083523060048401612950565b0392165afa80156110f557612c3592600091612c3e575b50926116a6565b86388981612b8b565b612c60915060403d604011612c66575b612c5881836103d7565b810190612928565b38612c2e565b503d612c4e565b5073ffffffffffffffffffffffffffffffffffffffff8916156129a4565b9160009391849360208451940192f190565b9160009291839260208351930191f490565b3d90604051916020818401016040528083526000602084013e565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e868352604082015260408152612d096060826103d7565b51902055565b60405160208101917fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1208352604082015260408152612d096060826103d7565b15612dfe576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a0815261286960c0826103d7565b4690612d57565b805160209091019060005b818110612e1d5750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101612e10565b610100810151604051612e648161283d602082018095612e05565b51902090612e73815160ff1690565b60ff811680612eec57505090612869612e8f6040840151613bc3565b9261283d60806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b60018103612f4a57505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46693810193845290810191909152606081019290925290612869816080810161283d565b60028103612fa057505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e460208201908152918101929092526060820192909252612869816080810161283d565b600303612ff4575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46660208201908152918101929092526060820192909252612869816080810161283d565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b9061243a906040939695949660608452606084019161194d565b919492909260009560009560009560009560009561305a611f0a565b60028152937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9460005b8281106130b1575050505050505080511515806130a3575b612af35750565b50602081015184111561309c565b600381019d50959b50939950919750929091906130d5908b9085013560e81c6116a6565b958a6000848903613219575089915b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c036131e9575090600161311e89613125948789612082565b908b61297d565b9c939c9b929b9a919a99909a9b9d8e9d9e8f905b106131a35750928b88511461319a575b808b101561316857508a60c08501528992959295949194939093613084565b7f37daf62b0000000000000000000000000000000000000000000000000000000060005260048b905260245260446000fd5b60008852613149565b8d8f6108ce6131b485858c8e612082565b9390926040519485947fb006aba000000000000000000000000000000000000000000000000000000000865260048601613024565b9798999a9160016131ff8b61320694888a612082565b908661297d565b50929d919c909b929a9092918e8e613139565b916130e4565b73ffffffffffffffffffffffffffffffffffffffff6104f895936060938352166020820152816040820152019161194d565b908160209103126101d5575190565b9391909360009460009460005b81811061327b575050505050565b8481013560f881901c9860019092019788979692909160fc1c988915613a5f575060018914613a1f5760028914613862576003891461383357600489146137b2576006891461371257600589146136c457600789146135fd57600889146135a7576009891461347e57600a891461331b577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b9091929394959697506003891697881561346d575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691019081019081613393918787612082565b6040517f898bd921000000000000000000000000000000000000000000000000000000008152939184916133cb918a60048501611a6f565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa9182156110f55761340e9360009361343a575b5060ff909a168091019a613e8f565b908015613434579061342891600052602052604060002090565b955b939291909361326d565b50613428565b60ff91935061345f9060203d8111613466575b61345781836103d7565b810190613251565b92906133ff565b503d61344d565b8084013560f81c9850600101613330565b90919293949596975060038916978815613596575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190810190816134f6918787612082565b6040517f13792a4a0000000000000000000000000000000000000000000000000000000081529391849161352e918b6004850161198c565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa9182156110f5576135709360009361343a575060ff909a168091019a613e8f565b908015613590579061358a91600052602052604060002090565b9561342a565b5061358a565b8084013560f81c9850600101613493565b9850602087019750949593949293919290918201356135c586613e36565b81146135d5575b61357090613e50565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506135cc565b975090919293949597600f169687156136b2575b602060006136236136909a9b86613cfe565b9c9092918a6040516136668161283d8a82019485603c917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008252601c8201520190565b51902092604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa156110f5576135709060ff6000519a1680910199613d41565b600189019883013560f81c9750613611565b9850602087019750949593949293919290918201358085146136ea575b61357090613df7565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506136e1565b989091929394959662ffffff98506137346121e1600c8416603f9060021c1690565b91821561379e575b600316801561378d575b90819061377190613769908781013560e81c906003019c168c01809c8989612082565b90898b613260565b911115613784575b906135709291613dac565b99820199613779565b50600281019084013560f01c613746565b8482013560f81c925060019091019061373c565b975097613808613815929394959697600f61381d93169085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290830180938686612082565b908688613260565b9061358a92980198600052602052604060002090565b985096509394929391929091908082013590602001968015613590579061358a91600052602052604060002090565b90919293949596975060038916978815613a0e575b8084013560601c996138d691601401906138969060021c6003166121e1565b9085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9081019061393a60208c6138ec85858b8b612082565b919073ffffffffffffffffffffffffffffffffffffffff8c604051968795869485937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611a6f565b0392165afa9081156110f5577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000916000916139f0575b5016036139ac57509060ff61357092991680910199613d41565b6108ce6139bd8c9389938989612082565b906040519485947fb2fed7ae0000000000000000000000000000000000000000000000000000000086526004860161321f565b613a08915060203d8111611bb157611ba381836103d7565b38613992565b8381013560f81c9850600101613877565b98600f91929394959697985016968715613a4e575b60148101976135709160ff9091169084013560601c613d41565b8281013560f81c9750600101613a34565b98509091929394959698600f16978815613ab1575b5060206000613a876136909a9b86613cfe565b9c90916040519384938c859094939260ff6060936080840197845216602083015260408201520152565b60018101995083013560f81c97506020613a74565b73ffffffffffffffffffffffffffffffffffffffff9060405160208101917fff0000000000000000000000000000000000000000000000000000000000000083527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060601b16602183015260358201527f0000000000000000000000000000000000000000000000000000000000000000605582015260558152613b8c6075826103d7565b51902016301490565b805160209091019060005b818110613bad5750505090565b8251845260209384019390920191600101613ba0565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0613c09613bf383610454565b92613c0160405194856103d7565b808452610454565b0136602083013760005b8351811015613ce55780613c2960019286611731565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152613cd1610120826103d7565b519020613cde8285611731565b5201613c13565b509091506040516128698161283d602082018095613b95565b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff81116116a15791565b90604051907fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208301937f53657175656e6365207369676e65723a0a000000000000000000000000000000855260601b1660318301526045820152604581526128696065826103d7565b916040519160208301937f53657175656e6365206e657374656420636f6e6669673a0a00000000000000008552603884015260588301526078820152607881526128696098826103d7565b60405160208101917f53657175656e636520737461746963206469676573743a0a000000000000000083526038820152603881526128696058826103d7565b61283d6128696127fb6127f5600060208601511515612d4e565b60405160208101917f53657175656e636520616e792061646472657373207375626469676573743a0a83526040820152604081526128696060826103d7565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e63652073617069656e7420636f6e6669673a0a00000000000000865260601b166039840152604d830152606d820152606d8152612869608d826103d756fea2646970667358221220825b940dd691f79f4782ba8dca1eaa7ff741f07679c4faf28637d8117499069a64736f6c634300081c003360a034607457601f613dff38819003918201601f19168301916001600160401b03831184841017607957808492602094604052833981010312607457516001600160a01b0381168103607457608052604051613d6f90816100908239608051818181610fe90152818161112601526119ba0152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6080604052600436101561001e575b361561001c5761001c611b82565b005b60003560e01c806223de291461018d578063025b22bc1461018857806313792a4a14610183578063150b7a021461017e5780631626ba7e1461017957806319822f7c146101745780631a9b23371461016f5780631f6a1eb91461016a57806329561426146101655780634fcf3eca1461016057806351605d801461015b5780636ea44577146101565780638943ec02146101515780638c3f55631461014c57806392dcb3fc146101475780639c145aed14610142578063a65d69d41461013d578063aaf10f4214610138578063ad55366b14610133578063b93ea7ad1461012e578063bc197c8114610129578063f23a6e61146101245763f727ef1c0361000e576114a5565b611418565b611346565b6111e7565b61119b565b61114a565b6110db565b610fc3565b610f65565b610f29565b610ea5565b610e76565b610dd2565b610cb6565b610bfd565b610b1c565b610ab9565b610a04565b61097c565b6108ef565b6107f2565b6102db565b61024f565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101b557565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101b557565b6044359073ffffffffffffffffffffffffffffffffffffffff821682036101b557565b359073ffffffffffffffffffffffffffffffffffffffff821682036101b557565b9181601f840112156101b55782359167ffffffffffffffff83116101b557602083818601950101116101b557565b346101b55760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557610286610192565b5061028f6101ba565b506102986101dd565b5060843567ffffffffffffffff81116101b5576102b9903690600401610221565b505060a43567ffffffffffffffff81116101b55761001c903690600401610221565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55761030d610192565b30330361035a576020817f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca0392305573ffffffffffffffffffffffffffffffffffffffff60405191168152a1005b7fa19dbf00000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff8211176103d357604052565b610388565b6040810190811067ffffffffffffffff8211176103d357604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176103d357604052565b6040519061044460e0836103f4565b565b60405190610444610120836103f4565b359060ff821682036101b557565b359081151582036101b557565b67ffffffffffffffff81116103d35760051b60200190565b67ffffffffffffffff81116103d357601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926104cf82610489565b916104dd60405193846103f4565b8294818452818301116101b5578281602093846000960137010152565b9080601f830112156101b557816020610515933591016104c3565b90565b81601f820112156101b55780359061052f82610471565b9261053d60405194856103f4565b82845260208085019360051b830101918183116101b55760208101935b83851061056957505050505090565b843567ffffffffffffffff81116101b557820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082860301126101b5576105b0610435565b916105bd60208301610200565b83526040820135602084015260608201359267ffffffffffffffff84116101b55760e0836105f28860208098819801016104fa565b60408401526080810135606084015261060d60a08201610464565b608084015261061e60c08201610464565b60a0840152013560c082015281520194019361055a565b9080601f830112156101b557813561064c81610471565b9261065a60405194856103f4565b81845260208085019260051b8201019283116101b557602001905b8282106106825750505090565b6020809161068f84610200565b815201910190610675565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126101b55760043567ffffffffffffffff81116101b5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82850301126101b55761070c610446565b9061071981600401610456565b825261072760248201610464565b6020830152604481013567ffffffffffffffff81116101b55784600461074f92840101610518565b6040830152606481013560608301526084810135608083015260a481013567ffffffffffffffff81116101b55784600461078b928401016104fa565b60a083015260c481013560c083015260e481013560e083015261010481013567ffffffffffffffff81116101b557600485916107c8930101610635565b610100820152916024359067ffffffffffffffff82116101b5576107ee91600401610221565b9091565b346101b5576108003661069a565b909161010081019261081b6108168551516115ad565b6115cd565b9160005b85518051821015610882579061087c61085761083d8360019561164b565b5173ffffffffffffffffffffffffffffffffffffffff1690565b610861838861164b565b9073ffffffffffffffffffffffffffffffffffffffff169052565b0161081f565b5050838386610897336108618351518561164b565b526108a3818484611c54565b50156108b55760405160018152602090f35b6108eb906040519384937ff58cc8b5000000000000000000000000000000000000000000000000000000008552600485016118a6565b0390fd5b346101b55760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557610926610192565b5061092f6101ba565b5060643567ffffffffffffffff81116101b557610950903690600401610221565b505060206040517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b346101b55760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043560243567ffffffffffffffff81116101b5576020916109d46109da923690600401610221565b916118cb565b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b346101b55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043567ffffffffffffffff81116101b5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126101b557610a87602091602435604435916004016119a0565b604051908152f35b7fffffffff000000000000000000000000000000000000000000000000000000008116036101b557565b346101b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576020610afe600435610af981610a8f565b611e39565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043567ffffffffffffffff81116101b557610b66903690600401610221565b9060243567ffffffffffffffff81116101b557610b8a610b94913690600401610221565b9190935a93611f6e565b91610ba86060840151608085015190612232565b610bb3828585611c54565b929015610bc5575061001c935061238b565b836108eb86926040519384937fa2b6d61b000000000000000000000000000000000000000000000000000000008552600485016118a6565b346101b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043530330361035a578015610c8c576020817f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf855604051908152a1005b7f4294d1270000000000000000000000000000000000000000000000000000000060005260046000fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557600435610cec81610a8f565b30330361035a5773ffffffffffffffffffffffffffffffffffffffff610d1182611e39565b1615610d775760407fffffffff000000000000000000000000000000000000000000000000000000007f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19216610d68600082612be3565b815190815260006020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f1c3812cc000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b60009103126101b557565b346101b55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760207fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf854604051908152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101b5576004359067ffffffffffffffff82116101b5576107ee91600401610221565b610e7f36610e2d565b9030330361035a57610e9561001c925a92611f6e565b90610e9f826126af565b9061238b565b346101b55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557610edc610192565b5060443567ffffffffffffffff81116101b557610efd903690600401610221565b505060206040517f8943ec02000000000000000000000000000000000000000000000000000000008152f35b346101b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576020610a87600435612743565b346101b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576040610fa1600435612789565b73ffffffffffffffffffffffffffffffffffffffff8351921682526020820152f35b346101b557610fd136610e2d565b9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001680156110b157330361108357303b156101b5576110579160009160405193849283927f6ea4457700000000000000000000000000000000000000000000000000000000845260048401611b41565b038183305af1801561107e5761106957005b80611078600061001c936103f4565b80610dc7565b611917565b7f1d6ddbf4000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7fd13d78350000000000000000000000000000000000000000000000000000000060005260046000fd5b346101b55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101b55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576020305473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346101b55760c06111b76000806111b13661069a565b91612851565b926111c383929361399a565b906040519586526020860152151560408501526060840152608083015260a0820152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043561121d81610a8f565b6112256101ba565b9030330361035a5773ffffffffffffffffffffffffffffffffffffffff61124b82611e39565b166112c5577f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19173ffffffffffffffffffffffffffffffffffffffff7fffffffff000000000000000000000000000000000000000000000000000000006040931691166112b88183612be3565b82519182526020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f5b4d6d6a000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b9181601f840112156101b55782359167ffffffffffffffff83116101b5576020808501948460051b0101116101b557565b346101b55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55761137d610192565b506113866101ba565b5060443567ffffffffffffffff81116101b5576113a7903690600401611315565b505060643567ffffffffffffffff81116101b5576113c9903690600401611315565b505060843567ffffffffffffffff81116101b5576113eb903690600401610221565b50506040517fbc197c81000000000000000000000000000000000000000000000000000000008152602090f35b346101b55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55761144f610192565b506114586101ba565b5060843567ffffffffffffffff81116101b557611479903690600401610221565b505060206040517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b346101b55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576004356114df6101ba565b604435916bffffffffffffffffffffffff83168093036101b55730330361035a578273ffffffffffffffffffffffffffffffffffffffff8361156a7febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1967fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606097881b161785612b9e565b6040519384521660208301526040820152a1005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90600182018092116115bb57565b61157e565b919082018092116115bb57565b906115d782610471565b6115e460405191826103f4565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06116128294610471565b0190602036910137565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805182101561165f5760209160051b010190565b61161c565b919082519283825260005b8481106116ae5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b8060208092840101518282860101520161166f565b9080602083519182815201916020808360051b8301019401926000915b8383106116ef57505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080611762604085015160e0604086015260e0850190611664565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152970193019301919392906116e0565b906020808351928381520192019060005b8181106117b75750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016117aa565b805160ff1682526105159160208281015115159082015261010061184161181b604085015161012060408601526101208501906116c3565b606085015160608501526080850151608085015260a085015184820360a0860152611664565b9260c081015160c084015260e081015160e0840152015190610100818403910152611799565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b916118bd61051594926040855260408501906117e3565b926020818503910152611867565b906118e892916118d9611dde565b906003825260e0820152611c54565b5015611912577f1626ba7e0000000000000000000000000000000000000000000000000000000090565b600090565b6040513d6000823e3d90fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101b5570180359067ffffffffffffffff82116101b5576020019181360383136101b557565b908160209103126101b5575161051581610a8f565b604090610515949281528160208201520191611867565b91909173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169182156110b1578233036110835780611ad2575b506020915080610100611a02920190611923565b92611a3a60405194859384937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611989565b0381305afa90811561107e577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091611aa3575b501603611a9e57600090565b600190565b611ac5915060203d602011611acb575b611abd81836103f4565b810190611974565b38611a92565b503d611ab3565b823b156101b5576040517fb760faf900000000000000000000000000000000000000000000000000000000815230600482015292600091849160249183915af190811561107e57602092611a0292611b2c575b50906119ee565b806110786000611b3b936103f4565b38611b25565b916020610515938181520191611867565b3d15611b7d573d90611b6382610489565b91611b7160405193846103f4565b82523d6000602084013e565b606090565b600436108015611b8f5750565b611bc5906000357fffffffff00000000000000000000000000000000000000000000000000000000811691611c17575b50611e39565b73ffffffffffffffffffffffffffffffffffffffff8116611be35750565b60008091604051368382378036810184815203915af4611c01611b52565b9015611c0f57602081519101f35b602081519101fd5b7fffffffff000000000000000000000000000000000000000000000000000000008092503660040360031b1b161638611bbf565b901561165f5790565b91907f800000000000000000000000000000000000000000000000000000000000000080611cab611c858585611c4b565b357fff000000000000000000000000000000000000000000000000000000000000001690565b1614611d0a576000918291611cbf94612851565b905091909192808210611cda575050611cd79061399a565b91565b7ffd41fcba0000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b5050611d15906126af565b90611d1f82612789565b42811115611dac575073ffffffffffffffffffffffffffffffffffffffff81168015159081611da1575b50611d55575060019190565b7f8945c3130000000000000000000000000000000000000000000000000000000060005260048390523360245273ffffffffffffffffffffffffffffffffffffffff1660445260646000fd5b905033141538611d49565b7ff95b6ab700000000000000000000000000000000000000000000000000000000600052600484905260245260446000fd5b60405190610120820182811067ffffffffffffffff8211176103d3576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b73ffffffffffffffffffffffffffffffffffffffff906040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a120845216604082015260408152611eb06060826103f4565b519020541690565b90611ec282610471565b611ecf60405191826103f4565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611efd8294610471565b019060005b828110611f0e57505050565b602090604051611f1d816103b7565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c082015282828501015201611f02565b909392938483116101b55784116101b5578101920390565b919091611f79611dde565b6000815292600190823560f81c827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8183160161221b5750600060608701525b6007611fc860ff831660011c90565b16806121ca575b5060108181160361219557506001925b611fe884611eb8565b92604087019384526000905b85821061200357505050505050565b8281013560f81c9060010190918160018085160361217357506120473061202b83895161164b565b519073ffffffffffffffffffffffffffffffffffffffff169052565b600280841614612153575b600480841614612105575b6008808416146120d2575b6120bb6120b560c0856120948a608061208b8860108060019c9d1614935161164b565b51019015159052565b6120ab8a60a061208b88602080871614935161164b565b1660061c60031690565b60ff1690565b60c06120c883895161164b565b5101520190611ff4565b6001916120bb906120b59060c0908781013590602001969060606120f7878d5161164b565b510152959450505050612068565b9061214d908481013560e81c9060030161214661212d61212584846115c0565b838a8a611f56565b9190604061213c888d5161164b565b51019236916104c3565b90526115c0565b9061205d565b9083810135906020019190602061216b83895161164b565b510152612052565b61219092508481013560601c90601401929061202b83895161164b565b612047565b6020908116036121b75761ffff918381013560f01c906002015b921692611fdf565b60ff918381013560f81c906001016121af565b61220e919385929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290608087015238611fcf565b80850135606090811c908801526014019250611fb9565b9061223c82612743565b8181036122c257509060017f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f8819201908160405160208101907f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8252836040820152604081526122ac6060826103f4565b51902055604080519182526020820192909252a1565b917f9b6514f40000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b61230e604092959493956060835260608301906117e3565b9460208201520152565b9261051596959260c09592855260208501526040840152606083015260808201528160a08201520190611664565b6105159392606092825260208201528160408201520190611664565b61237861051594926060835260608301906117e3565b9260208201526040818403910152611664565b916000604082019384515190825b8281106123aa575b50505050505050565b6123b581885161164b565b51936123c460a0860151151590565b806126a7575b61266757506000936060810151801580158061265e575b6126265784906123f46080850151151590565b156125e05761249f9261241b855173ffffffffffffffffffffffffffffffffffffffff1690565b91156125da57505a905b61249a8b61246e60608d01516040890151908c8b604051998a967f4c4e814c00000000000000000000000000000000000000000000000000000000602089015260248801612318565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018552846103f4565b612b71565b156124e2575b506040805187815260208101839052600192917f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a91a15b01612399565b60c001805115612591576001815114612552575160021461250357386124a5565b9493505050507fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b9250612543612537612b83565b60405193849384612346565b0390a1388080808080806123a1565b50846108eb61255f612b83565b6040519384937f7f6b0bb100000000000000000000000000000000000000000000000000000000855260048501612362565b509250600180937f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d6125d26125c4612b83565b604051918291858c84612346565b0390a16124dc565b90612425565b835161261b93925073ffffffffffffffffffffffffffffffffffffffff169160208501519160001461262057505a905b604085015192612b5f565b61249f565b90612610565b83886108eb5a6040519384937f21395274000000000000000000000000000000000000000000000000000000008552600485016122f6565b50815a106123e1565b6040805188815260208101849052919550600192917f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b91819081016125d2565b5080156123ca565b61271161273d6126cf6126c9602085015115153090612c22565b93612d1d565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826103f4565b51902090565b60405160208101917f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83526040820152604081526127826060826103f4565b5190205490565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e8683526040820152604081526127c86060826103f4565b51902054906bffffffffffffffffffffffff8260601c921690565b604051906127f0826103d8565b60006020838281520152565b908160409103126101b557602060405191612816836103d8565b805183520151602082015290565b60409073ffffffffffffffffffffffffffffffffffffffff61051594931681528160208201520190611664565b909491939291853560f81c6001909381908761286b6127e3565b9360408089161480612b41575b612a44575b505050600180861614612a1e5760028581161460208501526007600286901c1688820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691019080969181966020166128ed9060051c90565b6128f6906115ad565b8a820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101959098899a81612942846126af565b98899361294e93611f56565b9161295893613134565b909861296c91600052602052604060002090565b9061297f91600052602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff166129a891600052602052604060002090565b94815190868215159283612a13575b505081612a04575b506129c75750565b6040517fccbb534f000000000000000000000000000000000000000000000000000000008152815160048201526020909101516024820152604490fd5b905060208201511015386129bf565b1415915086386129b7565b86612a399792949550612a319398611f56565b939092612f12565b919394909293929190565b8a81013560601c985060140192509087908a90849015612a68575b5082915061287d565b60038101955073ffffffffffffffffffffffffffffffffffffffff945081013560e81c92604092612aeb929091612ab691612aaf918990612aa989836115c0565b92611f56565b36916104c3565b83519586809481937fccce3bc80000000000000000000000000000000000000000000000000000000083523060048401612824565b0392165afa801561107e57612b0992600091612b12575b50926115c0565b86388981612a5f565b612b34915060403d604011612b3a575b612b2c81836103f4565b8101906127fc565b38612b02565b503d612b22565b5073ffffffffffffffffffffffffffffffffffffffff891615612878565b9160009391849360208451940192f190565b9160009291839260208351930191f490565b3d90604051916020818401016040528083526000602084013e565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e868352604082015260408152612bdd6060826103f4565b51902055565b60405160208101917fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1208352604082015260408152612bdd6060826103f4565b15612cd2576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a0815261273d60c0826103f4565b4690612c2b565b805160209091019060005b818110612cf15750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101612ce4565b610100810151604051612d3881612711602082018095612cd9565b51902090612d47815160ff1690565b60ff811680612dc05750509061273d612d6360408401516139fd565b9261271160806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b60018103612e1e57505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4669381019384529081019190915260608101929092529061273d8160808101612711565b60028103612e7457505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e46020820190815291810192909252606082019290925261273d8160808101612711565b600303612ec8575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4666020820190815291810192909252606082019290925261273d8160808101612711565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b9061230e9060409396959496606084526060840191611867565b9194929092600095600095600095600095600095612f2e611dde565b60028152937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9460005b828110612f8557505050505050508051151580612f77575b6129c75750565b506020810151841115612f70565b600381019d50959b5093995091975092909190612fa9908b9085013560e81c6115c0565b958a60008489036130ed575089915b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c036130bd5750906001612ff289612ff9948789611f56565b908b612851565b9c939c9b929b9a919a99909a9b9d8e9d9e8f905b106130775750928b88511461306e575b808b101561303c57508a60c08501528992959295949194939093612f58565b7f37daf62b0000000000000000000000000000000000000000000000000000000060005260048b905260245260446000fd5b6000885261301d565b8d8f6108eb61308885858c8e611f56565b9390926040519485947fb006aba000000000000000000000000000000000000000000000000000000000865260048601612ef8565b9798999a9160016130d38b6130da94888a611f56565b9086612851565b50929d919c909b929a9092918e8e61300d565b91612fb8565b73ffffffffffffffffffffffffffffffffffffffff610515959360609383521660208201528160408201520191611867565b908160209103126101b5575190565b9391909360009460009460005b81811061314f575050505050565b8481013560f881901c9860019092019788979692909160fc1c9889156139335750600189146138f357600289146137365760038914613707576004891461368657600689146135e6576005891461359857600789146134d1576008891461347b576009891461335257600a89146131ef577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b90919293949596975060038916978815613341575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691019081019081613267918787611f56565b6040517f898bd9210000000000000000000000000000000000000000000000000000000081529391849161329f918a60048501611989565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa91821561107e576132e29360009361330e575b5060ff909a168091019a613cc9565b90801561330857906132fc91600052602052604060002090565b955b9392919093613141565b506132fc565b60ff9193506133339060203d811161333a575b61332b81836103f4565b810190613125565b92906132d3565b503d613321565b8084013560f81c9850600101613204565b9091929394959697506003891697881561346a575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190810190816133ca918787611f56565b6040517f13792a4a00000000000000000000000000000000000000000000000000000000815293918491613402918b600485016118a6565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa91821561107e576134449360009361330e575060ff909a168091019a613cc9565b908015613464579061345e91600052602052604060002090565b956132fe565b5061345e565b8084013560f81c9850600101613367565b98506020870197509495939492939192909182013561349986613c70565b81146134a9575b61344490613c8a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506134a0565b975090919293949597600f16968715613586575b602060006134f76135649a9b86613b38565b9c9092918a60405161353a816127118a82019485603c917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008252601c8201520190565b51902092604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa1561107e576134449060ff6000519a1680910199613b7b565b600189019883013560f81c97506134e5565b9850602087019750949593949293919290918201358085146135be575b61344490613c31565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506135b5565b989091929394959662ffffff98506136086120b5600c8416603f9060021c1690565b918215613672575b6003168015613661575b9081906136459061363d908781013560e81c906003019c168c01809c8989611f56565b90898b613134565b911115613658575b906134449291613be6565b9982019961364d565b50600281019084013560f01c61361a565b8482013560f81c9250600190910190613610565b9750976136dc6136e9929394959697600f6136f193169085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290830180938686611f56565b908688613134565b9061345e92980198600052602052604060002090565b985096509394929391929091908082013590602001968015613464579061345e91600052602052604060002090565b909192939495969750600389169788156138e2575b8084013560601c996137aa916014019061376a9060021c6003166120b5565b9085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9081019061380e60208c6137c085858b8b611f56565b919073ffffffffffffffffffffffffffffffffffffffff8c604051968795869485937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611989565b0392165afa90811561107e577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000916000916138c4575b50160361388057509060ff61344492991680910199613b7b565b6108eb6138918c9389938989611f56565b906040519485947fb2fed7ae000000000000000000000000000000000000000000000000000000008652600486016130f3565b6138dc915060203d8111611acb57611abd81836103f4565b38613866565b8381013560f81c985060010161374b565b98600f91929394959697985016968715613922575b60148101976134449160ff9091169084013560601c613b7b565b8281013560f81c9750600101613908565b98509091929394959698600f16978815613985575b506020600061395b6135649a9b86613b38565b9c90916040519384938c859094939260ff6060936080840197845216602083015260408201520152565b60018101995083013560f81c97506020613948565b80151590816139a7575090565b90507fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8541490565b805160209091019060005b8181106139e75750505090565b82518452602093840193909201916001016139da565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0613a43613a2d83610471565b92613a3b60405194856103f4565b808452610471565b0136602083013760005b8351811015613b1f5780613a636001928661164b565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152613b0b610120826103f4565b519020613b18828561164b565b5201613a4d565b5090915060405161273d816127116020820180956139cf565b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff81116115bb5791565b90604051907fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208301937f53657175656e6365207369676e65723a0a000000000000000000000000000000855260601b16603183015260458201526045815261273d6065826103f4565b916040519160208301937f53657175656e6365206e657374656420636f6e6669673a0a000000000000000085526038840152605883015260788201526078815261273d6098826103f4565b60405160208101917f53657175656e636520737461746963206469676573743a0a0000000000000000835260388201526038815261273d6058826103f4565b61271161273d6126cf6126c9600060208601511515612c22565b60405160208101917f53657175656e636520616e792061646472657373207375626469676573743a0a835260408201526040815261273d6060826103f4565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e63652073617069656e7420636f6e6669673a0a00000000000000865260601b166039840152604d830152606d820152606d815261273d608d826103f456fea264697066735822122071c846bfb3a07ed1d03bb0cecee955d8b864be4c4d91b0f9a960528ecc060e8964736f6c634300081c0033", +} + +// WalletStage1ABI is the input ABI used to generate the binding from. +// Deprecated: Use WalletStage1MetaData.ABI instead. +var WalletStage1ABI = WalletStage1MetaData.ABI + +// WalletStage1Bin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use WalletStage1MetaData.Bin instead. +var WalletStage1Bin = WalletStage1MetaData.Bin + +// DeployWalletStage1 deploys a new Ethereum contract, binding an instance of WalletStage1 to it. +func DeployWalletStage1(auth *bind.TransactOpts, backend bind.ContractBackend, _factory common.Address, _entryPoint common.Address) (common.Address, *types.Transaction, *WalletStage1, error) { + parsed, err := WalletStage1MetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(WalletStage1Bin), backend, _factory, _entryPoint) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &WalletStage1{WalletStage1Caller: WalletStage1Caller{contract: contract}, WalletStage1Transactor: WalletStage1Transactor{contract: contract}, WalletStage1Filterer: WalletStage1Filterer{contract: contract}}, nil +} + +// WalletStage1 is an auto generated Go binding around an Ethereum contract. +type WalletStage1 struct { + WalletStage1Caller // Read-only binding to the contract + WalletStage1Transactor // Write-only binding to the contract + WalletStage1Filterer // Log filterer for contract events +} + +// WalletStage1Caller is an auto generated read-only Go binding around an Ethereum contract. +type WalletStage1Caller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// WalletStage1Transactor is an auto generated write-only Go binding around an Ethereum contract. +type WalletStage1Transactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// WalletStage1Filterer is an auto generated log filtering Go binding around an Ethereum contract events. +type WalletStage1Filterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// WalletStage1Session is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type WalletStage1Session struct { + Contract *WalletStage1 // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// WalletStage1CallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type WalletStage1CallerSession struct { + Contract *WalletStage1Caller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// WalletStage1TransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type WalletStage1TransactorSession struct { + Contract *WalletStage1Transactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// WalletStage1Raw is an auto generated low-level Go binding around an Ethereum contract. +type WalletStage1Raw struct { + Contract *WalletStage1 // Generic contract binding to access the raw methods on +} + +// WalletStage1CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type WalletStage1CallerRaw struct { + Contract *WalletStage1Caller // Generic read-only contract binding to access the raw methods on +} + +// WalletStage1TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type WalletStage1TransactorRaw struct { + Contract *WalletStage1Transactor // Generic write-only contract binding to access the raw methods on +} + +// NewWalletStage1 creates a new instance of WalletStage1, bound to a specific deployed contract. +func NewWalletStage1(address common.Address, backend bind.ContractBackend) (*WalletStage1, error) { + contract, err := bindWalletStage1(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &WalletStage1{WalletStage1Caller: WalletStage1Caller{contract: contract}, WalletStage1Transactor: WalletStage1Transactor{contract: contract}, WalletStage1Filterer: WalletStage1Filterer{contract: contract}}, nil +} + +// NewWalletStage1Caller creates a new read-only instance of WalletStage1, bound to a specific deployed contract. +func NewWalletStage1Caller(address common.Address, caller bind.ContractCaller) (*WalletStage1Caller, error) { + contract, err := bindWalletStage1(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &WalletStage1Caller{contract: contract}, nil +} + +// NewWalletStage1Transactor creates a new write-only instance of WalletStage1, bound to a specific deployed contract. +func NewWalletStage1Transactor(address common.Address, transactor bind.ContractTransactor) (*WalletStage1Transactor, error) { + contract, err := bindWalletStage1(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &WalletStage1Transactor{contract: contract}, nil +} + +// NewWalletStage1Filterer creates a new log filterer instance of WalletStage1, bound to a specific deployed contract. +func NewWalletStage1Filterer(address common.Address, filterer bind.ContractFilterer) (*WalletStage1Filterer, error) { + contract, err := bindWalletStage1(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &WalletStage1Filterer{contract: contract}, nil +} + +// bindWalletStage1 binds a generic wrapper to an already deployed contract. +func bindWalletStage1(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := WalletStage1MetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_WalletStage1 *WalletStage1Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _WalletStage1.Contract.WalletStage1Caller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_WalletStage1 *WalletStage1Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _WalletStage1.Contract.WalletStage1Transactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_WalletStage1 *WalletStage1Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _WalletStage1.Contract.WalletStage1Transactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_WalletStage1 *WalletStage1CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _WalletStage1.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_WalletStage1 *WalletStage1TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _WalletStage1.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_WalletStage1 *WalletStage1TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _WalletStage1.Contract.contract.Transact(opts, method, params...) +} + +// FACTORY is a free data retrieval call binding the contract method 0x2dd31000. +// +// Solidity: function FACTORY() view returns(address) +func (_WalletStage1 *WalletStage1Caller) FACTORY(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _WalletStage1.contract.Call(opts, &out, "FACTORY") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// FACTORY is a free data retrieval call binding the contract method 0x2dd31000. +// +// Solidity: function FACTORY() view returns(address) +func (_WalletStage1 *WalletStage1Session) FACTORY() (common.Address, error) { + return _WalletStage1.Contract.FACTORY(&_WalletStage1.CallOpts) +} + +// FACTORY is a free data retrieval call binding the contract method 0x2dd31000. +// +// Solidity: function FACTORY() view returns(address) +func (_WalletStage1 *WalletStage1CallerSession) FACTORY() (common.Address, error) { + return _WalletStage1.Contract.FACTORY(&_WalletStage1.CallOpts) +} + +// INITCODEHASH is a free data retrieval call binding the contract method 0x257671f5. +// +// Solidity: function INIT_CODE_HASH() view returns(bytes32) +func (_WalletStage1 *WalletStage1Caller) INITCODEHASH(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _WalletStage1.contract.Call(opts, &out, "INIT_CODE_HASH") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// INITCODEHASH is a free data retrieval call binding the contract method 0x257671f5. +// +// Solidity: function INIT_CODE_HASH() view returns(bytes32) +func (_WalletStage1 *WalletStage1Session) INITCODEHASH() ([32]byte, error) { + return _WalletStage1.Contract.INITCODEHASH(&_WalletStage1.CallOpts) +} + +// INITCODEHASH is a free data retrieval call binding the contract method 0x257671f5. +// +// Solidity: function INIT_CODE_HASH() view returns(bytes32) +func (_WalletStage1 *WalletStage1CallerSession) INITCODEHASH() ([32]byte, error) { + return _WalletStage1.Contract.INITCODEHASH(&_WalletStage1.CallOpts) +} + +// STAGE2IMPLEMENTATION is a free data retrieval call binding the contract method 0x9f69ef54. +// +// Solidity: function STAGE_2_IMPLEMENTATION() view returns(address) +func (_WalletStage1 *WalletStage1Caller) STAGE2IMPLEMENTATION(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _WalletStage1.contract.Call(opts, &out, "STAGE_2_IMPLEMENTATION") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// STAGE2IMPLEMENTATION is a free data retrieval call binding the contract method 0x9f69ef54. +// +// Solidity: function STAGE_2_IMPLEMENTATION() view returns(address) +func (_WalletStage1 *WalletStage1Session) STAGE2IMPLEMENTATION() (common.Address, error) { + return _WalletStage1.Contract.STAGE2IMPLEMENTATION(&_WalletStage1.CallOpts) +} + +// STAGE2IMPLEMENTATION is a free data retrieval call binding the contract method 0x9f69ef54. +// +// Solidity: function STAGE_2_IMPLEMENTATION() view returns(address) +func (_WalletStage1 *WalletStage1CallerSession) STAGE2IMPLEMENTATION() (common.Address, error) { + return _WalletStage1.Contract.STAGE2IMPLEMENTATION(&_WalletStage1.CallOpts) +} + +// Entrypoint is a free data retrieval call binding the contract method 0xa65d69d4. +// +// Solidity: function entrypoint() view returns(address) +func (_WalletStage1 *WalletStage1Caller) Entrypoint(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _WalletStage1.contract.Call(opts, &out, "entrypoint") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Entrypoint is a free data retrieval call binding the contract method 0xa65d69d4. +// +// Solidity: function entrypoint() view returns(address) +func (_WalletStage1 *WalletStage1Session) Entrypoint() (common.Address, error) { + return _WalletStage1.Contract.Entrypoint(&_WalletStage1.CallOpts) +} + +// Entrypoint is a free data retrieval call binding the contract method 0xa65d69d4. +// +// Solidity: function entrypoint() view returns(address) +func (_WalletStage1 *WalletStage1CallerSession) Entrypoint() (common.Address, error) { + return _WalletStage1.Contract.Entrypoint(&_WalletStage1.CallOpts) +} + +// GetImplementation is a free data retrieval call binding the contract method 0xaaf10f42. +// +// Solidity: function getImplementation() view returns(address) +func (_WalletStage1 *WalletStage1Caller) GetImplementation(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _WalletStage1.contract.Call(opts, &out, "getImplementation") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetImplementation is a free data retrieval call binding the contract method 0xaaf10f42. +// +// Solidity: function getImplementation() view returns(address) +func (_WalletStage1 *WalletStage1Session) GetImplementation() (common.Address, error) { + return _WalletStage1.Contract.GetImplementation(&_WalletStage1.CallOpts) +} + +// GetImplementation is a free data retrieval call binding the contract method 0xaaf10f42. +// +// Solidity: function getImplementation() view returns(address) +func (_WalletStage1 *WalletStage1CallerSession) GetImplementation() (common.Address, error) { + return _WalletStage1.Contract.GetImplementation(&_WalletStage1.CallOpts) +} + +// GetStaticSignature is a free data retrieval call binding the contract method 0x92dcb3fc. +// +// Solidity: function getStaticSignature(bytes32 _hash) view returns(address, uint256) +func (_WalletStage1 *WalletStage1Caller) GetStaticSignature(opts *bind.CallOpts, _hash [32]byte) (common.Address, *big.Int, error) { + var out []interface{} + err := _WalletStage1.contract.Call(opts, &out, "getStaticSignature", _hash) + + if err != nil { + return *new(common.Address), *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out1 := *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + + return out0, out1, err + +} + +// GetStaticSignature is a free data retrieval call binding the contract method 0x92dcb3fc. +// +// Solidity: function getStaticSignature(bytes32 _hash) view returns(address, uint256) +func (_WalletStage1 *WalletStage1Session) GetStaticSignature(_hash [32]byte) (common.Address, *big.Int, error) { + return _WalletStage1.Contract.GetStaticSignature(&_WalletStage1.CallOpts, _hash) +} + +// GetStaticSignature is a free data retrieval call binding the contract method 0x92dcb3fc. +// +// Solidity: function getStaticSignature(bytes32 _hash) view returns(address, uint256) +func (_WalletStage1 *WalletStage1CallerSession) GetStaticSignature(_hash [32]byte) (common.Address, *big.Int, error) { + return _WalletStage1.Contract.GetStaticSignature(&_WalletStage1.CallOpts, _hash) +} + +// IsValidSignature is a free data retrieval call binding the contract method 0x1626ba7e. +// +// Solidity: function isValidSignature(bytes32 _hash, bytes _signature) view returns(bytes4) +func (_WalletStage1 *WalletStage1Caller) IsValidSignature(opts *bind.CallOpts, _hash [32]byte, _signature []byte) ([4]byte, error) { + var out []interface{} + err := _WalletStage1.contract.Call(opts, &out, "isValidSignature", _hash, _signature) + + if err != nil { + return *new([4]byte), err + } + + out0 := *abi.ConvertType(out[0], new([4]byte)).(*[4]byte) + + return out0, err + +} + +// IsValidSignature is a free data retrieval call binding the contract method 0x1626ba7e. +// +// Solidity: function isValidSignature(bytes32 _hash, bytes _signature) view returns(bytes4) +func (_WalletStage1 *WalletStage1Session) IsValidSignature(_hash [32]byte, _signature []byte) ([4]byte, error) { + return _WalletStage1.Contract.IsValidSignature(&_WalletStage1.CallOpts, _hash, _signature) +} + +// IsValidSignature is a free data retrieval call binding the contract method 0x1626ba7e. +// +// Solidity: function isValidSignature(bytes32 _hash, bytes _signature) view returns(bytes4) +func (_WalletStage1 *WalletStage1CallerSession) IsValidSignature(_hash [32]byte, _signature []byte) ([4]byte, error) { + return _WalletStage1.Contract.IsValidSignature(&_WalletStage1.CallOpts, _hash, _signature) +} + +// OnERC1155BatchReceived is a free data retrieval call binding the contract method 0xbc197c81. +// +// Solidity: function onERC1155BatchReceived(address , address , uint256[] , uint256[] , bytes ) pure returns(bytes4) +func (_WalletStage1 *WalletStage1Caller) OnERC1155BatchReceived(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address, arg2 []*big.Int, arg3 []*big.Int, arg4 []byte) ([4]byte, error) { + var out []interface{} + err := _WalletStage1.contract.Call(opts, &out, "onERC1155BatchReceived", arg0, arg1, arg2, arg3, arg4) + + if err != nil { + return *new([4]byte), err + } + + out0 := *abi.ConvertType(out[0], new([4]byte)).(*[4]byte) + + return out0, err + +} + +// OnERC1155BatchReceived is a free data retrieval call binding the contract method 0xbc197c81. +// +// Solidity: function onERC1155BatchReceived(address , address , uint256[] , uint256[] , bytes ) pure returns(bytes4) +func (_WalletStage1 *WalletStage1Session) OnERC1155BatchReceived(arg0 common.Address, arg1 common.Address, arg2 []*big.Int, arg3 []*big.Int, arg4 []byte) ([4]byte, error) { + return _WalletStage1.Contract.OnERC1155BatchReceived(&_WalletStage1.CallOpts, arg0, arg1, arg2, arg3, arg4) +} + +// OnERC1155BatchReceived is a free data retrieval call binding the contract method 0xbc197c81. +// +// Solidity: function onERC1155BatchReceived(address , address , uint256[] , uint256[] , bytes ) pure returns(bytes4) +func (_WalletStage1 *WalletStage1CallerSession) OnERC1155BatchReceived(arg0 common.Address, arg1 common.Address, arg2 []*big.Int, arg3 []*big.Int, arg4 []byte) ([4]byte, error) { + return _WalletStage1.Contract.OnERC1155BatchReceived(&_WalletStage1.CallOpts, arg0, arg1, arg2, arg3, arg4) +} + +// OnERC1155Received is a free data retrieval call binding the contract method 0xf23a6e61. +// +// Solidity: function onERC1155Received(address , address , uint256 , uint256 , bytes ) pure returns(bytes4) +func (_WalletStage1 *WalletStage1Caller) OnERC1155Received(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address, arg2 *big.Int, arg3 *big.Int, arg4 []byte) ([4]byte, error) { + var out []interface{} + err := _WalletStage1.contract.Call(opts, &out, "onERC1155Received", arg0, arg1, arg2, arg3, arg4) + + if err != nil { + return *new([4]byte), err + } + + out0 := *abi.ConvertType(out[0], new([4]byte)).(*[4]byte) + + return out0, err + +} + +// OnERC1155Received is a free data retrieval call binding the contract method 0xf23a6e61. +// +// Solidity: function onERC1155Received(address , address , uint256 , uint256 , bytes ) pure returns(bytes4) +func (_WalletStage1 *WalletStage1Session) OnERC1155Received(arg0 common.Address, arg1 common.Address, arg2 *big.Int, arg3 *big.Int, arg4 []byte) ([4]byte, error) { + return _WalletStage1.Contract.OnERC1155Received(&_WalletStage1.CallOpts, arg0, arg1, arg2, arg3, arg4) +} + +// OnERC1155Received is a free data retrieval call binding the contract method 0xf23a6e61. +// +// Solidity: function onERC1155Received(address , address , uint256 , uint256 , bytes ) pure returns(bytes4) +func (_WalletStage1 *WalletStage1CallerSession) OnERC1155Received(arg0 common.Address, arg1 common.Address, arg2 *big.Int, arg3 *big.Int, arg4 []byte) ([4]byte, error) { + return _WalletStage1.Contract.OnERC1155Received(&_WalletStage1.CallOpts, arg0, arg1, arg2, arg3, arg4) +} + +// OnERC721Received is a free data retrieval call binding the contract method 0x150b7a02. +// +// Solidity: function onERC721Received(address , address , uint256 , bytes ) pure returns(bytes4) +func (_WalletStage1 *WalletStage1Caller) OnERC721Received(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address, arg2 *big.Int, arg3 []byte) ([4]byte, error) { + var out []interface{} + err := _WalletStage1.contract.Call(opts, &out, "onERC721Received", arg0, arg1, arg2, arg3) + + if err != nil { + return *new([4]byte), err + } + + out0 := *abi.ConvertType(out[0], new([4]byte)).(*[4]byte) + + return out0, err + +} + +// OnERC721Received is a free data retrieval call binding the contract method 0x150b7a02. +// +// Solidity: function onERC721Received(address , address , uint256 , bytes ) pure returns(bytes4) +func (_WalletStage1 *WalletStage1Session) OnERC721Received(arg0 common.Address, arg1 common.Address, arg2 *big.Int, arg3 []byte) ([4]byte, error) { + return _WalletStage1.Contract.OnERC721Received(&_WalletStage1.CallOpts, arg0, arg1, arg2, arg3) +} + +// OnERC721Received is a free data retrieval call binding the contract method 0x150b7a02. +// +// Solidity: function onERC721Received(address , address , uint256 , bytes ) pure returns(bytes4) +func (_WalletStage1 *WalletStage1CallerSession) OnERC721Received(arg0 common.Address, arg1 common.Address, arg2 *big.Int, arg3 []byte) ([4]byte, error) { + return _WalletStage1.Contract.OnERC721Received(&_WalletStage1.CallOpts, arg0, arg1, arg2, arg3) +} + +// ReadHook is a free data retrieval call binding the contract method 0x1a9b2337. +// +// Solidity: function readHook(bytes4 selector) view returns(address) +func (_WalletStage1 *WalletStage1Caller) ReadHook(opts *bind.CallOpts, selector [4]byte) (common.Address, error) { + var out []interface{} + err := _WalletStage1.contract.Call(opts, &out, "readHook", selector) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// ReadHook is a free data retrieval call binding the contract method 0x1a9b2337. +// +// Solidity: function readHook(bytes4 selector) view returns(address) +func (_WalletStage1 *WalletStage1Session) ReadHook(selector [4]byte) (common.Address, error) { + return _WalletStage1.Contract.ReadHook(&_WalletStage1.CallOpts, selector) +} + +// ReadHook is a free data retrieval call binding the contract method 0x1a9b2337. +// +// Solidity: function readHook(bytes4 selector) view returns(address) +func (_WalletStage1 *WalletStage1CallerSession) ReadHook(selector [4]byte) (common.Address, error) { + return _WalletStage1.Contract.ReadHook(&_WalletStage1.CallOpts, selector) +} + +// ReadNonce is a free data retrieval call binding the contract method 0x8c3f5563. +// +// Solidity: function readNonce(uint256 _space) view returns(uint256) +func (_WalletStage1 *WalletStage1Caller) ReadNonce(opts *bind.CallOpts, _space *big.Int) (*big.Int, error) { + var out []interface{} + err := _WalletStage1.contract.Call(opts, &out, "readNonce", _space) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// ReadNonce is a free data retrieval call binding the contract method 0x8c3f5563. +// +// Solidity: function readNonce(uint256 _space) view returns(uint256) +func (_WalletStage1 *WalletStage1Session) ReadNonce(_space *big.Int) (*big.Int, error) { + return _WalletStage1.Contract.ReadNonce(&_WalletStage1.CallOpts, _space) +} + +// ReadNonce is a free data retrieval call binding the contract method 0x8c3f5563. +// +// Solidity: function readNonce(uint256 _space) view returns(uint256) +func (_WalletStage1 *WalletStage1CallerSession) ReadNonce(_space *big.Int) (*big.Int, error) { + return _WalletStage1.Contract.ReadNonce(&_WalletStage1.CallOpts, _space) +} + +// RecoverPartialSignature is a free data retrieval call binding the contract method 0xad55366b. +// +// Solidity: function recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]) _payload, bytes _signature) view returns(uint256 threshold, uint256 weight, bool isValidImage, bytes32 imageHash, uint256 checkpoint, bytes32 opHash) +func (_WalletStage1 *WalletStage1Caller) RecoverPartialSignature(opts *bind.CallOpts, _payload PayloadDecoded, _signature []byte) (struct { + Threshold *big.Int + Weight *big.Int + IsValidImage bool + ImageHash [32]byte + Checkpoint *big.Int + OpHash [32]byte +}, error) { + var out []interface{} + err := _WalletStage1.contract.Call(opts, &out, "recoverPartialSignature", _payload, _signature) + + outstruct := new(struct { + Threshold *big.Int + Weight *big.Int + IsValidImage bool + ImageHash [32]byte + Checkpoint *big.Int + OpHash [32]byte + }) + if err != nil { + return *outstruct, err + } + + outstruct.Threshold = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.Weight = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + outstruct.IsValidImage = *abi.ConvertType(out[2], new(bool)).(*bool) + outstruct.ImageHash = *abi.ConvertType(out[3], new([32]byte)).(*[32]byte) + outstruct.Checkpoint = *abi.ConvertType(out[4], new(*big.Int)).(**big.Int) + outstruct.OpHash = *abi.ConvertType(out[5], new([32]byte)).(*[32]byte) + + return *outstruct, err + +} + +// RecoverPartialSignature is a free data retrieval call binding the contract method 0xad55366b. +// +// Solidity: function recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]) _payload, bytes _signature) view returns(uint256 threshold, uint256 weight, bool isValidImage, bytes32 imageHash, uint256 checkpoint, bytes32 opHash) +func (_WalletStage1 *WalletStage1Session) RecoverPartialSignature(_payload PayloadDecoded, _signature []byte) (struct { + Threshold *big.Int + Weight *big.Int + IsValidImage bool + ImageHash [32]byte + Checkpoint *big.Int + OpHash [32]byte +}, error) { + return _WalletStage1.Contract.RecoverPartialSignature(&_WalletStage1.CallOpts, _payload, _signature) +} + +// RecoverPartialSignature is a free data retrieval call binding the contract method 0xad55366b. +// +// Solidity: function recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]) _payload, bytes _signature) view returns(uint256 threshold, uint256 weight, bool isValidImage, bytes32 imageHash, uint256 checkpoint, bytes32 opHash) +func (_WalletStage1 *WalletStage1CallerSession) RecoverPartialSignature(_payload PayloadDecoded, _signature []byte) (struct { + Threshold *big.Int + Weight *big.Int + IsValidImage bool + ImageHash [32]byte + Checkpoint *big.Int + OpHash [32]byte +}, error) { + return _WalletStage1.Contract.RecoverPartialSignature(&_WalletStage1.CallOpts, _payload, _signature) +} + +// RecoverSapientSignature is a free data retrieval call binding the contract method 0x13792a4a. +// +// Solidity: function recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]) _payload, bytes _signature) view returns(bytes32) +func (_WalletStage1 *WalletStage1Caller) RecoverSapientSignature(opts *bind.CallOpts, _payload PayloadDecoded, _signature []byte) ([32]byte, error) { + var out []interface{} + err := _WalletStage1.contract.Call(opts, &out, "recoverSapientSignature", _payload, _signature) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// RecoverSapientSignature is a free data retrieval call binding the contract method 0x13792a4a. +// +// Solidity: function recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]) _payload, bytes _signature) view returns(bytes32) +func (_WalletStage1 *WalletStage1Session) RecoverSapientSignature(_payload PayloadDecoded, _signature []byte) ([32]byte, error) { + return _WalletStage1.Contract.RecoverSapientSignature(&_WalletStage1.CallOpts, _payload, _signature) +} + +// RecoverSapientSignature is a free data retrieval call binding the contract method 0x13792a4a. +// +// Solidity: function recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]) _payload, bytes _signature) view returns(bytes32) +func (_WalletStage1 *WalletStage1CallerSession) RecoverSapientSignature(_payload PayloadDecoded, _signature []byte) ([32]byte, error) { + return _WalletStage1.Contract.RecoverSapientSignature(&_WalletStage1.CallOpts, _payload, _signature) +} + +// TokenReceived is a free data retrieval call binding the contract method 0x8943ec02. +// +// Solidity: function tokenReceived(address , uint256 , bytes ) pure returns(bytes4) +func (_WalletStage1 *WalletStage1Caller) TokenReceived(opts *bind.CallOpts, arg0 common.Address, arg1 *big.Int, arg2 []byte) ([4]byte, error) { + var out []interface{} + err := _WalletStage1.contract.Call(opts, &out, "tokenReceived", arg0, arg1, arg2) + + if err != nil { + return *new([4]byte), err + } + + out0 := *abi.ConvertType(out[0], new([4]byte)).(*[4]byte) + + return out0, err + +} + +// TokenReceived is a free data retrieval call binding the contract method 0x8943ec02. +// +// Solidity: function tokenReceived(address , uint256 , bytes ) pure returns(bytes4) +func (_WalletStage1 *WalletStage1Session) TokenReceived(arg0 common.Address, arg1 *big.Int, arg2 []byte) ([4]byte, error) { + return _WalletStage1.Contract.TokenReceived(&_WalletStage1.CallOpts, arg0, arg1, arg2) +} + +// TokenReceived is a free data retrieval call binding the contract method 0x8943ec02. +// +// Solidity: function tokenReceived(address , uint256 , bytes ) pure returns(bytes4) +func (_WalletStage1 *WalletStage1CallerSession) TokenReceived(arg0 common.Address, arg1 *big.Int, arg2 []byte) ([4]byte, error) { + return _WalletStage1.Contract.TokenReceived(&_WalletStage1.CallOpts, arg0, arg1, arg2) +} + +// AddHook is a paid mutator transaction binding the contract method 0xb93ea7ad. +// +// Solidity: function addHook(bytes4 selector, address implementation) payable returns() +func (_WalletStage1 *WalletStage1Transactor) AddHook(opts *bind.TransactOpts, selector [4]byte, implementation common.Address) (*types.Transaction, error) { + return _WalletStage1.contract.Transact(opts, "addHook", selector, implementation) +} + +// AddHook is a paid mutator transaction binding the contract method 0xb93ea7ad. +// +// Solidity: function addHook(bytes4 selector, address implementation) payable returns() +func (_WalletStage1 *WalletStage1Session) AddHook(selector [4]byte, implementation common.Address) (*types.Transaction, error) { + return _WalletStage1.Contract.AddHook(&_WalletStage1.TransactOpts, selector, implementation) +} + +// AddHook is a paid mutator transaction binding the contract method 0xb93ea7ad. +// +// Solidity: function addHook(bytes4 selector, address implementation) payable returns() +func (_WalletStage1 *WalletStage1TransactorSession) AddHook(selector [4]byte, implementation common.Address) (*types.Transaction, error) { + return _WalletStage1.Contract.AddHook(&_WalletStage1.TransactOpts, selector, implementation) +} + +// Execute is a paid mutator transaction binding the contract method 0x1f6a1eb9. +// +// Solidity: function execute(bytes _payload, bytes _signature) payable returns() +func (_WalletStage1 *WalletStage1Transactor) Execute(opts *bind.TransactOpts, _payload []byte, _signature []byte) (*types.Transaction, error) { + return _WalletStage1.contract.Transact(opts, "execute", _payload, _signature) +} + +// Execute is a paid mutator transaction binding the contract method 0x1f6a1eb9. +// +// Solidity: function execute(bytes _payload, bytes _signature) payable returns() +func (_WalletStage1 *WalletStage1Session) Execute(_payload []byte, _signature []byte) (*types.Transaction, error) { + return _WalletStage1.Contract.Execute(&_WalletStage1.TransactOpts, _payload, _signature) +} + +// Execute is a paid mutator transaction binding the contract method 0x1f6a1eb9. +// +// Solidity: function execute(bytes _payload, bytes _signature) payable returns() +func (_WalletStage1 *WalletStage1TransactorSession) Execute(_payload []byte, _signature []byte) (*types.Transaction, error) { + return _WalletStage1.Contract.Execute(&_WalletStage1.TransactOpts, _payload, _signature) +} + +// ExecuteUserOp is a paid mutator transaction binding the contract method 0x9c145aed. +// +// Solidity: function executeUserOp(bytes _payload) returns() +func (_WalletStage1 *WalletStage1Transactor) ExecuteUserOp(opts *bind.TransactOpts, _payload []byte) (*types.Transaction, error) { + return _WalletStage1.contract.Transact(opts, "executeUserOp", _payload) +} + +// ExecuteUserOp is a paid mutator transaction binding the contract method 0x9c145aed. +// +// Solidity: function executeUserOp(bytes _payload) returns() +func (_WalletStage1 *WalletStage1Session) ExecuteUserOp(_payload []byte) (*types.Transaction, error) { + return _WalletStage1.Contract.ExecuteUserOp(&_WalletStage1.TransactOpts, _payload) +} + +// ExecuteUserOp is a paid mutator transaction binding the contract method 0x9c145aed. +// +// Solidity: function executeUserOp(bytes _payload) returns() +func (_WalletStage1 *WalletStage1TransactorSession) ExecuteUserOp(_payload []byte) (*types.Transaction, error) { + return _WalletStage1.Contract.ExecuteUserOp(&_WalletStage1.TransactOpts, _payload) +} + +// RemoveHook is a paid mutator transaction binding the contract method 0x4fcf3eca. +// +// Solidity: function removeHook(bytes4 selector) payable returns() +func (_WalletStage1 *WalletStage1Transactor) RemoveHook(opts *bind.TransactOpts, selector [4]byte) (*types.Transaction, error) { + return _WalletStage1.contract.Transact(opts, "removeHook", selector) +} + +// RemoveHook is a paid mutator transaction binding the contract method 0x4fcf3eca. +// +// Solidity: function removeHook(bytes4 selector) payable returns() +func (_WalletStage1 *WalletStage1Session) RemoveHook(selector [4]byte) (*types.Transaction, error) { + return _WalletStage1.Contract.RemoveHook(&_WalletStage1.TransactOpts, selector) +} + +// RemoveHook is a paid mutator transaction binding the contract method 0x4fcf3eca. +// +// Solidity: function removeHook(bytes4 selector) payable returns() +func (_WalletStage1 *WalletStage1TransactorSession) RemoveHook(selector [4]byte) (*types.Transaction, error) { + return _WalletStage1.Contract.RemoveHook(&_WalletStage1.TransactOpts, selector) +} + +// SelfExecute is a paid mutator transaction binding the contract method 0x6ea44577. +// +// Solidity: function selfExecute(bytes _payload) payable returns() +func (_WalletStage1 *WalletStage1Transactor) SelfExecute(opts *bind.TransactOpts, _payload []byte) (*types.Transaction, error) { + return _WalletStage1.contract.Transact(opts, "selfExecute", _payload) +} + +// SelfExecute is a paid mutator transaction binding the contract method 0x6ea44577. +// +// Solidity: function selfExecute(bytes _payload) payable returns() +func (_WalletStage1 *WalletStage1Session) SelfExecute(_payload []byte) (*types.Transaction, error) { + return _WalletStage1.Contract.SelfExecute(&_WalletStage1.TransactOpts, _payload) +} + +// SelfExecute is a paid mutator transaction binding the contract method 0x6ea44577. +// +// Solidity: function selfExecute(bytes _payload) payable returns() +func (_WalletStage1 *WalletStage1TransactorSession) SelfExecute(_payload []byte) (*types.Transaction, error) { + return _WalletStage1.Contract.SelfExecute(&_WalletStage1.TransactOpts, _payload) +} + +// SetStaticSignature is a paid mutator transaction binding the contract method 0xf727ef1c. +// +// Solidity: function setStaticSignature(bytes32 _hash, address _address, uint96 _timestamp) returns() +func (_WalletStage1 *WalletStage1Transactor) SetStaticSignature(opts *bind.TransactOpts, _hash [32]byte, _address common.Address, _timestamp *big.Int) (*types.Transaction, error) { + return _WalletStage1.contract.Transact(opts, "setStaticSignature", _hash, _address, _timestamp) +} + +// SetStaticSignature is a paid mutator transaction binding the contract method 0xf727ef1c. +// +// Solidity: function setStaticSignature(bytes32 _hash, address _address, uint96 _timestamp) returns() +func (_WalletStage1 *WalletStage1Session) SetStaticSignature(_hash [32]byte, _address common.Address, _timestamp *big.Int) (*types.Transaction, error) { + return _WalletStage1.Contract.SetStaticSignature(&_WalletStage1.TransactOpts, _hash, _address, _timestamp) +} + +// SetStaticSignature is a paid mutator transaction binding the contract method 0xf727ef1c. +// +// Solidity: function setStaticSignature(bytes32 _hash, address _address, uint96 _timestamp) returns() +func (_WalletStage1 *WalletStage1TransactorSession) SetStaticSignature(_hash [32]byte, _address common.Address, _timestamp *big.Int) (*types.Transaction, error) { + return _WalletStage1.Contract.SetStaticSignature(&_WalletStage1.TransactOpts, _hash, _address, _timestamp) +} + +// TokensReceived is a paid mutator transaction binding the contract method 0x0023de29. +// +// Solidity: function tokensReceived(address operator, address from, address to, uint256 amount, bytes data, bytes operatorData) returns() +func (_WalletStage1 *WalletStage1Transactor) TokensReceived(opts *bind.TransactOpts, operator common.Address, from common.Address, to common.Address, amount *big.Int, data []byte, operatorData []byte) (*types.Transaction, error) { + return _WalletStage1.contract.Transact(opts, "tokensReceived", operator, from, to, amount, data, operatorData) +} + +// TokensReceived is a paid mutator transaction binding the contract method 0x0023de29. +// +// Solidity: function tokensReceived(address operator, address from, address to, uint256 amount, bytes data, bytes operatorData) returns() +func (_WalletStage1 *WalletStage1Session) TokensReceived(operator common.Address, from common.Address, to common.Address, amount *big.Int, data []byte, operatorData []byte) (*types.Transaction, error) { + return _WalletStage1.Contract.TokensReceived(&_WalletStage1.TransactOpts, operator, from, to, amount, data, operatorData) +} + +// TokensReceived is a paid mutator transaction binding the contract method 0x0023de29. +// +// Solidity: function tokensReceived(address operator, address from, address to, uint256 amount, bytes data, bytes operatorData) returns() +func (_WalletStage1 *WalletStage1TransactorSession) TokensReceived(operator common.Address, from common.Address, to common.Address, amount *big.Int, data []byte, operatorData []byte) (*types.Transaction, error) { + return _WalletStage1.Contract.TokensReceived(&_WalletStage1.TransactOpts, operator, from, to, amount, data, operatorData) +} + +// UpdateImageHash is a paid mutator transaction binding the contract method 0x29561426. +// +// Solidity: function updateImageHash(bytes32 _imageHash) returns() +func (_WalletStage1 *WalletStage1Transactor) UpdateImageHash(opts *bind.TransactOpts, _imageHash [32]byte) (*types.Transaction, error) { + return _WalletStage1.contract.Transact(opts, "updateImageHash", _imageHash) +} + +// UpdateImageHash is a paid mutator transaction binding the contract method 0x29561426. +// +// Solidity: function updateImageHash(bytes32 _imageHash) returns() +func (_WalletStage1 *WalletStage1Session) UpdateImageHash(_imageHash [32]byte) (*types.Transaction, error) { + return _WalletStage1.Contract.UpdateImageHash(&_WalletStage1.TransactOpts, _imageHash) +} + +// UpdateImageHash is a paid mutator transaction binding the contract method 0x29561426. +// +// Solidity: function updateImageHash(bytes32 _imageHash) returns() +func (_WalletStage1 *WalletStage1TransactorSession) UpdateImageHash(_imageHash [32]byte) (*types.Transaction, error) { + return _WalletStage1.Contract.UpdateImageHash(&_WalletStage1.TransactOpts, _imageHash) +} + +// UpdateImplementation is a paid mutator transaction binding the contract method 0x025b22bc. +// +// Solidity: function updateImplementation(address _implementation) payable returns() +func (_WalletStage1 *WalletStage1Transactor) UpdateImplementation(opts *bind.TransactOpts, _implementation common.Address) (*types.Transaction, error) { + return _WalletStage1.contract.Transact(opts, "updateImplementation", _implementation) +} + +// UpdateImplementation is a paid mutator transaction binding the contract method 0x025b22bc. +// +// Solidity: function updateImplementation(address _implementation) payable returns() +func (_WalletStage1 *WalletStage1Session) UpdateImplementation(_implementation common.Address) (*types.Transaction, error) { + return _WalletStage1.Contract.UpdateImplementation(&_WalletStage1.TransactOpts, _implementation) +} + +// UpdateImplementation is a paid mutator transaction binding the contract method 0x025b22bc. +// +// Solidity: function updateImplementation(address _implementation) payable returns() +func (_WalletStage1 *WalletStage1TransactorSession) UpdateImplementation(_implementation common.Address) (*types.Transaction, error) { + return _WalletStage1.Contract.UpdateImplementation(&_WalletStage1.TransactOpts, _implementation) +} + +// ValidateUserOp is a paid mutator transaction binding the contract method 0x19822f7c. +// +// Solidity: function validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes) userOp, bytes32 userOpHash, uint256 missingAccountFunds) returns(uint256 validationData) +func (_WalletStage1 *WalletStage1Transactor) ValidateUserOp(opts *bind.TransactOpts, userOp PackedUserOperation, userOpHash [32]byte, missingAccountFunds *big.Int) (*types.Transaction, error) { + return _WalletStage1.contract.Transact(opts, "validateUserOp", userOp, userOpHash, missingAccountFunds) +} + +// ValidateUserOp is a paid mutator transaction binding the contract method 0x19822f7c. +// +// Solidity: function validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes) userOp, bytes32 userOpHash, uint256 missingAccountFunds) returns(uint256 validationData) +func (_WalletStage1 *WalletStage1Session) ValidateUserOp(userOp PackedUserOperation, userOpHash [32]byte, missingAccountFunds *big.Int) (*types.Transaction, error) { + return _WalletStage1.Contract.ValidateUserOp(&_WalletStage1.TransactOpts, userOp, userOpHash, missingAccountFunds) +} + +// ValidateUserOp is a paid mutator transaction binding the contract method 0x19822f7c. +// +// Solidity: function validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes) userOp, bytes32 userOpHash, uint256 missingAccountFunds) returns(uint256 validationData) +func (_WalletStage1 *WalletStage1TransactorSession) ValidateUserOp(userOp PackedUserOperation, userOpHash [32]byte, missingAccountFunds *big.Int) (*types.Transaction, error) { + return _WalletStage1.Contract.ValidateUserOp(&_WalletStage1.TransactOpts, userOp, userOpHash, missingAccountFunds) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_WalletStage1 *WalletStage1Transactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) { + return _WalletStage1.contract.RawTransact(opts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_WalletStage1 *WalletStage1Session) Fallback(calldata []byte) (*types.Transaction, error) { + return _WalletStage1.Contract.Fallback(&_WalletStage1.TransactOpts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_WalletStage1 *WalletStage1TransactorSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _WalletStage1.Contract.Fallback(&_WalletStage1.TransactOpts, calldata) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_WalletStage1 *WalletStage1Transactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _WalletStage1.contract.RawTransact(opts, nil) // calldata is disallowed for receive function +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_WalletStage1 *WalletStage1Session) Receive() (*types.Transaction, error) { + return _WalletStage1.Contract.Receive(&_WalletStage1.TransactOpts) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_WalletStage1 *WalletStage1TransactorSession) Receive() (*types.Transaction, error) { + return _WalletStage1.Contract.Receive(&_WalletStage1.TransactOpts) +} + +// WalletStage1CallAbortedIterator is returned from FilterCallAborted and is used to iterate over the raw logs and unpacked data for CallAborted events raised by the WalletStage1 contract. +type WalletStage1CallAbortedIterator struct { + Event *WalletStage1CallAborted // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WalletStage1CallAbortedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WalletStage1CallAborted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WalletStage1CallAborted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WalletStage1CallAbortedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WalletStage1CallAbortedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WalletStage1CallAborted represents a CallAborted event raised by the WalletStage1 contract. +type WalletStage1CallAborted struct { + OpHash [32]byte + Index *big.Int + ReturnData []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterCallAborted is a free log retrieval operation binding the contract event 0xc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b. +// +// Solidity: event CallAborted(bytes32 _opHash, uint256 _index, bytes _returnData) +func (_WalletStage1 *WalletStage1Filterer) FilterCallAborted(opts *bind.FilterOpts) (*WalletStage1CallAbortedIterator, error) { + + logs, sub, err := _WalletStage1.contract.FilterLogs(opts, "CallAborted") + if err != nil { + return nil, err + } + return &WalletStage1CallAbortedIterator{contract: _WalletStage1.contract, event: "CallAborted", logs: logs, sub: sub}, nil +} + +// WatchCallAborted is a free log subscription operation binding the contract event 0xc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b. +// +// Solidity: event CallAborted(bytes32 _opHash, uint256 _index, bytes _returnData) +func (_WalletStage1 *WalletStage1Filterer) WatchCallAborted(opts *bind.WatchOpts, sink chan<- *WalletStage1CallAborted) (event.Subscription, error) { + + logs, sub, err := _WalletStage1.contract.WatchLogs(opts, "CallAborted") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WalletStage1CallAborted) + if err := _WalletStage1.contract.UnpackLog(event, "CallAborted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseCallAborted is a log parse operation binding the contract event 0xc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b. +// +// Solidity: event CallAborted(bytes32 _opHash, uint256 _index, bytes _returnData) +func (_WalletStage1 *WalletStage1Filterer) ParseCallAborted(log types.Log) (*WalletStage1CallAborted, error) { + event := new(WalletStage1CallAborted) + if err := _WalletStage1.contract.UnpackLog(event, "CallAborted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WalletStage1CallFailedIterator is returned from FilterCallFailed and is used to iterate over the raw logs and unpacked data for CallFailed events raised by the WalletStage1 contract. +type WalletStage1CallFailedIterator struct { + Event *WalletStage1CallFailed // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WalletStage1CallFailedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WalletStage1CallFailed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WalletStage1CallFailed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WalletStage1CallFailedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WalletStage1CallFailedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WalletStage1CallFailed represents a CallFailed event raised by the WalletStage1 contract. +type WalletStage1CallFailed struct { + OpHash [32]byte + Index *big.Int + ReturnData []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterCallFailed is a free log retrieval operation binding the contract event 0x115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d. +// +// Solidity: event CallFailed(bytes32 _opHash, uint256 _index, bytes _returnData) +func (_WalletStage1 *WalletStage1Filterer) FilterCallFailed(opts *bind.FilterOpts) (*WalletStage1CallFailedIterator, error) { + + logs, sub, err := _WalletStage1.contract.FilterLogs(opts, "CallFailed") + if err != nil { + return nil, err + } + return &WalletStage1CallFailedIterator{contract: _WalletStage1.contract, event: "CallFailed", logs: logs, sub: sub}, nil +} + +// WatchCallFailed is a free log subscription operation binding the contract event 0x115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d. +// +// Solidity: event CallFailed(bytes32 _opHash, uint256 _index, bytes _returnData) +func (_WalletStage1 *WalletStage1Filterer) WatchCallFailed(opts *bind.WatchOpts, sink chan<- *WalletStage1CallFailed) (event.Subscription, error) { + + logs, sub, err := _WalletStage1.contract.WatchLogs(opts, "CallFailed") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WalletStage1CallFailed) + if err := _WalletStage1.contract.UnpackLog(event, "CallFailed", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseCallFailed is a log parse operation binding the contract event 0x115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d. +// +// Solidity: event CallFailed(bytes32 _opHash, uint256 _index, bytes _returnData) +func (_WalletStage1 *WalletStage1Filterer) ParseCallFailed(log types.Log) (*WalletStage1CallFailed, error) { + event := new(WalletStage1CallFailed) + if err := _WalletStage1.contract.UnpackLog(event, "CallFailed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WalletStage1CallSkippedIterator is returned from FilterCallSkipped and is used to iterate over the raw logs and unpacked data for CallSkipped events raised by the WalletStage1 contract. +type WalletStage1CallSkippedIterator struct { + Event *WalletStage1CallSkipped // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WalletStage1CallSkippedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WalletStage1CallSkipped) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WalletStage1CallSkipped) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WalletStage1CallSkippedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WalletStage1CallSkippedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WalletStage1CallSkipped represents a CallSkipped event raised by the WalletStage1 contract. +type WalletStage1CallSkipped struct { + OpHash [32]byte + Index *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterCallSkipped is a free log retrieval operation binding the contract event 0x9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b. +// +// Solidity: event CallSkipped(bytes32 _opHash, uint256 _index) +func (_WalletStage1 *WalletStage1Filterer) FilterCallSkipped(opts *bind.FilterOpts) (*WalletStage1CallSkippedIterator, error) { + + logs, sub, err := _WalletStage1.contract.FilterLogs(opts, "CallSkipped") + if err != nil { + return nil, err + } + return &WalletStage1CallSkippedIterator{contract: _WalletStage1.contract, event: "CallSkipped", logs: logs, sub: sub}, nil +} + +// WatchCallSkipped is a free log subscription operation binding the contract event 0x9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b. +// +// Solidity: event CallSkipped(bytes32 _opHash, uint256 _index) +func (_WalletStage1 *WalletStage1Filterer) WatchCallSkipped(opts *bind.WatchOpts, sink chan<- *WalletStage1CallSkipped) (event.Subscription, error) { + + logs, sub, err := _WalletStage1.contract.WatchLogs(opts, "CallSkipped") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WalletStage1CallSkipped) + if err := _WalletStage1.contract.UnpackLog(event, "CallSkipped", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseCallSkipped is a log parse operation binding the contract event 0x9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b. +// +// Solidity: event CallSkipped(bytes32 _opHash, uint256 _index) +func (_WalletStage1 *WalletStage1Filterer) ParseCallSkipped(log types.Log) (*WalletStage1CallSkipped, error) { + event := new(WalletStage1CallSkipped) + if err := _WalletStage1.contract.UnpackLog(event, "CallSkipped", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WalletStage1CallSucceededIterator is returned from FilterCallSucceeded and is used to iterate over the raw logs and unpacked data for CallSucceeded events raised by the WalletStage1 contract. +type WalletStage1CallSucceededIterator struct { + Event *WalletStage1CallSucceeded // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WalletStage1CallSucceededIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WalletStage1CallSucceeded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WalletStage1CallSucceeded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WalletStage1CallSucceededIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WalletStage1CallSucceededIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WalletStage1CallSucceeded represents a CallSucceeded event raised by the WalletStage1 contract. +type WalletStage1CallSucceeded struct { + OpHash [32]byte + Index *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterCallSucceeded is a free log retrieval operation binding the contract event 0x5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a. +// +// Solidity: event CallSucceeded(bytes32 _opHash, uint256 _index) +func (_WalletStage1 *WalletStage1Filterer) FilterCallSucceeded(opts *bind.FilterOpts) (*WalletStage1CallSucceededIterator, error) { + + logs, sub, err := _WalletStage1.contract.FilterLogs(opts, "CallSucceeded") + if err != nil { + return nil, err + } + return &WalletStage1CallSucceededIterator{contract: _WalletStage1.contract, event: "CallSucceeded", logs: logs, sub: sub}, nil +} + +// WatchCallSucceeded is a free log subscription operation binding the contract event 0x5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a. +// +// Solidity: event CallSucceeded(bytes32 _opHash, uint256 _index) +func (_WalletStage1 *WalletStage1Filterer) WatchCallSucceeded(opts *bind.WatchOpts, sink chan<- *WalletStage1CallSucceeded) (event.Subscription, error) { + + logs, sub, err := _WalletStage1.contract.WatchLogs(opts, "CallSucceeded") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WalletStage1CallSucceeded) + if err := _WalletStage1.contract.UnpackLog(event, "CallSucceeded", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseCallSucceeded is a log parse operation binding the contract event 0x5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a. +// +// Solidity: event CallSucceeded(bytes32 _opHash, uint256 _index) +func (_WalletStage1 *WalletStage1Filterer) ParseCallSucceeded(log types.Log) (*WalletStage1CallSucceeded, error) { + event := new(WalletStage1CallSucceeded) + if err := _WalletStage1.contract.UnpackLog(event, "CallSucceeded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WalletStage1DefinedHookIterator is returned from FilterDefinedHook and is used to iterate over the raw logs and unpacked data for DefinedHook events raised by the WalletStage1 contract. +type WalletStage1DefinedHookIterator struct { + Event *WalletStage1DefinedHook // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WalletStage1DefinedHookIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WalletStage1DefinedHook) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WalletStage1DefinedHook) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WalletStage1DefinedHookIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WalletStage1DefinedHookIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WalletStage1DefinedHook represents a DefinedHook event raised by the WalletStage1 contract. +type WalletStage1DefinedHook struct { + Selector [4]byte + Implementation common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDefinedHook is a free log retrieval operation binding the contract event 0x0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed1. +// +// Solidity: event DefinedHook(bytes4 selector, address implementation) +func (_WalletStage1 *WalletStage1Filterer) FilterDefinedHook(opts *bind.FilterOpts) (*WalletStage1DefinedHookIterator, error) { + + logs, sub, err := _WalletStage1.contract.FilterLogs(opts, "DefinedHook") + if err != nil { + return nil, err + } + return &WalletStage1DefinedHookIterator{contract: _WalletStage1.contract, event: "DefinedHook", logs: logs, sub: sub}, nil +} + +// WatchDefinedHook is a free log subscription operation binding the contract event 0x0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed1. +// +// Solidity: event DefinedHook(bytes4 selector, address implementation) +func (_WalletStage1 *WalletStage1Filterer) WatchDefinedHook(opts *bind.WatchOpts, sink chan<- *WalletStage1DefinedHook) (event.Subscription, error) { + + logs, sub, err := _WalletStage1.contract.WatchLogs(opts, "DefinedHook") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WalletStage1DefinedHook) + if err := _WalletStage1.contract.UnpackLog(event, "DefinedHook", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseDefinedHook is a log parse operation binding the contract event 0x0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed1. +// +// Solidity: event DefinedHook(bytes4 selector, address implementation) +func (_WalletStage1 *WalletStage1Filterer) ParseDefinedHook(log types.Log) (*WalletStage1DefinedHook, error) { + event := new(WalletStage1DefinedHook) + if err := _WalletStage1.contract.UnpackLog(event, "DefinedHook", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WalletStage1ImageHashUpdatedIterator is returned from FilterImageHashUpdated and is used to iterate over the raw logs and unpacked data for ImageHashUpdated events raised by the WalletStage1 contract. +type WalletStage1ImageHashUpdatedIterator struct { + Event *WalletStage1ImageHashUpdated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WalletStage1ImageHashUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WalletStage1ImageHashUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WalletStage1ImageHashUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WalletStage1ImageHashUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WalletStage1ImageHashUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WalletStage1ImageHashUpdated represents a ImageHashUpdated event raised by the WalletStage1 contract. +type WalletStage1ImageHashUpdated struct { + NewImageHash [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterImageHashUpdated is a free log retrieval operation binding the contract event 0x307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa. +// +// Solidity: event ImageHashUpdated(bytes32 newImageHash) +func (_WalletStage1 *WalletStage1Filterer) FilterImageHashUpdated(opts *bind.FilterOpts) (*WalletStage1ImageHashUpdatedIterator, error) { + + logs, sub, err := _WalletStage1.contract.FilterLogs(opts, "ImageHashUpdated") + if err != nil { + return nil, err + } + return &WalletStage1ImageHashUpdatedIterator{contract: _WalletStage1.contract, event: "ImageHashUpdated", logs: logs, sub: sub}, nil +} + +// WatchImageHashUpdated is a free log subscription operation binding the contract event 0x307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa. +// +// Solidity: event ImageHashUpdated(bytes32 newImageHash) +func (_WalletStage1 *WalletStage1Filterer) WatchImageHashUpdated(opts *bind.WatchOpts, sink chan<- *WalletStage1ImageHashUpdated) (event.Subscription, error) { + + logs, sub, err := _WalletStage1.contract.WatchLogs(opts, "ImageHashUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WalletStage1ImageHashUpdated) + if err := _WalletStage1.contract.UnpackLog(event, "ImageHashUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseImageHashUpdated is a log parse operation binding the contract event 0x307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa. +// +// Solidity: event ImageHashUpdated(bytes32 newImageHash) +func (_WalletStage1 *WalletStage1Filterer) ParseImageHashUpdated(log types.Log) (*WalletStage1ImageHashUpdated, error) { + event := new(WalletStage1ImageHashUpdated) + if err := _WalletStage1.contract.UnpackLog(event, "ImageHashUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WalletStage1ImplementationUpdatedIterator is returned from FilterImplementationUpdated and is used to iterate over the raw logs and unpacked data for ImplementationUpdated events raised by the WalletStage1 contract. +type WalletStage1ImplementationUpdatedIterator struct { + Event *WalletStage1ImplementationUpdated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WalletStage1ImplementationUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WalletStage1ImplementationUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WalletStage1ImplementationUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WalletStage1ImplementationUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WalletStage1ImplementationUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WalletStage1ImplementationUpdated represents a ImplementationUpdated event raised by the WalletStage1 contract. +type WalletStage1ImplementationUpdated struct { + NewImplementation common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterImplementationUpdated is a free log retrieval operation binding the contract event 0x310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca03. +// +// Solidity: event ImplementationUpdated(address newImplementation) +func (_WalletStage1 *WalletStage1Filterer) FilterImplementationUpdated(opts *bind.FilterOpts) (*WalletStage1ImplementationUpdatedIterator, error) { + + logs, sub, err := _WalletStage1.contract.FilterLogs(opts, "ImplementationUpdated") + if err != nil { + return nil, err + } + return &WalletStage1ImplementationUpdatedIterator{contract: _WalletStage1.contract, event: "ImplementationUpdated", logs: logs, sub: sub}, nil +} + +// WatchImplementationUpdated is a free log subscription operation binding the contract event 0x310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca03. +// +// Solidity: event ImplementationUpdated(address newImplementation) +func (_WalletStage1 *WalletStage1Filterer) WatchImplementationUpdated(opts *bind.WatchOpts, sink chan<- *WalletStage1ImplementationUpdated) (event.Subscription, error) { + + logs, sub, err := _WalletStage1.contract.WatchLogs(opts, "ImplementationUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WalletStage1ImplementationUpdated) + if err := _WalletStage1.contract.UnpackLog(event, "ImplementationUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseImplementationUpdated is a log parse operation binding the contract event 0x310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca03. +// +// Solidity: event ImplementationUpdated(address newImplementation) +func (_WalletStage1 *WalletStage1Filterer) ParseImplementationUpdated(log types.Log) (*WalletStage1ImplementationUpdated, error) { + event := new(WalletStage1ImplementationUpdated) + if err := _WalletStage1.contract.UnpackLog(event, "ImplementationUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WalletStage1NonceChangeIterator is returned from FilterNonceChange and is used to iterate over the raw logs and unpacked data for NonceChange events raised by the WalletStage1 contract. +type WalletStage1NonceChangeIterator struct { + Event *WalletStage1NonceChange // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WalletStage1NonceChangeIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WalletStage1NonceChange) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WalletStage1NonceChange) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WalletStage1NonceChangeIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WalletStage1NonceChangeIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WalletStage1NonceChange represents a NonceChange event raised by the WalletStage1 contract. +type WalletStage1NonceChange struct { + Space *big.Int + NewNonce *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterNonceChange is a free log retrieval operation binding the contract event 0x1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f881. +// +// Solidity: event NonceChange(uint256 _space, uint256 _newNonce) +func (_WalletStage1 *WalletStage1Filterer) FilterNonceChange(opts *bind.FilterOpts) (*WalletStage1NonceChangeIterator, error) { + + logs, sub, err := _WalletStage1.contract.FilterLogs(opts, "NonceChange") + if err != nil { + return nil, err + } + return &WalletStage1NonceChangeIterator{contract: _WalletStage1.contract, event: "NonceChange", logs: logs, sub: sub}, nil +} + +// WatchNonceChange is a free log subscription operation binding the contract event 0x1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f881. +// +// Solidity: event NonceChange(uint256 _space, uint256 _newNonce) +func (_WalletStage1 *WalletStage1Filterer) WatchNonceChange(opts *bind.WatchOpts, sink chan<- *WalletStage1NonceChange) (event.Subscription, error) { + + logs, sub, err := _WalletStage1.contract.WatchLogs(opts, "NonceChange") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WalletStage1NonceChange) + if err := _WalletStage1.contract.UnpackLog(event, "NonceChange", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseNonceChange is a log parse operation binding the contract event 0x1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f881. +// +// Solidity: event NonceChange(uint256 _space, uint256 _newNonce) +func (_WalletStage1 *WalletStage1Filterer) ParseNonceChange(log types.Log) (*WalletStage1NonceChange, error) { + event := new(WalletStage1NonceChange) + if err := _WalletStage1.contract.UnpackLog(event, "NonceChange", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WalletStage1StaticSignatureSetIterator is returned from FilterStaticSignatureSet and is used to iterate over the raw logs and unpacked data for StaticSignatureSet events raised by the WalletStage1 contract. +type WalletStage1StaticSignatureSetIterator struct { + Event *WalletStage1StaticSignatureSet // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WalletStage1StaticSignatureSetIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WalletStage1StaticSignatureSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WalletStage1StaticSignatureSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WalletStage1StaticSignatureSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WalletStage1StaticSignatureSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WalletStage1StaticSignatureSet represents a StaticSignatureSet event raised by the WalletStage1 contract. +type WalletStage1StaticSignatureSet struct { + Hash [32]byte + Address common.Address + Timestamp *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterStaticSignatureSet is a free log retrieval operation binding the contract event 0xebf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1. +// +// Solidity: event StaticSignatureSet(bytes32 _hash, address _address, uint96 _timestamp) +func (_WalletStage1 *WalletStage1Filterer) FilterStaticSignatureSet(opts *bind.FilterOpts) (*WalletStage1StaticSignatureSetIterator, error) { + + logs, sub, err := _WalletStage1.contract.FilterLogs(opts, "StaticSignatureSet") + if err != nil { + return nil, err + } + return &WalletStage1StaticSignatureSetIterator{contract: _WalletStage1.contract, event: "StaticSignatureSet", logs: logs, sub: sub}, nil +} + +// WatchStaticSignatureSet is a free log subscription operation binding the contract event 0xebf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1. +// +// Solidity: event StaticSignatureSet(bytes32 _hash, address _address, uint96 _timestamp) +func (_WalletStage1 *WalletStage1Filterer) WatchStaticSignatureSet(opts *bind.WatchOpts, sink chan<- *WalletStage1StaticSignatureSet) (event.Subscription, error) { + + logs, sub, err := _WalletStage1.contract.WatchLogs(opts, "StaticSignatureSet") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WalletStage1StaticSignatureSet) + if err := _WalletStage1.contract.UnpackLog(event, "StaticSignatureSet", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseStaticSignatureSet is a log parse operation binding the contract event 0xebf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1. +// +// Solidity: event StaticSignatureSet(bytes32 _hash, address _address, uint96 _timestamp) +func (_WalletStage1 *WalletStage1Filterer) ParseStaticSignatureSet(log types.Log) (*WalletStage1StaticSignatureSet, error) { + event := new(WalletStage1StaticSignatureSet) + if err := _WalletStage1.contract.UnpackLog(event, "StaticSignatureSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/contracts/gen/v3/walletstage2/wallet_stage2.gen.go b/contracts/gen/v3/walletstage2/wallet_stage2.gen.go new file mode 100644 index 00000000..179e8d74 --- /dev/null +++ b/contracts/gen/v3/walletstage2/wallet_stage2.gen.go @@ -0,0 +1,2146 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package walletstage2 + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/0xsequence/ethkit/go-ethereum" + "github.com/0xsequence/ethkit/go-ethereum/accounts/abi" + "github.com/0xsequence/ethkit/go-ethereum/accounts/abi/bind" + "github.com/0xsequence/ethkit/go-ethereum/common" + "github.com/0xsequence/ethkit/go-ethereum/core/types" + "github.com/0xsequence/ethkit/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// PackedUserOperation is an auto generated low-level Go binding around an user-defined struct. +type PackedUserOperation struct { + Sender common.Address + Nonce *big.Int + InitCode []byte + CallData []byte + AccountGasLimits [32]byte + PreVerificationGas *big.Int + GasFees [32]byte + PaymasterAndData []byte + Signature []byte +} + +// PayloadCall is an auto generated low-level Go binding around an user-defined struct. +type PayloadCall struct { + To common.Address + Value *big.Int + Data []byte + GasLimit *big.Int + DelegateCall bool + OnlyFallback bool + BehaviorOnError *big.Int +} + +// PayloadDecoded is an auto generated low-level Go binding around an user-defined struct. +type PayloadDecoded struct { + Kind uint8 + NoChainId bool + Calls []PayloadCall + Space *big.Int + Nonce *big.Int + Message []byte + ImageHash [32]byte + Digest [32]byte + ParentWallets []common.Address +} + +// WalletStage2MetaData contains all meta data concerning the WalletStage2 contract. +var WalletStage2MetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_entryPoint\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"fallback\",\"stateMutability\":\"payable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"addHook\",\"inputs\":[{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"},{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"entrypoint\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"execute\",\"inputs\":[{\"name\":\"_payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"executeUserOp\",\"inputs\":[{\"name\":\"_payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getImplementation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStaticSignature\",\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"imageHash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isValidSignature\",\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"onERC1155BatchReceived\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"onERC1155Received\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"onERC721Received\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"readHook\",\"inputs\":[{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"readNonce\",\"inputs\":[{\"name\":\"_space\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"recoverPartialSignature\",\"inputs\":[{\"name\":\"_payload\",\"type\":\"tuple\",\"internalType\":\"structPayload.Decoded\",\"components\":[{\"name\":\"kind\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"noChainId\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"calls\",\"type\":\"tuple[]\",\"internalType\":\"structPayload.Call[]\",\"components\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"delegateCall\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"onlyFallback\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"behaviorOnError\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"space\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"imageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"parentWallets\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]},{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"threshold\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"weight\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"isValidImage\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"imageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"checkpoint\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"opHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"recoverSapientSignature\",\"inputs\":[{\"name\":\"_payload\",\"type\":\"tuple\",\"internalType\":\"structPayload.Decoded\",\"components\":[{\"name\":\"kind\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"noChainId\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"calls\",\"type\":\"tuple[]\",\"internalType\":\"structPayload.Call[]\",\"components\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"delegateCall\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"onlyFallback\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"behaviorOnError\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"space\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"imageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"parentWallets\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]},{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeHook\",\"inputs\":[{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"selfExecute\",\"inputs\":[{\"name\":\"_payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"setStaticSignature\",\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_address\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_timestamp\",\"type\":\"uint96\",\"internalType\":\"uint96\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"tokenReceived\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"tokensReceived\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operatorData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateImageHash\",\"inputs\":[{\"name\":\"_imageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateImplementation\",\"inputs\":[{\"name\":\"_implementation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"validateUserOp\",\"inputs\":[{\"name\":\"userOp\",\"type\":\"tuple\",\"internalType\":\"structPackedUserOperation\",\"components\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"initCode\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"callData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"accountGasLimits\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"preVerificationGas\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasFees\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"paymasterAndData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"userOpHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"missingAccountFunds\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"validationData\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"CallAborted\",\"inputs\":[{\"name\":\"_opHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"_index\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"_returnData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CallFailed\",\"inputs\":[{\"name\":\"_opHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"_index\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"_returnData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CallSkipped\",\"inputs\":[{\"name\":\"_opHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"_index\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CallSucceeded\",\"inputs\":[{\"name\":\"_opHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"_index\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DefinedHook\",\"inputs\":[{\"name\":\"selector\",\"type\":\"bytes4\",\"indexed\":false,\"internalType\":\"bytes4\"},{\"name\":\"implementation\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ImageHashUpdated\",\"inputs\":[{\"name\":\"newImageHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ImplementationUpdated\",\"inputs\":[{\"name\":\"newImplementation\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NonceChange\",\"inputs\":[{\"name\":\"_space\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"_newNonce\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StaticSignatureSet\",\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"_address\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"_timestamp\",\"type\":\"uint96\",\"indexed\":false,\"internalType\":\"uint96\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BadNonce\",\"inputs\":[{\"name\":\"_space\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_provided\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_current\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"ERC4337Disabled\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"HookAlreadyExists\",\"inputs\":[{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}]},{\"type\":\"error\",\"name\":\"HookDoesNotExist\",\"inputs\":[{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}]},{\"type\":\"error\",\"name\":\"ImageHashIsZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidERC1271Signature\",\"inputs\":[{\"name\":\"_opHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_signer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidEntryPoint\",\"inputs\":[{\"name\":\"_entrypoint\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"InvalidKind\",\"inputs\":[{\"name\":\"kind\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"type\":\"error\",\"name\":\"InvalidSapientSignature\",\"inputs\":[{\"name\":\"_payload\",\"type\":\"tuple\",\"internalType\":\"structPayload.Decoded\",\"components\":[{\"name\":\"kind\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"noChainId\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"calls\",\"type\":\"tuple[]\",\"internalType\":\"structPayload.Call[]\",\"components\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"delegateCall\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"onlyFallback\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"behaviorOnError\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"space\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"imageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"parentWallets\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]},{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidSignature\",\"inputs\":[{\"name\":\"_payload\",\"type\":\"tuple\",\"internalType\":\"structPayload.Decoded\",\"components\":[{\"name\":\"kind\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"noChainId\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"calls\",\"type\":\"tuple[]\",\"internalType\":\"structPayload.Call[]\",\"components\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"delegateCall\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"onlyFallback\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"behaviorOnError\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"space\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"imageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"parentWallets\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]},{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidSignatureFlag\",\"inputs\":[{\"name\":\"_flag\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidSignatureWeight\",\"inputs\":[{\"name\":\"_threshold\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_weight\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidStaticSignatureExpired\",\"inputs\":[{\"name\":\"_opHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_expires\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidStaticSignatureWrongCaller\",\"inputs\":[{\"name\":\"_opHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_caller\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_expectedCaller\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"LowWeightChainedSignature\",\"inputs\":[{\"name\":\"_signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_threshold\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_weight\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"NotEnoughGas\",\"inputs\":[{\"name\":\"_payload\",\"type\":\"tuple\",\"internalType\":\"structPayload.Decoded\",\"components\":[{\"name\":\"kind\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"noChainId\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"calls\",\"type\":\"tuple[]\",\"internalType\":\"structPayload.Call[]\",\"components\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"delegateCall\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"onlyFallback\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"behaviorOnError\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"space\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"imageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"parentWallets\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]},{\"name\":\"_index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_gasLeft\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"OnlySelf\",\"inputs\":[{\"name\":\"_sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"Reverted\",\"inputs\":[{\"name\":\"_payload\",\"type\":\"tuple\",\"internalType\":\"structPayload.Decoded\",\"components\":[{\"name\":\"kind\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"noChainId\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"calls\",\"type\":\"tuple[]\",\"internalType\":\"structPayload.Call[]\",\"components\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"delegateCall\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"onlyFallback\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"behaviorOnError\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"space\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"imageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"parentWallets\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]},{\"name\":\"_index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_returnData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"UnusedSnapshot\",\"inputs\":[{\"name\":\"_snapshot\",\"type\":\"tuple\",\"internalType\":\"structSnapshot\",\"components\":[{\"name\":\"imageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"checkpoint\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]},{\"type\":\"error\",\"name\":\"WrongChainedCheckpointOrder\",\"inputs\":[{\"name\":\"_nextCheckpoint\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_checkpoint\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]", + Bin: "0x60a034607457601f613dff38819003918201601f19168301916001600160401b03831184841017607957808492602094604052833981010312607457516001600160a01b0381168103607457608052604051613d6f90816100908239608051818181610fe90152818161112601526119ba0152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6080604052600436101561001e575b361561001c5761001c611b82565b005b60003560e01c806223de291461018d578063025b22bc1461018857806313792a4a14610183578063150b7a021461017e5780631626ba7e1461017957806319822f7c146101745780631a9b23371461016f5780631f6a1eb91461016a57806329561426146101655780634fcf3eca1461016057806351605d801461015b5780636ea44577146101565780638943ec02146101515780638c3f55631461014c57806392dcb3fc146101475780639c145aed14610142578063a65d69d41461013d578063aaf10f4214610138578063ad55366b14610133578063b93ea7ad1461012e578063bc197c8114610129578063f23a6e61146101245763f727ef1c0361000e576114a5565b611418565b611346565b6111e7565b61119b565b61114a565b6110db565b610fc3565b610f65565b610f29565b610ea5565b610e76565b610dd2565b610cb6565b610bfd565b610b1c565b610ab9565b610a04565b61097c565b6108ef565b6107f2565b6102db565b61024f565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101b557565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101b557565b6044359073ffffffffffffffffffffffffffffffffffffffff821682036101b557565b359073ffffffffffffffffffffffffffffffffffffffff821682036101b557565b9181601f840112156101b55782359167ffffffffffffffff83116101b557602083818601950101116101b557565b346101b55760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557610286610192565b5061028f6101ba565b506102986101dd565b5060843567ffffffffffffffff81116101b5576102b9903690600401610221565b505060a43567ffffffffffffffff81116101b55761001c903690600401610221565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55761030d610192565b30330361035a576020817f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca0392305573ffffffffffffffffffffffffffffffffffffffff60405191168152a1005b7fa19dbf00000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60e0810190811067ffffffffffffffff8211176103d357604052565b610388565b6040810190811067ffffffffffffffff8211176103d357604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176103d357604052565b6040519061044460e0836103f4565b565b60405190610444610120836103f4565b359060ff821682036101b557565b359081151582036101b557565b67ffffffffffffffff81116103d35760051b60200190565b67ffffffffffffffff81116103d357601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926104cf82610489565b916104dd60405193846103f4565b8294818452818301116101b5578281602093846000960137010152565b9080601f830112156101b557816020610515933591016104c3565b90565b81601f820112156101b55780359061052f82610471565b9261053d60405194856103f4565b82845260208085019360051b830101918183116101b55760208101935b83851061056957505050505090565b843567ffffffffffffffff81116101b557820160e07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082860301126101b5576105b0610435565b916105bd60208301610200565b83526040820135602084015260608201359267ffffffffffffffff84116101b55760e0836105f28860208098819801016104fa565b60408401526080810135606084015261060d60a08201610464565b608084015261061e60c08201610464565b60a0840152013560c082015281520194019361055a565b9080601f830112156101b557813561064c81610471565b9261065a60405194856103f4565b81845260208085019260051b8201019283116101b557602001905b8282106106825750505090565b6020809161068f84610200565b815201910190610675565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126101b55760043567ffffffffffffffff81116101b5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82850301126101b55761070c610446565b9061071981600401610456565b825261072760248201610464565b6020830152604481013567ffffffffffffffff81116101b55784600461074f92840101610518565b6040830152606481013560608301526084810135608083015260a481013567ffffffffffffffff81116101b55784600461078b928401016104fa565b60a083015260c481013560c083015260e481013560e083015261010481013567ffffffffffffffff81116101b557600485916107c8930101610635565b610100820152916024359067ffffffffffffffff82116101b5576107ee91600401610221565b9091565b346101b5576108003661069a565b909161010081019261081b6108168551516115ad565b6115cd565b9160005b85518051821015610882579061087c61085761083d8360019561164b565b5173ffffffffffffffffffffffffffffffffffffffff1690565b610861838861164b565b9073ffffffffffffffffffffffffffffffffffffffff169052565b0161081f565b5050838386610897336108618351518561164b565b526108a3818484611c54565b50156108b55760405160018152602090f35b6108eb906040519384937ff58cc8b5000000000000000000000000000000000000000000000000000000008552600485016118a6565b0390fd5b346101b55760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557610926610192565b5061092f6101ba565b5060643567ffffffffffffffff81116101b557610950903690600401610221565b505060206040517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b346101b55760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043560243567ffffffffffffffff81116101b5576020916109d46109da923690600401610221565b916118cb565b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b346101b55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043567ffffffffffffffff81116101b5576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126101b557610a87602091602435604435916004016119a0565b604051908152f35b7fffffffff000000000000000000000000000000000000000000000000000000008116036101b557565b346101b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576020610afe600435610af981610a8f565b611e39565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043567ffffffffffffffff81116101b557610b66903690600401610221565b9060243567ffffffffffffffff81116101b557610b8a610b94913690600401610221565b9190935a93611f6e565b91610ba86060840151608085015190612232565b610bb3828585611c54565b929015610bc5575061001c935061238b565b836108eb86926040519384937fa2b6d61b000000000000000000000000000000000000000000000000000000008552600485016118a6565b346101b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043530330361035a578015610c8c576020817f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa927fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf855604051908152a1005b7f4294d1270000000000000000000000000000000000000000000000000000000060005260046000fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557600435610cec81610a8f565b30330361035a5773ffffffffffffffffffffffffffffffffffffffff610d1182611e39565b1615610d775760407fffffffff000000000000000000000000000000000000000000000000000000007f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19216610d68600082612be3565b815190815260006020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f1c3812cc000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b60009103126101b557565b346101b55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760207fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf854604051908152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126101b5576004359067ffffffffffffffff82116101b5576107ee91600401610221565b610e7f36610e2d565b9030330361035a57610e9561001c925a92611f6e565b90610e9f826126af565b9061238b565b346101b55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557610edc610192565b5060443567ffffffffffffffff81116101b557610efd903690600401610221565b505060206040517f8943ec02000000000000000000000000000000000000000000000000000000008152f35b346101b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576020610a87600435612743565b346101b55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576040610fa1600435612789565b73ffffffffffffffffffffffffffffffffffffffff8351921682526020820152f35b346101b557610fd136610e2d565b9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001680156110b157330361108357303b156101b5576110579160009160405193849283927f6ea4457700000000000000000000000000000000000000000000000000000000845260048401611b41565b038183305af1801561107e5761106957005b80611078600061001c936103f4565b80610dc7565b611917565b7f1d6ddbf4000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b7fd13d78350000000000000000000000000000000000000000000000000000000060005260046000fd5b346101b55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b557602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101b55760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576020305473ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346101b55760c06111b76000806111b13661069a565b91612851565b926111c383929361399a565b906040519586526020860152151560408501526060840152608083015260a0820152f35b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55760043561121d81610a8f565b6112256101ba565b9030330361035a5773ffffffffffffffffffffffffffffffffffffffff61124b82611e39565b166112c5577f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19173ffffffffffffffffffffffffffffffffffffffff7fffffffff000000000000000000000000000000000000000000000000000000006040931691166112b88183612be3565b82519182526020820152a1005b7fffffffff00000000000000000000000000000000000000000000000000000000907f5b4d6d6a000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b9181601f840112156101b55782359167ffffffffffffffff83116101b5576020808501948460051b0101116101b557565b346101b55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55761137d610192565b506113866101ba565b5060443567ffffffffffffffff81116101b5576113a7903690600401611315565b505060643567ffffffffffffffff81116101b5576113c9903690600401611315565b505060843567ffffffffffffffff81116101b5576113eb903690600401610221565b50506040517fbc197c81000000000000000000000000000000000000000000000000000000008152602090f35b346101b55760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b55761144f610192565b506114586101ba565b5060843567ffffffffffffffff81116101b557611479903690600401610221565b505060206040517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b346101b55760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101b5576004356114df6101ba565b604435916bffffffffffffffffffffffff83168093036101b55730330361035a578273ffffffffffffffffffffffffffffffffffffffff8361156a7febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1967fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606097881b161785612b9e565b6040519384521660208301526040820152a1005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90600182018092116115bb57565b61157e565b919082018092116115bb57565b906115d782610471565b6115e460405191826103f4565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06116128294610471565b0190602036910137565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805182101561165f5760209160051b010190565b61161c565b919082519283825260005b8481106116ae5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b8060208092840101518282860101520161166f565b9080602083519182815201916020808360051b8301019401926000915b8383106116ef57505050505090565b9091929394602080827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0856001950301865288519073ffffffffffffffffffffffffffffffffffffffff8251168152828201518382015260c080611762604085015160e0604086015260e0850190611664565b936060810151606085015260808101511515608085015260a0810151151560a08501520151910152970193019301919392906116e0565b906020808351928381520192019060005b8181106117b75750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016117aa565b805160ff1682526105159160208281015115159082015261010061184161181b604085015161012060408601526101208501906116c3565b606085015160608501526080850151608085015260a085015184820360a0860152611664565b9260c081015160c084015260e081015160e0840152015190610100818403910152611799565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b916118bd61051594926040855260408501906117e3565b926020818503910152611867565b906118e892916118d9611dde565b906003825260e0820152611c54565b5015611912577f1626ba7e0000000000000000000000000000000000000000000000000000000090565b600090565b6040513d6000823e3d90fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101b5570180359067ffffffffffffffff82116101b5576020019181360383136101b557565b908160209103126101b5575161051581610a8f565b604090610515949281528160208201520191611867565b91909173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169182156110b1578233036110835780611ad2575b506020915080610100611a02920190611923565b92611a3a60405194859384937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611989565b0381305afa90811561107e577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091611aa3575b501603611a9e57600090565b600190565b611ac5915060203d602011611acb575b611abd81836103f4565b810190611974565b38611a92565b503d611ab3565b823b156101b5576040517fb760faf900000000000000000000000000000000000000000000000000000000815230600482015292600091849160249183915af190811561107e57602092611a0292611b2c575b50906119ee565b806110786000611b3b936103f4565b38611b25565b916020610515938181520191611867565b3d15611b7d573d90611b6382610489565b91611b7160405193846103f4565b82523d6000602084013e565b606090565b600436108015611b8f5750565b611bc5906000357fffffffff00000000000000000000000000000000000000000000000000000000811691611c17575b50611e39565b73ffffffffffffffffffffffffffffffffffffffff8116611be35750565b60008091604051368382378036810184815203915af4611c01611b52565b9015611c0f57602081519101f35b602081519101fd5b7fffffffff000000000000000000000000000000000000000000000000000000008092503660040360031b1b161638611bbf565b901561165f5790565b91907f800000000000000000000000000000000000000000000000000000000000000080611cab611c858585611c4b565b357fff000000000000000000000000000000000000000000000000000000000000001690565b1614611d0a576000918291611cbf94612851565b905091909192808210611cda575050611cd79061399a565b91565b7ffd41fcba0000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b5050611d15906126af565b90611d1f82612789565b42811115611dac575073ffffffffffffffffffffffffffffffffffffffff81168015159081611da1575b50611d55575060019190565b7f8945c3130000000000000000000000000000000000000000000000000000000060005260048390523360245273ffffffffffffffffffffffffffffffffffffffff1660445260646000fd5b905033141538611d49565b7ff95b6ab700000000000000000000000000000000000000000000000000000000600052600484905260245260446000fd5b60405190610120820182811067ffffffffffffffff8211176103d3576040526060610100836000815260006020820152826040820152600083820152600060808201528260a0820152600060c0820152600060e08201520152565b73ffffffffffffffffffffffffffffffffffffffff906040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a120845216604082015260408152611eb06060826103f4565b519020541690565b90611ec282610471565b611ecf60405191826103f4565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611efd8294610471565b019060005b828110611f0e57505050565b602090604051611f1d816103b7565b60008152600083820152606060408201526000606082015260006080820152600060a0820152600060c082015282828501015201611f02565b909392938483116101b55784116101b5578101920390565b919091611f79611dde565b6000815292600190823560f81c827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8183160161221b5750600060608701525b6007611fc860ff831660011c90565b16806121ca575b5060108181160361219557506001925b611fe884611eb8565b92604087019384526000905b85821061200357505050505050565b8281013560f81c9060010190918160018085160361217357506120473061202b83895161164b565b519073ffffffffffffffffffffffffffffffffffffffff169052565b600280841614612153575b600480841614612105575b6008808416146120d2575b6120bb6120b560c0856120948a608061208b8860108060019c9d1614935161164b565b51019015159052565b6120ab8a60a061208b88602080871614935161164b565b1660061c60031690565b60ff1690565b60c06120c883895161164b565b5101520190611ff4565b6001916120bb906120b59060c0908781013590602001969060606120f7878d5161164b565b510152959450505050612068565b9061214d908481013560e81c9060030161214661212d61212584846115c0565b838a8a611f56565b9190604061213c888d5161164b565b51019236916104c3565b90526115c0565b9061205d565b9083810135906020019190602061216b83895161164b565b510152612052565b61219092508481013560601c90601401929061202b83895161164b565b612047565b6020908116036121b75761ffff918381013560f01c906002015b921692611fdf565b60ff918381013560f81c906001016121af565b61220e919385929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290608087015238611fcf565b80850135606090811c908801526014019250611fb9565b9061223c82612743565b8181036122c257509060017f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f8819201908160405160208101907f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e8252836040820152604081526122ac6060826103f4565b51902055604080519182526020820192909252a1565b917f9b6514f40000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b61230e604092959493956060835260608301906117e3565b9460208201520152565b9261051596959260c09592855260208501526040840152606083015260808201528160a08201520190611664565b6105159392606092825260208201528160408201520190611664565b61237861051594926060835260608301906117e3565b9260208201526040818403910152611664565b916000604082019384515190825b8281106123aa575b50505050505050565b6123b581885161164b565b51936123c460a0860151151590565b806126a7575b61266757506000936060810151801580158061265e575b6126265784906123f46080850151151590565b156125e05761249f9261241b855173ffffffffffffffffffffffffffffffffffffffff1690565b91156125da57505a905b61249a8b61246e60608d01516040890151908c8b604051998a967f4c4e814c00000000000000000000000000000000000000000000000000000000602089015260248801612318565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018552846103f4565b612b71565b156124e2575b506040805187815260208101839052600192917f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a91a15b01612399565b60c001805115612591576001815114612552575160021461250357386124a5565b9493505050507fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b9250612543612537612b83565b60405193849384612346565b0390a1388080808080806123a1565b50846108eb61255f612b83565b6040519384937f7f6b0bb100000000000000000000000000000000000000000000000000000000855260048501612362565b509250600180937f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d6125d26125c4612b83565b604051918291858c84612346565b0390a16124dc565b90612425565b835161261b93925073ffffffffffffffffffffffffffffffffffffffff169160208501519160001461262057505a905b604085015192612b5f565b61249f565b90612610565b83886108eb5a6040519384937f21395274000000000000000000000000000000000000000000000000000000008552600485016122f6565b50815a106123e1565b6040805188815260208101849052919550600192917f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b91819081016125d2565b5080156123ca565b61271161273d6126cf6126c9602085015115153090612c22565b93612d1d565b60405192839160208301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826103f4565b51902090565b60405160208101917f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83526040820152604081526127826060826103f4565b5190205490565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e8683526040820152604081526127c86060826103f4565b51902054906bffffffffffffffffffffffff8260601c921690565b604051906127f0826103d8565b60006020838281520152565b908160409103126101b557602060405191612816836103d8565b805183520151602082015290565b60409073ffffffffffffffffffffffffffffffffffffffff61051594931681528160208201520190611664565b909491939291853560f81c6001909381908761286b6127e3565b9360408089161480612b41575b612a44575b505050600180861614612a1e5760028581161460208501526007600286901c1688820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691019080969181966020166128ed9060051c90565b6128f6906115ad565b8a820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01169101959098899a81612942846126af565b98899361294e93611f56565b9161295893613134565b909861296c91600052602052604060002090565b9061297f91600052602052604060002090565b9073ffffffffffffffffffffffffffffffffffffffff166129a891600052602052604060002090565b94815190868215159283612a13575b505081612a04575b506129c75750565b6040517fccbb534f000000000000000000000000000000000000000000000000000000008152815160048201526020909101516024820152604490fd5b905060208201511015386129bf565b1415915086386129b7565b86612a399792949550612a319398611f56565b939092612f12565b919394909293929190565b8a81013560601c985060140192509087908a90849015612a68575b5082915061287d565b60038101955073ffffffffffffffffffffffffffffffffffffffff945081013560e81c92604092612aeb929091612ab691612aaf918990612aa989836115c0565b92611f56565b36916104c3565b83519586809481937fccce3bc80000000000000000000000000000000000000000000000000000000083523060048401612824565b0392165afa801561107e57612b0992600091612b12575b50926115c0565b86388981612a5f565b612b34915060403d604011612b3a575b612b2c81836103f4565b8101906127fc565b38612b02565b503d612b22565b5073ffffffffffffffffffffffffffffffffffffffff891615612878565b9160009391849360208451940192f190565b9160009291839260208351930191f490565b3d90604051916020818401016040528083526000602084013e565b60405160208101917fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e868352604082015260408152612bdd6060826103f4565b51902055565b60405160208101917fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1208352604082015260408152612bdd6060826103f4565b15612cd2576000905b73ffffffffffffffffffffffffffffffffffffffff6040519160208301937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f85527f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c5631860408501527f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de606085015260808401521660a082015260a0815261273d60c0826103f4565b4690612c2b565b805160209091019060005b818110612cf15750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101612ce4565b610100810151604051612d3881612711602082018095612cd9565b51902090612d47815160ff1690565b60ff811680612dc05750509061273d612d6360408401516139fd565b9261271160806060830151920151936040519485936020850197889094939260809260a08301967f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a284526020840152604083015260608201520152565b60018103612e1e57505060a001518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4669381019384529081019190915260608101929092529061273d8160808101612711565b60028103612e7457505060c00151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e46020820190815291810192909252606082019290925261273d8160808101612711565b600303612ec8575060e00151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4666020820190815291810192909252606082019290925261273d8160808101612711565b7f048183200000000000000000000000000000000000000000000000000000000060005260ff1660045260246000fd5b9061230e9060409396959496606084526060840191611867565b9194929092600095600095600095600095600095612f2e611dde565b60028152937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9460005b828110612f8557505050505050508051151580612f77575b6129c75750565b506020810151841115612f70565b600381019d50959b5093995091975092909190612fa9908b9085013560e81c6115c0565b958a60008489036130ed575089915b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c036130bd5750906001612ff289612ff9948789611f56565b908b612851565b9c939c9b929b9a919a99909a9b9d8e9d9e8f905b106130775750928b88511461306e575b808b101561303c57508a60c08501528992959295949194939093612f58565b7f37daf62b0000000000000000000000000000000000000000000000000000000060005260048b905260245260446000fd5b6000885261301d565b8d8f6108eb61308885858c8e611f56565b9390926040519485947fb006aba000000000000000000000000000000000000000000000000000000000865260048601612ef8565b9798999a9160016130d38b6130da94888a611f56565b9086612851565b50929d919c909b929a9092918e8e61300d565b91612fb8565b73ffffffffffffffffffffffffffffffffffffffff610515959360609383521660208201528160408201520191611867565b908160209103126101b5575190565b9391909360009460009460005b81811061314f575050505050565b8481013560f881901c9860019092019788979692909160fc1c9889156139335750600189146138f357600289146137365760038914613707576004891461368657600689146135e6576005891461359857600789146134d1576008891461347b576009891461335257600a89146131ef577fb2505f7c00000000000000000000000000000000000000000000000000000000600052600489905260246000fd5b90919293949596975060038916978815613341575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff011691019081019081613267918787611f56565b6040517f898bd9210000000000000000000000000000000000000000000000000000000081529391849161329f918a60048501611989565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa91821561107e576132e29360009361330e575b5060ff909a168091019a613cc9565b90801561330857906132fc91600052602052604060002090565b955b9392919093613141565b506132fc565b60ff9193506133339060203d811161333a575b61332b81836103f4565b810190613125565b92906132d3565b503d613321565b8084013560f81c9850600101613204565b9091929394959697506003891697881561346a575b8381013560601c90601401909960021c60031660ff1684820135600382901b6101008190039190911c600190911b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0116910190810190816133ca918787611f56565b6040517f13792a4a00000000000000000000000000000000000000000000000000000000815293918491613402918b600485016118a6565b038373ffffffffffffffffffffffffffffffffffffffff8d1691815a93602094fa91821561107e576134449360009361330e575060ff909a168091019a613cc9565b908015613464579061345e91600052602052604060002090565b956132fe565b5061345e565b8084013560f81c9850600101613367565b98506020870197509495939492939192909182013561349986613c70565b81146134a9575b61344490613c8a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506134a0565b975090919293949597600f16968715613586575b602060006134f76135649a9b86613b38565b9c9092918a60405161353a816127118a82019485603c917f19457468657265756d205369676e6564204d6573736167653a0a3332000000008252601c8201520190565b51902092604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa1561107e576134449060ff6000519a1680910199613b7b565b600189019883013560f81c97506134e5565b9850602087019750949593949293919290918201358085146135be575b61344490613c31565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff98506135b5565b989091929394959662ffffff98506136086120b5600c8416603f9060021c1690565b918215613672575b6003168015613661575b9081906136459061363d908781013560e81c906003019c168c01809c8989611f56565b90898b613134565b911115613658575b906134449291613be6565b9982019961364d565b50600281019084013560f01c61361a565b8482013560f81c9250600190910190613610565b9750976136dc6136e9929394959697600f6136f193169085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9290830180938686611f56565b908688613134565b9061345e92980198600052602052604060002090565b985096509394929391929091908082013590602001968015613464579061345e91600052602052604060002090565b909192939495969750600389169788156138e2575b8084013560601c996137aa916014019061376a9060021c6003166120b5565b9085929190928160031b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6001821b019185013590610100031c16920190565b9081019061380e60208c6137c085858b8b611f56565b919073ffffffffffffffffffffffffffffffffffffffff8c604051968795869485937f1626ba7e00000000000000000000000000000000000000000000000000000000855260048501611989565b0392165afa90811561107e577f1626ba7e00000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000916000916138c4575b50160361388057509060ff61344492991680910199613b7b565b6108eb6138918c9389938989611f56565b906040519485947fb2fed7ae000000000000000000000000000000000000000000000000000000008652600486016130f3565b6138dc915060203d8111611acb57611abd81836103f4565b38613866565b8381013560f81c985060010161374b565b98600f91929394959697985016968715613922575b60148101976134449160ff9091169084013560601c613b7b565b8281013560f81c9750600101613908565b98509091929394959698600f16978815613985575b506020600061395b6135649a9b86613b38565b9c90916040519384938c859094939260ff6060936080840197845216602083015260408201520152565b60018101995083013560f81c97506020613948565b80151590816139a7575090565b90507fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8541490565b805160209091019060005b8181106139e75750505090565b82518452602093840193909201916001016139da565b9081517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0613a43613a2d83610471565b92613a3b60405194856103f4565b808452610471565b0136602083013760005b8351811015613b1f5780613a636001928661164b565b5173ffffffffffffffffffffffffffffffffffffffff81511690602081015190604081015160208151910120906060810151608082015115159060c060a08401511515930151936040519560208701977f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437895260408801526060870152608086015260a085015260c084015260e08301526101008201526101008152613b0b610120826103f4565b519020613b18828561164b565b5201613a4d565b5090915060405161273d816127116020820180956139cf565b8101916040602084359401359201601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c0160ff81116115bb5791565b90604051907fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208301937f53657175656e6365207369676e65723a0a000000000000000000000000000000855260601b16603183015260458201526045815261273d6065826103f4565b916040519160208301937f53657175656e6365206e657374656420636f6e6669673a0a000000000000000085526038840152605883015260788201526078815261273d6098826103f4565b60405160208101917f53657175656e636520737461746963206469676573743a0a0000000000000000835260388201526038815261273d6058826103f4565b61271161273d6126cf6126c9600060208601511515612c22565b60405160208101917f53657175656e636520616e792061646472657373207375626469676573743a0a835260408201526040815261273d6060826103f4565b91604051917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060208401947f53657175656e63652073617069656e7420636f6e6669673a0a00000000000000865260601b166039840152604d830152606d820152606d815261273d608d826103f456fea264697066735822122071c846bfb3a07ed1d03bb0cecee955d8b864be4c4d91b0f9a960528ecc060e8964736f6c634300081c0033", +} + +// WalletStage2ABI is the input ABI used to generate the binding from. +// Deprecated: Use WalletStage2MetaData.ABI instead. +var WalletStage2ABI = WalletStage2MetaData.ABI + +// WalletStage2Bin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use WalletStage2MetaData.Bin instead. +var WalletStage2Bin = WalletStage2MetaData.Bin + +// DeployWalletStage2 deploys a new Ethereum contract, binding an instance of WalletStage2 to it. +func DeployWalletStage2(auth *bind.TransactOpts, backend bind.ContractBackend, _entryPoint common.Address) (common.Address, *types.Transaction, *WalletStage2, error) { + parsed, err := WalletStage2MetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(WalletStage2Bin), backend, _entryPoint) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &WalletStage2{WalletStage2Caller: WalletStage2Caller{contract: contract}, WalletStage2Transactor: WalletStage2Transactor{contract: contract}, WalletStage2Filterer: WalletStage2Filterer{contract: contract}}, nil +} + +// WalletStage2 is an auto generated Go binding around an Ethereum contract. +type WalletStage2 struct { + WalletStage2Caller // Read-only binding to the contract + WalletStage2Transactor // Write-only binding to the contract + WalletStage2Filterer // Log filterer for contract events +} + +// WalletStage2Caller is an auto generated read-only Go binding around an Ethereum contract. +type WalletStage2Caller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// WalletStage2Transactor is an auto generated write-only Go binding around an Ethereum contract. +type WalletStage2Transactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// WalletStage2Filterer is an auto generated log filtering Go binding around an Ethereum contract events. +type WalletStage2Filterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// WalletStage2Session is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type WalletStage2Session struct { + Contract *WalletStage2 // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// WalletStage2CallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type WalletStage2CallerSession struct { + Contract *WalletStage2Caller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// WalletStage2TransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type WalletStage2TransactorSession struct { + Contract *WalletStage2Transactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// WalletStage2Raw is an auto generated low-level Go binding around an Ethereum contract. +type WalletStage2Raw struct { + Contract *WalletStage2 // Generic contract binding to access the raw methods on +} + +// WalletStage2CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type WalletStage2CallerRaw struct { + Contract *WalletStage2Caller // Generic read-only contract binding to access the raw methods on +} + +// WalletStage2TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type WalletStage2TransactorRaw struct { + Contract *WalletStage2Transactor // Generic write-only contract binding to access the raw methods on +} + +// NewWalletStage2 creates a new instance of WalletStage2, bound to a specific deployed contract. +func NewWalletStage2(address common.Address, backend bind.ContractBackend) (*WalletStage2, error) { + contract, err := bindWalletStage2(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &WalletStage2{WalletStage2Caller: WalletStage2Caller{contract: contract}, WalletStage2Transactor: WalletStage2Transactor{contract: contract}, WalletStage2Filterer: WalletStage2Filterer{contract: contract}}, nil +} + +// NewWalletStage2Caller creates a new read-only instance of WalletStage2, bound to a specific deployed contract. +func NewWalletStage2Caller(address common.Address, caller bind.ContractCaller) (*WalletStage2Caller, error) { + contract, err := bindWalletStage2(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &WalletStage2Caller{contract: contract}, nil +} + +// NewWalletStage2Transactor creates a new write-only instance of WalletStage2, bound to a specific deployed contract. +func NewWalletStage2Transactor(address common.Address, transactor bind.ContractTransactor) (*WalletStage2Transactor, error) { + contract, err := bindWalletStage2(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &WalletStage2Transactor{contract: contract}, nil +} + +// NewWalletStage2Filterer creates a new log filterer instance of WalletStage2, bound to a specific deployed contract. +func NewWalletStage2Filterer(address common.Address, filterer bind.ContractFilterer) (*WalletStage2Filterer, error) { + contract, err := bindWalletStage2(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &WalletStage2Filterer{contract: contract}, nil +} + +// bindWalletStage2 binds a generic wrapper to an already deployed contract. +func bindWalletStage2(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := WalletStage2MetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_WalletStage2 *WalletStage2Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _WalletStage2.Contract.WalletStage2Caller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_WalletStage2 *WalletStage2Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _WalletStage2.Contract.WalletStage2Transactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_WalletStage2 *WalletStage2Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _WalletStage2.Contract.WalletStage2Transactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_WalletStage2 *WalletStage2CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _WalletStage2.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_WalletStage2 *WalletStage2TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _WalletStage2.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_WalletStage2 *WalletStage2TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _WalletStage2.Contract.contract.Transact(opts, method, params...) +} + +// Entrypoint is a free data retrieval call binding the contract method 0xa65d69d4. +// +// Solidity: function entrypoint() view returns(address) +func (_WalletStage2 *WalletStage2Caller) Entrypoint(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _WalletStage2.contract.Call(opts, &out, "entrypoint") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Entrypoint is a free data retrieval call binding the contract method 0xa65d69d4. +// +// Solidity: function entrypoint() view returns(address) +func (_WalletStage2 *WalletStage2Session) Entrypoint() (common.Address, error) { + return _WalletStage2.Contract.Entrypoint(&_WalletStage2.CallOpts) +} + +// Entrypoint is a free data retrieval call binding the contract method 0xa65d69d4. +// +// Solidity: function entrypoint() view returns(address) +func (_WalletStage2 *WalletStage2CallerSession) Entrypoint() (common.Address, error) { + return _WalletStage2.Contract.Entrypoint(&_WalletStage2.CallOpts) +} + +// GetImplementation is a free data retrieval call binding the contract method 0xaaf10f42. +// +// Solidity: function getImplementation() view returns(address) +func (_WalletStage2 *WalletStage2Caller) GetImplementation(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _WalletStage2.contract.Call(opts, &out, "getImplementation") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetImplementation is a free data retrieval call binding the contract method 0xaaf10f42. +// +// Solidity: function getImplementation() view returns(address) +func (_WalletStage2 *WalletStage2Session) GetImplementation() (common.Address, error) { + return _WalletStage2.Contract.GetImplementation(&_WalletStage2.CallOpts) +} + +// GetImplementation is a free data retrieval call binding the contract method 0xaaf10f42. +// +// Solidity: function getImplementation() view returns(address) +func (_WalletStage2 *WalletStage2CallerSession) GetImplementation() (common.Address, error) { + return _WalletStage2.Contract.GetImplementation(&_WalletStage2.CallOpts) +} + +// GetStaticSignature is a free data retrieval call binding the contract method 0x92dcb3fc. +// +// Solidity: function getStaticSignature(bytes32 _hash) view returns(address, uint256) +func (_WalletStage2 *WalletStage2Caller) GetStaticSignature(opts *bind.CallOpts, _hash [32]byte) (common.Address, *big.Int, error) { + var out []interface{} + err := _WalletStage2.contract.Call(opts, &out, "getStaticSignature", _hash) + + if err != nil { + return *new(common.Address), *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out1 := *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + + return out0, out1, err + +} + +// GetStaticSignature is a free data retrieval call binding the contract method 0x92dcb3fc. +// +// Solidity: function getStaticSignature(bytes32 _hash) view returns(address, uint256) +func (_WalletStage2 *WalletStage2Session) GetStaticSignature(_hash [32]byte) (common.Address, *big.Int, error) { + return _WalletStage2.Contract.GetStaticSignature(&_WalletStage2.CallOpts, _hash) +} + +// GetStaticSignature is a free data retrieval call binding the contract method 0x92dcb3fc. +// +// Solidity: function getStaticSignature(bytes32 _hash) view returns(address, uint256) +func (_WalletStage2 *WalletStage2CallerSession) GetStaticSignature(_hash [32]byte) (common.Address, *big.Int, error) { + return _WalletStage2.Contract.GetStaticSignature(&_WalletStage2.CallOpts, _hash) +} + +// ImageHash is a free data retrieval call binding the contract method 0x51605d80. +// +// Solidity: function imageHash() view returns(bytes32) +func (_WalletStage2 *WalletStage2Caller) ImageHash(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _WalletStage2.contract.Call(opts, &out, "imageHash") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// ImageHash is a free data retrieval call binding the contract method 0x51605d80. +// +// Solidity: function imageHash() view returns(bytes32) +func (_WalletStage2 *WalletStage2Session) ImageHash() ([32]byte, error) { + return _WalletStage2.Contract.ImageHash(&_WalletStage2.CallOpts) +} + +// ImageHash is a free data retrieval call binding the contract method 0x51605d80. +// +// Solidity: function imageHash() view returns(bytes32) +func (_WalletStage2 *WalletStage2CallerSession) ImageHash() ([32]byte, error) { + return _WalletStage2.Contract.ImageHash(&_WalletStage2.CallOpts) +} + +// IsValidSignature is a free data retrieval call binding the contract method 0x1626ba7e. +// +// Solidity: function isValidSignature(bytes32 _hash, bytes _signature) view returns(bytes4) +func (_WalletStage2 *WalletStage2Caller) IsValidSignature(opts *bind.CallOpts, _hash [32]byte, _signature []byte) ([4]byte, error) { + var out []interface{} + err := _WalletStage2.contract.Call(opts, &out, "isValidSignature", _hash, _signature) + + if err != nil { + return *new([4]byte), err + } + + out0 := *abi.ConvertType(out[0], new([4]byte)).(*[4]byte) + + return out0, err + +} + +// IsValidSignature is a free data retrieval call binding the contract method 0x1626ba7e. +// +// Solidity: function isValidSignature(bytes32 _hash, bytes _signature) view returns(bytes4) +func (_WalletStage2 *WalletStage2Session) IsValidSignature(_hash [32]byte, _signature []byte) ([4]byte, error) { + return _WalletStage2.Contract.IsValidSignature(&_WalletStage2.CallOpts, _hash, _signature) +} + +// IsValidSignature is a free data retrieval call binding the contract method 0x1626ba7e. +// +// Solidity: function isValidSignature(bytes32 _hash, bytes _signature) view returns(bytes4) +func (_WalletStage2 *WalletStage2CallerSession) IsValidSignature(_hash [32]byte, _signature []byte) ([4]byte, error) { + return _WalletStage2.Contract.IsValidSignature(&_WalletStage2.CallOpts, _hash, _signature) +} + +// OnERC1155BatchReceived is a free data retrieval call binding the contract method 0xbc197c81. +// +// Solidity: function onERC1155BatchReceived(address , address , uint256[] , uint256[] , bytes ) pure returns(bytes4) +func (_WalletStage2 *WalletStage2Caller) OnERC1155BatchReceived(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address, arg2 []*big.Int, arg3 []*big.Int, arg4 []byte) ([4]byte, error) { + var out []interface{} + err := _WalletStage2.contract.Call(opts, &out, "onERC1155BatchReceived", arg0, arg1, arg2, arg3, arg4) + + if err != nil { + return *new([4]byte), err + } + + out0 := *abi.ConvertType(out[0], new([4]byte)).(*[4]byte) + + return out0, err + +} + +// OnERC1155BatchReceived is a free data retrieval call binding the contract method 0xbc197c81. +// +// Solidity: function onERC1155BatchReceived(address , address , uint256[] , uint256[] , bytes ) pure returns(bytes4) +func (_WalletStage2 *WalletStage2Session) OnERC1155BatchReceived(arg0 common.Address, arg1 common.Address, arg2 []*big.Int, arg3 []*big.Int, arg4 []byte) ([4]byte, error) { + return _WalletStage2.Contract.OnERC1155BatchReceived(&_WalletStage2.CallOpts, arg0, arg1, arg2, arg3, arg4) +} + +// OnERC1155BatchReceived is a free data retrieval call binding the contract method 0xbc197c81. +// +// Solidity: function onERC1155BatchReceived(address , address , uint256[] , uint256[] , bytes ) pure returns(bytes4) +func (_WalletStage2 *WalletStage2CallerSession) OnERC1155BatchReceived(arg0 common.Address, arg1 common.Address, arg2 []*big.Int, arg3 []*big.Int, arg4 []byte) ([4]byte, error) { + return _WalletStage2.Contract.OnERC1155BatchReceived(&_WalletStage2.CallOpts, arg0, arg1, arg2, arg3, arg4) +} + +// OnERC1155Received is a free data retrieval call binding the contract method 0xf23a6e61. +// +// Solidity: function onERC1155Received(address , address , uint256 , uint256 , bytes ) pure returns(bytes4) +func (_WalletStage2 *WalletStage2Caller) OnERC1155Received(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address, arg2 *big.Int, arg3 *big.Int, arg4 []byte) ([4]byte, error) { + var out []interface{} + err := _WalletStage2.contract.Call(opts, &out, "onERC1155Received", arg0, arg1, arg2, arg3, arg4) + + if err != nil { + return *new([4]byte), err + } + + out0 := *abi.ConvertType(out[0], new([4]byte)).(*[4]byte) + + return out0, err + +} + +// OnERC1155Received is a free data retrieval call binding the contract method 0xf23a6e61. +// +// Solidity: function onERC1155Received(address , address , uint256 , uint256 , bytes ) pure returns(bytes4) +func (_WalletStage2 *WalletStage2Session) OnERC1155Received(arg0 common.Address, arg1 common.Address, arg2 *big.Int, arg3 *big.Int, arg4 []byte) ([4]byte, error) { + return _WalletStage2.Contract.OnERC1155Received(&_WalletStage2.CallOpts, arg0, arg1, arg2, arg3, arg4) +} + +// OnERC1155Received is a free data retrieval call binding the contract method 0xf23a6e61. +// +// Solidity: function onERC1155Received(address , address , uint256 , uint256 , bytes ) pure returns(bytes4) +func (_WalletStage2 *WalletStage2CallerSession) OnERC1155Received(arg0 common.Address, arg1 common.Address, arg2 *big.Int, arg3 *big.Int, arg4 []byte) ([4]byte, error) { + return _WalletStage2.Contract.OnERC1155Received(&_WalletStage2.CallOpts, arg0, arg1, arg2, arg3, arg4) +} + +// OnERC721Received is a free data retrieval call binding the contract method 0x150b7a02. +// +// Solidity: function onERC721Received(address , address , uint256 , bytes ) pure returns(bytes4) +func (_WalletStage2 *WalletStage2Caller) OnERC721Received(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address, arg2 *big.Int, arg3 []byte) ([4]byte, error) { + var out []interface{} + err := _WalletStage2.contract.Call(opts, &out, "onERC721Received", arg0, arg1, arg2, arg3) + + if err != nil { + return *new([4]byte), err + } + + out0 := *abi.ConvertType(out[0], new([4]byte)).(*[4]byte) + + return out0, err + +} + +// OnERC721Received is a free data retrieval call binding the contract method 0x150b7a02. +// +// Solidity: function onERC721Received(address , address , uint256 , bytes ) pure returns(bytes4) +func (_WalletStage2 *WalletStage2Session) OnERC721Received(arg0 common.Address, arg1 common.Address, arg2 *big.Int, arg3 []byte) ([4]byte, error) { + return _WalletStage2.Contract.OnERC721Received(&_WalletStage2.CallOpts, arg0, arg1, arg2, arg3) +} + +// OnERC721Received is a free data retrieval call binding the contract method 0x150b7a02. +// +// Solidity: function onERC721Received(address , address , uint256 , bytes ) pure returns(bytes4) +func (_WalletStage2 *WalletStage2CallerSession) OnERC721Received(arg0 common.Address, arg1 common.Address, arg2 *big.Int, arg3 []byte) ([4]byte, error) { + return _WalletStage2.Contract.OnERC721Received(&_WalletStage2.CallOpts, arg0, arg1, arg2, arg3) +} + +// ReadHook is a free data retrieval call binding the contract method 0x1a9b2337. +// +// Solidity: function readHook(bytes4 selector) view returns(address) +func (_WalletStage2 *WalletStage2Caller) ReadHook(opts *bind.CallOpts, selector [4]byte) (common.Address, error) { + var out []interface{} + err := _WalletStage2.contract.Call(opts, &out, "readHook", selector) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// ReadHook is a free data retrieval call binding the contract method 0x1a9b2337. +// +// Solidity: function readHook(bytes4 selector) view returns(address) +func (_WalletStage2 *WalletStage2Session) ReadHook(selector [4]byte) (common.Address, error) { + return _WalletStage2.Contract.ReadHook(&_WalletStage2.CallOpts, selector) +} + +// ReadHook is a free data retrieval call binding the contract method 0x1a9b2337. +// +// Solidity: function readHook(bytes4 selector) view returns(address) +func (_WalletStage2 *WalletStage2CallerSession) ReadHook(selector [4]byte) (common.Address, error) { + return _WalletStage2.Contract.ReadHook(&_WalletStage2.CallOpts, selector) +} + +// ReadNonce is a free data retrieval call binding the contract method 0x8c3f5563. +// +// Solidity: function readNonce(uint256 _space) view returns(uint256) +func (_WalletStage2 *WalletStage2Caller) ReadNonce(opts *bind.CallOpts, _space *big.Int) (*big.Int, error) { + var out []interface{} + err := _WalletStage2.contract.Call(opts, &out, "readNonce", _space) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// ReadNonce is a free data retrieval call binding the contract method 0x8c3f5563. +// +// Solidity: function readNonce(uint256 _space) view returns(uint256) +func (_WalletStage2 *WalletStage2Session) ReadNonce(_space *big.Int) (*big.Int, error) { + return _WalletStage2.Contract.ReadNonce(&_WalletStage2.CallOpts, _space) +} + +// ReadNonce is a free data retrieval call binding the contract method 0x8c3f5563. +// +// Solidity: function readNonce(uint256 _space) view returns(uint256) +func (_WalletStage2 *WalletStage2CallerSession) ReadNonce(_space *big.Int) (*big.Int, error) { + return _WalletStage2.Contract.ReadNonce(&_WalletStage2.CallOpts, _space) +} + +// RecoverPartialSignature is a free data retrieval call binding the contract method 0xad55366b. +// +// Solidity: function recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]) _payload, bytes _signature) view returns(uint256 threshold, uint256 weight, bool isValidImage, bytes32 imageHash, uint256 checkpoint, bytes32 opHash) +func (_WalletStage2 *WalletStage2Caller) RecoverPartialSignature(opts *bind.CallOpts, _payload PayloadDecoded, _signature []byte) (struct { + Threshold *big.Int + Weight *big.Int + IsValidImage bool + ImageHash [32]byte + Checkpoint *big.Int + OpHash [32]byte +}, error) { + var out []interface{} + err := _WalletStage2.contract.Call(opts, &out, "recoverPartialSignature", _payload, _signature) + + outstruct := new(struct { + Threshold *big.Int + Weight *big.Int + IsValidImage bool + ImageHash [32]byte + Checkpoint *big.Int + OpHash [32]byte + }) + if err != nil { + return *outstruct, err + } + + outstruct.Threshold = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.Weight = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + outstruct.IsValidImage = *abi.ConvertType(out[2], new(bool)).(*bool) + outstruct.ImageHash = *abi.ConvertType(out[3], new([32]byte)).(*[32]byte) + outstruct.Checkpoint = *abi.ConvertType(out[4], new(*big.Int)).(**big.Int) + outstruct.OpHash = *abi.ConvertType(out[5], new([32]byte)).(*[32]byte) + + return *outstruct, err + +} + +// RecoverPartialSignature is a free data retrieval call binding the contract method 0xad55366b. +// +// Solidity: function recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]) _payload, bytes _signature) view returns(uint256 threshold, uint256 weight, bool isValidImage, bytes32 imageHash, uint256 checkpoint, bytes32 opHash) +func (_WalletStage2 *WalletStage2Session) RecoverPartialSignature(_payload PayloadDecoded, _signature []byte) (struct { + Threshold *big.Int + Weight *big.Int + IsValidImage bool + ImageHash [32]byte + Checkpoint *big.Int + OpHash [32]byte +}, error) { + return _WalletStage2.Contract.RecoverPartialSignature(&_WalletStage2.CallOpts, _payload, _signature) +} + +// RecoverPartialSignature is a free data retrieval call binding the contract method 0xad55366b. +// +// Solidity: function recoverPartialSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]) _payload, bytes _signature) view returns(uint256 threshold, uint256 weight, bool isValidImage, bytes32 imageHash, uint256 checkpoint, bytes32 opHash) +func (_WalletStage2 *WalletStage2CallerSession) RecoverPartialSignature(_payload PayloadDecoded, _signature []byte) (struct { + Threshold *big.Int + Weight *big.Int + IsValidImage bool + ImageHash [32]byte + Checkpoint *big.Int + OpHash [32]byte +}, error) { + return _WalletStage2.Contract.RecoverPartialSignature(&_WalletStage2.CallOpts, _payload, _signature) +} + +// RecoverSapientSignature is a free data retrieval call binding the contract method 0x13792a4a. +// +// Solidity: function recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]) _payload, bytes _signature) view returns(bytes32) +func (_WalletStage2 *WalletStage2Caller) RecoverSapientSignature(opts *bind.CallOpts, _payload PayloadDecoded, _signature []byte) ([32]byte, error) { + var out []interface{} + err := _WalletStage2.contract.Call(opts, &out, "recoverSapientSignature", _payload, _signature) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// RecoverSapientSignature is a free data retrieval call binding the contract method 0x13792a4a. +// +// Solidity: function recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]) _payload, bytes _signature) view returns(bytes32) +func (_WalletStage2 *WalletStage2Session) RecoverSapientSignature(_payload PayloadDecoded, _signature []byte) ([32]byte, error) { + return _WalletStage2.Contract.RecoverSapientSignature(&_WalletStage2.CallOpts, _payload, _signature) +} + +// RecoverSapientSignature is a free data retrieval call binding the contract method 0x13792a4a. +// +// Solidity: function recoverSapientSignature((uint8,bool,(address,uint256,bytes,uint256,bool,bool,uint256)[],uint256,uint256,bytes,bytes32,bytes32,address[]) _payload, bytes _signature) view returns(bytes32) +func (_WalletStage2 *WalletStage2CallerSession) RecoverSapientSignature(_payload PayloadDecoded, _signature []byte) ([32]byte, error) { + return _WalletStage2.Contract.RecoverSapientSignature(&_WalletStage2.CallOpts, _payload, _signature) +} + +// TokenReceived is a free data retrieval call binding the contract method 0x8943ec02. +// +// Solidity: function tokenReceived(address , uint256 , bytes ) pure returns(bytes4) +func (_WalletStage2 *WalletStage2Caller) TokenReceived(opts *bind.CallOpts, arg0 common.Address, arg1 *big.Int, arg2 []byte) ([4]byte, error) { + var out []interface{} + err := _WalletStage2.contract.Call(opts, &out, "tokenReceived", arg0, arg1, arg2) + + if err != nil { + return *new([4]byte), err + } + + out0 := *abi.ConvertType(out[0], new([4]byte)).(*[4]byte) + + return out0, err + +} + +// TokenReceived is a free data retrieval call binding the contract method 0x8943ec02. +// +// Solidity: function tokenReceived(address , uint256 , bytes ) pure returns(bytes4) +func (_WalletStage2 *WalletStage2Session) TokenReceived(arg0 common.Address, arg1 *big.Int, arg2 []byte) ([4]byte, error) { + return _WalletStage2.Contract.TokenReceived(&_WalletStage2.CallOpts, arg0, arg1, arg2) +} + +// TokenReceived is a free data retrieval call binding the contract method 0x8943ec02. +// +// Solidity: function tokenReceived(address , uint256 , bytes ) pure returns(bytes4) +func (_WalletStage2 *WalletStage2CallerSession) TokenReceived(arg0 common.Address, arg1 *big.Int, arg2 []byte) ([4]byte, error) { + return _WalletStage2.Contract.TokenReceived(&_WalletStage2.CallOpts, arg0, arg1, arg2) +} + +// AddHook is a paid mutator transaction binding the contract method 0xb93ea7ad. +// +// Solidity: function addHook(bytes4 selector, address implementation) payable returns() +func (_WalletStage2 *WalletStage2Transactor) AddHook(opts *bind.TransactOpts, selector [4]byte, implementation common.Address) (*types.Transaction, error) { + return _WalletStage2.contract.Transact(opts, "addHook", selector, implementation) +} + +// AddHook is a paid mutator transaction binding the contract method 0xb93ea7ad. +// +// Solidity: function addHook(bytes4 selector, address implementation) payable returns() +func (_WalletStage2 *WalletStage2Session) AddHook(selector [4]byte, implementation common.Address) (*types.Transaction, error) { + return _WalletStage2.Contract.AddHook(&_WalletStage2.TransactOpts, selector, implementation) +} + +// AddHook is a paid mutator transaction binding the contract method 0xb93ea7ad. +// +// Solidity: function addHook(bytes4 selector, address implementation) payable returns() +func (_WalletStage2 *WalletStage2TransactorSession) AddHook(selector [4]byte, implementation common.Address) (*types.Transaction, error) { + return _WalletStage2.Contract.AddHook(&_WalletStage2.TransactOpts, selector, implementation) +} + +// Execute is a paid mutator transaction binding the contract method 0x1f6a1eb9. +// +// Solidity: function execute(bytes _payload, bytes _signature) payable returns() +func (_WalletStage2 *WalletStage2Transactor) Execute(opts *bind.TransactOpts, _payload []byte, _signature []byte) (*types.Transaction, error) { + return _WalletStage2.contract.Transact(opts, "execute", _payload, _signature) +} + +// Execute is a paid mutator transaction binding the contract method 0x1f6a1eb9. +// +// Solidity: function execute(bytes _payload, bytes _signature) payable returns() +func (_WalletStage2 *WalletStage2Session) Execute(_payload []byte, _signature []byte) (*types.Transaction, error) { + return _WalletStage2.Contract.Execute(&_WalletStage2.TransactOpts, _payload, _signature) +} + +// Execute is a paid mutator transaction binding the contract method 0x1f6a1eb9. +// +// Solidity: function execute(bytes _payload, bytes _signature) payable returns() +func (_WalletStage2 *WalletStage2TransactorSession) Execute(_payload []byte, _signature []byte) (*types.Transaction, error) { + return _WalletStage2.Contract.Execute(&_WalletStage2.TransactOpts, _payload, _signature) +} + +// ExecuteUserOp is a paid mutator transaction binding the contract method 0x9c145aed. +// +// Solidity: function executeUserOp(bytes _payload) returns() +func (_WalletStage2 *WalletStage2Transactor) ExecuteUserOp(opts *bind.TransactOpts, _payload []byte) (*types.Transaction, error) { + return _WalletStage2.contract.Transact(opts, "executeUserOp", _payload) +} + +// ExecuteUserOp is a paid mutator transaction binding the contract method 0x9c145aed. +// +// Solidity: function executeUserOp(bytes _payload) returns() +func (_WalletStage2 *WalletStage2Session) ExecuteUserOp(_payload []byte) (*types.Transaction, error) { + return _WalletStage2.Contract.ExecuteUserOp(&_WalletStage2.TransactOpts, _payload) +} + +// ExecuteUserOp is a paid mutator transaction binding the contract method 0x9c145aed. +// +// Solidity: function executeUserOp(bytes _payload) returns() +func (_WalletStage2 *WalletStage2TransactorSession) ExecuteUserOp(_payload []byte) (*types.Transaction, error) { + return _WalletStage2.Contract.ExecuteUserOp(&_WalletStage2.TransactOpts, _payload) +} + +// RemoveHook is a paid mutator transaction binding the contract method 0x4fcf3eca. +// +// Solidity: function removeHook(bytes4 selector) payable returns() +func (_WalletStage2 *WalletStage2Transactor) RemoveHook(opts *bind.TransactOpts, selector [4]byte) (*types.Transaction, error) { + return _WalletStage2.contract.Transact(opts, "removeHook", selector) +} + +// RemoveHook is a paid mutator transaction binding the contract method 0x4fcf3eca. +// +// Solidity: function removeHook(bytes4 selector) payable returns() +func (_WalletStage2 *WalletStage2Session) RemoveHook(selector [4]byte) (*types.Transaction, error) { + return _WalletStage2.Contract.RemoveHook(&_WalletStage2.TransactOpts, selector) +} + +// RemoveHook is a paid mutator transaction binding the contract method 0x4fcf3eca. +// +// Solidity: function removeHook(bytes4 selector) payable returns() +func (_WalletStage2 *WalletStage2TransactorSession) RemoveHook(selector [4]byte) (*types.Transaction, error) { + return _WalletStage2.Contract.RemoveHook(&_WalletStage2.TransactOpts, selector) +} + +// SelfExecute is a paid mutator transaction binding the contract method 0x6ea44577. +// +// Solidity: function selfExecute(bytes _payload) payable returns() +func (_WalletStage2 *WalletStage2Transactor) SelfExecute(opts *bind.TransactOpts, _payload []byte) (*types.Transaction, error) { + return _WalletStage2.contract.Transact(opts, "selfExecute", _payload) +} + +// SelfExecute is a paid mutator transaction binding the contract method 0x6ea44577. +// +// Solidity: function selfExecute(bytes _payload) payable returns() +func (_WalletStage2 *WalletStage2Session) SelfExecute(_payload []byte) (*types.Transaction, error) { + return _WalletStage2.Contract.SelfExecute(&_WalletStage2.TransactOpts, _payload) +} + +// SelfExecute is a paid mutator transaction binding the contract method 0x6ea44577. +// +// Solidity: function selfExecute(bytes _payload) payable returns() +func (_WalletStage2 *WalletStage2TransactorSession) SelfExecute(_payload []byte) (*types.Transaction, error) { + return _WalletStage2.Contract.SelfExecute(&_WalletStage2.TransactOpts, _payload) +} + +// SetStaticSignature is a paid mutator transaction binding the contract method 0xf727ef1c. +// +// Solidity: function setStaticSignature(bytes32 _hash, address _address, uint96 _timestamp) returns() +func (_WalletStage2 *WalletStage2Transactor) SetStaticSignature(opts *bind.TransactOpts, _hash [32]byte, _address common.Address, _timestamp *big.Int) (*types.Transaction, error) { + return _WalletStage2.contract.Transact(opts, "setStaticSignature", _hash, _address, _timestamp) +} + +// SetStaticSignature is a paid mutator transaction binding the contract method 0xf727ef1c. +// +// Solidity: function setStaticSignature(bytes32 _hash, address _address, uint96 _timestamp) returns() +func (_WalletStage2 *WalletStage2Session) SetStaticSignature(_hash [32]byte, _address common.Address, _timestamp *big.Int) (*types.Transaction, error) { + return _WalletStage2.Contract.SetStaticSignature(&_WalletStage2.TransactOpts, _hash, _address, _timestamp) +} + +// SetStaticSignature is a paid mutator transaction binding the contract method 0xf727ef1c. +// +// Solidity: function setStaticSignature(bytes32 _hash, address _address, uint96 _timestamp) returns() +func (_WalletStage2 *WalletStage2TransactorSession) SetStaticSignature(_hash [32]byte, _address common.Address, _timestamp *big.Int) (*types.Transaction, error) { + return _WalletStage2.Contract.SetStaticSignature(&_WalletStage2.TransactOpts, _hash, _address, _timestamp) +} + +// TokensReceived is a paid mutator transaction binding the contract method 0x0023de29. +// +// Solidity: function tokensReceived(address operator, address from, address to, uint256 amount, bytes data, bytes operatorData) returns() +func (_WalletStage2 *WalletStage2Transactor) TokensReceived(opts *bind.TransactOpts, operator common.Address, from common.Address, to common.Address, amount *big.Int, data []byte, operatorData []byte) (*types.Transaction, error) { + return _WalletStage2.contract.Transact(opts, "tokensReceived", operator, from, to, amount, data, operatorData) +} + +// TokensReceived is a paid mutator transaction binding the contract method 0x0023de29. +// +// Solidity: function tokensReceived(address operator, address from, address to, uint256 amount, bytes data, bytes operatorData) returns() +func (_WalletStage2 *WalletStage2Session) TokensReceived(operator common.Address, from common.Address, to common.Address, amount *big.Int, data []byte, operatorData []byte) (*types.Transaction, error) { + return _WalletStage2.Contract.TokensReceived(&_WalletStage2.TransactOpts, operator, from, to, amount, data, operatorData) +} + +// TokensReceived is a paid mutator transaction binding the contract method 0x0023de29. +// +// Solidity: function tokensReceived(address operator, address from, address to, uint256 amount, bytes data, bytes operatorData) returns() +func (_WalletStage2 *WalletStage2TransactorSession) TokensReceived(operator common.Address, from common.Address, to common.Address, amount *big.Int, data []byte, operatorData []byte) (*types.Transaction, error) { + return _WalletStage2.Contract.TokensReceived(&_WalletStage2.TransactOpts, operator, from, to, amount, data, operatorData) +} + +// UpdateImageHash is a paid mutator transaction binding the contract method 0x29561426. +// +// Solidity: function updateImageHash(bytes32 _imageHash) returns() +func (_WalletStage2 *WalletStage2Transactor) UpdateImageHash(opts *bind.TransactOpts, _imageHash [32]byte) (*types.Transaction, error) { + return _WalletStage2.contract.Transact(opts, "updateImageHash", _imageHash) +} + +// UpdateImageHash is a paid mutator transaction binding the contract method 0x29561426. +// +// Solidity: function updateImageHash(bytes32 _imageHash) returns() +func (_WalletStage2 *WalletStage2Session) UpdateImageHash(_imageHash [32]byte) (*types.Transaction, error) { + return _WalletStage2.Contract.UpdateImageHash(&_WalletStage2.TransactOpts, _imageHash) +} + +// UpdateImageHash is a paid mutator transaction binding the contract method 0x29561426. +// +// Solidity: function updateImageHash(bytes32 _imageHash) returns() +func (_WalletStage2 *WalletStage2TransactorSession) UpdateImageHash(_imageHash [32]byte) (*types.Transaction, error) { + return _WalletStage2.Contract.UpdateImageHash(&_WalletStage2.TransactOpts, _imageHash) +} + +// UpdateImplementation is a paid mutator transaction binding the contract method 0x025b22bc. +// +// Solidity: function updateImplementation(address _implementation) payable returns() +func (_WalletStage2 *WalletStage2Transactor) UpdateImplementation(opts *bind.TransactOpts, _implementation common.Address) (*types.Transaction, error) { + return _WalletStage2.contract.Transact(opts, "updateImplementation", _implementation) +} + +// UpdateImplementation is a paid mutator transaction binding the contract method 0x025b22bc. +// +// Solidity: function updateImplementation(address _implementation) payable returns() +func (_WalletStage2 *WalletStage2Session) UpdateImplementation(_implementation common.Address) (*types.Transaction, error) { + return _WalletStage2.Contract.UpdateImplementation(&_WalletStage2.TransactOpts, _implementation) +} + +// UpdateImplementation is a paid mutator transaction binding the contract method 0x025b22bc. +// +// Solidity: function updateImplementation(address _implementation) payable returns() +func (_WalletStage2 *WalletStage2TransactorSession) UpdateImplementation(_implementation common.Address) (*types.Transaction, error) { + return _WalletStage2.Contract.UpdateImplementation(&_WalletStage2.TransactOpts, _implementation) +} + +// ValidateUserOp is a paid mutator transaction binding the contract method 0x19822f7c. +// +// Solidity: function validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes) userOp, bytes32 userOpHash, uint256 missingAccountFunds) returns(uint256 validationData) +func (_WalletStage2 *WalletStage2Transactor) ValidateUserOp(opts *bind.TransactOpts, userOp PackedUserOperation, userOpHash [32]byte, missingAccountFunds *big.Int) (*types.Transaction, error) { + return _WalletStage2.contract.Transact(opts, "validateUserOp", userOp, userOpHash, missingAccountFunds) +} + +// ValidateUserOp is a paid mutator transaction binding the contract method 0x19822f7c. +// +// Solidity: function validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes) userOp, bytes32 userOpHash, uint256 missingAccountFunds) returns(uint256 validationData) +func (_WalletStage2 *WalletStage2Session) ValidateUserOp(userOp PackedUserOperation, userOpHash [32]byte, missingAccountFunds *big.Int) (*types.Transaction, error) { + return _WalletStage2.Contract.ValidateUserOp(&_WalletStage2.TransactOpts, userOp, userOpHash, missingAccountFunds) +} + +// ValidateUserOp is a paid mutator transaction binding the contract method 0x19822f7c. +// +// Solidity: function validateUserOp((address,uint256,bytes,bytes,bytes32,uint256,bytes32,bytes,bytes) userOp, bytes32 userOpHash, uint256 missingAccountFunds) returns(uint256 validationData) +func (_WalletStage2 *WalletStage2TransactorSession) ValidateUserOp(userOp PackedUserOperation, userOpHash [32]byte, missingAccountFunds *big.Int) (*types.Transaction, error) { + return _WalletStage2.Contract.ValidateUserOp(&_WalletStage2.TransactOpts, userOp, userOpHash, missingAccountFunds) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_WalletStage2 *WalletStage2Transactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) { + return _WalletStage2.contract.RawTransact(opts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_WalletStage2 *WalletStage2Session) Fallback(calldata []byte) (*types.Transaction, error) { + return _WalletStage2.Contract.Fallback(&_WalletStage2.TransactOpts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_WalletStage2 *WalletStage2TransactorSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _WalletStage2.Contract.Fallback(&_WalletStage2.TransactOpts, calldata) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_WalletStage2 *WalletStage2Transactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _WalletStage2.contract.RawTransact(opts, nil) // calldata is disallowed for receive function +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_WalletStage2 *WalletStage2Session) Receive() (*types.Transaction, error) { + return _WalletStage2.Contract.Receive(&_WalletStage2.TransactOpts) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_WalletStage2 *WalletStage2TransactorSession) Receive() (*types.Transaction, error) { + return _WalletStage2.Contract.Receive(&_WalletStage2.TransactOpts) +} + +// WalletStage2CallAbortedIterator is returned from FilterCallAborted and is used to iterate over the raw logs and unpacked data for CallAborted events raised by the WalletStage2 contract. +type WalletStage2CallAbortedIterator struct { + Event *WalletStage2CallAborted // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WalletStage2CallAbortedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WalletStage2CallAborted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WalletStage2CallAborted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WalletStage2CallAbortedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WalletStage2CallAbortedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WalletStage2CallAborted represents a CallAborted event raised by the WalletStage2 contract. +type WalletStage2CallAborted struct { + OpHash [32]byte + Index *big.Int + ReturnData []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterCallAborted is a free log retrieval operation binding the contract event 0xc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b. +// +// Solidity: event CallAborted(bytes32 _opHash, uint256 _index, bytes _returnData) +func (_WalletStage2 *WalletStage2Filterer) FilterCallAborted(opts *bind.FilterOpts) (*WalletStage2CallAbortedIterator, error) { + + logs, sub, err := _WalletStage2.contract.FilterLogs(opts, "CallAborted") + if err != nil { + return nil, err + } + return &WalletStage2CallAbortedIterator{contract: _WalletStage2.contract, event: "CallAborted", logs: logs, sub: sub}, nil +} + +// WatchCallAborted is a free log subscription operation binding the contract event 0xc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b. +// +// Solidity: event CallAborted(bytes32 _opHash, uint256 _index, bytes _returnData) +func (_WalletStage2 *WalletStage2Filterer) WatchCallAborted(opts *bind.WatchOpts, sink chan<- *WalletStage2CallAborted) (event.Subscription, error) { + + logs, sub, err := _WalletStage2.contract.WatchLogs(opts, "CallAborted") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WalletStage2CallAborted) + if err := _WalletStage2.contract.UnpackLog(event, "CallAborted", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseCallAborted is a log parse operation binding the contract event 0xc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b. +// +// Solidity: event CallAborted(bytes32 _opHash, uint256 _index, bytes _returnData) +func (_WalletStage2 *WalletStage2Filterer) ParseCallAborted(log types.Log) (*WalletStage2CallAborted, error) { + event := new(WalletStage2CallAborted) + if err := _WalletStage2.contract.UnpackLog(event, "CallAborted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WalletStage2CallFailedIterator is returned from FilterCallFailed and is used to iterate over the raw logs and unpacked data for CallFailed events raised by the WalletStage2 contract. +type WalletStage2CallFailedIterator struct { + Event *WalletStage2CallFailed // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WalletStage2CallFailedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WalletStage2CallFailed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WalletStage2CallFailed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WalletStage2CallFailedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WalletStage2CallFailedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WalletStage2CallFailed represents a CallFailed event raised by the WalletStage2 contract. +type WalletStage2CallFailed struct { + OpHash [32]byte + Index *big.Int + ReturnData []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterCallFailed is a free log retrieval operation binding the contract event 0x115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d. +// +// Solidity: event CallFailed(bytes32 _opHash, uint256 _index, bytes _returnData) +func (_WalletStage2 *WalletStage2Filterer) FilterCallFailed(opts *bind.FilterOpts) (*WalletStage2CallFailedIterator, error) { + + logs, sub, err := _WalletStage2.contract.FilterLogs(opts, "CallFailed") + if err != nil { + return nil, err + } + return &WalletStage2CallFailedIterator{contract: _WalletStage2.contract, event: "CallFailed", logs: logs, sub: sub}, nil +} + +// WatchCallFailed is a free log subscription operation binding the contract event 0x115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d. +// +// Solidity: event CallFailed(bytes32 _opHash, uint256 _index, bytes _returnData) +func (_WalletStage2 *WalletStage2Filterer) WatchCallFailed(opts *bind.WatchOpts, sink chan<- *WalletStage2CallFailed) (event.Subscription, error) { + + logs, sub, err := _WalletStage2.contract.WatchLogs(opts, "CallFailed") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WalletStage2CallFailed) + if err := _WalletStage2.contract.UnpackLog(event, "CallFailed", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseCallFailed is a log parse operation binding the contract event 0x115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d. +// +// Solidity: event CallFailed(bytes32 _opHash, uint256 _index, bytes _returnData) +func (_WalletStage2 *WalletStage2Filterer) ParseCallFailed(log types.Log) (*WalletStage2CallFailed, error) { + event := new(WalletStage2CallFailed) + if err := _WalletStage2.contract.UnpackLog(event, "CallFailed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WalletStage2CallSkippedIterator is returned from FilterCallSkipped and is used to iterate over the raw logs and unpacked data for CallSkipped events raised by the WalletStage2 contract. +type WalletStage2CallSkippedIterator struct { + Event *WalletStage2CallSkipped // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WalletStage2CallSkippedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WalletStage2CallSkipped) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WalletStage2CallSkipped) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WalletStage2CallSkippedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WalletStage2CallSkippedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WalletStage2CallSkipped represents a CallSkipped event raised by the WalletStage2 contract. +type WalletStage2CallSkipped struct { + OpHash [32]byte + Index *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterCallSkipped is a free log retrieval operation binding the contract event 0x9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b. +// +// Solidity: event CallSkipped(bytes32 _opHash, uint256 _index) +func (_WalletStage2 *WalletStage2Filterer) FilterCallSkipped(opts *bind.FilterOpts) (*WalletStage2CallSkippedIterator, error) { + + logs, sub, err := _WalletStage2.contract.FilterLogs(opts, "CallSkipped") + if err != nil { + return nil, err + } + return &WalletStage2CallSkippedIterator{contract: _WalletStage2.contract, event: "CallSkipped", logs: logs, sub: sub}, nil +} + +// WatchCallSkipped is a free log subscription operation binding the contract event 0x9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b. +// +// Solidity: event CallSkipped(bytes32 _opHash, uint256 _index) +func (_WalletStage2 *WalletStage2Filterer) WatchCallSkipped(opts *bind.WatchOpts, sink chan<- *WalletStage2CallSkipped) (event.Subscription, error) { + + logs, sub, err := _WalletStage2.contract.WatchLogs(opts, "CallSkipped") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WalletStage2CallSkipped) + if err := _WalletStage2.contract.UnpackLog(event, "CallSkipped", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseCallSkipped is a log parse operation binding the contract event 0x9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b. +// +// Solidity: event CallSkipped(bytes32 _opHash, uint256 _index) +func (_WalletStage2 *WalletStage2Filterer) ParseCallSkipped(log types.Log) (*WalletStage2CallSkipped, error) { + event := new(WalletStage2CallSkipped) + if err := _WalletStage2.contract.UnpackLog(event, "CallSkipped", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WalletStage2CallSucceededIterator is returned from FilterCallSucceeded and is used to iterate over the raw logs and unpacked data for CallSucceeded events raised by the WalletStage2 contract. +type WalletStage2CallSucceededIterator struct { + Event *WalletStage2CallSucceeded // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WalletStage2CallSucceededIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WalletStage2CallSucceeded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WalletStage2CallSucceeded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WalletStage2CallSucceededIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WalletStage2CallSucceededIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WalletStage2CallSucceeded represents a CallSucceeded event raised by the WalletStage2 contract. +type WalletStage2CallSucceeded struct { + OpHash [32]byte + Index *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterCallSucceeded is a free log retrieval operation binding the contract event 0x5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a. +// +// Solidity: event CallSucceeded(bytes32 _opHash, uint256 _index) +func (_WalletStage2 *WalletStage2Filterer) FilterCallSucceeded(opts *bind.FilterOpts) (*WalletStage2CallSucceededIterator, error) { + + logs, sub, err := _WalletStage2.contract.FilterLogs(opts, "CallSucceeded") + if err != nil { + return nil, err + } + return &WalletStage2CallSucceededIterator{contract: _WalletStage2.contract, event: "CallSucceeded", logs: logs, sub: sub}, nil +} + +// WatchCallSucceeded is a free log subscription operation binding the contract event 0x5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a. +// +// Solidity: event CallSucceeded(bytes32 _opHash, uint256 _index) +func (_WalletStage2 *WalletStage2Filterer) WatchCallSucceeded(opts *bind.WatchOpts, sink chan<- *WalletStage2CallSucceeded) (event.Subscription, error) { + + logs, sub, err := _WalletStage2.contract.WatchLogs(opts, "CallSucceeded") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WalletStage2CallSucceeded) + if err := _WalletStage2.contract.UnpackLog(event, "CallSucceeded", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseCallSucceeded is a log parse operation binding the contract event 0x5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a. +// +// Solidity: event CallSucceeded(bytes32 _opHash, uint256 _index) +func (_WalletStage2 *WalletStage2Filterer) ParseCallSucceeded(log types.Log) (*WalletStage2CallSucceeded, error) { + event := new(WalletStage2CallSucceeded) + if err := _WalletStage2.contract.UnpackLog(event, "CallSucceeded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WalletStage2DefinedHookIterator is returned from FilterDefinedHook and is used to iterate over the raw logs and unpacked data for DefinedHook events raised by the WalletStage2 contract. +type WalletStage2DefinedHookIterator struct { + Event *WalletStage2DefinedHook // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WalletStage2DefinedHookIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WalletStage2DefinedHook) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WalletStage2DefinedHook) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WalletStage2DefinedHookIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WalletStage2DefinedHookIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WalletStage2DefinedHook represents a DefinedHook event raised by the WalletStage2 contract. +type WalletStage2DefinedHook struct { + Selector [4]byte + Implementation common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDefinedHook is a free log retrieval operation binding the contract event 0x0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed1. +// +// Solidity: event DefinedHook(bytes4 selector, address implementation) +func (_WalletStage2 *WalletStage2Filterer) FilterDefinedHook(opts *bind.FilterOpts) (*WalletStage2DefinedHookIterator, error) { + + logs, sub, err := _WalletStage2.contract.FilterLogs(opts, "DefinedHook") + if err != nil { + return nil, err + } + return &WalletStage2DefinedHookIterator{contract: _WalletStage2.contract, event: "DefinedHook", logs: logs, sub: sub}, nil +} + +// WatchDefinedHook is a free log subscription operation binding the contract event 0x0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed1. +// +// Solidity: event DefinedHook(bytes4 selector, address implementation) +func (_WalletStage2 *WalletStage2Filterer) WatchDefinedHook(opts *bind.WatchOpts, sink chan<- *WalletStage2DefinedHook) (event.Subscription, error) { + + logs, sub, err := _WalletStage2.contract.WatchLogs(opts, "DefinedHook") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WalletStage2DefinedHook) + if err := _WalletStage2.contract.UnpackLog(event, "DefinedHook", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseDefinedHook is a log parse operation binding the contract event 0x0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed1. +// +// Solidity: event DefinedHook(bytes4 selector, address implementation) +func (_WalletStage2 *WalletStage2Filterer) ParseDefinedHook(log types.Log) (*WalletStage2DefinedHook, error) { + event := new(WalletStage2DefinedHook) + if err := _WalletStage2.contract.UnpackLog(event, "DefinedHook", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WalletStage2ImageHashUpdatedIterator is returned from FilterImageHashUpdated and is used to iterate over the raw logs and unpacked data for ImageHashUpdated events raised by the WalletStage2 contract. +type WalletStage2ImageHashUpdatedIterator struct { + Event *WalletStage2ImageHashUpdated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WalletStage2ImageHashUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WalletStage2ImageHashUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WalletStage2ImageHashUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WalletStage2ImageHashUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WalletStage2ImageHashUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WalletStage2ImageHashUpdated represents a ImageHashUpdated event raised by the WalletStage2 contract. +type WalletStage2ImageHashUpdated struct { + NewImageHash [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterImageHashUpdated is a free log retrieval operation binding the contract event 0x307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa. +// +// Solidity: event ImageHashUpdated(bytes32 newImageHash) +func (_WalletStage2 *WalletStage2Filterer) FilterImageHashUpdated(opts *bind.FilterOpts) (*WalletStage2ImageHashUpdatedIterator, error) { + + logs, sub, err := _WalletStage2.contract.FilterLogs(opts, "ImageHashUpdated") + if err != nil { + return nil, err + } + return &WalletStage2ImageHashUpdatedIterator{contract: _WalletStage2.contract, event: "ImageHashUpdated", logs: logs, sub: sub}, nil +} + +// WatchImageHashUpdated is a free log subscription operation binding the contract event 0x307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa. +// +// Solidity: event ImageHashUpdated(bytes32 newImageHash) +func (_WalletStage2 *WalletStage2Filterer) WatchImageHashUpdated(opts *bind.WatchOpts, sink chan<- *WalletStage2ImageHashUpdated) (event.Subscription, error) { + + logs, sub, err := _WalletStage2.contract.WatchLogs(opts, "ImageHashUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WalletStage2ImageHashUpdated) + if err := _WalletStage2.contract.UnpackLog(event, "ImageHashUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseImageHashUpdated is a log parse operation binding the contract event 0x307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa. +// +// Solidity: event ImageHashUpdated(bytes32 newImageHash) +func (_WalletStage2 *WalletStage2Filterer) ParseImageHashUpdated(log types.Log) (*WalletStage2ImageHashUpdated, error) { + event := new(WalletStage2ImageHashUpdated) + if err := _WalletStage2.contract.UnpackLog(event, "ImageHashUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WalletStage2ImplementationUpdatedIterator is returned from FilterImplementationUpdated and is used to iterate over the raw logs and unpacked data for ImplementationUpdated events raised by the WalletStage2 contract. +type WalletStage2ImplementationUpdatedIterator struct { + Event *WalletStage2ImplementationUpdated // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WalletStage2ImplementationUpdatedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WalletStage2ImplementationUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WalletStage2ImplementationUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WalletStage2ImplementationUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WalletStage2ImplementationUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WalletStage2ImplementationUpdated represents a ImplementationUpdated event raised by the WalletStage2 contract. +type WalletStage2ImplementationUpdated struct { + NewImplementation common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterImplementationUpdated is a free log retrieval operation binding the contract event 0x310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca03. +// +// Solidity: event ImplementationUpdated(address newImplementation) +func (_WalletStage2 *WalletStage2Filterer) FilterImplementationUpdated(opts *bind.FilterOpts) (*WalletStage2ImplementationUpdatedIterator, error) { + + logs, sub, err := _WalletStage2.contract.FilterLogs(opts, "ImplementationUpdated") + if err != nil { + return nil, err + } + return &WalletStage2ImplementationUpdatedIterator{contract: _WalletStage2.contract, event: "ImplementationUpdated", logs: logs, sub: sub}, nil +} + +// WatchImplementationUpdated is a free log subscription operation binding the contract event 0x310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca03. +// +// Solidity: event ImplementationUpdated(address newImplementation) +func (_WalletStage2 *WalletStage2Filterer) WatchImplementationUpdated(opts *bind.WatchOpts, sink chan<- *WalletStage2ImplementationUpdated) (event.Subscription, error) { + + logs, sub, err := _WalletStage2.contract.WatchLogs(opts, "ImplementationUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WalletStage2ImplementationUpdated) + if err := _WalletStage2.contract.UnpackLog(event, "ImplementationUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseImplementationUpdated is a log parse operation binding the contract event 0x310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca03. +// +// Solidity: event ImplementationUpdated(address newImplementation) +func (_WalletStage2 *WalletStage2Filterer) ParseImplementationUpdated(log types.Log) (*WalletStage2ImplementationUpdated, error) { + event := new(WalletStage2ImplementationUpdated) + if err := _WalletStage2.contract.UnpackLog(event, "ImplementationUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WalletStage2NonceChangeIterator is returned from FilterNonceChange and is used to iterate over the raw logs and unpacked data for NonceChange events raised by the WalletStage2 contract. +type WalletStage2NonceChangeIterator struct { + Event *WalletStage2NonceChange // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WalletStage2NonceChangeIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WalletStage2NonceChange) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WalletStage2NonceChange) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WalletStage2NonceChangeIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WalletStage2NonceChangeIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WalletStage2NonceChange represents a NonceChange event raised by the WalletStage2 contract. +type WalletStage2NonceChange struct { + Space *big.Int + NewNonce *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterNonceChange is a free log retrieval operation binding the contract event 0x1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f881. +// +// Solidity: event NonceChange(uint256 _space, uint256 _newNonce) +func (_WalletStage2 *WalletStage2Filterer) FilterNonceChange(opts *bind.FilterOpts) (*WalletStage2NonceChangeIterator, error) { + + logs, sub, err := _WalletStage2.contract.FilterLogs(opts, "NonceChange") + if err != nil { + return nil, err + } + return &WalletStage2NonceChangeIterator{contract: _WalletStage2.contract, event: "NonceChange", logs: logs, sub: sub}, nil +} + +// WatchNonceChange is a free log subscription operation binding the contract event 0x1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f881. +// +// Solidity: event NonceChange(uint256 _space, uint256 _newNonce) +func (_WalletStage2 *WalletStage2Filterer) WatchNonceChange(opts *bind.WatchOpts, sink chan<- *WalletStage2NonceChange) (event.Subscription, error) { + + logs, sub, err := _WalletStage2.contract.WatchLogs(opts, "NonceChange") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WalletStage2NonceChange) + if err := _WalletStage2.contract.UnpackLog(event, "NonceChange", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseNonceChange is a log parse operation binding the contract event 0x1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f881. +// +// Solidity: event NonceChange(uint256 _space, uint256 _newNonce) +func (_WalletStage2 *WalletStage2Filterer) ParseNonceChange(log types.Log) (*WalletStage2NonceChange, error) { + event := new(WalletStage2NonceChange) + if err := _WalletStage2.contract.UnpackLog(event, "NonceChange", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WalletStage2StaticSignatureSetIterator is returned from FilterStaticSignatureSet and is used to iterate over the raw logs and unpacked data for StaticSignatureSet events raised by the WalletStage2 contract. +type WalletStage2StaticSignatureSetIterator struct { + Event *WalletStage2StaticSignatureSet // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WalletStage2StaticSignatureSetIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WalletStage2StaticSignatureSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WalletStage2StaticSignatureSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WalletStage2StaticSignatureSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WalletStage2StaticSignatureSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WalletStage2StaticSignatureSet represents a StaticSignatureSet event raised by the WalletStage2 contract. +type WalletStage2StaticSignatureSet struct { + Hash [32]byte + Address common.Address + Timestamp *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterStaticSignatureSet is a free log retrieval operation binding the contract event 0xebf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1. +// +// Solidity: event StaticSignatureSet(bytes32 _hash, address _address, uint96 _timestamp) +func (_WalletStage2 *WalletStage2Filterer) FilterStaticSignatureSet(opts *bind.FilterOpts) (*WalletStage2StaticSignatureSetIterator, error) { + + logs, sub, err := _WalletStage2.contract.FilterLogs(opts, "StaticSignatureSet") + if err != nil { + return nil, err + } + return &WalletStage2StaticSignatureSetIterator{contract: _WalletStage2.contract, event: "StaticSignatureSet", logs: logs, sub: sub}, nil +} + +// WatchStaticSignatureSet is a free log subscription operation binding the contract event 0xebf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1. +// +// Solidity: event StaticSignatureSet(bytes32 _hash, address _address, uint96 _timestamp) +func (_WalletStage2 *WalletStage2Filterer) WatchStaticSignatureSet(opts *bind.WatchOpts, sink chan<- *WalletStage2StaticSignatureSet) (event.Subscription, error) { + + logs, sub, err := _WalletStage2.contract.WatchLogs(opts, "StaticSignatureSet") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WalletStage2StaticSignatureSet) + if err := _WalletStage2.contract.UnpackLog(event, "StaticSignatureSet", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseStaticSignatureSet is a log parse operation binding the contract event 0xebf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1. +// +// Solidity: event StaticSignatureSet(bytes32 _hash, address _address, uint96 _timestamp) +func (_WalletStage2 *WalletStage2Filterer) ParseStaticSignatureSet(log types.Log) (*WalletStage2StaticSignatureSet, error) { + event := new(WalletStage2StaticSignatureSet) + if err := _WalletStage2.contract.UnpackLog(event, "StaticSignatureSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/contracts/gen/valueforwarder/value_forwarder.gen.go b/contracts/gen/valueforwarder/value_forwarder.gen.go new file mode 100644 index 00000000..d5c1937c --- /dev/null +++ b/contracts/gen/valueforwarder/value_forwarder.gen.go @@ -0,0 +1,224 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package valueforwarder + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/0xsequence/ethkit/go-ethereum" + "github.com/0xsequence/ethkit/go-ethereum/accounts/abi" + "github.com/0xsequence/ethkit/go-ethereum/accounts/abi/bind" + "github.com/0xsequence/ethkit/go-ethereum/common" + "github.com/0xsequence/ethkit/go-ethereum/core/types" + "github.com/0xsequence/ethkit/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// ValueForwarderMetaData contains all meta data concerning the ValueForwarder contract. +var ValueForwarderMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"function\",\"name\":\"forwardValue\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"payable\"}]", + Bin: "0x6080806040523460155761014f908161001b8239f35b600080fdfe6080604052600436101561001257600080fd5b60003560e01c6398f850f11461002757600080fd5b6040366003190112610114576004356001600160a01b038116810361011457600080808093602435905af13d1561010f573d67ffffffffffffffff81116100f95760405190601f8101601f19908116603f0116820167ffffffffffffffff8111838210176100f9576040528152600060203d92013e5b156100a457005b60405162461bcd60e51b815260206004820152602760248201527f56616c7565466f727761726465723a204661696c656420746f20666f72776172604482015266642076616c756560c81b6064820152608490fd5b634e487b7160e01b600052604160045260246000fd5b61009d565b600080fdfea26469706673582212202706a11f313e042ccf1cd42b40b5f01308364a2290592fe4e14dce33175da1bf64736f6c634300081c0033", +} + +// ValueForwarderABI is the input ABI used to generate the binding from. +// Deprecated: Use ValueForwarderMetaData.ABI instead. +var ValueForwarderABI = ValueForwarderMetaData.ABI + +// ValueForwarderBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ValueForwarderMetaData.Bin instead. +var ValueForwarderBin = ValueForwarderMetaData.Bin + +// DeployValueForwarder deploys a new Ethereum contract, binding an instance of ValueForwarder to it. +func DeployValueForwarder(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ValueForwarder, error) { + parsed, err := ValueForwarderMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ValueForwarderBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ValueForwarder{ValueForwarderCaller: ValueForwarderCaller{contract: contract}, ValueForwarderTransactor: ValueForwarderTransactor{contract: contract}, ValueForwarderFilterer: ValueForwarderFilterer{contract: contract}}, nil +} + +// ValueForwarder is an auto generated Go binding around an Ethereum contract. +type ValueForwarder struct { + ValueForwarderCaller // Read-only binding to the contract + ValueForwarderTransactor // Write-only binding to the contract + ValueForwarderFilterer // Log filterer for contract events +} + +// ValueForwarderCaller is an auto generated read-only Go binding around an Ethereum contract. +type ValueForwarderCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ValueForwarderTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ValueForwarderTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ValueForwarderFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ValueForwarderFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ValueForwarderSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ValueForwarderSession struct { + Contract *ValueForwarder // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ValueForwarderCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ValueForwarderCallerSession struct { + Contract *ValueForwarderCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ValueForwarderTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ValueForwarderTransactorSession struct { + Contract *ValueForwarderTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ValueForwarderRaw is an auto generated low-level Go binding around an Ethereum contract. +type ValueForwarderRaw struct { + Contract *ValueForwarder // Generic contract binding to access the raw methods on +} + +// ValueForwarderCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ValueForwarderCallerRaw struct { + Contract *ValueForwarderCaller // Generic read-only contract binding to access the raw methods on +} + +// ValueForwarderTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ValueForwarderTransactorRaw struct { + Contract *ValueForwarderTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewValueForwarder creates a new instance of ValueForwarder, bound to a specific deployed contract. +func NewValueForwarder(address common.Address, backend bind.ContractBackend) (*ValueForwarder, error) { + contract, err := bindValueForwarder(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ValueForwarder{ValueForwarderCaller: ValueForwarderCaller{contract: contract}, ValueForwarderTransactor: ValueForwarderTransactor{contract: contract}, ValueForwarderFilterer: ValueForwarderFilterer{contract: contract}}, nil +} + +// NewValueForwarderCaller creates a new read-only instance of ValueForwarder, bound to a specific deployed contract. +func NewValueForwarderCaller(address common.Address, caller bind.ContractCaller) (*ValueForwarderCaller, error) { + contract, err := bindValueForwarder(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ValueForwarderCaller{contract: contract}, nil +} + +// NewValueForwarderTransactor creates a new write-only instance of ValueForwarder, bound to a specific deployed contract. +func NewValueForwarderTransactor(address common.Address, transactor bind.ContractTransactor) (*ValueForwarderTransactor, error) { + contract, err := bindValueForwarder(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ValueForwarderTransactor{contract: contract}, nil +} + +// NewValueForwarderFilterer creates a new log filterer instance of ValueForwarder, bound to a specific deployed contract. +func NewValueForwarderFilterer(address common.Address, filterer bind.ContractFilterer) (*ValueForwarderFilterer, error) { + contract, err := bindValueForwarder(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ValueForwarderFilterer{contract: contract}, nil +} + +// bindValueForwarder binds a generic wrapper to an already deployed contract. +func bindValueForwarder(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ValueForwarderMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ValueForwarder *ValueForwarderRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ValueForwarder.Contract.ValueForwarderCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ValueForwarder *ValueForwarderRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ValueForwarder.Contract.ValueForwarderTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ValueForwarder *ValueForwarderRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ValueForwarder.Contract.ValueForwarderTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ValueForwarder *ValueForwarderCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ValueForwarder.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ValueForwarder *ValueForwarderTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ValueForwarder.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ValueForwarder *ValueForwarderTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ValueForwarder.Contract.contract.Transact(opts, method, params...) +} + +// ForwardValue is a paid mutator transaction binding the contract method 0x98f850f1. +// +// Solidity: function forwardValue(address to, uint256 value) payable returns() +func (_ValueForwarder *ValueForwarderTransactor) ForwardValue(opts *bind.TransactOpts, to common.Address, value *big.Int) (*types.Transaction, error) { + return _ValueForwarder.contract.Transact(opts, "forwardValue", to, value) +} + +// ForwardValue is a paid mutator transaction binding the contract method 0x98f850f1. +// +// Solidity: function forwardValue(address to, uint256 value) payable returns() +func (_ValueForwarder *ValueForwarderSession) ForwardValue(to common.Address, value *big.Int) (*types.Transaction, error) { + return _ValueForwarder.Contract.ForwardValue(&_ValueForwarder.TransactOpts, to, value) +} + +// ForwardValue is a paid mutator transaction binding the contract method 0x98f850f1. +// +// Solidity: function forwardValue(address to, uint256 value) payable returns() +func (_ValueForwarder *ValueForwarderTransactorSession) ForwardValue(to common.Address, value *big.Int) (*types.Transaction, error) { + return _ValueForwarder.Contract.ForwardValue(&_ValueForwarder.TransactOpts, to, value) +} diff --git a/core/core.go b/core/core.go index cea3eba6..26473826 100644 --- a/core/core.go +++ b/core/core.go @@ -6,7 +6,6 @@ package core import ( - "bytes" "context" "errors" "fmt" @@ -15,8 +14,8 @@ import ( "sync" "github.com/0xsequence/ethkit/ethrpc" + "github.com/0xsequence/ethkit/go-ethereum/accounts" "github.com/0xsequence/ethkit/go-ethereum/common" - "github.com/0xsequence/ethkit/go-ethereum/common/hexutil" "github.com/0xsequence/ethkit/go-ethereum/crypto" ) @@ -49,23 +48,21 @@ type Signature[C WalletConfig] interface { Threshold() uint16 // Checkpoint is the nonce of the wallet configuration that the signature applies to. - Checkpoint() uint32 + Checkpoint() uint64 // Recover derives the wallet configuration that the signature applies to. // Also returns the signature's weight. - // If chainID is not provided, provider must be provided. // If provider is not provided, EIP-1271 signatures are assumed to be NOT valid and ignored. + // If provider is not provided and the signature contains sapient signer signatures, recovery will fail. + // If payload is a digest without preimage and the signature contains non-compact sapient signer signatures, recovery will fail. // If signerSignatures is provided, it will be populated with the valid signer signatures of this signature. - Recover(ctx context.Context, digest Digest, wallet common.Address, chainID *big.Int, provider *ethrpc.Provider, signerSignatures ...SignerSignatures) (C, *big.Int, error) - - // Recover a signature but only using the subdigest - RecoverSubdigest(ctx context.Context, subdigest Subdigest, provider *ethrpc.Provider, signerSignatures ...SignerSignatures) (C, *big.Int, error) + Recover(ctx context.Context, payload Payload, provider *ethrpc.Provider, signerSignatures ...SignerSignatures) (C, *big.Int, error) // Reduce returns an equivalent optimized signature. - Reduce(subdigest Subdigest) Signature[C] + Reduce(payload Payload) Signature[C] // Join joins two signatures into one. - Join(subdigest Subdigest, other Signature[C]) (Signature[C], error) + Join(payload Payload, other Signature[C]) (Signature[C], error) // Data is the raw signature data. Data() ([]byte, error) @@ -82,7 +79,7 @@ type WalletConfig interface { Threshold() uint16 // Checkpoint is the nonce of the wallet configuration. - Checkpoint() uint32 + Checkpoint() uint64 // Signers is the set of signers in the wallet configuration. Signers() map[common.Address]uint16 @@ -90,25 +87,51 @@ type WalletConfig interface { // SignersWeight is the total weight of the signers passed to the function according to the wallet configuration. SignersWeight(signers []common.Address) uint16 + // IsComplete checks if the wallet configuration doesn't have pruned subtrees. + IsComplete() bool + // IsUsable checks if it's possible to construct signatures that meet threshold. IsUsable() error } -// A SignerSignatures object stores signer signatures indexed by signer and subdigest. -type SignerSignatures map[common.Address]map[common.Hash]SignerSignature +type SignerSignatures map[common.Address]struct { + Signature *SignerSignature + SapientSignatures map[common.Hash]SignerSignature +} func (s SignerSignatures) Insert(signer common.Address, signature SignerSignature) { if s == nil { return } - signerSignatures := s[signer] - if signerSignatures == nil { - signerSignatures = map[common.Hash]SignerSignature{} - s[signer] = signerSignatures + if signatures, ok := s[signer]; ok { + signatures.Signature = &signature + s[signer] = signatures + } else { + s[signer] = struct { + Signature *SignerSignature + SapientSignatures map[common.Hash]SignerSignature + }{Signature: &signature} } +} - signerSignatures[signature.Subdigest.Hash] = signature +func (s SignerSignatures) InsertSapient(signer common.Address, imageHash common.Hash, signature SignerSignature) { + if s == nil { + return + } + + if signatures, ok := s[signer]; ok { + if signatures.SapientSignatures == nil { + signatures.SapientSignatures = map[common.Hash]SignerSignature{} + } + signatures.SapientSignatures[imageHash] = signature + s[signer] = signatures + } else { + s[signer] = struct { + Signature *SignerSignature + SapientSignatures map[common.Hash]SignerSignature + }{SapientSignatures: map[common.Hash]SignerSignature{imageHash: signature}} + } } type SignerSignatureType int @@ -117,11 +140,12 @@ const ( SignerSignatureTypeEIP712 SignerSignatureType = iota + 1 SignerSignatureTypeEthSign SignerSignatureTypeEIP1271 + SignerSignatureTypeSapient + SignerSignatureTypeSapientCompact ) type SignerSignature struct { Signer common.Address - Subdigest Subdigest Type SignerSignatureType Signature []byte Error error @@ -225,80 +249,33 @@ type ImageHash struct { Preimage ImageHashable } +func (h ImageHash) ImageHash() ImageHash { + return h +} + var imageHashApprovalSalt = crypto.Keccak256Hash([]byte("SetImageHash(bytes32 imageHash)")) // Approval derives the digest that must be signed to approve the ImageHash for subsequent signatures. -func (h ImageHash) Approval() Digest { - return NewDigest(imageHashApprovalSalt.Bytes(), h.Bytes()) +func (h ImageHash) Approval() common.Hash { + return crypto.Keccak256Hash(imageHashApprovalSalt.Bytes(), h.Bytes()) } -// A Digest is a hash signed by a Sequence wallet. -// Used for type safety and preimage recovery. -type Digest struct { - common.Hash - - // Preimage is the preimage of the digest, nil if unknown. - Preimage []byte +func EthereumSignedMessage(message []byte) common.Hash { + return common.Hash(accounts.TextHash(message)) } -// NewDigest creates a Digest from a list of messages. -func NewDigest(messages ...[]byte) Digest { - preimage := bytes.Join(messages, nil) - - return Digest{ - Hash: crypto.Keccak256Hash(preimage), - Preimage: preimage, +func Ecrecover(digest common.Hash, signature []byte) (common.Address, error) { + if length := len(signature); length != crypto.SignatureLength { + return common.Address{}, fmt.Errorf("invalid ecdsa signature length %v, expected length %v", length, crypto.SignatureLength) } -} -// ApprovedImageHash recovers the ImageHash that the Digest approves for subsequent signatures, if known. -func (d Digest) ApprovedImageHash() (ImageHash, error) { - if !bytes.HasPrefix(d.Preimage, imageHashApprovalSalt.Bytes()) || len(d.Preimage) != len(imageHashApprovalSalt.Bytes())+common.HashLength { - return ImageHash{}, fmt.Errorf(`preimage %v of %v is not an image hash approval`, hexutil.Encode(d.Preimage), d.Hash) - } - - return ImageHash{Hash: common.BytesToHash(d.Preimage[len(imageHashApprovalSalt.Bytes()):])}, nil -} - -// Subdigest derives the hash to be signed by the Sequence wallet's signers to validate the digest. -func (d Digest) Subdigest(wallet common.Address, chainID ...*big.Int) Subdigest { - if len(chainID) == 0 { - chainID = []*big.Int{nil} - } - if chainID[0] == nil { - chainID[0] = new(big.Int) - } + signature_ := [crypto.SignatureLength]byte(signature) + signature_[len(signature_)-1] -= 27 - return Subdigest{ - Hash: crypto.Keccak256Hash([]byte{0x19, 0x01}, common.BigToHash(chainID[0]).Bytes(), wallet.Bytes(), d.Bytes()), - Digest: &d, - Wallet: &wallet, - ChainID: chainID[0], + pubkey, err := crypto.SigToPub(digest.Bytes(), signature_[:]) + if err != nil { + return common.Address{}, fmt.Errorf("unable to recover ecdsa signature: %w", err) } -} - -// A Subdigest is a hash signed by a Sequence wallet's signers. -// Used for type safety and preimage recovery. -type Subdigest struct { - common.Hash - - // Digest is the preimage of the subdigest, nil if unknown. - Digest *Digest - - // Wallet is the target wallet of the subdigest, nil if unknown. - Wallet *common.Address - // ChainID is the target chain ID of the subdigest, nil if unknown. - ChainID *big.Int - - // EthSignPreimage is the preimage of the eth_sign subdigest, nil if unknown. - EthSignPreimage *Subdigest -} - -// EthSignSubdigest derives the eth_sign subdigest of a subdigest. -func (s Subdigest) EthSignSubdigest() Subdigest { - return Subdigest{ - Hash: crypto.Keccak256Hash([]byte("\x19Ethereum Signed Message:\n"), []byte(fmt.Sprintf("%v", len(s.Bytes()))), s.Bytes()), - EthSignPreimage: &s, - } + return crypto.PubkeyToAddress(*pubkey), nil } diff --git a/core/passkey.go b/core/passkey.go new file mode 100644 index 00000000..2ba5d1db --- /dev/null +++ b/core/passkey.go @@ -0,0 +1,425 @@ +package core + +import ( + "bytes" + "crypto/ecdsa" + "crypto/elliptic" + "crypto/sha256" + "encoding/base64" + "errors" + "math/big" + + "github.com/0xsequence/ethkit/go-ethereum/accounts/abi" + "github.com/0xsequence/ethkit/go-ethereum/common" + "github.com/0xsequence/ethkit/go-ethereum/crypto" +) + +// ──────────────────────────────────────────────────────────────────────────────── +// Constants & flag‑bits (must match Passkeys.sol) +// ──────────────────────────────────────────────────────────────────────────────── +const ( + flagRequireUV = 0x01 + flagAuth16 = 0x02 + flagClient16 = 0x04 + flagChallenge16 = 0x08 + flagType16 = 0x10 + flagFallbackABI = 0x20 + flagHasMetadata = 0x40 +) + +// ──────────────────────────────────────────────────────────────────────────────── +// ABI helper (for the fallback format) +// ──────────────────────────────────────────────────────────────────────────────── +var passkeyTupleABI abi.Arguments + +func init() { + // Build at run‑time so we do not need a *.json file. + bytesType, _ := abi.NewType("bytes", "", nil) + stringType, _ := abi.NewType("string", "", nil) + uintType, _ := abi.NewType("uint256", "", nil) + bytes32Type, _ := abi.NewType("bytes32", "", nil) + boolType, _ := abi.NewType("bool", "", nil) + + // Struct WebAuthnAuth ‑ components must follow Solidity declaration order. + authStruct, _ := abi.NewType("tuple", "", []abi.ArgumentMarshaling{ + {Type: "bytes"}, // authenticatorData + {Type: "string"}, // clientDataJSON + {Type: "uint256"}, // challengeIndex + {Type: "uint256"}, // typeIndex + {Type: "bytes32"}, // r + {Type: "bytes32"}, // s + }) + + passkeyTupleABI = abi.Arguments{ + {Type: authStruct}, // 0 + {Type: boolType}, // 1 + {Type: bytes32Type}, // 2 + {Type: bytes32Type}, // 3 + {Type: bytes32Type}, // 4 + } + + // Keep the primitives around so the compiler doesn’t eliminate them + _ = []abi.Type{bytesType, stringType, uintType, bytes32Type} +} + +// ──────────────────────────────────────────────────────────────────────────────── +// Helpers +// ──────────────────────────────────────────────────────────────────────────────── +func uintToBytes(x uint64, n int) []byte { + out := make([]byte, n) + for i := n - 1; i >= 0; i-- { + out[i] = byte(x & 0xff) + x >>= 8 + } + return out +} +func bytesToUint(b []byte) uint64 { + var v uint64 + for _, c := range b { + v = v<<8 + uint64(c) + } + return v +} + +// ──────────────────────────────────────────────────────────────────────────────── +// PasskeySignature +// ──────────────────────────────────────────────────────────────────────────────── +type PasskeySignature struct { + // ---- core fields (affect image‑hash) ---- + requireUserVerification bool + x, y common.Hash + metadata common.Hash + + // ---- verification data ---- + authenticatorData []byte + clientDataJSON []byte + challengeIndex uint64 + typeIndex uint64 + r, s common.Hash +} + +// ────────────────── Decoding ────────────────── +func DecodePasskeySignature(signature []byte) (PasskeySignature, error) { + if len(signature) == 0 { + return PasskeySignature{}, errors.New("signature: empty") + } + flags := signature[0] + + // ── ABI fallback ────────────────────────────────────────────────────────── + if flags&flagFallbackABI != 0 { + return decodeFallbackABI(signature[1:]) + } + + // ── Compact format ─────────────────────────────────────────────────────── + readCursor := 1 + read := func(count int) ([]byte, error) { + if readCursor+count > len(signature) { + return nil, errors.New("signature: truncated") + } + out := signature[readCursor : readCursor+count] + readCursor += count + return out, nil + } + readLen := func(twoBytes bool) (uint64, error) { + lb := 1 + if twoBytes { + lb = 2 + } + b, err := read(lb) + if err != nil { + return 0, err + } + return bytesToUint(b), nil + } + + var ps PasskeySignature + ps.requireUserVerification = flags&flagRequireUV != 0 + + if flags&flagHasMetadata != 0 { + if b, err := read(32); err == nil { + ps.metadata = common.BytesToHash(b) + } else { + return PasskeySignature{}, err + } + } + + authLen, err := readLen(flags&flagAuth16 != 0) + if err != nil { + return PasskeySignature{}, err + } + ps.authenticatorData, err = read(int(authLen)) + if err != nil { + return PasskeySignature{}, err + } + + clientLen, err := readLen(flags&flagClient16 != 0) + if err != nil { + return PasskeySignature{}, err + } + ps.clientDataJSON, err = read(int(clientLen)) + if err != nil { + return PasskeySignature{}, err + } + + ps.challengeIndex, err = readLen(flags&flagChallenge16 != 0) + if err != nil { + return PasskeySignature{}, err + } + ps.typeIndex, err = readLen(flags&flagType16 != 0) + if err != nil { + return PasskeySignature{}, err + } + + if b, err := read(32); err == nil { + ps.r = common.BytesToHash(b) + } else { + return PasskeySignature{}, err + } + if b, err := read(32); err == nil { + ps.s = common.BytesToHash(b) + } else { + return PasskeySignature{}, err + } + if b, err := read(32); err == nil { + ps.x = common.BytesToHash(b) + } else { + return PasskeySignature{}, err + } + if b, err := read(32); err == nil { + ps.y = common.BytesToHash(b) + } else { + return PasskeySignature{}, err + } + + // Solidity silently ignores extra data – mirror that behaviour. + return ps, nil +} + +// ────────────────── 1) ABI‑fallback decode helper ────────────────── +func decodeFallbackABI(payload []byte) (PasskeySignature, error) { + var ps PasskeySignature + + values, err := passkeyTupleABI.Unpack(payload) + if err != nil { + return PasskeySignature{}, err + } + + // 0 → struct WebAuthnAuth + auth := values[0].([]any) + ps.authenticatorData = append([]byte(nil), auth[0].([]byte)...) + ps.clientDataJSON = append([]byte(nil), []byte(auth[1].(string))...) + ps.challengeIndex = auth[2].(*big.Int).Uint64() + ps.typeIndex = auth[3].(*big.Int).Uint64() + if v, ok := auth[4].([32]byte); ok { + ps.r = common.BytesToHash(v[:]) + } else { + return PasskeySignature{}, errors.New("ABI decode: r is not bytes32") + } + if v, ok := auth[5].([32]byte); ok { + ps.s = common.BytesToHash(v[:]) + } else { + return PasskeySignature{}, errors.New("ABI decode: s is not bytes32") + } + + // 1 → bool (requireUserVerification) + ps.requireUserVerification = values[1].(bool) + + // 2,3,4 → x, y, metadata + if v, ok := values[2].([32]byte); ok { + ps.x = common.BytesToHash(v[:]) + } else { + return PasskeySignature{}, errors.New("ABI decode: x is not bytes32") + } + if v, ok := values[3].([32]byte); ok { + ps.y = common.BytesToHash(v[:]) + } else { + return PasskeySignature{}, errors.New("ABI decode: y is not bytes32") + } + if v, ok := values[4].([32]byte); ok { + ps.metadata = common.BytesToHash(v[:]) + } else { + return PasskeySignature{}, errors.New("ABI decode: metadata is not bytes32") + } + + // ⚠️ **No extra consistency check** – + // Solidity’s `_decodeSignature` accepts any (flags, payload) pair as long + // as bit 0x20 is set, so we mirror that laissez‑faire behaviour. + return ps, nil +} + +// ────────────────── Encoding ────────────────── +func (s PasskeySignature) Encode() []byte { + // Decide whether we can use the compact form: + // ‑ every variable must fit in ≤ 65 535 (2 bytes). If any exceed that + // we must fall back to ABI. + tooLarge := func(v uint64) bool { return v > 0xffff } + if tooLarge(uint64(len(s.authenticatorData))) || + tooLarge(uint64(len(s.clientDataJSON))) || + tooLarge(s.challengeIndex) || + tooLarge(s.typeIndex) { + return s.encodeABI() + } + return s.encodeCompact() +} + +// --- compact --------------------------------------------------------------- +func (s PasskeySignature) encodeCompact() []byte { + flags := byte(0) + if s.requireUserVerification { + flags |= flagRequireUV + } + + oneByte := func(v uint64) bool { return v <= 0xff } + + // Decide for each field whether we need 1 or 2 bytes and set the flags. + if !oneByte(uint64(len(s.authenticatorData))) { + flags |= flagAuth16 + } + if !oneByte(uint64(len(s.clientDataJSON))) { + flags |= flagClient16 + } + if !oneByte(s.challengeIndex) { + flags |= flagChallenge16 + } + if !oneByte(s.typeIndex) { + flags |= flagType16 + } + if s.metadata != (common.Hash{}) { + flags |= flagHasMetadata + } + + var out bytes.Buffer + out.WriteByte(flags) + + if flags&flagHasMetadata != 0 { + out.Write(s.metadata.Bytes()) + } + + writeLen := func(v uint64, twoBytes bool) { + if twoBytes { + out.Write(uintToBytes(v, 2)) + } else { + out.Write(uintToBytes(v, 1)) + } + } + + writeLen(uint64(len(s.authenticatorData)), flags&flagAuth16 != 0) + out.Write(s.authenticatorData) + + writeLen(uint64(len(s.clientDataJSON)), flags&flagClient16 != 0) + out.Write(s.clientDataJSON) + + writeLen(s.challengeIndex, flags&flagChallenge16 != 0) + writeLen(s.typeIndex, flags&flagType16 != 0) + + out.Write(s.r.Bytes()) + out.Write(s.s.Bytes()) + out.Write(s.x.Bytes()) + out.Write(s.y.Bytes()) + + return out.Bytes() +} + +// --- ABI fallback ---------------------------------------------------------- +func (s PasskeySignature) encodeABI() []byte { + flags := byte(flagFallbackABI) + if s.requireUserVerification { + flags |= flagRequireUV + } + if s.metadata != (common.Hash{}) { + flags |= flagHasMetadata + } + + // Build the WebAuthnAuth tuple (array of interfaces in the right order), + // then pack the five ABI‑level arguments. + authTuple := []any{ + []byte(s.authenticatorData), + string(s.clientDataJSON), + new(big.Int).SetUint64(s.challengeIndex), + new(big.Int).SetUint64(s.typeIndex), + s.r, + s.s, + } + + tuple, err := passkeyTupleABI.Pack( + authTuple, + s.requireUserVerification, + s.x, + s.y, + s.metadata, + ) + if err != nil { + panic(err) // should never happen with correct argument types + } + + return append([]byte{flags}, tuple...) +} + +// ────────────────── 2) Signature validity ────────────────── +func (s PasskeySignature) IsValid(digest common.Hash) bool { + // ---- 1) authenticator flags (UP / UV) ---- + if len(s.authenticatorData) < 33 { + return false + } + if s.authenticatorData[32]&0x01 == 0 { + return false + } // UP + if s.requireUserVerification && s.authenticatorData[32]&0x04 == 0 { + return false + } // UV + + // ---- 2) clientDataJSON "type":"webauthn.get" guard ---- + typeLiteral := `"type":"webauthn.get"` + if int(s.typeIndex)+len(typeLiteral) > len(s.clientDataJSON) || + !bytes.Equal([]byte(typeLiteral), + s.clientDataJSON[s.typeIndex:int(s.typeIndex)+len(typeLiteral)]) { + return false + } + + // ---- 3) challenge guard (match Solidity byte‑for‑byte) ---- + encoded := base64.RawURLEncoding.EncodeToString(digest.Bytes()) + prefix := `"challenge":"` + encoded // WITHOUT closing quote + off := int(s.challengeIndex) + if off+len(prefix)+1 > len(s.clientDataJSON) { // +1 for the '"' we test next + return false + } + if !bytes.Equal([]byte(prefix), s.clientDataJSON[off:off+len(prefix)]) { + return false + } + if s.clientDataJSON[off+len(prefix)] != '"' { // closing quote (0x22) + return false + } + + // ---- 4) P‑256 signature verification (+ low‑S) ---- + hashClient := sha256.Sum256(s.clientDataJSON) + msgHash := sha256.Sum256(bytes.Join([][]byte{s.authenticatorData, hashClient[:]}, nil)) + + r := new(big.Int).SetBytes(s.r.Bytes()) + ss := new(big.Int).SetBytes(s.s.Bytes()) + if ss.Cmp(new(big.Int).Rsh(elliptic.P256().Params().N, 1)) > 0 { // s > N/2 + return false + } + + pub := ecdsa.PublicKey{ + Curve: elliptic.P256(), + X: new(big.Int).SetBytes(s.x.Bytes()), + Y: new(big.Int).SetBytes(s.y.Bytes()), + } + return ecdsa.Verify(&pub, msgHash[:], r, ss) +} + +// ────────────────── Image‑hash (unchanged) ────────────────── +func (s PasskeySignature) ImageHash() ImageHash { + var requireUserVerification common.Hash + if s.requireUserVerification { + requireUserVerification[len(requireUserVerification)-1] = 1 + } + + return ImageHash{ + Hash: crypto.Keccak256Hash( + crypto.Keccak256(s.x.Bytes(), s.y.Bytes()), + crypto.Keccak256(requireUserVerification.Bytes(), s.metadata.Bytes()), + ), + Preimage: s, + } +} diff --git a/core/payload.go b/core/payload.go new file mode 100644 index 00000000..74c22263 --- /dev/null +++ b/core/payload.go @@ -0,0 +1,39 @@ +package core + +import ( + "math/big" + + "github.com/0xsequence/ethkit/go-ethereum/common" +) + +type Payload interface { + Address() common.Address + ChainID() *big.Int + + Digest() PayloadDigest +} + +type PayloadDigest struct { + common.Hash + + Address_ common.Address + ChainID_ *big.Int + + Payload Payload +} + +func (d PayloadDigest) Address() common.Address { + return d.Address_ +} + +func (d PayloadDigest) ChainID() *big.Int { + if d.ChainID_ != nil { + return new(big.Int).Set(d.ChainID_) + } else { + return new(big.Int) + } +} + +func (d PayloadDigest) Digest() PayloadDigest { + return d +} diff --git a/core/v1/payload.go b/core/v1/payload.go new file mode 100644 index 00000000..56cb00d2 --- /dev/null +++ b/core/v1/payload.go @@ -0,0 +1,88 @@ +package v1 + +import ( + "math/big" + + "github.com/0xsequence/ethkit/go-ethereum/common" + "github.com/0xsequence/ethkit/go-ethereum/crypto" + "github.com/0xsequence/go-sequence/core" +) + +func Approval(imageHash core.ImageHashable, address common.Address) ApprovalPayload { + return ApprovalPayload{ImageHashable: imageHash, address: address} +} + +func Digest(digest common.Hash, address common.Address, chainID ...*big.Int) DigestPayload { + if len(chainID) == 0 { + chainID = []*big.Int{nil} + } + if chainID[0] == nil { + chainID[0] = new(big.Int) + } + + return DigestPayload{Hash: digest, address: address, chainID: chainID[0]} +} + +type ApprovalPayload struct { + core.ImageHashable + + address common.Address +} + +func (p ApprovalPayload) Address() common.Address { + return p.address +} + +func (p ApprovalPayload) ChainID() *big.Int { + return new(big.Int) +} + +type DigestPayload struct { + common.Hash + + address common.Address + chainID *big.Int +} + +func (p DigestPayload) Address() common.Address { + return p.address +} + +func (p DigestPayload) ChainID() *big.Int { + if p.chainID != nil { + return new(big.Int).Set(p.chainID) + } else { + return new(big.Int) + } +} + +var approvalPrefix = crypto.Keccak256Hash([]byte("SetImageHash(bytes32 imageHash)")) + +func ApprovalDigest(imageHash core.ImageHashable) common.Hash { + return crypto.Keccak256Hash(approvalPrefix.Bytes(), imageHash.ImageHash().Bytes()) +} + +func (p ApprovalPayload) Digest() core.PayloadDigest { + digest := Digest(ApprovalDigest(p.ImageHashable), p.address).Digest() + digest.Payload = p + return digest +} + +func (p DigestPayload) Digest() core.PayloadDigest { + chainID := new(big.Int) + if p.chainID != nil { + chainID.Set(p.chainID) + } + + return core.PayloadDigest{ + Hash: crypto.Keccak256Hash( + []byte{0x19, 0x01}, + common.BigToHash(chainID).Bytes(), + p.address.Bytes(), + p.Bytes(), + ), + Address_: p.address, + ChainID_: chainID, + Payload: p, + } +} diff --git a/core/v1/v1.go b/core/v1/v1.go index f9200d7e..49ba73f7 100644 --- a/core/v1/v1.go +++ b/core/v1/v1.go @@ -135,28 +135,11 @@ func (s *signature) Threshold() uint16 { return s.threshold } -func (s *signature) Checkpoint() uint32 { +func (s *signature) Checkpoint() uint64 { return 0 } -func (s *signature) Recover(ctx context.Context, digest core.Digest, wallet common.Address, chainID *big.Int, provider *ethrpc.Provider, signerSignatures ...core.SignerSignatures) (*WalletConfig, *big.Int, error) { - if chainID == nil { - if provider == nil { - return nil, nil, fmt.Errorf("provider is required if chain ID is not specified") - } - - var err error - chainID, err = provider.ChainID(ctx) - if err != nil { - return nil, nil, fmt.Errorf("unable to get chain ID: %w", err) - } - } - - subdigest := digest.Subdigest(wallet, chainID) - return s.RecoverSubdigest(ctx, subdigest, provider, signerSignatures...) -} - -func (s *signature) RecoverSubdigest(ctx context.Context, subdigest core.Subdigest, provider *ethrpc.Provider, signerSignatures ...core.SignerSignatures) (*WalletConfig, *big.Int, error) { +func (s *signature) Recover(ctx context.Context, payload core.Payload, provider *ethrpc.Provider, signerSignatures ...core.SignerSignatures) (*WalletConfig, *big.Int, error) { if len(signerSignatures) == 0 { signerSignatures = []core.SignerSignatures{nil} } @@ -165,7 +148,7 @@ func (s *signature) RecoverSubdigest(ctx context.Context, subdigest core.Subdige var total big.Int for i, leaf := range s.leaves { - signer, weight, err := leaf.recover(ctx, subdigest, provider, signerSignatures[0]) + signer, weight, err := leaf.recover(ctx, payload, provider, signerSignatures[0]) if err != nil { return nil, nil, fmt.Errorf("unable to recover signer for leaf %v: %w", i, err) } @@ -185,15 +168,25 @@ const ( addressCost = 20 * 16 ) -func (s *signature) Join(subdigest core.Subdigest, other core.Signature[*WalletConfig]) (core.Signature[*WalletConfig], error) { +func (s *signature) Join(payload core.Payload, other core.Signature[*WalletConfig]) (core.Signature[*WalletConfig], error) { var copyLeafs = make([]signatureLeaf, len(s.leaves)) copy(copyLeafs, s.leaves) leafAddress := func(leaf2 signatureLeaf) (common.Address, core.SignerSignatureType, error) { switch leaf2 := leaf2.(type) { case *signatureTreeECDSASignatureLeaf: - address, err := ecrecover(subdigest.EthSignSubdigest(), leaf2.signature[:]) - return address, core.SignerSignatureTypeEthSign, err + switch leaf2.type_ { + case eCDSASignatureTypeEIP712: + address, err := core.Ecrecover(payload.Digest().Hash, leaf2.signature[:]) + return address, core.SignerSignatureTypeEIP712, err + + case eCDSASignatureTypeEthSign: + address, err := core.Ecrecover(core.EthereumSignedMessage(payload.Digest().Bytes()), leaf2.signature[:]) + return address, core.SignerSignatureTypeEthSign, err + + default: + panic(fmt.Errorf("unknown ecdsa signature type %v", leaf2.type_)) + } case *signatureTreeAddressLeaf: return leaf2.address, 0, nil @@ -230,7 +223,7 @@ func (s *signature) Join(subdigest core.Subdigest, other core.Signature[*WalletC }, nil } -func (s *signature) Reduce(subdigest core.Subdigest) core.Signature[*WalletConfig] { +func (s *signature) Reduce(payload core.Payload) core.Signature[*WalletConfig] { var leaves []signatureLeaf var weights []int var costs []int @@ -242,7 +235,12 @@ func (s *signature) Reduce(subdigest core.Subdigest) core.Signature[*WalletConfi switch leaf := leaf.(type) { case *signatureTreeECDSASignatureLeaf: var err error - addresses[i], err = ecrecover(subdigest, leaf.signature[:]) + switch leaf.type_ { + case eCDSASignatureTypeEIP712: + addresses[i], err = core.Ecrecover(payload.Digest().Hash, leaf.signature[:]) + case eCDSASignatureTypeEthSign: + addresses[i], err = core.Ecrecover(core.EthereumSignedMessage(payload.Digest().Bytes()), leaf.signature[:]) + } if err == nil { leaves = append(leaves, leaf) weights = append(weights, int(leaf.weight)) @@ -264,7 +262,7 @@ func (s *signature) Reduce(subdigest core.Subdigest) core.Signature[*WalletConfi case *signatureTreeDynamicSignatureLeaf: value, cost := leaf.signature, eoaCost if subsignature, err := Core.DecodeSignature(leaf.signature); err == nil { - subsignature = subsignature.Reduce(subdigest) + subsignature = subsignature.Reduce(payload) if cost, err = subsignature.(*signature).cost(); err == nil { value, _ = subsignature.Data() } @@ -406,7 +404,7 @@ func (s *signature) String() string { } type signatureLeaf interface { - recover(ctx context.Context, subdigest core.Subdigest, provider *ethrpc.Provider, signerSignatures core.SignerSignatures) (*WalletConfigSigner, *big.Int, error) + recover(ctx context.Context, payload core.Payload, provider *ethrpc.Provider, signerSignatures core.SignerSignatures) (*WalletConfigSigner, *big.Int, error) write(writer io.Writer) error } @@ -475,21 +473,22 @@ func decodeSignatureTreeECDSASignatureLeaf(data *[]byte) (*signatureTreeECDSASig return &leaf, nil } -func (l *signatureTreeECDSASignatureLeaf) recover(ctx context.Context, subdigest core.Subdigest, provider *ethrpc.Provider, signerSignatures core.SignerSignatures) (*WalletConfigSigner, *big.Int, error) { +func (l *signatureTreeECDSASignatureLeaf) recover(ctx context.Context, payload core.Payload, provider *ethrpc.Provider, signerSignatures core.SignerSignatures) (*WalletConfigSigner, *big.Int, error) { var address common.Address var err error switch l.type_ { + case eCDSASignatureTypeEIP712: + address, err = core.Ecrecover(payload.Digest().Hash, l.signature[:]) case eCDSASignatureTypeEthSign: - address, err = ecrecover(subdigest.EthSignSubdigest(), l.signature[:]) + address, err = core.Ecrecover(core.EthereumSignedMessage(payload.Digest().Bytes()), l.signature[:]) default: - address, err = ecrecover(subdigest, l.signature[:]) + return nil, nil, fmt.Errorf("unknown ecdsa signature type %v", l.type_) } if err != nil { return nil, nil, fmt.Errorf("unable to recover ecdsa signature leaf: %w", err) } signerSignatures.Insert(address, core.SignerSignature{ - Subdigest: subdigest, Type: l.type_.signerSignatureType(), Signature: l.signature[:], }) @@ -553,7 +552,7 @@ func decodeSignatureTreeAddressLeaf(data *[]byte) (*signatureTreeAddressLeaf, er }, nil } -func (l *signatureTreeAddressLeaf) recover(ctx context.Context, subdigest core.Subdigest, provider *ethrpc.Provider, signerSignatures core.SignerSignatures) (*WalletConfigSigner, *big.Int, error) { +func (l *signatureTreeAddressLeaf) recover(ctx context.Context, payload core.Payload, provider *ethrpc.Provider, signerSignatures core.SignerSignatures) (*WalletConfigSigner, *big.Int, error) { return &WalletConfigSigner{ Weight: l.weight, Address: l.address, @@ -657,16 +656,18 @@ func decodeSignatureTreeDynamicSignatureLeaf(data *[]byte) (*signatureTreeDynami }, nil } -func (l *signatureTreeDynamicSignatureLeaf) recover(ctx context.Context, subdigest core.Subdigest, provider *ethrpc.Provider, signerSignatures core.SignerSignatures) (*WalletConfigSigner, *big.Int, error) { +func (l *signatureTreeDynamicSignatureLeaf) recover(ctx context.Context, payload core.Payload, provider *ethrpc.Provider, signerSignatures core.SignerSignatures) (*WalletConfigSigner, *big.Int, error) { switch l.type_ { case dynamicSignatureTypeEIP712, dynamicSignatureTypeEthSign: var address common.Address var err error switch l.type_ { + case dynamicSignatureTypeEIP712, dynamicSignatureTypeEIP1271: + address, err = core.Ecrecover(payload.Digest().Hash, l.signature) case dynamicSignatureTypeEthSign: - address, err = ecrecover(subdigest.EthSignSubdigest(), l.signature) + address, err = core.Ecrecover(core.EthereumSignedMessage(payload.Digest().Bytes()), l.signature) default: - address, err = ecrecover(subdigest, l.signature) + return nil, nil, fmt.Errorf("unknown dynamic signature type %v", l.type_) } if err != nil { return nil, nil, fmt.Errorf("unable to recover dynamic signature leaf: %w", err) @@ -677,7 +678,6 @@ func (l *signatureTreeDynamicSignatureLeaf) recover(ctx context.Context, subdige } signerSignatures.Insert(l.address, core.SignerSignature{ - Subdigest: subdigest, Type: l.type_.signerSignatureType(), Signature: l.signature, }) @@ -694,7 +694,7 @@ func (l *signatureTreeDynamicSignatureLeaf) recover(ctx context.Context, subdige contract := ethcontract.NewContractCaller(l.address, contracts.IERC1271.ABI, provider) var results []any - err := contract.Call(&bind.CallOpts{Context: ctx}, &results, "isValidSignature", subdigest.Hash, l.signature) + err := contract.Call(&bind.CallOpts{Context: ctx}, &results, "isValidSignature", payload.Digest().Hash, l.signature) if err != nil { return nil, nil, fmt.Errorf("unable to call isValidSignature on %v: %w", l.address, err) } @@ -719,7 +719,6 @@ func (l *signatureTreeDynamicSignatureLeaf) recover(ctx context.Context, subdige } signerSignatures.Insert(l.address, core.SignerSignature{ - Subdigest: subdigest, Type: l.type_.signerSignatureType(), Signature: l.signature, }) @@ -750,6 +749,10 @@ func (l *signatureTreeDynamicSignatureLeaf) write(writer io.Writer) error { return fmt.Errorf("unable to write dynamic signature leaf address: %w", err) } + if len(l.signature)+1 > 0xffff { + return fmt.Errorf("signature length %v does not fit in a uint16", len(l.signature)+1) + } + err = binary.Write(writer, binary.BigEndian, uint16(len(l.signature)+1)) if err != nil { return fmt.Errorf("unable to write dynamic signature leaf signature length: %w", err) @@ -787,7 +790,7 @@ func (c *WalletConfig) Threshold() uint16 { return c.Threshold_ } -func (c *WalletConfig) Checkpoint() uint32 { +func (c *WalletConfig) Checkpoint() uint64 { return 0 } @@ -813,6 +816,10 @@ func (c *WalletConfig) SignersWeight(signers []common.Address) uint16 { return totalWeight } +func (c *WalletConfig) IsComplete() bool { + return true +} + func (c *WalletConfig) IsUsable() error { if c.Threshold_ == 0 { return fmt.Errorf("threshold is 0") @@ -833,7 +840,7 @@ func (c *WalletConfig) ImageHash() core.ImageHash { imageHash := common.BigToHash(new(big.Int).SetUint64(uint64(c.Threshold_))) for _, signer := range c.Signers_ { - preimage, err := ethcoder.AbiCoder( + preimage, err := ethcoder.ABIPackArguments( []string{"bytes32", "uint8", "address"}, []any{imageHash, signer.Weight, signer.Address}, ) @@ -1002,23 +1009,6 @@ func (s *WalletConfigSigner) MarshalJSON() ([]byte, error) { }) } -func ecrecover(subdigest core.Subdigest, signature []byte) (common.Address, error) { - if length := len(signature); length != crypto.SignatureLength { - return common.Address{}, fmt.Errorf("invalid ecdsa signature length %v, expected length %v", length, crypto.SignatureLength) - } - - var fixedSignature [crypto.SignatureLength]byte - copy(fixedSignature[:], signature) - fixedSignature[len(fixedSignature)-1] -= 27 - - pubkey, err := crypto.SigToPub(subdigest.Bytes(), fixedSignature[:]) - if err != nil { - return common.Address{}, fmt.Errorf("unable to recover ecdsa signature: %w", err) - } - - return crypto.PubkeyToAddress(*pubkey), nil -} - func toUint8(number any) (uint8, error) { switch number := number.(type) { case int64: diff --git a/core/v1/v1_test.go b/core/v1/v1_test.go index a97dfeab..1a0bc01f 100644 --- a/core/v1/v1_test.go +++ b/core/v1/v1_test.go @@ -3,7 +3,6 @@ package v1 import ( "context" "fmt" - "math/big" "testing" "github.com/0xsequence/ethkit/ethwallet" @@ -69,15 +68,11 @@ func TestSignatureJoin(t *testing.T) { } msg := []byte("hello") - digest := core.Digest{ - Hash: crypto.Keccak256Hash(msg), - Preimage: nil, - } - subdigest := digest.Subdigest(common.Address{}, big.NewInt(0)) + payload := Digest(crypto.Keccak256Hash(msg), common.Address{}) sig1, err := wc.BuildSignature(context.Background(), func(ctx context.Context, signer common.Address, signatures []core.SignerSignature) (core.SignerSignatureType, []byte, error) { if signer == eoa1.Address() { - sig, _ := eoa1.SignMessage(subdigest.Bytes()) + sig, _ := eoa1.SignMessage(payload.Digest().Bytes()) return core.SignerSignatureTypeEthSign, sig, nil } else { return 0, nil, nil @@ -87,7 +82,7 @@ func TestSignatureJoin(t *testing.T) { sig2, err := wc.BuildSignature(context.Background(), func(ctx context.Context, signer common.Address, signatures []core.SignerSignature) (core.SignerSignatureType, []byte, error) { if signer == eoa2.Address() { - sig, _ := eoa2.SignMessage(subdigest.Bytes()) + sig, _ := eoa2.SignMessage(payload.Digest().Bytes()) return core.SignerSignatureTypeEthSign, sig, nil } else { return 0, nil, nil @@ -98,7 +93,7 @@ func TestSignatureJoin(t *testing.T) { sig1Leaves := sig1.(*signature).leaves sig2Leaves := sig2.(*signature).leaves - sigJoined, err := sig1.Join(subdigest, sig2) + sigJoined, err := sig1.Join(payload, sig2) require.NoError(t, err) sigJoinedLeaves := sigJoined.(*signature).leaves diff --git a/core/v2/payload.go b/core/v2/payload.go new file mode 100644 index 00000000..2ba8628a --- /dev/null +++ b/core/v2/payload.go @@ -0,0 +1,88 @@ +package v2 + +import ( + "math/big" + + "github.com/0xsequence/ethkit/go-ethereum/common" + "github.com/0xsequence/ethkit/go-ethereum/crypto" + "github.com/0xsequence/go-sequence/core" +) + +func Approval(imageHash core.ImageHashable, address common.Address) ApprovalPayload { + return ApprovalPayload{ImageHashable: imageHash, address: address} +} + +func Digest(digest common.Hash, address common.Address, chainID ...*big.Int) DigestPayload { + if len(chainID) == 0 { + chainID = []*big.Int{nil} + } + if chainID[0] == nil { + chainID[0] = new(big.Int) + } + + return DigestPayload{Hash: digest, address: address, chainID: chainID[0]} +} + +type ApprovalPayload struct { + core.ImageHashable + + address common.Address +} + +func (p ApprovalPayload) Address() common.Address { + return p.address +} + +func (p ApprovalPayload) ChainID() *big.Int { + return new(big.Int) +} + +type DigestPayload struct { + common.Hash + + address common.Address + chainID *big.Int +} + +func (p DigestPayload) Address() common.Address { + return p.address +} + +func (p DigestPayload) ChainID() *big.Int { + if p.chainID != nil { + return new(big.Int).Set(p.chainID) + } else { + return new(big.Int) + } +} + +var approvalPrefix = crypto.Keccak256Hash([]byte("SetImageHash(bytes32 imageHash)")) + +func ApprovalDigest(imageHash core.ImageHashable) common.Hash { + return crypto.Keccak256Hash(approvalPrefix.Bytes(), imageHash.ImageHash().Bytes()) +} + +func (p ApprovalPayload) Digest() core.PayloadDigest { + digest := Digest(ApprovalDigest(p.ImageHashable), p.address).Digest() + digest.Payload = p + return digest +} + +func (p DigestPayload) Digest() core.PayloadDigest { + chainID := new(big.Int) + if p.chainID != nil { + chainID.Set(p.chainID) + } + + return core.PayloadDigest{ + Hash: crypto.Keccak256Hash( + []byte{0x19, 0x01}, + common.BigToHash(chainID).Bytes(), + p.address.Bytes(), + p.Bytes(), + ), + Address_: p.address, + ChainID_: chainID, + Payload: p, + } +} diff --git a/core/v2/v2.go b/core/v2/v2.go index 5d1c4dec..320d5298 100644 --- a/core/v2/v2.go +++ b/core/v2/v2.go @@ -151,32 +151,16 @@ func (s *regularSignature) Threshold() uint16 { return s.threshold } -func (s *regularSignature) Checkpoint() uint32 { - return s.checkpoint +func (s *regularSignature) Checkpoint() uint64 { + return uint64(s.checkpoint) } -func (s *regularSignature) Recover(ctx context.Context, digest core.Digest, wallet common.Address, chainID *big.Int, provider *ethrpc.Provider, signerSignatures ...core.SignerSignatures) (*WalletConfig, *big.Int, error) { - if chainID == nil { - if provider == nil { - return nil, nil, fmt.Errorf("provider is required if chain ID is not specified") - } - - var err error - chainID, err = provider.ChainID(ctx) - if err != nil { - return nil, nil, fmt.Errorf("unable to get chain ID: %w", err) - } - } - - return s.RecoverSubdigest(ctx, digest.Subdigest(wallet, chainID), provider, signerSignatures...) -} - -func (s *regularSignature) RecoverSubdigest(ctx context.Context, subdigest core.Subdigest, provider *ethrpc.Provider, signerSignatures ...core.SignerSignatures) (*WalletConfig, *big.Int, error) { +func (s *regularSignature) Recover(ctx context.Context, payload core.Payload, provider *ethrpc.Provider, signerSignatures ...core.SignerSignatures) (*WalletConfig, *big.Int, error) { if len(signerSignatures) == 0 { signerSignatures = []core.SignerSignatures{nil} } - tree, weight, err := s.tree.recover(ctx, subdigest, provider, signerSignatures[0]) + tree, weight, err := s.tree.recover(ctx, payload, provider, signerSignatures[0]) if err != nil { return nil, nil, fmt.Errorf("unable to recover wallet config: %w", err) } @@ -188,7 +172,7 @@ func (s *regularSignature) RecoverSubdigest(ctx context.Context, subdigest core. }, weight, nil } -func (s *regularSignature) Join(subdigest core.Subdigest, other core.Signature[*WalletConfig]) (core.Signature[*WalletConfig], error) { +func (s *regularSignature) Join(payload core.Payload, other core.Signature[*WalletConfig]) (core.Signature[*WalletConfig], error) { other_, ok := other.(*regularSignature) if !ok { return nil, fmt.Errorf("expected regular signature, got %T", other) @@ -215,7 +199,7 @@ func (s *regularSignature) Join(subdigest core.Subdigest, other core.Signature[* }, nil } -func (s *regularSignature) Reduce(subdigest core.Subdigest) core.Signature[*WalletConfig] { +func (s *regularSignature) Reduce(payload core.Payload) core.Signature[*WalletConfig] { return ®ularSignature{ isRegular: s.isRegular, threshold: s.threshold, @@ -306,20 +290,16 @@ func (s *noChainIDSignature) Threshold() uint16 { return s.threshold } -func (s *noChainIDSignature) Checkpoint() uint32 { - return s.checkpoint -} - -func (s *noChainIDSignature) Recover(ctx context.Context, digest core.Digest, wallet common.Address, chainID *big.Int, provider *ethrpc.Provider, signerSignatures ...core.SignerSignatures) (*WalletConfig, *big.Int, error) { - return s.RecoverSubdigest(ctx, digest.Subdigest(wallet), provider, signerSignatures...) +func (s *noChainIDSignature) Checkpoint() uint64 { + return uint64(s.checkpoint) } -func (s *noChainIDSignature) RecoverSubdigest(ctx context.Context, subdigest core.Subdigest, provider *ethrpc.Provider, signerSignatures ...core.SignerSignatures) (*WalletConfig, *big.Int, error) { +func (s *noChainIDSignature) Recover(ctx context.Context, payload core.Payload, provider *ethrpc.Provider, signerSignatures ...core.SignerSignatures) (*WalletConfig, *big.Int, error) { if len(signerSignatures) == 0 { signerSignatures = []core.SignerSignatures{nil} } - tree, weight, err := s.tree.recover(ctx, subdigest, provider, signerSignatures[0]) + tree, weight, err := s.tree.recover(ctx, payload, provider, signerSignatures[0]) if err != nil { return nil, nil, fmt.Errorf("unable to recover wallet config: %w", err) } @@ -331,7 +311,7 @@ func (s *noChainIDSignature) RecoverSubdigest(ctx context.Context, subdigest cor }, weight, nil } -func (s *noChainIDSignature) Join(subdigest core.Subdigest, other core.Signature[*WalletConfig]) (core.Signature[*WalletConfig], error) { +func (s *noChainIDSignature) Join(payload core.Payload, other core.Signature[*WalletConfig]) (core.Signature[*WalletConfig], error) { other_, ok := other.(*noChainIDSignature) if !ok { return nil, fmt.Errorf("expected no chain ID signature, got %T", other) @@ -357,7 +337,7 @@ func (s *noChainIDSignature) Join(subdigest core.Subdigest, other core.Signature }, nil } -func (s *noChainIDSignature) Reduce(subdigest core.Subdigest) core.Signature[*WalletConfig] { +func (s *noChainIDSignature) Reduce(payload core.Payload) core.Signature[*WalletConfig] { return &noChainIDSignature{ threshold: s.threshold, checkpoint: s.checkpoint, @@ -464,11 +444,11 @@ func (s chainedSignature) Threshold() uint16 { return s[len(s)-1].Threshold() } -func (s chainedSignature) Checkpoint() uint32 { +func (s chainedSignature) Checkpoint() uint64 { return s[len(s)-1].Checkpoint() } -func (s chainedSignature) Recover(ctx context.Context, digest core.Digest, wallet common.Address, chainID *big.Int, provider *ethrpc.Provider, signerSignatures ...core.SignerSignatures) (*WalletConfig, *big.Int, error) { +func (s chainedSignature) Recover(ctx context.Context, payload core.Payload, provider *ethrpc.Provider, signerSignatures ...core.SignerSignatures) (*WalletConfig, *big.Int, error) { if len(signerSignatures) == 0 { signerSignatures = []core.SignerSignatures{nil} } @@ -478,7 +458,7 @@ func (s chainedSignature) Recover(ctx context.Context, digest core.Digest, walle for i, subsignature := range s { var err error - config, weight, err = subsignature.Recover(ctx, digest, wallet, chainID, provider, signerSignatures...) + config, weight, err = subsignature.Recover(ctx, payload, provider, signerSignatures...) if err != nil { return nil, nil, fmt.Errorf("unable to recover subsignature %v: %w", i, err) } @@ -487,25 +467,21 @@ func (s chainedSignature) Recover(ctx context.Context, digest core.Digest, walle return nil, nil, fmt.Errorf("recovered weight %v for subsignature %v does not meet required threshold %v", weight, i, config.Threshold()) } - digest = config.ImageHash().Approval() + payload = Approval(config, payload.Address()) } return config, weight, nil } -func (s chainedSignature) RecoverSubdigest(ctx context.Context, subdigest core.Subdigest, provider *ethrpc.Provider, signerSignatures ...core.SignerSignatures) (*WalletConfig, *big.Int, error) { - return nil, nil, fmt.Errorf("chained signatures do not support recovering subdigests") -} - -func (s chainedSignature) Join(subdigest core.Subdigest, other core.Signature[*WalletConfig]) (core.Signature[*WalletConfig], error) { +func (s chainedSignature) Join(payload core.Payload, other core.Signature[*WalletConfig]) (core.Signature[*WalletConfig], error) { //TODO implement me panic("implement me") } -func (s chainedSignature) Reduce(subdigest core.Subdigest) core.Signature[*WalletConfig] { +func (s chainedSignature) Reduce(payload core.Payload) core.Signature[*WalletConfig] { subsignatures := make(chainedSignature, 0, len(s)) for _, subsignature := range s { - subsignatures = append(subsignatures, subsignature.Reduce(subdigest)) + subsignatures = append(subsignatures, subsignature.Reduce(payload)) } return subsignatures } @@ -553,7 +529,7 @@ func (s chainedSignature) String() string { } type signatureTree interface { - recover(ctx context.Context, subdigest core.Subdigest, provider *ethrpc.Provider, signerSignatures core.SignerSignatures) (WalletConfigTree, *big.Int, error) + recover(ctx context.Context, payload core.Payload, provider *ethrpc.Provider, signerSignatures core.SignerSignatures) (WalletConfigTree, *big.Int, error) reduce() signatureTree join(other signatureTree) (signatureTree, error) reduceImageHash() (core.ImageHash, error) @@ -628,13 +604,13 @@ type signatureTreeNode struct { left, right signatureTree } -func (n *signatureTreeNode) recover(ctx context.Context, subdigest core.Subdigest, provider *ethrpc.Provider, signerSignatures core.SignerSignatures) (WalletConfigTree, *big.Int, error) { - left, leftWeight, err := n.left.recover(ctx, subdigest, provider, signerSignatures) +func (n *signatureTreeNode) recover(ctx context.Context, payload core.Payload, provider *ethrpc.Provider, signerSignatures core.SignerSignatures) (WalletConfigTree, *big.Int, error) { + left, leftWeight, err := n.left.recover(ctx, payload, provider, signerSignatures) if err != nil { return nil, nil, fmt.Errorf("unable to recover left subtree: %w", err) } - right, rightWeight, err := n.right.recover(ctx, subdigest, provider, signerSignatures) + right, rightWeight, err := n.right.recover(ctx, payload, provider, signerSignatures) if err != nil { return nil, nil, fmt.Errorf("unable to recover right subtree: %w", err) } @@ -677,8 +653,10 @@ func (n *signatureTreeNode) join(other signatureTree) (signatureTree, error) { left: left, right: right, }, nil + case signatureTreeNodeLeaf: return n, nil + default: return nil, fmt.Errorf("unable to join signature tree node with %T", other) } @@ -805,21 +783,22 @@ func decodeSignatureTreeECDSASignatureLeaf(data *[]byte) (*signatureTreeECDSASig return &leaf, nil } -func (l *signatureTreeECDSASignatureLeaf) recover(ctx context.Context, subdigest core.Subdigest, provider *ethrpc.Provider, signerSignatures core.SignerSignatures) (WalletConfigTree, *big.Int, error) { +func (l *signatureTreeECDSASignatureLeaf) recover(ctx context.Context, payload core.Payload, provider *ethrpc.Provider, signerSignatures core.SignerSignatures) (WalletConfigTree, *big.Int, error) { var address common.Address var err error switch l.type_ { + case eCDSASignatureTypeEIP712: + address, err = core.Ecrecover(payload.Digest().Hash, l.signature[:]) case eCDSASignatureTypeEthSign: - address, err = ecrecover(subdigest.EthSignSubdigest(), l.signature[:]) + address, err = core.Ecrecover(core.EthereumSignedMessage(payload.Digest().Bytes()), l.signature[:]) default: - address, err = ecrecover(subdigest, l.signature[:]) + return nil, nil, fmt.Errorf("unknown ecdsa signature type %v", l.type_) } if err != nil { return nil, nil, fmt.Errorf("unable to recover ecdsa signature leaf: %w", err) } signerSignatures.Insert(address, core.SignerSignature{ - Subdigest: subdigest, Type: l.type_.signerSignatureType(), Signature: l.signature[:], }) @@ -895,7 +874,7 @@ func decodeSignatureTreeAddressLeaf(data *[]byte) (*signatureTreeAddressLeaf, er }, nil } -func (l *signatureTreeAddressLeaf) recover(ctx context.Context, subdigest core.Subdigest, provider *ethrpc.Provider, signerSignatures core.SignerSignatures) (WalletConfigTree, *big.Int, error) { +func (l *signatureTreeAddressLeaf) recover(ctx context.Context, payload core.Payload, provider *ethrpc.Provider, signerSignatures core.SignerSignatures) (WalletConfigTree, *big.Int, error) { return &WalletConfigTreeAddressLeaf{ Weight: l.weight, Address: l.address, @@ -1019,16 +998,18 @@ func decodeSignatureTreeDynamicSignatureLeaf(data *[]byte) (*signatureTreeDynami }, nil } -func (l *signatureTreeDynamicSignatureLeaf) recover(ctx context.Context, subdigest core.Subdigest, provider *ethrpc.Provider, signerSignatures core.SignerSignatures) (WalletConfigTree, *big.Int, error) { +func (l *signatureTreeDynamicSignatureLeaf) recover(ctx context.Context, payload core.Payload, provider *ethrpc.Provider, signerSignatures core.SignerSignatures) (WalletConfigTree, *big.Int, error) { switch l.type_ { case dynamicSignatureTypeEIP712, dynamicSignatureTypeEthSign: var address common.Address var err error switch l.type_ { + case dynamicSignatureTypeEIP712, dynamicSignatureTypeEIP1271: + address, err = core.Ecrecover(payload.Digest().Hash, l.signature) case dynamicSignatureTypeEthSign: - address, err = ecrecover(subdigest.EthSignSubdigest(), l.signature) + address, err = core.Ecrecover(core.EthereumSignedMessage(payload.Digest().Bytes()), l.signature) default: - address, err = ecrecover(subdigest, l.signature) + return nil, nil, fmt.Errorf("unknown dynamic signature type %v", l.type_) } if err != nil { return nil, nil, fmt.Errorf("unable to recover dynamic signature leaf: %w", err) @@ -1039,7 +1020,6 @@ func (l *signatureTreeDynamicSignatureLeaf) recover(ctx context.Context, subdige } signerSignatures.Insert(l.address, core.SignerSignature{ - Subdigest: subdigest, Type: l.type_.signerSignatureType(), Signature: l.signature, }) @@ -1054,7 +1034,7 @@ func (l *signatureTreeDynamicSignatureLeaf) recover(ctx context.Context, subdige signature := l.signature if provider != nil { - isValid, err := eip6492.ValidateEIP6492Offchain(ctx, provider, l.address, subdigest.Hash, signature, nil) + isValid, err := eip6492.ValidateEIP6492Offchain(ctx, provider, l.address, payload.Digest().Hash, signature, nil) if err != nil { return nil, nil, fmt.Errorf("unable to validate signature for %v: %w", l.address, err) } @@ -1076,7 +1056,6 @@ func (l *signatureTreeDynamicSignatureLeaf) recover(ctx context.Context, subdige } signerSignatures.Insert(l.address, core.SignerSignature{ - Subdigest: subdigest, Type: l.type_.signerSignatureType(), Signature: signature, }) @@ -1127,6 +1106,10 @@ func (l *signatureTreeDynamicSignatureLeaf) write(writer io.Writer) error { return fmt.Errorf("unable to write dynamic signature leaf address: %w", err) } + if len(l.signature)+1 > 0xffffffff { + return fmt.Errorf("signature length %v does not fit in a uint32", len(l.signature)+1) + } + err = writeUint24(writer, uint32(len(l.signature)+1)) if err != nil { return fmt.Errorf("unable to write dynamic signature leaf signature length: %w", err) @@ -1167,7 +1150,7 @@ func decodeSignatureTreeNodeLeaf(data *[]byte) (signatureTreeNodeLeaf, error) { return signatureTreeNodeLeaf{core.ImageHash{Hash: common.BytesToHash(hash)}}, nil } -func (l signatureTreeNodeLeaf) recover(ctx context.Context, subdigest core.Subdigest, provider *ethrpc.Provider, signerSignatures core.SignerSignatures) (WalletConfigTree, *big.Int, error) { +func (l signatureTreeNodeLeaf) recover(ctx context.Context, payload core.Payload, provider *ethrpc.Provider, signerSignatures core.SignerSignatures) (WalletConfigTree, *big.Int, error) { leaf := WalletConfigTreeNodeLeaf{core.ImageHash{Hash: l.ImageHash.Hash}} leaf.Node.Preimage = &leaf return leaf, new(big.Int), nil @@ -1239,7 +1222,7 @@ func decodeSignatureTreeBranchLeaf(data *[]byte) (signatureTree, error) { return branch, nil } -type signatureTreeSubdigestLeaf struct{ core.Subdigest } +type signatureTreeSubdigestLeaf struct{ common.Hash } func decodeSignatureTreeSubdigestLeaf(data *[]byte) (signatureTreeSubdigestLeaf, error) { next := *data @@ -1258,14 +1241,14 @@ func decodeSignatureTreeSubdigestLeaf(data *[]byte) (signatureTreeSubdigestLeaf, *data = next - return signatureTreeSubdigestLeaf{core.Subdigest{Hash: common.BytesToHash(hash)}}, nil + return signatureTreeSubdigestLeaf{common.BytesToHash(hash)}, nil } -func (l signatureTreeSubdigestLeaf) recover(ctx context.Context, subdigest core.Subdigest, provider *ethrpc.Provider, signerSignatures core.SignerSignatures) (WalletConfigTree, *big.Int, error) { - if subdigest.Hash == l.Subdigest.Hash { - return WalletConfigTreeSubdigestLeaf{l.Subdigest}, new(big.Int).Set(maxUint256), nil +func (l signatureTreeSubdigestLeaf) recover(ctx context.Context, payload core.Payload, provider *ethrpc.Provider, signerSignatures core.SignerSignatures) (WalletConfigTree, *big.Int, error) { + if payload.Digest().Hash == l.Hash { + return WalletConfigTreeSubdigestLeaf{l.Hash}, new(big.Int).Set(maxUint256), nil } else { - return WalletConfigTreeSubdigestLeaf{l.Subdigest}, new(big.Int), nil + return WalletConfigTreeSubdigestLeaf{l.Hash}, new(big.Int), nil } } @@ -1278,7 +1261,7 @@ func (l signatureTreeSubdigestLeaf) join(other signatureTree) (signatureTree, er } func (l signatureTreeSubdigestLeaf) reduceImageHash() (core.ImageHash, error) { - return WalletConfigTreeSubdigestLeaf{l.Subdigest}.ImageHash(), nil + return WalletConfigTreeSubdigestLeaf{l.Hash}.ImageHash(), nil } func (l signatureTreeSubdigestLeaf) write(writer io.Writer) error { @@ -1345,8 +1328,8 @@ func decodeSignatureTreeNestedLeaf(data *[]byte) (*signatureTreeNestedLeaf, erro return &signatureTreeNestedLeaf{weight, threshold, tree}, nil } -func (l *signatureTreeNestedLeaf) recover(ctx context.Context, subdigest core.Subdigest, provider *ethrpc.Provider, signerSignatures core.SignerSignatures) (WalletConfigTree, *big.Int, error) { - tree, weight, err := l.tree.recover(ctx, subdigest, provider, signerSignatures) +func (l *signatureTreeNestedLeaf) recover(ctx context.Context, payload core.Payload, provider *ethrpc.Provider, signerSignatures core.SignerSignatures) (WalletConfigTree, *big.Int, error) { + tree, weight, err := l.tree.recover(ctx, payload, provider, signerSignatures) if err != nil { return nil, nil, fmt.Errorf("unable to recover nested leaf: %w", err) } @@ -1379,6 +1362,7 @@ func (l *signatureTreeNestedLeaf) join(other signatureTree) (signatureTree, erro threshold: l.threshold, tree: tree, }, nil + default: return nil, fmt.Errorf("unable to join nested leaf with %T", other) } @@ -1421,6 +1405,10 @@ func (l *signatureTreeNestedLeaf) write(writer io.Writer) error { return fmt.Errorf("unable to encode nested leaf signature: %w", err) } + if len(buffer.Bytes()) > 0xffffff { + return fmt.Errorf("signature length %v does not fit in a uint24", len(buffer.Bytes())) + } + err = writeUint24(writer, uint32(len(buffer.Bytes()))) if err != nil { return fmt.Errorf("unable to write nested leaf signature length: %w", err) @@ -1444,8 +1432,8 @@ func (c *WalletConfig) Threshold() uint16 { return c.Threshold_ } -func (c *WalletConfig) Checkpoint() uint32 { - return c.Checkpoint_ +func (c *WalletConfig) Checkpoint() uint64 { + return uint64(c.Checkpoint_) } func (c *WalletConfig) Signers() map[common.Address]uint16 { @@ -1464,6 +1452,10 @@ func (c *WalletConfig) SignersWeight(signers []common.Address) uint16 { return uint16(weight.Uint64()) } +func (c *WalletConfig) IsComplete() bool { + return c.Tree.isComplete() +} + func (c *WalletConfig) IsUsable() error { if c.Threshold_ == 0 { return fmt.Errorf("threshold is 0") @@ -1593,6 +1585,7 @@ func (c *WalletConfig) BuildNoChainIDSignature(ctx context.Context, sign core.Si type WalletConfigTree interface { core.ImageHashable + isComplete() bool maxWeight() *big.Int readSignersIntoMap(signers map[common.Address]uint16) unverifiedWeight(signers map[common.Address]uint16) *big.Int @@ -1701,6 +1694,10 @@ func (n *WalletConfigTreeNode) ImageHash() core.ImageHash { } } +func (n *WalletConfigTreeNode) isComplete() bool { + return n.Left.isComplete() && n.Right.isComplete() +} + func (n *WalletConfigTreeNode) maxWeight() *big.Int { left, right := n.Left.maxWeight(), n.Right.maxWeight() return new(big.Int).Add(left, right) @@ -1768,6 +1765,10 @@ func (l *WalletConfigTreeAddressLeaf) ImageHash() core.ImageHash { return core.ImageHash{Hash: hash, Preimage: l} } +func (l *WalletConfigTreeAddressLeaf) isComplete() bool { + return true +} + func (l *WalletConfigTreeAddressLeaf) maxWeight() *big.Int { return new(big.Int).SetUint64(uint64(l.Weight)) } @@ -1866,6 +1867,10 @@ func (l WalletConfigTreeNodeLeaf) ImageHash() core.ImageHash { return l.Node } +func (l WalletConfigTreeNodeLeaf) isComplete() bool { + return false +} + func (l WalletConfigTreeNodeLeaf) maxWeight() *big.Int { return new(big.Int) } @@ -1943,6 +1948,10 @@ func (l *WalletConfigTreeNestedLeaf) ImageHash() core.ImageHash { } } +func (l *WalletConfigTreeNestedLeaf) isComplete() bool { + return l.Tree.isComplete() +} + func (l *WalletConfigTreeNestedLeaf) maxWeight() *big.Int { if l.Tree.maxWeight().Cmp(new(big.Int).SetUint64(uint64(l.Threshold))) >= 0 { return new(big.Int).SetUint64(uint64(l.Weight)) @@ -1972,7 +1981,7 @@ func (l *WalletConfigTreeNestedLeaf) buildSignatureTree(signerSignatures map[com } type WalletConfigTreeSubdigestLeaf struct { - Subdigest core.Subdigest `json:"subdigest" toml:"subdigest"` + Subdigest common.Hash `json:"subdigest" toml:"subdigest"` } func decodeWalletConfigTreeSubdigestLeaf(object any) (WalletConfigTreeSubdigestLeaf, error) { @@ -1997,7 +2006,7 @@ func decodeWalletConfigTreeSubdigestLeaf(object any) (WalletConfigTreeSubdigestL return WalletConfigTreeSubdigestLeaf{}, fmt.Errorf("expected hash of length %v, got hash of length %v", common.HashLength, len(subdigest__)) } - return WalletConfigTreeSubdigestLeaf{core.Subdigest{Hash: common.BytesToHash(subdigest__)}}, nil + return WalletConfigTreeSubdigestLeaf{common.BytesToHash(subdigest__)}, nil } func (l WalletConfigTreeSubdigestLeaf) ImageHash() core.ImageHash { @@ -2010,6 +2019,10 @@ func (l WalletConfigTreeSubdigestLeaf) ImageHash() core.ImageHash { } } +func (l WalletConfigTreeSubdigestLeaf) isComplete() bool { + return true +} + func (l WalletConfigTreeSubdigestLeaf) maxWeight() *big.Int { return new(big.Int).Set(maxUint256) } @@ -2040,23 +2053,6 @@ func hasKeys(object map[string]any, keys []string) bool { return true } -func ecrecover(subdigest core.Subdigest, signature []byte) (common.Address, error) { - if length := len(signature); length != crypto.SignatureLength { - return common.Address{}, fmt.Errorf("invalid ecdsa signature length %v, expected length %v", length, crypto.SignatureLength) - } - - var fixedSignature [crypto.SignatureLength]byte - copy(fixedSignature[:], signature) - fixedSignature[len(fixedSignature)-1] -= 27 - - pubkey, err := crypto.SigToPub(subdigest.Bytes(), fixedSignature[:]) - if err != nil { - return common.Address{}, fmt.Errorf("unable to recover ecdsa signature: %w", err) - } - - return crypto.PubkeyToAddress(*pubkey), nil -} - func toUint8(number any) (uint8, error) { switch number := number.(type) { case int64: diff --git a/core/v2/v2_test.go b/core/v2/v2_test.go index 5850efd3..e2a75907 100644 --- a/core/v2/v2_test.go +++ b/core/v2/v2_test.go @@ -3,7 +3,6 @@ package v2 import ( "context" "fmt" - "math/big" "testing" "github.com/0xsequence/ethkit/ethwallet" @@ -96,15 +95,11 @@ func TestSignatureJoin(t *testing.T) { } msg := []byte("hello") - digest := core.Digest{ - Hash: crypto.Keccak256Hash(msg), - Preimage: nil, - } - subdigest := digest.Subdigest(common.Address{}, big.NewInt(0)) + payload := Digest(crypto.Keccak256Hash(msg), common.Address{}) sig1, err := wc.BuildRegularSignature(context.Background(), func(ctx context.Context, signer common.Address, signatures []core.SignerSignature) (core.SignerSignatureType, []byte, error) { if signer == eoa1.Address() { - sig, _ := eoa1.SignMessage(subdigest.Bytes()) + sig, _ := eoa1.SignMessage(payload.Digest().Bytes()) return core.SignerSignatureTypeEthSign, sig, nil } else { return 0, nil, nil @@ -114,7 +109,7 @@ func TestSignatureJoin(t *testing.T) { sig2, err := wc.BuildRegularSignature(context.Background(), func(ctx context.Context, signer common.Address, signatures []core.SignerSignature) (core.SignerSignatureType, []byte, error) { if signer == eoa2.Address() { - sig, _ := eoa2.SignMessage(subdigest.Bytes()) + sig, _ := eoa2.SignMessage(payload.Digest().Bytes()) return core.SignerSignatureTypeEthSign, sig, nil } else { return 0, nil, nil @@ -122,7 +117,7 @@ func TestSignatureJoin(t *testing.T) { }, false) require.NoError(t, err) - joinedSig, err := sig1.Join(subdigest, sig2) + joinedSig, err := sig1.Join(payload, sig2) require.NoError(t, err) sig1Tree := sig1.(*regularSignature).tree @@ -166,15 +161,11 @@ func TestSignatureJoin(t *testing.T) { } msg := []byte("hello") - digest := core.Digest{ - Hash: crypto.Keccak256Hash(msg), - Preimage: nil, - } - subdigest := digest.Subdigest(common.Address{}, big.NewInt(0)) + payload := Digest(crypto.Keccak256Hash(msg), common.Address{}) sig1, err := wc.BuildRegularSignature(context.Background(), func(ctx context.Context, signer common.Address, signatures []core.SignerSignature) (core.SignerSignatureType, []byte, error) { if signer == eoa1.Address() { - sig, _ := eoa1.SignMessage(subdigest.Bytes()) + sig, _ := eoa1.SignMessage(payload.Digest().Bytes()) return core.SignerSignatureTypeEthSign, sig, nil } else { return 0, nil, nil @@ -182,11 +173,11 @@ func TestSignatureJoin(t *testing.T) { }, false) require.NoError(t, err) - sig1 = sig1.Reduce(subdigest) + sig1 = sig1.Reduce(payload) sig2, err := wc.BuildRegularSignature(context.Background(), func(ctx context.Context, signer common.Address, signatures []core.SignerSignature) (core.SignerSignatureType, []byte, error) { if signer == eoa6.Address() { - sig, _ := eoa6.SignMessage(subdigest.Bytes()) + sig, _ := eoa6.SignMessage(payload.Digest().Bytes()) return core.SignerSignatureTypeEthSign, sig, nil } else { return 0, nil, nil @@ -194,9 +185,9 @@ func TestSignatureJoin(t *testing.T) { }, false) require.NoError(t, err) - sig2 = sig2.Reduce(subdigest) + sig2 = sig2.Reduce(payload) - joinedSig, err := sig1.Join(subdigest, sig2) + joinedSig, err := sig1.Join(payload, sig2) require.NoError(t, err) sig1Tree := sig1.(*regularSignature).tree @@ -260,15 +251,11 @@ func TestNoChainIDSignatureJoin(t *testing.T) { } msg := []byte("hello") - digest := core.Digest{ - Hash: crypto.Keccak256Hash(msg), - Preimage: nil, - } - subdigest := digest.Subdigest(common.Address{}) + payload := Digest(crypto.Keccak256Hash(msg), common.Address{}) sig1, err := wc.BuildNoChainIDSignature(context.Background(), func(ctx context.Context, signer common.Address, signatures []core.SignerSignature) (core.SignerSignatureType, []byte, error) { if signer == eoa1.Address() { - sig, _ := eoa1.SignMessage(subdigest.Bytes()) + sig, _ := eoa1.SignMessage(payload.Digest().Bytes()) return core.SignerSignatureTypeEthSign, sig, nil } else { return 0, nil, nil @@ -278,7 +265,7 @@ func TestNoChainIDSignatureJoin(t *testing.T) { sig2, err := wc.BuildNoChainIDSignature(context.Background(), func(ctx context.Context, signer common.Address, signatures []core.SignerSignature) (core.SignerSignatureType, []byte, error) { if signer == eoa2.Address() { - sig, _ := eoa2.SignMessage(subdigest.Bytes()) + sig, _ := eoa2.SignMessage(payload.Digest().Bytes()) return core.SignerSignatureTypeEthSign, sig, nil } else { return 0, nil, nil @@ -286,7 +273,7 @@ func TestNoChainIDSignatureJoin(t *testing.T) { }, false) require.NoError(t, err) - joinedSig, err := sig1.Join(subdigest, sig2) + joinedSig, err := sig1.Join(payload, sig2) require.NoError(t, err) sig1Tree := sig1.(*noChainIDSignature).tree @@ -330,15 +317,11 @@ func TestNoChainIDSignatureJoin(t *testing.T) { } msg := []byte("hello") - digest := core.Digest{ - Hash: crypto.Keccak256Hash(msg), - Preimage: nil, - } - subdigest := digest.Subdigest(common.Address{}, big.NewInt(0)) + payload := Digest(crypto.Keccak256Hash(msg), common.Address{}) sig1, err := wc.BuildNoChainIDSignature(context.Background(), func(ctx context.Context, signer common.Address, signatures []core.SignerSignature) (core.SignerSignatureType, []byte, error) { if signer == eoa1.Address() { - sig, _ := eoa1.SignMessage(subdigest.Bytes()) + sig, _ := eoa1.SignMessage(payload.Digest().Bytes()) return core.SignerSignatureTypeEthSign, sig, nil } else { return core.SignerSignatureTypeEIP712, nil, nil @@ -346,11 +329,11 @@ func TestNoChainIDSignatureJoin(t *testing.T) { }, false) require.NoError(t, err) - sig1 = sig1.Reduce(subdigest) + sig1 = sig1.Reduce(payload) sig2, err := wc.BuildNoChainIDSignature(context.Background(), func(ctx context.Context, signer common.Address, signatures []core.SignerSignature) (core.SignerSignatureType, []byte, error) { if signer == eoa6.Address() { - sig, _ := eoa6.SignMessage(subdigest.Bytes()) + sig, _ := eoa6.SignMessage(payload.Digest().Bytes()) return core.SignerSignatureTypeEthSign, sig, nil } else { return 0, nil, nil @@ -358,9 +341,9 @@ func TestNoChainIDSignatureJoin(t *testing.T) { }, false) require.NoError(t, err) - sig2 = sig2.Reduce(subdigest) + sig2 = sig2.Reduce(payload) - joinedSig, err := sig1.Join(subdigest, sig2) + joinedSig, err := sig1.Join(payload, sig2) require.NoError(t, err) sig1Tree := sig1.(*noChainIDSignature).tree @@ -421,7 +404,7 @@ func TestReduceSignature(t *testing.T) { spew.Dump(decodedSignature) - reducedSignature := decodedSignature.Reduce(core.Subdigest{}) + reducedSignature := decodedSignature.Reduce(core.PayloadDigest{}) spew.Dump(reducedSignature) diff --git a/core/v3/attestation.go b/core/v3/attestation.go new file mode 100644 index 00000000..61daf57f --- /dev/null +++ b/core/v3/attestation.go @@ -0,0 +1,176 @@ +package v3 + +import ( + "encoding/hex" + "encoding/json" + "fmt" + + "github.com/0xsequence/ethkit/go-ethereum/common" +) + +// Attestation implements the Attestation interface +type Attestation struct { + ApprovedSigner common.Address `json:"approvedSigner"` + IdentityType []byte `json:"identityType"` // bytes4 + IssuerHash []byte `json:"issuerHash"` // bytes32 + AudienceHash []byte `json:"audienceHash"` // bytes32 + ApplicationData []byte `json:"applicationData"` // bytes + AuthData AuthData `json:"authData"` +} + +// AuthData represents authentication data with a redirect URL +type AuthData struct { + RedirectUrl string `json:"redirectUrl"` +} + +// Encode converts an Attestation to its binary representation +func (a *Attestation) Encode() []byte { + // Pad identity type to 4 bytes if needed + identityType := a.IdentityType + if len(identityType) > 4 { + identityType = identityType[:4] + } else if len(identityType) < 4 { + padded := make([]byte, 4) + copy(padded[4-len(identityType):], identityType) + identityType = padded + } + + // Encode auth data + authDataBytes := encodeAuthData(a.AuthData) + + // Concatenate all parts + parts := [][]byte{ + a.ApprovedSigner.Bytes(), // 20 bytes + identityType, // 4 bytes + PadLeft(a.IssuerHash, 32), // 32 bytes + PadLeft(a.AudienceHash, 32), // 32 bytes + intToBytes(len(a.ApplicationData), 3), // 3 bytes for length + a.ApplicationData, // variable length + authDataBytes, // variable length + } + + return Concat(parts) +} + +// encodeAuthData converts AuthData to its binary representation +func encodeAuthData(authData AuthData) []byte { + redirectUrlBytes := []byte(authData.RedirectUrl) + return Concat([][]byte{ + intToBytes(len(redirectUrlBytes), 3), // 3 bytes for length + redirectUrlBytes, // variable length + }) +} + +// Hash computes the Keccak256 hash of the encoded attestation +func (a *Attestation) Hash() []byte { + return keccak256(a.Encode()) +} + +// EncodeForJson returns a JSON-friendly representation of the attestation +func (a *Attestation) EncodeForJson() interface{} { + return map[string]interface{}{ + "approvedSigner": a.ApprovedSigner.Hex(), + "identityType": "0x" + hex.EncodeToString(a.IdentityType), + "issuerHash": "0x" + hex.EncodeToString(a.IssuerHash), + "audienceHash": "0x" + hex.EncodeToString(a.AudienceHash), + "applicationData": "0x" + hex.EncodeToString(a.ApplicationData), + "authData": a.AuthData, + } +} + +// ToJson converts the attestation to a JSON string +func (a *Attestation) ToJson() (string, error) { + jsonData, err := json.Marshal(a.EncodeForJson()) + if err != nil { + return "", err + } + return string(jsonData), nil +} + +// FromJson parses a JSON string into an Attestation +func AttestationFromJson(jsonStr string) (*Attestation, error) { + var parsed map[string]interface{} + if err := json.Unmarshal([]byte(jsonStr), &parsed); err != nil { + return nil, err + } + return AttestationFromParsed(parsed) +} + +// FromParsed reconstructs an Attestation from parsed JSON +func AttestationFromParsed(parsed map[string]interface{}) (*Attestation, error) { + approvedSigner, ok := parsed["approvedSigner"].(string) + if !ok { + return nil, fmt.Errorf("invalid approvedSigner") + } + + identityType, ok := parsed["identityType"].(string) + if !ok { + return nil, fmt.Errorf("invalid identityType") + } + identityTypeBytes, err := hex.DecodeString(identityType[2:]) // Remove "0x" prefix + if err != nil { + return nil, fmt.Errorf("invalid identityType hex: %w", err) + } + + issuerHash, ok := parsed["issuerHash"].(string) + if !ok { + return nil, fmt.Errorf("invalid issuerHash") + } + issuerHashBytes, err := hex.DecodeString(issuerHash[2:]) // Remove "0x" prefix + if err != nil { + return nil, fmt.Errorf("invalid issuerHash hex: %w", err) + } + + audienceHash, ok := parsed["audienceHash"].(string) + if !ok { + return nil, fmt.Errorf("invalid audienceHash") + } + audienceHashBytes, err := hex.DecodeString(audienceHash[2:]) // Remove "0x" prefix + if err != nil { + return nil, fmt.Errorf("invalid audienceHash hex: %w", err) + } + + applicationData, ok := parsed["applicationData"].(string) + if !ok { + return nil, fmt.Errorf("invalid applicationData") + } + applicationDataBytes, err := hex.DecodeString(applicationData[2:]) // Remove "0x" prefix + if err != nil { + return nil, fmt.Errorf("invalid applicationData hex: %w", err) + } + + authData, ok := parsed["authData"].(map[string]interface{}) + if !ok { + return nil, fmt.Errorf("invalid authData") + } + + redirectUrl, ok := authData["redirectUrl"].(string) + if !ok { + return nil, fmt.Errorf("invalid redirectUrl") + } + + return &Attestation{ + ApprovedSigner: common.HexToAddress(approvedSigner), + IdentityType: identityTypeBytes, + IssuerHash: issuerHashBytes, + AudienceHash: audienceHashBytes, + ApplicationData: applicationDataBytes, + AuthData: AuthData{ + RedirectUrl: redirectUrl, + }, + }, nil +} + +// ACCEPT_IMPLICIT_REQUEST_MAGIC_PREFIX is the magic prefix for acceptImplicitRequest +var ACCEPT_IMPLICIT_REQUEST_MAGIC_PREFIX = keccak256([]byte("acceptImplicitRequest")) + +// GenerateImplicitRequestMagic generates the magic value for an implicit request +func GenerateImplicitRequestMagic(attestation *Attestation, wallet common.Address) []byte { + parts := [][]byte{ + ACCEPT_IMPLICIT_REQUEST_MAGIC_PREFIX, + wallet.Bytes(), + PadLeft(attestation.AudienceHash, 32), + PadLeft(attestation.IssuerHash, 32), + } + return keccak256(Concat(parts)) +} diff --git a/core/v3/generic_tree.go b/core/v3/generic_tree.go new file mode 100644 index 00000000..988e7dd0 --- /dev/null +++ b/core/v3/generic_tree.go @@ -0,0 +1,130 @@ +package v3 + +import ( + "github.com/0xsequence/ethkit/go-ethereum/common" + "github.com/0xsequence/ethkit/go-ethereum/crypto" + "github.com/0xsequence/go-sequence/core" +) + +type Tree = core.ImageHashable + +type TreeNode []Tree + +var _ Tree = TreeNode{} + +func (n TreeNode) ImageHash() core.ImageHash { + if len(n) == 0 { + return core.ImageHash{Hash: common.Hash{}, Preimage: n} + } + + imageHash := n[0].ImageHash().Hash + for _, tree := range n[1:] { + imageHash = crypto.Keccak256Hash(imageHash.Bytes(), tree.ImageHash().Bytes()) + } + + return core.ImageHash{Hash: imageHash, Preimage: n} +} + +type TreeLeaf []byte + +var _ Tree = TreeLeaf{} + +func (l TreeLeaf) ImageHash() core.ImageHash { + return core.ImageHash{Hash: crypto.Keccak256Hash(l), Preimage: l} +} + +func MergeSubtrees(tree Tree, subtrees map[common.Hash]Tree) (Tree, bool) { + switch tree := tree.(type) { + case core.ImageHash: + subtree, ok := subtrees[tree.Hash] + if ok { + return subtree, true + } else if tree.Preimage != nil && tree.Preimage != tree { + subtree_, _ := MergeSubtrees(tree.Preimage, subtrees) + return subtree_, true + } else { + return tree, false + } + + case *core.ImageHash: + subtree, ok := subtrees[tree.Hash] + if ok { + return subtree, true + } else if tree.Preimage != nil && tree.Preimage != tree { + subtree_, _ := MergeSubtrees(tree.Preimage, subtrees) + return subtree_, true + } else { + return tree, false + } + + case TreeNode: + updated := false + + node := make(TreeNode, 0, len(tree)) + for _, subtree := range tree { + subtree_, updated_ := MergeSubtrees(subtree, subtrees) + if updated_ { + updated = true + } + node = append(node, subtree_) + } + + if updated { + return node, true + } else { + return tree, false + } + + default: + return tree, false + } +} + +func Subtrees(tree Tree) map[common.Hash]Tree { + subtrees := map[common.Hash]Tree{} + readSubtrees(subtrees, tree) + return subtrees +} + +func readSubtrees(subtrees map[common.Hash]Tree, tree Tree) { + switch tree := tree.(type) { + case core.ImageHash: + if tree.Preimage != nil && tree.Preimage != tree { + readSubtrees(subtrees, tree.Preimage) + } + + case *core.ImageHash: + if tree.Preimage != nil && tree.Preimage != tree { + readSubtrees(subtrees, tree.Preimage) + } + + case TreeNode: + for _, subtree := range tree { + readSubtrees(subtrees, subtree) + } + + subtrees[tree.ImageHash().Hash] = tree + + default: + subtrees[tree.ImageHash().Hash] = tree + } +} + +func IsCompleteTree(tree Tree) bool { + switch tree := tree.(type) { + case core.ImageHash, *core.ImageHash: + return false + + case TreeNode: + for _, subtree := range tree { + if !IsCompleteTree(subtree) { + return false + } + } + + return true + + default: + return true + } +} diff --git a/core/v3/payload.go b/core/v3/payload.go new file mode 100644 index 00000000..9598beda --- /dev/null +++ b/core/v3/payload.go @@ -0,0 +1,919 @@ +package v3 + +import ( + "bytes" + "fmt" + "io" + "math/big" + "reflect" + "strings" + + "github.com/0xsequence/ethkit/ethcoder" + "github.com/0xsequence/ethkit/go-ethereum/accounts/abi" + "github.com/0xsequence/ethkit/go-ethereum/common" + "github.com/0xsequence/ethkit/go-ethereum/common/hexutil" + "github.com/0xsequence/ethkit/go-ethereum/crypto" + "github.com/0xsequence/go-sequence/contracts/gen/v3/walletstage1" + "github.com/0xsequence/go-sequence/core" +) + +const ( + KindTransactions uint8 = 0x00 + KindMessage uint8 = 0x01 + KindConfigUpdate uint8 = 0x02 + KindDigest uint8 = 0x03 +) + +type DecodedPayload struct { + Kind uint8 + NoChainId bool + Calls []Call + Space *big.Int + Nonce *big.Int + Message []byte + ImageHash common.Hash + Digest common.Hash + ParentWallets []common.Address +} + +func DecodeABIPayload(input string) (DecodedPayload, error) { + data, err := hexutil.Decode(input) + + if err != nil { + return DecodedPayload{}, fmt.Errorf("invalid hex input: %w", err) + } + + const abiDef = `[{ + "name": "f", + "type": "function", + "inputs": [{ + "type": "tuple", + "components": [ + {"name": "kind", "type": "uint8"}, + {"name": "noChainId", "type": "bool"}, + {"name": "calls", "type": "tuple[]", "components": [ + {"name": "to", "type": "address"}, + {"name": "value", "type": "uint256"}, + {"name": "data", "type": "bytes"}, + {"name": "gasLimit", "type": "uint256"}, + {"name": "delegateCall", "type": "bool"}, + {"name": "onlyFallback", "type": "bool"}, + {"name": "behaviorOnError", "type": "uint256"} + ]}, + {"name": "space", "type": "uint256"}, + {"name": "nonce", "type": "uint256"}, + {"name": "message", "type": "bytes"}, + {"name": "imageHash", "type": "bytes32"}, + {"name": "digest", "type": "bytes32"}, + {"name": "parentWallets", "type": "address[]"} + ] + }] + }]` + + parsedABI, err := abi.JSON(strings.NewReader(abiDef)) + if err != nil { + return DecodedPayload{}, fmt.Errorf("failed to parse ABI: %w", err) + } + + decodedData, err := parsedABI.Methods["f"].Inputs.Unpack(data) + if err != nil { + return DecodedPayload{}, fmt.Errorf("failed to decode ABI: %w", err) + } + + if len(decodedData) != 1 { + return DecodedPayload{}, fmt.Errorf("invalid decoded data length") + } + + v := decodedData[0] + if v == nil { + return DecodedPayload{}, fmt.Errorf("decoded data is nil") + } + + if s, ok := v.(struct { + Kind uint8 `json:"kind"` + NoChainId bool `json:"noChainId"` + Calls []struct { + To common.Address `json:"to"` + Value *big.Int `json:"value"` + Data []uint8 `json:"data"` + GasLimit *big.Int `json:"gasLimit"` + DelegateCall bool `json:"delegateCall"` + OnlyFallback bool `json:"onlyFallback"` + BehaviorOnError *big.Int `json:"behaviorOnError"` + } `json:"calls"` + Space *big.Int `json:"space"` + Nonce *big.Int `json:"nonce"` + Message []uint8 `json:"message"` + ImageHash [32]uint8 `json:"imageHash"` + Digest [32]uint8 `json:"digest"` + ParentWallets []common.Address `json:"parentWallets"` + }); ok { + calls := make([]Call, len(s.Calls)) + for i, call := range s.Calls { + calls[i] = Call{ + To: call.To, + Value: call.Value, + Data: call.Data, + GasLimit: call.GasLimit, + DelegateCall: call.DelegateCall, + OnlyFallback: call.OnlyFallback, + BehaviorOnError: BehaviorOnError(call.BehaviorOnError.Uint64()), + } + } + + var imageHash common.Hash + copy(imageHash[:], s.ImageHash[:]) + + var digest common.Hash + copy(digest[:], s.Digest[:]) + + return DecodedPayload{ + Kind: s.Kind, + NoChainId: s.NoChainId, + Calls: calls, + Space: s.Space, + Nonce: s.Nonce, + Message: s.Message, + ImageHash: imageHash, + Digest: digest, + ParentWallets: s.ParentWallets, + }, nil + } + + return DecodedPayload{}, fmt.Errorf("failed to decode payload") +} + +func PayloadWithAddress(payload core.Payload, address common.Address) (core.Payload, error) { + switch payload := payload.(type) { + case CallsPayload: + return CallsPayload{ + basePayload: payload.basePayload.withAddress(address), + + Calls: payload.Calls, + Space: payload.Space, + Nonce: payload.Nonce, + }, nil + + case MessagePayload: + return MessagePayload{ + basePayload: payload.basePayload.withAddress(address), + + Message: payload.Message, + }, nil + + case ConfigUpdatePayload: + return ConfigUpdatePayload{ + basePayload: payload.basePayload.withAddress(address), + + ImageHash: payload.ImageHash, + }, nil + + case DigestPayload: + return DigestPayload{ + basePayload: payload.basePayload.withAddress(address), + + MessageDigest: payload.MessageDigest, + }, nil + + default: + return nil, fmt.Errorf("unable to override address to %v for %T payload %v", address, payload, payload.Digest()) + } +} + +var ( + _ core.Payload = CallsPayload{} + _ core.Payload = MessagePayload{} + _ core.Payload = ConfigUpdatePayload{} + _ core.Payload = DigestPayload{} +) + +type basePayload struct { + address common.Address + chainID *big.Int + parentWallets []common.Address +} + +func (p basePayload) Address() common.Address { + return p.address +} + +func (p basePayload) ChainID() *big.Int { + if p.chainID != nil { + return new(big.Int).Set(p.chainID) + } else { + return new(big.Int) + } +} + +func (p basePayload) withAddress(address common.Address) basePayload { + return basePayload{ + address: address, + chainID: p.chainID, + parentWallets: p.parentWallets, + } +} + +var eip712Domain = []ethcoder.TypedDataArgument{ + {Name: "name", Type: "string"}, + {Name: "version", Type: "string"}, + {Name: "chainId", Type: "uint256"}, + {Name: "verifyingContract", Type: "address"}, +} + +func (p basePayload) domain() ethcoder.TypedDataDomain { + return ethcoder.TypedDataDomain{ + Name: "Sequence Wallet", + Version: "3", + ChainID: p.chainID, + VerifyingContract: &p.address, + } +} + +func NewCallsPayload(address common.Address, chainID *big.Int, calls_ []Call, space, nonce *big.Int, parentWallets ...[]common.Address) CallsPayload { + if chainID == nil { + chainID = big.NewInt(0) + } + if len(calls_) >= 0x10000 { + panic(fmt.Errorf("number of calls %v >= 2^16", len(calls_))) + } + if space == nil { + space = big.NewInt(0) + } + if space.Sign() < 0 || space.Cmp(new(big.Int).Lsh(common.Big1, 160)) >= 0 { + panic(fmt.Errorf("space %v is out of bounds [0, 2^160)", space)) + } + if nonce == nil { + nonce = big.NewInt(0) + } + if nonce.Sign() < 0 || nonce.Cmp(new(big.Int).Lsh(common.Big1, 56)) >= 0 { + panic(fmt.Errorf("nonce %v is out of bounds [0, 2^56)", nonce)) + } + if parentWallets == nil { + parentWallets = append(parentWallets, nil) + } + if parentWallets[0] == nil { + parentWallets[0] = []common.Address{} + } + + return CallsPayload{ + basePayload: basePayload{ + address: address, + chainID: chainID, + parentWallets: parentWallets[0], + }, + + Calls: calls_, + Space: space, + Nonce: nonce, + } +} + +type Call struct { + To common.Address + Value *big.Int + Data []byte + GasLimit *big.Int + DelegateCall bool + OnlyFallback bool + BehaviorOnError BehaviorOnError +} + +func (c Call) asMap() map[string]any { + value := c.Value + if value == nil { + value = big.NewInt(0) + } + + data := c.Data + if data == nil { + data = []byte{} + } + + gasLimit := c.GasLimit + if gasLimit == nil { + gasLimit = big.NewInt(0) + } + + return map[string]any{ + "to": c.To, + "value": value, + "data": data, + "gasLimit": gasLimit, + "delegateCall": c.DelegateCall, + "onlyFallback": c.OnlyFallback, + "behaviorOnError": new(big.Int).SetInt64(int64(c.BehaviorOnError)), + } +} + +func (c Call) encode(address common.Address) []byte { + var flags byte + var buffer bytes.Buffer + + if c.To == address { + flags |= 0x01 + } else { + mustWrite(&buffer, c.To.Bytes()) + } + + if c.Value != nil && c.Value.Sign() != 0 { + flags |= 0x02 + mustWrite(&buffer, common.BigToHash(c.Value).Bytes()) + } + + if len(c.Data) != 0 { + flags |= 0x04 + size := len(c.Data) + mustWrite(&buffer, []byte{byte(size >> 16), byte(size >> 8), byte(size)}) + mustWrite(&buffer, c.Data) + } + + if c.GasLimit != nil && c.GasLimit.Sign() != 0 { + flags |= 0x08 + mustWrite(&buffer, common.BigToHash(c.GasLimit).Bytes()) + } + + if c.DelegateCall { + flags |= 0x10 + } + + if c.OnlyFallback { + flags |= 0x20 + } + + flags |= byte(c.BehaviorOnError << 6) + + data := make([]byte, 1+buffer.Len()) + data[0] = flags + copy(data[1:], buffer.Bytes()) + return data +} + +func decodeCall(data []byte, address common.Address) (Call, []byte, error) { + call := Call{ + Value: new(big.Int), + GasLimit: new(big.Int), + } + + if len(data) < 1 { + return Call{}, nil, fmt.Errorf("no flags") + } + var flags byte + flags, data = data[0], data[1:] + + if flags&0x01 != 0 { + call.To = address + } else { + if len(data) < 20 { + return Call{}, nil, fmt.Errorf("no to") + } + call.To, data = common.BytesToAddress(data[:20]), data[20:] + } + + if flags&0x02 != 0 { + if len(data) < 32 { + return Call{}, nil, fmt.Errorf("no value") + } + call.Value, data = new(big.Int).SetBytes(data[:32]), data[32:] + } + + if flags&0x04 != 0 { + if len(data) < 3 { + return Call{}, nil, fmt.Errorf("no data size") + } + var dataSize int + dataSize, data = int(data[0])<<16+int(data[1])<<8+int(data[2]), data[3:] + if len(data) < dataSize { + return Call{}, nil, fmt.Errorf("no data") + } + call.Data, data = data[:dataSize], data[dataSize:] + } + + if flags&0x08 != 0 { + if len(data) < 32 { + return Call{}, nil, fmt.Errorf("no gas limit") + } + call.GasLimit, data = new(big.Int).SetBytes(data[:32]), data[32:] + } + + call.DelegateCall = flags&0x10 != 0 + call.OnlyFallback = flags&0x20 != 0 + call.BehaviorOnError = BehaviorOnError(flags & 0xc0 >> 6) + + return call, data, nil +} + +type BehaviorOnError int + +const ( + BehaviorOnErrorIgnore BehaviorOnError = 0 + BehaviorOnErrorRevert BehaviorOnError = 1 + BehaviorOnErrorAbort BehaviorOnError = 2 +) + +type CallsPayload struct { + basePayload + + Calls []Call + Space *big.Int + Nonce *big.Int +} + +func (p CallsPayload) Digest() core.PayloadDigest { + calls := make([]any, 0, len(p.Calls)) + for _, call := range p.Calls { + calls = append(calls, any(call.asMap())) + } + + wallets := make([]any, 0, len(p.parentWallets)) + for _, wallet := range p.parentWallets { + wallets = append(wallets, any(wallet)) + } + + data := ethcoder.TypedData{ + Domain: p.domain(), + PrimaryType: "Calls", + Types: map[string][]ethcoder.TypedDataArgument{ + "EIP712Domain": eip712Domain, + "Calls": { + {Name: "calls", Type: "Call[]"}, + {Name: "space", Type: "uint256"}, + {Name: "nonce", Type: "uint256"}, + {Name: "wallets", Type: "address[]"}, + }, + "Call": { + {Name: "to", Type: "address"}, + {Name: "value", Type: "uint256"}, + {Name: "data", Type: "bytes"}, + {Name: "gasLimit", Type: "uint256"}, + {Name: "delegateCall", Type: "bool"}, + {Name: "onlyFallback", Type: "bool"}, + {Name: "behaviorOnError", Type: "uint256"}, + }, + }, + Message: map[string]any{ + "calls": calls, + "space": p.Space, + "nonce": p.Nonce, + "wallets": wallets, + }, + } + + digest, err := data.EncodeDigest() + if err != nil { + panic(err) + } + + return core.PayloadDigest{Hash: common.Hash(digest), Address_: p.address, ChainID_: p.chainID, Payload: p} +} + +func (p CallsPayload) Encode(address common.Address) []byte { + var flags byte + var buffer bytes.Buffer + + if p.Space.Sign() == 0 { + flags |= 0x01 + } else { + var space [20]byte + mustWrite(&buffer, p.Space.FillBytes(space[:])) + } + + nonce := p.Nonce.Bytes() + + flags |= byte(len(nonce)) << 1 + mustWrite(&buffer, nonce) + + calls := len(p.Calls) + if calls == 1 { + flags |= 0x10 + } else if calls < 0x100 { + mustWrite(&buffer, []byte{byte(calls)}) + } else { + flags |= 0x20 + mustWrite(&buffer, []byte{byte(calls >> 8), byte(calls)}) + } + + for _, call := range p.Calls { + mustWrite(&buffer, call.encode(address)) + } + + data := make([]byte, 1+buffer.Len()) + data[0] = flags + copy(data[1:], buffer.Bytes()) + return data +} + +func (p CallsPayload) ABIEncode() walletstage1.PayloadDecoded { + calls := make([]walletstage1.PayloadCall, 0, len(p.Calls)) + for _, call := range p.Calls { + calls = append(calls, walletstage1.PayloadCall{ + To: call.To, + Value: call.Value, + Data: call.Data, + GasLimit: call.GasLimit, + DelegateCall: call.DelegateCall, + OnlyFallback: call.OnlyFallback, + BehaviorOnError: big.NewInt(int64(call.BehaviorOnError)), + }) + } + + return walletstage1.PayloadDecoded{ + Kind: KindTransactions, + NoChainId: p.chainID == nil || p.chainID.Sign() == 0, + Calls: calls, + Space: p.Space, + Nonce: p.Nonce, + ParentWallets: p.parentWallets, + } +} + +func DecodeCalls(address common.Address, chainID *big.Int, data []byte) (CallsPayload, error) { + var space, nonce *big.Int + space = big.NewInt(0) + nonce = big.NewInt(0) + + if len(data) < 1 { + return CallsPayload{}, fmt.Errorf("no flags") + } + var flags byte + flags, data = data[0], data[1:] + + if flags&0x01 == 0 { + if len(data) < 20 { + return CallsPayload{}, fmt.Errorf("no space") + } + space.SetBytes(data[:20]) + data = data[20:] + } + + nonceSize := int(flags >> 1 & 0x07) + if len(data) < nonceSize { + return CallsPayload{}, fmt.Errorf("no nonce") + } + nonce.SetBytes(data[:nonceSize]) + data = data[nonceSize:] + + var calls_ int + if flags&0x10 != 0 { + calls_ = 1 + } else if flags&0x20 == 0 { + if len(data) < 1 { + return CallsPayload{}, fmt.Errorf("no number of calls") + } + calls_, data = int(data[0]), data[1:] + } else { + if len(data) < 2 { + return CallsPayload{}, fmt.Errorf("no number of calls") + } + calls_, data = int(data[0])<<8+int(data[1]), data[2:] + } + + var calls []Call + for len(calls) < calls_ { + var call Call + var err error + call, data, err = decodeCall(data, address) + if err != nil { + return CallsPayload{}, fmt.Errorf("unable to decode call %v: %w", len(calls), err) + } + + calls = append(calls, call) + } + + if len(data) != 0 { + return CallsPayload{}, fmt.Errorf("%v trailing bytes in payload", len(data)) + } + + return NewCallsPayload(address, chainID, calls, space, nonce), nil +} + +func NewMessagePayload(address common.Address, chainID *big.Int, message_ []byte, parentWallets ...[]common.Address) MessagePayload { + if chainID == nil { + chainID = big.NewInt(0) + } + if message_ == nil { + message_ = []byte{} + } + if parentWallets == nil { + parentWallets = append(parentWallets, nil) + } + if parentWallets[0] == nil { + parentWallets[0] = []common.Address{} + } + + return MessagePayload{ + basePayload: basePayload{ + address: address, + chainID: chainID, + parentWallets: parentWallets[0], + }, + + Message: message_, + } +} + +type MessagePayload struct { + basePayload + + Message []byte +} + +func (p MessagePayload) Digest() core.PayloadDigest { + wallets := make([]any, 0, len(p.parentWallets)) + for _, wallet := range p.parentWallets { + wallets = append(wallets, any(wallet)) + } + + data := ethcoder.TypedData{ + Domain: p.domain(), + PrimaryType: "Message", + Types: map[string][]ethcoder.TypedDataArgument{ + "EIP712Domain": eip712Domain, + "Message": { + {Name: "message", Type: "bytes"}, + {Name: "wallets", Type: "address[]"}, + }, + }, + Message: map[string]any{ + "message": p.Message, + "wallets": wallets, + }, + } + + digest, err := data.EncodeDigest() + if err != nil { + panic(err) + } + + return core.PayloadDigest{Hash: common.Hash(digest), Address_: p.address, ChainID_: p.chainID, Payload: p} +} + +func (p MessagePayload) Encode(address common.Address) []byte { + var buffer bytes.Buffer + + // Write kind byte for Message (0x01) + mustWrite(&buffer, []byte{KindMessage}) + + // Write message length as 3 bytes + size := len(p.Message) + mustWrite(&buffer, []byte{byte(size >> 16), byte(size >> 8), byte(size)}) + + // Write message data + if len(p.Message) > 0 { + mustWrite(&buffer, p.Message) + } + + return buffer.Bytes() +} + +func (p MessagePayload) ABIEncode() walletstage1.PayloadDecoded { + return walletstage1.PayloadDecoded{ + Kind: KindMessage, + NoChainId: p.chainID == nil || p.chainID.Sign() == 0, + Message: p.Message, + ParentWallets: p.parentWallets, + } +} + +func DecodeMessage(address common.Address, chainID *big.Int, data []byte) (MessagePayload, error) { + if len(data) < 4 { // kind byte + 3 bytes length + return MessagePayload{}, fmt.Errorf("message payload too short") + } + data = data[1:] // Skip kind byte + msgLen := int(data[0])<<16 + int(data[1])<<8 + int(data[2]) + data = data[3:] + if len(data) < msgLen { + return MessagePayload{}, fmt.Errorf("message data too short") + } + message := data[:msgLen] + return NewMessagePayload(address, chainID, message), nil +} + +func NewConfigUpdatePayload(address common.Address, chainID *big.Int, imageHash common.Hash, parentWallets ...[]common.Address) ConfigUpdatePayload { + if chainID == nil { + chainID = big.NewInt(0) + } + if isNil(imageHash) { + panic(fmt.Errorf("no config")) + } + if parentWallets == nil { + parentWallets = append(parentWallets, nil) + } + if parentWallets[0] == nil { + parentWallets[0] = []common.Address{} + } + + return ConfigUpdatePayload{ + basePayload: basePayload{ + address: address, + chainID: chainID, + parentWallets: parentWallets[0], + }, + + ImageHash: core.ImageHash{Hash: imageHash}, + } +} + +type ConfigUpdatePayload struct { + basePayload + + ImageHash core.ImageHashable +} + +func (p ConfigUpdatePayload) Digest() core.PayloadDigest { + wallets := make([]any, 0, len(p.parentWallets)) + for _, wallet := range p.parentWallets { + wallets = append(wallets, any(wallet)) + } + + data := ethcoder.TypedData{ + Domain: p.domain(), + PrimaryType: "ConfigUpdate", + Types: map[string][]ethcoder.TypedDataArgument{ + "EIP712Domain": eip712Domain, + "ConfigUpdate": { + {Name: "imageHash", Type: "bytes32"}, + {Name: "wallets", Type: "address[]"}, + }, + }, + Message: map[string]any{ + "imageHash": p.ImageHash.ImageHash().Hash, + "wallets": wallets, + }, + } + + digest, err := data.EncodeDigest() + if err != nil { + panic(err) + } + + return core.PayloadDigest{Hash: common.Hash(digest), Address_: p.address, ChainID_: p.chainID, Payload: p} +} + +func (p ConfigUpdatePayload) Encode(address common.Address) []byte { + var buffer bytes.Buffer + + // Write kind byte for ConfigUpdate (0x02) + mustWrite(&buffer, []byte{KindConfigUpdate}) + + // Write image hash + mustWrite(&buffer, p.ImageHash.ImageHash().Bytes()) + + return buffer.Bytes() +} + +func (p ConfigUpdatePayload) ABIEncode() walletstage1.PayloadDecoded { + return walletstage1.PayloadDecoded{ + Kind: KindConfigUpdate, + NoChainId: p.chainID == nil || p.chainID.Sign() == 0, + ImageHash: p.ImageHash.ImageHash().Hash, + ParentWallets: p.parentWallets, + } +} + +func DecodeConfigUpdate(address common.Address, chainID *big.Int, data []byte) (ConfigUpdatePayload, error) { + if len(data) < 33 { + return ConfigUpdatePayload{}, fmt.Errorf("config update payload too short") + } + data = data[1:] + var hash common.Hash + copy(hash[:], data[:32]) + return NewConfigUpdatePayload(address, chainID, hash), nil +} + +func NewDigestPayload(address common.Address, chainID *big.Int, digest_ common.Hash, parentWallets ...[]common.Address) DigestPayload { + if chainID == nil { + chainID = big.NewInt(0) + } + if parentWallets == nil { + parentWallets = append(parentWallets, nil) + } + if parentWallets[0] == nil { + parentWallets[0] = []common.Address{} + } + + return DigestPayload{ + basePayload: basePayload{ + address: address, + chainID: chainID, + parentWallets: parentWallets[0], + }, + + MessageDigest: digest_, + } +} + +type DigestPayload struct { + basePayload + + MessageDigest common.Hash +} + +func (p DigestPayload) Digest() core.PayloadDigest { + domain, _ := ethcoder.ABIPackArguments( + []string{ + "bytes32", + "bytes32", + "bytes32", + "uint256", + "address", + }, + []any{ + crypto.Keccak256Hash([]byte("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)")), + crypto.Keccak256Hash([]byte("Sequence Wallet")), + crypto.Keccak256Hash([]byte("3")), + p.chainID, + p.address, + }, + ) + + state := crypto.NewKeccakState() + for _, wallet := range p.parentWallets { + var word common.Hash + word.SetBytes(wallet.Bytes()) + mustWrite(state, word.Bytes()) + } + var wallets common.Hash + _, err := state.Read(wallets[:]) + if err != nil { + panic(err) + } + + message, _ := ethcoder.ABIPackArguments( + []string{ + "bytes32", + "bytes32", + "bytes32", + }, + []any{ + crypto.Keccak256Hash([]byte("Message(bytes message,address[] wallets)")), + p.MessageDigest, + wallets, + }, + ) + + return core.PayloadDigest{Hash: crypto.Keccak256Hash( + []byte("\x19\x01"), + crypto.Keccak256(domain), + crypto.Keccak256(message), + ), Address_: p.address, ChainID_: p.chainID, Payload: p} +} + +func (p DigestPayload) Encode(address common.Address) []byte { + var buffer bytes.Buffer + + // Write kind byte for Digest (0x03) + mustWrite(&buffer, []byte{KindDigest}) + + // Write digest + mustWrite(&buffer, p.MessageDigest.Bytes()) + + return buffer.Bytes() +} + +func (p DigestPayload) ABIEncode() walletstage1.PayloadDecoded { + return walletstage1.PayloadDecoded{ + Kind: KindDigest, + NoChainId: p.chainID == nil || p.chainID.Sign() == 0, + Digest: p.MessageDigest, + ParentWallets: p.parentWallets, + } +} + +func mustWrite(writer io.Writer, data []byte) { + _, err := writer.Write(data) + if err != nil { + panic(err) + } +} + +func isNil(value any) bool { + if value == nil { + return true + } + value_ := reflect.ValueOf(value) + switch value_.Kind() { + case reflect.Ptr, reflect.Slice, reflect.Map, reflect.Chan, reflect.Func, reflect.Interface: + return value_.IsNil() + } + return false +} + +func DecodeRawPayload(address common.Address, chainID *big.Int, data []byte) (core.Payload, error) { + decoded, err := DecodeABIPayload(hexutil.Encode(data)) + if err != nil { + return nil, err + } + + switch decoded.Kind { + case KindTransactions: + return NewCallsPayload(address, chainID, decoded.Calls, decoded.Space, decoded.Nonce, []common.Address(decoded.ParentWallets)), nil + case KindMessage: + return NewMessagePayload(address, chainID, decoded.Message, []common.Address(decoded.ParentWallets)), nil + case KindConfigUpdate: + return NewConfigUpdatePayload(address, chainID, decoded.ImageHash, []common.Address(decoded.ParentWallets)), nil + case KindDigest: + return NewDigestPayload(address, chainID, decoded.Digest, []common.Address(decoded.ParentWallets)), nil + default: + return nil, fmt.Errorf("unknown payload kind: %d", decoded.Kind) + } +} diff --git a/core/v3/payload_test.go b/core/v3/payload_test.go new file mode 100644 index 00000000..63e1012f --- /dev/null +++ b/core/v3/payload_test.go @@ -0,0 +1,29 @@ +package v3_test + +import ( + "testing" + + "github.com/0xsequence/ethkit/go-ethereum/common" + "github.com/0xsequence/ethkit/go-ethereum/crypto" + v3 "github.com/0xsequence/go-sequence/core/v3" + "github.com/stretchr/testify/assert" +) + +func TestDigestPayloadMatchesMessagePayload(t *testing.T) { + // dapp asks wallet to eth_sign 'hello world' + // dapp expects message signature on '\x19Ethereum Signed Message:\n11hello world' + // dapp calls isValidSignature(keccak256('\x19Ethereum Signed Message:\n11hello world'), signature) + // contract validates signature on keccak256('\x19Ethereum Signed Message:\n11hello world') + // so digest payload on keccak256(msg) must conform to message payload on msg + // where msg is '\x19Ethereum Signed Message:\n11hello world' + + address := common.HexToAddress("0x468E8e29F6cfb0F6b7ff10ec6A1AB516ec849c04") + chainID := common.Big1 + message := "hello world" + digest := crypto.Keccak256Hash([]byte(message)) + + messagePayload := v3.NewMessagePayload(address, chainID, []byte(message)) + digestPayload := v3.NewDigestPayload(address, chainID, digest) + + assert.Equal(t, digestPayload.Digest().Hash, messagePayload.Digest().Hash) +} diff --git a/core/v3/permission.go b/core/v3/permission.go new file mode 100644 index 00000000..1b3ff81e --- /dev/null +++ b/core/v3/permission.go @@ -0,0 +1,486 @@ +package v3 + +import ( + "encoding/hex" + "encoding/json" + "fmt" + "math/big" + "strings" + + "github.com/0xsequence/ethkit/go-ethereum/accounts/abi" + "github.com/0xsequence/ethkit/go-ethereum/common" +) + +// ParameterOperation represents the comparison operation for a parameter rule. +type ParameterOperation uint8 + +const ( + EQUAL ParameterOperation = iota + NOT_EQUAL + GREATER_THAN_OR_EQUAL + LESS_THAN_OR_EQUAL +) + +// ParameterRule defines one rule for comparing a parameter. +type ParameterRule struct { + Cumulative bool `json:"cumulative"` + Operation ParameterOperation `json:"operation"` + Value []byte `json:"value"` + Offset *big.Int `json:"offset"` + Mask []byte `json:"mask"` +} + +// Permission represents a permission with a target address and a set of parameter rules. +type Permission struct { + Target common.Address `json:"target"` + Rules []ParameterRule `json:"rules"` +} + +// SessionPermissions groups a signer with its associated permissions. +type SessionPermissions struct { + Signer common.Address `json:"signer"` + ValueLimit *big.Int `json:"valueLimit"` + Deadline *big.Int `json:"deadline"` + Permissions []Permission `json:"permissions"` +} + +const ( + MAX_PERMISSIONS_COUNT = (1 << 7) - 1 + MAX_RULES_COUNT = (1 << 8) - 1 +) + +// ----------------------------------------------------------------------------- +// Binary Encoding +// ----------------------------------------------------------------------------- + +// EncodeSessionPermissions encodes a SessionPermissions structure into bytes. +func EncodeSessionPermissions(sp *SessionPermissions) ([]byte, error) { + if len(sp.Permissions) > MAX_PERMISSIONS_COUNT { + return nil, fmt.Errorf("too many permissions") + } + var result []byte + // Append signer as 20-byte left‐padded value. + result = append(result, LeftPad(sp.Signer.Bytes(), 20)...) + // Append valueLimit (32 bytes) and deadline (32 bytes). + result = append(result, LeftPad(sp.ValueLimit.Bytes(), 32)...) + result = append(result, LeftPad(sp.Deadline.Bytes(), 32)...) + // Append a single byte with the number of permissions. + result = append(result, byte(len(sp.Permissions))) + // Encode each permission. + for _, perm := range sp.Permissions { + encoded, err := EncodePermission(&perm) + if err != nil { + return nil, err + } + result = append(result, encoded...) + } + return result, nil +} + +// EncodePermission encodes a Permission into bytes. +func EncodePermission(p *Permission) ([]byte, error) { + if len(p.Rules) > MAX_RULES_COUNT { + return nil, fmt.Errorf("too many rules") + } + var result []byte + // Append target (20 bytes). + result = append(result, LeftPad(p.Target.Bytes(), 20)...) + // Append a single byte with the number of rules. + result = append(result, byte(len(p.Rules))) + // Append each encoded parameter rule. + for _, rule := range p.Rules { + result = append(result, encodeParameterRule(&rule)...) + } + return result, nil +} + +// encodeParameterRule encodes a ParameterRule into bytes. +// The first byte packs the 3‑bit operation (shifted left by 1) and 1‑bit cumulative flag. +func encodeParameterRule(r *ParameterRule) []byte { + opCumulative := byte(r.Operation<<1) | boolToByte(r.Cumulative) + var result []byte + result = append(result, opCumulative) + result = append(result, LeftPad(r.Value, 32)...) + result = append(result, LeftPad(r.Offset.Bytes(), 32)...) + result = append(result, LeftPad(r.Mask, 32)...) + return result +} + +func boolToByte(b bool) byte { + if b { + return 1 + } + return 0 +} + +// DecodeSessionPermissions decodes a byte slice into a SessionPermissions structure. +func DecodeSessionPermissions(b []byte) (SessionPermissions, error) { + if len(b) < 85 { + return SessionPermissions{}, fmt.Errorf("insufficient bytes for session permissions") + } + var sp SessionPermissions + sp.Signer = common.BytesToAddress(b[0:20]) + sp.ValueLimit = new(big.Int).SetBytes(b[20:52]) + sp.Deadline = new(big.Int).SetBytes(b[52:84]) + permCount := int(b[84]) + ptr := 85 + var perms []Permission + for i := 0; i < permCount; i++ { + perm, consumed, err := decodePermission(b[ptr:]) + if err != nil { + return SessionPermissions{}, err + } + perms = append(perms, perm) + ptr += consumed + } + sp.Permissions = perms + return sp, nil +} + +// decodePermission decodes a Permission from bytes. It returns the Permission, the number of bytes consumed, and an error if any. +func decodePermission(b []byte) (Permission, int, error) { + if len(b) < 21 { + return Permission{}, 0, fmt.Errorf("insufficient bytes for permission") + } + var perm Permission + perm.Target = common.BytesToAddress(b[0:20]) + rulesCount := int(b[20]) + ptr := 21 + var rules []ParameterRule + for i := 0; i < rulesCount; i++ { + if len(b) < ptr+97 { + return Permission{}, 0, fmt.Errorf("insufficient bytes for parameter rule") + } + rule := decodeParameterRule(b[ptr : ptr+97]) + rules = append(rules, rule) + ptr += 97 + } + perm.Rules = rules + return perm, ptr, nil +} + +// decodeParameterRule decodes a 97‑byte slice into a ParameterRule. +func decodeParameterRule(b []byte) ParameterRule { + opCumulative := b[0] + cumulative := (opCumulative & 1) == 1 + operation := opCumulative >> 1 + value := b[1:33] + offset := new(big.Int).SetBytes(b[33:65]) + mask := b[65:97] + return ParameterRule{ + Cumulative: cumulative, + Operation: ParameterOperation(operation), + Value: value, + Offset: offset, + Mask: mask, + } +} + +// ----------------------------------------------------------------------------- +// ABI Encoding +// ----------------------------------------------------------------------------- + +// permissionStructAbi defines the ABI tuple for Permission. +var permissionStructAbi = []abi.ArgumentMarshaling{ + { + Name: "target", + Type: "address", + }, + { + Name: "rules", + Type: "tuple[]", + Components: []abi.ArgumentMarshaling{ + {Name: "cumulative", Type: "bool"}, + {Name: "operation", Type: "uint8"}, + {Name: "value", Type: "bytes32"}, + {Name: "offset", Type: "uint256"}, + {Name: "mask", Type: "bytes32"}, + }, + }, +} + +// AbiEncodePermission packs a Permission into an ABI-encoded hex string. +func AbiEncodePermission(p *Permission) (string, error) { + // Define internal types for ABI encoding. + type ruleABI struct { + Cumulative bool + Operation uint8 + Value [32]byte + Offset *big.Int + Mask [32]byte + } + type permissionABI struct { + Target common.Address + Rules []ruleABI + } + var rules []ruleABI + for _, r := range p.Rules { + var val [32]byte + copy(val[:], LeftPad(r.Value, 32)) + var mask [32]byte + copy(mask[:], LeftPad(r.Mask, 32)) + rules = append(rules, ruleABI{ + Cumulative: r.Cumulative, + Operation: uint8(r.Operation), + Value: val, + Offset: r.Offset, + Mask: mask, + }) + } + perm := permissionABI{ + Target: p.Target, + Rules: rules, + } + // Build ABI arguments. + args, err := argumentsFromABIArguments(permissionStructAbi) + if err != nil { + return "", fmt.Errorf("failed to build ABI arguments: %w", err) + } + packed, err := args.Pack(perm.Target, perm.Rules) + if err != nil { + return "", fmt.Errorf("failed to pack permission: %w", err) + } + return "0x" + hex.EncodeToString(packed), nil +} + +// argumentsFromABIArguments converts a slice of ArgumentMarshaling into abi.Arguments. +func argumentsFromABIArguments(argMarsh []abi.ArgumentMarshaling) (abi.Arguments, error) { + var args abi.Arguments + for _, am := range argMarsh { + t, err := abi.NewType(am.Type, "", am.Components) + if err != nil { + return nil, err + } + args = append(args, abi.Argument{ + Name: am.Name, + Type: t, + }) + } + return args, nil +} + +// ----------------------------------------------------------------------------- +// JSON Conversion +// ----------------------------------------------------------------------------- + +// SessionPermissionsToJSON converts SessionPermissions to its JSON string representation. +func (sp *SessionPermissions) MarshalJSON() ([]byte, error) { + enc := encodeSessionPermissionsForJson(sp) + return json.Marshal(enc) +} + +// encodeSessionPermissionsForJson returns a map representing SessionPermissions. +func encodeSessionPermissionsForJson(sp *SessionPermissions) map[string]interface{} { + perms := make([]interface{}, 0, len(sp.Permissions)) + for _, p := range sp.Permissions { + perms = append(perms, encodePermissionForJson(&p)) + } + return map[string]interface{}{ + "signer": sp.Signer.Hex(), + "valueLimit": sp.ValueLimit.String(), + "deadline": sp.Deadline.String(), + "permissions": perms, + } +} + +// PermissionToJSON converts a Permission to its JSON string representation. +func (p *Permission) MarshalJSON() ([]byte, error) { + enc := encodePermissionForJson(p) + return json.Marshal(enc) +} + +// encodePermissionForJson returns a map representing a Permission. +func encodePermissionForJson(p *Permission) map[string]interface{} { + rules := make([]interface{}, 0, len(p.Rules)) + for _, r := range p.Rules { + rules = append(rules, encodeParameterRuleForJson(r)) + } + return map[string]interface{}{ + "target": p.Target.Hex(), + "rules": rules, + } +} + +// ParameterRuleToJSON converts a ParameterRule to a JSON string. +func (r *ParameterRule) MarshalJSON() ([]byte, error) { + enc := encodeParameterRuleForJson(*r) + return json.Marshal(enc) +} + +// encodeParameterRuleForJson returns a map representing a ParameterRule. +func encodeParameterRuleForJson(r ParameterRule) map[string]interface{} { + return map[string]interface{}{ + "cumulative": r.Cumulative, + "operation": r.Operation, + "value": "0x" + hex.EncodeToString(r.Value), + "offset": r.Offset.String(), + "mask": "0x" + hex.EncodeToString(r.Mask), + } +} + +// SessionPermissionsFromJSON parses a JSON string into a SessionPermissions struct. +func (sp *SessionPermissions) UnmarshalJSON(data []byte) error { + var parsed interface{} + if err := json.Unmarshal(data, &parsed); err != nil { + return fmt.Errorf("failed to unmarshal session permissions JSON: %w", err) + } + var err error + *sp, err = sessionPermissionsFromParsed(parsed) + return err +} + +// sessionPermissionsFromParsed converts a parsed JSON object (map) into SessionPermissions. +func sessionPermissionsFromParsed(parsed interface{}) (SessionPermissions, error) { + m, ok := parsed.(map[string]interface{}) + if !ok { + return SessionPermissions{}, fmt.Errorf("invalid type for session permissions") + } + + permissionsRaw, ok := m["permissions"] + if !ok { + return SessionPermissions{}, fmt.Errorf("missing permissions field") + } + + permissionsSlice, ok := permissionsRaw.([]interface{}) + if !ok { + return SessionPermissions{}, fmt.Errorf("invalid type for session permissions") + } + + perms := make([]Permission, len(permissionsSlice)) + for i, v := range permissionsSlice { + perm, err := permissionFromParsed(v) + if err != nil { + return SessionPermissions{}, fmt.Errorf("invalid permission at index %d: %w", i, err) + } + perms[i] = perm + } + + return SessionPermissions{ + Signer: common.HexToAddress(m["signer"].(string)), + ValueLimit: valueToBigInt(m["valueLimit"]), + Deadline: valueToBigInt(m["deadline"]), + Permissions: perms, + }, nil +} + +// permissionFromParsed converts a parsed JSON object (map) into a Permission. +func permissionFromParsed(parsed interface{}) (Permission, error) { + m, ok := parsed.(map[string]interface{}) + if !ok { + return Permission{}, fmt.Errorf("invalid type for permission") + } + + rulesRaw, ok := m["rules"] + if !ok { + return Permission{}, fmt.Errorf("missing rules field") + } + + rulesSlice, ok := rulesRaw.([]interface{}) + if !ok { + return Permission{}, fmt.Errorf("invalid type for rules") + } + + rules := make([]ParameterRule, len(rulesSlice)) + for i, v := range rulesSlice { + rule, err := parameterRuleFromParsed(v) + if err != nil { + return Permission{}, fmt.Errorf("invalid rule at index %d: %w", i, err) + } + rules[i] = rule + } + + return Permission{ + Target: common.HexToAddress(m["target"].(string)), + Rules: rules, + }, nil +} + +// parameterRuleFromParsed converts a parsed JSON object into a ParameterRule. +func parameterRuleFromParsed(parsed interface{}) (ParameterRule, error) { + m, ok := parsed.(map[string]interface{}) + if !ok { + return ParameterRule{}, fmt.Errorf("invalid type for parameter rule") + } + + valueStr, ok := m["value"].(string) + if !ok { + return ParameterRule{}, fmt.Errorf("invalid type for value") + } + valueStr = strings.TrimPrefix(valueStr, "0x") + + maskStr, ok := m["mask"].(string) + if !ok { + return ParameterRule{}, fmt.Errorf("invalid type for mask") + } + maskStr = strings.TrimPrefix(maskStr, "0x") + + operation, ok := m["operation"].(float64) + if !ok { + return ParameterRule{}, fmt.Errorf("invalid type for operation") + } + + cumulative, ok := m["cumulative"].(bool) + if !ok { + return ParameterRule{}, fmt.Errorf("invalid type for cumulative") + } + + offset, ok := m["offset"].(string) + if !ok { + return ParameterRule{}, fmt.Errorf("invalid type for offset") + } + + return ParameterRule{ + Cumulative: cumulative, + Operation: ParameterOperation(uint8(operation)), + Value: mustDecodeHex(valueStr), + Offset: valueToBigInt(offset), + Mask: mustDecodeHex(maskStr), + }, nil +} + +// mustDecodeHex decodes a hex string and panics if it fails. +func mustDecodeHex(s string) []byte { + b, err := hex.DecodeString(s) + if err != nil { + panic(err) + } + return b +} + +// valueToBigInt converts a string (or number) to *big.Int. +func valueToBigInt(v interface{}) *big.Int { + switch val := v.(type) { + case string: + i, ok := new(big.Int).SetString(val, 10) + if !ok { + panic("cannot convert string to big.Int: " + val) + } + return i + case float64: + return big.NewInt(int64(val)) + case int64: + return big.NewInt(val) + case int: + return big.NewInt(int64(val)) + default: + s := fmt.Sprintf("%v", v) + i, ok := new(big.Int).SetString(s, 10) + if !ok { + panic("cannot convert to big.Int: " + s) + } + return i + } +} + +// ----------------------------------------------------------------------------- +// Helper Functions +// ----------------------------------------------------------------------------- + +// LeftPad returns a new byte slice padded on the left with zeros to the given length. +func LeftPad(b []byte, length int) []byte { + if len(b) >= length { + return b + } + pad := make([]byte, length-len(b)) + return append(pad, b...) +} diff --git a/core/v3/sapient_signer.go b/core/v3/sapient_signer.go new file mode 100644 index 00000000..08bbddd3 --- /dev/null +++ b/core/v3/sapient_signer.go @@ -0,0 +1,93 @@ +package v3 + +import ( + "context" + "fmt" + + "github.com/0xsequence/ethkit/ethrpc" + "github.com/0xsequence/ethkit/go-ethereum" + "github.com/0xsequence/ethkit/go-ethereum/common" + "github.com/0xsequence/go-sequence/contracts" + "github.com/0xsequence/go-sequence/contracts/gen/v3/walletstage1" + "github.com/0xsequence/go-sequence/core" +) + +var passkeySigners = map[common.Address]struct{}{ + common.HexToAddress("0x8f26281dB84C18aAeEa8a53F94c835393229d296"): {}, + common.HexToAddress("0x4491845806B757D67BE05BbD877Cab101B9bee5C"): {}, +} + +func RecoverSapientSignature(ctx context.Context, signer common.Address, payload core.Payload, signature []byte, provider *ethrpc.Provider) (core.ImageHash, error) { + if provider == nil { + return core.ImageHash{}, fmt.Errorf("unable to recover sapient signature without provider") + } + + var payload_ walletstage1.PayloadDecoded + switch payload := payload.(type) { + case CallsPayload: + payload_ = payload.ABIEncode() + case MessagePayload: + payload_ = payload.ABIEncode() + case ConfigUpdatePayload: + payload_ = payload.ABIEncode() + case DigestPayload: + payload_ = payload.ABIEncode() + default: + return core.ImageHash{}, fmt.Errorf("unable to abi encode %T payload", payload) + } + + data, err := contracts.V3.WalletStage1Module.Encode("recoverSapientSignature", payload_, signature) + if err != nil { + return core.ImageHash{}, fmt.Errorf("unable to encode recoverSapientSignature call: %w", err) + } + + response, err := provider.CallContract(ctx, ethereum.CallMsg{To: &signer, Data: data}, nil) + if err != nil { + return core.ImageHash{}, fmt.Errorf("unable to recover sapient signature: %w", err) + } + + var imageHash common.Hash + err = contracts.V3.WalletStage1Module.Decode(&imageHash, "recoverSapientSignature", response) + if err != nil { + return core.ImageHash{}, fmt.Errorf("unable to decode recoverSapientSignature response: %w", err) + } + + return core.ImageHash{Hash: imageHash}, nil +} + +func RecoverSapientSignatureCompact(ctx context.Context, signer common.Address, payload core.Payload, signature []byte, provider *ethrpc.Provider) (core.ImageHash, error) { + if _, ok := passkeySigners[signer]; ok { + signature_, err := core.DecodePasskeySignature(signature) + if err != nil { + return core.ImageHash{}, fmt.Errorf("unable to decode passkey signature: %w", err) + } + + if !signature_.IsValid(payload.Digest().Hash) { + return core.ImageHash{}, fmt.Errorf("invalid passkey signature") + } + + return signature_.ImageHash(), nil + } + + if provider == nil { + return core.ImageHash{}, fmt.Errorf("unable to recover sapient signature compact without provider") + } + + data, err := contracts.V3.WalletStage1Module.Encode("recoverSapientSignatureCompact", payload.Digest().Hash, signature) + if err != nil { + return core.ImageHash{}, fmt.Errorf("unable to encode recoverSapientSignatureCompact call: %w", err) + } + + response, err := provider.CallContract(ctx, ethereum.CallMsg{To: &signer, Data: data}, nil) + if err != nil { + return core.ImageHash{}, fmt.Errorf("unable to recover sapient signature compact: %w", err) + } + + var imageHash common.Hash + err = contracts.V3.WalletStage1Module.Decode(&imageHash, "recoverSapientSignatureCompact", response) + if err != nil { + return core.ImageHash{}, fmt.Errorf("unable to decode recoverSapientSignatureCompact response: %w", err) + } + + return core.ImageHash{Hash: imageHash}, nil +} diff --git a/core/v3/session.go b/core/v3/session.go new file mode 100644 index 00000000..7ca6d73e --- /dev/null +++ b/core/v3/session.go @@ -0,0 +1,1112 @@ +package v3 + +import ( + "bytes" + "encoding/hex" + "encoding/json" + "fmt" + "math/big" + "sort" + "strings" + + "github.com/0xsequence/ethkit/go-ethereum/common" + "github.com/0xsequence/go-sequence/core" + "golang.org/x/crypto/sha3" +) + +// ----------------------------------------------------------------------------- +// Constants +// ----------------------------------------------------------------------------- + +const ( + SESSIONS_FLAG_PERMISSIONS = 0 + SESSIONS_FLAG_NODE = 1 + SESSIONS_FLAG_BRANCH = 2 + SESSIONS_FLAG_BLACKLIST = 3 + SESSIONS_FLAG_IDENTITY_SIGNER = 4 +) + +// ----------------------------------------------------------------------------- +// Topology Leaf Types +// ----------------------------------------------------------------------------- + +// ImplicitBlacklistLeaf is a leaf that holds a blacklist. +type ImplicitBlacklistLeaf struct { + Type string `json:"type"` // must be "implicit-blacklist" + Blacklist []common.Address `json:"blacklist"` +} + +// IdentitySignerLeaf is a leaf that holds the identity signer. +type IdentitySignerLeaf struct { + Type string `json:"type"` // must be "identity-signer" + IdentitySigner common.Address `json:"identitySigner"` +} + +// SessionPermissionsLeaf embeds SessionPermissions and adds a type field. +type SessionPermissionsLeaf struct { + SessionPermissions + Type string `json:"type"` // must be "session-permissions" +} + +// ----------------------------------------------------------------------------- +// SessionsTopology Type +// ----------------------------------------------------------------------------- + +// SessionsTopology is a union type that can be either a branch (slice), a leaf, or a node (hash bytes). +type SessionsTopology struct { + Branch []SessionsTopology // non-nil if this is a branch + Leaf interface{} // one of *ImplicitBlacklistLeaf, *IdentitySignerLeaf, *SessionPermissionsLeaf; non-nil if leaf + Node []byte // non-nil if a node (hashed value) +} + +// UnmarshalJSON implements custom unmarshaling. +// It accepts three JSON forms: +// - A JSON array → branch +// - A JSON string starting with "0x" → node +// - A JSON object that must include a "type" field → leaf +func (st *SessionsTopology) UnmarshalJSON(data []byte) error { + data = bytes.TrimSpace(data) + // Check for array + if len(data) > 0 && data[0] == '[' { + var branch []SessionsTopology + if err := json.Unmarshal(data, &branch); err != nil { + return fmt.Errorf("failed to unmarshal branch: %w", err) + } + st.Branch = branch + return nil + } + // Check for string (node) + if len(data) > 0 && data[0] == '"' { + // Unquote the string + var s string + if err := json.Unmarshal(data, &s); err != nil { + return fmt.Errorf("failed to unmarshal node string: %w", err) + } + // If it starts with "0x", treat as hex bytes. + if strings.HasPrefix(s, "0x") { + b, err := hex.DecodeString(s[2:]) + if err != nil { + return fmt.Errorf("failed to decode hex node: %w", err) + } + st.Node = b + return nil + } + } + // Otherwise, assume object (leaf). We need to inspect the "type" field. + var m map[string]json.RawMessage + if err := json.Unmarshal(data, &m); err != nil { + return fmt.Errorf("failed to unmarshal leaf object: %w", err) + } + // The object must have a "type" key. + var typ string + if rawType, ok := m["type"]; ok { + if err := json.Unmarshal(rawType, &typ); err != nil { + return fmt.Errorf("failed to unmarshal type field: %w", err) + } + } else { + return fmt.Errorf("leaf object missing type field") + } + switch typ { + case "implicit-blacklist": + var leaf ImplicitBlacklistLeaf + if err := json.Unmarshal(data, &leaf); err != nil { + return fmt.Errorf("failed to unmarshal implicit-blacklist leaf: %w", err) + } + st.Leaf = &leaf + case "identity-signer": + var leaf IdentitySignerLeaf + if err := json.Unmarshal(data, &leaf); err != nil { + return fmt.Errorf("failed to unmarshal identity-signer leaf: %w", err) + } + st.Leaf = &leaf + case "session-permissions": + var sp SessionPermissions + if err := json.Unmarshal(data, &sp); err != nil { + return fmt.Errorf("failed to unmarshal session permissions: %w", err) + } + leaf := SessionPermissionsLeaf{ + SessionPermissions: sp, + Type: "session-permissions", + } + st.Leaf = &leaf + default: + return fmt.Errorf("unknown leaf type: %s", typ) + } + return nil +} + +// MarshalJSON implements custom marshaling. +func (st SessionsTopology) MarshalJSON() ([]byte, error) { + encoded, err := SessionsTopologyToJSON(st) + if err != nil { + return nil, err + } + // Convert the JSON string to a []bytes + return []byte(encoded), nil +} + +// ----------------------------------------------------------------------------- +// Type Guard Functions +// ----------------------------------------------------------------------------- + +func IsSessionsNode(st SessionsTopology) bool { + return st.Node != nil +} + +func IsSessionsBranch(st SessionsTopology) bool { + return st.Branch != nil +} + +func IsSessionsLeaf(st SessionsTopology) bool { + return st.Leaf != nil +} + +func IsImplicitBlacklistLeaf(st SessionsTopology) bool { + if !IsSessionsLeaf(st) { + return false + } + _, ok := st.Leaf.(*ImplicitBlacklistLeaf) + return ok +} + +func IsIdentitySignerLeaf(st SessionsTopology) bool { + if !IsSessionsLeaf(st) { + return false + } + _, ok := st.Leaf.(*IdentitySignerLeaf) + return ok +} + +func IsSessionPermissionsLeaf(st SessionsTopology) bool { + if !IsSessionsLeaf(st) { + return false + } + _, ok := st.Leaf.(*SessionPermissionsLeaf) + return ok +} + +// IsCompleteSessionsTopology checks that there is exactly one identity signer leaf and one implicit-blacklist leaf. +func IsCompleteSessionsTopology(topology SessionsTopology) bool { + ids, blacks := checkIsCompleteSessionsBranch(topology) + return ids == 1 && blacks == 1 +} + +func checkIsCompleteSessionsBranch(topology SessionsTopology) (identitySignerCount, blacklistCount int) { + if IsSessionsBranch(topology) { + for _, child := range topology.Branch { + i, b := checkIsCompleteSessionsBranch(child) + identitySignerCount += i + blacklistCount += b + } + } + if IsIdentitySignerLeaf(topology) { + identitySignerCount++ + } + if IsImplicitBlacklistLeaf(topology) { + blacklistCount++ + } + return +} + +// getIdentitySigner returns the identity signer address from the topology, or nil if not found. +func getIdentitySigner(topology SessionsTopology) *common.Address { + if IsIdentitySignerLeaf(topology) { + leaf := topology.Leaf.(*IdentitySignerLeaf) + return &leaf.IdentitySigner + } + if IsSessionsBranch(topology) { + var results []common.Address + for _, child := range topology.Branch { + if addr := getIdentitySigner(child); addr != nil { + results = append(results, *addr) + } + } + if len(results) > 1 { + panic("multiple identity signers found") + } + if len(results) == 1 { + return &results[0] + } + } + return nil +} + +// getImplicitBlacklist returns the blacklist array from the topology or nil. +func getImplicitBlacklist(topology SessionsTopology) []common.Address { + leaf := getImplicitBlacklistLeaf(topology) + if leaf == nil { + return nil + } + return leaf.Blacklist +} + +// getImplicitBlacklistLeaf returns the implicit-blacklist leaf from the topology or nil. +func getImplicitBlacklistLeaf(topology SessionsTopology) *ImplicitBlacklistLeaf { + if IsImplicitBlacklistLeaf(topology) { + return topology.Leaf.(*ImplicitBlacklistLeaf) + } + if IsSessionsBranch(topology) { + var results []*ImplicitBlacklistLeaf + for _, child := range topology.Branch { + if leaf := getImplicitBlacklistLeaf(child); leaf != nil { + results = append(results, leaf) + } + } + if len(results) > 1 { + panic("multiple implicit blacklist leaves found") + } + if len(results) == 1 { + return results[0] + } + } + return nil +} + +// getSessionPermissions searches for an explicit session permission leaf with the given signer. +func GetSessionPermissions(topology SessionsTopology, addr common.Address) *SessionPermissions { + if IsSessionPermissionsLeaf(topology) { + leaf := topology.Leaf.(*SessionPermissionsLeaf) + if leaf.SessionPermissions.Signer == addr { + return &leaf.SessionPermissions + } + } + if IsSessionsBranch(topology) { + for _, child := range topology.Branch { + if sp := GetSessionPermissions(child, addr); sp != nil { + return sp + } + } + } + return nil +} + +// GetExplicitSigners returns all explicit session permission signers from the topology. +func GetExplicitSigners(topology SessionsTopology) []common.Address { + var current []common.Address + if IsSessionPermissionsLeaf(topology) { + leaf := topology.Leaf.(*SessionPermissionsLeaf) + current = append(current, leaf.SessionPermissions.Signer) + } + if IsSessionsBranch(topology) { + for _, child := range topology.Branch { + current = append(current, GetExplicitSigners(child)...) + } + } + return current +} + +// ----------------------------------------------------------------------------- +// Encoding / Decoding Functions for Contract Validation and JSON +// ----------------------------------------------------------------------------- + +func SessionsTopologyToGenericTree(topology SessionsTopology) (Tree, error) { + if IsSessionsBranch(topology) { + branch := make(TreeNode, len(topology.Branch)) + for i, child := range topology.Branch { + leaf, err := SessionsTopologyToGenericTree(child) + if err != nil { + return nil, err + } + branch[i] = leaf + } + return branch, nil + } + if IsSessionsNode(topology) { + return core.ImageHash{Hash: common.Hash(PadLeft(topology.Node, 32))}, nil + } + return encodeLeafToGenericLeaf(topology) +} + +// encodeLeafToGeneric encodes a session leaf to a GenericTree.Leaf. +func encodeLeafToGenericLeaf(leaf SessionsTopology) (TreeLeaf, error) { + if IsSessionPermissionsLeaf(leaf) { + // Call the permission package encoder. + encoded, err := EncodeSessionPermissions(&leaf.Leaf.(*SessionPermissionsLeaf).SessionPermissions) + if err != nil { + return TreeLeaf{}, err + } + return TreeLeaf(Concat([][]byte{FromNumber(SESSIONS_FLAG_PERMISSIONS), encoded})), nil + } + if IsImplicitBlacklistLeaf(leaf) { + ibl := leaf.Leaf.(*ImplicitBlacklistLeaf) + var parts [][]byte + parts = append(parts, FromNumber(SESSIONS_FLAG_BLACKLIST)) + for _, addr := range ibl.Blacklist { + parts = append(parts, PadLeft(addr.Bytes(), 20)) + } + return TreeLeaf(Concat(parts)), nil + } + if IsIdentitySignerLeaf(leaf) { + isLeaf := leaf.Leaf.(*IdentitySignerLeaf) + return TreeLeaf(Concat([][]byte{FromNumber(SESSIONS_FLAG_IDENTITY_SIGNER), PadLeft(isLeaf.IdentitySigner.Bytes(), 20)})), nil + } + return TreeLeaf{}, fmt.Errorf("invalid leaf") +} + +// EncodeSessionCallSignatures encodes the call signatures for contract validation. +func EncodeSessionCallSignatures(callSignatures []SessionCallSignature, topology SessionsTopology, explicitSigners, implicitSigners []common.Address) ([]byte, error) { + // Create a buffer to write to + var buf bytes.Buffer + + // Validate the topology + if !IsCompleteSessionsTopology(topology) { + return nil, fmt.Errorf("incomplete topology") + } + + // Optimize the topology + optimizedTopology, err := MinimiseSessionsTopology(topology, explicitSigners, implicitSigners) + if err != nil { + return nil, err + } + + // Encode topology + encodedTopology, err := EncodeSessionsTopology(optimizedTopology) + if err != nil { + return nil, err + } + if minBytesFor(uint64(len(encodedTopology))) > 3 { + return nil, fmt.Errorf("session topology is too large") + } + + // Write topology length and data + if err := writeUint24(&buf, uint32(len(encodedTopology))); err != nil { + return nil, err + } + if _, err := buf.Write(encodedTopology); err != nil { + return nil, err + } + + // Build attestation map and encoded attestations + attestationMap := make(map[string]int) + var encodedAttestations [][]byte + + // Map implicit signatures to attestation indices + for _, cs := range callSignatures { + if isImplicitSessionCallSignature(cs) { + sig := cs.(ImplicitSessionCallSignature) + attJSON, err := json.Marshal(sig.Attestation) + if err != nil { + return nil, fmt.Errorf("failed to marshal attestation: %w", err) + } + if _, ok := attestationMap[string(attJSON)]; !ok { + attestationMap[string(attJSON)] = len(encodedAttestations) + // Concatenate attestation encoding and packed identity signature + attEncoded := sig.Attestation.Encode() + encodedAttestations = append(encodedAttestations, ConcatBytes(attEncoded, packRSY(sig.IdentitySignature))) + } + } + } + + // Write attestation count and data + if minBytesFor(uint64(len(encodedAttestations))) > 1 { + return nil, fmt.Errorf("too many attestations") + } + if err := writeUint8(&buf, uint8(len(encodedAttestations))); err != nil { + return nil, err + } + for _, att := range encodedAttestations { + if _, err := buf.Write(att); err != nil { + return nil, err + } + } + + // Write call signatures + for _, cs := range callSignatures { + if isImplicitSessionCallSignature(cs) { + sig := cs.(ImplicitSessionCallSignature) + attJSON, err := json.Marshal(sig.Attestation) + if err != nil { + return nil, fmt.Errorf("failed to marshal attestation: %w", err) + } + attIndex, ok := attestationMap[string(attJSON)] + if !ok { + return nil, fmt.Errorf("failed to find attestation index") + } + // Set flag: highest bit 1 for implicit, lower 7 bits = attestation index + flag := byte(0x80) | byte(attIndex) + if err := writeUint8(&buf, flag); err != nil { + return nil, err + } + if _, err := buf.Write(packRSY(sig.SessionSignature)); err != nil { + return nil, err + } + } else if isExplicitSessionCallSignature(cs) { + sig := cs.(ExplicitSessionCallSignature) + if sig.PermissionIndex.Cmp(big.NewInt(MAX_PERMISSIONS_COUNT)) > 0 { + return nil, fmt.Errorf("permission index is too large") + } + if err := writeUint8(&buf, uint8(sig.PermissionIndex.Uint64())); err != nil { + return nil, err + } + if _, err := buf.Write(packRSY(sig.SessionSignature)); err != nil { + return nil, err + } + } else { + return nil, fmt.Errorf("invalid call signature") + } + } + + return buf.Bytes(), nil +} + +// EncodeSessionsTopology encodes the topology for contract validation. +func EncodeSessionsTopology(topology SessionsTopology) ([]byte, error) { + var buf bytes.Buffer + + // Branch: if this is a branch then encode each child and then add a branch header. + if IsSessionsBranch(topology) { + var encodedChildren [][]byte + for _, child := range topology.Branch { + enc, err := EncodeSessionsTopology(child) + if err != nil { + return nil, err + } + encodedChildren = append(encodedChildren, enc) + } + encoded := Concat(encodedChildren) + encodedSize := minBytesFor(uint64(len(encoded))) + if encodedSize > 15 { + return nil, fmt.Errorf("branch too large") + } + flagByte := byte((SESSIONS_FLAG_BRANCH << 4) | encodedSize) + if err := writeUint8(&buf, flagByte); err != nil { + return nil, err + } + if err := writeUintX(&buf, uint64(len(encoded)), encodedSize); err != nil { + return nil, err + } + if _, err := buf.Write(encoded); err != nil { + return nil, err + } + return buf.Bytes(), nil + } + + // Leaf: determine which leaf type. + if IsSessionPermissionsLeaf(topology) { + flagByte := byte(SESSIONS_FLAG_PERMISSIONS << 4) + if err := writeUint8(&buf, flagByte); err != nil { + return nil, err + } + encodedLeaf, err := EncodeSessionPermissions(&topology.Leaf.(*SessionPermissionsLeaf).SessionPermissions) + if err != nil { + return nil, err + } + if _, err := buf.Write(encodedLeaf); err != nil { + return nil, err + } + return buf.Bytes(), nil + } + + if IsSessionsNode(topology) { + flagByte := byte(SESSIONS_FLAG_NODE << 4) + if err := writeUint8(&buf, flagByte); err != nil { + return nil, err + } + if _, err := buf.Write(topology.Node); err != nil { + return nil, err + } + return buf.Bytes(), nil + } + + if IsImplicitBlacklistLeaf(topology) { + ibl := topology.Leaf.(*ImplicitBlacklistLeaf) + if len(ibl.Blacklist) >= 0x0f { + if len(ibl.Blacklist) > 0xffff { + return nil, fmt.Errorf("blacklist too large") + } + if err := writeUint8(&buf, byte((SESSIONS_FLAG_BLACKLIST<<4)|0x0f)); err != nil { + return nil, err + } + if err := writeUint16(&buf, uint16(len(ibl.Blacklist))); err != nil { + return nil, err + } + } else { + if err := writeUintX(&buf, uint64((SESSIONS_FLAG_BLACKLIST<<4)|uint8(len(ibl.Blacklist))), 1); err != nil { + return nil, err + } + } + for _, addr := range ibl.Blacklist { + if _, err := buf.Write(PadLeft(addr.Bytes(), 20)); err != nil { + return nil, err + } + } + return buf.Bytes(), nil + } + + if IsIdentitySignerLeaf(topology) { + flagByte := byte(SESSIONS_FLAG_IDENTITY_SIGNER << 4) + if err := writeUint8(&buf, flagByte); err != nil { + return nil, err + } + leaf := topology.Leaf.(*IdentitySignerLeaf) + if _, err := buf.Write(PadLeft(leaf.IdentitySigner.Bytes(), 20)); err != nil { + return nil, err + } + return buf.Bytes(), nil + } + + return nil, fmt.Errorf("invalid topology") +} + +// sessionsTopologyToJSON returns the JSON representation of the topology. +// For node types, it returns a hex string; for session-permissions leaves, it calls the permission package encoder for JSON; for other leaves it returns the object as is; +// for branches, it maps recursively. +func SessionsTopologyToJSON(topology SessionsTopology) (string, error) { + enc, err := encodeSessionsTopologyForJson(topology) + if err != nil { + return "", err + } + b, err := json.Marshal(enc) + if err != nil { + return "", err + } + return string(b), nil +} + +func encodeSessionsTopologyForJson(topology SessionsTopology) (any, error) { + if IsSessionsBranch(topology) { + var result []any + for _, child := range topology.Branch { + enc, err := encodeSessionsTopologyForJson(child) + if err != nil { + return nil, err + } + result = append(result, enc) + } + return result, nil + } + if IsSessionsNode(topology) { + return "0x" + hex.EncodeToString(topology.Node), nil + } + if IsSessionPermissionsLeaf(topology) { + // Use the permission package JSON encoder. + encoded := encodeSessionPermissionsForJson(&topology.Leaf.(*SessionPermissionsLeaf).SessionPermissions) + // Add the type field. + encoded["type"] = "session-permissions" + return encoded, nil + } + if IsImplicitBlacklistLeaf(topology) || IsIdentitySignerLeaf(topology) { + return topology.Leaf, nil + } + return nil, fmt.Errorf("invalid topology") +} + +// sessionsTopologyFromJSON parses the JSON string into a SessionsTopology. +func SessionsTopologyFromJSON(data string) (SessionsTopology, error) { + var parsed any + if err := json.Unmarshal([]byte(data), &parsed); err != nil { + return SessionsTopology{}, fmt.Errorf("failed to unmarshal JSON: %w", err) + } + return sessionsTopologyFromParsed(parsed) +} + +func sessionsTopologyFromParsed(parsed any) (SessionsTopology, error) { + // If parsed is an array, treat as branch. + switch v := parsed.(type) { + case []any: + var branch []SessionsTopology + for _, item := range v { + child, err := sessionsTopologyFromParsed(item) + if err != nil { + return SessionsTopology{}, err + } + branch = append(branch, child) + } + return SessionsTopology{Branch: branch}, nil + case string: + if strings.HasPrefix(v, "0x") { + b, err := hex.DecodeString(v[2:]) + if err != nil { + return SessionsTopology{}, fmt.Errorf("invalid hex in node: %w", err) + } + return SessionsTopology{Node: b}, nil + } + return SessionsTopology{}, fmt.Errorf("invalid string value for topology") + case map[string]any: + // Check if object has "type" field. + typVal, ok := v["type"] + if !ok { + return SessionsTopology{}, fmt.Errorf("object missing type field") + } + typ, ok := typVal.(string) + if !ok { + return SessionsTopology{}, fmt.Errorf("type field must be a string") + } + switch typ { + case "session-permissions": + // Unmarshal into SessionPermissions then wrap + b, err := json.Marshal(v) + if err != nil { + return SessionsTopology{}, err + } + var sp SessionPermissions + if err := json.Unmarshal(b, &sp); err != nil { + return SessionsTopology{}, fmt.Errorf("failed to unmarshal session permissions: %w", err) + } + leaf := SessionPermissionsLeaf{ + SessionPermissions: sp, + Type: "session-permissions", + } + return SessionsTopology{Leaf: &leaf}, nil + case "identity-signer": + b, err := json.Marshal(v) + if err != nil { + return SessionsTopology{}, err + } + var leaf IdentitySignerLeaf + if err := json.Unmarshal(b, &leaf); err != nil { + return SessionsTopology{}, fmt.Errorf("failed to unmarshal identity signer leaf: %w", err) + } + return SessionsTopology{Leaf: &leaf}, nil + case "implicit-blacklist": + b, err := json.Marshal(v) + if err != nil { + return SessionsTopology{}, err + } + var leaf ImplicitBlacklistLeaf + if err := json.Unmarshal(b, &leaf); err != nil { + return SessionsTopology{}, fmt.Errorf("failed to unmarshal implicit blacklist leaf: %w", err) + } + return SessionsTopology{Leaf: &leaf}, nil + default: + return SessionsTopology{}, fmt.Errorf("unknown leaf type: %s", typ) + } + default: + return SessionsTopology{}, fmt.Errorf("invalid topology type") + } +} + +// ----------------------------------------------------------------------------- +// Topology Operations +// ----------------------------------------------------------------------------- + +// removeExplicitSession removes any explicit session-permissions leaf that has a signer matching the given address. +// If the removal causes a branch to become empty, it returns nil; if exactly one child remains, it collapses it. +func RemoveExplicitSession(topology SessionsTopology, signerAddr string) (SessionsTopology, error) { + target := common.HexToAddress(signerAddr) + if IsSessionPermissionsLeaf(topology) { + leaf := topology.Leaf.(*SessionPermissionsLeaf) + if leaf.SessionPermissions.Signer == target { + return SessionsTopology{}, nil + } + return topology, nil + } + if IsSessionsBranch(topology) { + var newChildren []SessionsTopology + for _, child := range topology.Branch { + updated, err := RemoveExplicitSession(child, signerAddr) + if err != nil { + return SessionsTopology{}, err + } + // Skip nil children + if !IsEmptyTopology(updated) { + newChildren = append(newChildren, updated) + } + } + if len(newChildren) == 0 { + return SessionsTopology{}, nil + } + if len(newChildren) == 1 { + return newChildren[0], nil + } + return SessionsTopology{Branch: newChildren}, nil + } + // For nodes and other leaves, return unchanged. + return topology, nil +} + +func IsEmptyTopology(st SessionsTopology) bool { + return !IsSessionsBranch(st) && !IsSessionsLeaf(st) && !IsSessionsNode(st) +} + +// addExplicitSession adds a new session-permissions leaf. +// If a session for the given signer already exists, it returns an error. +// Otherwise it merges the new leaf into the topology and then balances it. +func AddExplicitSession(topology SessionsTopology, sp SessionPermissions) (SessionsTopology, error) { + if GetSessionPermissions(topology, sp.Signer) != nil { + return SessionsTopology{}, fmt.Errorf("session already exists") + } + newLeaf := SessionsTopology{ + Leaf: &SessionPermissionsLeaf{ + SessionPermissions: sp, + Type: "session-permissions", + }, + } + merged := MergeSessionsTopologies(topology, newLeaf) + return balanceSessionsTopology(merged), nil +} + +// MergeSessionsTopologies merges two topologies into a branch. +func MergeSessionsTopologies(a, b SessionsTopology) SessionsTopology { + return SessionsTopology{Branch: []SessionsTopology{a, b}} +} + +// flattenSessionsTopology returns a flat slice of all leaves and nodes in the topology. +func flattenSessionsTopology(topology SessionsTopology) []SessionsTopology { + if IsSessionsLeaf(topology) || IsSessionsNode(topology) { + return []SessionsTopology{topology} + } + if IsSessionsBranch(topology) { + var result []SessionsTopology + for _, child := range topology.Branch { + result = append(result, flattenSessionsTopology(child)...) + } + return result + } + return nil +} + +// buildBalancedSessionsTopology builds a balanced branch from a slice of topologies. +func buildBalancedSessionsTopology(items []SessionsTopology) SessionsTopology { + if len(items) == 1 { + return items[0] + } + if len(items) == 0 { + panic("cannot build topology from empty list") + } + mid := len(items) / 2 + left := buildBalancedSessionsTopology(items[:mid]) + right := buildBalancedSessionsTopology(items[mid:]) + return SessionsTopology{Branch: []SessionsTopology{left, right}} +} + +// balanceSessionsTopology flattens the topology and rebuilds it as a balanced branch, +// ensuring that the implicit blacklist and identity signer leaves remain present. +func balanceSessionsTopology(topology SessionsTopology) SessionsTopology { + flattened := flattenSessionsTopology(topology) + var ibl, idSig, others []SessionsTopology + for _, t := range flattened { + if IsImplicitBlacklistLeaf(t) { + ibl = append(ibl, t) + } else if IsIdentitySignerLeaf(t) { + idSig = append(idSig, t) + } else { + others = append(others, t) + } + } + if len(ibl) != 1 || len(idSig) != 1 { + return topology + } + all := append([]SessionsTopology{}, ibl[0], idSig[0]) + all = append(all, others...) + return buildBalancedSessionsTopology(all) +} + +// cleanSessionsTopology removes session-permissions leaves whose deadline has expired. +// It recursively cleans branches; if a branch becomes empty it returns an empty topology, +// and if a branch has a single child, it collapses it upward. +func cleanSessionsTopology(topology SessionsTopology, currentTime *big.Int) (SessionsTopology, error) { + if IsSessionsNode(topology) { + return topology, nil + } + if IsSessionPermissionsLeaf(topology) { + leaf := topology.Leaf.(*SessionPermissionsLeaf) + if leaf.Deadline.Cmp(currentTime) < 0 { + return SessionsTopology{}, nil + } + return topology, nil + } + if IsIdentitySignerLeaf(topology) || IsImplicitBlacklistLeaf(topology) { + return topology, nil + } + if IsSessionsBranch(topology) { + var newChildren []SessionsTopology + for _, child := range topology.Branch { + cleaned, err := cleanSessionsTopology(child, currentTime) + if err != nil { + return SessionsTopology{}, err + } + if !IsEmptyTopology(cleaned) { + newChildren = append(newChildren, cleaned) + } + } + if len(newChildren) == 0 { + return SessionsTopology{}, nil + } + if len(newChildren) == 1 { + return newChildren[0], nil + } + return SessionsTopology{Branch: newChildren}, nil + } + return SessionsTopology{}, fmt.Errorf("invalid topology in cleaning") +} + +// minimiseSessionsTopology rolls up unused signers into a hashed node. +// If a session-permissions leaf is for a signer in explicitSigners, it is not rolled up. +func MinimiseSessionsTopology(topology SessionsTopology, explicitSigners []common.Address, implicitSigners []common.Address) (SessionsTopology, error) { + if IsSessionsBranch(topology) { + var branches []SessionsTopology + for _, child := range topology.Branch { + encodedBranch, err := MinimiseSessionsTopology(child, explicitSigners, implicitSigners) + if err != nil { + // Do not re-encode the error when recursing + return SessionsTopology{}, err + } + branches = append(branches, encodedBranch) + } + // If all branches are nodes, roll them up + allNodes := true + for _, b := range branches { + if !IsSessionsNode(b) { + allNodes = false + break + } + } + if allNodes { + nodeBranch := make(TreeNode, len(branches)) + for i, b := range branches { + nodeBranch[i] = core.ImageHash{Hash: common.Hash(PadLeft(b.Node, 32))} + } + return SessionsTopology{Node: nodeBranch.ImageHash().Bytes()}, nil + } + return SessionsTopology{Branch: branches}, nil + } + if IsSessionPermissionsLeaf(topology) { + leaf := topology.Leaf.(*SessionPermissionsLeaf) + for _, addr := range explicitSigners { + if leaf.Signer == addr { + // Used, return unchanged + return topology, nil + } + } + // Unused. Optimise by hashing this node + encoded, err := encodeLeafToGenericLeaf(topology) + if err != nil { + return SessionsTopology{}, fmt.Errorf("failed to encode leaf: %w", err) + } + return SessionsTopology{Node: encoded.ImageHash().Bytes()}, nil + } + if IsImplicitBlacklistLeaf(topology) { + if len(implicitSigners) == 0 { + // Unused. Optimise by hashing this node + encoded, err := encodeLeafToGenericLeaf(topology) + if err != nil { + return SessionsTopology{}, fmt.Errorf("failed to encode leaf: %w", err) + } + return SessionsTopology{Node: encoded.ImageHash().Bytes()}, nil + } + return topology, nil + } + if IsIdentitySignerLeaf(topology) || IsSessionsNode(topology) { + // Return unchanged + return topology, nil + } + return SessionsTopology{}, fmt.Errorf("invalid topology in minimisation") +} + +// addToImplicitBlacklist adds an address to the blacklist in the implicit-blacklist leaf. +func AddToImplicitBlacklist(topology SessionsTopology, addr common.Address) (SessionsTopology, error) { + ibl := getImplicitBlacklistLeaf(topology) + if ibl == nil { + return SessionsTopology{}, fmt.Errorf("no blacklist found") + } + // Check if already present. + for _, a := range ibl.Blacklist { + if a == addr { + return topology, nil + } + } + ibl.Blacklist = append(ibl.Blacklist, addr) + // Sort to ensure deterministic order. + sort.Slice(ibl.Blacklist, func(i, j int) bool { + return strings.ToLower(ibl.Blacklist[i].Hex()) < strings.ToLower(ibl.Blacklist[j].Hex()) + }) + return topology, nil +} + +// removeFromImplicitBlacklist removes an address from the implicit blacklist. +func RemoveFromImplicitBlacklist(topology SessionsTopology, addr common.Address) (SessionsTopology, error) { + ibl := getImplicitBlacklistLeaf(topology) + if ibl == nil { + return SessionsTopology{}, fmt.Errorf("no blacklist found") + } + var newList []common.Address + for _, a := range ibl.Blacklist { + if a != addr { + newList = append(newList, a) + } + } + ibl.Blacklist = newList + return topology, nil +} + +// EmptySessionsTopology generates an empty topology given the identity signer. +func EmptySessionsTopology(identitySigner common.Address) SessionsTopology { + return SessionsTopology{ + Branch: []SessionsTopology{ + {Leaf: &IdentitySignerLeaf{Type: "identity-signer", IdentitySigner: identitySigner}}, + {Leaf: &ImplicitBlacklistLeaf{Type: "implicit-blacklist", Blacklist: []common.Address{}}}, + }, + } +} + +// ----------------------------------------------------------------------------- +// Signature encoding / decoding +// ----------------------------------------------------------------------------- + +// RSY represents a signature in r, s, yParity format. +type RSY struct { + R []byte + S []byte + YParity uint8 // 0 or 1 +} + +// packRSY converts an RSY into its 64-byte representation using ERC-2098 +func packRSY(sig RSY) []byte { + var buf bytes.Buffer + r := PadLeft(sig.R, 32) + buf.Write(r) + + s := PadLeft(sig.S, 32) + if sig.YParity == 1 { + s[0] |= 0x80 // Set high bit if yParity is 1 + } + buf.Write(s) + + return buf.Bytes() +} + +// --- Session Call Signature types and helper methods --- + +// ImplicitSessionCallSignature represents a call signature that carries an attestation, an identity signature and a session signature. +type ImplicitSessionCallSignature struct { + Attestation Attestation + IdentitySignature RSY + SessionSignature RSY +} + +func (ImplicitSessionCallSignature) isSessionCallSignature() {} + +// ExplicitSessionCallSignature represents a call signature that carries a permission index and a session signature. +type ExplicitSessionCallSignature struct { + PermissionIndex *big.Int // expected to be within byte-range + SessionSignature RSY +} + +func (ExplicitSessionCallSignature) isSessionCallSignature() {} + +// SessionCallSignature is a union interface for both kinds. +type SessionCallSignature interface { + isSessionCallSignature() +} + +// isImplicitSessionCallSignature checks if the interface holds an implicit signature. +func isImplicitSessionCallSignature(sig SessionCallSignature) bool { + _, ok := sig.(ImplicitSessionCallSignature) + return ok +} + +// isExplicitSessionCallSignature checks if the interface holds an explicit signature. +func isExplicitSessionCallSignature(sig SessionCallSignature) bool { + _, ok := sig.(ExplicitSessionCallSignature) + return ok +} + +// --- Hashing call with replay protection --- +// +// hashCallWithReplayProtection computes the hash of a call with chain id, space and nonce. +// It concatenates 32-byte representations of chainId, space and nonce with the call hash, +// then computes the Keccak256 hash, returning it as a hex string. +func hashCallWithReplayProtection(call PayloadCall, chainId, space, nonce *big.Int) (string, error) { + chainIdB := intToBytesBig(chainId, 32) + spaceB := intToBytesBig(space, 32) + nonceB := intToBytesBig(nonce, 32) + callHash := call.HashCall() // Assume call.HashCall() returns []byte in hex format? Adjust as needed. + data := ConcatBytes(chainIdB, spaceB, nonceB, callHash) + hash := keccak256(data) + return "0x" + hex.EncodeToString(hash), nil +} + +// --- Helper functions --- + +// ConcatBytes concatenates multiple byte slices. +func ConcatBytes(slices ...[]byte) []byte { + var total int + for _, s := range slices { + total += len(s) + } + buf := make([]byte, 0, total) + for _, s := range slices { + buf = append(buf, s...) + } + return buf +} + +// intToBytes converts an integer to a big-endian byte slice of exactly the given size. +func intToBytes(n int, size int) []byte { + b := make([]byte, size) + for i := size - 1; i >= 0; i-- { + b[i] = byte(n & 0xff) + n >>= 8 + } + return b +} + +// intToBytesBig converts a *big.Int to a byte slice of a given size. +// It left-pads the number with zeros. +func intToBytesBig(n *big.Int, size int) []byte { + b := n.Bytes() + if len(b) > size { + return b[len(b)-size:] + } + padded := make([]byte, size) + copy(padded[size-len(b):], b) + return padded +} + +// keccak256 computes the Keccak256 hash of the given data. +func keccak256(data []byte) []byte { + h := sha3.NewLegacyKeccak256() + h.Write(data) + return h.Sum(nil) +} + +// --- PayloadCall interface --- +// +// For hashing calls we assume a minimal interface. +type PayloadCall interface { + // HashCall returns a []byte representing the call data to be hashed. + HashCall() []byte +} + +// ----------------------------------------------------------------------------- +// Helper Functions +// ----------------------------------------------------------------------------- + +// Concat concatenates a slice of byte slices. +func Concat(slices [][]byte) []byte { + return bytes.Join(slices, nil) +} + +// FromNumber converts a uint64 to a 1-byte slice (assumes value fits in 1 byte). +func FromNumber(n uint64) []byte { + return []byte{byte(n)} +} + +// PadLeft pads a byte slice on the left to the given length. +func PadLeft(b []byte, length int) []byte { + if len(b) >= length { + return b + } + pad := make([]byte, length-len(b)) + return append(pad, b...) +} + +// PadLeftNumber converts a number to a big-endian byte slice of fixed size. +func PadLeftNumber(n uint64, size int) []byte { + b := make([]byte, size) + for i := size - 1; i >= 0; i-- { + b[i] = byte(n & 0xff) + n >>= 8 + } + return b +} + +// ConcatMap applies f to each element of ts and concatenates the results. +func ConcatMap(ts []SessionsTopology, f func(SessionsTopology) []byte) []byte { + var parts [][]byte + for _, t := range ts { + parts = append(parts, f(t)) + } + return Concat(parts) +} diff --git a/core/v3/session_test.go b/core/v3/session_test.go new file mode 100644 index 00000000..49853341 --- /dev/null +++ b/core/v3/session_test.go @@ -0,0 +1,151 @@ +package v3_test + +import ( + "encoding/json" + "fmt" + "math/big" + "testing" + + "github.com/0xsequence/ethkit/go-ethereum/common" + v3 "github.com/0xsequence/go-sequence/core/v3" +) + +func TestMarshalJSON(t *testing.T) { + globalSigner := common.HexToAddress("0x74214e263d5669885065f215Fa21BC940588f7C1") + topology := v3.EmptySessionsTopology(globalSigner) + json, err := v3.SessionsTopologyToJSON(topology) + if err != nil { + t.Errorf("Failed to marshal SessionsTopology: %v", err) + return + } + + expected := `[{"type":"identity-signer","identitySigner":"0x74214e263d5669885065f215fa21bc940588f7c1"},{"type":"implicit-blacklist","blacklist":[]}]` + if json != expected { + t.Errorf("Unexpected JSON output: %s", json) + } +} + +func TestSessionExplicitAdd(t *testing.T) { + signer := common.HexToAddress("0x1111111111111111111111111111111111111111") + target := common.HexToAddress("0x2222222222222222222222222222222222222222") + + valueLimit := big.NewInt(100) + deadline := big.NewInt(1678886400) + + rule := v3.ParameterRule{ + Cumulative: true, + Operation: v3.EQUAL, + Value: []byte{0x01}, + Offset: big.NewInt(0), + Mask: []byte{0xff}, + } + + permission := v3.Permission{ + Target: target, + Rules: []v3.ParameterRule{rule}, + } + + permissions := v3.SessionPermissions{ + Signer: signer, + ValueLimit: valueLimit, + Deadline: deadline, + Permissions: []v3.Permission{permission}, + } + + // Marshal to JSON + permissionsJSON, err := json.Marshal(permissions) + if err != nil { + t.Fatalf("Failed to marshal SessionPermissions: %v", err) + } + + // Unmarshal from JSON + var unmarshaledPermissions v3.SessionPermissions + err = json.Unmarshal(permissionsJSON, &unmarshaledPermissions) + if err != nil { + t.Fatalf("Failed to unmarshal SessionPermissions: %v", err) + } + + // Check if the original and unmarshaled permissions are the same + if permissions.Signer != unmarshaledPermissions.Signer { + t.Errorf("Signer mismatch: original=%v, unmarshaled=%v", permissions.Signer, unmarshaledPermissions.Signer) + } + + if permissions.ValueLimit.Cmp(unmarshaledPermissions.ValueLimit) != 0 { + t.Errorf("ValueLimit mismatch: original=%v, unmarshaled=%v", permissions.ValueLimit, unmarshaledPermissions.ValueLimit) + } + + if permissions.Deadline.Cmp(unmarshaledPermissions.Deadline) != 0 { + t.Errorf("Deadline mismatch: original=%v, unmarshaled=%v", permissions.Deadline, unmarshaledPermissions.Deadline) + } + + if len(permissions.Permissions) != len(unmarshaledPermissions.Permissions) { + t.Errorf("Permissions length mismatch: original=%d, unmarshaled=%d", len(permissions.Permissions), len(unmarshaledPermissions.Permissions)) + } + + if permissions.Permissions[0].Target != unmarshaledPermissions.Permissions[0].Target { + t.Errorf("Permission Target mismatch: original=%v, unmarshaled=%v", permissions.Permissions[0].Target, unmarshaledPermissions.Permissions[0].Target) + } + + // Check ParameterRule + if permissions.Permissions[0].Rules[0].Cumulative != unmarshaledPermissions.Permissions[0].Rules[0].Cumulative { + t.Errorf("ParameterRule Cumulative mismatch: original=%v, unmarshaled=%v", permissions.Permissions[0].Rules[0].Cumulative, unmarshaledPermissions.Permissions[0].Rules[0].Cumulative) + } + + if permissions.Permissions[0].Rules[0].Operation != unmarshaledPermissions.Permissions[0].Rules[0].Operation { + t.Errorf("ParameterRule Operation mismatch: original=%v, unmarshaled=%v", permissions.Permissions[0].Rules[0].Operation, unmarshaledPermissions.Permissions[0].Rules[0].Operation) + } + + if string(permissions.Permissions[0].Rules[0].Value) != string(unmarshaledPermissions.Permissions[0].Rules[0].Value) { + t.Errorf("ParameterRule Value mismatch: original=%v, unmarshaled=%v", permissions.Permissions[0].Rules[0].Value, unmarshaledPermissions.Permissions[0].Rules[0].Value) + } + + if permissions.Permissions[0].Rules[0].Offset.Cmp(unmarshaledPermissions.Permissions[0].Rules[0].Offset) != 0 { + t.Errorf("ParameterRule Offset mismatch: original=%v, unmarshaled=%v", permissions.Permissions[0].Rules[0].Offset, unmarshaledPermissions.Permissions[0].Rules[0].Offset) + } + + if string(permissions.Permissions[0].Rules[0].Mask) != string(unmarshaledPermissions.Permissions[0].Rules[0].Mask) { + t.Errorf("ParameterRule Mask mismatch: original=%v, unmarshaled=%v", permissions.Permissions[0].Rules[0].Mask, unmarshaledPermissions.Permissions[0].Rules[0].Mask) + } +} + +func TestSessionPermissionsFromJSON(t *testing.T) { + validJSON := `{ + "signer": "0x9ed233eCAE5E093CAff8Ff8E147DdAfc704EC619", + "valueLimit": 1000, + "deadline": 2000, + "permissions": [ + { + "target": "0x000000000000000000000000000000000000bEEF", + "rules": [ + { + "cumulative": false, + "operation": 0, + "value": "0x0000000000000000000000000000000000000000000000000000000000000000", + "offset": "0", + "mask": "0x0000000000000000000000000000000000000000000000000000000000000000" + } + ] + } + ] + }` + + var session v3.SessionPermissions + err := json.Unmarshal([]byte(validJSON), &session) + if err != nil { + t.Fatalf("Failed to unmarshal SessionPermissions: %v", err) + } + + fmt.Printf("SessionPermissions: %+v\n", session) + + invalidJSON := `{ + "signer": "0x9ed233eCAE5E093CAff8Ff8E147DdAfc704EC619", + "valueLimit": 1000, + "deadline": 2000, + "permissions": "invalid data" + }` + + err = json.Unmarshal([]byte(invalidJSON), &session) + if err == nil { + t.Fatalf("Expected error, but got nil") + } +} diff --git a/core/v3/v3.go b/core/v3/v3.go new file mode 100644 index 00000000..35ef38d5 --- /dev/null +++ b/core/v3/v3.go @@ -0,0 +1,2947 @@ +package v3 + +import ( + "bytes" + "context" + "encoding/binary" + "fmt" + "io" + "math" + "math/big" + "math/bits" + "strconv" + + "github.com/0xsequence/ethkit/ethrpc" + "github.com/0xsequence/ethkit/go-ethereum/common" + "github.com/0xsequence/ethkit/go-ethereum/common/hexutil" + "github.com/0xsequence/ethkit/go-ethereum/crypto" + "github.com/0xsequence/go-sequence/core" + "github.com/0xsequence/go-sequence/eip6492" +) + +const ( + addressLeafImageHashPrefix = "Sequence signer:\n" + nestedLeafImageHashPrefix = "Sequence nested config:\n" + sapientLeafImageHashPrefix = "Sequence sapient config:\n" + subdigestLeafImageHashPrefix = "Sequence static digest:\n" + anyAddressSubdigestLeafImageHashPrefix = "Sequence any address subdigest:\n" +) + +var Core core.Core[*WalletConfig, core.Signature[*WalletConfig]] = v3Core{} + +func init() { + core.RegisterCore(Core) +} + +type v3Core struct{} + +func (v3Core) DecodeSignature(data []byte) (core.Signature[*WalletConfig], error) { + if len(data) == 0 { + return nil, fmt.Errorf("missing signature flag") + } + + signatureFlag := data[0] + data = data[1:] + + signatureType := signatureFlag & 0x03 + if signatureType == 0x01 { + return decodeChainedSignature(data) + } + + noChainId := (signatureType & 0x02) == 0x02 + + var checkpointer common.Address + var checkpointerData []byte + if signatureFlag&0x40 == 0x40 { + if len(data) < 20 { + return nil, fmt.Errorf("insufficient data for checkpointer address") + } + checkpointer = common.BytesToAddress(data[:20]) + data = data[20:] + + if len(data) < 3 { + return nil, fmt.Errorf("insufficient data for checkpointer data size") + } + size := binary.BigEndian.Uint32([]byte{0, data[0], data[1], data[2]}) + data = data[3:] + + if len(data) < int(size) { + return nil, fmt.Errorf("insufficient data for checkpointer data") + } + checkpointerData = data[:size] + data = data[size:] + } + + checkpointSize := (signatureFlag & 0x1c) >> 2 + checkpoint, err := readUintX(checkpointSize, &data) + if err != nil { + return nil, fmt.Errorf("unable to read checkpoint: %w", err) + } + + thresholdSize := ((signatureFlag & 0x20) >> 5) + 1 + threshold, err := readUintX(thresholdSize, &data) + if err != nil { + return nil, fmt.Errorf("unable to read threshold: %w", err) + } + + tree, err := decodeSignatureTree(data) + if err != nil { + return nil, fmt.Errorf("unable to decode signature tree: %w", err) + } + + sig := &Signature{ + NoChainId: noChainId, + Threshold: uint16(threshold), + Checkpoint: checkpoint, + Tree: tree, + Checkpointer: checkpointer, + CheckpointerData: checkpointerData, + } + + if noChainId { + return &NoChainIDSignature{Signature: sig}, nil + } + return &RegularSignature{Signature: sig}, nil +} + +func (v3Core) DecodeWalletConfig(object any) (*WalletConfig, error) { + object_, ok := object.(map[string]any) + if !ok { + return nil, fmt.Errorf("wallet config must be an object") + } + + threshold, ok := object_["threshold"] + if !ok { + return nil, fmt.Errorf(`missing required "threshold" property`) + } + threshold_, err := toUint16(threshold) + if err != nil { + return nil, fmt.Errorf("unable to convert threshold: %w", err) + } + + checkpoint, ok := object_["checkpoint"] + if !ok { + return nil, fmt.Errorf(`missing required "checkpoint" property`) + } + checkpoint_, err := toUint64(checkpoint) + if err != nil { + return nil, fmt.Errorf("unable to convert checkpoint: %w", err) + } + + tree, ok := object_["tree"] + if !ok { + return nil, fmt.Errorf(`missing required "tree" property`) + } + tree_, err := DecodeWalletConfigTree(tree) + if err != nil { + return nil, fmt.Errorf("unable to decode wallet config tree: %w", err) + } + + var checkpointer_ common.Address + if checkpointerVal, ok := object_["checkpointer"]; ok && checkpointerVal != nil { + checkpointerStr, ok := checkpointerVal.(string) + if !ok { + return nil, fmt.Errorf("checkpointer must be a string") + } + if checkpointerStr != "" { + if !common.IsHexAddress(checkpointerStr) { + return nil, fmt.Errorf(`invalid checkpointer address: "%v"`, checkpointerStr) + } + checkpointer_ = common.HexToAddress(checkpointerStr) + } + } + + return &WalletConfig{ + Threshold_: threshold_, + Checkpoint_: checkpoint_, + Tree: tree_, + Checkpointer: checkpointer_, + }, nil +} + +type Signature struct { + NoChainId bool + Threshold uint16 + Checkpoint uint64 + Tree signatureTree + Checkpointer common.Address + CheckpointerData []byte +} + +type RegularSignature struct { + *Signature +} + +func (s *RegularSignature) Threshold() uint16 { + return s.Signature.Threshold +} + +func (s *RegularSignature) Checkpoint() uint64 { + return s.Signature.Checkpoint +} + +func (s *RegularSignature) Recover(ctx context.Context, payload core.Payload, provider *ethrpc.Provider, signerSignatures ...core.SignerSignatures) (*WalletConfig, *big.Int, error) { + if len(signerSignatures) == 0 { + signerSignatures = []core.SignerSignatures{nil} + } + + tree, weight, err := s.Tree.recover(ctx, payload, provider, signerSignatures[0]) + if err != nil { + return nil, nil, fmt.Errorf("unable to recover wallet config: %w", err) + } + + return &WalletConfig{ + Threshold_: s.Threshold(), + Checkpoint_: s.Signature.Checkpoint, + Tree: tree, + }, weight, nil +} + +func (s *RegularSignature) Join(payload core.Payload, other core.Signature[*WalletConfig]) (core.Signature[*WalletConfig], error) { + other_, ok := other.(*RegularSignature) + if !ok { + return nil, fmt.Errorf("expected regular signature, got %T", other) + } + + if s.Threshold() != other_.Threshold() { + return nil, fmt.Errorf("threshold mismatch: %v != %v", s.Threshold(), other_.Threshold()) + } + + if s.Checkpoint() != other_.Signature.Checkpoint { + return nil, fmt.Errorf("checkpoint mismatch: %v != %v", s.Checkpoint(), other_.Checkpoint()) + } + + tree, err := s.Tree.join(other_.Tree) + if err != nil { + return nil, fmt.Errorf("unable to join signature trees: %w", err) + } + + return &RegularSignature{&Signature{ + NoChainId: s.NoChainId, + Threshold: s.Threshold(), + Checkpoint: s.Checkpoint(), + Tree: tree, + Checkpointer: s.Checkpointer, + CheckpointerData: s.CheckpointerData, + }}, nil +} + +func (s *RegularSignature) Reduce(payload core.Payload) core.Signature[*WalletConfig] { + return &RegularSignature{&Signature{ + NoChainId: s.NoChainId, + Threshold: s.Threshold(), + Checkpoint: s.Checkpoint(), + Tree: s.Tree.reduce(), + Checkpointer: s.Checkpointer, + CheckpointerData: s.CheckpointerData, + }} +} + +func (s *RegularSignature) Data() ([]byte, error) { + return s.data(false, false) +} + +func (s *RegularSignature) data(ignoreCheckpointer, ignoreCheckpointerData bool) ([]byte, error) { + var buffer bytes.Buffer + err := s.write(&buffer, ignoreCheckpointer, ignoreCheckpointerData) + if err != nil { + return nil, err + } + return buffer.Bytes(), nil +} + +func (s *RegularSignature) Write(writer io.Writer) error { + return s.write(writer, false, false) +} + +func (s *RegularSignature) write(writer io.Writer, ignoreCheckpointer, ignoreCheckpointerData bool) error { + checkpointSize := minBytesForUint64(s.Checkpoint()) + thresholdSize := minBytesForUint16(s.Threshold()) + + if checkpointSize == 0 { + checkpointSize = 1 + } + if checkpointSize > 7 { + return fmt.Errorf("checkpoint size %d exceeds maximum of 7 bytes", checkpointSize) + } + + if thresholdSize == 0 { + thresholdSize = 1 + } + if thresholdSize > 2 { + return fmt.Errorf("threshold size %d exceeds maximum of 2 bytes", thresholdSize) + } + + flag := byte(0x00) + flag |= (checkpointSize << 2) + if thresholdSize == 2 { + flag |= 0x20 + } + if !ignoreCheckpointer && (s.Checkpointer != (common.Address{}) || len(s.CheckpointerData) > 0) { + flag |= 0x40 + } + + _, err := writer.Write([]byte{flag}) + if err != nil { + return fmt.Errorf("unable to write signature flag: %w", err) + } + + if !ignoreCheckpointer && (s.Checkpointer != (common.Address{}) || len(s.CheckpointerData) > 0) { + _, err = writer.Write(s.Checkpointer.Bytes()) + if err != nil { + return fmt.Errorf("unable to write checkpointer address: %w", err) + } + if !ignoreCheckpointerData { + if len(s.CheckpointerData) > 0xffffff { + return fmt.Errorf("checkpointer data length %v does not fit in a uint24", len(s.CheckpointerData)) + } + err = writeUint24(writer, uint32(len(s.CheckpointerData))) + if err != nil { + return fmt.Errorf("unable to write checkpointer data length: %w", err) + } + _, err = writer.Write(s.CheckpointerData) + if err != nil { + return fmt.Errorf("unable to write checkpointer data: %w", err) + } + } + } + + err = writeUintX(writer, s.Checkpoint(), checkpointSize) + if err != nil { + return fmt.Errorf("unable to write checkpoint: %w", err) + } + + err = writeUintX(writer, uint64(s.Threshold()), thresholdSize) + if err != nil { + return fmt.Errorf("unable to write threshold: %w", err) + } + + err = s.Tree.write(writer) + if err != nil { + return fmt.Errorf("unable to write signature tree: %w", err) + } + + return nil +} + +func (s *RegularSignature) String() string { + data, _ := s.Data() + return hexutil.Encode(data) +} + +type NoChainIDSignature struct { + *Signature +} + +func (s *NoChainIDSignature) Threshold() uint16 { + return s.Signature.Threshold +} + +func (s *NoChainIDSignature) Checkpoint() uint64 { + return s.Signature.Checkpoint +} + +func (s *NoChainIDSignature) Recover(ctx context.Context, payload core.Payload, provider *ethrpc.Provider, signerSignatures ...core.SignerSignatures) (*WalletConfig, *big.Int, error) { + if len(signerSignatures) == 0 { + signerSignatures = []core.SignerSignatures{nil} + } + + tree, weight, err := s.Tree.recover(ctx, payload, provider, signerSignatures[0]) + if err != nil { + return nil, nil, fmt.Errorf("unable to recover wallet config: %w", err) + } + + return &WalletConfig{ + Threshold_: s.Threshold(), + Checkpoint_: s.Signature.Checkpoint, + Tree: tree, + }, weight, nil +} + +func (s *NoChainIDSignature) Join(payload core.Payload, other core.Signature[*WalletConfig]) (core.Signature[*WalletConfig], error) { + other_, ok := other.(*NoChainIDSignature) + if !ok { + return nil, fmt.Errorf("expected no chain ID signature, got %T", other) + } + + if s.Threshold() != other_.Threshold() { + return nil, fmt.Errorf("threshold mismatch: %v != %v", s.Threshold(), other_.Threshold()) + } + + if s.Checkpoint() != other_.Signature.Checkpoint { + return nil, fmt.Errorf("checkpoint mismatch: %v != %v", s.Checkpoint(), other_.Checkpoint()) + } + + tree, err := s.Tree.join(other_.Tree) + if err != nil { + return nil, fmt.Errorf("unable to join signature trees: %w", err) + } + + return &NoChainIDSignature{&Signature{ + NoChainId: s.NoChainId, + Threshold: s.Threshold(), + Checkpoint: s.Checkpoint(), + Tree: tree, + Checkpointer: s.Checkpointer, + CheckpointerData: s.CheckpointerData, + }}, nil +} + +func (s *NoChainIDSignature) Reduce(payload core.Payload) core.Signature[*WalletConfig] { + return &NoChainIDSignature{&Signature{ + NoChainId: s.NoChainId, + Threshold: s.Threshold(), + Checkpoint: s.Checkpoint(), + Tree: s.Tree.reduce(), + Checkpointer: s.Checkpointer, + CheckpointerData: s.CheckpointerData, + }} +} + +func (s *NoChainIDSignature) Data() ([]byte, error) { + return s.data(false, false) +} + +func (s *NoChainIDSignature) data(ignoreCheckpointer, ignoreCheckpointerData bool) ([]byte, error) { + var buffer bytes.Buffer + err := s.write(&buffer, ignoreCheckpointer, ignoreCheckpointerData) + if err != nil { + return nil, err + } + return buffer.Bytes(), nil +} + +func (s *NoChainIDSignature) Write(writer io.Writer) error { + return s.write(writer, false, false) +} + +func (s *NoChainIDSignature) write(writer io.Writer, ignoreCheckpointer, ignoreCheckpointerData bool) error { + checkpointSize := minBytesForUint64(s.Checkpoint()) + thresholdSize := minBytesForUint16(s.Threshold()) + + if checkpointSize == 0 { + checkpointSize = 1 + } + if checkpointSize > 7 { + return fmt.Errorf("checkpoint size %d exceeds maximum of 7 bytes", checkpointSize) + } + + if thresholdSize == 0 { + thresholdSize = 1 + } + if thresholdSize > 2 { + return fmt.Errorf("threshold size %d exceeds maximum of 2 bytes", thresholdSize) + } + + flag := byte(0x02) + flag |= (checkpointSize << 2) + if thresholdSize == 2 { + flag |= 0x20 + } + if !ignoreCheckpointer && (s.Checkpointer != (common.Address{}) || len(s.CheckpointerData) > 0) { + flag |= 0x40 + } + + _, err := writer.Write([]byte{flag}) + if err != nil { + return fmt.Errorf("unable to write signature flag: %w", err) + } + + if !ignoreCheckpointer && (s.Checkpointer != (common.Address{}) || len(s.CheckpointerData) > 0) { + _, err = writer.Write(s.Checkpointer.Bytes()) + if err != nil { + return fmt.Errorf("unable to write checkpointer address: %w", err) + } + if !ignoreCheckpointerData { + if len(s.CheckpointerData) > 0xffffff { + return fmt.Errorf("checkpointer data length %v does not fit in a uint24", len(s.CheckpointerData)) + } + err = writeUint24(writer, uint32(len(s.CheckpointerData))) + if err != nil { + return fmt.Errorf("unable to write checkpointer data length: %w", err) + } + _, err = writer.Write(s.CheckpointerData) + if err != nil { + return fmt.Errorf("unable to write checkpointer data: %w", err) + } + } + } + + err = writeUintX(writer, s.Checkpoint(), checkpointSize) + if err != nil { + return fmt.Errorf("unable to write checkpoint: %w", err) + } + + err = writeUintX(writer, uint64(s.Threshold()), thresholdSize) + if err != nil { + return fmt.Errorf("unable to write threshold: %w", err) + } + + err = s.Tree.write(writer) + if err != nil { + return fmt.Errorf("unable to write signature tree: %w", err) + } + + return nil +} + +func (s *NoChainIDSignature) String() string { + data, _ := s.Data() + return hexutil.Encode(data) +} + +type ChainedSignature []core.Signature[*WalletConfig] + +func decodeChainedSignature(data []byte) (ChainedSignature, error) { + if len(data) < 1 { + return nil, fmt.Errorf("insufficient data for chained signature") + } + if data[0]&0x03 != 0x01 { + return nil, fmt.Errorf("expected chained signature type 0x01, got %v", data[0]) + } + data = data[1:] + + var signature ChainedSignature + for len(data) != 0 { + length, err := readUint24(&data) + if err != nil { + return nil, fmt.Errorf("unable to read subsignature %v length: %w", len(signature), err) + } + + if len(data) < int(length) { + return nil, fmt.Errorf("insufficient data for subsignature %v", len(signature)) + } + + subsignature, err := Core.DecodeSignature(data[:length]) + if err != nil { + return nil, fmt.Errorf("unable to decode subsignature %v: %w", len(signature), err) + } + data = data[length:] + + if len(signature) != 0 { + currentCheckpoint := subsignature.Checkpoint() + previousCheckpoint := signature[len(signature)-1].Checkpoint() + if currentCheckpoint >= previousCheckpoint { + return nil, fmt.Errorf( + "subsignature %v's checkpoint %v is not less than subsignature %v's checkpoint %v", + len(signature), currentCheckpoint, len(signature)-1, previousCheckpoint, + ) + } + } + + signature = append(signature, subsignature) + } + + return signature, nil +} + +func (s ChainedSignature) Threshold() uint16 { + return s[len(s)-1].Threshold() +} + +func (s ChainedSignature) Checkpoint() uint64 { + return s[len(s)-1].Checkpoint() +} + +func (s ChainedSignature) Checkpointer() common.Address { + if len(s) == 0 { + return common.Address{} + } + switch signature := s[len(s)-1].(type) { + case *RegularSignature: + return signature.Checkpointer + case *NoChainIDSignature: + return signature.Checkpointer + case ChainedSignature: + return signature.Checkpointer() + case *ChainedSignature: + return signature.Checkpointer() + default: + panic(fmt.Errorf("unknown signature type %T", signature)) + } +} + +func (s ChainedSignature) CheckpointerData() []byte { + if len(s) == 0 { + return nil + } + switch signature := s[len(s)-1].(type) { + case *RegularSignature: + return signature.CheckpointerData + case *NoChainIDSignature: + return signature.CheckpointerData + case ChainedSignature: + return signature.CheckpointerData() + case *ChainedSignature: + return signature.CheckpointerData() + default: + panic(fmt.Errorf("unknown signature type %T", signature)) + } +} + +func (s ChainedSignature) Recover(ctx context.Context, payload core.Payload, provider *ethrpc.Provider, signerSignatures ...core.SignerSignatures) (*WalletConfig, *big.Int, error) { + if len(signerSignatures) == 0 { + signerSignatures = []core.SignerSignatures{nil} + } + + var config *WalletConfig + var weight *big.Int + + for i, subsignature := range s { + var err error + config, weight, err = subsignature.Recover(ctx, payload, provider, signerSignatures...) + if err != nil { + return nil, nil, fmt.Errorf("unable to recover subsignature %v: %w", i, err) + } + + if weight.Cmp(new(big.Int).SetUint64(uint64(config.Threshold()))) < 0 { + return nil, nil, fmt.Errorf("recovered weight %v for subsignature %v does not meet required threshold %v", weight, i, config.Threshold()) + } + + payload = NewConfigUpdatePayload(payload.Address(), nil, config.ImageHash().Hash) + } + + return config, weight, nil +} + +func (s ChainedSignature) Join(payload core.Payload, other core.Signature[*WalletConfig]) (core.Signature[*WalletConfig], error) { + return nil, fmt.Errorf("chained signatures do not support joining") +} + +func (s ChainedSignature) Reduce(payload core.Payload) core.Signature[*WalletConfig] { + subsignatures := make(ChainedSignature, 0, len(s)) + for _, subsignature := range s { + subsignatures = append(subsignatures, subsignature.Reduce(payload)) + } + return subsignatures +} + +func (s ChainedSignature) Data() ([]byte, error) { + return s.data(false, false) +} + +func (s ChainedSignature) data(ignoreCheckpointer, ignoreCheckpointerData bool) ([]byte, error) { + var buffer bytes.Buffer + err := s.write(&buffer, ignoreCheckpointer, ignoreCheckpointerData) + if err != nil { + return nil, err + } + return buffer.Bytes(), nil +} + +func (s ChainedSignature) Write(writer io.Writer) error { + return s.write(writer, false, false) +} + +func (s ChainedSignature) write(writer io.Writer, ignoreCheckpointer, ignoreCheckpointerData bool) error { + flag := byte(0x01) + checkpointer := s.Checkpointer() + checkpointerData := s.CheckpointerData() + + if !ignoreCheckpointer && (checkpointer != (common.Address{}) || len(checkpointerData) != 0) { + flag |= 0x40 + } + + _, err := writer.Write([]byte{flag}) + if err != nil { + return fmt.Errorf("unable to write chained signature type: %w", err) + } + + if !ignoreCheckpointer && (checkpointer != (common.Address{}) || len(checkpointerData) != 0) { + _, err := writer.Write(checkpointer.Bytes()) + if err != nil { + return fmt.Errorf("unable to write checkpointer address: %w", err) + } + if !ignoreCheckpointerData { + if len(checkpointerData) > 0xffffff { + return fmt.Errorf("checkpointer data size %v does not fit in a uint24", len(checkpointerData)) + } + err := writeUint24(writer, uint32(len(checkpointerData))) + if err != nil { + return fmt.Errorf("unable to write checkpointer data size: %w", err) + } + _, err = writer.Write(checkpointerData) + if err != nil { + return fmt.Errorf("unable to write checkpointer data: %w", err) + } + } + } + + for i, subsignature := range s { + var data []byte + switch subsignature := subsignature.(type) { + case *RegularSignature: + data, err = subsignature.data(i == len(s)-1, true) + case *NoChainIDSignature: + data, err = subsignature.data(i == len(s)-1, true) + case ChainedSignature: + data, err = subsignature.data(i == len(s)-1, true) + case *ChainedSignature: + data, err = subsignature.data(i == len(s)-1, true) + } + if err != nil { + return fmt.Errorf("unable to encode subsignature %v: %w", i, err) + } + err = writeUint24(writer, uint32(len(data))) + if err != nil { + return fmt.Errorf("unable to write subsignature %v length: %w", i, err) + } + _, err = writer.Write(data) + if err != nil { + return fmt.Errorf("unable to write subsignature %v: %w", i, err) + } + } + + return nil +} + +func (s ChainedSignature) String() string { + data, _ := s.Data() + return hexutil.Encode(data) +} + +type signatureTree interface { + recover(ctx context.Context, payload core.Payload, provider *ethrpc.Provider, signerSignatures core.SignerSignatures) (WalletConfigTree, *big.Int, error) + reduce() signatureTree + join(other signatureTree) (signatureTree, error) + reduceImageHash() (core.ImageHash, error) + write(writer io.Writer) error +} + +func decodeSignatureTree(data []byte) (signatureTree, error) { + var tree signatureTree + for len(data) != 0 { + leaf, err := decodeSignatureTreeLeaf(&data) + if err != nil { + return nil, err + } + if tree == nil { + tree = leaf + } else { + tree = &signatureTreeNode{left: tree, right: leaf} + } + } + return tree, nil +} + +func decodeSignatureTreeLeaf(data *[]byte) (signatureTree, error) { + if len(*data) == 0 { + return nil, fmt.Errorf("insufficient data for signature tree leaf") + } + + firstByte := (*data)[0] + *data = (*data)[1:] + flag := (firstByte & 0xf0) >> 4 + + switch flag { + case FLAG_SIGNATURE_HASH: + return decodeSignatureHashLeaf(firstByte, data) + case FLAG_ADDRESS: + return decodeAddressLeaf(firstByte, data) + case FLAG_SIGNATURE_ERC1271: + return decodeSignatureERC1271Leaf(firstByte, data) + case FLAG_NODE: + return decodeNodeLeaf(data) + case FLAG_BRANCH: + return decodeBranchLeaf(firstByte, data) + case FLAG_SUBDIGEST: + return decodeSubdigestLeaf(data) + case FLAG_NESTED: + return decodeNestedLeaf(firstByte, data) + case FLAG_SIGNATURE_ETH_SIGN: + return decodeSignatureEthSignLeaf(firstByte, data) + case FLAG_SIGNATURE_ANY_ADDRESS_SUBDIGEST: + return decodeAnyAddressSubdigestLeaf(data) + case FLAG_SIGNATURE_SAPIENT: + return decodeSignatureSapientLeaf(firstByte, data) + case FLAG_SIGNATURE_SAPIENT_COMPACT: + return decodeSignatureSapientCompactLeaf(firstByte, data) + default: + return nil, fmt.Errorf("unknown signature leaf flag %v", flag) + } +} + +const ( + FLAG_SIGNATURE_HASH = 0x00 + FLAG_ADDRESS = 0x01 + FLAG_SIGNATURE_ERC1271 = 0x02 + FLAG_NODE = 0x03 + FLAG_BRANCH = 0x04 + FLAG_SUBDIGEST = 0x05 + FLAG_NESTED = 0x06 + FLAG_SIGNATURE_ETH_SIGN = 0x07 + FLAG_SIGNATURE_ANY_ADDRESS_SUBDIGEST = 0x08 + FLAG_SIGNATURE_SAPIENT = 0x09 + FLAG_SIGNATURE_SAPIENT_COMPACT = 0x0A +) + +type signatureTreeNode struct { + left, right signatureTree +} + +func (n *signatureTreeNode) recover(ctx context.Context, payload core.Payload, provider *ethrpc.Provider, signerSignatures core.SignerSignatures) (WalletConfigTree, *big.Int, error) { + left, leftWeight, err := n.left.recover(ctx, payload, provider, signerSignatures) + if err != nil { + return nil, nil, fmt.Errorf("unable to recover left subtree: %w", err) + } + + right, rightWeight, err := n.right.recover(ctx, payload, provider, signerSignatures) + if err != nil { + return nil, nil, fmt.Errorf("unable to recover right subtree: %w", err) + } + + return &WalletConfigTreeNode{left, right}, new(big.Int).Add(leftWeight, rightWeight), nil +} + +func (n *signatureTreeNode) reduce() signatureTree { + if imageHash, err := n.reduceImageHash(); err == nil { + return signatureTreeNodeLeaf{imageHash} + } + return &signatureTreeNode{ + left: n.left.reduce(), + right: n.right.reduce(), + } +} + +func (n *signatureTreeNode) join(other signatureTree) (signatureTree, error) { + switch other := other.(type) { + case *signatureTreeNode: + var err error + var left, right signatureTree + if other.left != nil { + left, err = n.left.join(other.left) + if err != nil { + return nil, fmt.Errorf("unable to join left subtree: %w", err) + } + } + if other.right != nil { + right, err = n.right.join(other.right) + if err != nil { + return nil, fmt.Errorf("unable to join right subtree: %w", err) + } + } + return &signatureTreeNode{left, right}, nil + case signatureTreeNodeLeaf: + return n, nil + default: + return nil, fmt.Errorf("unable to join signature tree node with %T", other) + } +} + +func (n *signatureTreeNode) reduceImageHash() (core.ImageHash, error) { + if leftImageHash, err := n.left.reduceImageHash(); err == nil { + if rightImageHash, err := n.right.reduceImageHash(); err == nil { + node := WalletConfigTreeNode{ + Left: WalletConfigTreeNodeLeaf{leftImageHash}, + Right: WalletConfigTreeNodeLeaf{rightImageHash}, + } + return node.ImageHash(), nil + } + } + return core.ImageHash{}, fmt.Errorf("node might have signing power") +} + +func (n *signatureTreeNode) write(writer io.Writer) error { + err := n.left.write(writer) + if err != nil { + return fmt.Errorf("unable to write left subtree: %w", err) + } + + _, isNode := n.right.(*signatureTreeNode) + if isNode { + var buffer bytes.Buffer + err = n.right.write(&buffer) + if err != nil { + return fmt.Errorf("unable to encode right subtree: %w", err) + } + size := uint64(buffer.Len()) + sizeBytes := minBytesFor(size) + if sizeBytes > 15 { + return fmt.Errorf("right subtree too large: %d bytes", size) + } + flag := byte(FLAG_BRANCH<<4) | byte(sizeBytes) + _, err = writer.Write([]byte{flag}) + if err != nil { + return fmt.Errorf("unable to write branch flag: %w", err) + } + err = writeUintX(writer, size, sizeBytes) + if err != nil { + return fmt.Errorf("unable to write right subtree length: %w", err) + } + _, err = writer.Write(buffer.Bytes()) + if err != nil { + return fmt.Errorf("unable to write right subtree: %w", err) + } + } else { + err = n.right.write(writer) + if err != nil { + return fmt.Errorf("unable to write right subtree: %w", err) + } + } + return nil +} + +type signatureTreeSignatureHashLeaf struct { + Weight uint8 + R [32]byte + S [32]byte + YParity bool +} + +func decodeSignatureHashLeaf(firstByte byte, data *[]byte) (*signatureTreeSignatureHashLeaf, error) { + weight := firstByte & 0x0f + if weight == 0 { + if len(*data) < 1 { + return nil, fmt.Errorf("insufficient data for dynamic weight") + } + weight = (*data)[0] + *data = (*data)[1:] + } + + if len(*data) < 64 { + return nil, fmt.Errorf("insufficient data for signature") + } + + r := [32]byte(*data) + s := [32]byte((*data)[32:]) + yParity := s[0]&0x80 != 0 + s[0] &^= 0x80 + *data = (*data)[64:] + + return &signatureTreeSignatureHashLeaf{ + Weight: weight, + R: r, + S: s, + YParity: yParity, + }, nil +} + +func (l *signatureTreeSignatureHashLeaf) recover(ctx context.Context, payload core.Payload, provider *ethrpc.Provider, signerSignatures core.SignerSignatures) (WalletConfigTree, *big.Int, error) { + var v byte + if l.YParity { + v = 28 + } else { + v = 27 + } + signature := bytes.Join([][]byte{l.R[:], l.S[:], {v}}, nil) + + address, err := core.Ecrecover(payload.Digest().Hash, signature) + if err != nil { + return nil, nil, fmt.Errorf("unable to recover signature: %w", err) + } + + signerSignatures.Insert(address, core.SignerSignature{ + Type: core.SignerSignatureTypeEIP712, + Signature: signature, + }) + + return &WalletConfigTreeAddressLeaf{ + Weight: l.Weight, + Address: address, + }, new(big.Int).SetUint64(uint64(l.Weight)), nil +} + +func (l *signatureTreeSignatureHashLeaf) reduce() signatureTree { + return l +} + +func (l *signatureTreeSignatureHashLeaf) join(other signatureTree) (signatureTree, error) { + return l, nil +} + +func (l *signatureTreeSignatureHashLeaf) reduceImageHash() (core.ImageHash, error) { + return core.ImageHash{}, fmt.Errorf("signature hash leaf has signing power") +} + +func (l *signatureTreeSignatureHashLeaf) write(writer io.Writer) error { + var flag byte + var weightBytes []byte + flag = FLAG_SIGNATURE_HASH << 4 + + if l.Weight > 0 && l.Weight <= 15 { + flag |= l.Weight + } else { + weightBytes = []byte{l.Weight} + } + + _, err := writer.Write([]byte{flag}) + if err != nil { + return fmt.Errorf("unable to write signature hash leaf type: %w", err) + } + + if len(weightBytes) > 0 { + _, err = writer.Write(weightBytes) + if err != nil { + return fmt.Errorf("unable to write weight byte: %w", err) + } + } + + _, err = writer.Write(l.R[:]) + if err != nil { + return fmt.Errorf("unable to write R: %w", err) + } + + s := l.S + if l.YParity { + s[0] |= 0x80 + } + _, err = writer.Write(s[:]) + if err != nil { + return fmt.Errorf("unable to write S: %w", err) + } + + return nil +} + +type signatureTreeAddressLeaf struct { + Weight uint8 + Address common.Address +} + +func decodeAddressLeaf(firstByte byte, data *[]byte) (*signatureTreeAddressLeaf, error) { + weight := firstByte & 0x0f + if weight == 0 { + if len(*data) < 1 { + return nil, fmt.Errorf("insufficient data for dynamic weight") + } + weight = (*data)[0] + *data = (*data)[1:] + } + + if len(*data) < 20 { + return nil, fmt.Errorf("insufficient data for address") + } + + address := common.BytesToAddress((*data)[:20]) + *data = (*data)[20:] + + return &signatureTreeAddressLeaf{ + Weight: weight, + Address: address, + }, nil +} + +func (l *signatureTreeAddressLeaf) recover(ctx context.Context, payload core.Payload, provider *ethrpc.Provider, signerSignatures core.SignerSignatures) (WalletConfigTree, *big.Int, error) { + return &WalletConfigTreeAddressLeaf{ + Weight: l.Weight, + Address: l.Address, + }, new(big.Int), nil +} + +func (l *signatureTreeAddressLeaf) reduce() signatureTree { + return l +} + +func (l *signatureTreeAddressLeaf) join(other signatureTree) (signatureTree, error) { + return l, nil +} + +func (l *signatureTreeAddressLeaf) reduceImageHash() (core.ImageHash, error) { + return core.ImageHash{}, fmt.Errorf("address leaf has signing power") +} + +func (l *signatureTreeAddressLeaf) write(writer io.Writer) error { + flag := byte(FLAG_ADDRESS << 4) + var weightBytes []byte + + if l.Weight > 0 && l.Weight <= 15 { + flag |= l.Weight + } else { + weightBytes = []byte{l.Weight} + } + + _, err := writer.Write([]byte{flag}) + if err != nil { + return fmt.Errorf("unable to write address leaf type: %w", err) + } + + if len(weightBytes) > 0 { + _, err = writer.Write(weightBytes) + if err != nil { + return fmt.Errorf("unable to write dynamic weight: %w", err) + } + } + + _, err = writer.Write(l.Address.Bytes()) + if err != nil { + return fmt.Errorf("unable to write address: %w", err) + } + + return nil +} + +type signatureTreeSignatureERC1271Leaf struct { + Weight uint8 + Address common.Address + Signature []byte +} + +func decodeSignatureERC1271Leaf(firstByte byte, data *[]byte) (*signatureTreeSignatureERC1271Leaf, error) { + weight := firstByte & 0x03 + if weight == 0 { + if len(*data) < 1 { + return nil, fmt.Errorf("insufficient data for dynamic weight") + } + weight = (*data)[0] + *data = (*data)[1:] + } + + if len(*data) < 20 { + return nil, fmt.Errorf("insufficient data for address") + } + addr := common.BytesToAddress((*data)[:20]) + *data = (*data)[20:] + + sizeSize := (firstByte & 0x0c) >> 2 + size, err := readUintX(uint8(sizeSize), data) + if err != nil { + return nil, fmt.Errorf("unable to read signature size: %w", err) + } + + if len(*data) < int(size) { + return nil, fmt.Errorf("insufficient data for signature") + } + signature := make([]byte, size) + copy(signature, (*data)[:size]) + *data = (*data)[size:] + + return &signatureTreeSignatureERC1271Leaf{ + Weight: weight, + Address: addr, + Signature: signature, + }, nil +} + +func (l *signatureTreeSignatureERC1271Leaf) recover(ctx context.Context, payload core.Payload, provider *ethrpc.Provider, signerSignatures core.SignerSignatures) (WalletConfigTree, *big.Int, error) { + effectiveWeight := l.Weight + signature := l.Signature + + if provider != nil { + isValid, err := eip6492.ValidateEIP6492Offchain(ctx, provider, l.Address, payload.Digest().Hash, signature, nil) + if err != nil { + return nil, nil, fmt.Errorf("unable to validate ERC-1271 signature: %w", err) + } + if !isValid { + return nil, nil, fmt.Errorf("invalid ERC-1271 signature for %v", l.Address) + } + if eip6492.IsEIP6492Signature(signature) { + _, _, signature, err = eip6492.DecodeEIP6492Signature(signature) + if err != nil { + return nil, nil, fmt.Errorf("unable to decode EIP-6492 signature: %w", err) + } + } + } else { + effectiveWeight = 0 + } + + signerSignatures.Insert(l.Address, core.SignerSignature{ + Type: core.SignerSignatureTypeEIP1271, + Signature: signature, + }) + + return &WalletConfigTreeAddressLeaf{ + Weight: l.Weight, + Address: l.Address, + }, new(big.Int).SetUint64(uint64(effectiveWeight)), nil +} + +func (l *signatureTreeSignatureERC1271Leaf) reduce() signatureTree { + return l +} + +func (l *signatureTreeSignatureERC1271Leaf) join(other signatureTree) (signatureTree, error) { + return l, nil +} + +func (l *signatureTreeSignatureERC1271Leaf) reduceImageHash() (core.ImageHash, error) { + if l.Weight == 0 { + return (&WalletConfigTreeAddressLeaf{ + Weight: l.Weight, + Address: l.Address, + }).ImageHash(), nil + } + return core.ImageHash{}, fmt.Errorf("ERC-1271 signature might have signing power") +} + +func (l *signatureTreeSignatureERC1271Leaf) write(writer io.Writer) error { + sigLen := uint64(len(l.Signature)) + + sizeSize := minBytesFor(sigLen) + if sizeSize == 0 { + // Ensure at least 1 byte for the length, even if 0 + sizeSize = 1 + } + if sizeSize > 3 { + return fmt.Errorf("signature length %d requires %d bytes, exceeds maximum of 3", sigLen, sizeSize) + } + + var firstByte byte = FLAG_SIGNATURE_ERC1271<<4 | (byte(sizeSize) << 2) + var weightBytes []byte + + if l.Weight >= 1 && l.Weight <= 3 { + firstByte |= l.Weight + } else { + weightBytes = []byte{l.Weight} + } + + _, err := writer.Write([]byte{firstByte}) + if err != nil { + return fmt.Errorf("unable to write ERC-1271 leaf type: %w", err) + } + + if len(weightBytes) > 0 { + _, err = writer.Write(weightBytes) + if err != nil { + return fmt.Errorf("unable to write dynamic weight: %w", err) + } + } + + _, err = writer.Write(l.Address.Bytes()) + if err != nil { + return fmt.Errorf("unable to write address: %w", err) + } + + err = writeUintX(writer, sigLen, sizeSize) + if err != nil { + return fmt.Errorf("unable to write signature length: %w", err) + } + + _, err = writer.Write(l.Signature) + if err != nil { + return fmt.Errorf("unable to write signature: %w", err) + } + + return nil +} + +type signatureTreeNodeLeaf struct{ core.ImageHash } + +func decodeNodeLeaf(data *[]byte) (signatureTreeNodeLeaf, error) { + if len(*data) < 32 { + return signatureTreeNodeLeaf{}, fmt.Errorf("insufficient data for node leaf") + } + hash := common.BytesToHash((*data)[:32]) + *data = (*data)[32:] + return signatureTreeNodeLeaf{core.ImageHash{Hash: hash}}, nil +} + +func (l signatureTreeNodeLeaf) recover(ctx context.Context, payload core.Payload, provider *ethrpc.Provider, signerSignatures core.SignerSignatures) (WalletConfigTree, *big.Int, error) { + leaf := WalletConfigTreeNodeLeaf{l.ImageHash} + leaf.Node.Preimage = &leaf + return leaf, new(big.Int), nil +} + +func (l signatureTreeNodeLeaf) reduce() signatureTree { + return l +} + +func (l signatureTreeNodeLeaf) join(other signatureTree) (signatureTree, error) { + return l, nil +} + +func (l signatureTreeNodeLeaf) reduceImageHash() (core.ImageHash, error) { + return l.ImageHash, nil +} + +func (l signatureTreeNodeLeaf) write(writer io.Writer) error { + _, err := writer.Write([]byte{FLAG_NODE << 4}) + if err != nil { + return fmt.Errorf("unable to write node leaf type: %w", err) + } + + _, err = writer.Write(l.Bytes()) + if err != nil { + return fmt.Errorf("unable to write node hash: %w", err) + } + + return nil +} + +func decodeBranchLeaf(firstByte byte, data *[]byte) (signatureTree, error) { + lengthSize := firstByte & 0x0f + + length, err := readBigInt(int(lengthSize), data) + if err != nil { + return nil, fmt.Errorf("unable to read branch length: %w", err) + } + + if length.Cmp(big.NewInt(int64(len(*data)))) > 0 { + return nil, fmt.Errorf("insufficient data for branch: %v bytes required, %v remain", length, len(*data)) + } + + branchData := (*data)[:length.Uint64()] + *data = (*data)[length.Uint64():] + return decodeSignatureTree(branchData) +} + +type signatureTreeSubdigestLeaf struct{ common.Hash } + +func decodeSubdigestLeaf(data *[]byte) (signatureTreeSubdigestLeaf, error) { + if len(*data) < 32 { + return signatureTreeSubdigestLeaf{}, fmt.Errorf("insufficient data for subdigest leaf") + } + hash := common.BytesToHash((*data)[:32]) + *data = (*data)[32:] + return signatureTreeSubdigestLeaf{Hash: hash}, nil +} + +func (l signatureTreeSubdigestLeaf) recover(ctx context.Context, payload core.Payload, provider *ethrpc.Provider, signerSignatures core.SignerSignatures) (WalletConfigTree, *big.Int, error) { + if payload.Digest().Hash == l.Hash { + return WalletConfigTreeSubdigestLeaf{l.Hash}, new(big.Int).Set(maxUint256), nil + } else { + return WalletConfigTreeSubdigestLeaf{l.Hash}, new(big.Int), nil + } +} + +func (l signatureTreeSubdigestLeaf) reduce() signatureTree { + return l +} + +func (l signatureTreeSubdigestLeaf) join(other signatureTree) (signatureTree, error) { + return l, nil +} + +func (l signatureTreeSubdigestLeaf) reduceImageHash() (core.ImageHash, error) { + return WalletConfigTreeSubdigestLeaf{l.Hash}.ImageHash(), nil +} + +func (l signatureTreeSubdigestLeaf) write(writer io.Writer) error { + _, err := writer.Write([]byte{FLAG_SUBDIGEST << 4}) + + if err != nil { + return fmt.Errorf("unable to write subdigest leaf type: %w", err) + } + + _, err = writer.Write(l.Bytes()) + if err != nil { + return fmt.Errorf("unable to write subdigest: %w", err) + } + + return nil +} + +type signatureTreeNestedLeaf struct { + Weight uint8 + Threshold uint16 + Tree signatureTree +} + +func decodeNestedLeaf(firstByte byte, data *[]byte) (*signatureTreeNestedLeaf, error) { + weight := firstByte & 0x0c >> 2 + if weight == 0 { + if len(*data) < 1 { + return nil, fmt.Errorf("insufficient data for nested leaf weight") + } + weight = (*data)[0] + *data = (*data)[1:] + } + + threshold := uint16(firstByte & 0x03) + if threshold == 0 { + var err error + threshold, err = readUint16(data) + if err != nil { + return nil, fmt.Errorf("unable to read nested leaf threshold: %w", err) + } + } + + length, err := readUint24(data) + if err != nil { + return nil, fmt.Errorf("unable to read nested leaf signature length: %w", err) + } + + if len(*data) < int(length) { + return nil, fmt.Errorf("insufficient data for nested leaf") + } + + var signature []byte + signature, *data = (*data)[:length], (*data)[length:] + + tree, err := decodeSignatureTree(signature) + if err != nil { + return nil, fmt.Errorf("unable to decode nested leaf: %w", err) + } + + return &signatureTreeNestedLeaf{weight, threshold, tree}, nil +} + +func (l *signatureTreeNestedLeaf) recover(ctx context.Context, payload core.Payload, provider *ethrpc.Provider, signerSignatures core.SignerSignatures) (WalletConfigTree, *big.Int, error) { + tree, weight, err := l.Tree.recover(ctx, payload, provider, signerSignatures) + if err != nil { + return nil, nil, fmt.Errorf("unable to recover nested tree: %w", err) + } + + if weight.Cmp(new(big.Int).SetUint64(uint64(l.Threshold))) >= 0 { + return &WalletConfigTreeNestedLeaf{ + Weight: l.Weight, + Threshold: l.Threshold, + Tree: tree, + }, new(big.Int).SetUint64(uint64(l.Weight)), nil + } + return &WalletConfigTreeNestedLeaf{ + Weight: l.Weight, + Threshold: l.Threshold, + Tree: tree, + }, new(big.Int), nil +} + +func (l *signatureTreeNestedLeaf) reduce() signatureTree { + return &signatureTreeNestedLeaf{ + Weight: l.Weight, + Threshold: l.Threshold, + Tree: l.Tree.reduce(), + } +} + +func (l *signatureTreeNestedLeaf) join(other signatureTree) (signatureTree, error) { + switch other := other.(type) { + case *signatureTreeNestedLeaf: + tree, err := l.Tree.join(other.Tree) + if err != nil { + return nil, fmt.Errorf("unable to join nested trees: %w", err) + } + return &signatureTreeNestedLeaf{ + Weight: l.Weight, + Threshold: l.Threshold, + Tree: tree, + }, nil + default: + return nil, fmt.Errorf("unable to join nested leaf with %T", other) + } +} + +func (l *signatureTreeNestedLeaf) reduceImageHash() (core.ImageHash, error) { + if l.Weight == 0 { + if imageHash, err := l.Tree.reduceImageHash(); err == nil { + return (&WalletConfigTreeNestedLeaf{ + Weight: l.Weight, + Threshold: l.Threshold, + Tree: WalletConfigTreeNodeLeaf{imageHash}, + }).ImageHash(), nil + } + } + return core.ImageHash{}, fmt.Errorf("nested leaf might have signing power") +} + +func (l *signatureTreeNestedLeaf) write(writer io.Writer) error { + flag := byte(FLAG_NESTED << 4) + + var weightBytes []byte + if l.Weight <= 3 && l.Weight > 0 { + flag |= (l.Weight << 2) + } else { + weightBytes = []byte{l.Weight} + } + + var thresholdBytes []byte + if l.Threshold <= 3 && l.Threshold > 0 { + flag |= byte(l.Threshold) + } else { + thresholdBytes = make([]byte, 2) + binary.BigEndian.PutUint16(thresholdBytes, l.Threshold) + } + + _, err := writer.Write([]byte{flag}) + if err != nil { + return fmt.Errorf("unable to write nested leaf flag: %w", err) + } + + if len(weightBytes) > 0 { + _, err = writer.Write(weightBytes) + if err != nil { + return fmt.Errorf("unable to write dynamic weight: %w", err) + } + } + + if len(thresholdBytes) > 0 { + _, err = writer.Write(thresholdBytes) + if err != nil { + return fmt.Errorf("unable to write dynamic threshold: %w", err) + } + } + + var buffer bytes.Buffer + err = l.Tree.write(&buffer) + if err != nil { + return fmt.Errorf("unable to encode nested tree: %w", err) + } + + err = writeUint24(writer, uint32(buffer.Len())) + if err != nil { + return fmt.Errorf("unable to write nested tree length: %w", err) + } + + _, err = writer.Write(buffer.Bytes()) + if err != nil { + return fmt.Errorf("unable to write nested tree: %w", err) + } + + return nil +} + +type signatureTreeSignatureEthSignLeaf struct { + Weight uint8 + R [32]byte + S [32]byte + YParity bool +} + +func decodeSignatureEthSignLeaf(firstByte byte, data *[]byte) (*signatureTreeSignatureEthSignLeaf, error) { + weight := firstByte & 0x0f + if weight == 0 { + if len(*data) < 1 { + return nil, fmt.Errorf("insufficient data for dynamic weight") + } + weight = (*data)[0] + *data = (*data)[1:] + } + + if len(*data) < 64 { + return nil, fmt.Errorf("insufficient data for signature") + } + + r := [32]byte(*data) + s := [32]byte((*data)[32:]) + yParity := s[0]&0x80 != 0 + s[0] &^= 0x80 + *data = (*data)[64:] + + return &signatureTreeSignatureEthSignLeaf{ + Weight: weight, + R: r, + S: s, + YParity: yParity, + }, nil +} + +func (l *signatureTreeSignatureEthSignLeaf) recover(ctx context.Context, payload core.Payload, provider *ethrpc.Provider, signerSignatures core.SignerSignatures) (WalletConfigTree, *big.Int, error) { + var v byte + if l.YParity { + v = 28 + } else { + v = 27 + } + signature := bytes.Join([][]byte{l.R[:], l.S[:], {v}}, nil) + + address, err := core.Ecrecover(core.EthereumSignedMessage(payload.Digest().Bytes()), signature) + if err != nil { + return nil, nil, fmt.Errorf("unable to recover eth sign signature: %w", err) + } + + signerSignatures.Insert(address, core.SignerSignature{ + Type: core.SignerSignatureTypeEthSign, + Signature: signature, + }) + + return &WalletConfigTreeAddressLeaf{ + Weight: l.Weight, + Address: address, + }, new(big.Int).SetUint64(uint64(l.Weight)), nil +} + +func (l *signatureTreeSignatureEthSignLeaf) reduce() signatureTree { return l } +func (l *signatureTreeSignatureEthSignLeaf) join(other signatureTree) (signatureTree, error) { + return l, nil +} +func (l *signatureTreeSignatureEthSignLeaf) reduceImageHash() (core.ImageHash, error) { + return core.ImageHash{}, fmt.Errorf("eth sign signature has signing power") +} + +func (l *signatureTreeSignatureEthSignLeaf) write(writer io.Writer) error { + flag := byte(FLAG_SIGNATURE_ETH_SIGN << 4) + var weightBytes []byte + + if l.Weight > 0 && l.Weight <= 15 { + flag |= l.Weight + } else { + weightBytes = []byte{l.Weight} + } + + _, err := writer.Write([]byte{flag}) + if err != nil { + return fmt.Errorf("unable to write eth sign leaf type: %w", err) + } + + if len(weightBytes) > 0 { + _, err = writer.Write(weightBytes) + if err != nil { + return fmt.Errorf("unable to write dynamic weight: %w", err) + } + } + + _, err = writer.Write(l.R[:]) + if err != nil { + return fmt.Errorf("unable to write R: %w", err) + } + + s := l.S + if l.YParity { + s[0] |= 0x80 + } + _, err = writer.Write(s[:]) + if err != nil { + return fmt.Errorf("unable to write S: %w", err) + } + return nil +} + +type signatureTreeAnyAddressSubdigestLeaf struct{ common.Hash } + +func decodeAnyAddressSubdigestLeaf(data *[]byte) (*signatureTreeAnyAddressSubdigestLeaf, error) { + if len(*data) < 32 { + return nil, fmt.Errorf("insufficient data for any address subdigest leaf") + } + hash := common.BytesToHash((*data)[:32]) + *data = (*data)[32:] + return &signatureTreeAnyAddressSubdigestLeaf{Hash: hash}, nil +} + +func (l *signatureTreeAnyAddressSubdigestLeaf) recover(ctx context.Context, payload core.Payload, provider *ethrpc.Provider, signerSignatures core.SignerSignatures) (WalletConfigTree, *big.Int, error) { + payload_, err := PayloadWithAddress(payload, common.Address{}) + if err != nil { + return nil, nil, fmt.Errorf("unable to override payload address: %w", err) + } + + if payload_.Digest().Hash == l.Hash { + return WalletConfigTreeAnyAddressSubdigestLeaf{l.Hash}, new(big.Int).Set(maxUint256), nil + } else { + return WalletConfigTreeAnyAddressSubdigestLeaf{l.Hash}, new(big.Int), nil + } +} + +func (l *signatureTreeAnyAddressSubdigestLeaf) reduce() signatureTree { + return l +} + +func (l *signatureTreeAnyAddressSubdigestLeaf) join(other signatureTree) (signatureTree, error) { + return l, nil +} + +func (l *signatureTreeAnyAddressSubdigestLeaf) reduceImageHash() (core.ImageHash, error) { + return core.ImageHash{Hash: crypto.Keccak256Hash([]byte(anyAddressSubdigestLeafImageHashPrefix), l.Bytes())}, nil +} + +func (l *signatureTreeAnyAddressSubdigestLeaf) write(writer io.Writer) error { + _, err := writer.Write([]byte{FLAG_SIGNATURE_ANY_ADDRESS_SUBDIGEST << 4}) + if err != nil { + return fmt.Errorf("unable to write any address subdigest leaf type: %w", err) + } + + _, err = writer.Write(l.Bytes()) + if err != nil { + return fmt.Errorf("unable to write subdigest: %w", err) + } + + return nil +} + +type signatureTreeSapientLeaf struct { + Weight uint8 + Address common.Address + Signature []byte +} + +func decodeSignatureSapientLeaf(firstByte byte, data *[]byte) (*signatureTreeSapientLeaf, error) { + weight := firstByte & 0x03 + if weight == 0 { + if len(*data) < 1 { + return nil, fmt.Errorf("insufficient data for dynamic weight") + } + weight = (*data)[0] + *data = (*data)[1:] + } + + if len(*data) < 20 { + return nil, fmt.Errorf("insufficient data for address") + } + addr := common.BytesToAddress((*data)[:20]) + *data = (*data)[20:] + + sizeSize := (firstByte & 0x0c) >> 2 + size, err := readUintX(uint8(sizeSize), data) + if err != nil { + return nil, fmt.Errorf("unable to read signature size: %w", err) + } + + if len(*data) < int(size) { + return nil, fmt.Errorf("insufficient data for signature") + } + signature := make([]byte, size) + copy(signature, (*data)[:size]) + *data = (*data)[size:] + + return &signatureTreeSapientLeaf{ + Weight: weight, + Address: addr, + Signature: signature, + }, nil +} + +func (l *signatureTreeSapientLeaf) recover(ctx context.Context, payload core.Payload, provider *ethrpc.Provider, signerSignatures core.SignerSignatures) (WalletConfigTree, *big.Int, error) { + imageHash, err := RecoverSapientSignature(ctx, l.Address, payload, l.Signature, provider) + if err != nil { + return nil, nil, fmt.Errorf("unable to recover sapient signature: %w", err) + } + + signerSignatures.InsertSapient(l.Address, imageHash.Hash, core.SignerSignature{ + Signer: l.Address, + Type: core.SignerSignatureTypeSapient, + Signature: l.Signature, + }) + + return &WalletConfigTreeSapientSignerLeaf{ + Weight: l.Weight, + Address: l.Address, + ImageHash_: imageHash, + }, new(big.Int).SetUint64(uint64(l.Weight)), nil +} + +func (l *signatureTreeSapientLeaf) reduce() signatureTree { + return l +} + +func (l *signatureTreeSapientLeaf) join(other signatureTree) (signatureTree, error) { + return l, nil +} + +func (l *signatureTreeSapientLeaf) reduceImageHash() (core.ImageHash, error) { + return core.ImageHash{}, fmt.Errorf("sapient leaf might have signing power") +} + +func (l *signatureTreeSapientLeaf) write(writer io.Writer) error { + sigLen := uint64(len(l.Signature)) + sizeSize := minBytesFor(sigLen) + if sizeSize == 0 { + // Ensure at least 1 byte for the length, even if 0 + sizeSize = 1 + } + if sizeSize > 3 { + return fmt.Errorf("signature length %d requires %d bytes, exceeds maximum of 3", sigLen, sizeSize) + } + + var firstByte byte = FLAG_SIGNATURE_SAPIENT<<4 | (byte(sizeSize) << 2) + var weightBytes []byte + + if l.Weight >= 1 && l.Weight <= 3 { + firstByte |= l.Weight + } else { + weightBytes = []byte{l.Weight} + } + + _, err := writer.Write([]byte{firstByte}) + if err != nil { + return fmt.Errorf("unable to write Sapient leaf type: %w", err) + } + + if len(weightBytes) > 0 { + _, err = writer.Write(weightBytes) + if err != nil { + return fmt.Errorf("unable to write dynamic weight: %w", err) + } + } + + _, err = writer.Write(l.Address.Bytes()) + if err != nil { + return fmt.Errorf("unable to write address: %w", err) + } + + err = writeUintX(writer, sigLen, sizeSize) + if err != nil { + return fmt.Errorf("unable to write signature length: %w", err) + } + + _, err = writer.Write(l.Signature) + if err != nil { + return fmt.Errorf("unable to write signature: %w", err) + } + + return nil +} + +type signatureTreeSapientCompactLeaf struct { + Weight uint8 + Address common.Address + Signature []byte +} + +func decodeSignatureSapientCompactLeaf(firstByte byte, data *[]byte) (*signatureTreeSapientCompactLeaf, error) { + weight := firstByte & 0x03 + if weight == 0 { + if len(*data) < 1 { + return nil, fmt.Errorf("insufficient data for dynamic weight") + } + weight = (*data)[0] + *data = (*data)[1:] + } + + if len(*data) < 20 { + return nil, fmt.Errorf("insufficient data for address") + } + addr := common.BytesToAddress((*data)[:20]) + *data = (*data)[20:] + + sizeSize := (firstByte & 0x0c) >> 2 + size, err := readUintX(uint8(sizeSize), data) + if err != nil { + return nil, fmt.Errorf("unable to read signature size: %w", err) + } + + if len(*data) < int(size) { + return nil, fmt.Errorf("insufficient data for signature") + } + signature := make([]byte, size) + copy(signature, (*data)[:size]) + *data = (*data)[size:] + + return &signatureTreeSapientCompactLeaf{ + Weight: weight, + Address: addr, + Signature: signature, + }, nil +} + +func (l *signatureTreeSapientCompactLeaf) recover(ctx context.Context, payload core.Payload, provider *ethrpc.Provider, signerSignatures core.SignerSignatures) (WalletConfigTree, *big.Int, error) { + imageHash, err := RecoverSapientSignatureCompact(ctx, l.Address, payload, l.Signature, provider) + if err != nil { + return nil, nil, fmt.Errorf("unable to recover compact sapient signature: %w", err) + } + + signerSignatures.InsertSapient(l.Address, imageHash.Hash, core.SignerSignature{ + Signer: l.Address, + Type: core.SignerSignatureTypeSapientCompact, + Signature: l.Signature, + }) + + return &WalletConfigTreeSapientSignerLeaf{ + Weight: l.Weight, + Address: l.Address, + ImageHash_: imageHash, + }, new(big.Int).SetUint64(uint64(l.Weight)), nil +} + +func (l *signatureTreeSapientCompactLeaf) reduce() signatureTree { + return l +} + +func (l *signatureTreeSapientCompactLeaf) join(other signatureTree) (signatureTree, error) { + return l, nil +} + +func (l *signatureTreeSapientCompactLeaf) reduceImageHash() (core.ImageHash, error) { + return core.ImageHash{}, fmt.Errorf("sapient compact leaf might have signing power") +} + +func (l *signatureTreeSapientCompactLeaf) write(writer io.Writer) error { + sigLen := uint64(len(l.Signature)) + sizeSize := minBytesFor(sigLen) + if sizeSize == 0 { + // Ensure at least 1 byte for the length, even if 0 + sizeSize = 1 + } + if sizeSize > 3 { + return fmt.Errorf("signature length %d requires %d bytes, exceeds maximum of 3", sigLen, sizeSize) + } + + var firstByte byte = FLAG_SIGNATURE_SAPIENT_COMPACT<<4 | (byte(sizeSize) << 2) + var weightBytes []byte + + if l.Weight >= 1 && l.Weight <= 3 { + firstByte |= l.Weight + } else { + weightBytes = []byte{l.Weight} + } + + _, err := writer.Write([]byte{firstByte}) + if err != nil { + return fmt.Errorf("unable to write SapientCompact leaf type: %w", err) + } + + if len(weightBytes) > 0 { + _, err = writer.Write(weightBytes) + if err != nil { + return fmt.Errorf("unable to write dynamic weight: %w", err) + } + } + + _, err = writer.Write(l.Address.Bytes()) + if err != nil { + return fmt.Errorf("unable to write address: %w", err) + } + + err = writeUintX(writer, sigLen, sizeSize) + if err != nil { + return fmt.Errorf("unable to write signature length: %w", err) + } + + _, err = writer.Write(l.Signature) + if err != nil { + return fmt.Errorf("unable to write signature: %w", err) + } + + return nil +} + +type WalletConfig struct { + Threshold_ uint16 `json:"threshold" toml:"threshold"` + // WARNING: contract code is uint64 + Checkpoint_ uint64 `json:"checkpoint" toml:"checkpoint"` + Tree WalletConfigTree `json:"tree" toml:"tree"` + Checkpointer common.Address `json:"checkpointer,omitempty" toml:"checkpointer,omitempty"` +} + +func (c *WalletConfig) Threshold() uint16 { + return c.Threshold_ +} + +func (c *WalletConfig) Checkpoint() uint64 { + return c.Checkpoint_ +} + +func (c *WalletConfig) Signers() map[common.Address]uint16 { + signers := map[common.Address]uint16{} + c.Tree.readSignersIntoMap(signers) + return signers +} + +func (c *WalletConfig) SignersWeight(signers []common.Address) uint16 { + signersMap := make(map[common.Address]uint16) + for _, signer := range signers { + signersMap[signer] = 0 + } + return uint16(c.Tree.unverifiedWeight(signersMap).Uint64()) +} + +func (c *WalletConfig) IsComplete() bool { + return c.Tree.isComplete() +} + +func (c *WalletConfig) IsUsable() error { + if c.Threshold_ == 0 { + return fmt.Errorf("threshold is 0") + } + + threshold := new(big.Int).SetUint64(uint64(c.Threshold_)) + weight := c.Tree.maxWeight() + if threshold.Cmp(weight) > 0 { + return fmt.Errorf("threshold %v exceeds maximum weight %v", threshold, weight) + } + + return nil +} + +func (c *WalletConfig) ImageHash() core.ImageHash { + treeHash := c.Tree.ImageHash().Bytes() + + thresholdBytes := common.BigToHash(new(big.Int).SetUint64(uint64(c.Threshold_))).Bytes() + checkpointBytes := common.BigToHash(new(big.Int).SetUint64(c.Checkpoint_)).Bytes() + + checkpointerBytes := make([]byte, 32) + copy(checkpointerBytes[12:], c.Checkpointer.Bytes()) + + root := crypto.Keccak256Hash(treeHash, thresholdBytes) + + root = crypto.Keccak256Hash(root.Bytes(), checkpointBytes) + + root = crypto.Keccak256Hash(root.Bytes(), checkpointerBytes) + + return core.ImageHash{ + Hash: root, + Preimage: c, + } +} + +func (c *WalletConfig) BuildSubdigestSignature(noChainID bool) (core.Signature[*WalletConfig], error) { + signerSignatures := make(map[common.Address]signerSignature) + tree := c.Tree.buildSignatureTree(signerSignatures) + + // Construct a NoChainIDSignature with the wallet config's parameters + if noChainID { + return &NoChainIDSignature{ + Signature: &Signature{ + NoChainId: noChainID, + Threshold: c.Threshold_, + Checkpoint: c.Checkpoint_, + Tree: tree, + Checkpointer: common.Address{}, + CheckpointerData: nil, + }, + }, nil + } + + return &RegularSignature{ + Signature: &Signature{ + NoChainId: noChainID, + Threshold: c.Threshold_, + Checkpoint: c.Checkpoint_, + Tree: tree, + Checkpointer: common.Address{}, + CheckpointerData: nil, + }, + }, nil +} + +func (c *WalletConfig) BuildRegularSignature(ctx context.Context, sign core.SigningFunction, validateSigningPower bool, checkpointerData ...[]byte) (core.Signature[*WalletConfig], error) { + var isValid bool + configSigners := c.Signers() + + signCtx, signCancel := context.WithCancel(ctx) + defer signCancel() + + signerSignatureCh := core.SigningOrchestrator(signCtx, configSigners, sign) + signerSignatures := map[common.Address]signerSignature{} + signedSigners := map[common.Address]uint16{} + + for range configSigners { + signerSig := <-signerSignatureCh + if signerSig.Error != nil { + signCancel() + return nil, fmt.Errorf("signer %s signing error: %w", signerSig.Signer.Hex(), signerSig.Error) + } + + if signerSig.Signature != nil { + signerSignatures[signerSig.Signer] = signerSignature{signerSig.Signer, signerSig.Type, signerSig.Signature} + signedSigners[signerSig.Signer] = 0 + + weight := c.Tree.unverifiedWeight(signedSigners) + if weight.Cmp(new(big.Int).SetUint64(uint64(c.Threshold_))) >= 0 { + signCancel() + isValid = true + } + } + } + + if !isValid && validateSigningPower { + return nil, fmt.Errorf("not enough signers to build regular signature") + } + + var cpData []byte + if len(checkpointerData) > 0 { + cpData = checkpointerData[0] + } + + return &RegularSignature{&Signature{ + NoChainId: false, + Threshold: c.Threshold_, + Checkpoint: c.Checkpoint_, + Tree: c.Tree.buildSignatureTree(signerSignatures), + Checkpointer: c.Checkpointer, + CheckpointerData: cpData, + }}, nil +} + +func (c *WalletConfig) BuildNoChainIDSignature(ctx context.Context, sign core.SigningFunction, validateSigningPower bool, checkpointerData ...[]byte) (core.Signature[*WalletConfig], error) { + var isValid bool + configSigners := c.Signers() + + signCtx, signCancel := context.WithCancel(ctx) + defer signCancel() + + signerSignatureCh := core.SigningOrchestrator(signCtx, configSigners, sign) + signerSignatures := map[common.Address]signerSignature{} + signedSigners := map[common.Address]uint16{} + + for range configSigners { + signerSig := <-signerSignatureCh + if signerSig.Error != nil { + signCancel() + return nil, fmt.Errorf("signer %s signing error: %w", signerSig.Signer.Hex(), signerSig.Error) + } + + if signerSig.Signature != nil { + signerSignatures[signerSig.Signer] = signerSignature{signerSig.Signer, signerSig.Type, signerSig.Signature} + signedSigners[signerSig.Signer] = 0 + + weight := c.Tree.unverifiedWeight(signedSigners) + if weight.Cmp(new(big.Int).SetUint64(uint64(c.Threshold_))) >= 0 { + signCancel() + isValid = true + } + } + } + + if !isValid && validateSigningPower { + return nil, fmt.Errorf("not enough signers to build no chain ID signature") + } + + var cpData []byte + if len(checkpointerData) > 0 { + cpData = checkpointerData[0] + } + + return &NoChainIDSignature{&Signature{ + NoChainId: true, + Threshold: c.Threshold_, + Checkpoint: c.Checkpoint_, + Tree: c.Tree.buildSignatureTree(signerSignatures), + Checkpointer: c.Checkpointer, + CheckpointerData: cpData, + }}, nil +} + +type signerSignature struct { + signer common.Address + type_ core.SignerSignatureType + signature []byte +} + +type WalletConfigTree interface { + core.ImageHashable + + isComplete() bool + maxWeight() *big.Int + readSignersIntoMap(signers map[common.Address]uint16) + unverifiedWeight(signers map[common.Address]uint16) *big.Int + buildSignatureTree(signerSignatures map[common.Address]signerSignature) signatureTree +} + +func DecodeWalletConfigTree(object any) (WalletConfigTree, error) { + object_, ok := object.(map[string]any) + if !ok { + return nil, fmt.Errorf("wallet config tree must be an object") + } + + if typ, ok := object_["type"].(string); ok { + switch typ { + case "signer": + return decodeWalletConfigTreeAddressLeaf(object_) + case "sapient-signer": + return decodeWalletConfigTreeSapientSignerLeaf(object_) + case "subdigest": + return decodeWalletConfigTreeSubdigestLeaf(object_) + case "any-address-subdigest": + return decodeWalletConfigTreeAnyAddressSubdigestLeaf(object_) + case "nested": + return decodeWalletConfigTreeNestedLeaf(object_) + case "node": + hash, ok := object_["hash"].(string) + if !ok { + return nil, fmt.Errorf("missing or invalid 'hash' for node type") + } + hashBytes, err := hexutil.Decode(hash) + if err != nil || len(hashBytes) != 32 { + return nil, fmt.Errorf("invalid hash for node type: %v", hash) + } + return &WalletConfigTreeNodeLeaf{Node: core.ImageHash{Hash: common.BytesToHash(hashBytes)}}, nil + default: + return nil, fmt.Errorf("unknown wallet config tree type: %s", typ) + } + } + + if hasKeys(object_, []string{"left", "right"}) { + return decodeWalletConfigTreeNode(object_) + } else if hasKeys(object_, []string{"weight", "address"}) { + return decodeWalletConfigTreeAddressLeaf(object_) + } else if hasKeys(object_, []string{"node"}) { + return decodeWalletConfigTreeNodeLeaf(object_) + } else if hasKeys(object_, []string{"weight", "threshold", "tree"}) { + return decodeWalletConfigTreeNestedLeaf(object_) + } else if hasKeys(object_, []string{"subdigest"}) { + return decodeWalletConfigTreeSubdigestLeaf(object_) + } else if hasKeys(object_, []string{"weight", "address", "imageHash"}) { + return decodeWalletConfigTreeSapientSignerLeaf(object_) + } else if hasKeys(object_, []string{"digest"}) { + return decodeWalletConfigTreeAnyAddressSubdigestLeaf(object_) + } + + return nil, fmt.Errorf("unknown wallet config tree type: %v", object_) +} + +func WalletConfigTreeNodes(nodes ...WalletConfigTree) WalletConfigTree { + if len(nodes) == 0 { + return nil + } else if len(nodes) == 1 { + return nodes[0] + } else { + numberOfNodes := len(nodes)/2 + len(nodes)%2 + for numberOfNodes > 1 { + newNodes := make([]WalletConfigTree, numberOfNodes) + for i := range numberOfNodes { + var left, right WalletConfigTree + if i*2 < len(nodes) { + left = nodes[i*2] + } + if i*2+1 < len(nodes) { + right = nodes[i*2+1] + } + + if right == nil { + newNodes[i] = left + } else { + newNodes[i] = &WalletConfigTreeNode{ + Left: left, + Right: right, + } + } + } + + nodes = newNodes + numberOfNodes = len(nodes)/2 + len(nodes)%2 + } + + return &WalletConfigTreeNode{ + Left: nodes[0], + Right: nodes[1], + } + } +} + +type WalletConfigTreeNode struct { + Left WalletConfigTree `json:"left" toml:"left"` + Right WalletConfigTree `json:"right" toml:"right"` +} + +func decodeWalletConfigTreeNode(object any) (*WalletConfigTreeNode, error) { + object_, ok := object.(map[string]any) + if !ok { + return nil, fmt.Errorf("wallet config tree node must be an object") + } + + left, ok := object_["left"] + if !ok { + return nil, fmt.Errorf(`missing required "left" property`) + } + left_, err := DecodeWalletConfigTree(left) + if err != nil { + return nil, fmt.Errorf("unable to decode left wallet config tree: %w", err) + } + + right, ok := object_["right"] + if !ok { + return nil, fmt.Errorf(`missing required "right" property`) + } + right_, err := DecodeWalletConfigTree(right) + if err != nil { + return nil, fmt.Errorf("unable to decode right wallet config tree: %w", err) + } + + return &WalletConfigTreeNode{Left: left_, Right: right_}, nil +} + +func (n *WalletConfigTreeNode) ImageHash() core.ImageHash { + return core.ImageHash{ + Hash: crypto.Keccak256Hash( + n.Left.ImageHash().Bytes(), + n.Right.ImageHash().Bytes(), + ), + Preimage: n, + } +} + +func (n *WalletConfigTreeNode) isComplete() bool { + return n.Left.isComplete() && n.Right.isComplete() +} + +func (n *WalletConfigTreeNode) maxWeight() *big.Int { + return new(big.Int).Add(n.Left.maxWeight(), n.Right.maxWeight()) +} + +func (n *WalletConfigTreeNode) readSignersIntoMap(signers map[common.Address]uint16) { + n.Left.readSignersIntoMap(signers) + n.Right.readSignersIntoMap(signers) +} + +func (n *WalletConfigTreeNode) unverifiedWeight(signers map[common.Address]uint16) *big.Int { + return new(big.Int).Add(n.Left.unverifiedWeight(signers), n.Right.unverifiedWeight(signers)) +} + +func (n *WalletConfigTreeNode) buildSignatureTree(signerSignatures map[common.Address]signerSignature) signatureTree { + leftTree := n.Left.buildSignatureTree(signerSignatures) + rightTree := n.Right.buildSignatureTree(signerSignatures) + return &signatureTreeNode{left: leftTree, right: rightTree} +} + +type WalletConfigTreeAddressLeaf struct { + Weight uint8 `json:"weight" toml:"weight"` + Address common.Address `json:"address" toml:"address"` +} + +func decodeWalletConfigTreeAddressLeaf(object any) (*WalletConfigTreeAddressLeaf, error) { + object_, ok := object.(map[string]any) + if !ok { + return nil, fmt.Errorf("wallet config tree address leaf must be an object") + } + + weight, ok := object_["weight"] + if !ok { + return nil, fmt.Errorf(`missing required "weight" property`) + } + weight_, err := toUint8(weight) + if err != nil { + return nil, fmt.Errorf("unable to convert weight: %w", err) + } + + address, ok := object_["address"] + if !ok { + return nil, fmt.Errorf(`missing required "address" property`) + } + address_, ok := address.(string) + if !ok { + return nil, fmt.Errorf("address must be a string") + } + if !common.IsHexAddress(address_) { + return nil, fmt.Errorf(`"%v" is not a valid address`, address_) + } + + return &WalletConfigTreeAddressLeaf{ + Weight: weight_, + Address: common.HexToAddress(address_), + }, nil +} + +func (l *WalletConfigTreeAddressLeaf) ImageHash() core.ImageHash { + weight := new(big.Int).SetUint64(uint64(l.Weight)) + weightBytes := make([]byte, 32) + weight.FillBytes(weightBytes) + + hash := crypto.Keccak256Hash( + []byte(addressLeafImageHashPrefix), + l.Address.Bytes(), + weightBytes, + ) + return core.ImageHash{Hash: hash, Preimage: l} +} + +func (l *WalletConfigTreeAddressLeaf) isComplete() bool { + return true +} + +func (l *WalletConfigTreeAddressLeaf) maxWeight() *big.Int { + return new(big.Int).SetUint64(uint64(l.Weight)) +} + +func (l *WalletConfigTreeAddressLeaf) readSignersIntoMap(signers map[common.Address]uint16) { + signers[l.Address] = uint16(l.Weight) +} + +func (l *WalletConfigTreeAddressLeaf) unverifiedWeight(signers map[common.Address]uint16) *big.Int { + if _, ok := signers[l.Address]; ok { + return new(big.Int).SetUint64(uint64(l.Weight)) + } + return new(big.Int) +} + +func (l *WalletConfigTreeAddressLeaf) buildSignatureTree(signerSignatures map[common.Address]signerSignature) signatureTree { + if signature, ok := signerSignatures[l.Address]; ok { + switch signature.type_ { + case core.SignerSignatureTypeEIP712, core.SignerSignatureTypeEthSign: + r := [32]byte(signature.signature[0:32]) + s := [32]byte(signature.signature[32:64]) + v := signature.signature[64] + + var yParity bool + if v == 0 || v == 27 { + yParity = false + } else if v == 1 || v == 28 { + yParity = true + } else if v > 35 { + // EIP-155: V = 35 + 2*chainID + parity + yParity = ((v - 35) % 2) == 1 + } + + if signature.type_ == core.SignerSignatureTypeEIP712 { + return &signatureTreeSignatureHashLeaf{ + Weight: l.Weight, + R: r, + S: s, + YParity: yParity, + } + } else { + return &signatureTreeSignatureEthSignLeaf{ + Weight: l.Weight, + R: r, + S: s, + YParity: yParity, + } + } + case core.SignerSignatureTypeEIP1271: + return &signatureTreeSignatureERC1271Leaf{ + Weight: l.Weight, + Address: l.Address, + Signature: signature.signature, + } + default: + panic(fmt.Sprintf("unknown signer signature type %v", signature.type_)) + } + } + return &signatureTreeAddressLeaf{Weight: l.Weight, Address: l.Address} +} + +type WalletConfigTreeNodeLeaf struct { + Node core.ImageHash `json:"node" toml:"node"` +} + +func decodeWalletConfigTreeNodeLeaf(object any) (WalletConfigTreeNodeLeaf, error) { + object_, ok := object.(map[string]any) + if !ok { + return WalletConfigTreeNodeLeaf{}, fmt.Errorf("wallet config tree node leaf must be an object") + } + + node, ok := object_["node"] + if !ok { + return WalletConfigTreeNodeLeaf{}, fmt.Errorf(`missing required "node" property`) + } + node_, ok := node.(string) + if !ok { + return WalletConfigTreeNodeLeaf{}, fmt.Errorf("node must be a string") + } + node__, err := hexutil.Decode(node_) + if err != nil { + return WalletConfigTreeNodeLeaf{}, fmt.Errorf(`"%v" is not valid hex`, node_) + } + if len(node__) != common.HashLength { + return WalletConfigTreeNodeLeaf{}, fmt.Errorf("expected hash of length %v, got %v", common.HashLength, len(node__)) + } + + leaf := WalletConfigTreeNodeLeaf{core.ImageHash{Hash: common.BytesToHash(node__)}} + leaf.Node.Preimage = &leaf + return leaf, nil +} + +func (l WalletConfigTreeNodeLeaf) ImageHash() core.ImageHash { + return l.Node +} + +func (l WalletConfigTreeNodeLeaf) isComplete() bool { + return false +} + +func (l WalletConfigTreeNodeLeaf) maxWeight() *big.Int { + return new(big.Int) +} + +func (l WalletConfigTreeNodeLeaf) readSignersIntoMap(signers map[common.Address]uint16) {} + +func (l WalletConfigTreeNodeLeaf) unverifiedWeight(signers map[common.Address]uint16) *big.Int { + return new(big.Int) +} + +func (l WalletConfigTreeNodeLeaf) buildSignatureTree(signerSignatures map[common.Address]signerSignature) signatureTree { + return signatureTreeNodeLeaf{l.Node} +} + +type WalletConfigTreeNestedLeaf struct { + Weight uint8 `json:"weight" toml:"weight"` + Threshold uint16 `json:"threshold" toml:"threshold"` + Tree WalletConfigTree `json:"tree" toml:"tree"` +} + +func decodeWalletConfigTreeNestedLeaf(object any) (*WalletConfigTreeNestedLeaf, error) { + object_, ok := object.(map[string]any) + if !ok { + return nil, fmt.Errorf("wallet config tree nested leaf must be an object") + } + + weight, ok := object_["weight"] + if !ok { + return nil, fmt.Errorf(`missing required "weight" property`) + } + weight_, err := toUint8(weight) + if err != nil { + return nil, fmt.Errorf("unable to convert weight: %w", err) + } + + threshold, ok := object_["threshold"] + if !ok { + return nil, fmt.Errorf(`missing required "threshold" property`) + } + threshold_, err := toUint16(threshold) + if err != nil { + return nil, fmt.Errorf("unable to convert threshold: %w", err) + } + + tree, ok := object_["tree"] + if !ok { + return nil, fmt.Errorf(`missing required "tree" property`) + } + tree_, err := DecodeWalletConfigTree(tree) + if err != nil { + return nil, fmt.Errorf("unable to decode nested tree: %w", err) + } + + return &WalletConfigTreeNestedLeaf{ + Weight: weight_, + Threshold: threshold_, + Tree: tree_, + }, nil +} + +func (l *WalletConfigTreeNestedLeaf) ImageHash() core.ImageHash { + imageHash := l.Tree.ImageHash() + threshold := common.BigToHash(new(big.Int).SetUint64(uint64(l.Threshold))) + weight := common.BigToHash(new(big.Int).SetUint64(uint64(l.Weight))) + + return core.ImageHash{ + Hash: crypto.Keccak256Hash( + []byte(nestedLeafImageHashPrefix), + imageHash.Bytes(), + threshold.Bytes(), + weight.Bytes(), + ), + Preimage: l, + } +} + +func (l *WalletConfigTreeNestedLeaf) isComplete() bool { + return l.Tree.isComplete() +} + +func (l *WalletConfigTreeNestedLeaf) maxWeight() *big.Int { + if l.Tree.maxWeight().Cmp(new(big.Int).SetUint64(uint64(l.Threshold))) >= 0 { + return new(big.Int).SetUint64(uint64(l.Weight)) + } + return new(big.Int) +} + +func (l *WalletConfigTreeNestedLeaf) readSignersIntoMap(signers map[common.Address]uint16) { + l.Tree.readSignersIntoMap(signers) +} + +func (l *WalletConfigTreeNestedLeaf) unverifiedWeight(signers map[common.Address]uint16) *big.Int { + if l.Tree.unverifiedWeight(signers).Cmp(new(big.Int).SetUint64(uint64(l.Threshold))) >= 0 { + return new(big.Int).SetUint64(uint64(l.Weight)) + } + return new(big.Int) +} + +func (l *WalletConfigTreeNestedLeaf) buildSignatureTree(signerSignatures map[common.Address]signerSignature) signatureTree { + return &signatureTreeNestedLeaf{ + Weight: l.Weight, + Threshold: l.Threshold, + Tree: l.Tree.buildSignatureTree(signerSignatures), + } +} + +type WalletConfigTreeSubdigestLeaf struct { + Subdigest common.Hash `json:"subdigest" toml:"subdigest"` +} + +func decodeWalletConfigTreeSubdigestLeaf(object any) (WalletConfigTreeSubdigestLeaf, error) { + object_, ok := object.(map[string]any) + if !ok { + return WalletConfigTreeSubdigestLeaf{}, fmt.Errorf("wallet config tree subdigest leaf must be an object") + } + + digest, ok := object_["digest"] + if !ok { + return WalletConfigTreeSubdigestLeaf{}, fmt.Errorf(`missing required "digest" property`) + } + + digest_, ok := digest.(string) + if !ok { + return WalletConfigTreeSubdigestLeaf{}, fmt.Errorf("digest must be a string") + } + + digestBytes, err := hexutil.Decode(digest_) + if err != nil { + return WalletConfigTreeSubdigestLeaf{}, fmt.Errorf(`"%v" is not valid hex`, digest_) + } + + if len(digestBytes) != common.HashLength { + return WalletConfigTreeSubdigestLeaf{}, fmt.Errorf("expected hash of length %v, got %v", common.HashLength, len(digestBytes)) + } + + return WalletConfigTreeSubdigestLeaf{common.BytesToHash(digestBytes)}, nil +} + +func (l WalletConfigTreeSubdigestLeaf) ImageHash() core.ImageHash { + return core.ImageHash{ + Hash: crypto.Keccak256Hash( + []byte(subdigestLeafImageHashPrefix), + l.Subdigest.Bytes(), + ), + Preimage: &l, + } +} + +func (l WalletConfigTreeSubdigestLeaf) isComplete() bool { + return true +} + +func (l WalletConfigTreeSubdigestLeaf) maxWeight() *big.Int { + return new(big.Int).Set(maxUint256) +} + +func (l WalletConfigTreeSubdigestLeaf) readSignersIntoMap(signers map[common.Address]uint16) {} + +func (l WalletConfigTreeSubdigestLeaf) unverifiedWeight(signers map[common.Address]uint16) *big.Int { + return new(big.Int).Set(maxUint256) +} + +func (l WalletConfigTreeSubdigestLeaf) buildSignatureTree(signerSignatures map[common.Address]signerSignature) signatureTree { + return signatureTreeSubdigestLeaf{l.Subdigest} +} + +type WalletConfigTreeSapientSignerLeaf struct { + Weight uint8 `json:"weight" toml:"weight"` + Address common.Address `json:"address" toml:"address"` + ImageHash_ core.ImageHash `json:"imageHash" toml:"imageHash"` +} + +func decodeWalletConfigTreeSapientSignerLeaf(object any) (*WalletConfigTreeSapientSignerLeaf, error) { + object_, ok := object.(map[string]any) + if !ok { + return nil, fmt.Errorf("wallet config tree sapient signer leaf must be an object") + } + + weight, ok := object_["weight"] + if !ok { + return nil, fmt.Errorf(`missing required "weight" property`) + } + weight_, err := toUint8(weight) + if err != nil { + return nil, fmt.Errorf("unable to convert weight: %w", err) + } + + address, ok := object_["address"] + if !ok { + return nil, fmt.Errorf(`missing required "address" property`) + } + address_, ok := address.(string) + if !ok { + return nil, fmt.Errorf("address must be a string") + } + if !common.IsHexAddress(address_) { + return nil, fmt.Errorf(`"%v" is not a valid address`, address_) + } + + imageHash, ok := object_["imageHash"] + if !ok { + return nil, fmt.Errorf(`missing required "imageHash" property`) + } + imageHash_, ok := imageHash.(string) + if !ok { + return nil, fmt.Errorf("imageHash must be a string") + } + imageHashBytes, err := hexutil.Decode(imageHash_) + if err != nil || len(imageHashBytes) != 32 { + return nil, fmt.Errorf(`"%v" is not a valid 32-byte hash`, imageHash_) + } + + return &WalletConfigTreeSapientSignerLeaf{ + Weight: weight_, + Address: common.HexToAddress(address_), + ImageHash_: core.ImageHash{Hash: common.BytesToHash(imageHashBytes)}, + }, nil +} + +func (l *WalletConfigTreeSapientSignerLeaf) ImageHash() core.ImageHash { + weight := new(big.Int).SetUint64(uint64(l.Weight)) + weightBytes := make([]byte, 32) + weight.FillBytes(weightBytes) + + hash := crypto.Keccak256Hash( + []byte(sapientLeafImageHashPrefix), + l.Address.Bytes(), + weightBytes, + l.ImageHash_.Bytes(), + ) + return core.ImageHash{Hash: hash, Preimage: l} +} + +func (l *WalletConfigTreeSapientSignerLeaf) isComplete() bool { + return true +} + +func (l *WalletConfigTreeSapientSignerLeaf) maxWeight() *big.Int { + return new(big.Int).SetUint64(uint64(l.Weight)) +} + +func (l *WalletConfigTreeSapientSignerLeaf) readSignersIntoMap(signers map[common.Address]uint16) { + signers[l.Address] = uint16(l.Weight) +} + +func (l *WalletConfigTreeSapientSignerLeaf) unverifiedWeight(signers map[common.Address]uint16) *big.Int { + if _, ok := signers[l.Address]; ok { + return new(big.Int).SetUint64(uint64(l.Weight)) + } + return new(big.Int) +} + +func (l *WalletConfigTreeSapientSignerLeaf) buildSignatureTree(signerSignatures map[common.Address]signerSignature) signatureTree { + if signature, ok := signerSignatures[l.Address]; ok { + switch signature.type_ { + case core.SignerSignatureTypeSapient: + return &signatureTreeSapientLeaf{ + Weight: l.Weight, + Address: l.Address, + Signature: signature.signature, + } + case core.SignerSignatureTypeSapientCompact: + return &signatureTreeSapientCompactLeaf{ + Weight: l.Weight, + Address: l.Address, + Signature: signature.signature, + } + default: + panic(fmt.Sprintf("unexpected signature type for sapient signer: %v", signature.type_)) + } + } + hashedImage := l.ImageHash() + return &signatureTreeNodeLeaf{ + ImageHash: hashedImage, + } +} + +type WalletConfigTreeAnyAddressSubdigestLeaf struct { + Digest common.Hash `json:"digest" toml:"digest"` +} + +func decodeWalletConfigTreeAnyAddressSubdigestLeaf(object any) (WalletConfigTreeAnyAddressSubdigestLeaf, error) { + object_, ok := object.(map[string]any) + if !ok { + return WalletConfigTreeAnyAddressSubdigestLeaf{}, fmt.Errorf("wallet config tree any address subdigest leaf must be an object") + } + + digest, ok := object_["digest"] + if !ok { + return WalletConfigTreeAnyAddressSubdigestLeaf{}, fmt.Errorf(`missing required "digest" property`) + } + digest_, ok := digest.(string) + if !ok { + return WalletConfigTreeAnyAddressSubdigestLeaf{}, fmt.Errorf("digest must be a string") + } + digestBytes, err := hexutil.Decode(digest_) + if err != nil || len(digestBytes) != 32 { + return WalletConfigTreeAnyAddressSubdigestLeaf{}, fmt.Errorf(`"%v" is not a valid 32-byte hash`, digest_) + } + + return WalletConfigTreeAnyAddressSubdigestLeaf{Digest: common.BytesToHash(digestBytes)}, nil +} + +func (l WalletConfigTreeAnyAddressSubdigestLeaf) ImageHash() core.ImageHash { + hash := crypto.Keccak256Hash( + []byte(anyAddressSubdigestLeafImageHashPrefix), + l.Digest.Bytes(), + ) + return core.ImageHash{ + Hash: hash, + Preimage: &l, + } +} + +func (l WalletConfigTreeAnyAddressSubdigestLeaf) isComplete() bool { + return true +} + +func (l WalletConfigTreeAnyAddressSubdigestLeaf) maxWeight() *big.Int { + return new(big.Int).Set(maxUint256) +} + +func (l WalletConfigTreeAnyAddressSubdigestLeaf) readSignersIntoMap(signers map[common.Address]uint16) { +} + +func (l WalletConfigTreeAnyAddressSubdigestLeaf) unverifiedWeight(signers map[common.Address]uint16) *big.Int { + return new(big.Int).Set(maxUint256) +} + +func (l WalletConfigTreeAnyAddressSubdigestLeaf) buildSignatureTree(signerSignatures map[common.Address]signerSignature) signatureTree { + return &signatureTreeAnyAddressSubdigestLeaf{l.Digest} +} + +func minBytesFor(val uint64) uint8 { + if val == 0 { + return 0 + } + return uint8(math.Ceil(float64(bitsFor(val)) / 8)) +} + +func minBytesForUint64(value uint64) byte { + if value == 0 { + return 0 + } + size := byte(1) + for value > 0xff { + size++ + value >>= 8 + } + return size +} + +func minBytesForUint16(value uint16) byte { + if value == 0 { + return 0 + } + if value <= 0xff { + return 1 + } + return 2 +} + +func bitsFor(val uint64) int { + if val == 0 { + return 0 + } + return 64 - bits.LeadingZeros64(val) +} + +func readBigInt(size int, data *[]byte) (*big.Int, error) { + if len(*data) < size { + return nil, fmt.Errorf("insufficient data for uint%v", 8*size) + } + + value := new(big.Int).SetBytes((*data)[:size]) + *data = (*data)[size:] + return value, nil +} + +func readUintX(size uint8, data *[]byte) (uint64, error) { + if len(*data) < int(size) { + return 0, fmt.Errorf("insufficient data for uint%d", size*8) + } + var value uint64 + for i := range size { + value = (value << 8) | uint64((*data)[i]) + } + *data = (*data)[size:] + return value, nil +} + +func writeUintX(writer io.Writer, value uint64, size byte) error { + if size == 0 { + _, err := writer.Write([]byte{0}) + if err != nil { + return fmt.Errorf("unable to write uint0: %w", err) + } + return nil + } + buf := make([]byte, size) + for i := int(size) - 1; i >= 0; i-- { + buf[i] = byte(value & 0xff) + value >>= 8 + } + _, err := writer.Write(buf) + return err +} + +func readUint16(data *[]byte) (uint16, error) { + if len(*data) < 2 { + return 0, fmt.Errorf("insufficient data for uint16") + } + value := binary.BigEndian.Uint16(*data) + *data = (*data)[2:] + return value, nil +} + +func readUint24(data *[]byte) (uint32, error) { + if len(*data) < 3 { + return 0, fmt.Errorf("insufficient data for uint24") + } + value := uint32((*data)[0])<<16 | uint32((*data)[1])<<8 | uint32((*data)[2]) + *data = (*data)[3:] + return value, nil +} + +func writeUint8(writer io.Writer, value uint8) error { + _, err := writer.Write([]byte{value}) + return err +} + +func writeUint16(writer io.Writer, value uint16) error { + buf := []byte{ + byte(value >> 8), + byte(value), + } + _, err := writer.Write(buf) + return err +} + +func writeUint24(writer io.Writer, value uint32) error { + if value > 0xffffff { + return fmt.Errorf("%v does not fit in a uint24", value) + } + buf := []byte{ + byte(value >> 16), + byte(value >> 8), + byte(value), + } + _, err := writer.Write(buf) + return err +} + +func toUint8(number any) (uint8, error) { + switch number := number.(type) { + case int64: + if number < 0 || number > 0xff { + return 0, fmt.Errorf("%v does not fit in uint8", number) + } + return uint8(number), nil + case float64: + if number < 0 || number > 0xff || math.Floor(number) != number { + return 0, fmt.Errorf("%v does not fit in uint8", number) + } + return uint8(number), nil + case string: + n, err := strconv.ParseUint(number, 10, 8) + if err != nil { + return 0, fmt.Errorf("unable to parse string %s as uint8: %w", number, err) + } + return uint8(n), nil + default: + return 0, fmt.Errorf("unable to convert %v to uint8", number) + } +} + +func toUint16(number any) (uint16, error) { + switch number := number.(type) { + case int64: + if number < 0 || number > 0xffff { + return 0, fmt.Errorf("%v does not fit in uint16", number) + } + return uint16(number), nil + case float64: + if number < 0 || number > 0xffff || math.Floor(number) != number { + return 0, fmt.Errorf("%v does not fit in uint16", number) + } + return uint16(number), nil + case string: + n, err := strconv.ParseUint(number, 10, 16) + if err != nil { + return 0, fmt.Errorf("unable to parse string %s as uint16: %w", number, err) + } + return uint16(n), nil + default: + return 0, fmt.Errorf("unable to convert %v to uint16", number) + } +} + +func toUint64(number any) (uint64, error) { + switch number := number.(type) { + case int64: + if number < 0 { + return 0, fmt.Errorf("%v does not fit in uint64", number) + } + return uint64(number), nil + case float64: + if number < 0 || number > math.MaxUint64 || math.Floor(number) != number { + return 0, fmt.Errorf("%v does not fit in uint64", number) + } + return uint64(number), nil + case string: + n, err := strconv.ParseUint(number, 10, 64) + if err != nil { + return 0, fmt.Errorf("unable to parse string %s as uint64: %w", number, err) + } + return n, nil + default: + return 0, fmt.Errorf("unable to convert %v to uint64", number) + } +} + +func hasKeys(object map[string]any, keys []string) bool { + if len(object) != len(keys) { + return false + } + for _, key := range keys { + if _, ok := object[key]; !ok { + return false + } + } + return true +} + +var maxUint256 = new(big.Int).SetBytes([]byte{ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +}) diff --git a/core/v3/v3_test.go b/core/v3/v3_test.go new file mode 100644 index 00000000..df900026 --- /dev/null +++ b/core/v3/v3_test.go @@ -0,0 +1,50 @@ +package v3_test + +import ( + "testing" + + v3 "github.com/0xsequence/go-sequence/core/v3" + "github.com/BurntSushi/toml" + "github.com/davecgh/go-spew/spew" + "github.com/stretchr/testify/assert" +) + +const configTOML = ` + threshold = 5 + checkpoint = 1 + + [tree.left.left] + weight = 3 + address = "0x1111111111111111111111111111111111111111" + + [tree.left.right] + weight = 3 + address = "0x2222222222222222222222222222222222222222" + + [tree.right.left] + weight = 2 + address = "0x3333333333333333333333333333333333333333" + + [tree.right.right] + weight = 2 + threshold = 1 + + [tree.right.right.tree.left] + weight = 1 + address = "0x4444444444444444444444444444444444444444" + + [tree.right.right.tree.right] + weight = 1 + address = "0x5555555555555555555555555555555555555555" +` + +func TestWalletConfigTOML(t *testing.T) { + var config map[string]any + _, err := toml.Decode(configTOML, &config) + assert.NoError(t, err) + + config_, err := v3.Core.DecodeWalletConfig(config) + assert.NoError(t, err) + + spew.Dump(config_) +} diff --git a/deployer/deployer.go b/deployer/deployer.go index a531f867..a1532f1e 100644 --- a/deployer/deployer.go +++ b/deployer/deployer.go @@ -105,6 +105,9 @@ func (u *UniversalDeployer) Deploy(ctx context.Context, contractABI abi.ABI, con if len(code) == 0 { return common.Address{}, fmt.Errorf("can't deploy universal deployer") } + if err != nil { + return common.Address{}, fmt.Errorf("deployer: %w", err) + } } // Deploying contract @@ -135,6 +138,9 @@ func (u *UniversalDeployer) Deploy(ctx context.Context, contractABI abi.ABI, con Data: input, GasLimit: uint64(gasLimit), }) + if err != nil { + return common.Address{}, fmt.Errorf("deployer: deploy new transaction: %w", err) + } _, waitTx, err := u.Wallet.SendTransaction(ctx, tx) if err != nil { @@ -153,6 +159,9 @@ func (u *UniversalDeployer) Deploy(ctx context.Context, contractABI abi.ABI, con if len(code) == 0 { return common.Address{}, fmt.Errorf("can't deploy contract") } + if err != nil { + return common.Address{}, fmt.Errorf("deployer: deploy contract codeAt: %w", err) + } return contractAddress, nil } @@ -251,7 +260,7 @@ func (u *UniversalDeployer) deployUniversalDeployer1(ctx context.Context, txPara if err != nil { return fmt.Errorf("deployer: %w", err) } - if universalDeployerCodeCheck == nil || len(universalDeployerCodeCheck) == 0 { + if universalDeployerCodeCheck == nil { return fmt.Errorf("deployer (deployUniversalDeployer1): failed to deploy stage 1 deployer") } diff --git a/deployer/deployer_test.go b/deployer/deployer_test.go index b8f87d55..75b057d0 100644 --- a/deployer/deployer_test.go +++ b/deployer/deployer_test.go @@ -37,10 +37,26 @@ func TestDeployer(t *testing.T) { ud, err := deployer.NewUniversalDeployer(testWallet) assert.NoError(t, err) - testSequenceContext := testutil.V1SequenceContext() + testV1SequenceContext := testutil.V1SequenceContext() // Deploy sequence wallet-contract factory and ensure it equals the expected value in testutil - walletFactoryAddress, err := ud.Deploy(context.Background(), contracts.V1.WalletFactory.ABI, contracts.V1.WalletFactory.Bin, 0, nil, 1000000) + V1WalletFactoryAddress, err := ud.Deploy(context.Background(), contracts.V1.WalletFactory.ABI, contracts.V1.WalletFactory.Bin, 0, nil, 1000000) assert.NoError(t, err) - assert.Equal(t, testSequenceContext.FactoryAddress, walletFactoryAddress) + assert.Equal(t, testV1SequenceContext.FactoryAddress, V1WalletFactoryAddress) + + testV2SequenceContext := testutil.V2SequenceContext() + + // Deploy sequence wallet-contract factory and ensure it equals the expected value in testutil + V2WalletFactoryAddress, err := ud.Deploy(context.Background(), contracts.V2.WalletFactory.ABI, contracts.V2.WalletFactory.Bin, 0, nil, 1000000) + assert.NoError(t, err) + // v2 is deployed w/ the EIP2470 deployer, not the universal deployer + assert.NotEqual(t, testV2SequenceContext.FactoryAddress, V2WalletFactoryAddress) + + testV3SequenceContext := testutil.V3SequenceContext() + + // Deploy sequence wallet-contract factory and ensure it equals the expected value in testutil + V3WalletFactoryAddress, err := ud.Deploy(context.Background(), contracts.V3.WalletFactory.ABI, contracts.V3.WalletFactory.Bin, 0, nil, 1000000) + assert.NoError(t, err) + // v3 is deployed w/ the EIP2470 deployer, not the universal deployer + assert.NotEqual(t, testV3SequenceContext.FactoryAddress, V3WalletFactoryAddress) } diff --git a/deployer/eip2740_deployer.go b/deployer/eip2470_deployer.go similarity index 78% rename from deployer/eip2740_deployer.go rename to deployer/eip2470_deployer.go index a671ed1d..cc12d05c 100644 --- a/deployer/eip2740_deployer.go +++ b/deployer/eip2470_deployer.go @@ -17,12 +17,12 @@ import ( ) var ( - EIP2740_EOA_DEPLOYER_ADDRESS = common.HexToAddress("0xBb6e024b9cFFACB947A71991E386681B1Cd1477D") - EIP2740_DEPLOYER_ADDRESS = common.HexToAddress("0xce0042B868300000d44A59004Da54A005ffdcf9f") - EIP2740_DEPLOYER_TX = "0xf9016c8085174876e8008303c4d88080b90154608060405234801561001057600080fd5b50610134806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80634af63f0214602d575b600080fd5b60cf60048036036040811015604157600080fd5b810190602081018135640100000000811115605b57600080fd5b820183602082011115606c57600080fd5b80359060200191846001830284011164010000000083111715608d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550509135925060eb915050565b604080516001600160a01b039092168252519081900360200190f35b6000818351602085016000f5939250505056fea26469706673582212206b44f8a82cb6b156bfcc3dc6aadd6df4eefd204bc928a4397fd15dacf6d5320564736f6c634300060200331b83247000822470" - EIP2740_DEPLOYER_FUNDING = big.NewInt(1).Mul(big.NewInt(300), big.NewInt(100_000_000_000_000)) + EIP2470_EOA_DEPLOYER_ADDRESS = common.HexToAddress("0xBb6e024b9cFFACB947A71991E386681B1Cd1477D") + EIP2470_DEPLOYER_ADDRESS = common.HexToAddress("0xce0042B868300000d44A59004Da54A005ffdcf9f") + EIP2470_DEPLOYER_TX = "0xf9016c8085174876e8008303c4d88080b90154608060405234801561001057600080fd5b50610134806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80634af63f0214602d575b600080fd5b60cf60048036036040811015604157600080fd5b810190602081018135640100000000811115605b57600080fd5b820183602082011115606c57600080fd5b80359060200191846001830284011164010000000083111715608d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550509135925060eb915050565b604080516001600160a01b039092168252519081900360200190f35b6000818351602085016000f5939250505056fea26469706673582212206b44f8a82cb6b156bfcc3dc6aadd6df4eefd204bc928a4397fd15dacf6d5320564736f6c634300060200331b83247000822470" + EIP2470_DEPLOYER_FUNDING = big.NewInt(1).Mul(big.NewInt(300), big.NewInt(100_000_000_000_000)) - EIP2740_DEPLOYER_ABI = ethcontract.MustParseABI(`[ + EIP2470_DEPLOYER_ABI = ethcontract.MustParseABI(`[ { "constant": false, "inputs": [ @@ -52,13 +52,13 @@ var ( ]`) ) -type EIP2740Deployer struct { +type EIP2470Deployer struct { Wallet *ethwallet.Wallet provider *ethrpc.Provider } -func NewEIP2740Deployer(wallet *ethwallet.Wallet) (*EIP2740Deployer, error) { - e := &EIP2740Deployer{ +func NewEIP2470Deployer(wallet *ethwallet.Wallet) (*EIP2470Deployer, error) { + e := &EIP2470Deployer{ Wallet: wallet, } @@ -70,21 +70,24 @@ func NewEIP2740Deployer(wallet *ethwallet.Wallet) (*EIP2740Deployer, error) { return e, nil } -func (e *EIP2740Deployer) Deploy(ctx context.Context, contractABI abi.ABI, contractBin []byte, contractInstance uint, txParams interface{}, gasLimit uint, contractArgs ...interface{}) (common.Address, error) { +func (e *EIP2470Deployer) Deploy(ctx context.Context, contractABI abi.ABI, contractBin []byte, contractInstance uint, txParams interface{}, gasLimit uint, contractArgs ...interface{}) (common.Address, error) { // Deploy universal deployer 2 if not yet deployed - code, err := e.provider.CodeAt(ctx, EIP2740_DEPLOYER_ADDRESS, nil) + code, err := e.provider.CodeAt(ctx, EIP2470_DEPLOYER_ADDRESS, nil) if err != nil { return common.Address{}, fmt.Errorf("deployer: %w", err) } if len(code) == 0 { - err = e.deployEIP2740Deployer(ctx, txParams) + err = e.deployEIP2470Deployer(ctx, txParams) if err != nil { return common.Address{}, err } code, err = e.provider.CodeAt(ctx, UNIVERSAL_DEPLOYER_2_ADDRESS, nil) if len(code) == 0 { - return common.Address{}, fmt.Errorf("can't deploy eip2740 deployer") + return common.Address{}, fmt.Errorf("can't deploy EIP2470 deployer") + } + if err != nil { + return common.Address{}, fmt.Errorf("deployer: deploy codeAt: %w", err) } } @@ -105,19 +108,22 @@ func (e *EIP2740Deployer) Deploy(ctx context.Context, contractABI abi.ABI, contr return contractAddress, nil } - // Deploy the contract via EIP2740Deployer by calling the deploy contract method + // Deploy the contract via EIP2470Deployer by calling the deploy contract method var salt [32]byte big.NewInt(int64(contractInstance)).SetBytes(salt[:]) - input, err := EIP2740_DEPLOYER_ABI.Pack("deploy", deployData, salt) + input, err := EIP2470_DEPLOYER_ABI.Pack("deploy", deployData, salt) if err != nil { return common.Address{}, fmt.Errorf("deployer: deploy pack: %w", err) } tx, err := e.Wallet.NewTransaction(ctx, ðtxn.TransactionRequest{ - To: &EIP2740_DEPLOYER_ADDRESS, + To: &EIP2470_DEPLOYER_ADDRESS, Data: input, GasLimit: uint64(gasLimit), }) + if err != nil { + return common.Address{}, fmt.Errorf("deployer: deploy new transaction: %w", err) + } _, waitTx, err := e.Wallet.SendTransaction(ctx, tx) if err != nil { @@ -136,21 +142,24 @@ func (e *EIP2740Deployer) Deploy(ctx context.Context, contractABI abi.ABI, contr if len(code) == 0 { return common.Address{}, fmt.Errorf("can't deploy contract") } + if err != nil { + return common.Address{}, fmt.Errorf("deployer: deploy contract codeAt: %w", err) + } return contractAddress, nil } -func (e *EIP2740Deployer) deployEIP2740Deployer(ctx context.Context, txParams interface{}) error { - deployerBalance, err := e.provider.BalanceAt(ctx, EIP2740_EOA_DEPLOYER_ADDRESS, nil) +func (e *EIP2470Deployer) deployEIP2470Deployer(ctx context.Context, txParams interface{}) error { + deployerBalance, err := e.provider.BalanceAt(ctx, EIP2470_EOA_DEPLOYER_ADDRESS, nil) if err != nil { return fmt.Errorf("deployer (deployUniversalDeployer1): %w", err) } // ensure deployer's wallet balance has necessary funding - if deployerBalance.Cmp(EIP2740_DEPLOYER_FUNDING) < 0 { + if deployerBalance.Cmp(EIP2470_DEPLOYER_FUNDING) < 0 { signedTxn, err := e.Wallet.NewTransaction(ctx, ðtxn.TransactionRequest{ - To: &EIP2740_EOA_DEPLOYER_ADDRESS, - ETHValue: EIP2740_DEPLOYER_FUNDING, + To: &EIP2470_EOA_DEPLOYER_ADDRESS, + ETHValue: EIP2470_DEPLOYER_FUNDING, }) if err != nil { return err @@ -171,7 +180,7 @@ func (e *EIP2740Deployer) deployEIP2740Deployer(ctx context.Context, txParams in // deploying universal deployer contract provider := e.Wallet.GetProvider() - txHash, err := provider.SendRawTransaction(ctx, EIP2740_DEPLOYER_TX) + txHash, err := provider.SendRawTransaction(ctx, EIP2470_DEPLOYER_TX) if err != nil { return err } @@ -185,18 +194,18 @@ func (e *EIP2740Deployer) deployEIP2740Deployer(ctx context.Context, txParams in } // lets check the universal deployer address is now deployed, after txn above - universalDeployerCodeCheck, err := provider.CodeAt(ctx, EIP2740_DEPLOYER_ADDRESS, nil) + universalDeployerCodeCheck, err := provider.CodeAt(ctx, EIP2470_DEPLOYER_ADDRESS, nil) if err != nil { return fmt.Errorf("deployer: %w", err) } - if universalDeployerCodeCheck == nil || len(universalDeployerCodeCheck) == 0 { + if universalDeployerCodeCheck == nil { return fmt.Errorf("deployer (deployUniversalDeployer1): failed to deploy stage 1 deployer") } return nil } -func (e *EIP2740Deployer) ComputeCreate2Address(contractABI abi.ABI, contractBin []byte, contractInstance uint, contractArgs ...interface{}) (common.Address, []byte, error) { +func (e *EIP2470Deployer) ComputeCreate2Address(contractABI abi.ABI, contractBin []byte, contractInstance uint, contractArgs ...interface{}) (common.Address, []byte, error) { var input []byte var err error @@ -219,7 +228,7 @@ func (e *EIP2740Deployer) ComputeCreate2Address(contractABI abi.ABI, contractBin hashPack, err := ethcoder.SolidityPack( []string{"bytes1", "address", "bytes32", "bytes32"}, - []interface{}{[1]byte{255}, EIP2740_DEPLOYER_ADDRESS, salt, codeHash}, + []interface{}{[1]byte{255}, EIP2470_DEPLOYER_ADDRESS, salt, codeHash}, ) if err != nil { return common.Address{}, nil, fmt.Errorf("ComputeCreate2Address hashPack: %w", err) diff --git a/deployer/eip2470_deployer_test.go b/deployer/eip2470_deployer_test.go new file mode 100644 index 00000000..8572ed31 --- /dev/null +++ b/deployer/eip2470_deployer_test.go @@ -0,0 +1,43 @@ +package deployer_test + +import ( + "context" + "testing" + + "github.com/0xsequence/go-sequence/contracts" + "github.com/0xsequence/go-sequence/deployer" + "github.com/0xsequence/go-sequence/testutil" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestEIP2470Deployer(t *testing.T) { + assert.Equal(t, testChain.ChainID().Uint64(), uint64(1337)) + + testWallet := testChain.MustWallet(5) + + eip2470Deployer, err := deployer.NewEIP2470Deployer(testWallet) + require.NoError(t, err) + + testV1SequenceContext := testutil.V1SequenceContext() + + // Deploy sequence wallet-contract factory and ensure it equals the expected value in testutil + V1WalletFactoryAddress, err := eip2470Deployer.Deploy(context.Background(), contracts.V1.WalletFactory.ABI, contracts.V1.WalletFactory.Bin, 0, nil, 1000000) + assert.NoError(t, err) + // v1 is deployed w/ the universal deployer, not the EIP2470 deployer + assert.NotEqual(t, testV1SequenceContext.FactoryAddress, V1WalletFactoryAddress) + + testV2SequenceContext := testutil.V2SequenceContext() + + // Deploy sequence wallet-contract factory and ensure it equals the expected value in testutil + V2WalletFactoryAddress, err := eip2470Deployer.Deploy(context.Background(), contracts.V2.WalletFactory.ABI, contracts.V2.WalletFactory.Bin, 0, nil, 1000000) + assert.NoError(t, err) + assert.Equal(t, testV2SequenceContext.FactoryAddress, V2WalletFactoryAddress) + + testV3SequenceContext := testutil.V3SequenceContext() + + // Deploy sequence wallet-contract factory and ensure it equals the expected value in testutil + V3WalletFactoryAddress, err := eip2470Deployer.Deploy(context.Background(), contracts.V3.WalletFactory.ABI, contracts.V3.WalletFactory.Bin, 0, nil, 1000000) + assert.NoError(t, err) + assert.Equal(t, testV3SequenceContext.FactoryAddress, V3WalletFactoryAddress) +} diff --git a/deployer/eip2740_deployer_test.go b/deployer/eip2740_deployer_test.go deleted file mode 100644 index 440e888f..00000000 --- a/deployer/eip2740_deployer_test.go +++ /dev/null @@ -1,28 +0,0 @@ -package deployer_test - -import ( - "context" - "testing" - - "github.com/0xsequence/go-sequence/contracts" - "github.com/0xsequence/go-sequence/deployer" - "github.com/0xsequence/go-sequence/testutil" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) - -func TestEIP2740Deployer(t *testing.T) { - assert.Equal(t, testChain.ChainID().Uint64(), uint64(1337)) - - testWallet := testChain.MustWallet(5) - - eip2740Deployer, err := deployer.NewEIP2740Deployer(testWallet) - require.NoError(t, err) - - testSequenceContext := testutil.V2SequenceContext() - - // Deploy sequence wallet-contract factory and ensure it equals the expected value in testutil - walletFactoryAddress, err := eip2740Deployer.Deploy(context.Background(), contracts.V2.WalletFactory.ABI, contracts.V2.WalletFactory.Bin, 0, nil, 1000000) - assert.NoError(t, err) - assert.Equal(t, testSequenceContext.FactoryAddress, walletFactoryAddress) -} diff --git a/digests.go b/digests.go index 68bdb3dd..33714980 100644 --- a/digests.go +++ b/digests.go @@ -6,6 +6,7 @@ import ( "github.com/0xsequence/ethkit/ethcoder" "github.com/0xsequence/ethkit/go-ethereum/common" + v3 "github.com/0xsequence/go-sequence/core/v3" ) /* @@ -103,6 +104,11 @@ func ComputeMetaTxnID(chainID *big.Int, address common.Address, txns Transaction return ComputeMetaTxnIDFromDigest(chainID, address, digest) } +func ComputeMetaTxnIDFromCallsPayload(payload *v3.CallsPayload) (MetaTxnID, common.Hash, error) { + digest := payload.Digest() + return MetaTxnID(digest.String()[2:]), digest.Hash, nil +} + func ComputeMetaTxnIDFromDigest(chainID *big.Int, address common.Address, digest common.Hash) (MetaTxnID, common.Hash, error) { subDigest, err := SubDigest(chainID, address, digest) if err != nil { diff --git a/estimator.go b/estimator.go index dad210a1..a4ca578b 100644 --- a/estimator.go +++ b/estimator.go @@ -17,10 +17,10 @@ import ( "github.com/0xsequence/ethkit/go-ethereum/common" "github.com/0xsequence/ethkit/go-ethereum/common/hexutil" "github.com/0xsequence/go-sequence/contracts" - "github.com/0xsequence/go-sequence/contracts/gen/v1/walletgasestimator" "github.com/0xsequence/go-sequence/core" v1 "github.com/0xsequence/go-sequence/core/v1" v2 "github.com/0xsequence/go-sequence/core/v2" + v3 "github.com/0xsequence/go-sequence/core/v3" "github.com/goware/cachestore" "github.com/goware/cachestore/memlru" ) @@ -64,8 +64,6 @@ type Estimator struct { cache cachestore.Store[[]byte] } -type SimulateResult walletgasestimator.MainModuleGasEstimationSimulateResult - var defaultEstimator = &Estimator{ BaseCost: 21000, DataOneCost: 16, @@ -75,6 +73,7 @@ var defaultEstimator = &Estimator{ var gasEstimatorCode = hexutil.Encode(contracts.GasEstimator.DeployedBin) var walletGasEstimatorCode = hexutil.Encode(contracts.V1.WalletGasEstimator.DeployedBin) var walletGasEstimatorCodeV2 = hexutil.Encode(contracts.V2.WalletGasEstimator.DeployedBin) +var walletGasEstimatorCodeV3 = hexutil.Encode(contracts.V3.WalletEstimator.DeployedBin) func NewEstimator() *Estimator { defaultCache, _ := memlru.NewWithSize[[]byte](defaultEstimatorCacheSize) @@ -154,14 +153,12 @@ func (e *Estimator) EstimateCall(ctx context.Context, provider *ethrpc.Provider, from: {Code: gasEstimatorCode}, } - if overrides != nil { - for key, value := range overrides { - if key == from { - return nil, fmt.Errorf("can't override address from") - } - - finalOverrides[key] = value + for key, value := range overrides { + if key == from { + return nil, fmt.Errorf("can't override address from") } + + finalOverrides[key] = value } estimator := ethcontract.NewContractCaller(from, contracts.GasEstimator.ABI, provider) @@ -193,7 +190,10 @@ func (e *Estimator) EstimateCall(ctx context.Context, provider *ethrpc.Provider, var result []byte var gas *big.Int - if err := ethcoder.AbiDecoder([]string{"bool", "bytes", "uint256"}, resBytes, []interface{}{&success, &result, &gas}); err != nil { + // Uses `GasEstimator.sol` contract to estimate the gas usage + // Params `estimate(address _to, bytes calldata _data)` + // Returns `(bool success, bytes memory result, uint256 gas)` + if err := ethcoder.ABIUnpackArgumentsByRef([]string{"bool", "bytes", "uint256"}, resBytes, []interface{}{&success, &result, &gas}); err != nil { return nil, err } @@ -288,10 +288,10 @@ func (e *Estimator) isEOA(ctx context.Context, provider *ethrpc.Provider, addres } func (e *Estimator) PickSigners(ctx context.Context, walletConfig core.WalletConfig, isEoa map[common.Address]bool) (map[common.Address]bool, error) { - type SortedSigner struct { - s *v1.WalletConfigSigner - i int - } + // type SortedSigner struct { + // s *v1.WalletConfigSigner + // i int + // } // Create a copy of the signers array // this will be sorted and used to pick the worst case scenario for the signers @@ -397,6 +397,26 @@ func (e *Estimator) BuildStubSignature(walletConfig core.WalletConfig, willSign, }, map[common.Address]bool{address1: false, address2: true, address3: true}, map[common.Address]bool{address1: true, address2: true, address3: true}) + } else if _, ok := walletConfig.(*v3.WalletConfig); ok { + sig = e.BuildStubSignature(&v3.WalletConfig{ + Threshold_: 2, + Tree: v3.WalletConfigTreeNodes( + &v3.WalletConfigTreeAddressLeaf{ + Address: address1, + Weight: 1, + }, + &v3.WalletConfigTreeAddressLeaf{ + Address: address2, + Weight: 1, + }, + &v3.WalletConfigTreeAddressLeaf{ + Address: address3, + Weight: 1, + }, + ), + }, + map[common.Address]bool{address1: false, address2: true, address3: true}, + map[common.Address]bool{address1: true, address2: true, address3: true}) } return core.SignerSignatureTypeEIP1271, sig, nil @@ -428,12 +448,28 @@ func (e *Estimator) BuildStubSignature(walletConfig core.WalletConfig, willSign, return nil } return encoded + } else if confV3, ok := walletConfig.(*v3.WalletConfig); ok { + sigV3, err := confV3.BuildRegularSignature(context.Background(), stubSigner, false) + if err != nil { + return nil + } + + encoded, err := sigV3.Data() + if err != nil { + return nil + } + return encoded } else { return nil } } func (e *Estimator) Estimate(ctx context.Context, provider *ethrpc.Provider, address common.Address, walletConfig core.WalletConfig, walletContext WalletContext, txs Transactions) (uint64, error) { + chainID, err := provider.ChainID(ctx) + if err != nil { + return 0, fmt.Errorf("unable to get chain id: %w", err) + } + isEOA, err := e.AreEOAs(ctx, provider, walletConfig) if err != nil { return 0, err @@ -457,6 +493,11 @@ func (e *Estimator) Estimate(ctx context.Context, provider *ethrpc.Provider, add walletContext.MainModuleAddress: {Code: walletGasEstimatorCodeV2}, walletContext.MainModuleUpgradableAddress: {Code: walletGasEstimatorCodeV2}, } + } else if _, ok := walletConfig.(*v3.WalletConfig); ok { + overrides = map[common.Address]*CallOverride{ + walletContext.MainModuleAddress: {Code: walletGasEstimatorCodeV3}, + walletContext.MainModuleUpgradableAddress: {Code: walletGasEstimatorCodeV3}, + } } else { return 0, fmt.Errorf("unknown wallet config type") } @@ -472,34 +513,20 @@ func (e *Estimator) Estimate(ctx context.Context, provider *ethrpc.Provider, add } } - estimates := make([]*big.Int, len(txs)+1) - // The nonce is ignored by the MainModuleGasEstimator // so we use a stub nonce takes at least 4 bytes nonce := big.NewInt(4294967295) - // Compute gas estimation for slices of all transactions - // including no transaction execution and all transactions - - for i := range estimates { - subTxs := txs[0:i] - - encTxs, err := subTxs.EncodedTransactions() + switch walletConfig.(type) { + case *v1.WalletConfig: + encoded, err := txs.EncodedTransactions() if err != nil { return 0, err } - var execData []byte - if _, ok := walletConfig.(*v1.WalletConfig); ok { - execData, err = contracts.V1.WalletMainModule.Encode("execute", encTxs, nonce, signature) - if err != nil { - return 0, err - } - } else if _, ok := walletConfig.(*v2.WalletConfig); ok { - execData, err = contracts.V2.WalletMainModule.Encode("execute", encTxs, nonce, signature) - if err != nil { - return 0, err - } + execData, err := contracts.V1.WalletMainModule.Encode("execute", encoded, nonce, signature) + if err != nil { + return 0, err } estimated, err := e.EstimateCall(ctx, provider, &EstimateTransaction{ @@ -510,131 +537,53 @@ func (e *Estimator) Estimate(ctx context.Context, provider *ethrpc.Provider, add return 0, err } - estimates[i] = estimated - } - - // Apply gas limits to all transactions - for i := range txs { - txs[i].GasLimit = big.NewInt(0).Sub(estimates[i+1], estimates[i]) - } - - return estimates[len(estimates)-1].Uint64(), nil -} - -func V1Simulate(provider *ethrpc.Provider, wallet common.Address, transactions Transactions, block string, overrides map[common.Address]*CallOverride) ([]SimulateResult, error) { - if block == "" { - block = "latest" - } - - encoded, err := transactions.EncodedTransactions() - if err != nil { - return nil, err - } - - callData, err := contracts.V1.WalletGasEstimator.Encode("simulateExecute", encoded) - if err != nil { - return nil, err - } - - type ethCallParams struct { - To common.Address `json:"to"` - Data string `json:"data"` - } - - params := ethCallParams{ - To: wallet, - Data: hexutil.Encode(callData), - } + return estimated.Uint64(), nil - allOverrides := map[common.Address]*CallOverride{ - wallet: {Code: walletGasEstimatorCode}, - } - for address, override := range overrides { - if address == wallet { - return nil, fmt.Errorf("cannot override wallet address %v", wallet.Hex()) + case *v2.WalletConfig: + encoded, err := txs.EncodedTransactions() + if err != nil { + return 0, err } - allOverrides[address] = override - } - - var response string - rpcCall := ethrpc.NewCallBuilder[string]("eth_call", nil, params, block, allOverrides) - _, err = provider.Do(context.Background(), rpcCall.Into(&response)) - if err != nil { - return nil, err - } - - resultsData, err := hexutil.Decode(response) - if err != nil { - return nil, err - } - - var results []SimulateResult - err = contracts.V1.WalletGasEstimator.Decode(&results, "simulateExecute", resultsData) - if err != nil { - return nil, err - } - - return results, nil -} - -func V2Simulate(provider *ethrpc.Provider, wallet common.Address, transactions Transactions, block string, overrides map[common.Address]*CallOverride) ([]SimulateResult, error) { - if block == "" { - block = "latest" - } - - encoded, err := transactions.EncodedTransactions() - if err != nil { - return nil, err - } - - callData, err := contracts.V2.WalletGasEstimator.Encode("simulateExecute", encoded) - if err != nil { - return nil, err - } + execData, err := contracts.V2.WalletMainModule.Encode("execute", encoded, nonce, signature) + if err != nil { + return 0, err + } - type ethCallParams struct { - To common.Address `json:"to"` - Data string `json:"data"` - } + estimated, err := e.EstimateCall(ctx, provider, &EstimateTransaction{ + To: address, + Data: execData, + }, overrides, "") + if err != nil { + return 0, err + } - params := ethCallParams{ - To: wallet, - Data: hexutil.Encode(callData), - } + return estimated.Uint64(), nil - allOverrides := map[common.Address]*CallOverride{ - wallet: {Code: walletGasEstimatorCodeV2}, - } - for address, override := range overrides { - if address == wallet { - return nil, fmt.Errorf("cannot override wallet address %v", wallet.Hex()) + case *v3.WalletConfig: + // TODO: set nonce space + payload, err := txs.Payload(address, chainID, new(big.Int), nonce) + if err != nil { + return 0, err } - allOverrides[address] = override - } + execData, err := contracts.V3.WalletEstimator.Encode("estimate", payload.Encode(address), signature) + if err != nil { + return 0, err + } - var response string - rpcCall := ethrpc.NewCallBuilder[string]("eth_call", nil, params, block, allOverrides) - _, err = provider.Do(context.Background(), rpcCall.Into(&response)) - if err != nil { - return nil, err - } + estimated, err := e.EstimateCall(ctx, provider, &EstimateTransaction{ + To: address, + Data: execData, + }, overrides, "") + if err != nil { + return 0, err + } - resultsData, err := hexutil.Decode(response) - if err != nil { - return nil, err - } + // our v3 estimator is a bit more efficient than the on-chain deployed bytecode for some reason + return estimated.Uint64() * 103 / 100, nil - var results []SimulateResult - err = contracts.V2.WalletGasEstimator.Decode(&results, "simulateExecute", resultsData) - if err != nil { - return nil, err + default: + return 0, fmt.Errorf("unknown wallet config type %T", walletConfig) } - - return results, nil -} - -func Simulate(provider *ethrpc.Provider, wallet common.Address, transactions Transactions, block string, overrides map[common.Address]*CallOverride) ([]SimulateResult, error) { - return V2Simulate(provider, wallet, transactions, block, overrides) } diff --git a/estimator/estimator.go b/estimator/estimator.go new file mode 100644 index 00000000..e83c0aad --- /dev/null +++ b/estimator/estimator.go @@ -0,0 +1,245 @@ +package estimator + +import ( + "context" + "crypto/rand" + "encoding/json" + "fmt" + "math/big" + + "github.com/0xsequence/ethkit/ethrpc" + "github.com/0xsequence/ethkit/go-ethereum/accounts/abi" + "github.com/0xsequence/ethkit/go-ethereum/common" + "github.com/0xsequence/ethkit/go-ethereum/common/hexutil" + "github.com/0xsequence/ethkit/go-ethereum/core/types" + "github.com/0xsequence/ethkit/go-ethereum/ethclient/gethclient" + "github.com/0xsequence/go-sequence/contracts" +) + +type AddressPreconditions struct { + Balance *big.Int + ERC20 map[common.Address]ERC20Preconditions + ERC721 map[common.Address]ERC721Preconditions + ERC1155 map[common.Address]ERC1155Preconditions +} + +type ERC20Preconditions struct { + Balance *big.Int + Allowance map[common.Address]*big.Int +} + +type ERC721Preconditions struct { + IsOwner map[string]bool + IsApproved map[string]bool +} + +type ERC1155Preconditions struct { + Balance map[string]*big.Int + IsApprovedForAll map[common.Address]bool +} + +func Estimate( + ctx context.Context, + to common.Address, + data []byte, + preconditions map[common.Address]AddressPreconditions, + provider *ethrpc.Provider, +) (uint64, error) { + overrides := map[common.Address]gethclient.OverrideAccount{} + + for address, addressPreconditions := range preconditions { + if addressPreconditions.Balance != nil && addressPreconditions.Balance.Sign() > 0 { + overrides[address] = gethclient.OverrideAccount{Balance: addressPreconditions.Balance} + } + } + + for { + list, err := accessList(ctx, to, data, overrides, provider) + if err != nil { + return 0, err + } + + if !override(overrides, preconditions, list) { + break + } + } + + var from common.Address + rand.Read(from[:]) + + overrides[from] = gethclient.OverrideAccount{Code: contracts.GasEstimator.DeployedBin} + + input, err := contracts.GasEstimator.Encode("estimate", to, data) + if err != nil { + return 0, fmt.Errorf("unable to encode estimate call: %w", err) + } + + var encoded string + _, err = provider.Do(ctx, ethrpc.NewCallBuilder[string]("eth_call", nil, map[string]any{"to": from, "input": hexutil.Encode(input)}, "latest", overrides).Into(&encoded)) + if err != nil { + return 0, fmt.Errorf("unable to estimate: %w", err) + } + + decoded, err := hexutil.Decode(encoded) + if err != nil { + return 0, fmt.Errorf("unable to decode estimate result: %w", err) + } + + var result struct { + Success bool `abi:"success"` + Result []byte `abi:"result"` + Gas *big.Int `abi:"gas"` + } + + err = contracts.GasEstimator.Decode(&result, "estimate", decoded) + if err != nil { + return 0, fmt.Errorf("unable to decode estimate result: %w", err) + } + if !result.Success { + message, err := abi.UnpackRevert(result.Result) + if err == nil { + return 0, fmt.Errorf("simulation with preconditions failed: %v (gas: %v)", message, result.Gas) + } else { + return 0, fmt.Errorf("simulation with preconditions failed: %v (gas: %v)", hexutil.Encode(result.Result), result.Gas) + } + } + + return result.Gas.Uint64(), nil +} + +func override( + overrides map[common.Address]gethclient.OverrideAccount, + preconditions map[common.Address]AddressPreconditions, + list types.AccessList, +) bool { + var updated bool + + for _, slots := range list { + for _, addressPreconditions := range preconditions { + if erc20Preconditions, ok := addressPreconditions.ERC20[slots.Address]; ok { + if update(overrides, slots, erc20Preconditions.Balance) { + updated = true + } + for _, allowance := range erc20Preconditions.Allowance { + if update(overrides, slots, allowance) { + updated = true + } + } + } + + if erc721Preconditions, ok := addressPreconditions.ERC721[slots.Address]; ok { + for _, isOwner := range erc721Preconditions.IsOwner { + if isOwner { + if update(overrides, slots, common.Big1) { + updated = true + } + break + } + } + for _, isApproved := range erc721Preconditions.IsApproved { + if isApproved { + if update(overrides, slots, common.Big1) { + updated = true + } + break + } + } + } + + if erc1155Preconditions, ok := addressPreconditions.ERC1155[slots.Address]; ok { + for _, balance := range erc1155Preconditions.Balance { + if update(overrides, slots, balance) { + updated = true + } + } + for _, isApprovedForAll := range erc1155Preconditions.IsApprovedForAll { + if isApprovedForAll { + if update(overrides, slots, common.Big1) { + updated = true + } + break + } + } + } + } + } + + return updated +} + +func update(overrides map[common.Address]gethclient.OverrideAccount, slots types.AccessTuple, value *big.Int) bool { + if value == nil || value.Sign() <= 0 { + return false + } + value_ := common.BigToHash(value) + + var updated bool + addressOverrides := overrides[slots.Address] + + for slot, existing := range addressOverrides.StateDiff { + if existing.Big().Cmp(value) < 0 { + if addressOverrides.StateDiff == nil { + addressOverrides.StateDiff = map[common.Hash]common.Hash{} + } + addressOverrides.StateDiff[slot] = value_ + updated = true + } + } + + for _, slot := range slots.StorageKeys { + if addressOverrides.StateDiff[slot].Big().Cmp(value) < 0 { + if addressOverrides.StateDiff == nil { + addressOverrides.StateDiff = map[common.Hash]common.Hash{} + } + addressOverrides.StateDiff[slot] = value_ + updated = true + } + } + + overrides[slots.Address] = addressOverrides + return updated +} + +func accessList( + ctx context.Context, + to common.Address, + data []byte, + overrides map[common.Address]gethclient.OverrideAccount, + provider *ethrpc.Provider, +) (types.AccessList, error) { + into := func(raw json.RawMessage, ret *types.AccessList, strictness ethrpc.StrictnessLevel) error { + var response struct { + AccessList types.AccessList `json:"accessList,omitempty"` + } + + err := json.Unmarshal(raw, &response) + if err != nil { + return fmt.Errorf("unable to decode eth_createAccessList response: %w", err) + } + + *ret = response.AccessList + return nil + } + + var list types.AccessList + _, err := provider.Do(ctx, ethrpc.NewCallBuilder( + "eth_createAccessList", + into, + map[string]any{"to": to, "input": hexutil.Encode(data)}, + "latest", + overrides, + ).Into(&list)) + if err != nil { + _, err := provider.Do(ctx, ethrpc.NewCallBuilder( + "eth_createAccessList", + into, + map[string]any{"to": to, "input": hexutil.Encode(data)}, + "latest", + ).Into(&list)) + if err != nil { + return nil, fmt.Errorf("unable to create access list: %w", err) + } + } + + return list, nil +} diff --git a/estimator/estimator_test.go b/estimator/estimator_test.go new file mode 100644 index 00000000..33983744 --- /dev/null +++ b/estimator/estimator_test.go @@ -0,0 +1,51 @@ +package estimator_test + +import ( + "context" + "crypto/rand" + "fmt" + "math/big" + "testing" + + "github.com/0xsequence/ethkit/ethrpc" + "github.com/0xsequence/ethkit/go-ethereum/common" + "github.com/0xsequence/go-sequence/contracts" + "github.com/0xsequence/go-sequence/estimator" + "github.com/stretchr/testify/assert" +) + +func TestEstimator(t *testing.T) { + ctx := context.Background() + + provider, err := ethrpc.NewProvider("https://dev-nodes.sequence.app/mainnet") + assert.NoError(t, err) + + var sender, receiver common.Address + rand.Read(sender[:]) + rand.Read(receiver[:]) + + token := common.HexToAddress("0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48") + value := big.NewInt(1000000) + + transfer, err := contracts.ERC20Mock.Encode("transfer", receiver, value) + assert.NoError(t, err) + + gas, err := estimator.Estimate(ctx, token, transfer, nil, provider) + assert.Error(t, err) + assert.Zero(t, gas) + + fmt.Println("error without preconditions:", err) + + preconditions := map[common.Address]estimator.AddressPreconditions{ + sender: { + ERC20: map[common.Address]estimator.ERC20Preconditions{ + token: {Balance: value}, + }, + }, + } + gas, err = estimator.Estimate(ctx, token, transfer, preconditions, provider) + assert.NoError(t, err) + assert.Positive(t, gas) + + fmt.Println("gas assuming preconditions:", gas) +} diff --git a/estimator_test.go b/estimator_test.go index 4ebb0382..84d6bfa2 100644 --- a/estimator_test.go +++ b/estimator_test.go @@ -14,6 +14,7 @@ import ( "github.com/0xsequence/go-sequence" v1 "github.com/0xsequence/go-sequence/core/v1" v2 "github.com/0xsequence/go-sequence/core/v2" + v3 "github.com/0xsequence/go-sequence/core/v3" "github.com/0xsequence/go-sequence/relayer" "github.com/0xsequence/go-sequence/testutil" "github.com/stretchr/testify/assert" @@ -42,6 +43,7 @@ func TestEstimateSimpleTransaction(t *testing.T) { assert.NoError(t, err) _, waitReceipt, err := wallet.SendTransaction(context.Background(), stx) + assert.NoError(t, err) receipt, err := waitReceipt(context.Background()) assert.NoError(t, err) @@ -50,7 +52,7 @@ func TestEstimateSimpleTransaction(t *testing.T) { assert.Less(t, gas.Uint64()-receipt.GasUsed, uint64(5000)) } -func TestEstimateSimpleSequenceTransaction(t *testing.T) { +func TestEstimateSimpleSequenceTransactionAndSend(t *testing.T) { t.Run("v1", func(t *testing.T) { wallet, err := testChain.V1DummySequenceWallet(1) assert.NoError(t, err) @@ -76,7 +78,6 @@ func TestEstimateSimpleSequenceTransaction(t *testing.T) { assert.NoError(t, err) assert.NotZero(t, estimated) - assert.Equal(t, 1, txs[0].GasLimit.Cmp(big.NewInt(0))) signed, err := wallet.SignTransactions(context.Background(), txs) assert.NoError(t, err) @@ -121,7 +122,50 @@ func TestEstimateSimpleSequenceTransaction(t *testing.T) { assert.NoError(t, err) assert.NotZero(t, estimated) - assert.Equal(t, 1, txs[0].GasLimit.Cmp(big.NewInt(0))) + + signed, err := wallet.SignTransactions(context.Background(), txs) + assert.NoError(t, err) + + _, _, wait, err := wallet.SendTransactions(context.Background(), signed) + assert.NoError(t, err) + + receipt, err := wait(context.Background()) + assert.NoError(t, err) + + assert.LessOrEqual(t, receipt.GasUsed, estimated) + assert.Less(t, estimated-receipt.GasUsed, uint64(25000)) + + ret, err := testutil.ContractQuery(testChain.Provider, callmockContract.Address, "lastValA()", "uint256", nil) + assert.NoError(t, err) + assert.Len(t, ret, 1) + assert.Equal(t, "3", ret[0]) + }) + + t.Run("v3", func(t *testing.T) { + wallet, err := testChain.V3DummySequenceWallet(1) + assert.NoError(t, err) + + callmockContract := testChain.UniDeploy(t, "WALLET_CALL_RECV_MOCK", 0) + + clearData, err := callmockContract.Encode("testCall", big.NewInt(0), ethcoder.MustHexDecode("0x")) + assert.NoError(t, err) + testutil.SignAndSend(t, wallet, callmockContract.Address, clearData) + + calldata, err := callmockContract.Encode("testCall", big.NewInt(3), ethcoder.MustHexDecode("0x11223344")) + assert.NoError(t, err) + + txs := sequence.Transactions{ + &sequence.Transaction{ + To: callmockContract.Address, + Data: calldata, + }, + } + + estimator := sequence.NewEstimator() + estimated, err := estimator.Estimate(context.Background(), testChain.Provider, wallet.Address(), wallet.GetWalletConfig(), wallet.GetWalletContext(), txs) + + assert.NoError(t, err) + assert.NotZero(t, estimated) signed, err := wallet.SignTransactions(context.Background(), txs) assert.NoError(t, err) @@ -156,6 +200,8 @@ func TestEstimateSimpleSequenceTransactionNonDeployedWallet(t *testing.T) { callmockContract := testChain.UniDeploy(t, "WALLET_CALL_RECV_MOCK", 0) wallet2, err := testChain.V1DummySequenceWallet(1) + assert.NoError(t, err) + clearData, err := callmockContract.Encode("testCall", big.NewInt(0), ethcoder.MustHexDecode("0x")) assert.NoError(t, err) testutil.SignAndSend(t, wallet2, callmockContract.Address, clearData) @@ -175,6 +221,7 @@ func TestEstimateSimpleSequenceTransactionNonDeployedWallet(t *testing.T) { estimator := sequence.NewEstimator() estimated, err := estimator.Estimate(context.Background(), testChain.Provider, wallet.Address(), wallet.GetWalletConfig(), wallet.GetWalletContext(), txs) + assert.NoError(t, err) err = testChain.DeploySequenceWallet(wallet) assert.NoError(t, err) @@ -184,7 +231,6 @@ func TestEstimateSimpleSequenceTransactionNonDeployedWallet(t *testing.T) { assert.NoError(t, err) assert.NotZero(t, estimated) - assert.Equal(t, 1, txs[0].GasLimit.Cmp(big.NewInt(0))) signed, err := wallet.SignTransactions(context.Background(), txs) assert.NoError(t, err) @@ -217,6 +263,8 @@ func TestEstimateSimpleSequenceTransactionNonDeployedWallet(t *testing.T) { callmockContract := testChain.UniDeploy(t, "WALLET_CALL_RECV_MOCK", 0) wallet2, err := testChain.V2DummySequenceWallet(1) + assert.NoError(t, err) + clearData, err := callmockContract.Encode("testCall", big.NewInt(0), ethcoder.MustHexDecode("0x")) assert.NoError(t, err) testutil.SignAndSend(t, wallet2, callmockContract.Address, clearData) @@ -236,6 +284,70 @@ func TestEstimateSimpleSequenceTransactionNonDeployedWallet(t *testing.T) { estimator := sequence.NewEstimator() estimated, err := estimator.Estimate(context.Background(), testChain.Provider, wallet.Address(), wallet.GetWalletConfig(), wallet.GetWalletContext(), txs) + assert.NoError(t, err) + + err = testChain.DeploySequenceWallet(wallet) + assert.NoError(t, err) + isDeployed, err = wallet.IsDeployed() + assert.NoError(t, err) + assert.True(t, isDeployed) + + assert.NoError(t, err) + assert.NotZero(t, estimated) + + signed, err := wallet.SignTransactions(context.Background(), txs) + assert.NoError(t, err) + + _, _, wait, err := wallet.SendTransactions(context.Background(), signed) + assert.NoError(t, err) + + receipt, err := wait(context.Background()) + assert.NoError(t, err) + + ret, err := testutil.ContractQuery(testChain.Provider, callmockContract.Address, "lastValA()", "uint256", nil) + assert.NoError(t, err) + assert.Len(t, ret, 1) + assert.Equal(t, "771", ret[0]) + + assert.LessOrEqual(t, receipt.GasUsed, estimated) + assert.Less(t, estimated-receipt.GasUsed, uint64(25000)) + }) + + t.Run("v3", func(t *testing.T) { + rand.Seed(time.Now().UnixNano()) + + wallet, err := testChain.V3DummySequenceWallet(rand.Uint64(), true) + assert.NoError(t, err) + + isDeployed, err := wallet.IsDeployed() + assert.NoError(t, err) + assert.False(t, isDeployed) + + callmockContract := testChain.UniDeploy(t, "WALLET_CALL_RECV_MOCK", 0) + + wallet2, err := testChain.V3DummySequenceWallet(1) + assert.NoError(t, err) + + clearData, err := callmockContract.Encode("testCall", big.NewInt(0), ethcoder.MustHexDecode("0x")) + assert.NoError(t, err) + testutil.SignAndSend(t, wallet2, callmockContract.Address, clearData) + + data := make([]byte, 32) + rand.Read(data) + + calldata, err := callmockContract.Encode("testCall", big.NewInt(771), data) + assert.NoError(t, err) + + txs := sequence.Transactions{ + &sequence.Transaction{ + To: callmockContract.Address, + Data: calldata, + }, + } + + estimator := sequence.NewEstimator() + estimated, err := estimator.Estimate(context.Background(), testChain.Provider, wallet.Address(), wallet.GetWalletConfig(), wallet.GetWalletContext(), txs) + assert.NoError(t, err) err = testChain.DeploySequenceWallet(wallet) assert.NoError(t, err) @@ -245,7 +357,6 @@ func TestEstimateSimpleSequenceTransactionNonDeployedWallet(t *testing.T) { assert.NoError(t, err) assert.NotZero(t, estimated) - assert.Equal(t, 1, txs[0].GasLimit.Cmp(big.NewInt(0))) signed, err := wallet.SignTransactions(context.Background(), txs) assert.NoError(t, err) @@ -306,7 +417,6 @@ func TestEstimateSimpleSequenceTransactionWithStubConfig(t *testing.T) { assert.NoError(t, err) assert.NotZero(t, estimated) - assert.Equal(t, 1, txs[0].GasLimit.Cmp(big.NewInt(0))) signed, err := wallet.SignTransactions(context.Background(), txs) assert.NoError(t, err) @@ -365,7 +475,64 @@ func TestEstimateSimpleSequenceTransactionWithStubConfig(t *testing.T) { assert.NoError(t, err) assert.NotZero(t, estimated) - assert.Equal(t, 1, txs[0].GasLimit.Cmp(big.NewInt(0))) + + signed, err := wallet.SignTransactions(context.Background(), txs) + assert.NoError(t, err) + + _, _, wait, err := wallet.SendTransactions(context.Background(), signed) + assert.NoError(t, err) + + receipt, err := wait(context.Background()) + assert.NoError(t, err) + + assert.LessOrEqual(t, receipt.GasUsed, estimated) + assert.Less(t, estimated-receipt.GasUsed, uint64(25000)) + + ret, err := testutil.ContractQuery(testChain.Provider, callmockContract.Address, "lastValA()", "uint256", nil) + assert.NoError(t, err) + assert.Len(t, ret, 1) + assert.Equal(t, "3", ret[0]) + }) + + t.Run("v3", func(t *testing.T) { + stubConfig := &v3.WalletConfig{ + Threshold_: 2, + Tree: v3.WalletConfigTreeNodes( + &v3.WalletConfigTreeAddressLeaf{ + Address: common.HexToAddress("0x6d3A40AAA98DD6cF67a1e6C85807fCc1363935D5"), + Weight: 1, + }, + &v3.WalletConfigTreeAddressLeaf{ + Address: common.HexToAddress("0xE809672D8768fd124196C75e36202C9C0A82740A"), + Weight: 1, + }, + ), + } + + wallet, err := testChain.V3DummySequenceWallet(1) + assert.NoError(t, err) + + callmockContract := testChain.UniDeploy(t, "WALLET_CALL_RECV_MOCK", 0) + + clearData, err := callmockContract.Encode("testCall", big.NewInt(0), ethcoder.MustHexDecode("0x")) + assert.NoError(t, err) + testutil.SignAndSend(t, wallet, callmockContract.Address, clearData) + + calldata, err := callmockContract.Encode("testCall", big.NewInt(3), ethcoder.MustHexDecode("0x11223344")) + assert.NoError(t, err) + + txs := sequence.Transactions{ + &sequence.Transaction{ + To: callmockContract.Address, + Data: calldata, + }, + } + + estimator := sequence.NewEstimator() + estimated, err := estimator.Estimate(context.Background(), testChain.Provider, wallet.Address(), stubConfig, wallet.GetWalletContext(), txs) + + assert.NoError(t, err) + assert.NotZero(t, estimated) signed, err := wallet.SignTransactions(context.Background(), txs) assert.NoError(t, err) @@ -418,11 +585,8 @@ func TestEstimateSimpleSequenceTransactionWithBadNonce(t *testing.T) { estimator := sequence.NewEstimator() estimated, err := estimator.Estimate(context.Background(), testChain.Provider, wallet.Address(), wallet.GetWalletConfig(), wallet.GetWalletContext(), badTxs) - txs[0].GasLimit = badTxs[0].GasLimit - assert.NoError(t, err) assert.NotZero(t, estimated) - assert.Equal(t, 1, badTxs[0].GasLimit.Cmp(big.NewInt(0))) signed, err := wallet.SignTransactions(context.Background(), txs) assert.NoError(t, err) @@ -473,11 +637,60 @@ func TestEstimateSimpleSequenceTransactionWithBadNonce(t *testing.T) { estimator := sequence.NewEstimator() estimated, err := estimator.Estimate(context.Background(), testChain.Provider, wallet.Address(), wallet.GetWalletConfig(), wallet.GetWalletContext(), badTxs) - txs[0].GasLimit = badTxs[0].GasLimit + assert.NoError(t, err) + assert.NotZero(t, estimated) + + signed, err := wallet.SignTransactions(context.Background(), txs) + assert.NoError(t, err) + + _, _, wait, err := wallet.SendTransactions(context.Background(), signed) + assert.NoError(t, err) + + receipt, err := wait(context.Background()) + assert.NoError(t, err) + + assert.LessOrEqual(t, receipt.GasUsed, estimated) + assert.Less(t, estimated-receipt.GasUsed, uint64(25000)) + + ret, err := testutil.ContractQuery(testChain.Provider, callmockContract.Address, "lastValA()", "uint256", nil) + assert.NoError(t, err) + assert.Len(t, ret, 1) + assert.Equal(t, "3", ret[0]) + }) + + t.Run("v3", func(t *testing.T) { + wallet, err := testChain.V3DummySequenceWallet(1) + assert.NoError(t, err) + + callmockContract := testChain.UniDeploy(t, "WALLET_CALL_RECV_MOCK", 0) + + clearData, err := callmockContract.Encode("testCall", big.NewInt(0), ethcoder.MustHexDecode("0x")) + assert.NoError(t, err) + testutil.SignAndSend(t, wallet, callmockContract.Address, clearData) + + calldata, err := callmockContract.Encode("testCall", big.NewInt(3), ethcoder.MustHexDecode("0x11223344")) + assert.NoError(t, err) + + badTxs := sequence.Transactions{ + &sequence.Transaction{ + To: callmockContract.Address, + Data: calldata, + Nonce: big.NewInt(999), + }, + } + + txs := sequence.Transactions{ + &sequence.Transaction{ + To: callmockContract.Address, + Data: calldata, + }, + } + + estimator := sequence.NewEstimator() + estimated, err := estimator.Estimate(context.Background(), testChain.Provider, wallet.Address(), wallet.GetWalletConfig(), wallet.GetWalletContext(), badTxs) assert.NoError(t, err) assert.NotZero(t, estimated) - assert.Equal(t, 1, badTxs[0].GasLimit.Cmp(big.NewInt(0))) signed, err := wallet.SignTransactions(context.Background(), txs) assert.NoError(t, err) @@ -535,8 +748,6 @@ func TestEstimateBatchSequenceTransaction(t *testing.T) { assert.NoError(t, err) assert.NotZero(t, estimated) - assert.Equal(t, 1, txs[0].GasLimit.Cmp(big.NewInt(0))) - assert.Equal(t, 1, txs[1].GasLimit.Cmp(big.NewInt(0))) signed, err := wallet.SignTransactions(context.Background(), txs) assert.NoError(t, err) @@ -592,8 +803,6 @@ func TestEstimateBatchSequenceTransaction(t *testing.T) { assert.NoError(t, err) assert.NotZero(t, estimated) - assert.Equal(t, 1, txs[0].GasLimit.Cmp(big.NewInt(0))) - assert.Equal(t, 1, txs[1].GasLimit.Cmp(big.NewInt(0))) signed, err := wallet.SignTransactions(context.Background(), txs) assert.NoError(t, err) @@ -612,71 +821,35 @@ func TestEstimateBatchSequenceTransaction(t *testing.T) { assert.Len(t, ret, 1) assert.Equal(t, "6", ret[0]) }) -} - -func TestEstimateSequenceMultipleSigners(t *testing.T) { - t.Run("v1", func(t *testing.T) { - eoa1, err := ethwallet.NewWalletFromRandomEntropy() - assert.NoError(t, err) - - eoa2, err := ethwallet.NewWalletFromRandomEntropy() - assert.NoError(t, err) - - eoa3, err := ethwallet.NewWalletFromRandomEntropy() - assert.NoError(t, err) - - walletConfig := &v1.WalletConfig{ - Threshold_: 3, - Signers_: v1.WalletConfigSigners{ - {Weight: 2, Address: eoa1.Address()}, - {Weight: 5, Address: eoa2.Address()}, - {Weight: 1, Address: eoa3.Address()}, - }, - } - - wallet, err := sequence.GenericNewWallet[*v1.WalletConfig](sequence.WalletOptions[*v1.WalletConfig]{ - Config: walletConfig, - }, eoa1, eoa3) - assert.NoError(t, err) - - // Set provider on sequence wallet - err = wallet.SetProvider(testChain.Provider) - assert.NoError(t, err) - // Set relayer on sequence wallet, which is used when the wallet sends transactions - localRelayer, err := relayer.NewLocalRelayer(testChain.GetRelayerWallet(), testChain.ReceiptsListener) - assert.NoError(t, err) - err = wallet.SetRelayer(localRelayer) + t.Run("v3", func(t *testing.T) { + wallet, err := testChain.V3DummySequenceWallet(1) assert.NoError(t, err) - ok, err := wallet.IsDeployed() - assert.NoError(t, err) - assert.False(t, ok) + callmockContract := testChain.UniDeploy(t, "WALLET_CALL_RECV_MOCK", 0) - sender := testChain.GetRelayerWallet() - _, _, waitReceipt, err := sequence.DeploySequenceWallet(sender, wallet.GetWalletConfig(), wallet.GetWalletContext()) - assert.NoError(t, err) - _, err = waitReceipt(context.Background()) + clearData, err := callmockContract.Encode("testCall", big.NewInt(0), ethcoder.MustHexDecode("0x")) assert.NoError(t, err) + testutil.SignAndSend(t, wallet, callmockContract.Address, clearData) - // Ensure deployment worked - ok, err = wallet.IsDeployed() + setRevertFlagData, err := callmockContract.Encode("setRevertFlag", true) assert.NoError(t, err) - assert.True(t, ok) - - callmockContract := testChain.UniDeploy(t, "WALLET_CALL_RECV_MOCK", 0) + testutil.SignAndSend(t, wallet, callmockContract.Address, setRevertFlagData) - clearData, err := callmockContract.Encode("testCall", big.NewInt(0), ethcoder.MustHexDecode("0x")) + calldata1, err := callmockContract.Encode("setRevertFlag", false) assert.NoError(t, err) - testutil.SignAndSend(t, wallet, callmockContract.Address, clearData) - calldata, err := callmockContract.Encode("testCall", big.NewInt(3333), ethcoder.MustHexDecode("0x11223344")) + calldata2, err := callmockContract.Encode("testCall", big.NewInt(6), ethcoder.MustHexDecode("0x223344")) assert.NoError(t, err) txs := sequence.Transactions{ &sequence.Transaction{ To: callmockContract.Address, - Data: calldata, + Data: calldata1, + }, + &sequence.Transaction{ + To: callmockContract.Address, + Data: calldata2, }, } @@ -685,7 +858,6 @@ func TestEstimateSequenceMultipleSigners(t *testing.T) { assert.NoError(t, err) assert.NotZero(t, estimated) - assert.Equal(t, 1, txs[0].GasLimit.Cmp(big.NewInt(0))) signed, err := wallet.SignTransactions(context.Background(), txs) assert.NoError(t, err) @@ -697,15 +869,17 @@ func TestEstimateSequenceMultipleSigners(t *testing.T) { assert.NoError(t, err) assert.LessOrEqual(t, receipt.GasUsed, estimated) - assert.Less(t, estimated-receipt.GasUsed, uint64(25000)) + assert.Less(t, estimated-receipt.GasUsed, uint64(30000)) ret, err := testutil.ContractQuery(testChain.Provider, callmockContract.Address, "lastValA()", "uint256", nil) assert.NoError(t, err) assert.Len(t, ret, 1) - assert.Equal(t, "3333", ret[0]) + assert.Equal(t, "6", ret[0]) }) +} - t.Run("v2", func(t *testing.T) { +func TestEstimateSequenceMultipleSigners(t *testing.T) { + t.Run("v1", func(t *testing.T) { eoa1, err := ethwallet.NewWalletFromRandomEntropy() assert.NoError(t, err) @@ -715,16 +889,16 @@ func TestEstimateSequenceMultipleSigners(t *testing.T) { eoa3, err := ethwallet.NewWalletFromRandomEntropy() assert.NoError(t, err) - walletConfig := &v2.WalletConfig{ + walletConfig := &v1.WalletConfig{ Threshold_: 3, - Tree: v2.WalletConfigTreeNodes( - &v2.WalletConfigTreeAddressLeaf{Weight: 2, Address: eoa1.Address()}, - &v2.WalletConfigTreeAddressLeaf{Weight: 5, Address: eoa2.Address()}, - &v2.WalletConfigTreeAddressLeaf{Weight: 1, Address: eoa3.Address()}, - ), + Signers_: v1.WalletConfigSigners{ + {Weight: 2, Address: eoa1.Address()}, + {Weight: 5, Address: eoa2.Address()}, + {Weight: 1, Address: eoa3.Address()}, + }, } - wallet, err := sequence.GenericNewWallet[*v2.WalletConfig](sequence.WalletOptions[*v2.WalletConfig]{ + wallet, err := sequence.GenericNewWallet[*v1.WalletConfig](sequence.WalletOptions[*v1.WalletConfig]{ Config: walletConfig, }, eoa1, eoa3) assert.NoError(t, err) @@ -775,7 +949,6 @@ func TestEstimateSequenceMultipleSigners(t *testing.T) { assert.NoError(t, err) assert.NotZero(t, estimated) - assert.Equal(t, 1, txs[0].GasLimit.Cmp(big.NewInt(0))) signed, err := wallet.SignTransactions(context.Background(), txs) assert.NoError(t, err) @@ -794,29 +967,32 @@ func TestEstimateSequenceMultipleSigners(t *testing.T) { assert.Len(t, ret, 1) assert.Equal(t, "3333", ret[0]) }) -} -func TestEstimateSequenceNestedSigners(t *testing.T) { - t.Run("v1", func(t *testing.T) { + t.Run("v2", func(t *testing.T) { eoa1, err := ethwallet.NewWalletFromRandomEntropy() assert.NoError(t, err) - wal2, err := testChain.V1DummySequenceWallet(1) + eoa2, err := ethwallet.NewWalletFromRandomEntropy() assert.NoError(t, err) eoa3, err := ethwallet.NewWalletFromRandomEntropy() assert.NoError(t, err) - walletConfig := &v1.WalletConfig{ + walletConfig := &v2.WalletConfig{ Threshold_: 3, - Signers_: v1.WalletConfigSigners{ - {Weight: 2, Address: eoa1.Address()}, - {Weight: 1, Address: wal2.Address()}, - {Weight: 2, Address: eoa3.Address()}, - }, + Tree: v2.WalletConfigTreeNodes( + &v2.WalletConfigTreeAddressLeaf{ + Weight: 2, + Address: eoa2.Address(), + }, + &v2.WalletConfigTreeAddressLeaf{ + Weight: 5, + Address: eoa3.Address(), + }, + ), } - wallet, err := sequence.GenericNewWallet[*v1.WalletConfig](sequence.WalletOptions[*v1.WalletConfig]{ + wallet, err := sequence.GenericNewWallet[*v2.WalletConfig](sequence.WalletOptions[*v2.WalletConfig]{ Config: walletConfig, }, eoa1, eoa3) assert.NoError(t, err) @@ -852,14 +1028,13 @@ func TestEstimateSequenceNestedSigners(t *testing.T) { assert.NoError(t, err) testutil.SignAndSend(t, wallet, callmockContract.Address, clearData) - calldata, err := callmockContract.Encode("testCall", big.NewInt(3335), ethcoder.MustHexDecode("0x11223344")) + calldata, err := callmockContract.Encode("testCall", big.NewInt(3333), ethcoder.MustHexDecode("0x11223344")) assert.NoError(t, err) txs := sequence.Transactions{ &sequence.Transaction{ - To: callmockContract.Address, - Data: calldata, - Nonce: testChain.RandomNonce(), + To: callmockContract.Address, + Data: calldata, }, } @@ -868,7 +1043,6 @@ func TestEstimateSequenceNestedSigners(t *testing.T) { assert.NoError(t, err) assert.NotZero(t, estimated) - assert.Equal(t, 1, txs[0].GasLimit.Cmp(big.NewInt(0))) signed, err := wallet.SignTransactions(context.Background(), txs) assert.NoError(t, err) @@ -880,34 +1054,34 @@ func TestEstimateSequenceNestedSigners(t *testing.T) { assert.NoError(t, err) assert.LessOrEqual(t, receipt.GasUsed, estimated) - assert.Less(t, estimated-receipt.GasUsed, uint64(45000)) + assert.Less(t, estimated-receipt.GasUsed, uint64(25000)) ret, err := testutil.ContractQuery(testChain.Provider, callmockContract.Address, "lastValA()", "uint256", nil) assert.NoError(t, err) assert.Len(t, ret, 1) - assert.Equal(t, "3335", ret[0]) + assert.Equal(t, "3333", ret[0]) }) - t.Run("v2", func(t *testing.T) { + t.Run("v3", func(t *testing.T) { eoa1, err := ethwallet.NewWalletFromRandomEntropy() assert.NoError(t, err) - wal2, err := testChain.V2DummySequenceWallet(1) + eoa3, err := ethwallet.NewWalletFromRandomEntropy() assert.NoError(t, err) - eoa3, err := ethwallet.NewWalletFromRandomEntropy() + wal2, err := testChain.V3DummySequenceWallet(1) assert.NoError(t, err) - walletConfig := &v2.WalletConfig{ + walletConfig := &v3.WalletConfig{ Threshold_: 3, - Tree: v2.WalletConfigTreeNodes( - &v2.WalletConfigTreeAddressLeaf{Weight: 2, Address: eoa1.Address()}, - &v2.WalletConfigTreeAddressLeaf{Weight: 1, Address: wal2.Address()}, - &v2.WalletConfigTreeAddressLeaf{Weight: 2, Address: eoa3.Address()}, + Tree: v3.WalletConfigTreeNodes( + &v3.WalletConfigTreeAddressLeaf{Weight: 2, Address: eoa1.Address()}, + &v3.WalletConfigTreeAddressLeaf{Weight: 1, Address: wal2.Address()}, + &v3.WalletConfigTreeAddressLeaf{Weight: 2, Address: eoa3.Address()}, ), } - wallet, err := sequence.GenericNewWallet[*v2.WalletConfig](sequence.WalletOptions[*v2.WalletConfig]{ + wallet, err := sequence.GenericNewWallet[*v3.WalletConfig](sequence.WalletOptions[*v3.WalletConfig]{ Config: walletConfig, }, eoa1, eoa3) assert.NoError(t, err) @@ -943,14 +1117,13 @@ func TestEstimateSequenceNestedSigners(t *testing.T) { assert.NoError(t, err) testutil.SignAndSend(t, wallet, callmockContract.Address, clearData) - calldata, err := callmockContract.Encode("testCall", big.NewInt(3335), ethcoder.MustHexDecode("0x11223344")) + calldata, err := callmockContract.Encode("testCall", big.NewInt(3333), ethcoder.MustHexDecode("0x11223344")) assert.NoError(t, err) txs := sequence.Transactions{ &sequence.Transaction{ - To: callmockContract.Address, - Data: calldata, - Nonce: testChain.RandomNonce(), + To: callmockContract.Address, + Data: calldata, }, } @@ -959,7 +1132,6 @@ func TestEstimateSequenceNestedSigners(t *testing.T) { assert.NoError(t, err) assert.NotZero(t, estimated) - assert.Equal(t, 1, txs[0].GasLimit.Cmp(big.NewInt(0))) signed, err := wallet.SignTransactions(context.Background(), txs) assert.NoError(t, err) @@ -971,12 +1143,12 @@ func TestEstimateSequenceNestedSigners(t *testing.T) { assert.NoError(t, err) assert.LessOrEqual(t, receipt.GasUsed, estimated) - assert.Less(t, estimated-receipt.GasUsed, uint64(45000)) + assert.Less(t, estimated-receipt.GasUsed, uint64(40000)) ret, err := testutil.ContractQuery(testChain.Provider, callmockContract.Address, "lastValA()", "uint256", nil) assert.NoError(t, err) assert.Len(t, ret, 1) - assert.Equal(t, "3335", ret[0]) + assert.Equal(t, "3333", ret[0]) }) } @@ -1100,6 +1272,66 @@ func TestPickLowestWeightForEstimation(t *testing.T) { assert.Equal(t, pick[eoa4.Address()], false) assert.Equal(t, pick[eoa3.Address()], true) }) + + t.Run("v3", func(t *testing.T) { + eoa1, err := ethwallet.NewWalletFromRandomEntropy() + assert.NoError(t, err) + + eoa2, err := ethwallet.NewWalletFromRandomEntropy() + assert.NoError(t, err) + + eoa3, err := ethwallet.NewWalletFromRandomEntropy() + assert.NoError(t, err) + + eoa4, err := ethwallet.NewWalletFromRandomEntropy() + assert.NoError(t, err) + + eoa5, err := ethwallet.NewWalletFromRandomEntropy() + assert.NoError(t, err) + + config := &v3.WalletConfig{ + Threshold_: 5, + Tree: v3.WalletConfigTreeNodes( + &v3.WalletConfigTreeAddressLeaf{ + Weight: 2, + Address: eoa2.Address(), + }, + &v3.WalletConfigTreeAddressLeaf{ + Weight: 1, + Address: eoa1.Address(), + }, + &v3.WalletConfigTreeAddressLeaf{ + Weight: 5, + Address: eoa5.Address(), + }, + &v3.WalletConfigTreeAddressLeaf{ + Weight: 4, + Address: eoa4.Address(), + }, + &v3.WalletConfigTreeAddressLeaf{ + Weight: 3, + Address: eoa3.Address(), + }, + ), + } + + pick, err := sequence.NewEstimator().PickSigners(context.Background(), config, + map[common.Address]bool{ + eoa2.Address(): true, + eoa1.Address(): true, + eoa5.Address(): true, + eoa4.Address(): true, + eoa3.Address(): true, + }) + assert.NoError(t, err) + + assert.Equal(t, len(pick), 5) + assert.Equal(t, pick[eoa2.Address()], true) + assert.Equal(t, pick[eoa1.Address()], true) + assert.Equal(t, pick[eoa5.Address()], false) + assert.Equal(t, pick[eoa4.Address()], false) + assert.Equal(t, pick[eoa3.Address()], true) + }) } func TestPickNonEOAsForEstimation(t *testing.T) { @@ -1218,6 +1450,64 @@ func TestPickNonEOAsForEstimation(t *testing.T) { assert.Equal(t, pick[eoa2.Address()] || pick[eoa1.Address()] || pick[eoa5.Address()] || pick[eoa3.Address()], true) }) + + t.Run("v3", func(t *testing.T) { + eoa1, err := ethwallet.NewWalletFromRandomEntropy() + assert.NoError(t, err) + + eoa2, err := ethwallet.NewWalletFromRandomEntropy() + assert.NoError(t, err) + + eoa3, err := ethwallet.NewWalletFromRandomEntropy() + assert.NoError(t, err) + + eoa4, err := ethwallet.NewWalletFromRandomEntropy() + assert.NoError(t, err) + + eoa5, err := ethwallet.NewWalletFromRandomEntropy() + assert.NoError(t, err) + + config := &v3.WalletConfig{ + Threshold_: 5, + Tree: v3.WalletConfigTreeNodes( + &v3.WalletConfigTreeAddressLeaf{ + Weight: 2, + Address: eoa2.Address(), + }, + &v3.WalletConfigTreeAddressLeaf{ + Weight: 1, + Address: eoa1.Address(), + }, + &v3.WalletConfigTreeAddressLeaf{ + Weight: 5, + Address: eoa5.Address(), + }, + &v3.WalletConfigTreeAddressLeaf{ + Weight: 4, + Address: eoa4.Address(), + }, + &v3.WalletConfigTreeAddressLeaf{ + Weight: 3, + Address: eoa3.Address(), + }, + ), + } + + pick, err := sequence.NewEstimator().PickSigners(context.Background(), config, + map[common.Address]bool{ + eoa2.Address(): true, + eoa1.Address(): true, + eoa5.Address(): true, + eoa4.Address(): false, + eoa3.Address(): true, + }) + assert.NoError(t, err) + + assert.Equal(t, len(pick), 5) + assert.Equal(t, pick[eoa4.Address()], true) + + assert.Equal(t, pick[eoa2.Address()] || pick[eoa1.Address()] || pick[eoa5.Address()] || pick[eoa3.Address()], true) + }) } func TestPickNonEOAsLowestWeightForEstimation(t *testing.T) { @@ -1340,6 +1630,66 @@ func TestPickNonEOAsLowestWeightForEstimation(t *testing.T) { assert.Equal(t, pick[eoa4.Address()], false) assert.Equal(t, pick[eoa3.Address()], true) }) + + t.Run("v3", func(t *testing.T) { + eoa1, err := ethwallet.NewWalletFromRandomEntropy() + assert.NoError(t, err) + + eoa2, err := ethwallet.NewWalletFromRandomEntropy() + assert.NoError(t, err) + + eoa3, err := ethwallet.NewWalletFromRandomEntropy() + assert.NoError(t, err) + + eoa4, err := ethwallet.NewWalletFromRandomEntropy() + assert.NoError(t, err) + + eoa5, err := ethwallet.NewWalletFromRandomEntropy() + assert.NoError(t, err) + + config := &v3.WalletConfig{ + Threshold_: 5, + Tree: v3.WalletConfigTreeNodes( + &v3.WalletConfigTreeAddressLeaf{ + Weight: 2, + Address: eoa2.Address(), + }, + &v3.WalletConfigTreeAddressLeaf{ + Weight: 1, + Address: eoa1.Address(), + }, + &v3.WalletConfigTreeAddressLeaf{ + Weight: 5, + Address: eoa5.Address(), + }, + &v3.WalletConfigTreeAddressLeaf{ + Weight: 4, + Address: eoa4.Address(), + }, + &v3.WalletConfigTreeAddressLeaf{ + Weight: 3, + Address: eoa3.Address(), + }, + ), + } + + pick, err := sequence.NewEstimator().PickSigners(context.Background(), config, + map[common.Address]bool{ + eoa2.Address(): false, + eoa1.Address(): false, + eoa5.Address(): false, + eoa4.Address(): false, + eoa3.Address(): false, + }) + assert.NoError(t, err) + + assert.Equal(t, len(pick), 5) + assert.Equal(t, pick[eoa2.Address()], true) + assert.Equal(t, pick[eoa1.Address()], true) + assert.Equal(t, pick[eoa5.Address()], false) + assert.Equal(t, pick[eoa4.Address()], false) + assert.Equal(t, pick[eoa3.Address()], true) + }) } func TestEstimateIssue5367MultipleSignersTime(t *testing.T) { @@ -1388,7 +1738,6 @@ func TestEstimateIssue5367MultipleSignersTime(t *testing.T) { assert.NoError(t, err) assert.NotZero(t, estimated) - assert.Equal(t, 1, txs[0].GasLimit.Cmp(big.NewInt(0))) } }) @@ -1437,7 +1786,53 @@ func TestEstimateIssue5367MultipleSignersTime(t *testing.T) { assert.NoError(t, err) assert.NotZero(t, estimated) - assert.Equal(t, 1, txs[0].GasLimit.Cmp(big.NewInt(0))) + } + }) + + t.Run("v3", func(t *testing.T) { + wallets := []v3.WalletConfigTree{} + + for i := 0; i < 80; i++ { + randomWallet, err := ethwallet.NewWalletFromRandomEntropy() + assert.NoError(t, err) + + wallets = append(wallets, &v3.WalletConfigTreeAddressLeaf{ + Weight: 1, + Address: randomWallet.Address(), + }) + } + + walletConfig := &v3.WalletConfig{ + Threshold_: 2, + Tree: v3.WalletConfigTreeNodes(wallets...), + } + + wallet, err := testChain.V3DummySequenceWallet(1) + assert.NoError(t, err) + + callmockContract := testChain.UniDeploy(t, "WALLET_CALL_RECV_MOCK", 0) + + clearData, err := callmockContract.Encode("testCall", big.NewInt(0), ethcoder.MustHexDecode("0x")) + assert.NoError(t, err) + testutil.SignAndSend(t, wallet, callmockContract.Address, clearData) + + calldata, err := callmockContract.Encode("testCall", big.NewInt(3), ethcoder.MustHexDecode("0x11223344")) + assert.NoError(t, err) + + txs := sequence.Transactions{ + &sequence.Transaction{ + To: callmockContract.Address, + Data: calldata, + }, + } + + // run the estimator several times (results should be cached and reused so this loop should be pretty fast) + for i := 0; i < 100; i++ { + estimator := sequence.NewEstimator() + estimated, err := estimator.Estimate(context.Background(), testChain.Provider, wallet.Address(), walletConfig, wallet.GetWalletContext(), txs) + + assert.NoError(t, err) + assert.NotZero(t, estimated) } }) } diff --git a/go.mod b/go.mod index f61f8b8c..12aa37cc 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ toolchain go1.24.2 // replace github.com/0xsequence/ethkit => /Users/peter/Dev/0xsequence/ethkit require ( - github.com/0xsequence/ethkit v1.38.0 + github.com/0xsequence/ethkit v1.38.1 github.com/0xsequence/go-ethauth v0.14.0 github.com/BurntSushi/toml v1.2.1 github.com/davecgh/go-spew v1.1.1 @@ -15,8 +15,10 @@ require ( github.com/goware/cachestore v0.9.0 github.com/goware/logger v0.3.0 github.com/shopspring/decimal v1.4.0 + github.com/spf13/cobra v1.9.1 github.com/stretchr/testify v1.10.0 go.uber.org/mock v0.5.0 + golang.org/x/crypto v0.38.0 ) require ( @@ -46,14 +48,15 @@ require ( github.com/goware/superr v0.0.2 // indirect github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect github.com/holiman/uint256 v1.3.2 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/klauspost/cpuid/v2 v2.2.10 // indirect github.com/mmcloughlin/addchain v0.4.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/spf13/pflag v1.0.6 // indirect github.com/stretchr/objx v0.5.2 // indirect github.com/supranational/blst v0.3.14 // indirect github.com/tyler-smith/go-bip39 v1.1.0 // indirect github.com/zeebo/xxh3 v1.0.2 // indirect - golang.org/x/crypto v0.38.0 // indirect golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 // indirect golang.org/x/net v0.40.0 // indirect golang.org/x/sync v0.14.0 // indirect diff --git a/go.sum b/go.sum index 1b950816..b7d16be5 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,5 @@ -github.com/0xsequence/ethkit v1.38.0 h1:6tTGyPycJuPboOY4G6z6a/JoGArPfgfVyIe+pTeeZiQ= -github.com/0xsequence/ethkit v1.38.0/go.mod h1:8OJ6MUtw3gCiUHIsp4yhRsCnwHj9whkWMX23408FhRg= +github.com/0xsequence/ethkit v1.38.1 h1:aCLKEk143HhmI2GWEg311a2i+a9JF/I+4gHi/Ol9pVI= +github.com/0xsequence/ethkit v1.38.1/go.mod h1:8OJ6MUtw3gCiUHIsp4yhRsCnwHj9whkWMX23408FhRg= github.com/0xsequence/go-ethauth v0.14.0 h1:0TQKu/bFpTZ0hNtedqfHuRn/fa2wI8qlLJE0rDgJ0Dw= github.com/0xsequence/go-ethauth v0.14.0/go.mod h1:AX6zc0LNxzRHXW+i+IPyuLLgj+AdLl7KjLNRXB/10r0= github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= @@ -40,6 +40,7 @@ github.com/consensys/bavard v0.1.30 h1:wwAj9lSnMLFXjEclKwyhf7Oslg8EoaFz9u1QGgt0b github.com/consensys/bavard v0.1.30/go.mod h1:k/zVjHHC4B+PQy1Pg7fgvG3ALicQw540Crag8qx+dZs= github.com/consensys/gnark-crypto v0.17.0 h1:vKDhZMOrySbpZDCvGMOELrHFv/A9mJ7+9I8HEfRZSkI= github.com/consensys/gnark-crypto v0.17.0/go.mod h1:A2URlMHUT81ifJ0UlLzSlm7TmnE3t7VxEThApdMukJw= +github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/crate-crypto/go-eth-kzg v1.3.0 h1:05GrhASN9kDAidaFJOda6A4BEvgvuXbazXg/0E3OOdI= github.com/crate-crypto/go-eth-kzg v1.3.0/go.mod h1:J9/u5sWfznSObptgfa92Jq8rTswn6ahQWEuiLHOjCUI= github.com/crate-crypto/go-ipa v0.0.0-20240223125850-b1e8a79f509c h1:uQYC5Z1mdLRPrZhHjHxufI8+2UG/i25QG92j0Er9p6I= @@ -119,6 +120,8 @@ github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyf github.com/holiman/uint256 v1.3.2 h1:a9EgMPSC1AAaj1SZL5zIQD3WbwTuHrMGOerLjGmM/TA= github.com/holiman/uint256 v1.3.2/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= @@ -149,8 +152,13 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= +github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo= +github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0= +github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= +github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= diff --git a/go.work.sum b/go.work.sum index 68c79fb0..744b697c 100644 --- a/go.work.sum +++ b/go.work.sum @@ -44,6 +44,7 @@ github.com/0xsequence/ethkit v1.27.11 h1:fWcABQx1WIH4SWvesCuKBJ+D4XdwZcIGWGSYnBC github.com/0xsequence/ethkit v1.27.11/go.mod h1:rv0FAIyEyN0hhwGefbduAz4ujmyjyJXhCd6a0/yF3tk= github.com/0xsequence/ethkit v1.29.5 h1:piN0JAsMSvQA+AnlA7g+MXD+F+ggNqY+Po9UbENvfsc= github.com/0xsequence/ethkit v1.29.5/go.mod h1:rv0FAIyEyN0hhwGefbduAz4ujmyjyJXhCd6a0/yF3tk= +github.com/0xsequence/ethkit v1.32.0/go.mod h1:IT2jUmscz4DXIpLdXkFbrVkR4+UZdlzFw3AoY3QbahE= github.com/0xsequence/go-ethauth v0.13.0 h1:ZaqFEEqy574A2b1P7vjpcy5tb4W/izn+A3swwOYi9wA= github.com/0xsequence/go-ethauth v0.13.0/go.mod h1:f3kx39S9F+W+qvZEB6bkKKbpUstmyB7goUntO3wvlhg= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= @@ -92,7 +93,6 @@ github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3Ee github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cyphar/filepath-securejoin v0.2.5 h1:6iR5tXJ/e6tJZzzdMc1km3Sa7RRIVBKAK32O2s7AYfo= github.com/cyphar/filepath-securejoin v0.2.5/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= @@ -111,6 +111,7 @@ github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5y github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/ethereum/c-kzg-4844/bindings/go v0.0.0-20230126171313-363c7d7593b4/go.mod h1:y4GA2JbAUama1S4QwYjC2hefgGLU8Ul0GMtL/ADMF1c= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= @@ -226,7 +227,6 @@ github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1: github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4= github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jedisct1/go-minisign v0.0.0-20241212093149-d2f9f49435c7/go.mod h1:BMxO138bOokdgt4UaxZiEfypcSHX0t6SIFimVP1oRfk= @@ -291,7 +291,6 @@ github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6L github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= @@ -319,13 +318,9 @@ github.com/spf13/cast v1.7.1/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cA github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= -github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo= -github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= -github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= @@ -380,6 +375,7 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54= golang.org/x/crypto v0.27.0/go.mod h1:1Xngt8kV6Dvbssa53Ziq6Eqn0HqbZi5Z6R0ZpwQzt70= golang.org/x/crypto v0.30.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc= golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -498,6 +494,10 @@ golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -546,6 +546,8 @@ golang.org/x/sys v0.23.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/telemetry v0.0.0-20240521205824-bda55230c457/go.mod h1:pRgIJT+bRLFKnoM1ldnzKoxTIn14Yxz928LQRYYgIN0= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -561,6 +563,7 @@ golang.org/x/term v0.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU= golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s= golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y= golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g= +golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg= golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -573,6 +576,7 @@ golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= +golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= diff --git a/intent_config.go b/intent_config.go new file mode 100644 index 00000000..eb2e8add --- /dev/null +++ b/intent_config.go @@ -0,0 +1,342 @@ +package sequence + +import ( + "context" + "fmt" + "math/big" + + "github.com/0xsequence/ethkit/ethcoder" + "github.com/0xsequence/ethkit/go-ethereum/accounts/abi" + "github.com/0xsequence/ethkit/go-ethereum/common" + "github.com/0xsequence/go-sequence/core" + v3 "github.com/0xsequence/go-sequence/core/v3" + "github.com/davecgh/go-spew/spew" +) + +// Token represents a token with an address and chain ID. Zero addresses represent ETH, or other native tokens. +type OriginToken struct { + Address common.Address `abi:"address"` + ChainId *big.Int `abi:"chainId"` +} + +type DestinationToken struct { + Address common.Address `abi:"address"` + ChainId *big.Int `abi:"chainId"` + Amount *big.Int `abi:"amount"` +} + +// IntentParams is a new version of intent parameters that uses CallsPayload for destination calls. +type IntentParams struct { + UserAddress common.Address + Nonce *big.Int + OriginTokens []OriginToken + DestinationTokens []DestinationToken + DestinationCalls []*v3.CallsPayload +} + +// HashIntentParams generates a unique bytes32 hash from the IntentParams struct. +func HashIntentParams(params *IntentParams) ([32]byte, error) { + if params == nil { + return [32]byte{}, fmt.Errorf("params is nil") + } + if params.UserAddress == (common.Address{}) { + return [32]byte{}, fmt.Errorf("UserAddress is zero") + } + if params.Nonce == nil { + return [32]byte{}, fmt.Errorf("Nonce is nil") + } + if len(params.OriginTokens) == 0 { + return [32]byte{}, fmt.Errorf("OriginTokens is empty") + } + if len(params.DestinationCalls) == 0 { + return [32]byte{}, fmt.Errorf("DestinationCalls is empty") + } + if len(params.DestinationTokens) == 0 { + return [32]byte{}, fmt.Errorf("DestinationTokens is empty") + } + for i, call := range params.DestinationCalls { + if call == nil { + return [32]byte{}, fmt.Errorf("DestinationCalls[%d] is nil", i) + } + } + + // Calculate cumulativeCallsHash + var cumulativeCallsHash [32]byte + for i, callPayload := range params.DestinationCalls { + // Change the address to address(0) + callPayload, _ := v3.PayloadWithAddress(callPayload, common.Address{}) + + individualPayloadDigest := callPayload.Digest() + + packedForKeccak := append(cumulativeCallsHash[:], individualPayloadDigest.Hash[:]...) + fmt.Printf(" packedForKeccak: 0x%s\n", common.Bytes2Hex(packedForKeccak)) + + cumulativeCallsHash = ethcoder.Keccak256Hash(packedForKeccak) + fmt.Printf(" cumulativeCallsHash after callPayload[%d]: 0x%s\n", i, common.Bytes2Hex(cumulativeCallsHash[:])) + } + fmt.Printf(" final cumulativeCallsHash: 0x%s\n", common.Bytes2Hex(cumulativeCallsHash[:])) + fmt.Printf(" destinationTokens: %v\n", params.DestinationTokens) + + // Prepare OriginTokens data + originArgs := []OriginToken{} + for _, originToken := range params.OriginTokens { + originArgs = append(originArgs, OriginToken{ + Address: originToken.Address, + ChainId: originToken.ChainId, + }) + } + + // Prepare DestinationTokens data + destinationArgs := []DestinationToken{} + for _, destinationToken := range params.DestinationTokens { + destinationArgs = append(destinationArgs, DestinationToken{ + Address: destinationToken.Address, + ChainId: destinationToken.ChainId, + Amount: destinationToken.Amount, + }) + } + + // Define ABI types for the combined packing + addressType, err := abi.NewType("address", "", nil) + if err != nil { + return [32]byte{}, fmt.Errorf("failed to create address ABI type: %w", err) + } + + nonceType, err := abi.NewType("uint256", "", nil) + if err != nil { + return [32]byte{}, fmt.Errorf("failed to create nonce ABI type: %w", err) + } + + originTokensComponents := []abi.ArgumentMarshaling{ + {Name: "address", Type: "address"}, + {Name: "chainId", Type: "uint256"}, + } + originTokensListType, err := abi.NewType("tuple[]", "", originTokensComponents) + if err != nil { + return [32]byte{}, fmt.Errorf("failed to create origin tokens list ABI type: %w", err) + } + + destinationTokensComponents := []abi.ArgumentMarshaling{ + {Name: "address", Type: "address"}, + {Name: "chainId", Type: "uint256"}, + {Name: "amount", Type: "uint256"}, + } + destinationTokensListType, err := abi.NewType("tuple[]", "", destinationTokensComponents) + if err != nil { + return [32]byte{}, fmt.Errorf("failed to create destination tokens list ABI type: %w", err) + } + + bytes32Type, err := abi.NewType("bytes32", "", nil) + if err != nil { + return [32]byte{}, fmt.Errorf("failed to create bytes32 ABI type: %w", err) + } + + fullArguments := abi.Arguments{ + {Name: "userAddress", Type: addressType}, + {Name: "nonce", Type: nonceType}, + {Name: "originTokens", Type: originTokensListType}, + {Name: "destinationTokens", Type: destinationTokensListType}, + {Name: "cumulativeCallsHash", Type: bytes32Type}, + } + + // ABI encode all fields in one go + encoded, err := fullArguments.Pack( + params.UserAddress, + params.Nonce, + originArgs, + destinationArgs, + cumulativeCallsHash, + ) + if err != nil { + return [32]byte{}, fmt.Errorf("failed to ABI pack combined arguments: %w", err) + } + fmt.Printf(" encoded: 0x%s\n", common.Bytes2Hex(encoded)) + + hash := ethcoder.Keccak256(encoded) + + var hash32 [32]byte + copy(hash32[:], hash) + return hash32, nil +} + +// `CreateAnyAddressSubdigestTree` iterates over each batch of payloads, +// validates that each call in the payload meets the following criteria: +// - GasLimit must be 0, +// +// For each valid batch, it creates a bundle, computes its digest, +// and creates a new WalletConfigTreeSubdigestLeaf. +func CreateAnyAddressSubdigestTree(calls []*v3.CallsPayload) ([]v3.WalletConfigTree, error) { + var leaves []v3.WalletConfigTree + + for batchIndex, call := range calls { + // Validate each call in the payload + for j, call := range call.Calls { + if call.GasLimit != nil && call.GasLimit.Cmp(big.NewInt(0)) != 0 { + return nil, fmt.Errorf("batch %d, call %d: GasLimit must be 0", batchIndex, j) + } + } + + digest := call.Digest() + + // Create a subdigest leaf with the computed digest. + leaves = append(leaves, &v3.WalletConfigTreeAnyAddressSubdigestLeaf{Digest: digest.Hash}) + } + + return leaves, nil +} + +// `CreateIntentTree` creates a tree from a list of intent operations and a main signer address. +func CreateIntentTree(mainSigner common.Address, calls []*v3.CallsPayload, sapientSignerLeafNode v3.WalletConfigTree) (*v3.WalletConfigTree, error) { + // Create the subdigest leaves from the batched transactions. + leaves, err := CreateAnyAddressSubdigestTree(calls) + if err != nil { + return nil, err + } + + // If the sapient signer leaf is not nil, add it to the leaves. + if sapientSignerLeafNode != nil { + leaves = append(leaves, sapientSignerLeafNode) + } + + // Create the main signer leaf (with weight 1). + mainSignerLeaf := &v3.WalletConfigTreeAddressLeaf{ + Weight: 1, + Address: mainSigner, + } + + // If the length of the leaves is 1 + if len(leaves) == 1 { + tree := v3.WalletConfigTreeNodes(mainSignerLeaf, leaves[0]) + return &tree, nil + } + + // Create a tree from the subdigest leaves. + tree := v3.WalletConfigTreeNodes(leaves...) + + // Construct the new wallet config using: + fullTree := v3.WalletConfigTreeNodes(mainSignerLeaf, tree) + + return &fullTree, nil +} + +// `CreateIntentConfiguration` creates a wallet configuration where the intent's transaction batches are grouped into the initial subdigest. +func CreateIntentConfiguration(mainSigner common.Address, calls []*v3.CallsPayload, sapientSignerLeafNode v3.WalletConfigTree) (*v3.WalletConfig, error) { + // Create the subdigest leaves from the batched transactions. + tree, err := CreateIntentTree(mainSigner, calls, sapientSignerLeafNode) + if err != nil { + return nil, err + } + + // Construct the new wallet config using: + config := &v3.WalletConfig{ + Threshold_: 1, + Checkpoint_: 0, + Tree: *tree, + } + + return config, nil +} + +// `GetIntentConfigurationSignature` creates a signature for the intent configuration that can be used to bypass chain ID validation. +// The signature is based on the transaction bundle digests only. +func GetIntentConfigurationSignature( + mainSigner common.Address, + calls []*v3.CallsPayload, +) ([]byte, error) { + // Default case without any sapient signer + config, err := CreateIntentConfiguration(mainSigner, calls, nil) + if err != nil { + return nil, err + } + + spew.Dump(config) + spew.Dump(config.Tree) + + signingFunc := func(ctx context.Context, signer common.Address, _ []core.SignerSignature) (core.SignerSignatureType, []byte, error) { + fmt.Printf("signingFunc: signer: %s\n", signer.Hex()) + + fmt.Printf("signingFunc: returning nil signature for signer: %s\n", signer.Hex()) + // For mainSigner or other signers, we don't provide a signature here. + // This will result in an AddressLeaf or NodeLeaf in the signature tree. + return 0, nil, nil + } + + // Build the signature using BuildNoChainIDSignature, which allows us to inject custom signatures via SigningFunction. + // Set validateSigningPower to false, as we are not necessarily providing signatures for all parts of the config. + sig, err := config.BuildRegularSignature(context.Background(), signingFunc, false) + if err != nil { + return nil, fmt.Errorf("failed to build regular signature: %w", err) + } + + spew.Dump(sig) + + if regularSig, ok := sig.(*v3.RegularSignature); ok { + if regularSig.Signature != nil { + signatureTree := regularSig.Signature.Tree + fmt.Println("Accessing sig.Signature.Tree:") + spew.Dump(signatureTree) + } else { + fmt.Println("sig.Signature is nil") + } + } else if noChainIdSig, ok := sig.(*v3.NoChainIDSignature); ok { + if noChainIdSig.Signature != nil { + signatureTree := noChainIdSig.Signature.Tree + fmt.Println("Accessing sig.Signature.Tree (NoChainID):") + spew.Dump(signatureTree) + } else { + fmt.Println("sig.Signature is nil for NoChainIDSignature") + } + } else { + fmt.Printf("sig is not of type *v3.RegularSignature or *v3.NoChainIDSignature, it is %T\n", sig) + } + + // Get the signature data + data, err := sig.Data() + if err != nil { + return nil, fmt.Errorf("failed to get signature data: %w", err) + } + + // Print the signature data + fmt.Printf("signature data: %s\n", common.Bytes2Hex(data)) + + return data, nil +} + +// // replaceSapientSignerWithNodeInConfigTree recursively traverses the WalletConfigTree. +// func replaceSapientSignerWithNodeInConfigTree(tree v3.WalletConfigTree) v3.WalletConfigTree { +// if tree == nil { +// return nil +// } + +// switch node := tree.(type) { +// case *v3.WalletConfigTreeNode: +// // Recursively call on left and right children +// left := replaceSapientSignerWithNodeInConfigTree(node.Left) +// right := replaceSapientSignerWithNodeInConfigTree(node.Right) + +// if left == node.Left && right == node.Right { +// return node +// } +// return &v3.WalletConfigTreeNode{Left: left, Right: right} + +// case *v3.WalletConfigTreeNestedLeaf: +// // Recursively call on the inner tree +// innerTree := replaceSapientSignerWithNodeInConfigTree(node.Tree) + +// if innerTree == node.Tree { // Check for pointer equality +// return node // No change, return original +// } +// return &v3.WalletConfigTreeNestedLeaf{ +// Weight: node.Weight, +// Threshold: node.Threshold, +// Tree: innerTree, +// } + +// case *v3.WalletConfigTreeSapientSignerLeaf: +// // This is the target node type to replace +// return &v3.WalletConfigTreeNodeLeaf{Node: node.ImageHash()} + +// default: +// return tree +// } +// } diff --git a/intent_config_test.go b/intent_config_test.go new file mode 100644 index 00000000..98c3f374 --- /dev/null +++ b/intent_config_test.go @@ -0,0 +1,982 @@ +package sequence_test + +import ( + "context" + "fmt" + "math/big" + "testing" + + "github.com/0xsequence/ethkit/ethcoder" + "github.com/0xsequence/ethkit/ethtxn" + "github.com/0xsequence/ethkit/ethwallet" + "github.com/0xsequence/ethkit/go-ethereum/common" + "github.com/0xsequence/ethkit/go-ethereum/core/types" + "github.com/0xsequence/ethkit/go-ethereum/crypto" + "github.com/0xsequence/go-sequence" + "github.com/davecgh/go-spew/spew" + + "github.com/0xsequence/go-sequence/contracts" + v3 "github.com/0xsequence/go-sequence/core/v3" + "github.com/0xsequence/go-sequence/testutil" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestCreateIntentCallsPayload_Valid(t *testing.T) { + // Create a calls payload + calls := []v3.Call{ + { + To: common.Address{}, + Value: big.NewInt(0), + Data: []byte("transaction1"), + GasLimit: big.NewInt(0), + DelegateCall: false, + OnlyFallback: false, + BehaviorOnError: v3.BehaviorOnErrorRevert, + }, + } + + payload := v3.NewCallsPayload(common.Address{}, testChain.ChainID(), calls, big.NewInt(0), big.NewInt(0)) + + require.NotNil(t, payload) + + spew.Dump(payload) +} + +// TestCreateIntentDigestTree_Valid creates a valid payload and computes the intent digest +func TestCreateIntentDigestTree_Valid(t *testing.T) { + // Create valid calls payloads + calls1 := v3.Call{ + To: common.Address{}, + Value: nil, + Data: []byte("transaction1"), + GasLimit: big.NewInt(0), + DelegateCall: false, + OnlyFallback: false, + BehaviorOnError: v3.BehaviorOnErrorRevert, + } + + payload1 := v3.NewCallsPayload(common.Address{}, testChain.ChainID(), []v3.Call{calls1}, big.NewInt(0), big.NewInt(0)) + + calls2 := v3.Call{ + To: common.Address{}, + Value: nil, + Data: []byte("transaction2"), + GasLimit: big.NewInt(0), + DelegateCall: false, + OnlyFallback: false, + BehaviorOnError: v3.BehaviorOnErrorRevert, + } + payload2 := v3.NewCallsPayload(common.Address{}, testChain.ChainID(), []v3.Call{calls2}, big.NewInt(0), big.NewInt(0)) + + calls3 := v3.Call{ + To: common.Address{}, + Value: nil, + Data: []byte("transaction3"), + GasLimit: big.NewInt(0), + DelegateCall: false, + OnlyFallback: false, + BehaviorOnError: v3.BehaviorOnErrorRevert, + } + payload3 := v3.NewCallsPayload(common.Address{}, testChain.ChainID(), []v3.Call{calls3}, big.NewInt(0), big.NewInt(0)) + + t.Run("One batch", func(t *testing.T) { + leaves, err := sequence.CreateAnyAddressSubdigestTree([]*v3.CallsPayload{&payload1}) + require.NoError(t, err) + + // Create a tree from the subdigest leaves. + tree := v3.WalletConfigTreeNodes(leaves...) + require.NotNil(t, tree, "expected a tree") + + // Type assert to the concrete type + anyAddressLeaf, ok := tree.(*v3.WalletConfigTreeAnyAddressSubdigestLeaf) + require.True(t, ok, "tree should be a WalletConfigTreeAnyAddressSubdigestLeaf") + + digest := payload1.Digest() + require.Equal(t, digest.Hash, anyAddressLeaf.Digest, "digests do not match") + }) + + t.Run("Two batches", func(t *testing.T) { + leaves, err := sequence.CreateAnyAddressSubdigestTree([]*v3.CallsPayload{&payload1, &payload2}) + require.NoError(t, err) + + // Create a tree from the subdigest leaves. + tree := v3.WalletConfigTreeNodes(leaves...) + require.NotNil(t, tree, "expected a tree") + + // Type assert to the concrete type + nodeTree, ok := (tree).(*v3.WalletConfigTreeNode) + require.True(t, ok, "tree should be a WalletConfigTreeNode") + + // For a node with two leaves, we should check both digests + leftLeaf, ok := nodeTree.Left.(*v3.WalletConfigTreeAnyAddressSubdigestLeaf) + require.True(t, ok, "left leaf should be WalletConfigTreeAnyAddressSubdigestLeaf") + + rightLeaf, ok := nodeTree.Right.(*v3.WalletConfigTreeAnyAddressSubdigestLeaf) + require.True(t, ok, "right leaf should be WalletConfigTreeAnyAddressSubdigestLeaf") + + digest1 := payload1.Digest() + digest2 := payload2.Digest() + require.Equal(t, digest1.Hash, leftLeaf.Digest, "left leaf digest does not match") + require.Equal(t, digest2.Hash, rightLeaf.Digest, "right leaf digest does not match") + }) + + t.Run("Three batches", func(t *testing.T) { + leaves, err := sequence.CreateAnyAddressSubdigestTree([]*v3.CallsPayload{&payload1, &payload2, &payload3}) + require.NoError(t, err) + + // Create a tree from the subdigest leaves. + tree := v3.WalletConfigTreeNodes(leaves...) + require.NotNil(t, tree, "expected a tree") + + // Type assert to the concrete type + nodeTree, ok := tree.(*v3.WalletConfigTreeNode) + require.True(t, ok, "tree should be a WalletConfigTreeNode") + + // For a node with three leaves, we should check all three digests + leftLeaf, ok := nodeTree.Left.(*v3.WalletConfigTreeNode) + require.True(t, ok, "left leaf should be WalletConfigTreeNode") + + rightLeaf, ok := nodeTree.Right.(*v3.WalletConfigTreeAnyAddressSubdigestLeaf) + require.True(t, ok, "right leaf should be WalletConfigTreeAnyAddressSubdigestLeaf") + + leftLeftLeaf, ok := leftLeaf.Left.(*v3.WalletConfigTreeAnyAddressSubdigestLeaf) + require.True(t, ok, "left left leaf should be WalletConfigTreeAnyAddressSubdigestLeaf") + + leftRightLeaf, ok := leftLeaf.Right.(*v3.WalletConfigTreeAnyAddressSubdigestLeaf) + require.True(t, ok, "left right leaf should be WalletConfigTreeAnyAddressSubdigestLeaf") + + digest1 := payload1.Digest() + digest2 := payload2.Digest() + digest3 := payload3.Digest() + require.Equal(t, digest1.Hash, leftLeftLeaf.Digest, "left left leaf digest does not match") + require.Equal(t, digest2.Hash, leftRightLeaf.Digest, "left right leaf digest does not match") + require.Equal(t, digest3.Hash, rightLeaf.Digest, "right leaf digest does not match") + }) +} + +// TestCreateIntentTree_Valid creates a valid payload and computes the intent digest +func TestCreateIntentTree_Valid(t *testing.T) { + // Create valid intent operations with required fields + payload1 := v3.NewCallsPayload(common.Address{}, testChain.ChainID(), []v3.Call{ + { + To: common.Address{}, + Value: nil, + Data: []byte("transaction1"), + GasLimit: big.NewInt(0), + DelegateCall: false, + OnlyFallback: false, + BehaviorOnError: v3.BehaviorOnErrorRevert, + }, + }, big.NewInt(0), big.NewInt(0)) + + payload2 := v3.NewCallsPayload(common.Address{}, testChain.ChainID(), []v3.Call{ + { + To: common.Address{}, + Value: nil, + Data: []byte("transaction2"), + GasLimit: big.NewInt(0), + DelegateCall: false, + OnlyFallback: false, + BehaviorOnError: v3.BehaviorOnErrorRevert, + }, + }, big.NewInt(0), big.NewInt(0)) + + payload3 := v3.NewCallsPayload(common.Address{}, testChain.ChainID(), []v3.Call{ + { + To: common.Address{}, + Value: nil, + Data: []byte("transaction3"), + GasLimit: big.NewInt(0), + DelegateCall: false, + OnlyFallback: false, + BehaviorOnError: v3.BehaviorOnErrorRevert, + }, + }, big.NewInt(0), big.NewInt(0)) + + t.Run("One batch", func(t *testing.T) { + tree, err := sequence.CreateIntentTree(common.Address{}, []*v3.CallsPayload{&payload1}, nil) + require.NoError(t, err) + require.NotNil(t, tree) + + // spew.Dump(tree) + + // Type assert to the concrete type + nodeTree, ok := (*tree).(*v3.WalletConfigTreeNode) + require.True(t, ok, "tree should be a WalletConfigTreeNode") + + addressLeaf, ok := nodeTree.Left.(*v3.WalletConfigTreeAddressLeaf) + require.True(t, ok, "left leaf should be WalletConfigTreeAddressLeaf") + require.Equal(t, addressLeaf.Address, common.Address{}, "address leaf should be the main signer") + + _, ok = nodeTree.Right.(*v3.WalletConfigTreeAnyAddressSubdigestLeaf) + require.True(t, ok, "right leaf should be WalletConfigTreeAnyAddressSubdigestLeaf") + + // Get the digest of the payload + bundle, err := sequence.CreateAnyAddressSubdigestTree([]*v3.CallsPayload{&payload1}) + require.NoError(t, err) + require.NotNil(t, bundle) + }) + + t.Run("Two batches", func(t *testing.T) { + tree, err := sequence.CreateIntentTree(common.Address{}, []*v3.CallsPayload{&payload1, &payload2}, nil) + require.NoError(t, err) + require.NotNil(t, tree) + + // spew.Dump(tree) + + // Type assert to the concrete type + nodeTree, ok := (*tree).(*v3.WalletConfigTreeNode) + require.True(t, ok, "tree should be a WalletConfigTreeNode") + + addressLeaf, ok := nodeTree.Left.(*v3.WalletConfigTreeAddressLeaf) + require.True(t, ok, "left leaf should be WalletConfigTreeAddressLeaf") + require.Equal(t, addressLeaf.Address, common.Address{}, "address leaf should be the main signer") + + nodeRight, ok := nodeTree.Right.(*v3.WalletConfigTreeNode) + require.True(t, ok, "right node should be WalletConfigTreeNode") + + anyAddressLeaf, ok := nodeRight.Right.(*v3.WalletConfigTreeAnyAddressSubdigestLeaf) + require.True(t, ok, "right node should be WalletConfigTreeAnyAddressSubdigestLeaf") + + anyAddressLeaf2, ok := nodeRight.Left.(*v3.WalletConfigTreeAnyAddressSubdigestLeaf) + require.True(t, ok, "left leaf should be WalletConfigTreeAnyAddressSubdigestLeaf") + + require.Equal(t, payload1.Digest().Hash, anyAddressLeaf2.Digest, "digests do not match") + require.Equal(t, payload2.Digest().Hash, anyAddressLeaf.Digest, "digests do not match") + }) + + t.Run("Three batches", func(t *testing.T) { + tree, err := sequence.CreateIntentTree(common.Address{}, []*v3.CallsPayload{&payload1, &payload2, &payload3}, nil) + require.NoError(t, err) + + // spew.Dump(tree) + + // Type assert to the concrete type + nodeTree, ok := (*tree).(*v3.WalletConfigTreeNode) + require.True(t, ok, "tree should be a WalletConfigTreeNode") + + addressLeaf, ok := nodeTree.Left.(*v3.WalletConfigTreeAddressLeaf) + require.True(t, ok, "left leaf should be WalletConfigTreeAddressLeaf") + require.Equal(t, addressLeaf.Address, common.Address{}, "address leaf should be the main signer") + + nodeRight, ok := nodeTree.Right.(*v3.WalletConfigTreeNode) + require.True(t, ok, "right node should be WalletConfigTreeNode") + + anyAddressLeaf, ok := nodeRight.Right.(*v3.WalletConfigTreeAnyAddressSubdigestLeaf) + require.True(t, ok, "right node should be WalletConfigTreeAnyAddressSubdigestLeaf") + + nodeLeft, ok := nodeRight.Left.(*v3.WalletConfigTreeNode) + require.True(t, ok, "left node should be WalletConfigTreeNode") + + anyAddressLeaf2, ok := nodeLeft.Right.(*v3.WalletConfigTreeAnyAddressSubdigestLeaf) + require.True(t, ok, "left leaf should be WalletConfigTreeAnyAddressSubdigestLeaf") + + anyAddressLeaf3, ok := nodeLeft.Left.(*v3.WalletConfigTreeAnyAddressSubdigestLeaf) + require.True(t, ok, "left leaf should be WalletConfigTreeAnyAddressSubdigestLeaf") + + require.Equal(t, payload1.Digest().Hash, anyAddressLeaf3.Digest, "digests do not match") + require.Equal(t, payload2.Digest().Hash, anyAddressLeaf2.Digest, "digests do not match") + require.Equal(t, payload3.Digest().Hash, anyAddressLeaf.Digest, "digests do not match") + }) +} + +func TestCreateIntentConfiguration_Valid(t *testing.T) { + // Create a valid payload + payload := v3.NewCallsPayload(common.Address{}, testChain.ChainID(), []v3.Call{ + { + To: common.Address{}, + Value: nil, + Data: nil, + GasLimit: big.NewInt(0), + DelegateCall: false, + OnlyFallback: false, + BehaviorOnError: v3.BehaviorOnErrorRevert, + }, + }, big.NewInt(0), big.NewInt(0)) + + // Use a valid main signer address. + mainSigner := common.HexToAddress("0x1111111111111111111111111111111111111111") + + config, err := sequence.CreateIntentConfiguration(mainSigner, []*v3.CallsPayload{&payload}, nil) + require.NoError(t, err) + require.NotNil(t, config) +} + +func TestGetIntentConfigurationSignature(t *testing.T) { + // Create test wallets + eoa1, err := ethwallet.NewWalletFromRandomEntropy() + require.NoError(t, err) + + // Create a mock transaction + callmockContract := testChain.UniDeploy(t, "WALLET_CALL_RECV_MOCK", 0) + calldata, err := callmockContract.Encode("testCall", big.NewInt(65), ethcoder.MustHexDecode("0x332255")) + require.NoError(t, err) + + payload := v3.NewCallsPayload(common.Address{}, testChain.ChainID(), []v3.Call{ + { + To: callmockContract.Address, + Value: nil, + Data: calldata, + GasLimit: big.NewInt(0), + DelegateCall: false, + OnlyFallback: false, + BehaviorOnError: v3.BehaviorOnErrorRevert, + }, + }, big.NewInt(0), big.NewInt(0)) + + t.Run("signature matches subdigest", func(t *testing.T) { + // Create the intent configuration + config, err := sequence.CreateIntentConfiguration(eoa1.Address(), []*v3.CallsPayload{&payload}, nil) + require.NoError(t, err) + + // Create the signature + signature, err := sequence.GetIntentConfigurationSignature(eoa1.Address(), []*v3.CallsPayload{&payload}) + require.NoError(t, err) + + // fmt.Println("==> signature", common.Bytes2Hex(signature)) + + // Verify signature format + // Root: TreeNode + // Left: AddressLeaf + // Right: AnyAddressSubdigestLeaf + require.Equal(t, byte(0x04), signature[0], "signature should start with version byte 0x04 (Branch)") + + // Get the subdigest from the config's tree + var anyAddressSubdigestLeaf *v3.WalletConfigTreeAnyAddressSubdigestLeaf + if node, ok := config.Tree.(*v3.WalletConfigTreeNode); ok { + if rightNode, ok := node.Right.(*v3.WalletConfigTreeAnyAddressSubdigestLeaf); ok { + anyAddressSubdigestLeaf = rightNode + fmt.Println("decoded any address subdigest leaf:", anyAddressSubdigestLeaf) + } + } + require.NotNil(t, anyAddressSubdigestLeaf, "config should contain a any address subdigest leaf") + + // Verify the signature can be decoded + sig, err := v3.Core.DecodeSignature(signature) + require.NoError(t, err, "signature should be decodable") + + // Get the config from the signature + recoveredConfig, _, err := sig.Recover(context.Background(), payload, nil) + // spew.Dump(recoveredConfig) + + require.NoError(t, err) + require.NotNil(t, recoveredConfig, "recovered config should not be nil") + + // Get the full signature in string + sigDataStr, err := sig.Data() + require.NoError(t, err) + + anyAddressSubdigestStr := anyAddressSubdigestLeaf.Digest.Hex() + + // Verify the signature contains the any address digest + require.Contains(t, common.Bytes2Hex(sigDataStr), anyAddressSubdigestStr[2:], "signature should contain the any address digest") + }) + + t.Run("different transactions produce different signatures", func(t *testing.T) { + // Create two different payloads + calldata1, err := callmockContract.Encode("testCall", big.NewInt(65), ethcoder.MustHexDecode("0x332255")) + require.NoError(t, err) + + calldata2, err := callmockContract.Encode("testCall", big.NewInt(66), ethcoder.MustHexDecode("0x332255")) + require.NoError(t, err) + + payload1 := v3.NewCallsPayload(common.Address{}, testChain.ChainID(), []v3.Call{ + { + To: callmockContract.Address, + Value: nil, + Data: calldata1, + GasLimit: big.NewInt(0), + DelegateCall: false, + OnlyFallback: false, + BehaviorOnError: v3.BehaviorOnErrorRevert, + }, + }, big.NewInt(0), big.NewInt(0)) + + payload2 := v3.NewCallsPayload(common.Address{}, testChain.ChainID(), []v3.Call{ + { + To: callmockContract.Address, + Value: nil, + Data: calldata2, + GasLimit: big.NewInt(0), + DelegateCall: false, + OnlyFallback: false, + BehaviorOnError: v3.BehaviorOnErrorRevert, + }, + }, big.NewInt(0), big.NewInt(0)) + + // Create signatures for each payload as separate batches + sig1, err := sequence.GetIntentConfigurationSignature(eoa1.Address(), []*v3.CallsPayload{&payload1}) + require.NoError(t, err) + + sig2, err := sequence.GetIntentConfigurationSignature(eoa1.Address(), []*v3.CallsPayload{&payload2}) + require.NoError(t, err) + + // Verify signatures are different + require.NotEqual(t, sig1, sig2, "different transactions should produce different signatures") + }) + + t.Run("same transactions produce same signatures", func(t *testing.T) { + // Use the payload directly + sig1, err := sequence.GetIntentConfigurationSignature(eoa1.Address(), []*v3.CallsPayload{&payload}) + require.NoError(t, err) + + sig2, err := sequence.GetIntentConfigurationSignature(eoa1.Address(), []*v3.CallsPayload{&payload}) + require.NoError(t, err) + + // Verify signatures are the same + require.Equal(t, sig1, sig2, "same transactions should produce same signatures") + }) +} + +func TestGetIntentConfigurationSignature_MultipleTransactions(t *testing.T) { + // Create test wallets + eoa1, err := ethwallet.NewWalletFromRandomEntropy() + require.NoError(t, err) + + // Create a payload with multiple calls + payload1 := v3.NewCallsPayload(common.Address{}, testChain.ChainID(), []v3.Call{ + { + To: common.Address{}, + Value: nil, + Data: []byte("transaction1"), + GasLimit: big.NewInt(0), + DelegateCall: false, + OnlyFallback: false, + BehaviorOnError: v3.BehaviorOnErrorRevert, + }, + { + To: common.Address{}, + Value: nil, + Data: []byte("transaction2"), + GasLimit: big.NewInt(0), + DelegateCall: false, + OnlyFallback: false, + BehaviorOnError: v3.BehaviorOnErrorRevert, + }, + }, big.NewInt(0), big.NewInt(0)) + + // Create a signature + sig, err := sequence.GetIntentConfigurationSignature(eoa1.Address(), []*v3.CallsPayload{&payload1}) + require.NoError(t, err) + + // Convert the full signature into a hex string. + sigHex := common.Bytes2Hex(sig) + + // Expect that the signature (in hex) contains the substrings of the bundle's digest. + require.Contains(t, sigHex, payload1.Digest().Hash.Hex()[2:], "signature should contain transaction bundle digest") +} + +func TestIntentTransactionToGuestModuleDeployAndCall(t *testing.T) { + // Create normal txn of: callmockContract.testCall(55, 0x112255) + callmockContract := testChain.UniDeploy(t, "WALLET_CALL_RECV_MOCK", 0) + calldata1, err := callmockContract.Encode("setRevertFlag", false) + assert.NoError(t, err) + calldata2, err := callmockContract.Encode("testCall", big.NewInt(2255), ethcoder.MustHexDecode("0x332255")) + assert.NoError(t, err) + + _, err = ethwallet.NewWalletFromRandomEntropy() + require.NoError(t, err) + + payload := v3.NewCallsPayload(common.Address{}, testChain.ChainID(), []v3.Call{ + { + To: callmockContract.Address, + Value: nil, + Data: calldata1, + GasLimit: big.NewInt(0), + DelegateCall: false, + OnlyFallback: false, + BehaviorOnError: v3.BehaviorOnErrorRevert, + }, + { + To: callmockContract.Address, + Value: nil, + Data: calldata2, + GasLimit: big.NewInt(0), + DelegateCall: false, + OnlyFallback: false, + BehaviorOnError: v3.BehaviorOnErrorRevert, + }, + }, big.NewInt(0), big.NewInt(0)) + + // Ensure dummy sequence wallet from the intent operation + wallet, err := testChain.V3DummySequenceWalletWithIntentConfig(testutil.RandomSeed(), []*v3.CallsPayload{&payload}, true) + assert.NoError(t, err) + assert.NotNil(t, wallet) + + // Get the payload w/ the operation (The on-chain payload is different since it's the digest of the wallet's address vs. any address subdigest is the address zero) + opPayload := v3.NewCallsPayload(wallet.Address(), testChain.ChainID(), payload.Calls, big.NewInt(0), big.NewInt(0)) + + // Assert the wallet is undeployed -- this is desired so we relayer the txn to the guest module + isDeployed, err := wallet.IsDeployed() + assert.NoError(t, err) + if isDeployed { + t.Fatal("expecting wallet to be undeployed") + } + + // Wallet deployment data + _, walletFactoryAddress, walletDeployData, err := sequence.EncodeWalletDeployment(wallet.GetWalletConfig(), wallet.GetWalletContext()) + assert.NoError(t, err) + + // Get the main signer + signers := wallet.GetWalletConfig().Signers() + var mainSigner common.Address + for addr := range signers { + mainSigner = addr + break + } + require.NotNil(t, mainSigner) + + // Generate a configuration signature for the batch. + intentConfigSig, err := sequence.GetIntentConfigurationSignature(mainSigner, []*v3.CallsPayload{&payload}) + require.NoError(t, err) + + // fmt.Println("==> bundle.Digest", bundle.Digest().Hash) + + signedExecdata, err := contracts.V3.WalletStage1Module.Encode("execute", payload.Encode(common.Address{}), intentConfigSig) + assert.NoError(t, err) + + // fmt.Println("==> signedPayloadHash", bundle.Digest().Hash.Hex()) + // fmt.Println("==> payload", common.Bytes2Hex(bundle.Encode(wallet.Address()))) + // fmt.Println("==> signature", common.Bytes2Hex(intentConfigSig)) + // fmt.Println("==> signedExecData", common.Bytes2Hex(signedExecdata)) + + guestBundle := []v3.Call{ + { + To: walletFactoryAddress, + Data: walletDeployData, + }, + { + To: wallet.Address(), + Data: signedExecdata, + }, + } + + guestAddress := testChain.V3SequenceContext().GuestModuleAddress + execdata := v3.NewCallsPayload(guestAddress, testChain.ChainID(), guestBundle, big.NewInt(0), big.NewInt(0)).Encode(guestAddress) + + // Relay the txn manually, directly to the guest module + sender := testChain.GetRelayerWallet() + ntx, err := sender.NewTransaction(context.Background(), ðtxn.TransactionRequest{ + To: &guestAddress, + Data: execdata, + GasLimit: 1000000, // TODO: compute gas limit + }) + assert.NoError(t, err) + + signedTx, err := sender.SignTx(ntx, testChain.ChainID()) + assert.NoError(t, err) + + _, waitReceipt, err := sender.SendTransaction(context.Background(), signedTx) + assert.NoError(t, err) + + receipt, err := waitReceipt(context.Background()) + // spew.Dump(receipt) + assert.NoError(t, err) + assert.True(t, receipt.Status == types.ReceiptStatusSuccessful) + + // fmt.Println("==> metaTxnId", opHashBundle.Digest().String()) + + // for _, logs := range receipt.Logs { + // for _, logTopics := range logs.Topics { + // fmt.Println("==> logs.Topic", logTopics) + // } + // fmt.Println("==> logs.Data", common.Bytes2Hex(logs.Data)) + // } + + // Check the value + ret, err := testutil.ContractQuery(testChain.Provider, callmockContract.Address, "lastValA()", "uint256", nil) + assert.NoError(t, err) + assert.Len(t, ret, 1) + assert.Equal(t, "2255", ret[0]) + + // Assert sequence.WaitForMetaTxn is able to find the metaTxnID + result, _, _, err := sequence.FetchMetaTransactionReceipt(context.Background(), testChain.ReceiptsListener, sequence.MetaTxnID(opPayload.Digest().Hash.Hex()[2:])) + assert.NoError(t, err) + assert.True(t, result.Status == sequence.MetaTxnExecuted) + + // Wallet should be deployed now + isDeployed, err = wallet.IsDeployed() + assert.NoError(t, err) + assert.True(t, isDeployed) +} + +func TestIntentTransactionToGuestModuleDeployAndCallMultiplePayloads(t *testing.T) { + // Create normal txn of: callmockContract.testCall(55, 0x112255) for first chain + callmockContract := testChain.UniDeploy(t, "WALLET_CALL_RECV_MOCK", 0) + calldata1, err := callmockContract.Encode("setRevertFlag", false) + assert.NoError(t, err) + calldata2, err := callmockContract.Encode("testCall", big.NewInt(2255), ethcoder.MustHexDecode("0x332255")) + assert.NoError(t, err) + calldata3, err := callmockContract.Encode("testCall", big.NewInt(6655), ethcoder.MustHexDecode("0x332266")) + assert.NoError(t, err) + + _, err = ethwallet.NewWalletFromRandomEntropy() + require.NoError(t, err) + + // Create multiple payloads + payload1 := v3.NewCallsPayload(common.Address{}, testChain.ChainID(), []v3.Call{ + { + To: callmockContract.Address, + Value: nil, + Data: calldata1, + GasLimit: big.NewInt(0), + DelegateCall: false, + OnlyFallback: false, + BehaviorOnError: v3.BehaviorOnErrorIgnore, + }, + { + To: callmockContract.Address, + Value: nil, + Data: calldata2, + GasLimit: big.NewInt(0), + DelegateCall: false, + OnlyFallback: false, + BehaviorOnError: v3.BehaviorOnErrorIgnore, + }, + }, big.NewInt(0), big.NewInt(0)) + + payload2 := v3.NewCallsPayload(common.Address{}, testChain.ChainID(), []v3.Call{ + { + To: callmockContract.Address, + Value: nil, + Data: calldata3, + GasLimit: big.NewInt(0), + DelegateCall: false, + OnlyFallback: false, + BehaviorOnError: v3.BehaviorOnErrorIgnore, + }, + }, big.NewInt(1), big.NewInt(0)) + + payloads := []*v3.CallsPayload{&payload1, &payload2} + + // Ensure dummy sequence wallet from the intent operation + wallet, err := testChain.V3DummySequenceWalletWithIntentConfig(testutil.RandomSeed(), payloads, true) + assert.NoError(t, err) + assert.NotNil(t, wallet) + + // Log payload digests used for signature leaves + fmt.Println("--- Payload Digests (for signature) ---") + for i, p := range payloads { + fmt.Printf("Payload %d Digest: %s\n", i+1, p.Digest().Hash.Hex()) + } + + // Get the payloads w/ the operation (The on-chain payload is different since it's the digest of the wallet's address vs. any address subdigest is the address zero) + opPayload1 := v3.NewCallsPayload(wallet.Address(), testChain.ChainID(), payload1.Calls, big.NewInt(0), big.NewInt(0)) + opPayload2 := v3.NewCallsPayload(wallet.Address(), testChain.ChainID(), payload2.Calls, big.NewInt(1), big.NewInt(0)) + + // Assert the wallet is undeployed -- this is desired so we relayer the txn to the guest module + isDeployed, err := wallet.IsDeployed() + assert.NoError(t, err) + if isDeployed { + t.Fatal("expecting wallet to be undeployed") + } + + // Wallet deployment data + _, walletFactoryAddress, walletDeployData, err := sequence.EncodeWalletDeployment(wallet.GetWalletConfig(), wallet.GetWalletContext()) + assert.NoError(t, err) + + // Get the main signer + signers := wallet.GetWalletConfig().Signers() + var mainSigner common.Address + for addr := range signers { + mainSigner = addr + break + } + require.NotNil(t, mainSigner) + + // Generate a configuration signature for both batches + intentConfigSig, err := sequence.GetIntentConfigurationSignature(mainSigner, payloads) + require.NoError(t, err) + fmt.Printf("--- Intent Config Signature (for all payloads) ---\n%s\n", common.Bytes2Hex(intentConfigSig)) + + // Create and execute guest bundles for each payload separately + for i, payload := range payloads { + signedExecdata, err := contracts.V3.WalletStage1Module.Encode("execute", payload.Encode(common.Address{}), intentConfigSig) + assert.NoError(t, err) + + // Log encoded payload sent to contract + fmt.Printf("--- Executing Payload %d ---\n", i+1) + fmt.Printf("Encoded Payload (to execute): %s\n", common.Bytes2Hex(payload.Encode(common.Address{}))) + + guestAddress := testChain.V3SequenceContext().GuestModuleAddress + + var guestBundle []v3.Call + if i == 0 { + guestBundle = []v3.Call{ + { + To: walletFactoryAddress, + Data: walletDeployData, + }, + { + To: wallet.Address(), + Data: signedExecdata, + }, + } + } else { + guestBundle = []v3.Call{ + { + To: wallet.Address(), + Data: signedExecdata, + }, + } + } + + execdata := v3.NewCallsPayload(guestAddress, testChain.ChainID(), guestBundle, nil, nil).Encode(guestAddress) + + // Relay the txn manually, directly to the guest module + sender := testChain.GetRelayerWallet() + ntx, err := sender.NewTransaction(context.Background(), ðtxn.TransactionRequest{ + To: &guestAddress, + Data: execdata, + GasLimit: 1000000, // TODO: compute gas limit + }) + assert.NoError(t, err) + + signedTx, err := sender.SignTx(ntx, testChain.ChainID()) + assert.NoError(t, err) + + _, waitReceipt, err := sender.SendTransaction(context.Background(), signedTx) + assert.NoError(t, err) + + receipt, err := waitReceipt(context.Background()) + assert.NoError(t, err) + assert.True(t, receipt.Status == types.ReceiptStatusSuccessful) + + // Log receipt status + // spew.Dump(receipt) + fmt.Printf("Receipt Status Payload %d: %d\n", i+1, receipt.Status) + + // Check the value for each contract + var expectedValue string + var contractAddress common.Address + if i == 0 { + expectedValue = "2255" + contractAddress = callmockContract.Address + } else { + expectedValue = "6655" + contractAddress = callmockContract.Address + } + + ret, err := testutil.ContractQuery(testChain.Provider, contractAddress, "lastValA()", "uint256", nil) + assert.NoError(t, err) + assert.Len(t, ret, 1) + assert.Equal(t, expectedValue, ret[0]) + + // Assert sequence.WaitForMetaTxn is able to find the metaTxnID for each operation + var opPayload *v3.CallsPayload + if i == 0 { + opPayload = &opPayload1 + } else { + opPayload = &opPayload2 + } + + // Log expected MetaTxnID + expectedMetaTxnID := sequence.MetaTxnID(opPayload.Digest().Hash.Hex()[2:]) + fmt.Printf("Expected MetaTxnID Payload %d: %s\n", i+1, expectedMetaTxnID) + + result, _, _, err := sequence.FetchMetaTransactionReceipt(context.Background(), testChain.ReceiptsListener, expectedMetaTxnID) + assert.NoError(t, err) + assert.True(t, result.Status == sequence.MetaTxnExecuted) + } + + // Wallet should be deployed after executing both transactions + isDeployed, err = wallet.IsDeployed() + assert.NoError(t, err) + assert.True(t, isDeployed) +} + +func TestIntentConfigurationAddress(t *testing.T) { + // Create context matching TypeScript test + context := sequence.V3SequenceContext() + context.FactoryAddress = common.HexToAddress("0x0000000000000000000000000000000000000000") + context.MainModuleAddress = common.HexToAddress("0x0000000000000000000000000000000000000000") + + // Main signer matching TypeScript test + mainSigner := common.HexToAddress("0x1111111111111111111111111111111111111111") + + t.Run("single operation", func(t *testing.T) { + // Create a single operation matching TypeScript test + payload := v3.NewCallsPayload(common.Address{}, big.NewInt(1), []v3.Call{ + { + To: common.HexToAddress("0x0000000000000000000000000000000000000000"), + Value: big.NewInt(0), + Data: common.FromHex("0x1234"), + GasLimit: big.NewInt(0), + DelegateCall: false, + OnlyFallback: false, + BehaviorOnError: v3.BehaviorOnErrorRevert, + }, + }, + big.NewInt(0), + big.NewInt(0), + ) + + // Create intent configuration + config, err := sequence.CreateIntentConfiguration(mainSigner, []*v3.CallsPayload{&payload}, nil) + require.NoError(t, err) + + // Calculate image hash + imageHash := config.ImageHash() + + // Calculate counterfactual address + address, err := sequence.AddressFromImageHash(imageHash, context) + if err != nil { + t.Fatal(err) + } + + fmt.Printf("Single Operation Test:\n") + fmt.Printf("Address: %s\n", address.Hex()) + + assert.Equal(t, common.HexToAddress("0x3857F10693Aa54b39B640292CD5723ec97BEd285"), address) + }) + + t.Run("multiple operations", func(t *testing.T) { + // Create multiple operations matching TypeScript test + payload1 := v3.NewCallsPayload(common.Address{}, big.NewInt(1), []v3.Call{ + { + To: common.HexToAddress("0x0000000000000000000000000000000000000000"), + Value: big.NewInt(0), + Data: common.FromHex("0x1234"), + GasLimit: big.NewInt(0), + DelegateCall: false, + OnlyFallback: false, + BehaviorOnError: v3.BehaviorOnErrorRevert, + }, + }, + big.NewInt(0), + big.NewInt(0), + ) + payload2 := v3.NewCallsPayload(common.Address{}, big.NewInt(1), []v3.Call{ + { + To: common.HexToAddress("0x0000000000000000000000000000000000000000"), + Value: big.NewInt(0), + Data: common.FromHex("0x5678"), + GasLimit: big.NewInt(0), + DelegateCall: false, + OnlyFallback: false, + BehaviorOnError: v3.BehaviorOnErrorRevert, + }, + }, + big.NewInt(0), + big.NewInt(0), + ) + + // Create intent configuration + config, err := sequence.CreateIntentConfiguration(mainSigner, []*v3.CallsPayload{&payload1, &payload2}, nil) + require.NoError(t, err) + + // Calculate image hash + imageHash := config.ImageHash() + + // Calculate counterfactual address + address, err := sequence.AddressFromImageHash(imageHash, context) + if err != nil { + t.Fatal(err) + } + + fmt.Printf("\nMultiple Operations Test:\n") + fmt.Printf("Address: %s\n", address.Hex()) + + assert.Equal(t, common.HexToAddress("0x5784cF2b86eE8C930ee26279e7666241aC7e78B7"), address) + }) +} + +func TestIntentConfigurationAddress_RealWorldExample(t *testing.T) { + // Main signer matching TypeScript test + mainSigner := common.HexToAddress("0x8456195dd0793c621c7f9245edF0fEf85b1B879C") + + // Context for the counterfactual address + context := sequence.V3SequenceContext() + + // Create first operation on Arbitrum (chainId: 42161) + payload1 := v3.NewCallsPayload(common.Address{}, big.NewInt(42161), []v3.Call{ + { + To: common.HexToAddress("0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae"), + Value: big.NewInt(16618237), + Data: common.FromHex("0xa6010a660000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000005801784da62343d604885e1181a759647447f13330cc2b8c925cda864b1ac1ce8fc00000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d737461727461746556324275730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086c6966692d61706900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000111111125421ca6dc452d289314280a0f8842a65000000000000000000000000111111125421ca6dc452d289314280a0f8842a650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e583100000000000000000000000000000000000000000000000000000f42af44fef500000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000020807ed2379000000000000000000000000de9e4fe32b049f821c7f3e9802381aa470ffca73000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000af88d065e77c8cc2239327c5edb3a432268e5831000000000000000000000000de9e4fe32b049f821c7f3e9802381aa470ffca730000000000000000000000001231deb6f5749ef6ce6943a275a1d3e7486f4eae00000000000000000000000000000000000000000000000000000f42af44fef500000000000000000000000000000000000000000000000000000000000075320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000ba00000000000000000000000000000000000000000000000000000000009c4160de632c3a214d5f14c1d8ddf0b92f8bcd188fee4500242668dfaa000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007532000000000000000000000000111111125421ca6dc452d289314280a0f8842a650000000000002a94d114000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000077368def90800000000000000000000000000000000000000000000000000000000000000000000000000000000000000008456195dd0793c621c7f9245edf0fef85b1b879c00000000000000000000000000000000000000000000000000000000000075e80000000000000000000000008456195dd0793c621c7f9245edf0fef85b1b879c0000000000000000000000000000000000000000000000000000000000007532000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000"), + GasLimit: big.NewInt(0), + DelegateCall: false, + OnlyFallback: false, + BehaviorOnError: v3.BehaviorOnErrorIgnore, + }, + }, big.NewInt(0), big.NewInt(0)) + + // Create second operation on Base (chainId: 8453) + payload2 := v3.NewCallsPayload(common.Address{}, big.NewInt(8453), []v3.Call{ + { + To: common.HexToAddress("0x833589fcd6edb6e08f4c7c32d4f71b54bda02913"), + Value: big.NewInt(0), + Data: common.FromHex("0xa9059cbb000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa960450000000000000000000000000000000000000000000000000000000000007530"), + GasLimit: big.NewInt(0), + DelegateCall: false, + OnlyFallback: false, + BehaviorOnError: v3.BehaviorOnErrorIgnore, + }, + }, big.NewInt(0), big.NewInt(0)) + + // Create intent configuration + config, err := sequence.CreateIntentConfiguration(mainSigner, []*v3.CallsPayload{&payload1, &payload2}, nil) + require.NoError(t, err) + + // Calculate image hash + imageHash := config.ImageHash() + + // Calculate counterfactual address + address, err := sequence.AddressFromImageHash(imageHash, context) + if err != nil { + t.Fatal(err) + } + + fmt.Printf("\nReal World Example Test:\n") + fmt.Printf("Address: %s\n", address.Hex()) + + // The address should be deterministic based on the configuration + assert.Equal(t, common.HexToAddress("0x2582750ed4B47D86D909b4ad4fC204F27187DE6E"), address) +} + +func TestCreateIntentCallsPayloadDigest(t *testing.T) { + // Create an intent operation with a single call + payload := v3.NewCallsPayload(common.Address{}, testChain.ChainID(), []v3.Call{ + { + To: common.HexToAddress("0x0000000000000000000000000000000000000000"), + Value: big.NewInt(0), + Data: common.FromHex("0x1234"), + GasLimit: big.NewInt(0), + DelegateCall: false, + OnlyFallback: false, + BehaviorOnError: v3.BehaviorOnErrorIgnore, + }, + }, big.NewInt(0), big.NewInt(0)) + + // Get the digest + digest := payload.Digest() + require.NotNil(t, digest) + require.NotNil(t, digest.Hash) + + // Verify the digest hash is not empty + require.NotEqual(t, common.Hash{}, digest.Hash) + + // Print the digest hash for debugging + fmt.Printf("Digest Hash: %s\n", digest.Hash.Hex()) +} + +func ecrecoverForTest(hash, sig []byte) (common.Address, error) { + sigCopy := make([]byte, len(sig)) + copy(sigCopy, sig) + if len(sigCopy) == 65 && sigCopy[64] >= 27 { + sigCopy[64] -= 27 + } + + pubKeyBytes, err := crypto.Ecrecover(hash, sigCopy) + if err != nil { + return common.Address{}, err + } + + pubKey, err := crypto.UnmarshalPubkey(pubKeyBytes) + if err != nil { + return common.Address{}, err + } + + return crypto.PubkeyToAddress(*pubKey), nil +} diff --git a/network.go b/network.go index a8ae9ee4..af2be941 100644 --- a/network.go +++ b/network.go @@ -5,9 +5,12 @@ import ( "github.com/0xsequence/ethkit/ethrpc" "github.com/0xsequence/ethkit/go-ethereum/common" + "github.com/0xsequence/ethkit/go-ethereum/common/hexutil" + "github.com/0xsequence/go-sequence/contracts" "github.com/0xsequence/go-sequence/core" v1 "github.com/0xsequence/go-sequence/core/v1" v2 "github.com/0xsequence/go-sequence/core/v2" + v3 "github.com/0xsequence/go-sequence/core/v3" ) // WalletContext is the module addresses deployed on a network, aka the context / environment @@ -18,6 +21,7 @@ type WalletContext struct { MainModuleUpgradableAddress common.Address `json:"mainModuleUpgradable" toml:"main_module_upgradable_address"` GuestModuleAddress common.Address `json:"guestModule" toml:"guest_module_address"` UtilsAddress common.Address `json:"utils" toml:"utils_address"` + CreationCode string `json:"creationCode" toml:"creation_code"` } // A map of a wallet context for each version @@ -56,6 +60,7 @@ var sequenceContextV1 = WalletContext{ MainModuleUpgradableAddress: common.HexToAddress("0x7EFE6cE415956c5f80C6530cC6cc81b4808F6118"), GuestModuleAddress: common.HexToAddress("0x02390F3E6E5FD1C6786CB78FD3027C117a9955A7"), UtilsAddress: common.HexToAddress("0xd130B43062D875a4B7aF3f8fc036Bc6e9D3E1B3E"), + CreationCode: hexutil.Encode(contracts.V1.CreationCode), } var sequenceContextV2 = WalletContext{ @@ -63,6 +68,17 @@ var sequenceContextV2 = WalletContext{ MainModuleAddress: common.HexToAddress("0xfBf8f1A5E00034762D928f46d438B947f5d4065d"), MainModuleUpgradableAddress: common.HexToAddress("0x4222dcA3974E39A8b41c411FeDDE9b09Ae14b911"), GuestModuleAddress: common.HexToAddress("0xfea230Ee243f88BC698dD8f1aE93F8301B6cdfaE"), + CreationCode: hexutil.Encode(contracts.V2.CreationCode), +} + +var sequenceContextV3 = WalletContext{ + FactoryAddress: common.HexToAddress("0x7aaaD48b90Ea2c1DaE03cb68ea1Ed8E1DD26dB38"), + MainModuleAddress: common.HexToAddress("0x4d7c112790F03caFc7287b1a29Aa03da1Bb00C10"), + MainModuleUpgradableAddress: common.HexToAddress("0x7C96ff440BCE51EEF0C9f748D69246B4b3F28173"), + GuestModuleAddress: common.HexToAddress("0x252968348A07DDe07C13c9A67e31e3C429d8966D"), + UtilsAddress: common.HexToAddress("0x4d7c112790F03caFc7287b1a29Aa03da1Bb00C10"), + CreationCode: hexutil.Encode(contracts.V3.CreationCode), + // SessionManagerAddress: common.HexToAddress("0xDfB66323C6485eE10d81A0fa60BaEbbbA732Ba0a"), } // V1SequenceContext returns copy of the package-level internal variable, to prevent change @@ -75,6 +91,10 @@ func V2SequenceContext() WalletContext { return sequenceContextV2 } +func V3SequenceContext() WalletContext { + return sequenceContextV3 +} + func SequenceContext() WalletContext { return V2SequenceContext() } @@ -83,6 +103,7 @@ func SequenceContexts() WalletContexts { return WalletContexts{ 1: sequenceContextV1, 2: sequenceContextV2, + 3: sequenceContextV3, } } @@ -91,6 +112,8 @@ func SequenceContextForWalletConfig(walletConfig core.WalletConfig) WalletContex return sequenceContextV1 } else if _, ok := walletConfig.(*v2.WalletConfig); ok { return sequenceContextV2 + } else if _, ok := walletConfig.(*v3.WalletConfig); ok { + return sequenceContextV3 } return WalletContext{} } diff --git a/receipt_fetcher.go b/receipt_fetcher.go index dcd08353..3402177a 100644 --- a/receipt_fetcher.go +++ b/receipt_fetcher.go @@ -42,49 +42,36 @@ func FetchMetaTransactionReceipt(ctx context.Context, receiptListener *ethreceip MetaTxnID: metaTxnID, } - var isV2 bool - - for _, log := range receipt.Logs() { - isTxExecutedV1 := V1IsTxExecutedEvent(log, metaTxnHash) - isTxFailedV1 := V1IsTxFailedEvent(log, metaTxnHash) - isTxExecutedV2 := IsTxExecutedEvent(log, metaTxnHash) - isTxFailedV2 := V2IsTxFailedEvent(log, metaTxnHash) - - if isTxExecutedV1 || isTxFailedV1 { - isV2 = false - break - } else if isTxExecutedV2 || isTxFailedV2 { - isV2 = true - break - } - } - - for _, log := range receipt.Logs() { - var isTxExecuted, isTxFailed bool - var reason string - - if isV2 { - isTxExecuted = IsTxExecutedEvent(log, metaTxnHash) - isTxFailed = V2IsTxFailedEvent(log, metaTxnHash) - - if isTxFailed { - _, reason, _, _ = V2DecodeTxFailedEvent(log) - } - } else { - isTxExecuted = V1IsTxExecutedEvent(log, metaTxnHash) - isTxFailed = V1IsTxFailedEvent(log, metaTxnHash) - - if isTxFailed { - _, reason, _ = V1DecodeTxFailedEvent(log) - } - } - - if isTxExecuted { + logs := receipt.Logs() +done: + for i := len(logs) - 1; i >= 0; i-- { + log := logs[i] + switch { + case V1IsTxExecutedEvent(log, metaTxnHash): + result.Status = MetaTxnExecuted + break done + case V2IsTxExecutedEvent(log, metaTxnHash): result.Status = MetaTxnExecuted - break - } else if isTxFailed { + break done + case V3IsCallSuccessEvent(log, metaTxnHash): + result.Status = MetaTxnExecuted + break done + case V1IsTxFailedEvent(log, metaTxnHash): + result.Status = MetaTxnFailed + _, result.Reason, _ = V1DecodeTxFailedEvent(log) + break done + case V2IsTxFailedEvent(log, metaTxnHash): + result.Status = MetaTxnFailed + _, result.Reason, _, _ = V2DecodeTxFailedEvent(log) + break done + case V3IsCallFailedEvent(log, metaTxnHash): result.Status = MetaTxnFailed - result.Reason = reason + _, _, result.Reason, _ = V3DecodeCallFailedEvent(log) + break done + case V3IsCallAbortedEvent(log, metaTxnHash): + result.Status = MetaTxnFailed + _, _, result.Reason, _ = V3DecodeCallAbortedEvent(log) + break done } } @@ -94,13 +81,22 @@ func FetchMetaTransactionReceipt(ctx context.Context, receiptListener *ethreceip func FilterMetaTransactionID(metaTxnID ethkit.Hash) ethreceipts.FilterQuery { return ethreceipts.FilterLogs(func(logs []*types.Log) bool { for _, log := range logs { - isTxExecutedV1 := V1IsTxExecutedEvent(log, metaTxnID) - isTxFailedV1 := V1IsTxFailedEvent(log, metaTxnID) - isTxExecutedV2 := IsTxExecutedEvent(log, metaTxnID) - isTxFailedV2 := V2IsTxFailedEvent(log, metaTxnID) - - if isTxExecutedV1 || isTxFailedV1 || isTxExecutedV2 || isTxFailedV2 { - // found the sequence meta txn + switch { + case V1IsTxExecutedEvent(log, metaTxnID): + fallthrough + case V1IsTxFailedEvent(log, metaTxnID): + fallthrough + case V2IsTxExecutedEvent(log, metaTxnID): + fallthrough + case V2IsTxFailedEvent(log, metaTxnID): + fallthrough + case V3IsCallSuccessEvent(log, metaTxnID): + fallthrough + case V3IsCallFailedEvent(log, metaTxnID): + fallthrough + case V3IsCallAbortedEvent(log, metaTxnID): + fallthrough + case V3IsCallSkippedEvent(log, metaTxnID): return true } } @@ -111,27 +107,11 @@ func FilterMetaTransactionID(metaTxnID ethkit.Hash) ethreceipts.FilterQuery { // Find any Sequence meta txns func FilterMetaTransactionAny() ethreceipts.FilterQuery { return ethreceipts.FilterLogs(func(logs []*types.Log) bool { - foundNonceEvent := false - for _, log := range logs { - if len(log.Topics) > 0 && log.Topics[0] == NonceChangeEventSig { - foundNonceEvent = true - break - } - } - if !foundNonceEvent { - return false - } - for _, log := range logs { - if len(log.Topics) == 1 && log.Topics[0] == V1TxFailedEventSig { - // failed sequence txn - return true - } else if len(log.Topics) == 0 && len(log.Data) == 32 { - // possibly a successful sequence txn -- but not for certain + if len(log.Topics) == 1 && log.Topics[0] == NonceChangeEventSig { return true } } - return false }) } diff --git a/receipts.go b/receipts.go index eefa6a5b..b2f9dc06 100644 --- a/receipts.go +++ b/receipts.go @@ -11,7 +11,9 @@ import ( "github.com/0xsequence/ethkit/go-ethereum" "github.com/0xsequence/ethkit/go-ethereum/accounts/abi" "github.com/0xsequence/ethkit/go-ethereum/common" + "github.com/0xsequence/ethkit/go-ethereum/common/hexutil" "github.com/0xsequence/ethkit/go-ethereum/core/types" + "github.com/0xsequence/go-sequence/core" ) type Receipt struct { @@ -95,7 +97,7 @@ func TryDecodeCalldata( provider *ethrpc.Provider, transaction *types.Transaction, ) (common.Address, Transactions, *big.Int, []byte, error) { - decodedTransactions, decodedNonce, decodedSignature, err := DecodeExecdata(transaction.Data()) + decodedTransactions, decodedNonce, decodedSignature, err := DecodeExecdata(transaction.Data(), common.Address{}, nil) if err == nil { return *transaction.To(), decodedTransactions, decodedNonce, decodedSignature, nil } @@ -107,7 +109,7 @@ func TryDecodeCalldata( return common.Address{}, nil, nil, nil, err } - decodedTransactions, decodedNonce, decodedSignature, err = DecodeExecdata(decompressed) + decodedTransactions, decodedNonce, decodedSignature, err = DecodeExecdata(decompressed, common.Address{}, nil) if err != nil { return common.Address{}, nil, nil, nil, err } @@ -157,8 +159,98 @@ func V2IsTxExecutedEvent(log *types.Log, hash common.Hash) bool { bytes.Equal(log.Topics[1][:], hash[:]) } -func IsTxExecutedEvent(log *types.Log, hash common.Hash) bool { - return V2IsTxExecutedEvent(log, hash) +func V3IsCallSuccessEvent(log *types.Log, hash common.Hash) bool { + if len(log.Topics) != 1 || log.Topics[0] != V3CallSucceeded { + return false + } + transaction, _, err := V3DecodeCallSuccessEvent(log) + if err != nil { + return false + } + return transaction == hash +} + +func V3IsCallFailedEvent(log *types.Log, hash common.Hash) bool { + if len(log.Topics) != 1 || log.Topics[0] != V3CallFailed { + return false + } + transaction, _, _, err := V3DecodeCallFailedEvent(log) + if err != nil { + return false + } + return transaction == hash +} + +func V3IsCallAbortedEvent(log *types.Log, hash common.Hash) bool { + if len(log.Topics) != 1 || log.Topics[0] != V3CallAborted { + return false + } + transaction, _, _, err := V3DecodeCallAbortedEvent(log) + if err != nil { + return false + } + return transaction == hash +} + +func V3IsCallSkippedEvent(log *types.Log, hash common.Hash) bool { + if len(log.Topics) != 1 || log.Topics[0] != V3CallSkipped { + return false + } + transaction, _, err := V3DecodeCallSkippedEvent(log) + if err != nil { + return false + } + return transaction == hash +} + +func V3DecodeCallSuccessEvent(log *types.Log) (common.Hash, *big.Int, error) { + var transaction common.Hash + var index *big.Int + err := ethcoder.ABIUnpackArgumentsByRef([]string{"bytes32", "uint256"}, log.Data, []any{&transaction, &index}) + if err != nil { + return common.Hash{}, nil, err + } + return transaction, index, nil +} + +func V3DecodeCallFailedEvent(log *types.Log) (common.Hash, *big.Int, string, error) { + var transaction common.Hash + var index *big.Int + var result []byte + err := ethcoder.ABIUnpackArgumentsByRef([]string{"bytes32", "uint256", "bytes"}, log.Data, []any{&transaction, &index, &result}) + if err != nil { + return common.Hash{}, nil, "", fmt.Errorf("unable to decode CallFailed event: %w", err) + } + revert, err := abi.UnpackRevert(result) + if err != nil { + return transaction, index, hexutil.Encode(result), nil + } + return transaction, index, revert, nil +} + +func V3DecodeCallAbortedEvent(log *types.Log) (common.Hash, *big.Int, string, error) { + var transaction common.Hash + var index *big.Int + var result []byte + err := ethcoder.ABIUnpackArgumentsByRef([]string{"bytes32", "uint256", "bytes"}, log.Data, []any{&transaction, &index, &result}) + if err != nil { + return common.Hash{}, nil, "", fmt.Errorf("unable to decode CallAborted event: %w", err) + } + revert, err := abi.UnpackRevert(result) + if err != nil { + return transaction, index, hexutil.Encode(result), nil + } + return transaction, index, revert, nil +} + +func V3DecodeCallSkippedEvent(log *types.Log) (common.Hash, *big.Int, error) { + var transaction common.Hash + var index *big.Int + err := ethcoder.ABIUnpackArgumentsByRef([]string{"bytes32", "uint256"}, log.Data, []any{&transaction, &index}) + if err != nil { + return common.Hash{}, nil, err + } + return transaction, index, nil } func V2IsTxFailedEvent(log *types.Log, hash common.Hash) bool { @@ -167,10 +259,6 @@ func V2IsTxFailedEvent(log *types.Log, hash common.Hash) bool { bytes.Equal(log.Topics[1][:], hash[:]) } -func IsTxFailedEvent(log *types.Log, hash common.Hash) bool { - return V2IsTxFailedEvent(log, hash) -} - func V1DecodeTxFailedEvent(log *types.Log) (common.Hash, string, error) { if len(log.Topics) != 1 || log.Topics[0] != V1TxFailedEventSig { return common.Hash{}, "", fmt.Errorf("not a TxFailed event") @@ -178,7 +266,7 @@ func V1DecodeTxFailedEvent(log *types.Log) (common.Hash, string, error) { var hash common.Hash var revert []byte - if err := ethcoder.AbiDecoder([]string{"bytes32", "bytes"}, log.Data, []interface{}{&hash, &revert}); err != nil { + if err := ethcoder.ABIUnpackArgumentsByRef([]string{"bytes32", "bytes"}, log.Data, []interface{}{&hash, &revert}); err != nil { return common.Hash{}, "", err } @@ -199,7 +287,7 @@ func V2DecodeTxFailedEvent(log *types.Log) (common.Hash, string, uint, error) { var index uint var revert []byte - if err := ethcoder.AbiDecoder([]string{"uint256", "bytes"}, log.Data, []interface{}{&index, &revert}); err != nil { + if err := ethcoder.ABIUnpackArgumentsByRef([]string{"uint256", "bytes"}, log.Data, []interface{}{&index, &revert}); err != nil { return common.Hash{}, "", 0, err } @@ -221,7 +309,7 @@ func DecodeNonceChangeEvent(log *types.Log) (*big.Int, *big.Int, error) { } var space, nonce *big.Int - if err := ethcoder.AbiDecoder([]string{"uint256", "uint256"}, log.Data, []interface{}{&space, &nonce}); err != nil { + if err := ethcoder.ABIUnpackArgumentsByRef([]string{"uint256", "uint256"}, log.Data, []interface{}{&space, &nonce}); err != nil { return nil, nil, err } @@ -238,10 +326,16 @@ func decodeReceipt(logs []*types.Log, transactions Transactions, nonce *big.Int, digestType = MetaTxnGuestExec } - // compute the logged transaction hash - metaTxnID, hash, err := ComputeMetaTxnID(chainID, address, transactions, nonce, digestType) - if err != nil { - return nil, nil, err + metaTxnID, hash, _ := ComputeMetaTxnID(chainID, address, transactions, nonce, digestType) + + var digest core.PayloadDigest + if nonce != nil { + space, nonce := DecodeNonce(nonce) + payload, err := transactions.Payload(address, chainID, space, nonce) + if err != nil { + return nil, nil, fmt.Errorf("unable to convert transactions to payload: %w", err) + } + digest = payload.Digest() } var topLevelLogs []*types.Log @@ -273,13 +367,42 @@ func decodeReceipt(logs []*types.Log, transactions Transactions, nonce *big.Int, var log *types.Log log, logs = logs[0], logs[1:] - isTxExecuted := V1IsTxExecutedEvent(log, hash) || IsTxExecutedEvent(log, hash) - failedHash, failedReason, err := V1DecodeTxFailedEvent(log) - if err != nil { - failedHash, failedReason, _, err = V2DecodeTxFailedEvent(log) + isTxExecuted := V1IsTxExecutedEvent(log, hash) || V2IsTxExecutedEvent(log, hash) + if V3IsCallSuccessEvent(log, digest.Hash) { + isTxExecuted = true + receipt.MetaTxnID = MetaTxnID(digest.Hash.String()[2:]) } - isTxFailed := err == nil && failedHash == hash + var isTxFailed bool + var failedReason string + if !isTxExecuted { + var failedHash common.Hash + var err error + failedHash, failedReason, err = V1DecodeTxFailedEvent(log) + if err != nil { + failedHash, failedReason, _, err = V2DecodeTxFailedEvent(log) + } + if err != nil { + failedHash, _, failedReason, err = V3DecodeCallFailedEvent(log) + if err == nil { + receipt.MetaTxnID = MetaTxnID(digest.Hash.String()[2:]) + } + } + if err != nil { + failedHash, _, failedReason, err = V3DecodeCallAbortedEvent(log) + if err == nil { + receipt.MetaTxnID = MetaTxnID(digest.Hash.String()[2:]) + } + } + if err != nil { + failedHash, _, err = V3DecodeCallSkippedEvent(log) + if err == nil { + receipt.MetaTxnID = MetaTxnID(digest.Hash.String()[2:]) + } + } + + isTxFailed = err == nil && (failedHash == hash || failedHash == digest.Hash) + } if isTxExecuted || isTxFailed { if isTxExecuted { diff --git a/relayer.go b/relayer.go index 33d4049b..628bda17 100644 --- a/relayer.go +++ b/relayer.go @@ -13,15 +13,12 @@ import ( "github.com/0xsequence/go-sequence/contracts" "github.com/0xsequence/go-sequence/core" "github.com/0xsequence/go-sequence/relayer/proto" + "github.com/0xsequence/go-sequence/simulator" ) -type RelayerSimulateResult struct { - Executed bool - Succeeded bool - Result *string - Reason *string - GasUsed uint - GasLimit uint +type SimulateResult struct { + simulator.Result + GasLimit uint64 } type RelayerFeeTokenType uint32 @@ -56,11 +53,7 @@ type Relayer interface { // .. GetProvider() *ethrpc.Provider - // .. - EstimateGasLimits(ctx context.Context, walletConfig core.WalletConfig, walletContext WalletContext, txns Transactions) (Transactions, error) - - // .. - Simulate(ctx context.Context, txs *SignedTransactions) ([]*RelayerSimulateResult, error) + Simulate(ctx context.Context, wallet common.Address, transactions Transactions) ([]*SimulateResult, error) // NOTE: nonce space is 160 bits wide GetNonce(ctx context.Context, walletConfig core.WalletConfig, walletContext WalletContext, space *big.Int, blockNum *big.Int) (*big.Int, error) @@ -128,3 +121,21 @@ func EncodeTransactionsForRelaying(relayer Relayer, walletAddress common.Address return walletAddress, execdata, nil } + +func EncodeTransactionsForRelayingV3(relayer Relayer, walletAddress common.Address, chainID *big.Int, walletConfig core.WalletConfig, walletContext WalletContext, txns Transactions, space *big.Int, nonce *big.Int, seqSig []byte) (common.Address, []byte, error) { + if len(txns) == 0 { + return common.Address{}, nil, fmt.Errorf("cannot encode empty transactions") + } + + payload, err := txns.Payload(walletAddress, chainID, space, nonce) + if err != nil { + return common.Address{}, nil, err + } + + execdata, err := contracts.V3.WalletStage1Module.Encode("execute", payload.Encode(walletAddress), seqSig) + if err != nil { + return common.Address{}, nil, err + } + + return walletAddress, execdata, nil +} diff --git a/relayer/local_relayer.go b/relayer/local_relayer.go index 0a991da4..b83963cb 100644 --- a/relayer/local_relayer.go +++ b/relayer/local_relayer.go @@ -2,6 +2,7 @@ package relayer import ( "context" + "encoding/hex" "fmt" "math/big" "time" @@ -10,13 +11,16 @@ import ( "github.com/0xsequence/ethkit/ethrpc" "github.com/0xsequence/ethkit/ethtxn" "github.com/0xsequence/ethkit/ethwallet" - "github.com/0xsequence/ethkit/go-ethereum" "github.com/0xsequence/ethkit/go-ethereum/common" "github.com/0xsequence/ethkit/go-ethereum/core/types" "github.com/0xsequence/go-sequence" "github.com/0xsequence/go-sequence/contracts" "github.com/0xsequence/go-sequence/core" + v1 "github.com/0xsequence/go-sequence/core/v1" + v2 "github.com/0xsequence/go-sequence/core/v2" + v3 "github.com/0xsequence/go-sequence/core/v3" "github.com/0xsequence/go-sequence/relayer/proto" + "github.com/0xsequence/go-sequence/simulator" ) // LocalRelayer is a simple implementation of a relayer which will dispatch @@ -46,81 +50,37 @@ func (r *LocalRelayer) GetProvider() *ethrpc.Provider { return r.Sender.GetProvider() } -func (r *LocalRelayer) EstimateGasLimits(ctx context.Context, walletConfig core.WalletConfig, walletContext sequence.WalletContext, txns sequence.Transactions) (sequence.Transactions, error) { - walletAddress, err := sequence.AddressFromWalletConfig(walletConfig, walletContext) - if err != nil { - return nil, err - } +func (r *LocalRelayer) GetNonce(ctx context.Context, walletConfig core.WalletConfig, walletContext sequence.WalletContext, space *big.Int, blockNum *big.Int) (*big.Int, error) { + return sequence.GetWalletNonce(r.GetProvider(), walletConfig, walletContext, space, blockNum) +} +func (r *LocalRelayer) Simulate(ctx context.Context, wallet common.Address, transactions sequence.Transactions) ([]*sequence.SimulateResult, error) { provider := r.GetProvider() + if provider == nil { + return nil, sequence.ErrProviderNotSet + } - isWalletDeployed, err := sequence.IsWalletDeployed(provider, walletAddress) + payload, err := transactions.Payload(wallet, nil, nil, nil) if err != nil { return nil, err } - defaultGasLimit := int64(800_000) - - encodedTxns, err := txns.EncodedTransactions() + results, err := simulator.SimulateV3(ctx, wallet, payload.Calls, provider) if err != nil { return nil, err } - for i := range encodedTxns { - txn := &encodedTxns[i] - - // Respect gasLimit request of the transaction (as long as its not 0) - if txn.GasLimit != nil && txn.GasLimit.Cmp(big.NewInt(0)) > 0 { - continue - } - - // Fee can't be estimated locally for delegateCalls - if txn.DelegateCall { - txn.GasLimit = big.NewInt(int64(defaultGasLimit)) - continue - } - - // Fee can't be estimated for self-called if wallet hasn't been deployed - if txn.To == walletAddress && !isWalletDeployed { - txn.GasLimit = big.NewInt(int64(defaultGasLimit)) - continue - } - - // Estimate with eth_estimate call - callMsg := ethereum.CallMsg{ - From: walletAddress, - Gas: 0, // estimating this value - Value: txn.Value, - Data: txn.Data, - } - zeroAddress := common.Address{} - if txn.To != zeroAddress { - callMsg.To = &txn.To - } - - gasLimit, err := provider.EstimateGas(ctx, callMsg) - if err != nil { - txn.GasLimit = big.NewInt(int64(defaultGasLimit)) - continue - } - txn.GasLimit = big.NewInt(0).SetUint64(gasLimit) - } - - // update gasLimit on original transactions - for i, txn := range txns { - txn.GasLimit = encodedTxns[i].GasLimit + results_ := make([]*sequence.SimulateResult, 0, len(results)) + for _, result := range results { + results_ = append(results_, &sequence.SimulateResult{ + Result: result, + // Assuming max call depth 16, a unit of gas at that depth + // requires ~ceil((64/63)^16) < 4/3 units at the top level. + GasLimit: (result.GasUsed*4 + 2) / 3, + }) } - return txns, nil -} - -func (r *LocalRelayer) GetNonce(ctx context.Context, walletConfig core.WalletConfig, walletContext sequence.WalletContext, space *big.Int, blockNum *big.Int) (*big.Int, error) { - return sequence.GetWalletNonce(r.GetProvider(), walletConfig, walletContext, space, blockNum) -} - -func (r *LocalRelayer) Simulate(ctx context.Context, txs *sequence.SignedTransactions) ([]*sequence.RelayerSimulateResult, error) { - //TODO implement me - panic("implement me") + return results_, nil } func (r *LocalRelayer) Relay(ctx context.Context, signedTxs *sequence.SignedTransactions, quote ...*sequence.RelayerFeeQuote) (sequence.MetaTxnID, *types.Transaction, ethtxn.WaitReceipt, error) { @@ -130,17 +90,55 @@ func (r *LocalRelayer) Relay(ctx context.Context, signedTxs *sequence.SignedTran // TODO: lets update LocalRelayer so it'll do auto-bundle creation.. to prepend, and send to guestModule, etc.. // its more consistent, and easier for tests.. + var version int + switch signedTxs.WalletConfig.(type) { + case *v1.WalletConfig: + version = 1 + case *v2.WalletConfig: + version = 2 + case *v3.WalletConfig: + version = 3 + default: + return "", nil, nil, fmt.Errorf(`unknown version %T`, signedTxs.WalletConfig) + } + sender := r.Sender - to, execdata, err := sequence.EncodeTransactionsForRelaying( - r, - signedTxs.WalletAddress, - signedTxs.WalletConfig, - signedTxs.WalletContext, - signedTxs.Transactions, - signedTxs.Nonce, - signedTxs.Signature, - ) + var to common.Address + var execdata []byte + var err error + switch version { + case 1, 2: + to, execdata, err = sequence.EncodeTransactionsForRelaying( + r, + signedTxs.WalletAddress, + signedTxs.WalletConfig, + signedTxs.WalletContext, + signedTxs.Transactions, + signedTxs.Nonce, + signedTxs.Signature, + ) + case 3: + if r.IsDeployTransaction(signedTxs) { + payload, err := signedTxs.Payload() + if err != nil { + return "", nil, nil, err + } + execdata = payload.Encode(signedTxs.WalletContext.GuestModuleAddress) + } else { + to, execdata, err = sequence.EncodeTransactionsForRelayingV3( + r, + signedTxs.WalletAddress, + signedTxs.ChainID, + signedTxs.WalletConfig, + signedTxs.WalletContext, + signedTxs.Transactions, + signedTxs.Space, + signedTxs.Nonce, + signedTxs.Signature, + ) + } + } if err != nil { return "", nil, nil, err } @@ -172,19 +170,27 @@ func (r *LocalRelayer) Relay(ctx context.Context, signedTxs *sequence.SignedTran }, } - encodedTxns, err := txns.EncodedTransactions() - if err != nil { - return "", nil, nil, err - } + to = signedTxs.WalletContext.GuestModuleAddress - // TODO: v1 ...? what about others..? I guess since its just for testing locally, - // we can just use v1. But I'd suggest we use v3 format once its ready. - execdata, err = contracts.V1.WalletMainModule.Encode("execute", encodedTxns, big.NewInt(0), []byte{}) - if err != nil { - return "", nil, nil, err + switch version { + case 1, 2: + encodedTxns, err := txns.EncodedTransactions() + if err != nil { + return "", nil, nil, err + } + + execdata, err = contracts.V1.WalletMainModule.Encode("execute", encodedTxns, big.NewInt(0), []byte{}) + if err != nil { + return "", nil, nil, err + } + + case 3: + payload, err := signedTxs.Payload() + if err != nil { + return "", nil, nil, err + } + execdata = payload.Encode(to) } - - to = signedTxs.WalletContext.GuestModuleAddress } } @@ -193,9 +199,15 @@ func (r *LocalRelayer) Relay(ctx context.Context, signedTxs *sequence.SignedTran return "", nil, nil, err } - metaTxnID, _, err := sequence.ComputeMetaTxnID(signedTxs.ChainID, walletAddress, signedTxs.Transactions, signedTxs.Nonce, sequence.MetaTxnWalletExec) - if err != nil { - return "", nil, nil, err + var metaTxnID sequence.MetaTxnID + switch version { + case 1, 2: + metaTxnID, _, err = sequence.ComputeMetaTxnID(signedTxs.ChainID, walletAddress, signedTxs.Transactions, signedTxs.Nonce, sequence.MetaTxnWalletExec) + if err != nil { + return "", nil, nil, err + } + case 3: + metaTxnID = sequence.MetaTxnID(hex.EncodeToString(signedTxs.Digest.Bytes())) } ntx, err := sender.NewTransaction(ctx, ðtxn.TransactionRequest{ diff --git a/relayer/proto/relayer.gen.go b/relayer/proto/relayer.gen.go index 7bd6956f..1591ba23 100644 --- a/relayer/proto/relayer.gen.go +++ b/relayer/proto/relayer.gen.go @@ -1,6 +1,6 @@ -// sequence-relayer v0.4.1 da20208d66be29ad86d2662ca38c4425bc5910f8 +// sequence-relayer v0.4.1 62fe2b49d57c4a0d3960ac1176d48ecfffc7af5a // -- -// Code generated by webrpc-gen@v0.24.0 with golang generator. DO NOT EDIT. +// Code generated by webrpc-gen@v0.26.0 with golang generator. DO NOT EDIT. // // webrpc-gen -schema=relayer.ridl -target=golang -pkg=proto -client -out=./clients/relayer.gen.go package proto @@ -23,7 +23,7 @@ import ( const WebrpcHeader = "Webrpc" -const WebrpcHeaderValue = "webrpc@v0.24.0;gen-golang@v0.18.2;sequence-relayer@v0.4.1" +const WebrpcHeaderValue = "webrpc@v0.26.0;gen-golang@v0.19.0;sequence-relayer@v0.4.1" // WebRPC description and code-gen version func WebRPCVersion() string { @@ -37,7 +37,7 @@ func WebRPCSchemaVersion() string { // Schema hash generated from your RIDL schema func WebRPCSchemaHash() string { - return "da20208d66be29ad86d2662ca38c4425bc5910f8" + return "62fe2b49d57c4a0d3960ac1176d48ecfffc7af5a" } type WebrpcGenVersions struct { @@ -111,6 +111,8 @@ const ( ETHTxnStatus_PARTIALLY_FAILED ETHTxnStatus = 5 // txn mined, but all txns in the bundle failed ETHTxnStatus_FAILED ETHTxnStatus = 6 + // txn accepted by relayer, waiting for preconditions to be satisfied + ETHTxnStatus_PENDING_PRECONDITION ETHTxnStatus = 7 ) var ETHTxnStatus_name = map[uint]string{ @@ -121,16 +123,18 @@ var ETHTxnStatus_name = map[uint]string{ 4: "SUCCEEDED", 5: "PARTIALLY_FAILED", 6: "FAILED", + 7: "PENDING_PRECONDITION", } var ETHTxnStatus_value = map[string]uint{ - "UNKNOWN": 0, - "DROPPED": 1, - "QUEUED": 2, - "SENT": 3, - "SUCCEEDED": 4, - "PARTIALLY_FAILED": 5, - "FAILED": 6, + "UNKNOWN": 0, + "DROPPED": 1, + "QUEUED": 2, + "SENT": 3, + "SUCCEEDED": 4, + "PARTIALLY_FAILED": 5, + "FAILED": 6, + "PENDING_PRECONDITION": 7, } func (x ETHTxnStatus) String() string { @@ -212,6 +216,60 @@ func (x *TransferType) Is(values ...TransferType) bool { return false } +type SimulateStatus int + +const ( + SimulateStatus_SKIPPED SimulateStatus = 0 + SimulateStatus_SUCCEEDED SimulateStatus = 1 + SimulateStatus_FAILED SimulateStatus = 2 + SimulateStatus_ABORTED SimulateStatus = 3 + SimulateStatus_REVERTED SimulateStatus = 4 + SimulateStatus_NOT_ENOUGH_GAS SimulateStatus = 5 +) + +var SimulateStatus_name = map[int]string{ + 0: "SKIPPED", + 1: "SUCCEEDED", + 2: "FAILED", + 3: "ABORTED", + 4: "REVERTED", + 5: "NOT_ENOUGH_GAS", +} + +var SimulateStatus_value = map[string]int{ + "SKIPPED": 0, + "SUCCEEDED": 1, + "FAILED": 2, + "ABORTED": 3, + "REVERTED": 4, + "NOT_ENOUGH_GAS": 5, +} + +func (x SimulateStatus) String() string { + return SimulateStatus_name[int(x)] +} + +func (x SimulateStatus) MarshalText() ([]byte, error) { + return []byte(SimulateStatus_name[int(x)]), nil +} + +func (x *SimulateStatus) UnmarshalText(b []byte) error { + *x = SimulateStatus(SimulateStatus_value[string(b)]) + return nil +} + +func (x *SimulateStatus) Is(values ...SimulateStatus) bool { + if x == nil { + return false + } + for _, v := range values { + if *x == v { + return true + } + } + return false +} + type FeeTokenType uint32 const ( @@ -441,6 +499,8 @@ type MetaTxnReceipt struct { Index uint `json:"index"` Logs []*MetaTxnReceiptLog `json:"logs"` Receipts []*MetaTxnReceipt `json:"receipts"` + BlockNumber prototyp.BigInt `json:"blockNumber"` + TxnHash string `json:"txnHash"` TxnReceipt string `json:"txnReceipt"` } @@ -450,18 +510,29 @@ type MetaTxnReceiptLog struct { Data string `json:"data"` } -// TODO: review and update this type .. +type IntentPrecondition struct { + Type string `json:"type"` + ChainId prototyp.BigInt `json:"chainId"` + Data interface{} `json:"data"` +} + +type IntentSolution struct { + Transactions []*Transactions `json:"transactions"` +} + +type Transactions struct { + ChainID prototyp.BigInt `json:"chainId"` + Transactions []*Transaction `json:"transactions"` + Preconditions []*IntentPrecondition `json:"preconditions,omitempty"` +} + type Transaction struct { - TxnHash *string `json:"txnHash"` - BlockNumber uint64 `json:"blockNumber"` - ChainId uint64 `json:"chainId"` - MetaTxnID *string `json:"metaTxnID"` - Transfers []*TxnLogTransfer `json:"transfers"` - // TODO: review .. - Users map[string]*TxnLogUser `json:"users"` - // - contracts?: map TODO: review.. this gives us contract metadata which is useful - // - tokenMetadata?: map> - Timestamp *time.Time `json:"timestamp" db:"ts,omitempty"` + DelegateCall bool `json:"delegateCall"` + RevertOnError bool `json:"revertOnError"` + GasLimit prototyp.BigInt `json:"gasLimit"` + Target prototyp.Hash `json:"target"` + Value prototyp.BigInt `json:"value"` + Data prototyp.Hash `json:"data"` } // TODO: remove this.. we're not going to include username here anymore, the client will have to do it. @@ -492,6 +563,14 @@ type SimulateResult struct { GasLimit uint `json:"gasLimit"` } +type SimulateV3Result struct { + Status SimulateStatus `json:"status"` + Result *string `json:"result"` + Error *string `json:"error"` + GasUsed uint64 `json:"gasUsed"` + GasLimit uint64 `json:"gasLimit"` +} + type FeeOption struct { Token *FeeToken `json:"token"` To string `json:"to"` @@ -537,164 +616,169 @@ type SortBy struct { var methods = map[string]method{ "/rpc/Relayer/Ping": { - Name: "Ping", - Service: "Relayer", - Annotations: map[string]string{"internal": ""}, + name: "Ping", + service: "Relayer", + annotations: map[string]string{"internal": ""}, }, "/rpc/Relayer/Version": { - Name: "Version", - Service: "Relayer", - Annotations: map[string]string{"internal": ""}, + name: "Version", + service: "Relayer", + annotations: map[string]string{"internal": ""}, }, "/rpc/Relayer/RuntimeStatus": { - Name: "RuntimeStatus", - Service: "Relayer", - Annotations: map[string]string{"internal": ""}, + name: "RuntimeStatus", + service: "Relayer", + annotations: map[string]string{"internal": ""}, }, "/rpc/Relayer/GetSequenceContext": { - Name: "GetSequenceContext", - Service: "Relayer", - Annotations: map[string]string{}, + name: "GetSequenceContext", + service: "Relayer", + annotations: map[string]string{}, }, "/rpc/Relayer/GetChainID": { - Name: "GetChainID", - Service: "Relayer", - Annotations: map[string]string{"public": ""}, + name: "GetChainID", + service: "Relayer", + annotations: map[string]string{"public": ""}, }, "/rpc/Relayer/SendMetaTxn": { - Name: "SendMetaTxn", - Service: "Relayer", - Annotations: map[string]string{}, + name: "SendMetaTxn", + service: "Relayer", + annotations: map[string]string{}, }, "/rpc/Relayer/GetMetaTxnNonce": { - Name: "GetMetaTxnNonce", - Service: "Relayer", - Annotations: map[string]string{}, + name: "GetMetaTxnNonce", + service: "Relayer", + annotations: map[string]string{}, }, "/rpc/Relayer/GetMetaTxnReceipt": { - Name: "GetMetaTxnReceipt", - Service: "Relayer", - Annotations: map[string]string{}, + name: "GetMetaTxnReceipt", + service: "Relayer", + annotations: map[string]string{}, }, "/rpc/Relayer/Simulate": { - Name: "Simulate", - Service: "Relayer", - Annotations: map[string]string{}, + name: "Simulate", + service: "Relayer", + annotations: map[string]string{}, + }, + "/rpc/Relayer/SimulateV3": { + name: "SimulateV3", + service: "Relayer", + annotations: map[string]string{}, }, "/rpc/Relayer/UpdateMetaTxnGasLimits": { - Name: "UpdateMetaTxnGasLimits", - Service: "Relayer", - Annotations: map[string]string{}, + name: "UpdateMetaTxnGasLimits", + service: "Relayer", + annotations: map[string]string{}, }, "/rpc/Relayer/FeeTokens": { - Name: "FeeTokens", - Service: "Relayer", - Annotations: map[string]string{"public": ""}, + name: "FeeTokens", + service: "Relayer", + annotations: map[string]string{"public": ""}, }, "/rpc/Relayer/FeeOptions": { - Name: "FeeOptions", - Service: "Relayer", - Annotations: map[string]string{"public": ""}, + name: "FeeOptions", + service: "Relayer", + annotations: map[string]string{"public": ""}, }, "/rpc/Relayer/GetMetaTxnNetworkFeeOptions": { - Name: "GetMetaTxnNetworkFeeOptions", - Service: "Relayer", - Annotations: map[string]string{}, + name: "GetMetaTxnNetworkFeeOptions", + service: "Relayer", + annotations: map[string]string{}, }, "/rpc/Relayer/GetMetaTransactions": { - Name: "GetMetaTransactions", - Service: "Relayer", - Annotations: map[string]string{}, + name: "GetMetaTransactions", + service: "Relayer", + annotations: map[string]string{}, }, "/rpc/Relayer/GetTransactionCost": { - Name: "GetTransactionCost", - Service: "Relayer", - Annotations: map[string]string{}, + name: "GetTransactionCost", + service: "Relayer", + annotations: map[string]string{}, }, "/rpc/Relayer/SentTransactions": { - Name: "SentTransactions", - Service: "Relayer", - Annotations: map[string]string{}, + name: "SentTransactions", + service: "Relayer", + annotations: map[string]string{}, }, "/rpc/Relayer/PendingTransactions": { - Name: "PendingTransactions", - Service: "Relayer", - Annotations: map[string]string{}, + name: "PendingTransactions", + service: "Relayer", + annotations: map[string]string{}, }, "/rpc/Relayer/GetGasTank": { - Name: "GetGasTank", - Service: "Relayer", - Annotations: map[string]string{}, + name: "GetGasTank", + service: "Relayer", + annotations: map[string]string{}, }, "/rpc/Relayer/AddGasTank": { - Name: "AddGasTank", - Service: "Relayer", - Annotations: map[string]string{}, + name: "AddGasTank", + service: "Relayer", + annotations: map[string]string{}, }, "/rpc/Relayer/UpdateGasTank": { - Name: "UpdateGasTank", - Service: "Relayer", - Annotations: map[string]string{}, + name: "UpdateGasTank", + service: "Relayer", + annotations: map[string]string{}, }, "/rpc/Relayer/NextGasTankBalanceAdjustmentNonce": { - Name: "NextGasTankBalanceAdjustmentNonce", - Service: "Relayer", - Annotations: map[string]string{}, + name: "NextGasTankBalanceAdjustmentNonce", + service: "Relayer", + annotations: map[string]string{}, }, "/rpc/Relayer/AdjustGasTankBalance": { - Name: "AdjustGasTankBalance", - Service: "Relayer", - Annotations: map[string]string{}, + name: "AdjustGasTankBalance", + service: "Relayer", + annotations: map[string]string{}, }, "/rpc/Relayer/GetGasTankBalanceAdjustment": { - Name: "GetGasTankBalanceAdjustment", - Service: "Relayer", - Annotations: map[string]string{}, + name: "GetGasTankBalanceAdjustment", + service: "Relayer", + annotations: map[string]string{}, }, "/rpc/Relayer/ListGasTankBalanceAdjustments": { - Name: "ListGasTankBalanceAdjustments", - Service: "Relayer", - Annotations: map[string]string{}, + name: "ListGasTankBalanceAdjustments", + service: "Relayer", + annotations: map[string]string{}, }, "/rpc/Relayer/ListGasSponsors": { - Name: "ListGasSponsors", - Service: "Relayer", - Annotations: map[string]string{}, + name: "ListGasSponsors", + service: "Relayer", + annotations: map[string]string{}, }, "/rpc/Relayer/GetGasSponsor": { - Name: "GetGasSponsor", - Service: "Relayer", - Annotations: map[string]string{}, + name: "GetGasSponsor", + service: "Relayer", + annotations: map[string]string{}, }, "/rpc/Relayer/AddGasSponsor": { - Name: "AddGasSponsor", - Service: "Relayer", - Annotations: map[string]string{}, + name: "AddGasSponsor", + service: "Relayer", + annotations: map[string]string{}, }, "/rpc/Relayer/UpdateGasSponsor": { - Name: "UpdateGasSponsor", - Service: "Relayer", - Annotations: map[string]string{}, + name: "UpdateGasSponsor", + service: "Relayer", + annotations: map[string]string{}, }, "/rpc/Relayer/RemoveGasSponsor": { - Name: "RemoveGasSponsor", - Service: "Relayer", - Annotations: map[string]string{}, + name: "RemoveGasSponsor", + service: "Relayer", + annotations: map[string]string{}, }, "/rpc/Relayer/AddressGasSponsors": { - Name: "AddressGasSponsors", - Service: "Relayer", - Annotations: map[string]string{}, + name: "AddressGasSponsors", + service: "Relayer", + annotations: map[string]string{}, }, "/rpc/Relayer/GetProjectBalance": { - Name: "GetProjectBalance", - Service: "Relayer", - Annotations: map[string]string{}, + name: "GetProjectBalance", + service: "Relayer", + annotations: map[string]string{}, }, "/rpc/Relayer/AdjustProjectBalance": { - Name: "AdjustProjectBalance", - Service: "Relayer", - Annotations: map[string]string{}, + name: "AdjustProjectBalance", + service: "Relayer", + annotations: map[string]string{}, }, } @@ -718,6 +802,7 @@ var WebRPCServices = map[string][]string{ "GetMetaTxnNonce", "GetMetaTxnReceipt", "Simulate", + "SimulateV3", "UpdateMetaTxnGasLimits", "FeeTokens", "FeeOptions", @@ -760,7 +845,7 @@ type Relayer interface { // TODO (future): rename this to just, 'SendTransaction(txn: MetaTransaction)' or 'SendTransaction(txn: SignedTransaction)', or something.. // Project ID is only used by service and admin calls. Other clients must have projectID passed via the context // TODO: rename return txnHash: string to metaTxnID: string - SendMetaTxn(ctx context.Context, call *MetaTxn, quote *string, projectID *uint64) (bool, string, error) + SendMetaTxn(ctx context.Context, call *MetaTxn, quote *string, projectID *uint64, preconditions []*IntentPrecondition) (bool, string, error) GetMetaTxnNonce(ctx context.Context, walletContractAddress string, space *string) (string, error) // TODO: one day, make GetMetaTxnReceipt respond immediately with receipt or not // and add WaitTransactionReceipt method, which will block and wait, similar to how GetMetaTxnReceipt @@ -770,6 +855,7 @@ type Relayer interface { // we can also accept metaTxnId and txnHash .. so can take either or.. I wonder if ERC-4337 has any convention on this? GetMetaTxnReceipt(ctx context.Context, metaTxID string) (*MetaTxnReceipt, error) Simulate(ctx context.Context, wallet string, transactions string) ([]*SimulateResult, error) + SimulateV3(ctx context.Context, wallet string, calls string) ([]*SimulateV3Result, error) // TODO: deprecated, to be removed by https://github.com/0xsequence/stack/pull/356 at a later date UpdateMetaTxnGasLimits(ctx context.Context, walletAddress string, walletConfig interface{}, payload string) (string, error) FeeTokens(ctx context.Context) (bool, []*FeeToken, error) @@ -821,7 +907,7 @@ type RelayerClient interface { // TODO (future): rename this to just, 'SendTransaction(txn: MetaTransaction)' or 'SendTransaction(txn: SignedTransaction)', or something.. // Project ID is only used by service and admin calls. Other clients must have projectID passed via the context // TODO: rename return txnHash: string to metaTxnID: string - SendMetaTxn(ctx context.Context, call *MetaTxn, quote *string, projectID *uint64) (bool, string, error) + SendMetaTxn(ctx context.Context, call *MetaTxn, quote *string, projectID *uint64, preconditions []*IntentPrecondition) (bool, string, error) GetMetaTxnNonce(ctx context.Context, walletContractAddress string, space *string) (string, error) // TODO: one day, make GetMetaTxnReceipt respond immediately with receipt or not // and add WaitTransactionReceipt method, which will block and wait, similar to how GetMetaTxnReceipt @@ -831,6 +917,7 @@ type RelayerClient interface { // we can also accept metaTxnId and txnHash .. so can take either or.. I wonder if ERC-4337 has any convention on this? GetMetaTxnReceipt(ctx context.Context, metaTxID string) (*MetaTxnReceipt, error) Simulate(ctx context.Context, wallet string, transactions string) ([]*SimulateResult, error) + SimulateV3(ctx context.Context, wallet string, calls string) ([]*SimulateV3Result, error) // TODO: deprecated, to be removed by https://github.com/0xsequence/stack/pull/356 at a later date UpdateMetaTxnGasLimits(ctx context.Context, walletAddress string, walletConfig interface{}, payload string) (string, error) FeeTokens(ctx context.Context) (bool, []*FeeToken, error) @@ -874,12 +961,12 @@ const RelayerPathPrefix = "/rpc/Relayer/" type relayerClient struct { client HTTPClient - urls [32]string + urls [33]string } func NewRelayerClient(addr string, client HTTPClient) RelayerClient { prefix := urlBase(addr) + RelayerPathPrefix - urls := [32]string{ + urls := [33]string{ prefix + "Ping", prefix + "Version", prefix + "RuntimeStatus", @@ -889,6 +976,7 @@ func NewRelayerClient(addr string, client HTTPClient) RelayerClient { prefix + "GetMetaTxnNonce", prefix + "GetMetaTxnReceipt", prefix + "Simulate", + prefix + "SimulateV3", prefix + "UpdateMetaTxnGasLimits", prefix + "FeeTokens", prefix + "FeeOptions", @@ -999,12 +1087,14 @@ func (c *relayerClient) GetChainID(ctx context.Context) (uint64, error) { return out.Ret0, err } -func (c *relayerClient) SendMetaTxn(ctx context.Context, call *MetaTxn, quote *string, projectID *uint64) (bool, string, error) { +func (c *relayerClient) SendMetaTxn(ctx context.Context, call *MetaTxn, quote *string, projectID *uint64, preconditions []*IntentPrecondition) (bool, string, error) { in := struct { - Arg0 *MetaTxn `json:"call"` - Arg1 *string `json:"quote"` - Arg2 *uint64 `json:"projectID"` - }{call, quote, projectID} + Arg0 *MetaTxn `json:"call"` + Arg1 *string `json:"quote"` + Arg2 *uint64 `json:"projectID"` + Arg3 []*IntentPrecondition `json:"preconditions"` + }{call, quote, projectID, preconditions} + out := struct { Ret0 bool `json:"status"` Ret1 string `json:"txnHash"` @@ -1026,6 +1116,7 @@ func (c *relayerClient) GetMetaTxnNonce(ctx context.Context, walletContractAddre Arg0 string `json:"walletContractAddress"` Arg1 *string `json:"space"` }{walletContractAddress, space} + out := struct { Ret0 string `json:"nonce"` }{} @@ -1045,6 +1136,7 @@ func (c *relayerClient) GetMetaTxnReceipt(ctx context.Context, metaTxID string) in := struct { Arg0 string `json:"metaTxID"` }{metaTxID} + out := struct { Ret0 *MetaTxnReceipt `json:"receipt"` }{} @@ -1065,6 +1157,7 @@ func (c *relayerClient) Simulate(ctx context.Context, wallet string, transaction Arg0 string `json:"wallet"` Arg1 string `json:"transactions"` }{wallet, transactions} + out := struct { Ret0 []*SimulateResult `json:"results"` }{} @@ -1080,17 +1173,39 @@ func (c *relayerClient) Simulate(ctx context.Context, wallet string, transaction return out.Ret0, err } +func (c *relayerClient) SimulateV3(ctx context.Context, wallet string, calls string) ([]*SimulateV3Result, error) { + in := struct { + Arg0 string `json:"wallet"` + Arg1 string `json:"calls"` + }{wallet, calls} + + out := struct { + Ret0 []*SimulateV3Result `json:"results"` + }{} + + resp, err := doHTTPRequest(ctx, c.client, c.urls[9], in, &out) + if resp != nil { + cerr := resp.Body.Close() + if err == nil && cerr != nil { + err = ErrWebrpcRequestFailed.WithCausef("failed to close response body: %w", cerr) + } + } + + return out.Ret0, err +} + func (c *relayerClient) UpdateMetaTxnGasLimits(ctx context.Context, walletAddress string, walletConfig interface{}, payload string) (string, error) { in := struct { Arg0 string `json:"walletAddress"` Arg1 interface{} `json:"walletConfig"` Arg2 string `json:"payload"` }{walletAddress, walletConfig, payload} + out := struct { Ret0 string `json:"payload"` }{} - resp, err := doHTTPRequest(ctx, c.client, c.urls[9], in, &out) + resp, err := doHTTPRequest(ctx, c.client, c.urls[10], in, &out) if resp != nil { cerr := resp.Body.Close() if err == nil && cerr != nil { @@ -1107,7 +1222,7 @@ func (c *relayerClient) FeeTokens(ctx context.Context) (bool, []*FeeToken, error Ret1 []*FeeToken `json:"tokens"` }{} - resp, err := doHTTPRequest(ctx, c.client, c.urls[10], nil, &out) + resp, err := doHTTPRequest(ctx, c.client, c.urls[11], nil, &out) if resp != nil { cerr := resp.Body.Close() if err == nil && cerr != nil { @@ -1125,13 +1240,14 @@ func (c *relayerClient) FeeOptions(ctx context.Context, wallet string, to string Arg2 string `json:"data"` Arg3 *bool `json:"simulate"` }{wallet, to, data, simulate} + out := struct { Ret0 []*FeeOption `json:"options"` Ret1 bool `json:"sponsored"` Ret2 *string `json:"quote"` }{} - resp, err := doHTTPRequest(ctx, c.client, c.urls[11], in, &out) + resp, err := doHTTPRequest(ctx, c.client, c.urls[12], in, &out) if resp != nil { cerr := resp.Body.Close() if err == nil && cerr != nil { @@ -1147,11 +1263,12 @@ func (c *relayerClient) GetMetaTxnNetworkFeeOptions(ctx context.Context, walletC Arg0 interface{} `json:"walletConfig"` Arg1 string `json:"payload"` }{walletConfig, payload} + out := struct { Ret0 []*FeeOption `json:"options"` }{} - resp, err := doHTTPRequest(ctx, c.client, c.urls[12], in, &out) + resp, err := doHTTPRequest(ctx, c.client, c.urls[13], in, &out) if resp != nil { cerr := resp.Body.Close() if err == nil && cerr != nil { @@ -1167,12 +1284,13 @@ func (c *relayerClient) GetMetaTransactions(ctx context.Context, projectId uint6 Arg0 uint64 `json:"projectId"` Arg1 *Page `json:"page"` }{projectId, page} + out := struct { Ret0 *Page `json:"page"` Ret1 []*MetaTxnLog `json:"transactions"` }{} - resp, err := doHTTPRequest(ctx, c.client, c.urls[13], in, &out) + resp, err := doHTTPRequest(ctx, c.client, c.urls[14], in, &out) if resp != nil { cerr := resp.Body.Close() if err == nil && cerr != nil { @@ -1189,11 +1307,12 @@ func (c *relayerClient) GetTransactionCost(ctx context.Context, projectId uint64 Arg1 time.Time `json:"from"` Arg2 time.Time `json:"to"` }{projectId, from, to} + out := struct { Ret0 float64 `json:"cost"` }{} - resp, err := doHTTPRequest(ctx, c.client, c.urls[14], in, &out) + resp, err := doHTTPRequest(ctx, c.client, c.urls[15], in, &out) if resp != nil { cerr := resp.Body.Close() if err == nil && cerr != nil { @@ -1209,12 +1328,13 @@ func (c *relayerClient) SentTransactions(ctx context.Context, filter *SentTransa Arg0 *SentTransactionsFilter `json:"filter"` Arg1 *Page `json:"page"` }{filter, page} + out := struct { Ret0 *Page `json:"page"` Ret1 []*Transaction `json:"transactions"` }{} - resp, err := doHTTPRequest(ctx, c.client, c.urls[15], in, &out) + resp, err := doHTTPRequest(ctx, c.client, c.urls[16], in, &out) if resp != nil { cerr := resp.Body.Close() if err == nil && cerr != nil { @@ -1229,12 +1349,13 @@ func (c *relayerClient) PendingTransactions(ctx context.Context, page *Page) (*P in := struct { Arg0 *Page `json:"page"` }{page} + out := struct { Ret0 *Page `json:"page"` Ret1 []*Transaction `json:"transactions"` }{} - resp, err := doHTTPRequest(ctx, c.client, c.urls[16], in, &out) + resp, err := doHTTPRequest(ctx, c.client, c.urls[17], in, &out) if resp != nil { cerr := resp.Body.Close() if err == nil && cerr != nil { @@ -1249,11 +1370,12 @@ func (c *relayerClient) GetGasTank(ctx context.Context, id uint64) (*GasTank, er in := struct { Arg0 uint64 `json:"id"` }{id} + out := struct { Ret0 *GasTank `json:"gasTank"` }{} - resp, err := doHTTPRequest(ctx, c.client, c.urls[17], in, &out) + resp, err := doHTTPRequest(ctx, c.client, c.urls[18], in, &out) if resp != nil { cerr := resp.Body.Close() if err == nil && cerr != nil { @@ -1270,12 +1392,13 @@ func (c *relayerClient) AddGasTank(ctx context.Context, name string, feeMarkupFa Arg1 float64 `json:"feeMarkupFactor"` Arg2 *bool `json:"unlimited"` }{name, feeMarkupFactor, unlimited} + out := struct { Ret0 bool `json:"status"` Ret1 *GasTank `json:"gasTank"` }{} - resp, err := doHTTPRequest(ctx, c.client, c.urls[18], in, &out) + resp, err := doHTTPRequest(ctx, c.client, c.urls[19], in, &out) if resp != nil { cerr := resp.Body.Close() if err == nil && cerr != nil { @@ -1293,12 +1416,13 @@ func (c *relayerClient) UpdateGasTank(ctx context.Context, id uint64, name *stri Arg2 *float64 `json:"feeMarkupFactor"` Arg3 *bool `json:"unlimited"` }{id, name, feeMarkupFactor, unlimited} + out := struct { Ret0 bool `json:"status"` Ret1 *GasTank `json:"gasTank"` }{} - resp, err := doHTTPRequest(ctx, c.client, c.urls[19], in, &out) + resp, err := doHTTPRequest(ctx, c.client, c.urls[20], in, &out) if resp != nil { cerr := resp.Body.Close() if err == nil && cerr != nil { @@ -1313,11 +1437,12 @@ func (c *relayerClient) NextGasTankBalanceAdjustmentNonce(ctx context.Context, i in := struct { Arg0 uint64 `json:"id"` }{id} + out := struct { Ret0 uint64 `json:"nonce"` }{} - resp, err := doHTTPRequest(ctx, c.client, c.urls[20], in, &out) + resp, err := doHTTPRequest(ctx, c.client, c.urls[21], in, &out) if resp != nil { cerr := resp.Body.Close() if err == nil && cerr != nil { @@ -1334,12 +1459,13 @@ func (c *relayerClient) AdjustGasTankBalance(ctx context.Context, id uint64, non Arg1 uint64 `json:"nonce"` Arg2 float64 `json:"amount"` }{id, nonce, amount} + out := struct { Ret0 bool `json:"status"` Ret1 *GasTankBalanceAdjustment `json:"adjustment"` }{} - resp, err := doHTTPRequest(ctx, c.client, c.urls[21], in, &out) + resp, err := doHTTPRequest(ctx, c.client, c.urls[22], in, &out) if resp != nil { cerr := resp.Body.Close() if err == nil && cerr != nil { @@ -1355,11 +1481,12 @@ func (c *relayerClient) GetGasTankBalanceAdjustment(ctx context.Context, id uint Arg0 uint64 `json:"id"` Arg1 uint64 `json:"nonce"` }{id, nonce} + out := struct { Ret0 *GasTankBalanceAdjustment `json:"adjustment"` }{} - resp, err := doHTTPRequest(ctx, c.client, c.urls[22], in, &out) + resp, err := doHTTPRequest(ctx, c.client, c.urls[23], in, &out) if resp != nil { cerr := resp.Body.Close() if err == nil && cerr != nil { @@ -1375,12 +1502,13 @@ func (c *relayerClient) ListGasTankBalanceAdjustments(ctx context.Context, id ui Arg0 uint64 `json:"id"` Arg1 *Page `json:"page"` }{id, page} + out := struct { Ret0 *Page `json:"page"` Ret1 []*GasTankBalanceAdjustment `json:"adjustments"` }{} - resp, err := doHTTPRequest(ctx, c.client, c.urls[23], in, &out) + resp, err := doHTTPRequest(ctx, c.client, c.urls[24], in, &out) if resp != nil { cerr := resp.Body.Close() if err == nil && cerr != nil { @@ -1396,12 +1524,13 @@ func (c *relayerClient) ListGasSponsors(ctx context.Context, projectId uint64, p Arg0 uint64 `json:"projectId"` Arg1 *Page `json:"page"` }{projectId, page} + out := struct { Ret0 *Page `json:"page"` Ret1 []*GasSponsor `json:"gasSponsors"` }{} - resp, err := doHTTPRequest(ctx, c.client, c.urls[24], in, &out) + resp, err := doHTTPRequest(ctx, c.client, c.urls[25], in, &out) if resp != nil { cerr := resp.Body.Close() if err == nil && cerr != nil { @@ -1417,11 +1546,12 @@ func (c *relayerClient) GetGasSponsor(ctx context.Context, projectId uint64, id Arg0 uint64 `json:"projectId"` Arg1 uint64 `json:"id"` }{projectId, id} + out := struct { Ret0 *GasSponsor `json:"gasSponsor"` }{} - resp, err := doHTTPRequest(ctx, c.client, c.urls[25], in, &out) + resp, err := doHTTPRequest(ctx, c.client, c.urls[26], in, &out) if resp != nil { cerr := resp.Body.Close() if err == nil && cerr != nil { @@ -1439,12 +1569,13 @@ func (c *relayerClient) AddGasSponsor(ctx context.Context, projectId uint64, add Arg2 *string `json:"name"` Arg3 *bool `json:"active"` }{projectId, address, name, active} + out := struct { Ret0 bool `json:"status"` Ret1 *GasSponsor `json:"gasSponsor"` }{} - resp, err := doHTTPRequest(ctx, c.client, c.urls[26], in, &out) + resp, err := doHTTPRequest(ctx, c.client, c.urls[27], in, &out) if resp != nil { cerr := resp.Body.Close() if err == nil && cerr != nil { @@ -1462,12 +1593,13 @@ func (c *relayerClient) UpdateGasSponsor(ctx context.Context, projectId uint64, Arg2 *string `json:"name"` Arg3 *bool `json:"active"` }{projectId, id, name, active} + out := struct { Ret0 bool `json:"status"` Ret1 *GasSponsor `json:"gasSponsor"` }{} - resp, err := doHTTPRequest(ctx, c.client, c.urls[27], in, &out) + resp, err := doHTTPRequest(ctx, c.client, c.urls[28], in, &out) if resp != nil { cerr := resp.Body.Close() if err == nil && cerr != nil { @@ -1483,11 +1615,12 @@ func (c *relayerClient) RemoveGasSponsor(ctx context.Context, projectId uint64, Arg0 uint64 `json:"projectId"` Arg1 uint64 `json:"id"` }{projectId, id} + out := struct { Ret0 bool `json:"status"` }{} - resp, err := doHTTPRequest(ctx, c.client, c.urls[28], in, &out) + resp, err := doHTTPRequest(ctx, c.client, c.urls[29], in, &out) if resp != nil { cerr := resp.Body.Close() if err == nil && cerr != nil { @@ -1503,12 +1636,13 @@ func (c *relayerClient) AddressGasSponsors(ctx context.Context, address string, Arg0 string `json:"address"` Arg1 *Page `json:"page"` }{address, page} + out := struct { Ret0 *Page `json:"page"` Ret1 []*GasSponsor `json:"gasSponsors"` }{} - resp, err := doHTTPRequest(ctx, c.client, c.urls[29], in, &out) + resp, err := doHTTPRequest(ctx, c.client, c.urls[30], in, &out) if resp != nil { cerr := resp.Body.Close() if err == nil && cerr != nil { @@ -1523,11 +1657,12 @@ func (c *relayerClient) GetProjectBalance(ctx context.Context, projectId uint64) in := struct { Arg0 uint64 `json:"projectId"` }{projectId} + out := struct { Ret0 float64 `json:"balance"` }{} - resp, err := doHTTPRequest(ctx, c.client, c.urls[30], in, &out) + resp, err := doHTTPRequest(ctx, c.client, c.urls[31], in, &out) if resp != nil { cerr := resp.Body.Close() if err == nil && cerr != nil { @@ -1544,11 +1679,12 @@ func (c *relayerClient) AdjustProjectBalance(ctx context.Context, projectId uint Arg1 float64 `json:"amount"` Arg2 string `json:"identifier"` }{projectId, amount, identifier} + out := struct { Ret0 float64 `json:"balance"` }{} - resp, err := doHTTPRequest(ctx, c.client, c.urls[31], in, &out) + resp, err := doHTTPRequest(ctx, c.client, c.urls[32], in, &out) if resp != nil { cerr := resp.Body.Close() if err == nil && cerr != nil { @@ -1682,9 +1818,26 @@ func HTTPRequestHeaders(ctx context.Context) (http.Header, bool) { // type method struct { - Name string - Service string - Annotations map[string]string + name string + service string + annotations map[string]string +} + +func (m method) Name() string { + return m.name +} + +func (m method) Service() string { + return m.service +} + +func (m method) Annotations() map[string]string { + res := make(map[string]string, len(m.annotations)) + for k, v := range m.annotations { + res[k] = v + } + + return res } type contextKey struct { @@ -1831,4 +1984,6 @@ var ( ErrQueryFailed = WebRPCError{Code: 2003, Name: "QueryFailed", Message: "Query failed", HTTPStatus: 400} ErrNotFound = WebRPCError{Code: 3000, Name: "NotFound", Message: "Resource not found", HTTPStatus: 400} ErrInsufficientFee = WebRPCError{Code: 3004, Name: "InsufficientFee", Message: "Insufficient fee", HTTPStatus: 402} + ErrNotEnoughBalance = WebRPCError{Code: 3005, Name: "NotEnoughBalance", Message: "Not enough balance", HTTPStatus: 402} + ErrSimulationFailed = WebRPCError{Code: 3006, Name: "SimulationFailed", Message: "Simulation failed", HTTPStatus: 400} ) diff --git a/relayer/rpc_relayer.go b/relayer/rpc_relayer.go index 2203a257..d02d96ce 100644 --- a/relayer/rpc_relayer.go +++ b/relayer/rpc_relayer.go @@ -17,7 +17,11 @@ import ( "github.com/0xsequence/ethkit/go-ethereum/core/types" "github.com/0xsequence/go-sequence" "github.com/0xsequence/go-sequence/core" + v1 "github.com/0xsequence/go-sequence/core/v1" + v2 "github.com/0xsequence/go-sequence/core/v2" + v3 "github.com/0xsequence/go-sequence/core/v3" "github.com/0xsequence/go-sequence/relayer/proto" + "github.com/0xsequence/go-sequence/simulator" ) type RpcRelayer struct { @@ -53,30 +57,6 @@ func (r *RpcRelayer) GetProvider() *ethrpc.Provider { return r.provider } -func (r *RpcRelayer) EstimateGasLimits(ctx context.Context, walletConfig core.WalletConfig, walletContext sequence.WalletContext, txns sequence.Transactions) (sequence.Transactions, error) { - walletAddress, err := sequence.AddressFromWalletConfig(walletConfig, walletContext) - if err != nil { - return nil, err - } - - requestData, err := txns.EncodeRaw() - if err != nil { - return nil, err - } - - response, err := r.Service.UpdateMetaTxnGasLimits(ctx, walletAddress.Hex(), walletConfig, hexutil.Encode(requestData)) - if err != nil { - return nil, err - } - - responseData, err := hexutil.Decode(response) - if err != nil { - return nil, err - } - - return sequence.DecodeRawTransactions(responseData) -} - // NOTE: nonce space is 160 bits wide func (r *RpcRelayer) GetNonce(ctx context.Context, walletConfig core.WalletConfig, walletContext sequence.WalletContext, space *big.Int, blockNum *big.Int) (*big.Int, error) { if blockNum != nil { @@ -107,38 +87,44 @@ func (r *RpcRelayer) GetNonce(ctx context.Context, walletConfig core.WalletConfi return &nonce, nil } -func (r *RpcRelayer) Simulate(ctx context.Context, txs *sequence.SignedTransactions) ([]*sequence.RelayerSimulateResult, error) { - to, execdata, err := sequence.EncodeTransactionsForRelaying( - r, - txs.WalletAddress, - txs.WalletConfig, - txs.WalletContext, - txs.Transactions, - txs.Nonce, - txs.Signature, - ) - +func (r *RpcRelayer) Simulate(ctx context.Context, wallet common.Address, transactions sequence.Transactions) ([]*sequence.SimulateResult, error) { + payload, err := transactions.Payload(wallet, nil, nil, nil) if err != nil { return nil, err } - res, err := r.Service.Simulate(ctx, to.String(), "0x"+common.Bytes2Hex(execdata)) + results, err := r.Service.SimulateV3(ctx, wallet.String(), hexutil.Encode(payload.Encode(wallet))) if err != nil { return nil, err } - var results []*sequence.RelayerSimulateResult - for _, r := range res { - results = append(results, &sequence.RelayerSimulateResult{ - Executed: r.Executed, - Succeeded: r.Succeeded, - Result: r.Result, - Reason: r.Reason, - GasUsed: r.GasUsed, - GasLimit: r.GasLimit, + var results_ []*sequence.SimulateResult + for _, result := range results { + var result_ []byte + if result.Result != nil { + var err error + result_, err = hexutil.Decode(*result.Result) + if err != nil { + return nil, fmt.Errorf("invalid /SimulateV3 result: %w", err) + } + } + + var err error + if result.Error != nil { + err = fmt.Errorf("%s", *result.Error) + } + + results_ = append(results_, &sequence.SimulateResult{ + Result: simulator.Result{ + Status: simulator.Status(result.Status), + Result: result_, + Error: err, + GasUsed: result.GasUsed, + }, + GasLimit: result.GasLimit, }) } - return results, nil + return results_, nil } // Relay will submit the Sequence signed meta transaction to the relayer. The method will block until the relayer @@ -155,15 +141,32 @@ func (r *RpcRelayer) Relay(ctx context.Context, signedTxs *sequence.SignedTransa } } - to, execdata, err := sequence.EncodeTransactionsForRelaying( - r, - signedTxs.WalletAddress, - signedTxs.WalletConfig, - signedTxs.WalletContext, - signedTxs.Transactions, - signedTxs.Nonce, - signedTxs.Signature, - ) + var to common.Address + var execdata []byte + switch signedTxs.WalletConfig.(type) { + case *v1.WalletConfig, *v2.WalletConfig: + to, execdata, err = sequence.EncodeTransactionsForRelaying( + r, + signedTxs.WalletAddress, + signedTxs.WalletConfig, + signedTxs.WalletContext, + signedTxs.Transactions, + signedTxs.Nonce, + signedTxs.Signature, + ) + case *v3.WalletConfig: + to, execdata, err = sequence.EncodeTransactionsForRelayingV3( + r, + signedTxs.WalletAddress, + signedTxs.ChainID, + signedTxs.WalletConfig, + signedTxs.WalletContext, + signedTxs.Transactions, + signedTxs.Space, + signedTxs.Nonce, + signedTxs.Signature, + ) + } if err != nil { return "", nil, nil, err } @@ -185,7 +188,7 @@ func (r *RpcRelayer) Relay(ctx context.Context, signedTxs *sequence.SignedTransa // TODO: check contents of Contract and input, if empty, lets not even bother asking the server.. - ok, metaTxnID, err := r.Service.SendMetaTxn(ctx, call, txQuote, nil) + ok, metaTxnID, err := r.Service.SendMetaTxn(ctx, call, txQuote, nil, nil) if err != nil { return sequence.MetaTxnID(metaTxnID), nil, nil, err } diff --git a/relayer_test.go b/relayer_test.go index 3cc8fe7f..d2969987 100644 --- a/relayer_test.go +++ b/relayer_test.go @@ -168,6 +168,7 @@ func TestGetReceiptOfFailedTransactionBetweenTransactions(t *testing.T) { RevertOnError: false, } err = testutil.SignAndSendRawTransaction(t, wallet, stx) + assert.NoError(t, err) } // Get transactions digest diff --git a/signature.go b/signature.go index 22cf6359..1c04f8fe 100644 --- a/signature.go +++ b/signature.go @@ -19,6 +19,7 @@ import ( "github.com/0xsequence/go-sequence/core" v1 "github.com/0xsequence/go-sequence/core/v1" v2 "github.com/0xsequence/go-sequence/core/v2" + v3 "github.com/0xsequence/go-sequence/core/v3" "github.com/0xsequence/go-sequence/eip6492" "github.com/goware/logger" ) @@ -56,6 +57,10 @@ func V2DecodeSignature(sequenceSignature []byte) (core.Signature[*v2.WalletConfi return GenericDecodeSignature[*v2.WalletConfig](sequenceSignature) } +func V3DecodeSignature(sequenceSignature []byte) (core.Signature[*v3.WalletConfig], error) { + return GenericDecodeSignature[*v3.WalletConfig](sequenceSignature) +} + func DecodeSignature(sequenceSignature []byte) (core.Signature[*v2.WalletConfig], error) { return V2DecodeSignature(sequenceSignature) } @@ -72,7 +77,17 @@ func GenericRecoverWalletConfigFromDigest[C core.WalletConfig](digest, seqSig [] return wc, weight, err } - wc, weight, err = decoded.Recover(context.Background(), core.Digest{Hash: common.BytesToHash(digest)}, walletAddress, chainID, provider) + var payload core.Payload + switch decoded.(type) { + case core.Signature[*v1.WalletConfig]: + payload = v1.Digest(common.Hash(digest), walletAddress, chainID) + case core.Signature[*v2.WalletConfig]: + payload = v2.Digest(common.Hash(digest), walletAddress, chainID) + case core.Signature[*v3.WalletConfig]: + payload = core.PayloadDigest{Hash: common.Hash(digest), Address_: walletAddress, ChainID_: chainID} + } + + wc, weight, err = decoded.Recover(context.Background(), payload, provider) if err != nil { return wc, weight, err } @@ -88,6 +103,10 @@ func V2RecoverWalletConfigFromDigest(digest, seqSig []byte, walletAddress common return GenericRecoverWalletConfigFromDigest[*v2.WalletConfig](digest, seqSig, walletAddress, walletContext, chainID, provider) } +func V3RecoverWalletConfigFromDigest(digest, seqSig []byte, walletAddress common.Address, walletContext WalletContext, chainID *big.Int, provider *ethrpc.Provider) (*v3.WalletConfig, *big.Int, error) { + return GenericRecoverWalletConfigFromDigest[*v3.WalletConfig](digest, seqSig, walletAddress, walletContext, chainID, provider) +} + func RecoverWalletConfigFromDigest(digest, seqSig []byte, walletAddress common.Address, walletContext WalletContext, chainID *big.Int, provider *ethrpc.Provider) (*v2.WalletConfig, *big.Int, error) { return V2RecoverWalletConfigFromDigest(digest, seqSig, walletAddress, walletContext, chainID, provider) } @@ -144,14 +163,23 @@ func V2IsValidSignature(walletAddress common.Address, digest common.Hash, seqSig return GenericIsValidSignature[*v2.WalletConfig](walletAddress, digest, seqSig, walletContext, chainID, provider) } +func V3IsValidSignature(walletAddress common.Address, digest common.Hash, seqSig []byte, walletContext WalletContext, chainID *big.Int, provider *ethrpc.Provider) (bool, error) { + return GenericIsValidSignature[*v3.WalletConfig](walletAddress, digest, seqSig, walletContext, chainID, provider) +} + func GeneralIsValidSignature(walletAddress common.Address, digest common.Hash, seqSig []byte, walletContexts WalletContexts, chainID *big.Int, provider *ethrpc.Provider) (bool, error) { - isValid, err := V2IsValidSignature(walletAddress, digest, seqSig, walletContexts[2], chainID, provider) - if err == nil { + isValid, err3 := V3IsValidSignature(walletAddress, digest, seqSig, walletContexts[3], chainID, provider) + if err3 == nil { return isValid, nil } - isValid, err2 := V1IsValidSignature(walletAddress, digest, seqSig, walletContexts[1], chainID, provider) - if err2 != nil { + isValid, err2 := V2IsValidSignature(walletAddress, digest, seqSig, walletContexts[2], chainID, provider) + if err2 == nil { + return isValid, nil + } + + isValid, err := V1IsValidSignature(walletAddress, digest, seqSig, walletContexts[1], chainID, provider) + if err != nil { return false, fmt.Errorf("failed to validate: %v, %v", err, err2) } @@ -226,13 +254,12 @@ func GenericIsValidUndeployedSignature[C core.WalletConfig](walletAddress common return false, err } - recovered, weight, err := decoded.Recover(context.Background(), core.Digest{Hash: digest}, walletAddress, chainID, provider) + recovered, weight, err := decoded.Recover(context.Background(), v2.Digest(digest, walletAddress, chainID), provider) // TODO: v3 if err != nil { return false, err } - imageHash := recovered.ImageHash() - address, err := AddressFromImageHash(imageHash.Hex(), walletContext) + address, err := AddressFromWalletConfig(recovered, walletContext) if err != nil { return false, err } @@ -252,7 +279,16 @@ func V2IsValidUndeployedSignature(walletAddress common.Address, digest common.Ha return GenericIsValidUndeployedSignature[*v2.WalletConfig](walletAddress, digest, seqSig, walletContext, chainID, provider) } +func V3IsValidUndeployedSignature(walletAddress common.Address, digest common.Hash, seqSig []byte, walletContext WalletContext, chainID *big.Int, provider *ethrpc.Provider) (bool, error) { + return GenericIsValidUndeployedSignature[*v3.WalletConfig](walletAddress, digest, seqSig, walletContext, chainID, provider) +} + func IsValidUndeployedSignature(walletAddress common.Address, digest common.Hash, seqSig []byte, walletContext WalletContext, chainID *big.Int, provider *ethrpc.Provider) (bool, error) { + isValid, err := V3IsValidUndeployedSignature(walletAddress, digest, seqSig, walletContext, chainID, provider) + if err == nil { + return isValid, nil + } + return V2IsValidUndeployedSignature(walletAddress, digest, seqSig, walletContext, chainID, provider) } @@ -278,7 +314,7 @@ func EIP6492Signature(signature []byte, config core.WalletConfig) ([]byte, error return nil, fmt.Errorf("unable to encode deploy call: %w", err) } - signature, err = ethcoder.AbiCoder([]string{"address", "bytes", "bytes"}, []interface{}{factory, deploy, signature}) + signature, err = ethcoder.ABIPackArguments([]string{"address", "bytes", "bytes"}, []any{factory, deploy, signature}) if err != nil { return nil, fmt.Errorf("unable to encode eip-6492 signature: %w", err) } @@ -323,7 +359,7 @@ func EIP6492SignatureWithMultipleDeployments(signature []byte, configs []core.Wa return nil, err } - signature, err = ethcoder.AbiCoder([]string{"address", "bytes", "bytes"}, []interface{}{sequenceContextV2.GuestModuleAddress, execdata, signature}) + signature, err = ethcoder.ABIPackArguments([]string{"address", "bytes", "bytes"}, []any{sequenceContextV2.GuestModuleAddress, execdata, signature}) if err != nil { return nil, fmt.Errorf("unable to encode eip-6492 signature: %w", err) } @@ -343,7 +379,7 @@ func UnwrapEIP6492Signature(signature []byte) ([]byte, error) { signature_ []byte ) - err := ethcoder.AbiDecoder([]string{"address", "bytes", "bytes"}, signature, []any{&to, &data, &signature_}) + err := ethcoder.ABIUnpackArgumentsByRef([]string{"address", "bytes", "bytes"}, signature, []any{&to, &data, &signature_}) if err != nil { return nil, fmt.Errorf("unable to decode eip-6492 signature: %w", err) } diff --git a/signer.go b/signer.go index ec9efa87..f159590c 100644 --- a/signer.go +++ b/signer.go @@ -4,6 +4,7 @@ import ( "context" "math/big" + "github.com/0xsequence/ethkit/ethwallet" "github.com/0xsequence/ethkit/go-ethereum/common" ) @@ -28,3 +29,20 @@ type SignerDigestSigner interface { Signer DigestSigner } + +// NewSigner adapts an ethwallet.Wallet to the Signer and MessageSigner interfaces. +type walletSignerAdapter struct { + wallet *ethwallet.Wallet +} + +func (w *walletSignerAdapter) Address() common.Address { + return w.wallet.Address() +} + +func (w *walletSignerAdapter) SignMessage(msg []byte) ([]byte, error) { + return w.wallet.SignMessage(msg) +} + +func NewSigner(wallet *ethwallet.Wallet) Signer { + return &walletSignerAdapter{wallet: wallet} +} diff --git a/simulator/simulator.go b/simulator/simulator.go new file mode 100644 index 00000000..5f1cb2a8 --- /dev/null +++ b/simulator/simulator.go @@ -0,0 +1,187 @@ +package simulator + +import ( + "context" + "fmt" + "math/big" + + "github.com/0xsequence/ethkit/ethrpc" + "github.com/0xsequence/ethkit/go-ethereum/accounts/abi" + "github.com/0xsequence/ethkit/go-ethereum/common" + "github.com/0xsequence/ethkit/go-ethereum/common/hexutil" + "github.com/0xsequence/ethkit/go-ethereum/ethclient/gethclient" + "github.com/0xsequence/go-sequence/contracts" + "github.com/0xsequence/go-sequence/contracts/gen/v2/walletgasestimator" + "github.com/0xsequence/go-sequence/contracts/gen/v3/walletsimulator" + v3 "github.com/0xsequence/go-sequence/core/v3" +) + +type Status int + +const ( + StatusSkipped Status = iota + StatusSucceeded + StatusFailed + StatusAborted + StatusReverted + StatusNotEnoughGas +) + +type Result struct { + Status Status + Result []byte + Error error + GasUsed uint64 +} + +func SimulateV2(ctx context.Context, wallet common.Address, transactions []walletgasestimator.IModuleCallsTransaction, provider *ethrpc.Provider) ([]Result, error) { + overrides := map[common.Address]gethclient.OverrideAccount{ + wallet: {Code: contracts.V2.WalletGasEstimator.DeployedBin}, + } + + for i := range transactions { + if transactions[i].Value == nil { + transactions[i].Value = new(big.Int) + } + if transactions[i].GasLimit == nil { + transactions[i].GasLimit = new(big.Int) + } + } + + input, err := contracts.V2.WalletGasEstimator.Encode("simulateExecute", transactions) + if err != nil { + return nil, fmt.Errorf("unable to encode simulateExecute call: %w", err) + } + + var encoded string + _, err = provider.Do(ctx, ethrpc.NewCallBuilder[string]("eth_call", nil, map[string]any{"to": wallet, "input": hexutil.Encode(input)}, "latest", overrides).Into(&encoded)) + if err != nil { + return nil, fmt.Errorf("unable to simulateExecute: %w", err) + } + + decoded, err := hexutil.Decode(encoded) + if err != nil { + return nil, fmt.Errorf("unable to decode simulateExecute result: %w", err) + } + + var results []walletgasestimator.MainModuleGasEstimationSimulateResult + err = contracts.V2.WalletGasEstimator.Decode(&results, "simulateExecute", decoded) + if err != nil { + return nil, fmt.Errorf("unable to decode simulateExecute result: %w", err) + } + + if len(results) != len(transactions) { + return nil, fmt.Errorf("%v simulateExecute results for %v transactions", len(results), len(transactions)) + } + + results_ := make([]Result, 0, len(results)) + for i, result := range results { + var result_ Result + + if result.Executed { + if result.Succeeded { + result_.Status = StatusSucceeded + } else { + if transactions[i].RevertOnError { + result_.Status = StatusReverted + } else { + result_.Status = StatusFailed + } + + revert, err := abi.UnpackRevert(result.Result) + if err == nil { + result_.Error = fmt.Errorf("%v", revert) + } else { + result_.Error = fmt.Errorf("%v", hexutil.Encode(result.Result)) + } + } + } else { + result_.Status = StatusSkipped + } + + result_.Result = result.Result + result_.GasUsed = result.GasUsed.Uint64() + + results_ = append(results_, result_) + } + + return results_, nil +} + +func SimulateV3(ctx context.Context, wallet common.Address, calls []v3.Call, provider *ethrpc.Provider) ([]Result, error) { + overrides := map[common.Address]gethclient.OverrideAccount{ + wallet: {Code: contracts.V3.WalletSimulator.DeployedBin}, + } + + calls_ := make([]walletsimulator.PayloadCall, 0, len(calls)) + for _, call := range calls { + value := call.Value + if value == nil { + value = new(big.Int) + } + + gasLimit := call.GasLimit + if gasLimit == nil { + gasLimit = new(big.Int) + } + + calls_ = append(calls_, walletsimulator.PayloadCall{ + To: call.To, + Value: value, + Data: call.Data, + GasLimit: gasLimit, + DelegateCall: call.DelegateCall, + OnlyFallback: call.OnlyFallback, + BehaviorOnError: big.NewInt(int64(call.BehaviorOnError)), + }) + } + + input, err := contracts.V3.WalletSimulator.Encode("simulate", calls_) + if err != nil { + return nil, fmt.Errorf("unable to encode simulate call: %w", err) + } + + var encoded string + _, err = provider.Do(ctx, ethrpc.NewCallBuilder[string]("eth_call", nil, map[string]any{"to": wallet, "input": hexutil.Encode(input)}, "latest", overrides).Into(&encoded)) + if err != nil { + return nil, fmt.Errorf("unable to simulate: %w", err) + } + + decoded, err := hexutil.Decode(encoded) + if err != nil { + return nil, fmt.Errorf("unable to decode simulate result: %w", err) + } + + var results []walletsimulator.SimulatorResult + err = contracts.V3.WalletSimulator.Decode(&results, "simulate", decoded) + if err != nil { + return nil, fmt.Errorf("unable to decode simulate result: %w", err) + } + + if len(results) != len(calls) { + return nil, fmt.Errorf("%v simulate results for %v calls", len(results), len(calls)) + } + + results_ := make([]Result, 0, len(results)) + for _, result := range results { + var result_ Result + + result_.Status = Status(result.Status) + result_.Result = result.Result + result_.GasUsed = result.GasUsed.Uint64() + + switch result_.Status { + case StatusFailed, StatusAborted, StatusReverted: + revert, err := abi.UnpackRevert(result.Result) + if err == nil { + result_.Error = fmt.Errorf("%v", revert) + } else { + result_.Error = fmt.Errorf("%v", hexutil.Encode(result.Result)) + } + } + + results_ = append(results_, result_) + } + + return results_, nil +} diff --git a/testutil/chain/hardhat.config.js b/testutil/chain/hardhat.config.js new file mode 100644 index 00000000..02f60ff3 --- /dev/null +++ b/testutil/chain/hardhat.config.js @@ -0,0 +1,24 @@ +// see https://hardhat.org/hardhat-network/docs/reference#config +module.exports = { + solidity: "0.8.28", + + networks: { + hardhat: { + mining: { + auto: false, + interval: 1000 + }, + + // gas: 10000000000000, + // blockGasLimit: 10000000000000, + // gasPrice: 2, + initialBaseFeePerGas: 1, + chainId: 1337, + accounts: { + mnemonic: 'major danger this key only test please avoid main net use okay' + }, + // loggingEnabled: true + // verbose: true + }, + } +} diff --git a/testutil/chain/package.json b/testutil/chain/package.json index 1105dcfc..fcc29fc2 100644 --- a/testutil/chain/package.json +++ b/testutil/chain/package.json @@ -1,19 +1,22 @@ { - "name": "test-chain", + "name": "testchain", "version": "0.0.0", "private": true, "license": "none", "scripts": { - "test": "concurrently -k --success first 'pnpm start:geth' 'cd ../../ && make go-test'", - "start:geth": "docker run -p 8545:8545 --log-driver none --rm ethereum/client-go:v1.15.2 --dev --dev.period 2 --networkid ${npm_package_config_testchainChainID} --miner.gaslimit ${npm_package_config_testchainGasLimit} --miner.gasprice 1 --http --http.addr 0.0.0.0 --rpc.allow-unprotected-txs --verbosity 1", - "start:geth:verbose": "docker run -p 8545:8545 --rm ethereum/client-go:v1.15.2 --dev --dev.period 2 --networkid ${npm_package_config_testchainChainID} --miner.gaslimit ${npm_package_config_testchainGasLimit} --miner.gasprice 1 --http --http.addr 0.0.0.0 --rpc.allow-unprotected-txs", + "start:hardhat": "hardhat node --hostname 0.0.0.0", + "start:hardhat:verbose": "hardhat --verbose node --hostname 0.0.0.0", + "start:geth": "docker run -p 8545:8545 --rm ethereum/client-go:v1.15.11 --networkid ${npm_package_config_testchainChainID} --dev --dev.period 1 --dev.gaslimit ${npm_package_config_testchainGasLimit} --miner.gaslimit ${npm_package_config_testchainGasLimit} --miner.gasprice 1 --http --http.addr 0.0.0.0 --rpc.allow-unprotected-txs --verbosity 1", + "start:geth:verbose": "docker run -p 8545:8545 --rm ethereum/client-go:v1.15.11 --networkid ${npm_package_config_testchainChainID} --dev --dev.period 1 --dev.gaslimit ${npm_package_config_testchainGasLimit} --miner.gaslimit ${npm_package_config_testchainGasLimit} --miner.gasprice 1 --http --http.addr 0.0.0.0 --rpc.allow-unprotected-txs", "start:anvil": "anvil --mnemonic \"${npm_package_config_mnemonic}\" --block-time 1 --balance ${npm_package_config_etherBalance} --host 0.0.0.0 --chain-id ${npm_package_config_testchainChainID} --gas-limit ${npm_package_config_testchainGasLimit} --gas-price ${npm_package_config_testchainGasPrice}", - "start:anvil:verbose": "anvil --mnemonic \"${npm_package_config_mnemonic}\" --block-time 1 --balance ${npm_package_config_etherBalance} --host 0.0.0.0 --chain-id ${npm_package_config_testchainChainID} --gas-limit ${npm_package_config_testchainGasLimit} --gas-price ${npm_package_config_testchainGasPrice} --verbose", + "start:anvil:verbose": "anvil --mnemonic \"${npm_package_config_mnemonic}\" --block-time 1 --balance ${npm_package_config_etherBalance} --host 0.0.0.0 --chain-id ${npm_package_config_testchainChainID} --gas-limit ${npm_package_config_testchainGasLimit} --gas-price ${npm_package_config_testchainGasPrice} -vvv", + "install:anvil": "curl -L https://foundry.paradigm.xyz | bash; foundryup", "wait:server": "wait-on -t 120000 tcp:127.0.0.1:8545" }, "devDependencies": { "concurrently": "^9.1.2", - "wait-on": "^8.0.2" + "hardhat": "^2.24.1", + "wait-on": "^8.0.3" }, "config": { "mnemonic": "major danger this key only test please avoid main net use okay", @@ -21,6 +24,7 @@ "testchainPort": 8545, "testchainGasLimit": "15000000", "testchainGasPrice": "20000000000", - "etherBalance": "100000" + "etherBalance": "100000", + "extra": "" } } diff --git a/testutil/chain/pnpm-lock.yaml b/testutil/chain/pnpm-lock.yaml index 2022007a..5c58f8ea 100644 --- a/testutil/chain/pnpm-lock.yaml +++ b/testutil/chain/pnpm-lock.yaml @@ -11,18 +11,219 @@ importers: concurrently: specifier: ^9.1.2 version: 9.1.2 + hardhat: + specifier: ^2.24.1 + version: 2.24.1 wait-on: - specifier: ^8.0.2 - version: 8.0.2 + specifier: ^8.0.3 + version: 8.0.3 packages: + '@ethereumjs/rlp@5.0.2': + resolution: {integrity: sha512-DziebCdg4JpGlEqEdGgXmjqcFoJi+JGulUXwEjsZGAscAQ7MyD/7LE/GVCP29vEQxKc7AAwjT3A2ywHp2xfoCA==} + engines: {node: '>=18'} + hasBin: true + + '@ethereumjs/util@9.1.0': + resolution: {integrity: sha512-XBEKsYqLGXLah9PNJbgdkigthkG7TAGvlD/sH12beMXEyHDyigfcbdvHhmLyDWgDyOJn4QwiQUaF7yeuhnjdog==} + engines: {node: '>=18'} + + '@ethersproject/abi@5.8.0': + resolution: {integrity: sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==} + + '@ethersproject/abstract-provider@5.8.0': + resolution: {integrity: sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==} + + '@ethersproject/abstract-signer@5.8.0': + resolution: {integrity: sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==} + + '@ethersproject/address@5.8.0': + resolution: {integrity: sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==} + + '@ethersproject/base64@5.8.0': + resolution: {integrity: sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==} + + '@ethersproject/bignumber@5.8.0': + resolution: {integrity: sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==} + + '@ethersproject/bytes@5.8.0': + resolution: {integrity: sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==} + + '@ethersproject/constants@5.8.0': + resolution: {integrity: sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==} + + '@ethersproject/hash@5.8.0': + resolution: {integrity: sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==} + + '@ethersproject/keccak256@5.8.0': + resolution: {integrity: sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==} + + '@ethersproject/logger@5.8.0': + resolution: {integrity: sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==} + + '@ethersproject/networks@5.8.0': + resolution: {integrity: sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==} + + '@ethersproject/properties@5.8.0': + resolution: {integrity: sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==} + + '@ethersproject/rlp@5.8.0': + resolution: {integrity: sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==} + + '@ethersproject/signing-key@5.8.0': + resolution: {integrity: sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==} + + '@ethersproject/strings@5.8.0': + resolution: {integrity: sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==} + + '@ethersproject/transactions@5.8.0': + resolution: {integrity: sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==} + + '@ethersproject/web@5.8.0': + resolution: {integrity: sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==} + + '@fastify/busboy@2.1.1': + resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} + engines: {node: '>=14'} + '@hapi/hoek@9.3.0': resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} '@hapi/topo@5.1.0': resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} + '@noble/curves@1.4.2': + resolution: {integrity: sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==} + + '@noble/curves@1.8.2': + resolution: {integrity: sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g==} + engines: {node: ^14.21.3 || >=16} + + '@noble/hashes@1.2.0': + resolution: {integrity: sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==} + + '@noble/hashes@1.4.0': + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} + + '@noble/hashes@1.7.2': + resolution: {integrity: sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ==} + engines: {node: ^14.21.3 || >=16} + + '@noble/secp256k1@1.7.1': + resolution: {integrity: sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==} + + '@nomicfoundation/edr-darwin-arm64@0.11.0': + resolution: {integrity: sha512-aYTVdcSs27XG7ayTzvZ4Yn9z/ABSaUwicrtrYK2NR8IH0ik4N4bWzo/qH8rax6rewVLbHUkGyGYnsy5ZN4iiMw==} + engines: {node: '>= 18'} + + '@nomicfoundation/edr-darwin-x64@0.11.0': + resolution: {integrity: sha512-RxX7UYgvJrfcyT/uHUn44Nsy1XaoW+Q1khKMdHKxeW7BrgIi+Lz+siz3bX5vhSoAnKilDPhIVLrnC8zxQhjR2A==} + engines: {node: '>= 18'} + + '@nomicfoundation/edr-linux-arm64-gnu@0.11.0': + resolution: {integrity: sha512-J0j+rs0s11FuSipt/ymqrFmpJ7c0FSz1/+FohCIlUXDxFv//+1R/8lkGPjEYFmy8DPpk/iO8mcpqHTGckREbqA==} + engines: {node: '>= 18'} + + '@nomicfoundation/edr-linux-arm64-musl@0.11.0': + resolution: {integrity: sha512-4r32zkGMN7WT/CMEuW0VjbuEdIeCskHNDMW4SSgQSJOE/N9L1KSLJCSsAbPD3aYE+e4WRDTyOwmuLjeUTcLZKQ==} + engines: {node: '>= 18'} + + '@nomicfoundation/edr-linux-x64-gnu@0.11.0': + resolution: {integrity: sha512-SmdncQHLYtVNWLIMyGaY6LpAfamzTDe3fxjkirmJv3CWR5tcEyC6LMui/GsIVnJzXeNJBXAzwl8hTUAxHTM6kQ==} + engines: {node: '>= 18'} + + '@nomicfoundation/edr-linux-x64-musl@0.11.0': + resolution: {integrity: sha512-w6hUqpn/trwiH6SRuRGysj37LsQVCX5XDCA3Xi81sbOaLhbHrNvK9TXWyZmcuzbdTKQQW6VNywcSxDdOiChcJg==} + engines: {node: '>= 18'} + + '@nomicfoundation/edr-win32-x64-msvc@0.11.0': + resolution: {integrity: sha512-BLmULjRKoH9BsX+c4Na2ypV7NGeJ+M6Zpqj/faPOwleVscDdSr/IhriyPaXCe8dyfwbge7lWsbekiADtPSnB2Q==} + engines: {node: '>= 18'} + + '@nomicfoundation/edr@0.11.0': + resolution: {integrity: sha512-36WERf8ldvyHR6UAbcYsa+vpbW7tCrJGBwF4gXSsb8+STj1n66Hz85Y/O7B9+8AauX3PhglvV5dKl91tk43mWw==} + engines: {node: '>= 18'} + + '@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.2': + resolution: {integrity: sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==} + engines: {node: '>= 12'} + + '@nomicfoundation/solidity-analyzer-darwin-x64@0.1.2': + resolution: {integrity: sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw==} + engines: {node: '>= 12'} + + '@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.2': + resolution: {integrity: sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA==} + engines: {node: '>= 12'} + + '@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.2': + resolution: {integrity: sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA==} + engines: {node: '>= 12'} + + '@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.2': + resolution: {integrity: sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g==} + engines: {node: '>= 12'} + + '@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.2': + resolution: {integrity: sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg==} + engines: {node: '>= 12'} + + '@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.2': + resolution: {integrity: sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA==} + engines: {node: '>= 12'} + + '@nomicfoundation/solidity-analyzer@0.1.2': + resolution: {integrity: sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==} + engines: {node: '>= 12'} + + '@scure/base@1.1.9': + resolution: {integrity: sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==} + + '@scure/base@1.2.6': + resolution: {integrity: sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==} + + '@scure/bip32@1.1.5': + resolution: {integrity: sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==} + + '@scure/bip32@1.4.0': + resolution: {integrity: sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==} + + '@scure/bip39@1.1.1': + resolution: {integrity: sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==} + + '@scure/bip39@1.3.0': + resolution: {integrity: sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==} + + '@sentry/core@5.30.0': + resolution: {integrity: sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==} + engines: {node: '>=6'} + + '@sentry/hub@5.30.0': + resolution: {integrity: sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==} + engines: {node: '>=6'} + + '@sentry/minimal@5.30.0': + resolution: {integrity: sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==} + engines: {node: '>=6'} + + '@sentry/node@5.30.0': + resolution: {integrity: sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==} + engines: {node: '>=6'} + + '@sentry/tracing@5.30.0': + resolution: {integrity: sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==} + engines: {node: '>=6'} + + '@sentry/types@5.30.0': + resolution: {integrity: sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==} + engines: {node: '>=6'} + + '@sentry/utils@5.30.0': + resolution: {integrity: sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==} + engines: {node: '>=6'} + '@sideway/address@4.1.5': resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} @@ -32,6 +233,38 @@ packages: '@sideway/pinpoint@2.0.0': resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} + '@types/bn.js@5.1.6': + resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==} + + '@types/lru-cache@5.1.1': + resolution: {integrity: sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==} + + '@types/node@22.15.29': + resolution: {integrity: sha512-LNdjOkUDlU1RZb8e1kOIUpN1qQUlzGkEtbVNo53vbrwDg5om6oduhm4SiUaPW5ASTXhAiP0jInWG8Qx9fVlOeQ==} + + adm-zip@0.4.16: + resolution: {integrity: sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==} + engines: {node: '>=0.3.0'} + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + + ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -40,20 +273,90 @@ packages: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - axios@1.7.9: - resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==} + axios@1.9.0: + resolution: {integrity: sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bn.js@4.12.2: + resolution: {integrity: sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==} + + bn.js@5.2.2: + resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==} + + boxen@5.1.2: + resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==} + engines: {node: '>=10'} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + brorand@1.1.0: + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + + browser-stdout@1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + ci-info@2.0.0: + resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} + + clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + + cli-boxes@2.2.1: + resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} + engines: {node: '>=6'} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -69,22 +372,65 @@ packages: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} + command-exists@1.2.9: + resolution: {integrity: sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==} + + commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + concurrently@9.1.2: resolution: {integrity: sha512-H9MWcoPsYddwbOGM6difjVwVZHl63nwMEwDJG/L7VGtuaJhb12h2caPG2tVPWs7emuYix252iGfqOyrz1GczTQ==} engines: {node: '>=18'} hasBin: true + cookie@0.4.2: + resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} + engines: {node: '>= 0.6'} + + debug@4.4.1: + resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize@4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + diff@5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} + engines: {node: '>=0.3.1'} + dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} + elliptic@6.6.1: + resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==} + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + enquirer@2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} + engines: {node: '>=8.6'} + + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -105,6 +451,36 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + ethereum-cryptography@1.2.0: + resolution: {integrity: sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==} + + ethereum-cryptography@2.2.1: + resolution: {integrity: sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==} + + fdir@6.4.5: + resolution: {integrity: sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + follow-redirects@1.15.9: resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} engines: {node: '>=4.0'} @@ -118,6 +494,21 @@ packages: resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} engines: {node: '>= 6'} + fp-ts@1.19.3: + resolution: {integrity: sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==} + + fs-extra@7.0.1: + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} + engines: {node: '>=6 <7 || >=8'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} @@ -133,10 +524,34 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + deprecated: Glob versions prior to v9 are no longer supported + gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + hardhat@2.24.1: + resolution: {integrity: sha512-3iwrO2liEGCw1rz/l/mlB1rSNexCc4CFcMj0DlvjXGChzmD3sGUgLwWDOZPf+ya8MEm5ZhO1oprRVmb/wVi0YA==} + hasBin: true + peerDependencies: + ts-node: '*' + typescript: '*' + peerDependenciesMeta: + ts-node: + optional: true + typescript: + optional: true + has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} @@ -149,24 +564,126 @@ packages: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} + hash.js@1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + hmac-drbg@1.0.1: + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + immutable@4.3.7: + resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + io-ts@1.10.4: + resolution: {integrity: sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + joi@17.13.3: resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} + js-sha3@0.8.0: + resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + json-stream-stringify@3.1.6: + resolution: {integrity: sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog==} + engines: {node: '>=7.10.1'} + + jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + + keccak@3.0.4: + resolution: {integrity: sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==} + engines: {node: '>=10.0.0'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + lru_map@0.3.3: + resolution: {integrity: sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==} + math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} + memorystream@0.3.1: + resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} + engines: {node: '>= 0.10.0'} + + micro-eth-signer@0.14.0: + resolution: {integrity: sha512-5PLLzHiVYPWClEvZIXXFu5yutzpadb73rnQCpUqIHu3No3coFuWQNfE5tkBQJ7djuLYl6aRLaS0MgWJYGoqiBw==} + + micro-packed@0.7.3: + resolution: {integrity: sha512-2Milxs+WNC00TRlem41oRswvw31146GiSaoCT7s3Xi2gMUglW5QBeqlQaZeHr5tJx9nm3i57LNXPqxOOaWtTYg==} + mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} @@ -175,31 +692,175 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} + minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + + minimalistic-crypto-utils@1.0.1: + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + mnemonist@0.38.5: + resolution: {integrity: sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==} + + mocha@10.8.2: + resolution: {integrity: sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==} + engines: {node: '>= 14.0.0'} + hasBin: true + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + node-addon-api@2.0.2: + resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} + + node-gyp-build@4.8.4: + resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} + hasBin: true + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + obliterator@2.0.5: + resolution: {integrity: sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw==} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} + resolve@1.17.0: + resolution: {integrity: sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==} + rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + shell-quote@1.8.2: resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==} engines: {node: '>= 0.4'} + solc@0.8.26: + resolution: {integrity: sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==} + engines: {node: '>=10.0.0'} + hasBin: true + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + stacktrace-parser@0.1.11: + resolution: {integrity: sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==} + engines: {node: '>=6'} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -208,41 +869,413 @@ packages: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} + tinyglobby@0.2.14: + resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} + engines: {node: '>=12.0.0'} + + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - wait-on@8.0.2: - resolution: {integrity: sha512-qHlU6AawrgAIHlueGQHQ+ETcPLAauXbnoTKl3RKq20W0T8x0DKVAo5xWIYjHSyvHxQlcYbFdR0jp4T9bDVITFA==} + tsort@0.0.1: + resolution: {integrity: sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@0.7.1: + resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==} + engines: {node: '>=8'} + + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + + undici@5.29.0: + resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==} + engines: {node: '>=14.0'} + + universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + wait-on@8.0.3: + resolution: {integrity: sha512-nQFqAFzZDeRxsu7S3C7LbuxslHhk+gnJZHyethuGKAn2IVleIbTB9I3vJSQiSR+DifUqmdzfPMoMPJfLqMF2vw==} engines: {node: '>=12.0.0'} hasBin: true - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + widest-line@3.1.0: + resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} + engines: {node: '>=8'} + + workerpool@6.5.1: + resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs-unparser@2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@ethereumjs/rlp@5.0.2': {} + + '@ethereumjs/util@9.1.0': + dependencies: + '@ethereumjs/rlp': 5.0.2 + ethereum-cryptography: 2.2.1 + + '@ethersproject/abi@5.8.0': + dependencies: + '@ethersproject/address': 5.8.0 + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/constants': 5.8.0 + '@ethersproject/hash': 5.8.0 + '@ethersproject/keccak256': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/strings': 5.8.0 + + '@ethersproject/abstract-provider@5.8.0': + dependencies: + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/networks': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/transactions': 5.8.0 + '@ethersproject/web': 5.8.0 + + '@ethersproject/abstract-signer@5.8.0': + dependencies: + '@ethersproject/abstract-provider': 5.8.0 + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/properties': 5.8.0 + + '@ethersproject/address@5.8.0': + dependencies: + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/keccak256': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/rlp': 5.8.0 + + '@ethersproject/base64@5.8.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + + '@ethersproject/bignumber@5.8.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + bn.js: 5.2.2 + + '@ethersproject/bytes@5.8.0': + dependencies: + '@ethersproject/logger': 5.8.0 + + '@ethersproject/constants@5.8.0': + dependencies: + '@ethersproject/bignumber': 5.8.0 + + '@ethersproject/hash@5.8.0': + dependencies: + '@ethersproject/abstract-signer': 5.8.0 + '@ethersproject/address': 5.8.0 + '@ethersproject/base64': 5.8.0 + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/keccak256': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/strings': 5.8.0 + + '@ethersproject/keccak256@5.8.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + js-sha3: 0.8.0 + + '@ethersproject/logger@5.8.0': {} + + '@ethersproject/networks@5.8.0': + dependencies: + '@ethersproject/logger': 5.8.0 + + '@ethersproject/properties@5.8.0': + dependencies: + '@ethersproject/logger': 5.8.0 + + '@ethersproject/rlp@5.8.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + + '@ethersproject/signing-key@5.8.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/properties': 5.8.0 + bn.js: 5.2.2 + elliptic: 6.6.1 + hash.js: 1.1.7 + + '@ethersproject/strings@5.8.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + '@ethersproject/constants': 5.8.0 + '@ethersproject/logger': 5.8.0 + + '@ethersproject/transactions@5.8.0': + dependencies: + '@ethersproject/address': 5.8.0 + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/constants': 5.8.0 + '@ethersproject/keccak256': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/rlp': 5.8.0 + '@ethersproject/signing-key': 5.8.0 + + '@ethersproject/web@5.8.0': + dependencies: + '@ethersproject/base64': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/strings': 5.8.0 + + '@fastify/busboy@2.1.1': {} + + '@hapi/hoek@9.3.0': {} + + '@hapi/topo@5.1.0': + dependencies: + '@hapi/hoek': 9.3.0 + + '@noble/curves@1.4.2': + dependencies: + '@noble/hashes': 1.4.0 + + '@noble/curves@1.8.2': + dependencies: + '@noble/hashes': 1.7.2 + + '@noble/hashes@1.2.0': {} + + '@noble/hashes@1.4.0': {} + + '@noble/hashes@1.7.2': {} + + '@noble/secp256k1@1.7.1': {} + + '@nomicfoundation/edr-darwin-arm64@0.11.0': {} + + '@nomicfoundation/edr-darwin-x64@0.11.0': {} + + '@nomicfoundation/edr-linux-arm64-gnu@0.11.0': {} + + '@nomicfoundation/edr-linux-arm64-musl@0.11.0': {} + + '@nomicfoundation/edr-linux-x64-gnu@0.11.0': {} + + '@nomicfoundation/edr-linux-x64-musl@0.11.0': {} + + '@nomicfoundation/edr-win32-x64-msvc@0.11.0': {} + + '@nomicfoundation/edr@0.11.0': + dependencies: + '@nomicfoundation/edr-darwin-arm64': 0.11.0 + '@nomicfoundation/edr-darwin-x64': 0.11.0 + '@nomicfoundation/edr-linux-arm64-gnu': 0.11.0 + '@nomicfoundation/edr-linux-arm64-musl': 0.11.0 + '@nomicfoundation/edr-linux-x64-gnu': 0.11.0 + '@nomicfoundation/edr-linux-x64-musl': 0.11.0 + '@nomicfoundation/edr-win32-x64-msvc': 0.11.0 + + '@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.2': + optional: true + + '@nomicfoundation/solidity-analyzer-darwin-x64@0.1.2': + optional: true + + '@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.2': + optional: true + + '@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.2': + optional: true + + '@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.2': + optional: true + + '@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.2': + optional: true + + '@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.2': + optional: true + + '@nomicfoundation/solidity-analyzer@0.1.2': + optionalDependencies: + '@nomicfoundation/solidity-analyzer-darwin-arm64': 0.1.2 + '@nomicfoundation/solidity-analyzer-darwin-x64': 0.1.2 + '@nomicfoundation/solidity-analyzer-linux-arm64-gnu': 0.1.2 + '@nomicfoundation/solidity-analyzer-linux-arm64-musl': 0.1.2 + '@nomicfoundation/solidity-analyzer-linux-x64-gnu': 0.1.2 + '@nomicfoundation/solidity-analyzer-linux-x64-musl': 0.1.2 + '@nomicfoundation/solidity-analyzer-win32-x64-msvc': 0.1.2 + + '@scure/base@1.1.9': {} + + '@scure/base@1.2.6': {} + + '@scure/bip32@1.1.5': + dependencies: + '@noble/hashes': 1.2.0 + '@noble/secp256k1': 1.7.1 + '@scure/base': 1.1.9 + + '@scure/bip32@1.4.0': + dependencies: + '@noble/curves': 1.4.2 + '@noble/hashes': 1.4.0 + '@scure/base': 1.1.9 + + '@scure/bip39@1.1.1': + dependencies: + '@noble/hashes': 1.2.0 + '@scure/base': 1.1.9 + + '@scure/bip39@1.3.0': + dependencies: + '@noble/hashes': 1.4.0 + '@scure/base': 1.1.9 + + '@sentry/core@5.30.0': + dependencies: + '@sentry/hub': 5.30.0 + '@sentry/minimal': 5.30.0 + '@sentry/types': 5.30.0 + '@sentry/utils': 5.30.0 + tslib: 1.14.1 - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} + '@sentry/hub@5.30.0': + dependencies: + '@sentry/types': 5.30.0 + '@sentry/utils': 5.30.0 + tslib: 1.14.1 - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} + '@sentry/minimal@5.30.0': + dependencies: + '@sentry/hub': 5.30.0 + '@sentry/types': 5.30.0 + tslib: 1.14.1 - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} + '@sentry/node@5.30.0': + dependencies: + '@sentry/core': 5.30.0 + '@sentry/hub': 5.30.0 + '@sentry/tracing': 5.30.0 + '@sentry/types': 5.30.0 + '@sentry/utils': 5.30.0 + cookie: 0.4.2 + https-proxy-agent: 5.0.1 + lru_map: 0.3.3 + tslib: 1.14.1 + transitivePeerDependencies: + - supports-color -snapshots: + '@sentry/tracing@5.30.0': + dependencies: + '@sentry/hub': 5.30.0 + '@sentry/minimal': 5.30.0 + '@sentry/types': 5.30.0 + '@sentry/utils': 5.30.0 + tslib: 1.14.1 - '@hapi/hoek@9.3.0': {} + '@sentry/types@5.30.0': {} - '@hapi/topo@5.1.0': + '@sentry/utils@5.30.0': dependencies: - '@hapi/hoek': 9.3.0 + '@sentry/types': 5.30.0 + tslib: 1.14.1 '@sideway/address@4.1.5': dependencies: @@ -252,32 +1285,137 @@ snapshots: '@sideway/pinpoint@2.0.0': {} + '@types/bn.js@5.1.6': + dependencies: + '@types/node': 22.15.29 + + '@types/lru-cache@5.1.1': {} + + '@types/node@22.15.29': + dependencies: + undici-types: 6.21.0 + + adm-zip@0.4.16: {} + + agent-base@6.0.2: + dependencies: + debug: 4.4.1(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + aggregate-error@3.1.0: + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + + ansi-align@3.0.1: + dependencies: + string-width: 4.2.3 + + ansi-colors@4.1.3: {} + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + ansi-regex@5.0.1: {} ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + argparse@2.0.1: {} + asynckit@0.4.0: {} - axios@1.7.9: + axios@1.9.0: dependencies: - follow-redirects: 1.15.9 + follow-redirects: 1.15.9(debug@4.4.1) form-data: 4.0.2 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug + balanced-match@1.0.2: {} + + binary-extensions@2.3.0: {} + + bn.js@4.12.2: {} + + bn.js@5.2.2: {} + + boxen@5.1.2: + dependencies: + ansi-align: 3.0.1 + camelcase: 6.3.0 + chalk: 4.1.2 + cli-boxes: 2.2.1 + string-width: 4.2.3 + type-fest: 0.20.2 + widest-line: 3.1.0 + wrap-ansi: 7.0.0 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + brorand@1.1.0: {} + + browser-stdout@1.3.1: {} + + buffer-from@1.1.2: {} + + bytes@3.1.2: {} + call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 function-bind: 1.1.2 + camelcase@6.3.0: {} + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + + ci-info@2.0.0: {} + + clean-stack@2.2.0: {} + + cli-boxes@2.2.1: {} + + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -294,6 +1432,10 @@ snapshots: dependencies: delayed-stream: 1.0.0 + command-exists@1.2.9: {} + + commander@8.3.0: {} + concurrently@9.1.2: dependencies: chalk: 4.1.2 @@ -304,16 +1446,47 @@ snapshots: tree-kill: 1.2.2 yargs: 17.7.2 + cookie@0.4.2: {} + + debug@4.4.1(supports-color@8.1.1): + dependencies: + ms: 2.1.3 + optionalDependencies: + supports-color: 8.1.1 + + decamelize@4.0.0: {} + delayed-stream@1.0.0: {} + depd@2.0.0: {} + + diff@5.2.0: {} + dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 es-errors: 1.3.0 gopd: 1.2.0 + elliptic@6.6.1: + dependencies: + bn.js: 4.12.2 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + emoji-regex@8.0.0: {} + enquirer@2.4.1: + dependencies: + ansi-colors: 4.1.3 + strip-ansi: 6.0.1 + + env-paths@2.2.1: {} + es-define-property@1.0.1: {} es-errors@1.3.0: {} @@ -331,7 +1504,40 @@ snapshots: escalade@3.2.0: {} - follow-redirects@1.15.9: {} + escape-string-regexp@4.0.0: {} + + ethereum-cryptography@1.2.0: + dependencies: + '@noble/hashes': 1.2.0 + '@noble/secp256k1': 1.7.1 + '@scure/bip32': 1.1.5 + '@scure/bip39': 1.1.1 + + ethereum-cryptography@2.2.1: + dependencies: + '@noble/curves': 1.4.2 + '@noble/hashes': 1.4.0 + '@scure/bip32': 1.4.0 + '@scure/bip39': 1.3.0 + + fdir@6.4.5(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat@5.0.2: {} + + follow-redirects@1.15.9(debug@4.4.1): + optionalDependencies: + debug: 4.4.1(supports-color@8.1.1) form-data@4.0.2: dependencies: @@ -340,6 +1546,19 @@ snapshots: es-set-tostringtag: 2.1.0 mime-types: 2.1.35 + fp-ts@1.19.3: {} + + fs-extra@7.0.1: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + function-bind@1.1.2: {} get-caller-file@2.0.5: {} @@ -362,8 +1581,70 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob@8.1.0: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.6 + once: 1.4.0 + gopd@1.2.0: {} + graceful-fs@4.2.11: {} + + hardhat@2.24.1: + dependencies: + '@ethereumjs/util': 9.1.0 + '@ethersproject/abi': 5.8.0 + '@nomicfoundation/edr': 0.11.0 + '@nomicfoundation/solidity-analyzer': 0.1.2 + '@sentry/node': 5.30.0 + '@types/bn.js': 5.1.6 + '@types/lru-cache': 5.1.1 + adm-zip: 0.4.16 + aggregate-error: 3.1.0 + ansi-escapes: 4.3.2 + boxen: 5.1.2 + chokidar: 4.0.3 + ci-info: 2.0.0 + debug: 4.4.1(supports-color@8.1.1) + enquirer: 2.4.1 + env-paths: 2.2.1 + ethereum-cryptography: 1.2.0 + find-up: 5.0.0 + fp-ts: 1.19.3 + fs-extra: 7.0.1 + immutable: 4.3.7 + io-ts: 1.10.4 + json-stream-stringify: 3.1.6 + keccak: 3.0.4 + lodash: 4.17.21 + micro-eth-signer: 0.14.0 + mnemonist: 0.38.5 + mocha: 10.8.2 + p-map: 4.0.0 + picocolors: 1.1.1 + raw-body: 2.5.2 + resolve: 1.17.0 + semver: 6.3.1 + solc: 0.8.26(debug@4.4.1) + source-map-support: 0.5.21 + stacktrace-parser: 0.1.11 + tinyglobby: 0.2.14 + tsort: 0.0.1 + undici: 5.29.0 + uuid: 8.3.2 + ws: 7.5.10 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + has-flag@4.0.0: {} has-symbols@1.1.0: {} @@ -372,12 +1653,75 @@ snapshots: dependencies: has-symbols: 1.1.0 + hash.js@1.1.7: + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + hasown@2.0.2: dependencies: function-bind: 1.1.2 + he@1.2.0: {} + + hmac-drbg@1.0.1: + dependencies: + hash.js: 1.1.7 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + + http-errors@2.0.0: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.4.1(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + immutable@4.3.7: {} + + indent-string@4.0.0: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + io-ts@1.10.4: + dependencies: + fp-ts: 1.19.3 + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-extglob@2.1.1: {} + is-fullwidth-code-point@3.0.0: {} + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + is-plain-obj@2.1.0: {} + + is-unicode-supported@0.1.0: {} + joi@17.13.3: dependencies: '@hapi/hoek': 9.3.0 @@ -386,38 +1730,228 @@ snapshots: '@sideway/formula': 3.0.1 '@sideway/pinpoint': 2.0.0 + js-sha3@0.8.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + json-stream-stringify@3.1.6: {} + + jsonfile@4.0.0: + optionalDependencies: + graceful-fs: 4.2.11 + + keccak@3.0.4: + dependencies: + node-addon-api: 2.0.2 + node-gyp-build: 4.8.4 + readable-stream: 3.6.2 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + lodash@4.17.21: {} + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + lru_map@0.3.3: {} + math-intrinsics@1.1.0: {} + memorystream@0.3.1: {} + + micro-eth-signer@0.14.0: + dependencies: + '@noble/curves': 1.8.2 + '@noble/hashes': 1.7.2 + micro-packed: 0.7.3 + + micro-packed@0.7.3: + dependencies: + '@scure/base': 1.2.6 + mime-db@1.52.0: {} mime-types@2.1.35: dependencies: mime-db: 1.52.0 + minimalistic-assert@1.0.1: {} + + minimalistic-crypto-utils@1.0.1: {} + + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.1 + minimist@1.2.8: {} + mnemonist@0.38.5: + dependencies: + obliterator: 2.0.5 + + mocha@10.8.2: + dependencies: + ansi-colors: 4.1.3 + browser-stdout: 1.3.1 + chokidar: 3.6.0 + debug: 4.4.1(supports-color@8.1.1) + diff: 5.2.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 8.1.0 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 5.1.6 + ms: 2.1.3 + serialize-javascript: 6.0.2 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + workerpool: 6.5.1 + yargs: 16.2.0 + yargs-parser: 20.2.9 + yargs-unparser: 2.0.0 + + ms@2.1.3: {} + + node-addon-api@2.0.2: {} + + node-gyp-build@4.8.4: {} + + normalize-path@3.0.0: {} + + obliterator@2.0.5: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + os-tmpdir@1.0.2: {} + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + p-map@4.0.0: + dependencies: + aggregate-error: 3.1.0 + + path-exists@4.0.0: {} + + path-parse@1.0.7: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + picomatch@4.0.2: {} + proxy-from-env@1.1.0: {} + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + raw-body@2.5.2: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + readdirp@4.1.2: {} + require-directory@2.1.1: {} + resolve@1.17.0: + dependencies: + path-parse: 1.0.7 + rxjs@7.8.1: dependencies: tslib: 2.8.1 + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + + safe-buffer@5.2.1: {} + + safer-buffer@2.1.2: {} + + semver@5.7.2: {} + + semver@6.3.1: {} + + serialize-javascript@6.0.2: + dependencies: + randombytes: 2.1.0 + + setprototypeof@1.2.0: {} + shell-quote@1.8.2: {} + solc@0.8.26(debug@4.4.1): + dependencies: + command-exists: 1.2.9 + commander: 8.3.0 + follow-redirects: 1.15.9(debug@4.4.1) + js-sha3: 0.8.0 + memorystream: 0.3.1 + semver: 5.7.2 + tmp: 0.0.33 + transitivePeerDependencies: + - debug + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + stacktrace-parser@0.1.11: + dependencies: + type-fest: 0.7.1 + + statuses@2.0.1: {} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 + strip-json-comments@3.1.1: {} + supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -426,30 +1960,98 @@ snapshots: dependencies: has-flag: 4.0.0 + tinyglobby@0.2.14: + dependencies: + fdir: 6.4.5(picomatch@4.0.2) + picomatch: 4.0.2 + + tmp@0.0.33: + dependencies: + os-tmpdir: 1.0.2 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toidentifier@1.0.1: {} + tree-kill@1.2.2: {} + tslib@1.14.1: {} + tslib@2.8.1: {} - wait-on@8.0.2: + tsort@0.0.1: {} + + type-fest@0.20.2: {} + + type-fest@0.21.3: {} + + type-fest@0.7.1: {} + + undici-types@6.21.0: {} + + undici@5.29.0: dependencies: - axios: 1.7.9 + '@fastify/busboy': 2.1.1 + + universalify@0.1.2: {} + + unpipe@1.0.0: {} + + util-deprecate@1.0.2: {} + + uuid@8.3.2: {} + + wait-on@8.0.3: + dependencies: + axios: 1.9.0 joi: 17.13.3 lodash: 4.17.21 minimist: 1.2.8 - rxjs: 7.8.1 + rxjs: 7.8.2 transitivePeerDependencies: - debug + widest-line@3.1.0: + dependencies: + string-width: 4.2.3 + + workerpool@6.5.1: {} + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 + wrappy@1.0.2: {} + + ws@7.5.10: {} + y18n@5.0.8: {} + yargs-parser@20.2.9: {} + yargs-parser@21.1.1: {} + yargs-unparser@2.0.0: + dependencies: + camelcase: 6.3.0 + decamelize: 4.0.0 + flat: 5.0.2 + is-plain-obj: 2.1.0 + + yargs@16.2.0: + dependencies: + cliui: 7.0.4 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + yargs@17.7.2: dependencies: cliui: 8.0.1 @@ -459,3 +2061,5 @@ snapshots: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 + + yocto-queue@0.1.0: {} diff --git a/testutil/helpers.go b/testutil/helpers.go index 926b528f..dcd291b8 100644 --- a/testutil/helpers.go +++ b/testutil/helpers.go @@ -14,8 +14,10 @@ import ( "github.com/0xsequence/ethkit/ethwallet" "github.com/0xsequence/ethkit/go-ethereum/common" + "github.com/0xsequence/ethkit/go-ethereum/common/hexutil" "github.com/0xsequence/ethkit/go-ethereum/core/types" "github.com/0xsequence/go-sequence" + "github.com/0xsequence/go-sequence/contracts" "github.com/0xsequence/go-sequence/core" "github.com/stretchr/testify/assert" ) @@ -26,6 +28,7 @@ var sequenceContext = sequence.WalletContext{ MainModuleUpgradableAddress: common.HexToAddress("0x7EFE6cE415956c5f80C6530cC6cc81b4808F6118"), GuestModuleAddress: common.HexToAddress("0x02390F3E6E5FD1C6786CB78FD3027C117a9955A7"), UtilsAddress: common.HexToAddress("0xd130B43062D875a4B7aF3f8fc036Bc6e9D3E1B3E"), + CreationCode: hexutil.Encode(contracts.V1.CreationCode), } var sequenceContextV2 = sequence.WalletContext{ @@ -34,6 +37,16 @@ var sequenceContextV2 = sequence.WalletContext{ MainModuleUpgradableAddress: common.HexToAddress("0x4222dcA3974E39A8b41c411FeDDE9b09Ae14b911"), GuestModuleAddress: common.HexToAddress("0xfea230Ee243f88BC698dD8f1aE93F8301B6cdfaE"), UtilsAddress: common.HexToAddress("0xdbbFa3cB3B087B64F4ef5E3D20Dda2488AA244e6"), + CreationCode: hexutil.Encode(contracts.V2.CreationCode), +} + +var sequenceContextV3 = sequence.WalletContext{ + FactoryAddress: common.HexToAddress("0x7aaaD48b90Ea2c1DaE03cb68ea1Ed8E1DD26dB38"), + MainModuleAddress: common.HexToAddress("0x4d7c112790F03caFc7287b1a29Aa03da1Bb00C10"), + MainModuleUpgradableAddress: common.HexToAddress("0x7C96ff440BCE51EEF0C9f748D69246B4b3F28173"), + GuestModuleAddress: common.HexToAddress("0x252968348A07DDe07C13c9A67e31e3C429d8966D"), + UtilsAddress: common.HexToAddress("0x4d7c112790F03caFc7287b1a29Aa03da1Bb00C10"), + CreationCode: hexutil.Encode(contracts.V3.CreationCode), } func SequenceContext() sequence.WalletContext { @@ -48,10 +61,15 @@ func V2SequenceContext() sequence.WalletContext { return sequenceContextV2 } +func V3SequenceContext() sequence.WalletContext { + return sequenceContextV3 +} + func SequenceContexts() map[uint8]sequence.WalletContext { return map[uint8]sequence.WalletContext{ 1: sequenceContext, 2: sequenceContextV2, + 3: sequenceContextV3, } } diff --git a/testutil/testutil.go b/testutil/testutil.go index d169471b..57ab4ea0 100644 --- a/testutil/testutil.go +++ b/testutil/testutil.go @@ -17,12 +17,14 @@ import ( "github.com/0xsequence/ethkit/ethwallet" "github.com/0xsequence/ethkit/go-ethereum/accounts/abi/bind" "github.com/0xsequence/ethkit/go-ethereum/common" + "github.com/0xsequence/ethkit/go-ethereum/common/hexutil" "github.com/0xsequence/ethkit/go-ethereum/core/types" "github.com/0xsequence/go-sequence" "github.com/0xsequence/go-sequence/contracts" "github.com/0xsequence/go-sequence/core" v1 "github.com/0xsequence/go-sequence/core/v1" v2 "github.com/0xsequence/go-sequence/core/v2" + v3 "github.com/0xsequence/go-sequence/core/v3" "github.com/0xsequence/go-sequence/deployer" "github.com/0xsequence/go-sequence/relayer" ) @@ -165,6 +167,10 @@ func (c *TestChain) V2SequenceContext() sequence.WalletContext { return V2SequenceContext() } +func (c *TestChain) V3SequenceContext() sequence.WalletContext { + return V3SequenceContext() +} + func (c *TestChain) SetRpcRelayer(relayerURL string) error { rpcRelayer, err := relayer.NewRpcRelayer(relayerURL, "", c.Provider, c.ReceiptsListener) if err != nil { @@ -331,11 +337,12 @@ func (c *TestChain) V1DeploySequenceContext() (sequence.WalletContext, error) { MainModuleUpgradableAddress: mainModuleUpgradableAddress, GuestModuleAddress: guestModuleAddress, UtilsAddress: utilsAddress, + CreationCode: hexutil.Encode(contracts.V1.CreationCode), }, nil } func (c *TestChain) V2DeploySequenceContext() (sequence.WalletContext, error) { - ud, err := deployer.NewEIP2740Deployer(c.GetDeployWallet()) + ud, err := deployer.NewEIP2470Deployer(c.GetDeployWallet()) if err != nil { return sequence.WalletContext{}, fmt.Errorf("testutil, V2DeploySequenceContext: %w", err) } @@ -373,6 +380,46 @@ func (c *TestChain) V2DeploySequenceContext() (sequence.WalletContext, error) { MainModuleUpgradableAddress: mainModuleUpgradableAddress, GuestModuleAddress: guestModuleAddress, UtilsAddress: utilsAddress, + CreationCode: hexutil.Encode(contracts.V2.CreationCode), + }, nil +} + +func (c *TestChain) V3DeploySequenceContext() (sequence.WalletContext, error) { + ud, err := deployer.NewEIP2470Deployer(c.GetDeployWallet()) + if err != nil { + return sequence.WalletContext{}, fmt.Errorf("testutil, V3DeploySequenceContext: %w", err) + } + + ctx := context.Background() + + walletFactoryAddress, err := ud.Deploy(ctx, contracts.V3.WalletFactory.ABI, contracts.V3.WalletFactory.Bin, 0, nil, 10000000) + if err != nil { + return sequence.WalletContext{}, fmt.Errorf("testutil, V3DeploySequenceContext (factory deploy): %w", err) + } + + stage1ModuleAddress, err := ud.Deploy(ctx, contracts.V3.WalletStage1Module.ABI, contracts.V3.WalletStage1Module.Bin, 0, nil, 10000000, walletFactoryAddress, common.Address{}) + if err != nil { + return sequence.WalletContext{}, fmt.Errorf("testutil, V3DeploySequenceContext (stage1 deploy): %w", err) + } + + stage2Module := ethcontract.NewContractCaller(stage1ModuleAddress, contracts.V3.WalletStage1Module.ABI, c.Provider) + var stage2ModuleAddress common.Address + if err := stage2Module.Call(&bind.CallOpts{Context: ctx}, &[]any{&stage2ModuleAddress}, "STAGE_2_IMPLEMENTATION"); err != nil { + return sequence.WalletContext{}, fmt.Errorf("testutil, V3DeploySequenceContext (stage2 deploy): %w", err) + } + + guestModuleAddress, err := ud.Deploy(ctx, contracts.V3.WalletGuestModule.ABI, contracts.V3.WalletGuestModule.Bin, 0, nil, 10000000) + if err != nil { + return sequence.WalletContext{}, fmt.Errorf("testutil, V3DeploySequenceContext (guest deploy): %w", err) + } + + return sequence.WalletContext{ + FactoryAddress: walletFactoryAddress, + MainModuleAddress: stage1ModuleAddress, + MainModuleUpgradableAddress: stage2ModuleAddress, + GuestModuleAddress: guestModuleAddress, + UtilsAddress: stage1ModuleAddress, + CreationCode: hexutil.Encode(contracts.V3.CreationCode), }, nil } @@ -391,6 +438,11 @@ func (c *TestChain) MustDeploySequenceContexts() map[uint8]sequence.WalletContex panic(err) } + sc3, err := c.V3DeploySequenceContext() + if err != nil { + panic(err) + } + if sc != sequenceContext { panic("MustDeploySequenceContext failed, deployed context does not match testutil.sequenceContext") } @@ -399,9 +451,14 @@ func (c *TestChain) MustDeploySequenceContexts() map[uint8]sequence.WalletContex panic("MustDeploySequenceContext failed, deployed context does not match testutil.sequenceContextV2") } + if sc3 != sequenceContextV3 { + panic("MustDeploySequenceContext failed, deployed context does not match testutil.sequenceContextV3") + } + return map[uint8]sequence.WalletContext{ 1: sc, 2: sc2, + 3: sc3, } } @@ -505,6 +562,20 @@ func (c *TestChain) V2DummySequenceWallets(nWallets uint64, startingSeed uint64) return wallets, nil } +func (c *TestChain) V3DummySequenceWallets(nWallets uint64, startingSeed uint64) ([]*sequence.Wallet[core.WalletConfig], error) { + var wallets []*sequence.Wallet[core.WalletConfig] + + for i := uint64(0); i < nWallets; i++ { + wallet, err := c.V3DummySequenceWallet(startingSeed + i*1000) + if err != nil { + return nil, err + } + wallets = append(wallets, wallet) + } + + return wallets, nil +} + func (c *TestChain) RandomNonce() *big.Int { space := big.NewInt(int64(time.Now().Nanosecond())) @@ -516,6 +587,7 @@ func (c *TestChain) RandomNonce() *big.Int { return encoded } +// ... existing code ... func (c *TestChain) V1DummySequenceWallet(seed uint64, optSkipDeploy ...bool) (*sequence.Wallet[core.WalletConfig], error) { // Generate a single-owner sequence wallet based on a private key generated from seed above owner, err := ethwallet.NewWalletFromPrivateKey(DummyPrivateKey(seed)) @@ -600,6 +672,104 @@ func (c *TestChain) V2DummySequenceWallet(seed uint64, optSkipDeploy ...bool) (* return genericWallet, nil } +func (c *TestChain) V3DummySequenceWallet(seed uint64, optSkipDeploy ...bool) (*sequence.Wallet[core.WalletConfig], error) { + // Generate a single-owner sequence wallet based on a private key generated from seed above + owner, err := ethwallet.NewWalletFromPrivateKey(DummyPrivateKey(seed)) + if err != nil { + return nil, err + } + wallet, err := sequence.GenericNewWalletSingleOwner[*v3.WalletConfig](owner, V3SequenceContext()) + if err != nil { + return nil, err + } + + // Set provider on sequence wallet + err = wallet.SetProvider(c.Provider) + if err != nil { + return nil, err + } + + // Set relayer on sequence wallet, which is used when the wallet sends transactions + localRelayer, err := relayer.NewLocalRelayer(c.GetRelayerWallet(), c.ReceiptsListener) + if err != nil { + return nil, err + } + err = wallet.SetRelayer(localRelayer) + if err != nil { + return nil, err + } + + genericWallet := sequence.GenericNewWalletWithCoreWalletConfig[*v3.WalletConfig](wallet) + + // Skip deploying the dummy wallet if specified + if len(optSkipDeploy) > 0 && optSkipDeploy[0] { + return genericWallet, nil + } + + err = c.DeploySequenceWallet(genericWallet) + if err != nil { + return nil, err + } + + return genericWallet, nil +} + +func (c *TestChain) V3DummySequenceWalletWithIntentConfig(seed uint64, calls []*v3.CallsPayload, optSkipDeploy ...bool) (*sequence.Wallet[core.WalletConfig], error) { + // Generate a single-owner sequence wallet based on a private key generated from seed above + owner, err := ethwallet.NewWalletFromPrivateKey(DummyPrivateKey(seed)) + if err != nil { + return nil, err + } + + // Create an intent config + intentConfig, err := sequence.CreateIntentConfiguration(owner.Address(), calls, nil) + if err != nil { + return nil, err + } + + // Create a new wallet using the intentConfig v3.WalletConfig. + wallet, err := sequence.V3NewWallet(sequence.WalletOptions[*v3.WalletConfig]{ + Config: intentConfig, + Context: func() *sequence.WalletContext { + ctx := V3SequenceContext() + return &ctx + }(), + }, owner) + if err != nil { + return nil, err + } + + // Set provider on sequence wallet + err = wallet.SetProvider(c.Provider) + if err != nil { + return nil, err + } + + // Set relayer on sequence wallet, which is used when the wallet sends transactions + localRelayer, err := relayer.NewLocalRelayer(c.GetRelayerWallet(), c.ReceiptsListener) + if err != nil { + return nil, err + } + err = wallet.SetRelayer(localRelayer) + if err != nil { + return nil, err + } + + genericWallet := sequence.GenericNewWalletWithCoreWalletConfig[*v3.WalletConfig](wallet) + + // Skip deploying the dummy wallet if specified + if len(optSkipDeploy) > 0 && optSkipDeploy[0] { + return genericWallet, nil + } + + err = c.DeploySequenceWallet(genericWallet) + if err != nil { + return nil, err + } + + return genericWallet, nil +} + func (c *TestChain) DeploySequenceWallet(wallet *sequence.Wallet[core.WalletConfig]) error { // Check if wallet is already deployed, in which case we will return right away ok, _ := wallet.IsDeployed() diff --git a/testutil/testutil_test.go b/testutil/testutil_test.go index c6c0231f..628ae289 100644 --- a/testutil/testutil_test.go +++ b/testutil/testutil_test.go @@ -1,12 +1,14 @@ package testutil_test import ( + "context" "log/slog" "math/big" "os" "testing" "github.com/0xsequence/ethkit/ethcoder" + "github.com/0xsequence/ethkit/ethrpc" "github.com/0xsequence/ethkit/go-ethereum/core/types" "github.com/0xsequence/go-sequence/testutil" "github.com/stretchr/testify/assert" @@ -38,25 +40,44 @@ func TestTestutil(t *testing.T) { sequenceContext, err := testChain.V1DeploySequenceContext() assert.NoError(t, err) + // Move to next block + testChain.Provider.Do(context.Background(), ethrpc.NewCall("evm_mine", nil)) + sequenceContextV2, err := testChain.V2DeploySequenceContext() assert.NoError(t, err) - // Compare against "expexcted" testutil.V1SequenceContext + testChain.Provider.Do(context.Background(), ethrpc.NewCall("evm_mine", nil)) + + sequenceContextV3, err := testChain.V3DeploySequenceContext() + assert.NoError(t, err) + + // Compare against "expected" testutil.V1SequenceContext expectedContext := testutil.V1SequenceContext() expectedContextV2 := testutil.V2SequenceContext() + expectedContextV3 := testutil.V3SequenceContext() + assert.Equal(t, expectedContext.FactoryAddress, sequenceContext.FactoryAddress) assert.Equal(t, expectedContext.MainModuleAddress, sequenceContext.MainModuleAddress) assert.Equal(t, expectedContext.MainModuleUpgradableAddress, sequenceContext.MainModuleUpgradableAddress) assert.Equal(t, expectedContext.GuestModuleAddress, sequenceContext.GuestModuleAddress) assert.Equal(t, expectedContext.UtilsAddress, sequenceContext.UtilsAddress) + assert.Equal(t, expectedContext.CreationCode, sequenceContext.CreationCode) assert.Equal(t, expectedContextV2.FactoryAddress, sequenceContextV2.FactoryAddress) assert.Equal(t, expectedContextV2.MainModuleAddress, sequenceContextV2.MainModuleAddress) assert.Equal(t, expectedContextV2.MainModuleUpgradableAddress, sequenceContextV2.MainModuleUpgradableAddress) assert.Equal(t, expectedContextV2.GuestModuleAddress, sequenceContextV2.GuestModuleAddress) assert.Equal(t, expectedContextV2.UtilsAddress, sequenceContextV2.UtilsAddress) + assert.Equal(t, expectedContextV2.CreationCode, sequenceContextV2.CreationCode) + + assert.Equal(t, expectedContextV3.FactoryAddress, sequenceContextV3.FactoryAddress) + assert.Equal(t, expectedContextV3.MainModuleAddress, sequenceContextV3.MainModuleAddress) + assert.Equal(t, expectedContextV3.MainModuleUpgradableAddress, sequenceContextV3.MainModuleUpgradableAddress) + assert.Equal(t, expectedContextV3.GuestModuleAddress, sequenceContextV3.GuestModuleAddress) + assert.Equal(t, expectedContextV3.UtilsAddress, sequenceContextV3.UtilsAddress) + assert.Equal(t, expectedContextV3.CreationCode, sequenceContextV3.CreationCode) } func TestContractHelpers(t *testing.T) { @@ -100,3 +121,14 @@ func TestNewTestChainWithOptions(t *testing.T) { t.Fatal(err) } } + +func TestDeploySequenceWallet(t *testing.T) { + _, err := testChain.V1DummySequenceWallet(1) + assert.NoError(t, err) + + _, err = testChain.V2DummySequenceWallet(1) + assert.NoError(t, err) + + _, err = testChain.V3DummySequenceWallet(1) + assert.NoError(t, err) +} diff --git a/tools/go.mod b/tools/go.mod index ac69d8e8..7a51b5e1 100644 --- a/tools/go.mod +++ b/tools/go.mod @@ -4,25 +4,16 @@ go 1.23.0 toolchain go1.24.1 +// replace github.com/0xsequence/ethkit => /Users/peter/Dev/0xsequence/ethkit + require ( - github.com/0xsequence/ethkit v1.32.0 + github.com/0xsequence/ethkit v1.36.0 github.com/webrpc/webrpc v0.24.0 go.uber.org/mock v0.5.1-0.20250204205401-bb4128ea0af2 ) require ( - github.com/bits-and-blooms/bitset v1.22.0 // indirect - github.com/btcsuite/btcd/btcec/v2 v2.3.4 // indirect - github.com/consensys/bavard v0.1.30 // indirect - github.com/consensys/gnark-crypto v0.17.0 // indirect - github.com/crate-crypto/go-kzg-4844 v1.1.0 // indirect - github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0 // indirect - github.com/ethereum/c-kzg-4844/bindings/go v0.0.0-20230126171313-363c7d7593b4 // indirect github.com/holiman/uint256 v1.3.2 // indirect - github.com/mmcloughlin/addchain v0.4.0 // indirect - github.com/supranational/blst v0.3.14 // indirect - golang.org/x/crypto v0.36.0 // indirect - golang.org/x/sync v0.12.0 // indirect - golang.org/x/sys v0.31.0 // indirect - rsc.io/tmplfunc v0.0.3 // indirect + golang.org/x/crypto v0.38.0 // indirect + golang.org/x/sys v0.33.0 // indirect ) diff --git a/tools/go.sum b/tools/go.sum index 3275e51b..dc61ad8d 100644 --- a/tools/go.sum +++ b/tools/go.sum @@ -1,57 +1,20 @@ -github.com/0xsequence/ethkit v1.32.0 h1:X0Ki8jL+TIr1e4StIgBJ4948rTAAKRxyZuby73VYRsQ= -github.com/0xsequence/ethkit v1.32.0/go.mod h1:IT2jUmscz4DXIpLdXkFbrVkR4+UZdlzFw3AoY3QbahE= -github.com/bits-and-blooms/bitset v1.22.0 h1:Tquv9S8+SGaS3EhyA+up3FXzmkhxPGjQQCkcs2uw7w4= -github.com/bits-and-blooms/bitset v1.22.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= -github.com/btcsuite/btcd v0.24.2 h1:aLmxPguqxza+4ag8R1I2nnJjSu2iFn/kqtHTIImswcY= -github.com/btcsuite/btcd/btcec/v2 v2.3.4 h1:3EJjcN70HCu/mwqlUsGK8GcNVyLVxFDlWurTXGPFfiQ= -github.com/btcsuite/btcd/btcec/v2 v2.3.4/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= -github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 h1:59Kx4K6lzOW5w6nFlA0v5+lk/6sjybR934QNHSJZPTQ= -github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= -github.com/consensys/bavard v0.1.30 h1:wwAj9lSnMLFXjEclKwyhf7Oslg8EoaFz9u1QGgt0bsk= -github.com/consensys/bavard v0.1.30/go.mod h1:k/zVjHHC4B+PQy1Pg7fgvG3ALicQw540Crag8qx+dZs= -github.com/consensys/gnark-crypto v0.17.0 h1:vKDhZMOrySbpZDCvGMOELrHFv/A9mJ7+9I8HEfRZSkI= -github.com/consensys/gnark-crypto v0.17.0/go.mod h1:A2URlMHUT81ifJ0UlLzSlm7TmnE3t7VxEThApdMukJw= -github.com/crate-crypto/go-kzg-4844 v1.1.0 h1:EN/u9k2TF6OWSHrCCDBBU6GLNMq88OspHHlMnHfoyU4= -github.com/crate-crypto/go-kzg-4844 v1.1.0/go.mod h1:JolLjpSff1tCCJKaJx4psrlEdlXuJEC996PL3tTAFks= +github.com/0xsequence/ethkit v1.36.0 h1:U8UI6sbx8c9yn6tnyS+yihz7Jfa6OhyAd6oKLUsr8Qs= +github.com/0xsequence/ethkit v1.36.0/go.mod h1:VDI5gCYn82WLnpVtBAbZZDOb5vn+Dcvg6t4mCVmnl34= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/decred/dcrd/crypto/blake256 v1.1.0 h1:zPMNGQCm0g4QTY27fOCorQW7EryeQ/U0x++OzVrdms8= -github.com/decred/dcrd/crypto/blake256 v1.1.0/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0 h1:NMZiJj8QnKe1LgsbDayM4UoHwbvwDRwnI3hwNaAHRnc= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0/go.mod h1:ZXNYxsqcloTdSy/rNShjYzMhyjf0LaoftYK0p+A3h40= -github.com/ethereum/c-kzg-4844/bindings/go v0.0.0-20230126171313-363c7d7593b4 h1:B2mpK+MNqgPqk2/KNi1LbqwtZDy5F7iy0mynQiBr8VA= -github.com/ethereum/c-kzg-4844/bindings/go v0.0.0-20230126171313-363c7d7593b4/go.mod h1:y4GA2JbAUama1S4QwYjC2hefgGLU8Ul0GMtL/ADMF1c= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= -github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/holiman/uint256 v1.3.2 h1:a9EgMPSC1AAaj1SZL5zIQD3WbwTuHrMGOerLjGmM/TA= github.com/holiman/uint256 v1.3.2/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= -github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= -github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/leanovate/gopter v0.2.11 h1:vRjThO1EKPb/1NsDXuDrzldR28RLkBflWYcU9CvzWu4= -github.com/leanovate/gopter v0.2.11/go.mod h1:aK3tzZP/C+p1m3SPRE4SYZFGP7jjkuSI4f7Xvpt0S9c= -github.com/mmcloughlin/addchain v0.4.0 h1:SobOdjm2xLj1KkXN5/n0xTIWyZA2+s99UCY1iPfkHRY= -github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqkyU72HC5wJ4RlU= -github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/supranational/blst v0.3.14 h1:xNMoHRJOTwMn63ip6qoWJ2Ymgvj7E2b9jY2FAwY+qRo= -github.com/supranational/blst v0.3.14/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/webrpc/webrpc v0.24.0 h1:QcMeQgGqjfI1p+j8B36GbqyPatwAsP8n1FDk368hTjI= github.com/webrpc/webrpc v0.24.0/go.mod h1:89yVd4LLsLzGT13IuIIwYfJ14ru9h9poCAVvCPOJCUg= go.uber.org/mock v0.5.1-0.20250204205401-bb4128ea0af2 h1:65NTFXB57NltVJ1ptcFUxW+bStZxJL9Are7/e7q8Y4c= go.uber.org/mock v0.5.1-0.20250204205401-bb4128ea0af2/go.mod h1:ge71pBPLYDk7QIi1LupWxdAykm7KIEFchiOqd6z7qMM= -golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= -golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= -golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= -golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +golang.org/x/crypto v0.38.0 h1:jt+WWG8IZlBnVbomuhg2Mdq0+BBQaHbtqHEFEigjUV8= +golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -rsc.io/tmplfunc v0.0.3 h1:53XFQh69AfOa8Tw0Jm7t+GV7KZhOi6jzsCzTtKbMvzU= -rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= diff --git a/transactions.go b/transactions.go index df1ea2b6..541c6343 100644 --- a/transactions.go +++ b/transactions.go @@ -13,6 +13,7 @@ import ( "github.com/0xsequence/go-sequence/contracts" "github.com/0xsequence/go-sequence/core" v1 "github.com/0xsequence/go-sequence/core/v1" + v3 "github.com/0xsequence/go-sequence/core/v3" ) // Transaction type for Sequence meta-transaction, with encoded calldata. @@ -126,7 +127,7 @@ func (t *Transaction) ReduceSignatures(chainID *big.Int) error { if err != nil { return err } - signature = signature.Reduce(core.Subdigest{Hash: subdigest}) + signature = signature.Reduce(core.PayloadDigest{Hash: subdigest, Address_: t.To, ChainID_: chainID}) // TODO: preimage encoded, err := signature.Data() if err != nil { @@ -212,6 +213,56 @@ func NewTransactionsFromValues(values []Transaction) Transactions { return transactions } +func (t Transactions) Payload(to common.Address, chainID *big.Int, space, nonce *big.Int) (v3.CallsPayload, error) { + calls := make([]v3.Call, len(t)) + for i, tx := range t { + // Convert from Transaction.RevertOnError to v3.BehaviorOnError + var behaviorOnError v3.BehaviorOnError + if tx.RevertOnError { + behaviorOnError = v3.BehaviorOnErrorRevert + } else { + behaviorOnError = v3.BehaviorOnErrorIgnore + } + + // Handle nested transactions by recursively encoding them + data := tx.Data + if tx.IsBundle() { + var space_, nonce_ *big.Int + if tx.Nonce != nil { + space, nonce = DecodeNonce(tx.Nonce) + } + + subPayload, err := tx.Transactions.Payload(tx.To, chainID, space_, nonce_) + if err != nil { + return v3.CallsPayload{}, fmt.Errorf("unable to convert nested transactions to v3 payload: %w", err) + } + + if len(tx.Signature) != 0 { + data, err = contracts.V3.WalletStage1Module.Encode("execute", subPayload.Encode(tx.To), tx.Signature) + if err != nil { + return v3.CallsPayload{}, fmt.Errorf("unable to encode nested v3 payload execute call: %w", err) + } + } else { + data, err = contracts.V3.WalletStage1Module.Encode("selfExecute", subPayload.Encode(tx.To)) + if err != nil { + return v3.CallsPayload{}, fmt.Errorf("unable to encode nested v3 payload selfExecute call: %w", err) + } + } + } + + calls[i] = v3.Call{ + To: tx.To, + Value: tx.Value, + Data: data, + GasLimit: tx.GasLimit, + DelegateCall: tx.DelegateCall, + BehaviorOnError: behaviorOnError, + } + } + + return v3.NewCallsPayload(to, chainID, calls, space, nonce), nil +} + func (t Transactions) EncodeRaw() ([]byte, error) { encoded, err := t.EncodedTransactions() if err != nil { @@ -221,26 +272,154 @@ func (t Transactions) EncodeRaw() ([]byte, error) { return encoder.Pack(encoded) } -func DecodeRawTransactions(data []byte) (Transactions, error) { - decoder := abi.Arguments{abi.Argument{Type: abiTransactionsType}} - values, err := decoder.Unpack(data) - if err != nil { - return nil, err +func DecodeExecdata(data []byte, walletAddress common.Address, chainID *big.Int) (Transactions, *big.Int, []byte, error) { + if len(data) < 4 { + return nil, nil, nil, fmt.Errorf("not an execute or selfExecute call") } + var transactions []Transaction - if err = decoder.Copy(&transactions, values); err != nil { - return nil, err - } - for i := range transactions { - children, nonce, signature, err := DecodeExecdata(transactions[i].Data) + var nonce *big.Int + var signature []byte + var err error + + // Check for V1 methods + executeMethod := contracts.V1.WalletMainModule.ABI.Methods["execute"] + selfExecuteMethod := contracts.V1.WalletMainModule.ABI.Methods["selfExecute"] + + // Check for V3 methods + v3ExecuteMethod := contracts.V3.WalletStage1Module.ABI.Methods["execute"] + v3SelfExecuteMethod := contracts.V3.WalletStage1Module.ABI.Methods["selfExecute"] + + if bytes.Equal(data[:4], executeMethod.ID) { + // V1 execute method + var values []interface{} + values, err = executeMethod.Inputs.Unpack(data[4:]) if err == nil { - transactions[i].Data = nil - transactions[i].Transactions = children - transactions[i].Nonce = nonce - transactions[i].Signature = signature + err = executeMethod.Inputs.Copy(&[]interface{}{&transactions, &nonce, &signature}, values) + } + } else if bytes.Equal(data[:4], selfExecuteMethod.ID) { + // V1 selfExecute method + var values []interface{} + values, err = selfExecuteMethod.Inputs.Unpack(data[4:]) + if err == nil { + err = selfExecuteMethod.Inputs.Copy(&transactions, values) + } + } else if bytes.Equal(data[:4], v3ExecuteMethod.ID) { + // V3 execute method takes (bytes calldata _payload, bytes calldata _signature) + var values []interface{} + values, err = v3ExecuteMethod.Inputs.Unpack(data[4:]) + if err != nil { + return nil, nil, nil, err + } + + var payload []byte + err = v3ExecuteMethod.Inputs.Copy(&[]interface{}{&payload, &signature}, values) + if err != nil { + return nil, nil, nil, err + } + + // Decode the V3 payload + decoded, err := v3.DecodeCalls(walletAddress, chainID, payload) + if err != nil { + return nil, nil, nil, err + } + + // Convert V3 payload to Transactions + transactions = make([]Transaction, len(decoded.Calls)) + for i, call := range decoded.Calls { + transactions[i] = Transaction{ + To: call.To, + Value: call.Value, + Data: call.Data, + GasLimit: call.GasLimit, + DelegateCall: call.DelegateCall, + RevertOnError: call.BehaviorOnError == v3.BehaviorOnErrorRevert, + } + } + + nonce, err = EncodeNonce(decoded.Space, decoded.Nonce) + if err != nil { + return nil, nil, nil, err + } + } else if bytes.Equal(data[:4], v3SelfExecuteMethod.ID) { + // V3 selfExecute method takes (bytes calldata _payload) + var values []interface{} + values, err = v3SelfExecuteMethod.Inputs.Unpack(data[4:]) + if err != nil { + return nil, nil, nil, err + } + + var payload []byte + err = v3SelfExecuteMethod.Inputs.Copy(&[]interface{}{&payload}, values) + if err != nil { + return nil, nil, nil, err + } + + // Decode the V3 payload + decoded, err := v3.DecodeCalls(walletAddress, chainID, payload) + if err != nil { + return nil, nil, nil, err + } + + transactions = make([]Transaction, len(decoded.Calls)) + for i, call := range decoded.Calls { + transactions[i] = Transaction{ + To: call.To, + Value: call.Value, + Data: call.Data, + GasLimit: call.GasLimit, + DelegateCall: call.DelegateCall, + RevertOnError: call.BehaviorOnError == v3.BehaviorOnErrorRevert, + } + } + + nonce, err = EncodeNonce(decoded.Space, decoded.Nonce) + if err != nil { + return nil, nil, nil, err + } + } else { + // V3 guest module allows sending just the packed calls payload without solidity abi encoding + decoded, err := v3.DecodeCalls(walletAddress, chainID, data) + if err != nil { + return nil, nil, nil, fmt.Errorf("not an execute or selfExecute call") + } + + transactions = make([]Transaction, len(decoded.Calls)) + for i, call := range decoded.Calls { + transactions[i] = Transaction{ + To: call.To, + Value: call.Value, + Data: call.Data, + GasLimit: call.GasLimit, + DelegateCall: call.DelegateCall, + RevertOnError: call.BehaviorOnError == v3.BehaviorOnErrorRevert, + } + } + + nonce, err = EncodeNonce(decoded.Space, decoded.Nonce) + if err != nil { + return nil, nil, nil, err } } - return NewTransactionsFromValues(transactions), nil + + if err != nil { + return nil, nil, nil, err + } + + // Recursively decode nested transactions + for i := 0; i < len(transactions); i++ { + if len(transactions[i].Data) > 0 { + decodedTransactions, decodedNonce, decodedSignature, err := DecodeExecdata(transactions[i].Data, walletAddress, chainID) + if err == nil { + transactions[i].Data = nil + transactions[i].Transactions = decodedTransactions + transactions[i].Nonce = decodedNonce + transactions[i].Signature = decodedSignature + } + } + } + + return NewTransactionsFromValues(transactions), nonce, signature, nil } // Append will append the passed txns to the `t` array (as separate Transaction elements). @@ -328,11 +507,24 @@ type SignedTransactions struct { WalletContext WalletContext Transactions Transactions // The meta-transactions + Space *big.Int // Nonce space of the transactions Nonce *big.Int // Nonce of the transactions Digest common.Hash // Digest of the transactions Signature []byte // Signature (encoded as bytes from *Signature) of the txn digest } +func (t *SignedTransactions) Payload() (v3.CallsPayload, error) { + return t.Transactions.Payload(t.WalletAddress, t.ChainID, t.Space, t.Nonce) +} + +func (t *SignedTransactions) ExecuteV3() ([]byte, error) { + payload, err := t.Payload() + if err != nil { + return nil, err + } + return contracts.V3.WalletStage1Module.Encode("execute", payload.Encode(t.WalletAddress), t.Signature) +} + func (t *SignedTransactions) Execdata() ([]byte, error) { encodedTxns, err := t.Transactions.EncodedTransactions() if err != nil { @@ -354,12 +546,21 @@ var ( // TxExecutedEventSig is the signature event emitted in a successful smart-wallet meta-transaction batch (for v2) // 0x5c4eeb02dabf8976016ab414d617f9a162936dcace3cdef8c69ef6e262ad5ae7 // TxExecuted(bytes32 indexed _tx, uint256 _index) - V2TxExecutedEventSig = common.HexToHash("0x5c4eeb02dabf8976016ab414d617f9a162936dcace3cdef8c69ef6e262ad5ae7") + V2TxExecutedEventSig = MustEncodeSig("TxExecuted(bytes32,uint256)") // TxFailedEventSig is the signature event emitted in a failed smart-wallet meta-transaction batch (for v2) // 0xab46c69f7f32e1bf09b0725853da82a211e5402a0600296ab499a2fb5ea3b419 // TxFailed(bytes32 indexed _tx, uint256 _index, bytes _reason) - V2TxFailedEventSig = common.HexToHash("0xab46c69f7f32e1bf09b0725853da82a211e5402a0600296ab499a2fb5ea3b419") + V2TxFailedEventSig = MustEncodeSig("TxFailed(bytes32,uint256,bytes)") + + // 0x5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a + V3CallSucceeded = MustEncodeSig("CallSucceeded(bytes32,uint256)") + // 0x115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d + V3CallFailed = MustEncodeSig("CallFailed(bytes32,uint256,bytes)") + // 0xc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b + V3CallAborted = MustEncodeSig("CallAborted(bytes32,uint256,bytes)") + // 0x9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b + V3CallSkipped = MustEncodeSig("CallSkipped(bytes32,uint256)") ) // EncodeNonce with space @@ -445,7 +646,7 @@ func GetWalletNonce(provider *ethrpc.Provider, walletConfig core.WalletConfig, w } func ReduceExecdataSignatures(chainID *big.Int, data []byte) ([]byte, error) { - transactions, nonce, signature, err := DecodeExecdata(data) + transactions, nonce, signature, err := DecodeExecdata(data, common.Address{}, chainID) if err != nil { return nil, fmt.Errorf("unable to decode execdata: %w", err) } @@ -464,47 +665,24 @@ func ReduceExecdataSignatures(chainID *big.Int, data []byte) ([]byte, error) { return transaction.Execdata() } -func DecodeExecdata(data []byte) (Transactions, *big.Int, []byte, error) { - if len(data) < 4 { - return nil, nil, nil, fmt.Errorf("not an execute or selfExecute call") +func DecodeRawTransactions(data []byte) (Transactions, error) { + decoder := abi.Arguments{abi.Argument{Type: abiTransactionsType}} + values, err := decoder.Unpack(data) + if err != nil { + return nil, err } - var transactions []Transaction - var nonce *big.Int - var signature []byte - var err error - - executeMethod := contracts.V1.WalletMainModule.ABI.Methods["execute"] - selfExecuteMethod := contracts.V1.WalletMainModule.ABI.Methods["selfExecute"] - - if bytes.Equal(data[:4], executeMethod.ID) { - var values []interface{} - values, err = executeMethod.Inputs.Unpack(data[4:]) - if err == nil { - err = executeMethod.Inputs.Copy(&[]interface{}{&transactions, &nonce, &signature}, values) - } - } else if bytes.Equal(data[:4], selfExecuteMethod.ID) { - var values []interface{} - values, err = selfExecuteMethod.Inputs.Unpack(data[4:]) - if err == nil { - err = selfExecuteMethod.Inputs.Copy(&transactions, values) - } - } else { - return nil, nil, nil, fmt.Errorf("not an execute or selfExecute call") - } - if err != nil { - return nil, nil, nil, err + if err = decoder.Copy(&transactions, values); err != nil { + return nil, err } - - for i := 0; i < len(transactions); i++ { - decodedTransactions, decodedNonce, decodedSignature, err := DecodeExecdata(transactions[i].Data) + for i := range transactions { + children, nonce, signature, err := DecodeExecdata(transactions[i].Data, common.Address{}, nil) if err == nil { transactions[i].Data = nil - transactions[i].Transactions = decodedTransactions - transactions[i].Nonce = decodedNonce - transactions[i].Signature = decodedSignature + transactions[i].Transactions = children + transactions[i].Nonce = nonce + transactions[i].Signature = signature } } - - return NewTransactionsFromValues(transactions), nonce, signature, nil + return NewTransactionsFromValues(transactions), nil } diff --git a/transactions_test.go b/transactions_test.go index 0500b6a0..d15ef9d7 100644 --- a/transactions_test.go +++ b/transactions_test.go @@ -16,6 +16,7 @@ import ( "github.com/0xsequence/go-sequence/contracts" v1 "github.com/0xsequence/go-sequence/core/v1" v2 "github.com/0xsequence/go-sequence/core/v2" + v3 "github.com/0xsequence/go-sequence/core/v3" "github.com/0xsequence/go-sequence/testutil" "github.com/stretchr/testify/assert" ) @@ -64,6 +65,28 @@ func TestTransaction(t *testing.T) { assert.Len(t, ret, 1) assert.Equal(t, "55", ret[0]) }) + + t.Run("v3", func(t *testing.T) { + // Ensure dummy sequence wallet from seed 1 is deployed + wallet, err := testChain.V3DummySequenceWallet(1) + assert.NoError(t, err) + assert.NotNil(t, wallet) + + // Create normal txn of: callmockContract.testCall(55, 0x112255) + callmockContract := testChain.UniDeploy(t, "WALLET_CALL_RECV_MOCK", 0) + calldata, err := callmockContract.Encode("testCall", big.NewInt(55), ethcoder.MustHexDecode("0x112255")) + assert.NoError(t, err) + + // Sign and send the transaction + err = testutil.SignAndSend(t, wallet, callmockContract.Address, calldata) + assert.NoError(t, err) + + // Check the value + ret, err := testutil.ContractQuery(testChain.Provider, callmockContract.Address, "lastValA()", "uint256", nil) + assert.NoError(t, err) + assert.Len(t, ret, 1) + assert.Equal(t, "55", ret[0]) + }) } func TestTransactionVerbose(t *testing.T) { @@ -184,6 +207,65 @@ func TestTransactionVerbose(t *testing.T) { assert.Len(t, ret, 1) assert.Equal(t, "65", ret[0]) }) + + t.Run("v3", func(t *testing.T) { + // This test is similar to TestTransaction but includes a few extra assertions + + // Ensure dummy sequence wallet from seed 1 is deployed + wallet, err := testChain.V3DummySequenceWallet(1) + assert.NoError(t, err) + assert.NotNil(t, wallet) + + // Create normal txn of: callmockContract.testCall(55, 0x112255) + callmockContract := testChain.UniDeploy(t, "WALLET_CALL_RECV_MOCK", 0) + calldata, err := callmockContract.Encode("testCall", big.NewInt(65), ethcoder.MustHexDecode("0x332255")) + assert.NoError(t, err) + + stx := &sequence.Transaction{ + To: callmockContract.Address, + Data: calldata, + } + + // Sign and send the transaction + signedTx, err := wallet.SignTransaction(context.Background(), stx) + assert.NoError(t, err) + + assert.NotEmpty(t, signedTx.Digest) + assert.NotEmpty(t, signedTx.Signature) + + // Recover walletconfig + address from the signed transaction digest + signature + //txSubDigest, err := sequence.SubDigest(wallet.GetChainID(), wallet.Address(), signedTx.Digest) + //assert.NoError(t, err) + + walletConfig, weight, err := sequence.GenericRecoverWalletConfigFromDigest[*v3.WalletConfig](signedTx.Digest.Bytes(), signedTx.Signature, wallet.Address(), testutil.V3SequenceContext(), testChain.ChainID(), testChain.Provider) + assert.NoError(t, err) + assert.GreaterOrEqual(t, weight.Cmp(big.NewInt(int64(walletConfig.Threshold()))), 0) + + walletAddress, err := sequence.AddressFromWalletConfig(walletConfig, testutil.V3SequenceContext()) + assert.NoError(t, err) + + assert.Equal(t, wallet.Address(), walletAddress) + + expectedMetaTxnID := sequence.MetaTxnID(hex.EncodeToString(signedTx.Digest.Bytes())) + assert.NoError(t, err) + + // Send the transaction + metaTxnID, tx, waitReceipt, err := wallet.SendTransaction(context.Background(), signedTx) + assert.NoError(t, err) + assert.NotEmpty(t, metaTxnID) + assert.NotNil(t, tx) + assert.Equal(t, expectedMetaTxnID, metaTxnID) + + receipt, err := waitReceipt(context.Background()) + assert.NoError(t, err) + assert.True(t, receipt.Status == types.ReceiptStatusSuccessful) + + // Check the value + ret, err := testutil.ContractQuery(testChain.Provider, callmockContract.Address, "lastValA()", "uint256", nil) + assert.NoError(t, err) + assert.Len(t, ret, 1) + assert.Equal(t, "65", ret[0]) + }) } func TestTransactionBundling(t *testing.T) { @@ -251,6 +333,7 @@ func TestTransactionBundling(t *testing.T) { _, _, waitReceipt, err := wallets[0].SendTransaction(context.Background(), signedBundle) assert.NoError(t, err) + waitReceipt(context.Background()) // Check the value of wallet 1 @@ -336,6 +419,7 @@ func TestTransactionBundling(t *testing.T) { _, _, waitReceipt, err := wallets[0].SendTransaction(context.Background(), signedBundle) assert.NoError(t, err) + waitReceipt(context.Background()) // Check the value of wallet 1 @@ -356,12 +440,10 @@ func TestTransactionBundling(t *testing.T) { assert.Len(t, ret, 1) assert.Equal(t, "30", ret[0]) }) -} -func TestTransactionERC20Transfer(t *testing.T) { - t.Run("v1", func(t *testing.T) { + t.Run("v3", func(t *testing.T) { // Ensure three dummy sequence wallets are deployed - wallets, err := testChain.V1DummySequenceWallets(3, 1) + wallets, err := testChain.V3DummySequenceWallets(3, 1) assert.NoError(t, err) assert.NotNil(t, wallets) @@ -380,92 +462,57 @@ func TestTransactionERC20Transfer(t *testing.T) { assert.Len(t, ret, 1) assert.Equal(t, "100", ret[0]) - // Create normal txn of: callmockContract.transfer(wallets[1], 20) - calldata, err = callmockContract.Encode("transfer", wallets[1].Address(), big.NewInt(20)) - assert.NoError(t, err) - - // Sign and send the transaction - err = testutil.SignAndSend(t, wallets[0], callmockContract.Address, calldata) - assert.NoError(t, err) - - // Check the value of wallet 1 - ret, err = testutil.ContractQuery(testChain.Provider, callmockContract.Address, "balanceOf(address)", "uint256", []string{wallets[0].Address().Hex()}) - assert.NoError(t, err) - assert.Len(t, ret, 1) - assert.Equal(t, "80", ret[0]) - - // Check the value of wallet 2 - ret, err = testutil.ContractQuery(testChain.Provider, callmockContract.Address, "balanceOf(address)", "uint256", []string{wallets[1].Address().Hex()}) - assert.NoError(t, err) - assert.Len(t, ret, 1) - assert.Equal(t, "20", ret[0]) - - // Create normal txns to: - // 1. callmockContract.transfer(wallets[1], 10) - // 2. callmockContract.transfer(wallets[2], 30) - var calldatas [][]byte + // Create normal txn of: callmockContract.transfer(wallets[1], 10) calldata1, err := callmockContract.Encode("transfer", wallets[1].Address(), big.NewInt(10)) - calldatas = append(calldatas, calldata1) - calldata2, err := callmockContract.Encode("transfer", wallets[2].Address(), big.NewInt(30)) - calldatas = append(calldatas, calldata2) - - // Sign and send the transaction - err = testutil.BatchSignAndSend(t, wallets[0], callmockContract.Address, calldatas) - assert.NoError(t, err) - - // Check the value of wallet 1 - ret, err = testutil.ContractQuery(testChain.Provider, callmockContract.Address, "balanceOf(address)", "uint256", []string{wallets[0].Address().Hex()}) - assert.NoError(t, err) - assert.Len(t, ret, 1) - assert.Equal(t, "40", ret[0]) - - // Check the value of wallet 2 - ret, err = testutil.ContractQuery(testChain.Provider, callmockContract.Address, "balanceOf(address)", "uint256", []string{wallets[1].Address().Hex()}) assert.NoError(t, err) - assert.Len(t, ret, 1) - assert.Equal(t, "30", ret[0]) - // Check the value of wallet 3 - ret, err = testutil.ContractQuery(testChain.Provider, callmockContract.Address, "balanceOf(address)", "uint256", []string{wallets[2].Address().Hex()}) - assert.NoError(t, err) - assert.Len(t, ret, 1) - assert.Equal(t, "30", ret[0]) - }) - - t.Run("v2", func(t *testing.T) { - // Ensure three dummy sequence wallets are deployed - wallets, err := testChain.V2DummySequenceWallets(3, 1) - assert.NoError(t, err) - assert.NotNil(t, wallets) - - // Create normal txn of: callmockContract.mockMint(wallets[0], 100) - callmockContract, _ := testChain.Deploy(t, "ERC20Mock") - calldata, err := callmockContract.Encode("mockMint", wallets[0].Address(), big.NewInt(100)) + // Create normal txn of: callmockContract.transfer(wallets[2], 10) + calldata2, err := callmockContract.Encode("transfer", wallets[2].Address(), big.NewInt(10)) assert.NoError(t, err) - // Sign and send the transaction - err = testutil.SignAndSend(t, wallets[0], callmockContract.Address, calldata) - assert.NoError(t, err) + // These are wallet[0]'s intended transactions + bundle := sequence.Transactions{ + { + To: callmockContract.Address, + Data: calldata1, + }, // balances: 90, 10, 0 + { + To: callmockContract.Address, + Data: calldata2, + }, // balances: 80, 10, 10 + { + To: wallets[0].Address(), + Transactions: sequence.Transactions{ + { + To: callmockContract.Address, + Data: calldata1, + }, // balances: 70, 20, 10 + { + To: callmockContract.Address, + Data: calldata2, + }, // balances: 60, 20, 20 + { + To: callmockContract.Address, + Data: calldata2, + }, // balances: 50, 20, 30 + }, + }, + } - // Check the value - ret, err := testutil.ContractQuery(testChain.Provider, callmockContract.Address, "balanceOf(address)", "uint256", []string{wallets[0].Address().Hex()}) + // wallet[0] must sign its bundle + signedBundle, err := wallets[0].SignTransactions(context.Background(), bundle) assert.NoError(t, err) - assert.Len(t, ret, 1) - assert.Equal(t, "100", ret[0]) - // Create normal txn of: callmockContract.transfer(wallets[1], 20) - calldata, err = callmockContract.Encode("transfer", wallets[1].Address(), big.NewInt(20)) + _, _, waitReceipt, err := wallets[0].SendTransaction(context.Background(), signedBundle) assert.NoError(t, err) - // Sign and send the transaction - err = testutil.SignAndSend(t, wallets[0], callmockContract.Address, calldata) - assert.NoError(t, err) + waitReceipt(context.Background()) // Check the value of wallet 1 ret, err = testutil.ContractQuery(testChain.Provider, callmockContract.Address, "balanceOf(address)", "uint256", []string{wallets[0].Address().Hex()}) assert.NoError(t, err) assert.Len(t, ret, 1) - assert.Equal(t, "80", ret[0]) + assert.Equal(t, "50", ret[0]) // Check the value of wallet 2 ret, err = testutil.ContractQuery(testChain.Provider, callmockContract.Address, "balanceOf(address)", "uint256", []string{wallets[1].Address().Hex()}) @@ -473,31 +520,6 @@ func TestTransactionERC20Transfer(t *testing.T) { assert.Len(t, ret, 1) assert.Equal(t, "20", ret[0]) - // Create normal txns to: - // 1. callmockContract.transfer(wallets[1], 10) - // 2. callmockContract.transfer(wallets[2], 30) - var calldatas [][]byte - calldata1, err := callmockContract.Encode("transfer", wallets[1].Address(), big.NewInt(10)) - calldatas = append(calldatas, calldata1) - calldata2, err := callmockContract.Encode("transfer", wallets[2].Address(), big.NewInt(30)) - calldatas = append(calldatas, calldata2) - - // Sign and send the transaction - err = testutil.BatchSignAndSend(t, wallets[0], callmockContract.Address, calldatas) - assert.NoError(t, err) - - // Check the value of wallet 1 - ret, err = testutil.ContractQuery(testChain.Provider, callmockContract.Address, "balanceOf(address)", "uint256", []string{wallets[0].Address().Hex()}) - assert.NoError(t, err) - assert.Len(t, ret, 1) - assert.Equal(t, "40", ret[0]) - - // Check the value of wallet 2 - ret, err = testutil.ContractQuery(testChain.Provider, callmockContract.Address, "balanceOf(address)", "uint256", []string{wallets[1].Address().Hex()}) - assert.NoError(t, err) - assert.Len(t, ret, 1) - assert.Equal(t, "30", ret[0]) - // Check the value of wallet 3 ret, err = testutil.ContractQuery(testChain.Provider, callmockContract.Address, "balanceOf(address)", "uint256", []string{wallets[2].Address().Hex()}) assert.NoError(t, err) @@ -622,6 +644,54 @@ func TestTransactionToGuestModuleBasic(t *testing.T) { assert.Len(t, ret, 1) assert.Equal(t, "1239", ret[0]) }) + + t.Run("v3", func(t *testing.T) { + // Create normal txn of: callmockContract.testCall(55, 0x112255) + callmockContract := testChain.UniDeploy(t, "WALLET_CALL_RECV_MOCK", 0) + calldata, err := callmockContract.Encode("testCall", big.NewInt(1239), ethcoder.MustHexDecode("0x332255")) + assert.NoError(t, err) + + txns := sequence.Transaction{ + To: callmockContract.Address, + Data: calldata, + } + bundle := txns.Bundle() + + guestAddress := testChain.V3SequenceContext().GuestModuleAddress + payload, err := bundle.Payload(guestAddress, testChain.ChainID(), nil, nil) + assert.NoError(t, err) + + execdata := payload.Encode(guestAddress) + sender := testChain.GetRelayerWallet() + + // Relay the txn manually, directly to the guest module + ntx, err := sender.NewTransaction(context.Background(), ðtxn.TransactionRequest{ + To: &guestAddress, + Data: execdata, + GasLimit: 1000000, // TODO: compute gas limit + }) + assert.NoError(t, err) + + signedTx, err := sender.SignTx(ntx, testChain.ChainID()) + assert.NoError(t, err) + + _, waitReceipt, err := sender.SendTransaction(context.Background(), signedTx) + assert.NoError(t, err) + + receipt, err := waitReceipt(context.Background()) + assert.NoError(t, err) + assert.True(t, receipt.Status == types.ReceiptStatusSuccessful) + + // Assert that first log in the receipt computes to the guest subdigest / id + assert.True(t, bytes.Contains(receipt.Logs[0].Data, payload.Digest().Bytes())) + + // Check the value + ret, err := testutil.ContractQuery(testChain.Provider, callmockContract.Address, "lastValA()", "uint256", nil) + assert.NoError(t, err) + assert.Len(t, ret, 1) + assert.Equal(t, "1239", ret[0]) + + }) } func TestTransactionToGuestModuleDeployAndCall(t *testing.T) { @@ -838,59 +908,112 @@ func TestTransactionToGuestModuleDeployAndCall(t *testing.T) { assert.NoError(t, err) assert.True(t, isDeployed) }) -} -func TestTransactionSignatureReduction(t *testing.T) { - data, err := hex.DecodeString("7a9a1628000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002540000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006d08000000000000000000000000a804304f8e7c9ab5932ac3a4cc1468e40183d199000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000044a9059cbb000000000000000000000000450cb9fbb2d44d166aaca1f6cdb1dbd9ff168e4c000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000be41c134fc3517cb0ec94b6eeafb66cf9998782f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000044a9059cbb000000000000000000000000909693cf965c0cf89c70dbfc2933e91eb10c0faf000000000000000000000000000000000000000000000000c188ce12363a605400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014100050102049c7c6590acb024dd32a543428c940e8d32ea490003b26d43cbbb07ced966e0ee69293b38b39ceb1b0dc1a150ca73af746339ff9e27335c532dfcd49d5d938ca7cce61f3b0776ab4c404d7f75009cb1e8512da766091b0200020e670ff1e43851fec836095827539558ab811cc71f0ceca027e9f033f62a732800f4afce5f72158d97bb5d7af294fe882ed837e5751beaf97479cfe21f4d2ba21b020203596af90cecdbf9a768886e771178fd5561dd27ab005d00010001a2b8a2403d4ae97c103e88438c868b23ccf5221d19e96ae9eee27c0c3a520c7748a29584d57c8a5af0c49cd0749c4c0307b7773232459624327c4737316589db1c020101c50adeadb7fe15bee45dcb820610cdedcd314eb0030102a9273c0f04e71b15c7cd177c6910b4738bb448c30102d5a5934cf965ff79374e8a1a571bd20f54694e6300000000000000000000000000000000000000000000000000000000000000") - assert.NoError(t, err) + t.Run("v3", func(t *testing.T) { + // Ensure dummy sequence wallet from seed 1 is deployed + wallet, err := testChain.V3DummySequenceWallet(testutil.RandomSeed(), true) + assert.NoError(t, err) + assert.NotNil(t, wallet) - data2, err := sequence.ReduceExecdataSignatures(big.NewInt(137), data) - assert.NoError(t, err) - assert.Less(t, len(data2), len(data)) -} + // Assert the wallet is undeployed -- this is desired so we relayer the txn to the guest module + isDeployed, err := wallet.IsDeployed() + assert.NoError(t, err) + if isDeployed { + t.Fatal("expecting wallet to be undeployed") + } -func TestDecodeExecute(t *testing.T) { - data, err := hex.DecodeString("7a9a162800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000345458cfd2f0c808455342cd0a6e07a09f893292000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000005647a9a16280000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000002e00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087920000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000044a9059cbb0000000000000000000000008e2158d3fe77a98ba319b763690ea5836461b71e0000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000005208000000000000000000000000b21d86e40c25e8b7041b91d0d01123526c25373f0000000000000000000000000000000000000000000000000009a64bbc29a60000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025d0005010216c83a218ef8913cb0b11b9121134cb4844ffaf601021d0fca76fe6f638d566e7edfaf54311c760758790102222fda4d1f352ff6985ca4095eb830a181de16d401023bcb633dcf7d35ddd2644d2d6b39badf801fdb3001024495a96369ae15ec93a0a2541eeacce62ec6f48201024580acd41fa3afda624daa55adc249b882a63858010256fa1f76812deb864af2bea60284cd66a5167b97010259361de312447bdc5d9c781f23d0f28516cafc6f0203596af90cecdbf9a768886e771178fd5561dd27ab005d0001000163e44499c8095e94435d9ec8249dadf0090e503ebe01bf0deb4ac4ec5ecb9daf3e3cde592b8df48828a10f3dff4388300b94b87a9a9ad9db6645c5cb8962c6021b020101c50adeadb7fe15bee45dcb820610cdedcd314eb00301025e92183c08a9de426f5bb2d82c4513c1b2d9f34b01026f1e50ccf59d1209b7c89d18d180083fa07ea7510002fa54f98f9c2fefe0a5700f5ee295a2899276ff154790eac8951ecdbd0de9d6970fe115a7594c9805b84c261e75279811aaa27fdb80295f60eba3872f659360d91c0201028a31e1dfba8a0be0e40db39dd2f182589d24603a01029a8acd6c7e88c5761b5d62e7e3af2ccb36aaf1690102b08bd63fec0bb973aa56f14300f2d2ee52f640600102b25e32d18dd1b99433eebade95d48d9a1a71244d0102b2f52d61b4860a1c04ff21aee9a97f81f8524a7b0103bebb0dc9a85e2e828dda0a060cac89dc600c396e0102cc91701809a617cd66517d11f9a3f384f2ed3fe70102db013f06a694c980df22189358d653c10ea24ebc0102e8af73c041cb4105397d424b802e0e1909185b52000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000") - assert.NoError(t, err) + // Wallet deployment data + _, walletFactoryAddress, walletDeployData, err := sequence.EncodeWalletDeployment(wallet.GetWalletConfig(), wallet.GetWalletContext()) + assert.NoError(t, err) - transactions, nonce, signature, err := sequence.DecodeExecdata(data) - assert.NoError(t, err) - assert.Len(t, transactions, 1) - assert.Len(t, transactions[0].Transactions, 2) - assert.Equal(t, 0, nonce.Cmp(big.NewInt(0))) - assert.NotNil(t, signature) - assert.Len(t, signature, 0) - - transaction := sequence.Transaction{ - Transactions: transactions, - Nonce: nonce, - Signature: signature, - } - - data2, err := transaction.Execdata() - assert.NoError(t, err) - assert.True(t, bytes.Equal(data, data2)) -} + // Create normal txn of: callmockContract.testCall(55, 0x112255) + callmockContract := testChain.UniDeploy(t, "WALLET_CALL_RECV_MOCK", 0) + calldata, err := callmockContract.Encode("testCall", big.NewInt(2255), ethcoder.MustHexDecode("0x332255")) + assert.NoError(t, err) -func TestDecodeSelfExecute(t *testing.T) { - data, err := hex.DecodeString("61c2926c000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a804304f8e7c9ab5932ac3a4cc1468e40183d199000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000044a9059cbb00000000000000000000000011111111111111111111111111111111111111110000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000") - assert.NoError(t, err) + // Bundle of transactions: 1.) deploy new wallet 2.) send txn to the wallet + // Then we send it to the GuestModule - transactions, nonce, signature, err := sequence.DecodeExecdata(data) - assert.NoError(t, err) - assert.Len(t, transactions, 1) - assert.Nil(t, nonce) - assert.Nil(t, signature) + walletBundle := sequence.Transactions{ + { + To: wallet.Address(), + Transactions: sequence.Transactions{ + { + To: callmockContract.Address, + Data: calldata, + }, + }, + }, + } + + signedWalletBundle, err := wallet.SignTransactions(context.Background(), walletBundle) + assert.NoError(t, err) - transaction := sequence.Transaction{ - Transactions: transactions, - Nonce: nonce, - Signature: signature, - } + payload, err := walletBundle.Payload(wallet.Address(), testChain.ChainID(), nil, nil) + assert.NoError(t, err) - data2, err := transaction.Execdata() + signedExecdata, err := contracts.V3.WalletStage1Module.Encode("execute", payload.Encode(wallet.Address()), signedWalletBundle.Signature) + assert.NoError(t, err) + + guestBundle := []v3.Call{ + { + To: walletFactoryAddress, + Data: walletDeployData, + }, + { + To: wallet.Address(), + Data: signedExecdata, + }, + } + + guestAddress := testChain.V3SequenceContext().GuestModuleAddress + execdata := v3.NewCallsPayload(guestAddress, testChain.ChainID(), guestBundle, nil, nil).Encode(guestAddress) + + // Relay the txn manually, directly to the guest module + sender := testChain.GetRelayerWallet() + ntx, err := sender.NewTransaction(context.Background(), ðtxn.TransactionRequest{ + To: &guestAddress, + Data: execdata, + GasLimit: 1000000, // TODO: compute gas limit + }) + assert.NoError(t, err) + + signedTx, err := sender.SignTx(ntx, testChain.ChainID()) + assert.NoError(t, err) + + _, waitReceipt, err := sender.SendTransaction(context.Background(), signedTx) + assert.NoError(t, err) + + receipt, err := waitReceipt(context.Background()) + assert.NoError(t, err) + assert.True(t, receipt.Status == types.ReceiptStatusSuccessful) + + // Check the value + ret, err := testutil.ContractQuery(testChain.Provider, callmockContract.Address, "lastValA()", "uint256", nil) + assert.NoError(t, err) + assert.Len(t, ret, 1) + assert.Equal(t, "2255", ret[0]) + + // Assert sequence.WaitForMetaTxn is able to find the metaTxnID + metaTxnID, _, _ := sequence.ComputeMetaTxnIDFromCallsPayload(&payload) + result, _, _, err := sequence.FetchMetaTransactionReceipt(context.Background(), testChain.ReceiptsListener, metaTxnID) + assert.NoError(t, err) + assert.True(t, result.Status == sequence.MetaTxnExecuted) + + // Wallet should be deployed now + isDeployed, err = wallet.IsDeployed() + assert.NoError(t, err) + assert.True(t, isDeployed) + }) +} + +func TestTransactionSignatureReduction(t *testing.T) { + data, err := hex.DecodeString("7a9a1628000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002540000000000000000000000000000000000000000000000000000000000000340000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006d08000000000000000000000000a804304f8e7c9ab5932ac3a4cc1468e40183d199000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000044a9059cbb000000000000000000000000450cb9fbb2d44d166aaca1f6cdb1dbd9ff168e4c000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000be41c134fc3517cb0ec94b6eeafb66cf9998782f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000044a9059cbb000000000000000000000000909693cf965c0cf89c70dbfc2933e91eb10c0faf000000000000000000000000000000000000000000000000c188ce12363a605400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014100050102049c7c6590acb024dd32a543428c940e8d32ea490003b26d43cbbb07ced966e0ee69293b38b39ceb1b0dc1a150ca73af746339ff9e27335c532dfcd49d5d938ca7cce61f3b0776ab4c404d7f75009cb1e8512da766091b0200020e670ff1e43851fec836095827539558ab811cc71f0ceca027e9f033f62a732800f4afce5f72158d97bb5d7af294fe882ed837e5751beaf97479cfe21f4d2ba21b020203596af90cecdbf9a768886e771178fd5561dd27ab005d00010001a2b8a2403d4ae97c103e88438c868b23ccf5221d19e96ae9eee27c0c3a520c7748a29584d57c8a5af0c49cd0749c4c0307b7773232459624327c4737316589db1c020101c50adeadb7fe15bee45dcb820610cdedcd314eb0030102a9273c0f04e71b15c7cd177c6910b4738bb448c30102d5a5934cf965ff79374e8a1a571bd20f54694e63000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000") + assert.NoError(t, err) + + data2, err := sequence.ReduceExecdataSignatures(big.NewInt(137), data) assert.NoError(t, err) - assert.True(t, bytes.Equal(data, data2)) + assert.Less(t, len(data2), len(data)) } func TestNonceOverflowChecks(t *testing.T) { @@ -917,15 +1040,17 @@ func TestNonceOverflowChecks(t *testing.T) { assert.Error(t, err) } -func TestRawTransactionsEncoding(t *testing.T) { - data, err := hex.DecodeString("000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000003e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d4c4000000000000000000000000831de831a64405af965c67d6e0de2f9876fa2d9900000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c33f000000000000000000000000a804304f8e7c9ab5932ac3a4cc1468e40183d199000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000044a9059cbb000000000000000000000000831de831a64405af965c67d6e0de2f9876fa2d990000000000000000000000000000000000000000000000000000b5e620f480000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c33f000000000000000000000000be41c134fc3517cb0ec94b6eeafb66cf9998782f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000044a9059cbb000000000000000000000000831de831a64405af965c67d6e0de2f9876fa2d99000000000000000000000000000000000000000000000000000110d9316ec0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c33f0000000000000000000000009400294c78f7dd244f4b5af6dfff6c971d25ad86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000044a9059cbb000000000000000000000000831de831a64405af965c67d6e0de2f9876fa2d9900000000000000000000000000000000000000000000000000016bcc41e9000000000000000000000000000000000000000000000000000000000000") - assert.NoError(t, err) +func TestTxnDecodeExecdata(t *testing.T) { + input := "0x1f6a1eb90000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000be13150c8f93229dc06f131943f44f82cfbbd53fcc26c5c9000084ad387c8a00000000000000000000000000000000000000000000000000000000000000370000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000311225500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c9c0000000000000000000000000000000000000000000000000000000000000000004404000171bab6d961b2b76c5d76b7fd92b962c3f0a1833098609f9b2444ead59af7507a9c31019b0f38998048658e88f3cd215cb9400c15509655655ec05257a11068544a00000000000000000000000000000000000000000000000000000000" - transactions, err := sequence.DecodeRawTransactions(data) + txns, nonce, _, err := sequence.DecodeExecdata(common.FromHex(input), common.HexToAddress("0x60349b199C2fEF7C3e1b53785dE5189493839b75"), big.NewInt(1337)) assert.NoError(t, err) - assert.Len(t, transactions, 4) - data2, err := transactions.EncodeRaw() - assert.NoError(t, err) - assert.True(t, bytes.Equal(data, data2)) + assert.Equal(t, common.HexToAddress("0x8f93229DC06f131943F44F82CFbbD53FCC26C5C9"), txns[0].To) + assert.Equal(t, 0, txns[0].Value.Cmp(common.Big0)) + assert.Equal(t, 0, txns[0].GasLimit.Cmp(big.NewInt(68764))) + assert.Equal(t, false, txns[0].DelegateCall) + assert.Equal(t, false, txns[0].RevertOnError) + + assert.Equal(t, nonce, big.NewInt(21)) } diff --git a/utils.go b/utils.go index ef791372..4bb00ee1 100644 --- a/utils.go +++ b/utils.go @@ -13,10 +13,9 @@ import ( "github.com/0xsequence/go-sequence/core" v1 "github.com/0xsequence/go-sequence/core/v1" v2 "github.com/0xsequence/go-sequence/core/v2" + v3 "github.com/0xsequence/go-sequence/core/v3" ) -var zeroAddress = common.Address{} - func DeploySequenceWallet(sender *ethwallet.Wallet, walletConfig core.WalletConfig, walletContext WalletContext) (common.Address, *types.Transaction, ethtxn.WaitReceipt, error) { if sender.GetProvider() == nil { return common.Address{}, nil, nil, ErrProviderNotSet @@ -40,6 +39,9 @@ func DeploySequenceWallet(sender *ethwallet.Wallet, walletConfig core.WalletConf // or fix it with a contract patch GasLimit: 131072, }) + if err != nil { + return common.Address{}, nil, nil, err + } signedDeployTx, err := sender.SignTx(deployTx, chainID) if err != nil { @@ -47,31 +49,40 @@ func DeploySequenceWallet(sender *ethwallet.Wallet, walletConfig core.WalletConf } tx, waitReceipt, err := sender.SendTransaction(context.Background(), signedDeployTx) + if err != nil { + return common.Address{}, nil, nil, err + } return walletAddress, tx, waitReceipt, nil } func EncodeWalletDeployment(walletConfig core.WalletConfig, walletContext WalletContext) (common.Address, common.Address, []byte, error) { - walletImageHash := walletConfig.ImageHash().Hex() - walletAddress, err := AddressFromImageHash(walletImageHash, walletContext) + imageHash := walletConfig.ImageHash() + address, err := AddressFromImageHash(imageHash, walletContext) if err != nil { return common.Address{}, common.Address{}, nil, err } if _, ok := walletConfig.(*v1.WalletConfig); ok { - deployData, err := contracts.V1.WalletFactory.ABI.Pack("deploy", walletContext.MainModuleAddress, common.HexToHash(walletImageHash)) + deployData, err := contracts.V1.WalletFactory.ABI.Pack("deploy", walletContext.MainModuleAddress, imageHash.Hash) if err != nil { return common.Address{}, common.Address{}, nil, err } - - return walletAddress, walletContext.FactoryAddress, deployData, nil + return address, walletContext.FactoryAddress, deployData, nil } else if _, ok := walletConfig.(*v2.WalletConfig); ok { - deployData, err := contracts.V2.WalletFactory.ABI.Pack("deploy", walletContext.MainModuleAddress, common.HexToHash(walletImageHash)) + deployData, err := contracts.V2.WalletFactory.ABI.Pack("deploy", walletContext.MainModuleAddress, imageHash.Hash) if err != nil { return common.Address{}, common.Address{}, nil, err } - return walletAddress, walletContext.FactoryAddress, deployData, nil + return address, walletContext.FactoryAddress, deployData, nil + } else if _, ok := walletConfig.(*v3.WalletConfig); ok { + deployData, err := contracts.V3.WalletFactory.ABI.Pack("deploy", walletContext.MainModuleAddress, imageHash.Hash) + if err != nil { + return common.Address{}, common.Address{}, nil, err + } + return address, walletContext.FactoryAddress, deployData, nil } + return common.Address{}, common.Address{}, nil, fmt.Errorf("unsupported wallet config version") } @@ -80,9 +91,14 @@ func DecodeRevertReason(logs []*types.Log) []string { for _, log := range logs { _, reason, err := V1DecodeTxFailedEvent(log) if err != nil { - _, reason, _, _ = V2DecodeTxFailedEvent(log) + _, reason, _, err = V2DecodeTxFailedEvent(log) + } + if err != nil { + _, _, reason, err = V3DecodeCallFailedEvent(log) + } + if err != nil { + _, _, reason, err = V3DecodeCallAbortedEvent(log) } - reasons = append(reasons, reason) } return reasons diff --git a/utils_test.go b/utils_test.go index dc2a85cb..cab76b16 100644 --- a/utils_test.go +++ b/utils_test.go @@ -9,6 +9,7 @@ import ( "github.com/0xsequence/go-sequence" v1 "github.com/0xsequence/go-sequence/core/v1" v2 "github.com/0xsequence/go-sequence/core/v2" + v3 "github.com/0xsequence/go-sequence/core/v3" "github.com/0xsequence/go-sequence/testutil" "github.com/stretchr/testify/assert" ) @@ -89,4 +90,41 @@ func TestDeploySequenceWallet(t *testing.T) { assert.Equal(t, wallet.Address(), walletAddress) }) + t.Run("v3", func(t *testing.T) { + // Create new single owner smart wallet (initially undeployed, of course) + eoa, err := ethwallet.NewWalletFromRandomEntropy() + assert.NoError(t, err) + + wallet, err := sequence.GenericNewWalletSingleOwner[*v3.WalletConfig](eoa, testutil.V3SequenceContext()) + assert.NoError(t, err) + + wallet.SetProvider(testChain.Provider) + chainID := wallet.GetChainID() + assert.Equal(t, uint64(1337), chainID.Uint64()) + + // Confirm the wallet is not deployed + isDeployed, err := wallet.IsDeployed() + if err != nil { + t.Fatalf("wallet is deployed, but expecting it to be undeployed") + } + assert.False(t, isDeployed) + + relayWallet := testChain.GetRelayerWallet() + + walletAddress, tx, waitReceipt, err := sequence.DeploySequenceWallet(relayWallet, wallet.GetWalletConfig(), wallet.GetWalletContext()) + assert.NoError(t, err) + assert.NotNil(t, tx) + + receipt, err := waitReceipt(context.Background()) + assert.NoError(t, err) + assert.True(t, receipt.Status == types.ReceiptStatusSuccessful) + + // Confirm wallet is now deployed + isDeployed, err = wallet.IsDeployed() + assert.NoError(t, err) + assert.True(t, isDeployed) + + assert.Equal(t, wallet.Address(), walletAddress) + }) + } diff --git a/wallet.go b/wallet.go index d715c1c8..d99ebda0 100644 --- a/wallet.go +++ b/wallet.go @@ -13,6 +13,7 @@ import ( "github.com/0xsequence/go-sequence/core" v1 "github.com/0xsequence/go-sequence/core/v1" v2 "github.com/0xsequence/go-sequence/core/v2" + v3 "github.com/0xsequence/go-sequence/core/v3" "github.com/0xsequence/go-sequence/sessions/proto" ) @@ -48,7 +49,7 @@ func GenericNewWallet[C core.WalletConfig](walletOptions WalletOptions[C], signe address := walletOptions.Address if address == (common.Address{}) { var err error - address, err = AddressFromImageHash(walletOptions.Config.ImageHash().Hex(), seqContext) + address, err = AddressFromWalletConfig(walletOptions.Config, seqContext) if err != nil { return nil, fmt.Errorf("sequence.GenericNewWallet: %w", err) } @@ -76,11 +77,15 @@ func GenericNewWallet[C core.WalletConfig](walletOptions WalletOptions[C], signe } func V1NewWallet(walletOptions WalletOptions[*v1.WalletConfig], signers ...Signer) (*Wallet[*v1.WalletConfig], error) { - return GenericNewWallet[*v1.WalletConfig](walletOptions, signers...) + return GenericNewWallet(walletOptions, signers...) } func V2NewWallet(walletOptions WalletOptions[*v2.WalletConfig], signers ...Signer) (*Wallet[*v2.WalletConfig], error) { - return GenericNewWallet[*v2.WalletConfig](walletOptions, signers...) + return GenericNewWallet(walletOptions, signers...) +} + +func V3NewWallet(walletOptions WalletOptions[*v3.WalletConfig], signers ...Signer) (*Wallet[*v3.WalletConfig], error) { + return GenericNewWallet(walletOptions, signers...) } func NewWallet(walletOptions WalletOptions[*v2.WalletConfig], signers ...Signer) (*Wallet[*v2.WalletConfig], error) { @@ -110,7 +115,7 @@ func GenericNewWalletSingleOwner[C core.WalletConfig](owner Signer, optContext . } // new sequence v1 wallet - return GenericNewWallet[C](WalletOptions[C]{ + return GenericNewWallet(WalletOptions[C]{ Config: config.(C), Context: &seqContext, }, owner) @@ -124,7 +129,21 @@ func GenericNewWalletSingleOwner[C core.WalletConfig](owner Signer, optContext . } // new sequence v2 wallet - return GenericNewWallet[C](WalletOptions[C]{ + return GenericNewWallet(WalletOptions[C]{ + Config: config.(C), + Context: &seqContext, + }, owner) + } else if _, ok := core.WalletConfig(typeOfWallet).(*v3.WalletConfig); ok { + // new wallet config v3 + var config core.WalletConfig = &v3.WalletConfig{ + Threshold_: 1, //big.NewInt(1), + Tree: &v3.WalletConfigTreeAddressLeaf{ + Weight: 1, Address: owner.Address(), + }, + } + + // new sequence v3 wallet + return GenericNewWallet(WalletOptions[C]{ Config: config.(C), Context: &seqContext, }, owner) @@ -146,6 +165,11 @@ func V2NewWalletSingleOwner(owner Signer, optContext ...WalletContext) (*Wallet[ return GenericNewWalletSingleOwner[*v2.WalletConfig](owner, optContext...) } +// V3NewWalletSingleOwner creates a new Sequence v3 wallet with a single owner. +func V3NewWalletSingleOwner(owner Signer, optContext ...WalletContext) (*Wallet[*v3.WalletConfig], error) { + return GenericNewWalletSingleOwner[*v3.WalletConfig](owner, optContext...) +} + // NewWalletSingleOwner creates a new Sequence v2 wallet with a single owner. func NewWalletSingleOwner(owner Signer, optContext ...WalletContext) (*Wallet[*v2.WalletConfig], error) { return V2NewWalletSingleOwner(owner, optContext...) @@ -190,6 +214,19 @@ func V2NewWalletWithCoreWalletConfig(wallet *Wallet[*v2.WalletConfig]) *Wallet[c } } +func V3NewWalletWithCoreWalletConfig(wallet *Wallet[*v3.WalletConfig]) *Wallet[core.WalletConfig] { + return &Wallet[core.WalletConfig]{ + context: wallet.context, + config: wallet.config, + signers: wallet.signers, + provider: wallet.provider, + relayer: wallet.relayer, + address: wallet.address, + skipSortSigners: wallet.skipSortSigners, + chainID: wallet.chainID, + } +} + func NewWalletWithCoreWalletConfig(wallet *Wallet[*v2.WalletConfig]) *Wallet[core.WalletConfig] { return V2NewWalletWithCoreWalletConfig(wallet) } @@ -318,6 +355,8 @@ func (w *Wallet[C]) UpdateSessionsWallet(ctx context.Context) error { version = 1 } else if _, ok := core.WalletConfig(w.config).(*v2.WalletConfig); ok { version = 2 + } else if _, ok := core.WalletConfig(w.config).(*v3.WalletConfig); ok { + version = 3 } else { return fmt.Errorf("sequence.Wallet#UpdateSessions: unknown wallet config version") } @@ -340,6 +379,8 @@ func (w *Wallet[C]) UpdateSessionsConfig(ctx context.Context) error { version = 1 } else if _, ok := core.WalletConfig(w.config).(*v2.WalletConfig); ok { version = 2 + } else if _, ok := core.WalletConfig(w.config).(*v3.WalletConfig); ok { + version = 3 } else { return fmt.Errorf("sequence.Wallet#UpdateSessions: unknown wallet config version") } @@ -449,6 +490,7 @@ func (w *Wallet[C]) SignTypedData(typedData *ethcoder.TypedData) ([]byte, []byte var _ MessageSigner = (*Wallet[*v1.WalletConfig])(nil) var _ MessageSigner = (*Wallet[*v2.WalletConfig])(nil) +var _ MessageSigner = (*Wallet[*v3.WalletConfig])(nil) func (w *Wallet[C]) SignDigest(ctx context.Context, digest common.Hash, optChainID ...*big.Int) ([]byte, error) { if w.sessions != nil { @@ -463,7 +505,7 @@ func (w *Wallet[C]) SignDigest(ctx context.Context, digest common.Hash, optChain } var chainID *big.Int - if optChainID != nil && len(optChainID) > 0 { + if len(optChainID) > 0 { chainID = optChainID[0] } else { chainID = w.chainID @@ -515,6 +557,60 @@ func (w *Wallet[C]) SignDigest(ctx context.Context, digest common.Hash, optChain return res, err } +func (w *Wallet[C]) SignV3Payload(ctx context.Context, payload core.Payload, optChainID ...*big.Int) ([]byte, core.Signature[C], error) { + if (optChainID == nil && len(optChainID) == 0) && w.chainID == nil { + return nil, nil, fmt.Errorf("sequence.Wallet#SignDigest: %w", ErrUnknownChainID) + } + + var chainID *big.Int + if len(optChainID) > 0 { + chainID = optChainID[0] + } else { + chainID = w.chainID + } + + opHash := payload.Digest() + + sign := func(ctx context.Context, signerAddress common.Address, signatures []core.SignerSignature) (core.SignerSignatureType, []byte, error) { + signer, _ := w.GetSigner(signerAddress) + + if signer == nil { + // signer isn't available, just include the config value of address + // without it's signature + return 0, nil, core.ErrSigningNoSigner + } + + switch signerTyped := signer.(type) { + // sequence.Wallet / Signing Service / Guard + case DigestSigner: + sigValue, err := signerTyped.SignDigest(ctx, opHash.Hash, chainID) + if err != nil { + return 0, nil, fmt.Errorf("signer.SignDigest subDigest: %w", err) + } + + // Sequence Wallet SignDigest returns a signature without a type + _, pc3 := signer.(*Wallet[*v3.WalletConfig]) + if pc3 { + return core.SignerSignatureTypeEIP1271, sigValue, nil + } + return core.SignerSignatureType(sigValue[len(sigValue)-1]), sigValue[:len(sigValue)-1], nil + // Ethereum Wallet Signer + case MessageSigner: + sigValue, err := signerTyped.SignMessage(opHash.Bytes()) + if err != nil { + return 0, nil, fmt.Errorf("signer.SignMessage subDigest: %w", err) + } + + return core.SignerSignatureTypeEthSign, sigValue, nil + default: + return 0, nil, fmt.Errorf("signer %T is not supported", signer) + } + } + + res, sig, err := w.buildSignature(ctx, sign, chainID) + return res, sig, err +} + var _ DigestSigner = (*Wallet[*v1.WalletConfig])(nil) var _ DigestSigner = (*Wallet[*v2.WalletConfig])(nil) @@ -539,9 +635,18 @@ func (w *Wallet[C]) SignTransactions(ctx context.Context, txns Transactions) (*S } } if estimateGas { - txns, err = w.relayer.EstimateGasLimits(ctx, w.config, w.context, txns) + results, err := w.relayer.Simulate(ctx, w.address, txns) if err != nil { - return nil, fmt.Errorf("estimateGas failed for sequence transactions: %w", err) + return nil, fmt.Errorf("unable to simulate for gas limits: %w", err) + } + if len(results) != len(txns) { + return nil, fmt.Errorf("simulate returned %d results for %d transactions", len(results), len(txns)) + } + + for i, transaction := range txns { + if transaction.GasLimit == nil { + transaction.GasLimit = new(big.Int).SetUint64(results[i].GasLimit) + } } } @@ -560,31 +665,119 @@ func (w *Wallet[C]) SignTransactions(ctx context.Context, txns Transactions) (*S } } - bundle := Transaction{ - Transactions: txns, - Nonce: nonce, + switch core.WalletConfig(w.config).(type) { + case *v1.WalletConfig, *v2.WalletConfig: + bundle := Transaction{ + Transactions: txns, + Nonce: nonce, + } + + // Get transactions digest + digest, err := bundle.Digest() + if err != nil { + return nil, err + } + + // Sign the transactions + sig, err := w.SignDigest(ctx, digest) + if err != nil { + return nil, err + } + + return &SignedTransactions{ + ChainID: w.chainID, + WalletAddress: w.address, + WalletConfig: w.config, + WalletContext: w.context, + Transactions: txns, + Nonce: nonce, + Digest: digest, + Signature: sig, + }, nil + + case *v3.WalletConfig: + space, nonce := DecodeNonce(nonce) + + payload, err := txns.Payload(w.address, w.chainID, space, nonce) + if err != nil { + return nil, err + } + + digest := payload.Digest() + + // Sign the transactions + sig, _, err := w.SignV3Payload(ctx, payload) + if err != nil { + return nil, err + } + + return &SignedTransactions{ + ChainID: w.chainID, + WalletAddress: w.address, + WalletConfig: w.config, + WalletContext: w.context, + Transactions: txns, + Space: space, + Nonce: nonce, + Digest: digest.Hash, + Signature: sig, + }, nil } - // Get transactions digest - digest, err := bundle.Digest() - if err != nil { - return nil, err + return nil, fmt.Errorf("unknown wallet config type") +} + +// GetSignedIntentTransactionWithIntentOperation creates an intent signature for a v3.CallsPayload. +func (w *Wallet[C]) GetSignedIntentTransactionWithIntentOperation(ctx context.Context, call *v3.CallsPayload) (*SignedTransactions, error) { + return w.GetSignedIntentPayload(ctx, call) +} + +// GetSignedIntentTransactionsWithIntentOperations creates an intent signature for multiple v3.CallsPayload objects. +func (w *Wallet[C]) GetSignedIntentTransactionsWithIntentOperations(ctx context.Context, calls []*v3.CallsPayload) (*SignedTransactions, error) { + if len(calls) == 0 { + return nil, fmt.Errorf("cannot sign an empty set of payloads") } - // Sign the transactions - sig, err := w.SignDigest(ctx, digest) + // For now, we only support a single payload in the batch + if len(calls) > 1 { + return nil, fmt.Errorf("multiple payloads not supported yet, please use CreateIntentDigestTree for multiple payloads") + } + + return w.GetSignedIntentPayload(ctx, calls[0]) +} + +// GetSignedIntentPayload is the core implementation for creating intent signatures. +func (w *Wallet[C]) GetSignedIntentPayload(ctx context.Context, payload *v3.CallsPayload) (*SignedTransactions, error) { + // Sign the payload + sig, _, err := w.SignV3Payload(ctx, payload) if err != nil { return nil, err } + // Convert payload back to Transactions for compatibility with SignedTransactions + txns := make(Transactions, len(payload.Calls)) + for i, call := range payload.Calls { + txns[i] = &Transaction{ + To: call.To, + Value: call.Value, + Data: call.Data, + GasLimit: call.GasLimit, + DelegateCall: call.DelegateCall, + RevertOnError: call.BehaviorOnError == v3.BehaviorOnErrorRevert, + Nonce: payload.Nonce, + } + } + + // Return the signed transactions return &SignedTransactions{ ChainID: w.chainID, WalletAddress: w.address, WalletConfig: w.config, WalletContext: w.context, Transactions: txns, - Nonce: nonce, - Digest: digest, + Space: payload.Space, + Nonce: payload.Nonce, + Digest: payload.Digest().Hash, Signature: sig, }, nil } @@ -690,7 +883,11 @@ func (w *Wallet[C]) Deploy(ctx context.Context) (MetaTxnID, *types.Transaction, if _, ok := core.WalletConfig(w.config).(*v1.WalletConfig); ok { // TODO: Move this hardcoded gas limit to a configuration // or fix it with a contract patch - txn.GasLimit = big.NewInt(131072) + txn.GasLimit = big.NewInt(3_000_000) + } else if _, ok := core.WalletConfig(w.config).(*v3.WalletConfig); ok { + // TODO: Move this hardcoded gas limit to a configuration + // or fix it with a contract patch + txn.GasLimit = big.NewInt(3_000_000) } signerTxn, err := w.SignTransaction(ctx, txn) @@ -712,17 +909,29 @@ func (w *Wallet[C]) IsValidSignature(digest common.Hash, signature []byte) (bool // todo: this is a hack to get around the fact that the signature verification is not available in WalletConfig var generalWalletConfig core.WalletConfig = w.config - if _, ok := generalWalletConfig.(*v2.WalletConfig); ok { + if _, ok := generalWalletConfig.(*v3.WalletConfig); ok { + sig, err := v3.Core.DecodeSignature(signature) + if err != nil { + return false, err + } + + config, weight, err := sig.Recover(context.Background(), v3.NewDigestPayload(w.address, w.chainID, digest), w.provider) + if err != nil { + return false, err + } else { + return weight.Cmp(new(big.Int).SetUint64(uint64(config.Threshold()))) >= 0, nil + } + } else if _, ok := generalWalletConfig.(*v2.WalletConfig); ok { sig, err := v2.Core.DecodeSignature(signature) if err != nil { return false, err } - _, _, err = sig.Recover(context.Background(), core.Digest{Hash: digest}, w.address, w.chainID, w.provider) + config, weight, err := sig.Recover(context.Background(), v2.Digest(digest, w.address, w.chainID), w.provider) if err != nil { return false, err } else { - return true, nil + return weight.Cmp(new(big.Int).SetUint64(uint64(config.Threshold()))) >= 0, nil } } else if _, ok := generalWalletConfig.(*v1.WalletConfig); ok { sig, err := v1.Core.DecodeSignature(signature) @@ -730,11 +939,11 @@ func (w *Wallet[C]) IsValidSignature(digest common.Hash, signature []byte) (bool return false, err } - _, _, err = sig.Recover(context.Background(), core.Digest{Hash: digest}, w.address, w.chainID, w.provider) + config, weight, err := sig.Recover(context.Background(), v1.Digest(digest, w.address, w.chainID), w.provider) if err != nil { return false, err } else { - return true, nil + return weight.Cmp(new(big.Int).SetUint64(uint64(config.Threshold()))) >= 0, nil } } else { return false, fmt.Errorf("unknown wallet config type") @@ -743,7 +952,22 @@ func (w *Wallet[C]) IsValidSignature(digest common.Hash, signature []byte) (bool func (w *Wallet[C]) buildSignature(ctx context.Context, sign core.SigningFunction, chainID *big.Int) ([]byte, core.Signature[C], error) { var coreWalletConfig core.WalletConfig = w.config - if config, ok := coreWalletConfig.(*v2.WalletConfig); ok { + + if config, ok := coreWalletConfig.(*v1.WalletConfig); ok { + sig, err := config.BuildSignature(ctx, sign, false) + if err != nil { + return nil, nil, fmt.Errorf("SignDigest, BuildSignature: %w", err) + } + + sigEnc, err := sig.Data() + if err != nil { + return nil, nil, fmt.Errorf("SignDigest, sig.Data: %w", err) + } + + sigTyped, _ := sig.(core.Signature[C]) + // todo: implement core.Signature[core.WalletConfig] wrapper + return sigEnc, sigTyped, nil + } else if config, ok := coreWalletConfig.(*v2.WalletConfig); ok { var ( sig core.Signature[*v2.WalletConfig] err error @@ -768,10 +992,21 @@ func (w *Wallet[C]) buildSignature(ctx context.Context, sign core.SigningFunctio sigTyped, _ := sig.(core.Signature[C]) // todo: implement core.Signature[core.WalletConfig] wrapper return sigEnc, sigTyped, nil - } else if config, ok := coreWalletConfig.(*v1.WalletConfig); ok { - sig, err := config.BuildSignature(ctx, sign, false) - if err != nil { - return nil, nil, fmt.Errorf("SignDigest, BuildSignature: %w", err) + } else if config, ok := coreWalletConfig.(*v3.WalletConfig); ok { + var ( + sig core.Signature[*v3.WalletConfig] + err error + ) + if chainID.Sign() == 0 { + sig, err = config.BuildNoChainIDSignature(ctx, sign, false) + if err != nil { + return nil, nil, fmt.Errorf("SignDigest, BuildNoChainIDSignature: %w", err) + } + } else { + sig, err = config.BuildRegularSignature(ctx, sign, false) + if err != nil { + return nil, nil, fmt.Errorf("SignDigest, BuildRegularSignature: %w", err) + } } sigEnc, err := sig.Data() @@ -807,9 +1042,9 @@ type AuxData struct { } func (a *AuxData) Pack() ([]byte, error) { - return ethcoder.AbiCoder( + return ethcoder.ABIPackArguments( []string{"address", "uint256", "bytes", "bytes"}, - []interface{}{a.Address, a.ChainID, &a.Msg, &a.Sig}, + []any{a.Address, a.ChainID, &a.Msg, &a.Sig}, ) } @@ -833,8 +1068,3 @@ var ( // this is a rare occurence. ImplementationUpdatedEventSig = MustEncodeSig("ImplementationUpdated(address)") ) - -// https://github.com/0xsequence/wallet-contracts/blob/master/src/contracts/Wallet.sol#L57-L59 -const WalletContractBytecode = "0x603a600e3d39601a805130553df3363d3d373d3d3d363d30545af43d82803e903d91601857fd5bf3" - -var walletContractBytecode = common.FromHex(WalletContractBytecode) diff --git a/wallet_test.go b/wallet_test.go index c5b6de04..6083359c 100644 --- a/wallet_test.go +++ b/wallet_test.go @@ -9,10 +9,13 @@ import ( "github.com/0xsequence/ethkit/ethcoder" "github.com/0xsequence/ethkit/ethwallet" "github.com/0xsequence/ethkit/go-ethereum/common" + "github.com/0xsequence/ethkit/go-ethereum/common/hexutil" + "github.com/0xsequence/ethkit/go-ethereum/crypto" "github.com/0xsequence/go-sequence" - "github.com/0xsequence/go-sequence/core" + "github.com/0xsequence/go-sequence/contracts" v1 "github.com/0xsequence/go-sequence/core/v1" v2 "github.com/0xsequence/go-sequence/core/v2" + v3 "github.com/0xsequence/go-sequence/core/v3" "github.com/0xsequence/go-sequence/relayer" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" @@ -28,6 +31,7 @@ func TestWalletAddress(t *testing.T) { w, err := sequence.GenericNewWalletSingleOwner[*v1.WalletConfig](eoa, sequence.WalletContext{ FactoryAddress: common.HexToAddress("0x5FbDB2315678afecb367f032d93F642f64180aa3"), MainModuleAddress: common.HexToAddress("0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512"), + CreationCode: hexutil.Encode(contracts.V1.CreationCode), }) assert.NoError(t, err) @@ -42,11 +46,27 @@ func TestWalletAddress(t *testing.T) { w, err := sequence.GenericNewWalletSingleOwner[*v2.WalletConfig](eoa, sequence.WalletContext{ FactoryAddress: common.HexToAddress("0x5FbDB2315678afecb367f032d93F642f64180aa3"), MainModuleAddress: common.HexToAddress("0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512"), + CreationCode: hexutil.Encode(contracts.V2.CreationCode), }) assert.NoError(t, err) assert.Equal(t, "0x686F888A26CD92E859E504d14Db1c19c58b28b7f", w.Address().Hex()) }) + + t.Run("v3", func(t *testing.T) { + eoa, err := ethwallet.NewWalletFromPrivateKey("2bf2dfccb8c9fb4bb4d46ac9e2b537c373b44ae4c2ee66de92e02f132f7c2237") + assert.NoError(t, err) + assert.Equal(t, "0x1d76701Ba8B8B87Eb36C4cB30B17aea32c22846c", eoa.Address().Hex()) + + w, err := sequence.GenericNewWalletSingleOwner[*v3.WalletConfig](eoa, sequence.WalletContext{ + FactoryAddress: common.HexToAddress("0x5FbDB2315678afecb367f032d93F642f64180aa3"), + MainModuleAddress: common.HexToAddress("0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512"), + CreationCode: hexutil.Encode(contracts.V3.CreationCode), + }) + + assert.NoError(t, err) + assert.Equal(t, "0x565330Ed7BEE8bbE45e68714E08E1316C788B1B2", w.Address().Hex()) + }) } func TestWalletSignMessage(t *testing.T) { @@ -59,6 +79,7 @@ func TestWalletSignMessage(t *testing.T) { wallet, err := sequence.GenericNewWalletSingleOwner[*v1.WalletConfig](eoa, sequence.WalletContext{ FactoryAddress: common.HexToAddress("0x7c2C195CD6D34B8F845992d380aADB2730bB9C6F"), MainModuleAddress: common.HexToAddress("0x8858eeB3DfffA017D4BCE9801D340D36Cf895CCf"), + CreationCode: hexutil.Encode(contracts.V1.CreationCode), }) assert.NoError(t, err) assert.Equal(t, "0xF0BA65550F2d1DCCf4B131B774844DC3d801D886", wallet.Address().Hex()) @@ -84,6 +105,7 @@ func TestWalletSignMessage(t *testing.T) { wallet, err := sequence.GenericNewWalletSingleOwner[*v2.WalletConfig](eoa, sequence.WalletContext{ FactoryAddress: common.HexToAddress("0x7c2C195CD6D34B8F845992d380aADB2730bB9C6F"), MainModuleAddress: common.HexToAddress("0x8858eeB3DfffA017D4BCE9801D340D36Cf895CCf"), + CreationCode: hexutil.Encode(contracts.V2.CreationCode), }) assert.NoError(t, err) assert.Equal(t, "0x8AD6cbc016f72971d317f281497aa080DF87a013", wallet.Address().Hex()) @@ -99,6 +121,31 @@ func TestWalletSignMessage(t *testing.T) { expectedSig := "0x0100010000000000012d1d8f90e8ae7cb4dff2b63643633bb0480ca8ce4c993f3934587e0f2041b4970832b96512cfc5418a125d4110c1e3c8293c515f144d0119b4ab57b2db0c95741c02" assert.Equal(t, expectedSig, ethcoder.HexEncode(sig)) }) + + t.Run("v3", func(t *testing.T) { + eoa, err := ethwallet.NewWalletFromPrivateKey("87306d4b9fe56c2af23c7cc3bc69914eba8f7c8fc1d35b4c9a7dd7ea198a428b") + assert.NoError(t, err) + assert.Equal(t, "0xd63A09C47FDc03e2Cff620446b37f205A7D0679D", eoa.Address().Hex()) + + wallet, err := sequence.GenericNewWalletSingleOwner[*v3.WalletConfig](eoa, sequence.WalletContext{ + FactoryAddress: common.HexToAddress("0x7c2C195CD6D34B8F845992d380aADB2730bB9C6F"), + MainModuleAddress: common.HexToAddress("0x8858eeB3DfffA017D4BCE9801D340D36Cf895CCf"), + CreationCode: hexutil.Encode(contracts.V3.CreationCode), + }) + assert.NoError(t, err) + assert.Equal(t, "0x23B1Ed516DC8900468260286821B5D613E92ea88", wallet.Address().Hex()) + + // we set chainID here for debugging purposes, but in general should not set it manually + wallet.SetChainID(big.NewInt(1)) + + message := "0x1901f0ba65550f2d1dccf4b131b774844dc3d801d886bbd4edcf660f395f21fe94792f7c1da94638270a049646e541004312b3ec1ac5" + + sig, err := wallet.SignMessage(ethcoder.MustHexDecode(message)) + assert.NoError(t, err) + + expectedSig := "0x04000171e56272e8c755c16c70dc72dac8bc75da59a3e707b5aa21341584dbdd702b078405cae8e1125d80b2252370152de698cc66f726f0c36581753bd7360cb9ea8923" + assert.Equal(t, expectedSig, ethcoder.HexEncode(sig)) + }) } func TestWalletSignMessageAndValidate(t *testing.T) { @@ -151,6 +198,30 @@ func TestWalletSignMessageAndValidate(t *testing.T) { assert.NoError(t, err) assert.True(t, isValidSig) }) + + t.Run("v3", func(t *testing.T) { + eoa, err := ethwallet.NewWalletFromPrivateKey("87306d4b9fe56c2af23c7cc3bc69914eba8f7c8fc1d35b4c9a7dd7ea198a428b") + assert.NoError(t, err) + assert.Equal(t, "0xd63A09C47FDc03e2Cff620446b37f205A7D0679D", eoa.Address().Hex()) + + wallet, err := sequence.GenericNewWalletSingleOwner[*v3.WalletConfig](eoa) + assert.NoError(t, err) + assert.Equal(t, "0xE0B1Fc643ec1cF8CdBAa7B31A2dC567bc6a7EBe2", wallet.Address().Hex()) + + wallet.SetProvider(testChain.Provider) + + message := "0x1901f0ba65550f2d1dccf4b131b774844dc3d801d886bbd4edcf660f395f21fe94792f7c1da94638270a049646e541004312b3ec1ac5" + + sig, err := wallet.SignMessage(ethcoder.MustHexDecode(message)) + assert.NoError(t, err) + + expectedSig := "0x04000171c06d6393150f077167a79cb686b6ada918ef792783a89376ac8d71073a4eb93b4f29cbfdd856df8504ddcd758dade6094c310987351c6aab0adbc2dc4a067b41" + assert.Equal(t, expectedSig, ethcoder.HexEncode(sig)) + + isValidSig, err := wallet.IsValidSignature(sequence.MessageDigest(ethcoder.MustHexDecode(message)), sig) + assert.NoError(t, err) + assert.True(t, isValidSig) + }) } func TestWalletDeploy(t *testing.T) { @@ -207,6 +278,33 @@ func TestWalletDeploy(t *testing.T) { assert.NoError(t, err) assert.True(t, isDeployed) }) + + t.Run("v3", func(t *testing.T) { + eoa, err := ethwallet.NewWalletFromRandomEntropy() + assert.NoError(t, err) + + rel, err := relayer.NewLocalRelayer(testChain.MustWallet(0), nil) + require.NoError(t, err) + + wallet, err := sequence.GenericNewWalletSingleOwner[*v3.WalletConfig](eoa) + assert.NoError(t, err) + + err = wallet.SetProvider(testChain.Provider) + require.NoError(t, err) + + err = wallet.SetRelayer(rel) + require.NoError(t, err) + + _, _, wait, err := wallet.Deploy(context.Background()) + assert.NoError(t, err) + + _, err = wait(context.Background()) + require.NoError(t, err) + + isDeployed, err := wallet.IsDeployed() + assert.NoError(t, err) + assert.True(t, isDeployed) + }) } func TestWalletSignAndRecoverConfig(t *testing.T) { @@ -226,7 +324,7 @@ func TestWalletSignAndRecoverConfig(t *testing.T) { s, err := v1.Core.DecodeSignature(sig) assert.NoError(t, err) - recoveredWalletConfig, weight, err := s.Recover(context.Background(), core.Digest{Hash: common.BytesToHash(ethcoder.Keccak256([]byte(message)))}, wallet.Address(), wallet.GetChainID(), testChain.Provider) + recoveredWalletConfig, weight, err := s.Recover(context.Background(), v1.Digest(crypto.Keccak256Hash([]byte(message)), wallet.Address(), wallet.GetChainID()), testChain.Provider) assert.NoError(t, err) assert.Equal(t, uint16(1), recoveredWalletConfig.Threshold_) @@ -254,7 +352,36 @@ func TestWalletSignAndRecoverConfig(t *testing.T) { s, err := v2.Core.DecodeSignature(sig) assert.NoError(t, err) - recoveredWalletConfig, weight, err := s.Recover(context.Background(), core.Digest{Hash: common.BytesToHash(ethcoder.Keccak256([]byte(message)))}, wallet.Address(), wallet.GetChainID(), testChain.Provider) + recoveredWalletConfig, weight, err := s.Recover(context.Background(), v2.Digest(crypto.Keccak256Hash([]byte(message)), wallet.Address(), wallet.GetChainID()), testChain.Provider) + assert.NoError(t, err) + + assert.Equal(t, uint16(1), recoveredWalletConfig.Threshold_) + assert.GreaterOrEqual(t, 0, weight.Cmp(big.NewInt(0).SetUint64(uint64(recoveredWalletConfig.Threshold_)))) + assert.Equal(t, recoveredWalletConfig.Tree.ImageHash(), wallet.GetWalletConfig().Tree.ImageHash()) + + address, err := sequence.AddressFromWalletConfig(recoveredWalletConfig, wallet.GetWalletContext()) + assert.NoError(t, err) + assert.Equal(t, wallet.Address(), address) + }) + + t.Run("v3", func(t *testing.T) { + eoa, err := ethwallet.NewWalletFromRandomEntropy() + assert.NoError(t, err) + + wallet, err := sequence.GenericNewWalletSingleOwner[*v3.WalletConfig](eoa) + assert.NoError(t, err) + + wallet.SetChainID(big.NewInt(3)) + + message := "Hi! this is a test message" + sig, err := wallet.SignMessage([]byte(message)) + assert.NoError(t, err) + + s, err := v3.Core.DecodeSignature(sig) + assert.NoError(t, err) + + // TODO: use v3 + recoveredWalletConfig, weight, err := s.Recover(context.Background(), v2.Digest(crypto.Keccak256Hash([]byte(message)), wallet.Address(), wallet.GetChainID()), testChain.Provider) assert.NoError(t, err) assert.Equal(t, uint16(1), recoveredWalletConfig.Threshold_) @@ -352,6 +479,48 @@ func TestWalletSignAndRecoverConfigOfMultipleSigners(t *testing.T) { assert.NoError(t, err) assert.Equal(t, wallet.Address(), address) }) + + t.Run("v3", func(t *testing.T) { + eoa1, err := ethwallet.NewWalletFromRandomEntropy() + assert.NoError(t, err) + + eoa2, err := ethwallet.NewWalletFromRandomEntropy() + assert.NoError(t, err) + + walletConfig := &v3.WalletConfig{ + Threshold_: 3, + Tree: &v3.WalletConfigTreeNode{ + Left: &v3.WalletConfigTreeAddressLeaf{ + Weight: 2, Address: eoa1.Address(), + }, + Right: &v3.WalletConfigTreeAddressLeaf{ + Weight: 5, Address: eoa2.Address(), + }, + }, + } + + wallet, err := sequence.GenericNewWallet[*v3.WalletConfig](sequence.WalletOptions[*v3.WalletConfig]{ + Config: walletConfig, + }, eoa1) + assert.NoError(t, err) + + wallet.SetChainID(big.NewInt(3)) + + message := "Hi! this is a test message" + sig, err := wallet.SignMessage([]byte(message)) + assert.NoError(t, err) + + recoveredWalletConfig, weight, err := sequence.GenericRecoverWalletConfigFromDigest[*v3.WalletConfig](ethcoder.Keccak256([]byte(message)), sig, wallet.Address(), wallet.GetWalletContext(), wallet.GetChainID(), testChain.Provider) + assert.NoError(t, err) + + assert.Equal(t, uint16(3), recoveredWalletConfig.Threshold()) + assert.Equal(t, weight.Cmp(big.NewInt(int64(2))), 0) + assert.Len(t, recoveredWalletConfig.Signers(), 2) + + address, err := sequence.AddressFromWalletConfig(walletConfig, wallet.GetWalletContext()) + assert.NoError(t, err) + assert.Equal(t, wallet.Address(), address) + }) } func TestShouldIgnoreConfigSortV1(t *testing.T) {